@timbal-ai/timbal-react 1.4.0 → 1.5.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/CHANGELOG.md +14 -0
- package/README.md +18 -4
- package/dist/app.cjs +3532 -1483
- package/dist/app.d.cts +75 -30
- package/dist/app.d.ts +75 -30
- package/dist/app.esm.js +29 -7
- package/dist/{chart-artifact-CMnDys2t.d.ts → chart-artifact-2OTDTRwM.d.ts} +194 -40
- package/dist/{chart-artifact-C8-Py6lc.d.cts → chart-artifact-CS3qyGIY.d.cts} +194 -40
- package/dist/chat.cjs +264 -107
- package/dist/chat.d.cts +2 -2
- package/dist/chat.d.ts +2 -2
- package/dist/chat.esm.js +4 -3
- package/dist/chunk-5ECRZ5O7.esm.js +899 -0
- package/dist/{chunk-QU7ET55D.esm.js → chunk-AZL2WANO.esm.js} +320 -177
- package/dist/{chunk-OH23AX2V.esm.js → chunk-B4XAC4G7.esm.js} +430 -780
- package/dist/chunk-EDEKQYSU.esm.js +10 -0
- package/dist/{chunk-GQBYZRD7.esm.js → chunk-IGHBLJV3.esm.js} +38 -27
- package/dist/{chunk-OFWC4MIY.esm.js → chunk-JYDJRGDE.esm.js} +5 -3
- package/dist/{chunk-VOWNCS3F.esm.js → chunk-SZDYIRMB.esm.js} +1567 -490
- package/dist/chunk-TZI3ID3C.esm.js +232 -0
- package/dist/{chunk-THBA27QY.esm.js → chunk-WMKPT5BV.esm.js} +242 -123
- package/dist/{chunk-VXMM2HX7.esm.js → chunk-ZNYAETFD.esm.js} +1 -1
- package/dist/{circular-progress-Ci8L-Hfa.d.cts → circular-progress-CDsJwIPF.d.cts} +19 -77
- package/dist/{circular-progress-Ci8L-Hfa.d.ts → circular-progress-CDsJwIPF.d.ts} +19 -77
- package/dist/index.cjs +5506 -3626
- package/dist/index.d.cts +7 -6
- package/dist/index.d.ts +7 -6
- package/dist/index.esm.js +45 -33
- package/dist/kanban-U5xNe9py.d.cts +212 -0
- package/dist/kanban-U5xNe9py.d.ts +212 -0
- package/dist/{layout-BTJyU8wd.d.ts → layout-B8r6Jbat.d.ts} +1 -1
- package/dist/{layout-C2G-FcER.d.cts → layout-Cu7Ijn04.d.cts} +1 -1
- package/dist/site.cjs +358 -0
- package/dist/site.d.cts +184 -0
- package/dist/site.d.ts +184 -0
- package/dist/site.esm.js +322 -0
- package/dist/studio.cjs +702 -343
- package/dist/studio.d.cts +1 -1
- package/dist/studio.d.ts +1 -1
- package/dist/studio.esm.js +7 -5
- package/dist/styles.css +56 -0
- package/dist/{timbal-v2-button-CNfdwGq4.d.cts → timbal-v2-button-B7vPs7gg.d.cts} +2 -2
- package/dist/{timbal-v2-button-CNfdwGq4.d.ts → timbal-v2-button-B7vPs7gg.d.ts} +2 -2
- package/dist/ui.cjs +1504 -659
- package/dist/ui.d.cts +11 -4
- package/dist/ui.d.ts +11 -4
- package/dist/ui.esm.js +35 -26
- package/dist/{welcome-DXqsGTwH.d.ts → welcome-DduQAC4K.d.ts} +4 -0
- package/dist/{welcome-BFGRoNfK.d.cts → welcome-NXZlcihe.d.cts} +4 -0
- package/package.json +9 -1
- package/dist/button-BoyX5pM_.d.cts +0 -18
- package/dist/button-BoyX5pM_.d.ts +0 -18
- package/dist/chunk-UCGVL7ZY.esm.js +0 -52
package/dist/ui.cjs
CHANGED
|
@@ -169,6 +169,7 @@ __export(ui_exports, {
|
|
|
169
169
|
InputOTPHiddenInput: () => InputOTPHiddenInput,
|
|
170
170
|
InputOTPSeparator: () => InputOTPSeparator,
|
|
171
171
|
InputOTPSlot: () => InputOTPSlot,
|
|
172
|
+
Kanban: () => Kanban,
|
|
172
173
|
Kbd: () => Kbd,
|
|
173
174
|
KbdGroup: () => KbdGroup,
|
|
174
175
|
Label: () => Label,
|
|
@@ -273,6 +274,7 @@ __export(ui_exports, {
|
|
|
273
274
|
TooltipContent: () => TooltipContent,
|
|
274
275
|
TooltipProvider: () => TooltipProvider,
|
|
275
276
|
TooltipTrigger: () => TooltipTrigger,
|
|
277
|
+
UntitledButton: () => UntitledButton,
|
|
276
278
|
alertVariants: () => alertVariants,
|
|
277
279
|
avatarChartVariantClass: () => avatarChartVariantClass,
|
|
278
280
|
badgeVariants: () => badgeVariants,
|
|
@@ -286,6 +288,7 @@ __export(ui_exports, {
|
|
|
286
288
|
overlaySurfaceClass: () => overlaySurfaceClass,
|
|
287
289
|
toast: () => toast,
|
|
288
290
|
toggleVariants: () => toggleVariants,
|
|
291
|
+
untitledButtonVariants: () => untitledButtonVariants,
|
|
289
292
|
useChart: () => useChart,
|
|
290
293
|
useToast: () => useToast
|
|
291
294
|
});
|
|
@@ -293,6 +296,7 @@ module.exports = __toCommonJS(ui_exports);
|
|
|
293
296
|
|
|
294
297
|
// src/ui/button.tsx
|
|
295
298
|
var import_class_variance_authority = require("class-variance-authority");
|
|
299
|
+
var import_radix_ui = require("radix-ui");
|
|
296
300
|
|
|
297
301
|
// src/utils.ts
|
|
298
302
|
var import_clsx = require("clsx");
|
|
@@ -301,6 +305,387 @@ function cn(...inputs) {
|
|
|
301
305
|
return (0, import_tailwind_merge.twMerge)((0, import_clsx.clsx)(inputs));
|
|
302
306
|
}
|
|
303
307
|
|
|
308
|
+
// src/ui/button.tsx
|
|
309
|
+
var import_jsx_runtime = require("react/jsx-runtime");
|
|
310
|
+
var SOLID_SKEUOMORPHIC_SHADOW = "shadow-skeuomorphic-solid";
|
|
311
|
+
var BORDERED_SKEUOMORPHIC_SHADOW = "shadow-skeuomorphic-bordered";
|
|
312
|
+
var buttonVariants = (0, import_class_variance_authority.cva)(
|
|
313
|
+
cn(
|
|
314
|
+
"relative inline-flex shrink-0 cursor-pointer select-none items-center justify-center whitespace-nowrap font-medium",
|
|
315
|
+
"transition-all duration-300 ease-in-out outline-none border",
|
|
316
|
+
"focus-visible:ring-4 focus-visible:ring-primary/20 focus-visible:ring-offset-0",
|
|
317
|
+
"disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:pointer-events-none",
|
|
318
|
+
"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5",
|
|
319
|
+
// Overflow hidden can clip out-of-bounds shadow, so we use precise overflow management and rounded-[inherit] on pseudo overlays
|
|
320
|
+
"after:absolute after:inset-0 after:rounded-[inherit] after:pointer-events-none after:transition-opacity after:duration-300 after:ease-in-out after:opacity-0"
|
|
321
|
+
),
|
|
322
|
+
{
|
|
323
|
+
variants: {
|
|
324
|
+
color: {
|
|
325
|
+
primary: cn(
|
|
326
|
+
// Exact Premium Untitled UI primary BLACK / dark charcoal: gradient + borders
|
|
327
|
+
"bg-gradient-to-b from-[#344054] to-[#0F1117] text-white border-[#1A1E29]",
|
|
328
|
+
"hover:border-[#181C26]",
|
|
329
|
+
"active:border-[#0A0D14]",
|
|
330
|
+
SOLID_SKEUOMORPHIC_SHADOW,
|
|
331
|
+
// Hover/active overlays for beautiful animation (the gradient is static, the overlay opacity is transitioned)
|
|
332
|
+
"after:bg-white/[0.08] hover:after:opacity-100 active:after:bg-black/[0.12]",
|
|
333
|
+
// Premium Dark Mode inversion: Primary becomes white, popping out elegantly
|
|
334
|
+
"dark:bg-gradient-to-b dark:from-white dark:to-[#F9FAFB] dark:text-[#10121C] dark:border-white",
|
|
335
|
+
"dark:hover:border-[#D0D5DD] dark:hover:text-[#10121C]",
|
|
336
|
+
"dark:shadow-skeuomorphic-bordered",
|
|
337
|
+
"dark:after:bg-black/[0.04] dark:active:after:bg-black/[0.08]"
|
|
338
|
+
),
|
|
339
|
+
secondary: cn(
|
|
340
|
+
// Exact Untitled UI secondary: premium white/gray gradient + borders
|
|
341
|
+
"bg-gradient-to-b from-white to-[#F9FAFB] text-[#344054] border-[#D0D5DD]",
|
|
342
|
+
"hover:text-[#1D2939] hover:border-[#D0D5DD]",
|
|
343
|
+
BORDERED_SKEUOMORPHIC_SHADOW,
|
|
344
|
+
// Hover/active overlays for white/gray gradient
|
|
345
|
+
"after:bg-black/[0.03] hover:after:opacity-100 active:after:bg-black/[0.08]",
|
|
346
|
+
// Premium Dark Mode inversion: Secondary becomes dark charcoal/gray, merging into the background
|
|
347
|
+
"dark:bg-gradient-to-b dark:from-[#1F242F] dark:to-[#10121C] dark:text-[#D1D5DB] dark:border-[#344054]",
|
|
348
|
+
"dark:hover:border-[#475467] dark:hover:text-white",
|
|
349
|
+
"dark:shadow-skeuomorphic-solid",
|
|
350
|
+
"dark:after:bg-white/[0.06] dark:active:after:bg-black/[0.15]"
|
|
351
|
+
),
|
|
352
|
+
tertiary: cn(
|
|
353
|
+
"bg-transparent text-[#475467] border-transparent",
|
|
354
|
+
"hover:bg-[#F9FAFB] hover:text-[#344054]",
|
|
355
|
+
"active:bg-[#F2F4F7] active:text-[#1D2939]",
|
|
356
|
+
"after:hidden",
|
|
357
|
+
// No overlay needed for transparent surfaces
|
|
358
|
+
// Dark Mode
|
|
359
|
+
"dark:text-[#9CA3AF] dark:hover:bg-[#1F242F] dark:hover:text-white dark:active:bg-[#11131A]"
|
|
360
|
+
),
|
|
361
|
+
link: cn(
|
|
362
|
+
"h-auto! bg-transparent p-0! border-transparent text-[#1F242F] hover:text-[#10121C]",
|
|
363
|
+
"hover:underline",
|
|
364
|
+
"after:hidden",
|
|
365
|
+
// Dark Mode
|
|
366
|
+
"dark:text-[#9CA3AF] dark:hover:text-white"
|
|
367
|
+
),
|
|
368
|
+
"primary-destructive": cn(
|
|
369
|
+
// Exact Untitled UI primary destructive: premium red gradient + borders (vibrant and subtle, not too dark)
|
|
370
|
+
"bg-gradient-to-b from-[#D92D20] to-[#B42318] text-white border-[#B42318]",
|
|
371
|
+
"hover:border-[#9E1B12]",
|
|
372
|
+
"active:border-[#84140D]",
|
|
373
|
+
SOLID_SKEUOMORPHIC_SHADOW,
|
|
374
|
+
// Destructive red hover/active overlays
|
|
375
|
+
"after:bg-white/[0.12] hover:after:opacity-100 active:after:bg-black/[0.15]"
|
|
376
|
+
),
|
|
377
|
+
"secondary-destructive": cn(
|
|
378
|
+
// Exact Untitled UI secondary destructive: soft red bordered
|
|
379
|
+
"bg-gradient-to-b from-white to-[#F9FAFB] text-[#B42318] border-[#FDA29B]",
|
|
380
|
+
"hover:text-[#9E1B12] hover:border-[#FDA29B]",
|
|
381
|
+
BORDERED_SKEUOMORPHIC_SHADOW,
|
|
382
|
+
// Hover overlay
|
|
383
|
+
"after:bg-red-500/[0.04] hover:after:opacity-100 active:after:bg-red-950/[0.08]",
|
|
384
|
+
// Dark Mode Secondary Destructive: Charcoal fill with red borders and label
|
|
385
|
+
"dark:bg-gradient-to-b dark:from-[#1F242F] dark:to-[#10121C] dark:text-[#F87171] dark:border-[#9E1B12]/50",
|
|
386
|
+
"dark:hover:border-[#F87171]/40",
|
|
387
|
+
"dark:shadow-skeuomorphic-solid",
|
|
388
|
+
"dark:after:bg-white/[0.06] dark:active:after:bg-black/[0.15]"
|
|
389
|
+
)
|
|
390
|
+
},
|
|
391
|
+
size: {
|
|
392
|
+
xs: "h-8 gap-1 rounded-md px-2.5 text-xs",
|
|
393
|
+
sm: "h-9 gap-1.5 rounded-lg px-3 text-sm",
|
|
394
|
+
md: "h-10 gap-1.5 rounded-lg px-3.5 text-sm",
|
|
395
|
+
lg: "h-11 gap-2 rounded-lg px-4 text-base",
|
|
396
|
+
xl: "h-12 gap-2 rounded-lg px-5 text-base",
|
|
397
|
+
default: "h-10 gap-1.5 rounded-lg px-3.5 text-sm",
|
|
398
|
+
icon: "h-10 w-10 rounded-lg",
|
|
399
|
+
"icon-xs": "h-8 w-8 rounded-md",
|
|
400
|
+
"icon-sm": "h-9 w-9 rounded-lg",
|
|
401
|
+
"icon-lg": "h-11 w-11 rounded-lg"
|
|
402
|
+
},
|
|
403
|
+
shape: {
|
|
404
|
+
pill: "rounded-full!",
|
|
405
|
+
rounded: ""
|
|
406
|
+
// defaults to the size variant's standard rounded-lg
|
|
407
|
+
}
|
|
408
|
+
},
|
|
409
|
+
defaultVariants: {
|
|
410
|
+
color: "primary",
|
|
411
|
+
size: "default",
|
|
412
|
+
shape: "rounded"
|
|
413
|
+
}
|
|
414
|
+
}
|
|
415
|
+
);
|
|
416
|
+
function Button({
|
|
417
|
+
className,
|
|
418
|
+
variant,
|
|
419
|
+
color,
|
|
420
|
+
size,
|
|
421
|
+
shape,
|
|
422
|
+
iconLeading,
|
|
423
|
+
iconTrailing,
|
|
424
|
+
isLoading = false,
|
|
425
|
+
asChild = false,
|
|
426
|
+
disabled,
|
|
427
|
+
type = "button",
|
|
428
|
+
children,
|
|
429
|
+
...props
|
|
430
|
+
}) {
|
|
431
|
+
const isDisabled = disabled || isLoading;
|
|
432
|
+
let resolvedColor = "primary";
|
|
433
|
+
if (color) {
|
|
434
|
+
resolvedColor = color;
|
|
435
|
+
} else if (variant) {
|
|
436
|
+
if (variant === "default" || variant === "informative") resolvedColor = "primary";
|
|
437
|
+
else if (variant === "secondary" || variant === "outline") resolvedColor = "secondary";
|
|
438
|
+
else if (variant === "destructive") resolvedColor = "primary-destructive";
|
|
439
|
+
else if (variant === "ghost") resolvedColor = "tertiary";
|
|
440
|
+
else if (variant === "link") resolvedColor = "link";
|
|
441
|
+
}
|
|
442
|
+
const classes = cn(
|
|
443
|
+
buttonVariants({
|
|
444
|
+
color: resolvedColor,
|
|
445
|
+
size: size ?? "default",
|
|
446
|
+
shape: shape ?? "rounded"
|
|
447
|
+
}),
|
|
448
|
+
className
|
|
449
|
+
);
|
|
450
|
+
if (asChild) {
|
|
451
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
452
|
+
import_radix_ui.Slot.Root,
|
|
453
|
+
{
|
|
454
|
+
className: classes,
|
|
455
|
+
"aria-disabled": isDisabled ? true : void 0,
|
|
456
|
+
"data-slot": "button",
|
|
457
|
+
"data-variant": resolvedColor,
|
|
458
|
+
...props,
|
|
459
|
+
children
|
|
460
|
+
}
|
|
461
|
+
);
|
|
462
|
+
}
|
|
463
|
+
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
464
|
+
"button",
|
|
465
|
+
{
|
|
466
|
+
type,
|
|
467
|
+
disabled: isDisabled,
|
|
468
|
+
"data-slot": "button",
|
|
469
|
+
"data-variant": resolvedColor,
|
|
470
|
+
className: classes,
|
|
471
|
+
...props,
|
|
472
|
+
children: [
|
|
473
|
+
isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
474
|
+
"span",
|
|
475
|
+
{
|
|
476
|
+
"aria-hidden": true,
|
|
477
|
+
className: "size-4 animate-spin rounded-full border-2 border-current border-t-transparent"
|
|
478
|
+
}
|
|
479
|
+
) : iconLeading,
|
|
480
|
+
children,
|
|
481
|
+
!isLoading ? iconTrailing : null
|
|
482
|
+
]
|
|
483
|
+
}
|
|
484
|
+
);
|
|
485
|
+
}
|
|
486
|
+
|
|
487
|
+
// src/ui/untitled-button.tsx
|
|
488
|
+
var import_class_variance_authority2 = require("class-variance-authority");
|
|
489
|
+
var import_radix_ui2 = require("radix-ui");
|
|
490
|
+
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
491
|
+
var SOLID_SKEUOMORPHIC_SHADOW2 = "shadow-skeuomorphic-solid";
|
|
492
|
+
var BORDERED_SKEUOMORPHIC_SHADOW2 = "shadow-skeuomorphic-bordered";
|
|
493
|
+
var untitledButtonVariants = (0, import_class_variance_authority2.cva)(
|
|
494
|
+
cn(
|
|
495
|
+
"relative inline-flex shrink-0 cursor-pointer select-none items-center justify-center whitespace-nowrap font-medium",
|
|
496
|
+
"transition-all duration-300 ease-in-out outline-none border",
|
|
497
|
+
"focus-visible:ring-4 focus-visible:ring-primary/20 focus-visible:ring-offset-0",
|
|
498
|
+
"disabled:pointer-events-none disabled:opacity-50 aria-disabled:pointer-events-none aria-disabled:opacity-50",
|
|
499
|
+
"[&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-5",
|
|
500
|
+
// Overflow hidden can clip out-of-bounds shadow, so we use precise overflow management and rounded-[inherit] on pseudo overlays
|
|
501
|
+
"after:absolute after:inset-0 after:rounded-[inherit] after:pointer-events-none after:transition-opacity after:duration-300 after:ease-in-out after:opacity-0"
|
|
502
|
+
),
|
|
503
|
+
{
|
|
504
|
+
variants: {
|
|
505
|
+
color: {
|
|
506
|
+
primary: cn(
|
|
507
|
+
// Exact Premium Untitled UI primary BLACK / dark charcoal: gradient + borders
|
|
508
|
+
"bg-gradient-to-b from-[#344054] to-[#0F1117] text-white border-[#1A1E29]",
|
|
509
|
+
"hover:border-[#181C26]",
|
|
510
|
+
"active:border-[#0A0D14]",
|
|
511
|
+
SOLID_SKEUOMORPHIC_SHADOW2,
|
|
512
|
+
// Hover/active overlays for beautiful animation (the gradient is static, the overlay opacity is transitioned)
|
|
513
|
+
"after:bg-white/[0.08] hover:after:opacity-100 active:after:bg-black/[0.12]",
|
|
514
|
+
// Premium Dark Mode inversion: Primary becomes white, popping out elegantly
|
|
515
|
+
"dark:bg-gradient-to-b dark:from-white dark:to-[#F9FAFB] dark:text-[#10121C] dark:border-white",
|
|
516
|
+
"dark:hover:border-[#D0D5DD] dark:hover:text-[#10121C]",
|
|
517
|
+
"dark:shadow-skeuomorphic-bordered",
|
|
518
|
+
"dark:after:bg-black/[0.04] dark:active:after:bg-black/[0.08]"
|
|
519
|
+
),
|
|
520
|
+
secondary: cn(
|
|
521
|
+
// Exact Untitled UI secondary: premium white/gray gradient + borders
|
|
522
|
+
"bg-gradient-to-b from-white to-[#F9FAFB] text-[#344054] border-[#D0D5DD]",
|
|
523
|
+
"hover:text-[#1D2939] hover:border-[#D0D5DD]",
|
|
524
|
+
BORDERED_SKEUOMORPHIC_SHADOW2,
|
|
525
|
+
// Hover/active overlays for white/gray gradient
|
|
526
|
+
"after:bg-black/[0.03] hover:after:opacity-100 active:after:bg-black/[0.08]",
|
|
527
|
+
// Premium Dark Mode inversion: Secondary becomes dark charcoal/gray, merging into the background
|
|
528
|
+
"dark:bg-gradient-to-b dark:from-[#1F242F] dark:to-[#10121C] dark:text-[#D1D5DB] dark:border-[#344054]",
|
|
529
|
+
"dark:hover:border-[#475467] dark:hover:text-white",
|
|
530
|
+
"dark:shadow-skeuomorphic-solid",
|
|
531
|
+
"dark:after:bg-white/[0.06] dark:active:after:bg-black/[0.15]"
|
|
532
|
+
),
|
|
533
|
+
tertiary: cn(
|
|
534
|
+
"bg-transparent text-[#475467] border-transparent",
|
|
535
|
+
"hover:bg-[#F9FAFB] hover:text-[#344054]",
|
|
536
|
+
"active:bg-[#F2F4F7] active:text-[#1D2939]",
|
|
537
|
+
"after:hidden",
|
|
538
|
+
// No overlay needed for transparent surfaces
|
|
539
|
+
// Dark Mode
|
|
540
|
+
"dark:text-[#9CA3AF] dark:hover:bg-[#1F242F] dark:hover:text-white dark:active:bg-[#11131A]"
|
|
541
|
+
),
|
|
542
|
+
link: cn(
|
|
543
|
+
"h-auto! bg-transparent p-0! border-transparent text-[#1F242F] hover:text-[#10121C]",
|
|
544
|
+
"hover:underline",
|
|
545
|
+
"after:hidden",
|
|
546
|
+
// Dark Mode
|
|
547
|
+
"dark:text-[#9CA3AF] dark:hover:text-white"
|
|
548
|
+
),
|
|
549
|
+
"primary-destructive": cn(
|
|
550
|
+
// Exact Untitled UI primary destructive: premium red gradient + borders (vibrant and subtle, not too dark)
|
|
551
|
+
"bg-gradient-to-b from-[#D92D20] to-[#B42318] text-white border-[#B42318]",
|
|
552
|
+
"hover:border-[#9E1B12]",
|
|
553
|
+
"active:border-[#84140D]",
|
|
554
|
+
SOLID_SKEUOMORPHIC_SHADOW2,
|
|
555
|
+
// Destructive red hover/active overlays
|
|
556
|
+
"after:bg-white/[0.12] hover:after:opacity-100 active:after:bg-black/[0.15]"
|
|
557
|
+
),
|
|
558
|
+
"secondary-destructive": cn(
|
|
559
|
+
// Exact Untitled UI secondary destructive: soft red bordered
|
|
560
|
+
"bg-gradient-to-b from-white to-[#F9FAFB] text-[#B42318] border-[#FDA29B]",
|
|
561
|
+
"hover:text-[#9E1B12] hover:border-[#FDA29B]",
|
|
562
|
+
BORDERED_SKEUOMORPHIC_SHADOW2,
|
|
563
|
+
// Hover overlay
|
|
564
|
+
"after:bg-red-500/[0.04] hover:after:opacity-100 active:after:bg-red-950/[0.08]",
|
|
565
|
+
// Dark Mode Secondary Destructive: Charcoal fill with red borders and label
|
|
566
|
+
"dark:bg-gradient-to-b dark:from-[#1F242F] dark:to-[#10121C] dark:text-[#F87171] dark:border-[#9E1B12]/50",
|
|
567
|
+
"dark:hover:border-[#F87171]/40",
|
|
568
|
+
"dark:shadow-skeuomorphic-solid",
|
|
569
|
+
"dark:after:bg-white/[0.06] dark:active:after:bg-black/[0.15]"
|
|
570
|
+
)
|
|
571
|
+
},
|
|
572
|
+
size: {
|
|
573
|
+
sm: "h-9 gap-1.5 rounded-lg px-3 text-sm",
|
|
574
|
+
md: "h-10 gap-1.5 rounded-lg px-3.5 text-sm",
|
|
575
|
+
lg: "h-11 gap-2 rounded-lg px-4 text-base",
|
|
576
|
+
xl: "h-12 gap-2 rounded-lg px-5 text-base"
|
|
577
|
+
}
|
|
578
|
+
},
|
|
579
|
+
defaultVariants: {
|
|
580
|
+
color: "primary",
|
|
581
|
+
size: "md"
|
|
582
|
+
}
|
|
583
|
+
}
|
|
584
|
+
);
|
|
585
|
+
function UntitledButton({
|
|
586
|
+
className,
|
|
587
|
+
color,
|
|
588
|
+
size,
|
|
589
|
+
iconLeading,
|
|
590
|
+
iconTrailing,
|
|
591
|
+
isLoading = false,
|
|
592
|
+
asChild = false,
|
|
593
|
+
disabled,
|
|
594
|
+
type = "button",
|
|
595
|
+
children,
|
|
596
|
+
...props
|
|
597
|
+
}) {
|
|
598
|
+
const isDisabled = disabled || isLoading;
|
|
599
|
+
const classes = cn(untitledButtonVariants({ color, size }), className);
|
|
600
|
+
if (asChild) {
|
|
601
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
602
|
+
import_radix_ui2.Slot.Root,
|
|
603
|
+
{
|
|
604
|
+
className: classes,
|
|
605
|
+
"aria-disabled": isDisabled ? true : void 0,
|
|
606
|
+
"data-slot": "untitled-button",
|
|
607
|
+
...props,
|
|
608
|
+
children
|
|
609
|
+
}
|
|
610
|
+
);
|
|
611
|
+
}
|
|
612
|
+
return /* @__PURE__ */ (0, import_jsx_runtime2.jsxs)(
|
|
613
|
+
"button",
|
|
614
|
+
{
|
|
615
|
+
type,
|
|
616
|
+
disabled: isDisabled,
|
|
617
|
+
"data-slot": "untitled-button",
|
|
618
|
+
className: classes,
|
|
619
|
+
...props,
|
|
620
|
+
children: [
|
|
621
|
+
isLoading ? /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
622
|
+
"span",
|
|
623
|
+
{
|
|
624
|
+
"aria-hidden": true,
|
|
625
|
+
className: "size-4 animate-spin rounded-full border-2 border-current border-t-transparent"
|
|
626
|
+
}
|
|
627
|
+
) : iconLeading,
|
|
628
|
+
children,
|
|
629
|
+
!isLoading ? iconTrailing : null
|
|
630
|
+
]
|
|
631
|
+
}
|
|
632
|
+
);
|
|
633
|
+
}
|
|
634
|
+
|
|
635
|
+
// src/ui/tooltip.tsx
|
|
636
|
+
var import_radix_ui3 = require("radix-ui");
|
|
637
|
+
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
638
|
+
function TooltipProvider({
|
|
639
|
+
delayDuration = 0,
|
|
640
|
+
...props
|
|
641
|
+
}) {
|
|
642
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
643
|
+
import_radix_ui3.Tooltip.Provider,
|
|
644
|
+
{
|
|
645
|
+
"data-slot": "tooltip-provider",
|
|
646
|
+
delayDuration,
|
|
647
|
+
...props
|
|
648
|
+
}
|
|
649
|
+
);
|
|
650
|
+
}
|
|
651
|
+
function Tooltip({
|
|
652
|
+
...props
|
|
653
|
+
}) {
|
|
654
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_radix_ui3.Tooltip.Root, { "data-slot": "tooltip", ...props });
|
|
655
|
+
}
|
|
656
|
+
function TooltipTrigger({
|
|
657
|
+
...props
|
|
658
|
+
}) {
|
|
659
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_radix_ui3.Tooltip.Trigger, { "data-slot": "tooltip-trigger", ...props });
|
|
660
|
+
}
|
|
661
|
+
function TooltipContent({
|
|
662
|
+
className,
|
|
663
|
+
sideOffset = 0,
|
|
664
|
+
children,
|
|
665
|
+
...props
|
|
666
|
+
}) {
|
|
667
|
+
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_radix_ui3.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
668
|
+
import_radix_ui3.Tooltip.Content,
|
|
669
|
+
{
|
|
670
|
+
"data-slot": "tooltip-content",
|
|
671
|
+
sideOffset,
|
|
672
|
+
className: cn(
|
|
673
|
+
"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-2.5 py-1 text-xs text-balance",
|
|
674
|
+
className
|
|
675
|
+
),
|
|
676
|
+
...props,
|
|
677
|
+
children: [
|
|
678
|
+
children,
|
|
679
|
+
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_radix_ui3.Tooltip.Arrow, { className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })
|
|
680
|
+
]
|
|
681
|
+
}
|
|
682
|
+
) });
|
|
683
|
+
}
|
|
684
|
+
|
|
685
|
+
// src/ui/avatar.tsx
|
|
686
|
+
var React = __toESM(require("react"), 1);
|
|
687
|
+
var import_radix_ui4 = require("radix-ui");
|
|
688
|
+
|
|
304
689
|
// src/design/button-tokens.ts
|
|
305
690
|
var TIMBAL_V2_ELEVATED_GRADIENT = "bg-gradient-to-b from-elevated-from to-elevated-to";
|
|
306
691
|
var TIMBAL_V2_MODAL_SURFACE = cn(
|
|
@@ -308,14 +693,6 @@ var TIMBAL_V2_MODAL_SURFACE = cn(
|
|
|
308
693
|
"border border-border shadow-card-elevated"
|
|
309
694
|
);
|
|
310
695
|
var TIMBAL_V2_PRIMARY_GRADIENT = "bg-gradient-to-b from-primary-fill-from to-primary-fill-to";
|
|
311
|
-
var TIMBAL_V2_FROM_LEGACY_BUTTON = {
|
|
312
|
-
default: "primary",
|
|
313
|
-
destructive: "destructive",
|
|
314
|
-
outline: "secondary",
|
|
315
|
-
secondary: "secondary",
|
|
316
|
-
ghost: "ghost",
|
|
317
|
-
link: "link"
|
|
318
|
-
};
|
|
319
696
|
var TIMBAL_V2_SIZE_HEIGHT = {
|
|
320
697
|
xs: "min-h-8 h-8",
|
|
321
698
|
sm: "min-h-9 h-9",
|
|
@@ -351,6 +728,11 @@ var TIMBAL_V2_FILL = {
|
|
|
351
728
|
"group-hover/tbv2:from-destructive-fill-hover-from group-hover/tbv2:to-destructive-fill-hover-to",
|
|
352
729
|
"group-active/tbv2:from-destructive-fill-active-from group-active/tbv2:to-destructive-fill-active-to"
|
|
353
730
|
].join(" "),
|
|
731
|
+
"destructive-solid": [
|
|
732
|
+
"bg-gradient-to-b from-destructive-solid-from to-destructive-solid-to",
|
|
733
|
+
"group-hover/tbv2:from-destructive-solid-hover-from group-hover/tbv2:to-destructive-solid-hover-to",
|
|
734
|
+
"group-active/tbv2:from-destructive-solid-active-from group-active/tbv2:to-destructive-solid-active-to"
|
|
735
|
+
].join(" "),
|
|
354
736
|
secondary: [
|
|
355
737
|
TIMBAL_V2_ELEVATED_GRADIENT,
|
|
356
738
|
"group-hover/tbv2:from-secondary-fill-hover-from group-hover/tbv2:to-secondary-fill-hover-to",
|
|
@@ -367,6 +749,7 @@ var TIMBAL_V2_LABEL = {
|
|
|
367
749
|
primary: "text-primary-foreground",
|
|
368
750
|
informative: "text-primary-foreground",
|
|
369
751
|
destructive: "text-destructive",
|
|
752
|
+
"destructive-solid": "text-destructive-foreground",
|
|
370
753
|
secondary: "text-foreground",
|
|
371
754
|
ghost: "text-foreground",
|
|
372
755
|
link: "text-foreground underline decoration-foreground/25 underline-offset-2 group-hover/tbv2:decoration-foreground/45"
|
|
@@ -375,6 +758,7 @@ var TIMBAL_V2_BORDER = {
|
|
|
375
758
|
primary: "",
|
|
376
759
|
informative: "border border-foreground/15",
|
|
377
760
|
destructive: "border border-destructive/45",
|
|
761
|
+
"destructive-solid": "",
|
|
378
762
|
secondary: "border border-border",
|
|
379
763
|
ghost: "",
|
|
380
764
|
link: ""
|
|
@@ -383,6 +767,7 @@ var TIMBAL_V2_SHADOW = {
|
|
|
383
767
|
primary: "shadow-card",
|
|
384
768
|
informative: "shadow-card",
|
|
385
769
|
destructive: "shadow-card",
|
|
770
|
+
"destructive-solid": "shadow-card",
|
|
386
771
|
secondary: "shadow-card",
|
|
387
772
|
ghost: "",
|
|
388
773
|
link: ""
|
|
@@ -420,270 +805,26 @@ var TIMBAL_V2_SWITCH_TRACK_OFF = cn(
|
|
|
420
805
|
);
|
|
421
806
|
var TIMBAL_V2_SWITCH_THUMB = cn(
|
|
422
807
|
TIMBAL_V2_ELEVATED_GRADIENT,
|
|
423
|
-
"border border-border/80 shadow-sm"
|
|
424
|
-
);
|
|
425
|
-
var TIMBAL_V2_ELEVATED_SURFACE = cn(
|
|
426
|
-
TIMBAL_V2_ELEVATED_GRADIENT,
|
|
427
|
-
"border border-border shadow-card"
|
|
428
|
-
);
|
|
429
|
-
var TIMBAL_V2_SECONDARY_CHROME = [
|
|
430
|
-
TIMBAL_V2_ELEVATED_GRADIENT,
|
|
431
|
-
"border border-border shadow-card",
|
|
432
|
-
"transition-[background-color,box-shadow,border-color] duration-200 ease-in-out",
|
|
433
|
-
"hover:from-secondary-fill-hover-from hover:to-secondary-fill-hover-to",
|
|
434
|
-
"active:from-secondary-fill-active-from active:to-secondary-fill-active-to"
|
|
435
|
-
].join(" ");
|
|
436
|
-
var TIMBAL_V2_LOGO_TILE = cn(
|
|
437
|
-
"bg-gradient-to-b from-white to-neutral-100",
|
|
438
|
-
"border border-neutral-200",
|
|
439
|
-
"shadow-[0_1px_2px_-0.5px_rgba(0,0,0,0.08)]"
|
|
440
|
-
);
|
|
441
|
-
|
|
442
|
-
// src/ui/timbal-v2-button.tsx
|
|
443
|
-
var React = __toESM(require("react"), 1);
|
|
444
|
-
var import_radix_ui = require("radix-ui");
|
|
445
|
-
var import_jsx_runtime = require("react/jsx-runtime");
|
|
446
|
-
var TIMBAL_V2_FILL_AS_CHILD = {
|
|
447
|
-
primary: [
|
|
448
|
-
"bg-gradient-to-b from-primary-fill-from to-primary-fill-to",
|
|
449
|
-
"hover:from-primary-fill-hover-from hover:to-primary-fill-hover-to",
|
|
450
|
-
"active:from-primary-fill-active-from active:to-primary-fill-active-to"
|
|
451
|
-
].join(" "),
|
|
452
|
-
informative: [
|
|
453
|
-
TIMBAL_V2_PRIMARY_GRADIENT,
|
|
454
|
-
"hover:from-primary-fill-hover-from hover:to-primary-fill-hover-to",
|
|
455
|
-
"active:from-primary-fill-active-from active:to-primary-fill-active-to",
|
|
456
|
-
"active:[background-image:linear-gradient(to_top,rgba(0,0,0,0.08),transparent_55%)]"
|
|
457
|
-
].join(" "),
|
|
458
|
-
destructive: [
|
|
459
|
-
TIMBAL_V2_ELEVATED_GRADIENT,
|
|
460
|
-
"hover:from-destructive-fill-hover-from hover:to-destructive-fill-hover-to",
|
|
461
|
-
"active:from-destructive-fill-active-from active:to-destructive-fill-active-to"
|
|
462
|
-
].join(" "),
|
|
463
|
-
secondary: [
|
|
464
|
-
TIMBAL_V2_ELEVATED_GRADIENT,
|
|
465
|
-
"hover:from-secondary-fill-hover-from hover:to-secondary-fill-hover-to",
|
|
466
|
-
"active:from-secondary-fill-active-from active:to-secondary-fill-active-to"
|
|
467
|
-
].join(" "),
|
|
468
|
-
ghost: [
|
|
469
|
-
"bg-transparent",
|
|
470
|
-
"hover:bg-ghost-fill-hover",
|
|
471
|
-
"active:bg-ghost-fill-active"
|
|
472
|
-
].join(" "),
|
|
473
|
-
link: "bg-transparent"
|
|
474
|
-
};
|
|
475
|
-
var TIMBAL_V2_LABEL_AS_CHILD = {
|
|
476
|
-
...TIMBAL_V2_LABEL,
|
|
477
|
-
link: "text-foreground underline decoration-foreground/25 underline-offset-2 hover:decoration-foreground/45"
|
|
478
|
-
};
|
|
479
|
-
var TimbalV2Button = React.forwardRef(function TimbalV2Button2({
|
|
480
|
-
variant = "secondary",
|
|
481
|
-
size = "sm",
|
|
482
|
-
isIconOnly = false,
|
|
483
|
-
isLoading = false,
|
|
484
|
-
fullWidth = false,
|
|
485
|
-
shape: _shape = "pill",
|
|
486
|
-
asChild = false,
|
|
487
|
-
className,
|
|
488
|
-
disabled,
|
|
489
|
-
type = "button",
|
|
490
|
-
children,
|
|
491
|
-
...props
|
|
492
|
-
}, ref) {
|
|
493
|
-
const isDisabled = disabled || isLoading;
|
|
494
|
-
const sizeClass2 = isIconOnly ? TIMBAL_V2_SIZE_ICON[size] : TIMBAL_V2_SIZE_HEIGHT[size];
|
|
495
|
-
const radiusClass = "rounded-full";
|
|
496
|
-
const sharedRootClass = cn(
|
|
497
|
-
"relative box-border inline-flex items-center justify-center gap-2 whitespace-nowrap border-0 text-sm font-normal shadow-none transition duration-200 ease-in-out",
|
|
498
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-offset-1 focus-visible:ring-offset-background",
|
|
499
|
-
sizeClass2,
|
|
500
|
-
radiusClass,
|
|
501
|
-
TIMBAL_V2_BORDER[variant],
|
|
502
|
-
TIMBAL_V2_SHADOW[variant],
|
|
503
|
-
fullWidth && "w-full",
|
|
504
|
-
isDisabled && "pointer-events-none opacity-50",
|
|
505
|
-
className
|
|
506
|
-
);
|
|
507
|
-
if (asChild) {
|
|
508
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
509
|
-
import_radix_ui.Slot.Root,
|
|
510
|
-
{
|
|
511
|
-
ref,
|
|
512
|
-
"aria-disabled": isDisabled ? true : void 0,
|
|
513
|
-
"data-slot": "timbal-v2-button",
|
|
514
|
-
"data-variant": variant,
|
|
515
|
-
className: cn(
|
|
516
|
-
sharedRootClass,
|
|
517
|
-
TIMBAL_V2_FILL_AS_CHILD[variant],
|
|
518
|
-
!isIconOnly && TIMBAL_V2_SIZE_LABEL_PX[size],
|
|
519
|
-
TIMBAL_V2_LABEL_AS_CHILD[variant]
|
|
520
|
-
),
|
|
521
|
-
...props,
|
|
522
|
-
children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "size-4 animate-spin rounded-full border-2 border-current border-t-transparent" }) : children
|
|
523
|
-
}
|
|
524
|
-
);
|
|
525
|
-
}
|
|
526
|
-
return /* @__PURE__ */ (0, import_jsx_runtime.jsxs)(
|
|
527
|
-
"button",
|
|
528
|
-
{
|
|
529
|
-
ref,
|
|
530
|
-
type,
|
|
531
|
-
disabled: isDisabled,
|
|
532
|
-
"data-slot": "timbal-v2-button",
|
|
533
|
-
"data-variant": variant,
|
|
534
|
-
className: cn(
|
|
535
|
-
"group/tbv2 flex-col items-stretch overflow-hidden bg-transparent p-0",
|
|
536
|
-
sharedRootClass
|
|
537
|
-
),
|
|
538
|
-
...props,
|
|
539
|
-
children: [
|
|
540
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
541
|
-
"span",
|
|
542
|
-
{
|
|
543
|
-
"aria-hidden": true,
|
|
544
|
-
className: cn(
|
|
545
|
-
"pointer-events-none absolute inset-0 transition duration-200 ease-in-out",
|
|
546
|
-
TIMBAL_V2_FILL[variant]
|
|
547
|
-
)
|
|
548
|
-
}
|
|
549
|
-
),
|
|
550
|
-
/* @__PURE__ */ (0, import_jsx_runtime.jsx)(
|
|
551
|
-
"span",
|
|
552
|
-
{
|
|
553
|
-
className: cn(
|
|
554
|
-
"relative z-10 flex min-h-0 flex-1 items-center justify-center gap-1 leading-tight",
|
|
555
|
-
!isIconOnly && TIMBAL_V2_SIZE_LABEL_PX[size],
|
|
556
|
-
TIMBAL_V2_LABEL[variant]
|
|
557
|
-
),
|
|
558
|
-
children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime.jsx)("span", { className: "size-4 animate-spin rounded-full border-2 border-current border-t-transparent" }) : children
|
|
559
|
-
}
|
|
560
|
-
)
|
|
561
|
-
]
|
|
562
|
-
}
|
|
563
|
-
);
|
|
564
|
-
});
|
|
565
|
-
|
|
566
|
-
// src/ui/button.tsx
|
|
567
|
-
var import_jsx_runtime2 = require("react/jsx-runtime");
|
|
568
|
-
var LEGACY_SIZE_TO_V2 = {
|
|
569
|
-
default: "md",
|
|
570
|
-
xs: "xs",
|
|
571
|
-
sm: "sm",
|
|
572
|
-
lg: "lg",
|
|
573
|
-
icon: "sm",
|
|
574
|
-
"icon-xs": "xs",
|
|
575
|
-
"icon-sm": "sm",
|
|
576
|
-
"icon-lg": "lg"
|
|
577
|
-
};
|
|
578
|
-
var buttonVariants = (0, import_class_variance_authority.cva)(
|
|
579
|
-
"inline-flex items-center justify-center gap-2 whitespace-nowrap text-sm font-medium disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 shrink-0 [&_svg]:shrink-0",
|
|
580
|
-
{
|
|
581
|
-
variants: {
|
|
582
|
-
variant: {
|
|
583
|
-
default: "",
|
|
584
|
-
destructive: "",
|
|
585
|
-
outline: "",
|
|
586
|
-
secondary: "",
|
|
587
|
-
ghost: "",
|
|
588
|
-
link: ""
|
|
589
|
-
},
|
|
590
|
-
size: {
|
|
591
|
-
default: "",
|
|
592
|
-
xs: "",
|
|
593
|
-
sm: "",
|
|
594
|
-
lg: "",
|
|
595
|
-
icon: "",
|
|
596
|
-
"icon-xs": "",
|
|
597
|
-
"icon-sm": "",
|
|
598
|
-
"icon-lg": ""
|
|
599
|
-
}
|
|
600
|
-
},
|
|
601
|
-
defaultVariants: {
|
|
602
|
-
variant: "default",
|
|
603
|
-
size: "default"
|
|
604
|
-
}
|
|
605
|
-
}
|
|
808
|
+
"border border-border/80 shadow-sm"
|
|
809
|
+
);
|
|
810
|
+
var TIMBAL_V2_ELEVATED_SURFACE = cn(
|
|
811
|
+
TIMBAL_V2_ELEVATED_GRADIENT,
|
|
812
|
+
"border border-border shadow-card"
|
|
813
|
+
);
|
|
814
|
+
var TIMBAL_V2_SECONDARY_CHROME = [
|
|
815
|
+
TIMBAL_V2_ELEVATED_GRADIENT,
|
|
816
|
+
"border border-border shadow-card",
|
|
817
|
+
"transition-[background-color,box-shadow,border-color] duration-200 ease-in-out",
|
|
818
|
+
"hover:from-secondary-fill-hover-from hover:to-secondary-fill-hover-to",
|
|
819
|
+
"active:from-secondary-fill-active-from active:to-secondary-fill-active-to"
|
|
820
|
+
].join(" ");
|
|
821
|
+
var TIMBAL_V2_LOGO_TILE = cn(
|
|
822
|
+
"bg-gradient-to-b from-white to-neutral-100",
|
|
823
|
+
"border border-neutral-200",
|
|
824
|
+
"shadow-[0_1px_2px_-0.5px_rgba(0,0,0,0.08)]"
|
|
606
825
|
);
|
|
607
|
-
function Button({
|
|
608
|
-
className,
|
|
609
|
-
variant = "default",
|
|
610
|
-
size = "default",
|
|
611
|
-
asChild = false,
|
|
612
|
-
...props
|
|
613
|
-
}) {
|
|
614
|
-
const v2Variant = TIMBAL_V2_FROM_LEGACY_BUTTON[variant ?? "default"];
|
|
615
|
-
const v2Size = LEGACY_SIZE_TO_V2[size ?? "default"];
|
|
616
|
-
const isIconOnly = typeof size === "string" && size.startsWith("icon");
|
|
617
|
-
return /* @__PURE__ */ (0, import_jsx_runtime2.jsx)(
|
|
618
|
-
TimbalV2Button,
|
|
619
|
-
{
|
|
620
|
-
"data-slot": "button",
|
|
621
|
-
"data-variant": variant,
|
|
622
|
-
"data-size": size,
|
|
623
|
-
variant: v2Variant,
|
|
624
|
-
size: v2Size,
|
|
625
|
-
shape: "pill",
|
|
626
|
-
isIconOnly,
|
|
627
|
-
asChild,
|
|
628
|
-
className: cn(buttonVariants({ variant, size, className })),
|
|
629
|
-
...props
|
|
630
|
-
}
|
|
631
|
-
);
|
|
632
|
-
}
|
|
633
|
-
|
|
634
|
-
// src/ui/tooltip.tsx
|
|
635
|
-
var import_radix_ui2 = require("radix-ui");
|
|
636
|
-
var import_jsx_runtime3 = require("react/jsx-runtime");
|
|
637
|
-
function TooltipProvider({
|
|
638
|
-
delayDuration = 0,
|
|
639
|
-
...props
|
|
640
|
-
}) {
|
|
641
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(
|
|
642
|
-
import_radix_ui2.Tooltip.Provider,
|
|
643
|
-
{
|
|
644
|
-
"data-slot": "tooltip-provider",
|
|
645
|
-
delayDuration,
|
|
646
|
-
...props
|
|
647
|
-
}
|
|
648
|
-
);
|
|
649
|
-
}
|
|
650
|
-
function Tooltip({
|
|
651
|
-
...props
|
|
652
|
-
}) {
|
|
653
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_radix_ui2.Tooltip.Root, { "data-slot": "tooltip", ...props });
|
|
654
|
-
}
|
|
655
|
-
function TooltipTrigger({
|
|
656
|
-
...props
|
|
657
|
-
}) {
|
|
658
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_radix_ui2.Tooltip.Trigger, { "data-slot": "tooltip-trigger", ...props });
|
|
659
|
-
}
|
|
660
|
-
function TooltipContent({
|
|
661
|
-
className,
|
|
662
|
-
sideOffset = 0,
|
|
663
|
-
children,
|
|
664
|
-
...props
|
|
665
|
-
}) {
|
|
666
|
-
return /* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_radix_ui2.Tooltip.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime3.jsxs)(
|
|
667
|
-
import_radix_ui2.Tooltip.Content,
|
|
668
|
-
{
|
|
669
|
-
"data-slot": "tooltip-content",
|
|
670
|
-
sideOffset,
|
|
671
|
-
className: cn(
|
|
672
|
-
"bg-foreground text-background animate-in fade-in-0 zoom-in-95 data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=closed]:zoom-out-95 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 z-50 w-fit origin-(--radix-tooltip-content-transform-origin) rounded-md px-3 py-1.5 text-xs text-balance",
|
|
673
|
-
className
|
|
674
|
-
),
|
|
675
|
-
...props,
|
|
676
|
-
children: [
|
|
677
|
-
children,
|
|
678
|
-
/* @__PURE__ */ (0, import_jsx_runtime3.jsx)(import_radix_ui2.Tooltip.Arrow, { className: "bg-foreground fill-foreground z-50 size-2.5 translate-y-[calc(-50%_-_2px)] rotate-45 rounded-[2px]" })
|
|
679
|
-
]
|
|
680
|
-
}
|
|
681
|
-
) });
|
|
682
|
-
}
|
|
683
826
|
|
|
684
827
|
// src/ui/avatar.tsx
|
|
685
|
-
var React2 = __toESM(require("react"), 1);
|
|
686
|
-
var import_radix_ui3 = require("radix-ui");
|
|
687
828
|
var import_jsx_runtime4 = require("react/jsx-runtime");
|
|
688
829
|
var AVATAR_PRIMARY_FALLBACK_CLASS = cn(
|
|
689
830
|
TIMBAL_V2_SECONDARY_PILL_ROOT,
|
|
@@ -693,11 +834,11 @@ var AVATAR_PRIMARY_FALLBACK_CLASS = cn(
|
|
|
693
834
|
var AVATAR_SECONDARY_FILL_STYLE = {
|
|
694
835
|
backgroundImage: "linear-gradient(to bottom, var(--elevated-from), var(--elevated-to))"
|
|
695
836
|
};
|
|
696
|
-
var AvatarChromeContext =
|
|
837
|
+
var AvatarChromeContext = React.createContext(
|
|
697
838
|
null
|
|
698
839
|
);
|
|
699
840
|
function useAvatarChrome() {
|
|
700
|
-
return
|
|
841
|
+
return React.useContext(AvatarChromeContext);
|
|
701
842
|
}
|
|
702
843
|
function isBrandedVariant(variant) {
|
|
703
844
|
return variant === "secondary" || variant === "primary" || variant === "chart";
|
|
@@ -717,15 +858,15 @@ function Avatar({
|
|
|
717
858
|
children,
|
|
718
859
|
...props
|
|
719
860
|
}) {
|
|
720
|
-
const [chrome, setChrome] =
|
|
721
|
-
|
|
861
|
+
const [chrome, setChrome] = React.useState(rootVariant ?? "muted");
|
|
862
|
+
React.useLayoutEffect(() => {
|
|
722
863
|
if (rootVariant !== void 0) {
|
|
723
864
|
setChrome(rootVariant);
|
|
724
865
|
}
|
|
725
866
|
}, [rootVariant]);
|
|
726
867
|
const branded = isBrandedVariant(chrome);
|
|
727
868
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(AvatarChromeContext.Provider, { value: { chrome, setChrome }, children: /* @__PURE__ */ (0, import_jsx_runtime4.jsxs)(
|
|
728
|
-
|
|
869
|
+
import_radix_ui4.Avatar.Root,
|
|
729
870
|
{
|
|
730
871
|
"data-slot": "avatar",
|
|
731
872
|
"data-size": size,
|
|
@@ -756,7 +897,7 @@ function AvatarImage({
|
|
|
756
897
|
...props
|
|
757
898
|
}) {
|
|
758
899
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
759
|
-
|
|
900
|
+
import_radix_ui4.Avatar.Image,
|
|
760
901
|
{
|
|
761
902
|
"data-slot": "avatar-image",
|
|
762
903
|
className: cn(
|
|
@@ -776,12 +917,12 @@ function AvatarFallback({
|
|
|
776
917
|
...props
|
|
777
918
|
}) {
|
|
778
919
|
const chromeCtx = useAvatarChrome();
|
|
779
|
-
|
|
920
|
+
React.useLayoutEffect(() => {
|
|
780
921
|
chromeCtx?.setChrome(variant);
|
|
781
922
|
}, [chromeCtx, variant]);
|
|
782
923
|
const branded = isBrandedVariant(variant);
|
|
783
924
|
return /* @__PURE__ */ (0, import_jsx_runtime4.jsx)(
|
|
784
|
-
|
|
925
|
+
import_radix_ui4.Avatar.Fallback,
|
|
785
926
|
{
|
|
786
927
|
"data-slot": "avatar-fallback",
|
|
787
928
|
"data-variant": branded ? "secondary" : variant,
|
|
@@ -790,8 +931,8 @@ function AvatarFallback({
|
|
|
790
931
|
branded ? cn(
|
|
791
932
|
"bg-transparent font-medium",
|
|
792
933
|
TIMBAL_V2_LABEL.secondary,
|
|
793
|
-
"text-
|
|
794
|
-
) : "bg-muted font-normal text-muted-foreground text-
|
|
934
|
+
"text-xs group-data-[size=sm]/avatar:text-[10px]"
|
|
935
|
+
) : "bg-muted font-normal text-muted-foreground text-xs group-data-[size=sm]/avatar:text-[10px]",
|
|
795
936
|
className
|
|
796
937
|
),
|
|
797
938
|
style,
|
|
@@ -803,34 +944,34 @@ function AvatarFallback({
|
|
|
803
944
|
|
|
804
945
|
// src/ui/dialog.tsx
|
|
805
946
|
var import_lucide_react = require("lucide-react");
|
|
806
|
-
var
|
|
947
|
+
var import_radix_ui5 = require("radix-ui");
|
|
807
948
|
var import_jsx_runtime5 = require("react/jsx-runtime");
|
|
808
949
|
function Dialog({
|
|
809
950
|
...props
|
|
810
951
|
}) {
|
|
811
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
952
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_radix_ui5.Dialog.Root, { "data-slot": "dialog", ...props });
|
|
812
953
|
}
|
|
813
954
|
function DialogTrigger({
|
|
814
955
|
...props
|
|
815
956
|
}) {
|
|
816
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
957
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_radix_ui5.Dialog.Trigger, { "data-slot": "dialog-trigger", ...props });
|
|
817
958
|
}
|
|
818
959
|
function DialogPortal({
|
|
819
960
|
...props
|
|
820
961
|
}) {
|
|
821
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
962
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_radix_ui5.Dialog.Portal, { "data-slot": "dialog-portal", ...props });
|
|
822
963
|
}
|
|
823
964
|
function DialogClose({
|
|
824
965
|
...props
|
|
825
966
|
}) {
|
|
826
|
-
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
967
|
+
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(import_radix_ui5.Dialog.Close, { "data-slot": "dialog-close", ...props });
|
|
827
968
|
}
|
|
828
969
|
function DialogOverlay({
|
|
829
970
|
className,
|
|
830
971
|
...props
|
|
831
972
|
}) {
|
|
832
973
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
833
|
-
|
|
974
|
+
import_radix_ui5.Dialog.Overlay,
|
|
834
975
|
{
|
|
835
976
|
"data-slot": "dialog-overlay",
|
|
836
977
|
className: cn(
|
|
@@ -850,7 +991,7 @@ function DialogContent({
|
|
|
850
991
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(DialogPortal, { "data-slot": "dialog-portal", children: [
|
|
851
992
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsx)(DialogOverlay, {}),
|
|
852
993
|
/* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
853
|
-
|
|
994
|
+
import_radix_ui5.Dialog.Content,
|
|
854
995
|
{
|
|
855
996
|
"data-slot": "dialog-content",
|
|
856
997
|
className: cn(
|
|
@@ -862,7 +1003,7 @@ function DialogContent({
|
|
|
862
1003
|
children: [
|
|
863
1004
|
children,
|
|
864
1005
|
showCloseButton && /* @__PURE__ */ (0, import_jsx_runtime5.jsxs)(
|
|
865
|
-
|
|
1006
|
+
import_radix_ui5.Dialog.Close,
|
|
866
1007
|
{
|
|
867
1008
|
"data-slot": "dialog-close",
|
|
868
1009
|
className: "ring-offset-background focus:ring-ring data-[state=open]:text-muted-foreground absolute top-4 right-4 rounded-xs opacity-70 transition-[opacity,background-color] hover:bg-ghost-fill-hover hover:opacity-100 focus:ring-2 focus:ring-offset-2 focus:outline-hidden disabled:pointer-events-none [&_svg]:pointer-events-none [&_svg]:shrink-0 [&_svg:not([class*='size-'])]:size-4",
|
|
@@ -882,7 +1023,7 @@ function DialogTitle({
|
|
|
882
1023
|
...props
|
|
883
1024
|
}) {
|
|
884
1025
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
885
|
-
|
|
1026
|
+
import_radix_ui5.Dialog.Title,
|
|
886
1027
|
{
|
|
887
1028
|
"data-slot": "dialog-title",
|
|
888
1029
|
className: cn("text-lg leading-none font-semibold", className),
|
|
@@ -895,7 +1036,7 @@ function DialogDescription({
|
|
|
895
1036
|
...props
|
|
896
1037
|
}) {
|
|
897
1038
|
return /* @__PURE__ */ (0, import_jsx_runtime5.jsx)(
|
|
898
|
-
|
|
1039
|
+
import_radix_ui5.Dialog.Description,
|
|
899
1040
|
{
|
|
900
1041
|
"data-slot": "dialog-description",
|
|
901
1042
|
className: cn("text-sm text-muted-foreground", className),
|
|
@@ -928,7 +1069,7 @@ function DialogFooter({ className, ...props }) {
|
|
|
928
1069
|
}
|
|
929
1070
|
|
|
930
1071
|
// src/ui/dropdown-menu.tsx
|
|
931
|
-
var
|
|
1072
|
+
var import_radix_ui6 = require("radix-ui");
|
|
932
1073
|
var import_lucide_react2 = require("lucide-react");
|
|
933
1074
|
|
|
934
1075
|
// src/design/control-surface.ts
|
|
@@ -969,13 +1110,13 @@ var import_jsx_runtime6 = require("react/jsx-runtime");
|
|
|
969
1110
|
function DropdownMenu({
|
|
970
1111
|
...props
|
|
971
1112
|
}) {
|
|
972
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1113
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_radix_ui6.DropdownMenu.Root, { "data-slot": "dropdown-menu", ...props });
|
|
973
1114
|
}
|
|
974
1115
|
function DropdownMenuTrigger({
|
|
975
1116
|
...props
|
|
976
1117
|
}) {
|
|
977
1118
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
978
|
-
|
|
1119
|
+
import_radix_ui6.DropdownMenu.Trigger,
|
|
979
1120
|
{
|
|
980
1121
|
"data-slot": "dropdown-menu-trigger",
|
|
981
1122
|
...props
|
|
@@ -985,15 +1126,15 @@ function DropdownMenuTrigger({
|
|
|
985
1126
|
function DropdownMenuGroup({
|
|
986
1127
|
...props
|
|
987
1128
|
}) {
|
|
988
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1129
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_radix_ui6.DropdownMenu.Group, { "data-slot": "dropdown-menu-group", ...props });
|
|
989
1130
|
}
|
|
990
1131
|
function DropdownMenuContent({
|
|
991
1132
|
className,
|
|
992
1133
|
sideOffset = 4,
|
|
993
1134
|
...props
|
|
994
1135
|
}) {
|
|
995
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
996
|
-
|
|
1136
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_radix_ui6.DropdownMenu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1137
|
+
import_radix_ui6.DropdownMenu.Content,
|
|
997
1138
|
{
|
|
998
1139
|
"data-slot": "dropdown-menu-content",
|
|
999
1140
|
sideOffset,
|
|
@@ -1013,7 +1154,7 @@ function DropdownMenuItem({
|
|
|
1013
1154
|
...props
|
|
1014
1155
|
}) {
|
|
1015
1156
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1016
|
-
|
|
1157
|
+
import_radix_ui6.DropdownMenu.Item,
|
|
1017
1158
|
{
|
|
1018
1159
|
"data-slot": "dropdown-menu-item",
|
|
1019
1160
|
"data-inset": inset,
|
|
@@ -1034,14 +1175,14 @@ function DropdownMenuCheckboxItem({
|
|
|
1034
1175
|
...props
|
|
1035
1176
|
}) {
|
|
1036
1177
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
1037
|
-
|
|
1178
|
+
import_radix_ui6.DropdownMenu.CheckboxItem,
|
|
1038
1179
|
{
|
|
1039
1180
|
"data-slot": "dropdown-menu-checkbox-item",
|
|
1040
1181
|
className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
|
|
1041
1182
|
checked,
|
|
1042
1183
|
...props,
|
|
1043
1184
|
children: [
|
|
1044
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1185
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_radix_ui6.DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.CheckIcon, { className: "size-4" }) }) }),
|
|
1045
1186
|
children
|
|
1046
1187
|
]
|
|
1047
1188
|
}
|
|
@@ -1051,7 +1192,7 @@ function DropdownMenuRadioGroup({
|
|
|
1051
1192
|
...props
|
|
1052
1193
|
}) {
|
|
1053
1194
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1054
|
-
|
|
1195
|
+
import_radix_ui6.DropdownMenu.RadioGroup,
|
|
1055
1196
|
{
|
|
1056
1197
|
"data-slot": "dropdown-menu-radio-group",
|
|
1057
1198
|
...props
|
|
@@ -1064,13 +1205,13 @@ function DropdownMenuRadioItem({
|
|
|
1064
1205
|
...props
|
|
1065
1206
|
}) {
|
|
1066
1207
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
1067
|
-
|
|
1208
|
+
import_radix_ui6.DropdownMenu.RadioItem,
|
|
1068
1209
|
{
|
|
1069
1210
|
"data-slot": "dropdown-menu-radio-item",
|
|
1070
1211
|
className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
|
|
1071
1212
|
...props,
|
|
1072
1213
|
children: [
|
|
1073
|
-
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1214
|
+
/* @__PURE__ */ (0, import_jsx_runtime6.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_radix_ui6.DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_lucide_react2.CircleIcon, { className: "size-2 fill-current" }) }) }),
|
|
1074
1215
|
children
|
|
1075
1216
|
]
|
|
1076
1217
|
}
|
|
@@ -1082,7 +1223,7 @@ function DropdownMenuLabel({
|
|
|
1082
1223
|
...props
|
|
1083
1224
|
}) {
|
|
1084
1225
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1085
|
-
|
|
1226
|
+
import_radix_ui6.DropdownMenu.Label,
|
|
1086
1227
|
{
|
|
1087
1228
|
"data-slot": "dropdown-menu-label",
|
|
1088
1229
|
"data-inset": inset,
|
|
@@ -1099,7 +1240,7 @@ function DropdownMenuSeparator({
|
|
|
1099
1240
|
...props
|
|
1100
1241
|
}) {
|
|
1101
1242
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1102
|
-
|
|
1243
|
+
import_radix_ui6.DropdownMenu.Separator,
|
|
1103
1244
|
{
|
|
1104
1245
|
"data-slot": "dropdown-menu-separator",
|
|
1105
1246
|
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
@@ -1126,7 +1267,7 @@ function DropdownMenuShortcut({
|
|
|
1126
1267
|
function DropdownMenuSub({
|
|
1127
1268
|
...props
|
|
1128
1269
|
}) {
|
|
1129
|
-
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1270
|
+
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(import_radix_ui6.DropdownMenu.Sub, { "data-slot": "dropdown-menu-sub", ...props });
|
|
1130
1271
|
}
|
|
1131
1272
|
function DropdownMenuSubTrigger({
|
|
1132
1273
|
className,
|
|
@@ -1135,7 +1276,7 @@ function DropdownMenuSubTrigger({
|
|
|
1135
1276
|
...props
|
|
1136
1277
|
}) {
|
|
1137
1278
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsxs)(
|
|
1138
|
-
|
|
1279
|
+
import_radix_ui6.DropdownMenu.SubTrigger,
|
|
1139
1280
|
{
|
|
1140
1281
|
"data-slot": "dropdown-menu-sub-trigger",
|
|
1141
1282
|
"data-inset": inset,
|
|
@@ -1157,7 +1298,7 @@ function DropdownMenuSubContent({
|
|
|
1157
1298
|
...props
|
|
1158
1299
|
}) {
|
|
1159
1300
|
return /* @__PURE__ */ (0, import_jsx_runtime6.jsx)(
|
|
1160
|
-
|
|
1301
|
+
import_radix_ui6.DropdownMenu.SubContent,
|
|
1161
1302
|
{
|
|
1162
1303
|
"data-slot": "dropdown-menu-sub-content",
|
|
1163
1304
|
className: cn(
|
|
@@ -1171,22 +1312,22 @@ function DropdownMenuSubContent({
|
|
|
1171
1312
|
}
|
|
1172
1313
|
|
|
1173
1314
|
// src/ui/popover.tsx
|
|
1174
|
-
var
|
|
1315
|
+
var import_radix_ui7 = require("radix-ui");
|
|
1175
1316
|
var import_jsx_runtime7 = require("react/jsx-runtime");
|
|
1176
1317
|
function Popover({
|
|
1177
1318
|
...props
|
|
1178
1319
|
}) {
|
|
1179
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1320
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_radix_ui7.Popover.Root, { "data-slot": "popover", ...props });
|
|
1180
1321
|
}
|
|
1181
1322
|
function PopoverTrigger({
|
|
1182
1323
|
...props
|
|
1183
1324
|
}) {
|
|
1184
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1325
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_radix_ui7.Popover.Trigger, { "data-slot": "popover-trigger", ...props });
|
|
1185
1326
|
}
|
|
1186
1327
|
function PopoverAnchor({
|
|
1187
1328
|
...props
|
|
1188
1329
|
}) {
|
|
1189
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1330
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_radix_ui7.Popover.Anchor, { "data-slot": "popover-anchor", ...props });
|
|
1190
1331
|
}
|
|
1191
1332
|
function PopoverContent({
|
|
1192
1333
|
className,
|
|
@@ -1195,8 +1336,8 @@ function PopoverContent({
|
|
|
1195
1336
|
variant = "default",
|
|
1196
1337
|
...props
|
|
1197
1338
|
}) {
|
|
1198
|
-
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1199
|
-
|
|
1339
|
+
return /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(import_radix_ui7.Popover.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime7.jsx)(
|
|
1340
|
+
import_radix_ui7.Popover.Content,
|
|
1200
1341
|
{
|
|
1201
1342
|
"data-slot": "popover-content",
|
|
1202
1343
|
"data-variant": variant,
|
|
@@ -1218,23 +1359,23 @@ function PopoverContent({
|
|
|
1218
1359
|
}
|
|
1219
1360
|
|
|
1220
1361
|
// src/ui/select.tsx
|
|
1221
|
-
var
|
|
1362
|
+
var import_radix_ui8 = require("radix-ui");
|
|
1222
1363
|
var import_lucide_react3 = require("lucide-react");
|
|
1223
1364
|
var import_jsx_runtime8 = require("react/jsx-runtime");
|
|
1224
1365
|
function Select({
|
|
1225
1366
|
...props
|
|
1226
1367
|
}) {
|
|
1227
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1368
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_radix_ui8.Select.Root, { "data-slot": "select", ...props });
|
|
1228
1369
|
}
|
|
1229
1370
|
function SelectGroup({
|
|
1230
1371
|
...props
|
|
1231
1372
|
}) {
|
|
1232
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1373
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_radix_ui8.Select.Group, { "data-slot": "select-group", ...props });
|
|
1233
1374
|
}
|
|
1234
1375
|
function SelectValue({
|
|
1235
1376
|
...props
|
|
1236
1377
|
}) {
|
|
1237
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1378
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_radix_ui8.Select.Value, { "data-slot": "select-value", ...props });
|
|
1238
1379
|
}
|
|
1239
1380
|
function SelectTrigger({
|
|
1240
1381
|
className,
|
|
@@ -1243,7 +1384,7 @@ function SelectTrigger({
|
|
|
1243
1384
|
...props
|
|
1244
1385
|
}) {
|
|
1245
1386
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
1246
|
-
|
|
1387
|
+
import_radix_ui8.Select.Trigger,
|
|
1247
1388
|
{
|
|
1248
1389
|
"data-slot": "select-trigger",
|
|
1249
1390
|
"data-size": size,
|
|
@@ -1255,7 +1396,7 @@ function SelectTrigger({
|
|
|
1255
1396
|
...props,
|
|
1256
1397
|
children: [
|
|
1257
1398
|
children,
|
|
1258
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1399
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_radix_ui8.Select.Icon, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react3.ChevronDownIcon, { className: "size-4 opacity-50" }) })
|
|
1259
1400
|
]
|
|
1260
1401
|
}
|
|
1261
1402
|
);
|
|
@@ -1266,8 +1407,8 @@ function SelectContent({
|
|
|
1266
1407
|
position = "popper",
|
|
1267
1408
|
...props
|
|
1268
1409
|
}) {
|
|
1269
|
-
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1270
|
-
|
|
1410
|
+
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_radix_ui8.Select.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
1411
|
+
import_radix_ui8.Select.Content,
|
|
1271
1412
|
{
|
|
1272
1413
|
"data-slot": "select-content",
|
|
1273
1414
|
className: cn(
|
|
@@ -1281,7 +1422,7 @@ function SelectContent({
|
|
|
1281
1422
|
children: [
|
|
1282
1423
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(SelectScrollUpButton, {}),
|
|
1283
1424
|
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1284
|
-
|
|
1425
|
+
import_radix_ui8.Select.Viewport,
|
|
1285
1426
|
{
|
|
1286
1427
|
className: cn(
|
|
1287
1428
|
"p-1",
|
|
@@ -1300,7 +1441,7 @@ function SelectLabel({
|
|
|
1300
1441
|
...props
|
|
1301
1442
|
}) {
|
|
1302
1443
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1303
|
-
|
|
1444
|
+
import_radix_ui8.Select.Label,
|
|
1304
1445
|
{
|
|
1305
1446
|
"data-slot": "select-label",
|
|
1306
1447
|
className: cn("px-2 py-1.5 text-xs font-medium text-muted-foreground", className),
|
|
@@ -1314,7 +1455,7 @@ function SelectItem({
|
|
|
1314
1455
|
...props
|
|
1315
1456
|
}) {
|
|
1316
1457
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsxs)(
|
|
1317
|
-
|
|
1458
|
+
import_radix_ui8.Select.Item,
|
|
1318
1459
|
{
|
|
1319
1460
|
"data-slot": "select-item",
|
|
1320
1461
|
className: cn(
|
|
@@ -1324,8 +1465,8 @@ function SelectItem({
|
|
|
1324
1465
|
),
|
|
1325
1466
|
...props,
|
|
1326
1467
|
children: [
|
|
1327
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1328
|
-
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1468
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)("span", { className: "absolute right-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_radix_ui8.Select.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_lucide_react3.CheckIcon, { className: "size-4" }) }) }),
|
|
1469
|
+
/* @__PURE__ */ (0, import_jsx_runtime8.jsx)(import_radix_ui8.Select.ItemText, { children })
|
|
1329
1470
|
]
|
|
1330
1471
|
}
|
|
1331
1472
|
);
|
|
@@ -1335,7 +1476,7 @@ function SelectSeparator({
|
|
|
1335
1476
|
...props
|
|
1336
1477
|
}) {
|
|
1337
1478
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1338
|
-
|
|
1479
|
+
import_radix_ui8.Select.Separator,
|
|
1339
1480
|
{
|
|
1340
1481
|
"data-slot": "select-separator",
|
|
1341
1482
|
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
@@ -1348,7 +1489,7 @@ function SelectScrollUpButton({
|
|
|
1348
1489
|
...props
|
|
1349
1490
|
}) {
|
|
1350
1491
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1351
|
-
|
|
1492
|
+
import_radix_ui8.Select.ScrollUpButton,
|
|
1352
1493
|
{
|
|
1353
1494
|
"data-slot": "select-scroll-up-button",
|
|
1354
1495
|
className: cn("flex cursor-default items-center justify-center py-1", className),
|
|
@@ -1362,7 +1503,7 @@ function SelectScrollDownButton({
|
|
|
1362
1503
|
...props
|
|
1363
1504
|
}) {
|
|
1364
1505
|
return /* @__PURE__ */ (0, import_jsx_runtime8.jsx)(
|
|
1365
|
-
|
|
1506
|
+
import_radix_ui8.Select.ScrollDownButton,
|
|
1366
1507
|
{
|
|
1367
1508
|
"data-slot": "select-scroll-down-button",
|
|
1368
1509
|
className: cn("flex cursor-default items-center justify-center py-1", className),
|
|
@@ -1413,14 +1554,14 @@ function Textarea({ className, ...props }) {
|
|
|
1413
1554
|
}
|
|
1414
1555
|
|
|
1415
1556
|
// src/ui/label.tsx
|
|
1416
|
-
var
|
|
1557
|
+
var import_radix_ui9 = require("radix-ui");
|
|
1417
1558
|
var import_jsx_runtime11 = require("react/jsx-runtime");
|
|
1418
1559
|
function Label({
|
|
1419
1560
|
className,
|
|
1420
1561
|
...props
|
|
1421
1562
|
}) {
|
|
1422
1563
|
return /* @__PURE__ */ (0, import_jsx_runtime11.jsx)(
|
|
1423
|
-
|
|
1564
|
+
import_radix_ui9.Label.Root,
|
|
1424
1565
|
{
|
|
1425
1566
|
"data-slot": "label",
|
|
1426
1567
|
className: cn(
|
|
@@ -1434,7 +1575,7 @@ function Label({
|
|
|
1434
1575
|
}
|
|
1435
1576
|
|
|
1436
1577
|
// src/ui/checkbox.tsx
|
|
1437
|
-
var
|
|
1578
|
+
var import_radix_ui10 = require("radix-ui");
|
|
1438
1579
|
var import_lucide_react4 = require("lucide-react");
|
|
1439
1580
|
var import_jsx_runtime12 = require("react/jsx-runtime");
|
|
1440
1581
|
function Checkbox({
|
|
@@ -1442,7 +1583,7 @@ function Checkbox({
|
|
|
1442
1583
|
...props
|
|
1443
1584
|
}) {
|
|
1444
1585
|
return /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1445
|
-
|
|
1586
|
+
import_radix_ui10.Checkbox.Root,
|
|
1446
1587
|
{
|
|
1447
1588
|
"data-slot": "checkbox",
|
|
1448
1589
|
className: cn(
|
|
@@ -1453,11 +1594,11 @@ function Checkbox({
|
|
|
1453
1594
|
),
|
|
1454
1595
|
...props,
|
|
1455
1596
|
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(
|
|
1456
|
-
|
|
1597
|
+
import_radix_ui10.Checkbox.Indicator,
|
|
1457
1598
|
{
|
|
1458
1599
|
"data-slot": "checkbox-indicator",
|
|
1459
|
-
className: "flex items-center justify-center text-current
|
|
1460
|
-
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react4.CheckIcon, { className: "size-3.
|
|
1600
|
+
className: "flex items-center justify-center text-current animate-checkbox-pop",
|
|
1601
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime12.jsx)(import_lucide_react4.CheckIcon, { className: "size-2.5 stroke-[3.5px]" })
|
|
1461
1602
|
}
|
|
1462
1603
|
)
|
|
1463
1604
|
}
|
|
@@ -1465,14 +1606,14 @@ function Checkbox({
|
|
|
1465
1606
|
}
|
|
1466
1607
|
|
|
1467
1608
|
// src/ui/switch.tsx
|
|
1468
|
-
var
|
|
1609
|
+
var import_radix_ui11 = require("radix-ui");
|
|
1469
1610
|
var import_jsx_runtime13 = require("react/jsx-runtime");
|
|
1470
1611
|
function Switch({
|
|
1471
1612
|
className,
|
|
1472
1613
|
...props
|
|
1473
1614
|
}) {
|
|
1474
1615
|
return /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1475
|
-
|
|
1616
|
+
import_radix_ui11.Switch.Root,
|
|
1476
1617
|
{
|
|
1477
1618
|
"data-slot": "switch",
|
|
1478
1619
|
className: cn(
|
|
@@ -1484,7 +1625,7 @@ function Switch({
|
|
|
1484
1625
|
),
|
|
1485
1626
|
...props,
|
|
1486
1627
|
children: /* @__PURE__ */ (0, import_jsx_runtime13.jsx)(
|
|
1487
|
-
|
|
1628
|
+
import_radix_ui11.Switch.Thumb,
|
|
1488
1629
|
{
|
|
1489
1630
|
"data-slot": "switch-thumb",
|
|
1490
1631
|
className: cn(
|
|
@@ -1498,7 +1639,7 @@ function Switch({
|
|
|
1498
1639
|
}
|
|
1499
1640
|
|
|
1500
1641
|
// src/ui/radio-group.tsx
|
|
1501
|
-
var
|
|
1642
|
+
var import_radix_ui12 = require("radix-ui");
|
|
1502
1643
|
var import_lucide_react5 = require("lucide-react");
|
|
1503
1644
|
var import_jsx_runtime14 = require("react/jsx-runtime");
|
|
1504
1645
|
function RadioGroup({
|
|
@@ -1506,7 +1647,7 @@ function RadioGroup({
|
|
|
1506
1647
|
...props
|
|
1507
1648
|
}) {
|
|
1508
1649
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1509
|
-
|
|
1650
|
+
import_radix_ui12.RadioGroup.Root,
|
|
1510
1651
|
{
|
|
1511
1652
|
"data-slot": "radio-group",
|
|
1512
1653
|
className: cn("grid gap-2.5", className),
|
|
@@ -1519,7 +1660,7 @@ function RadioGroupItem({
|
|
|
1519
1660
|
...props
|
|
1520
1661
|
}) {
|
|
1521
1662
|
return /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1522
|
-
|
|
1663
|
+
import_radix_ui12.RadioGroup.Item,
|
|
1523
1664
|
{
|
|
1524
1665
|
"data-slot": "radio-group-item",
|
|
1525
1666
|
className: cn(
|
|
@@ -1530,7 +1671,7 @@ function RadioGroupItem({
|
|
|
1530
1671
|
),
|
|
1531
1672
|
...props,
|
|
1532
1673
|
children: /* @__PURE__ */ (0, import_jsx_runtime14.jsx)(
|
|
1533
|
-
|
|
1674
|
+
import_radix_ui12.RadioGroup.Indicator,
|
|
1534
1675
|
{
|
|
1535
1676
|
"data-slot": "radio-group-indicator",
|
|
1536
1677
|
className: "flex items-center justify-center",
|
|
@@ -1542,15 +1683,15 @@ function RadioGroupItem({
|
|
|
1542
1683
|
}
|
|
1543
1684
|
|
|
1544
1685
|
// src/ui/form.tsx
|
|
1545
|
-
var
|
|
1686
|
+
var import_radix_ui13 = require("radix-ui");
|
|
1546
1687
|
var import_jsx_runtime15 = require("react/jsx-runtime");
|
|
1547
1688
|
function Form({ ...props }) {
|
|
1548
|
-
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1689
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_radix_ui13.Form.Root, { "data-slot": "form", ...props });
|
|
1549
1690
|
}
|
|
1550
1691
|
function FormField({
|
|
1551
1692
|
...props
|
|
1552
1693
|
}) {
|
|
1553
|
-
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1694
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_radix_ui13.Form.Field, { "data-slot": "form-field", ...props });
|
|
1554
1695
|
}
|
|
1555
1696
|
function FormItem({ className, ...props }) {
|
|
1556
1697
|
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
@@ -1566,19 +1707,19 @@ function FormLabel({
|
|
|
1566
1707
|
className,
|
|
1567
1708
|
...props
|
|
1568
1709
|
}) {
|
|
1569
|
-
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1710
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_radix_ui13.Form.Label, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(Label, { "data-slot": "form-label", className, ...props }) });
|
|
1570
1711
|
}
|
|
1571
1712
|
function FormControl({
|
|
1572
1713
|
...props
|
|
1573
1714
|
}) {
|
|
1574
|
-
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1715
|
+
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(import_radix_ui13.Form.Control, { "data-slot": "form-control", ...props });
|
|
1575
1716
|
}
|
|
1576
1717
|
function FormMessage({
|
|
1577
1718
|
className,
|
|
1578
1719
|
...props
|
|
1579
1720
|
}) {
|
|
1580
1721
|
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1581
|
-
|
|
1722
|
+
import_radix_ui13.Form.Message,
|
|
1582
1723
|
{
|
|
1583
1724
|
"data-slot": "form-message",
|
|
1584
1725
|
className: cn("text-xs text-destructive", className),
|
|
@@ -1591,7 +1732,7 @@ function FormSubmit({
|
|
|
1591
1732
|
...props
|
|
1592
1733
|
}) {
|
|
1593
1734
|
return /* @__PURE__ */ (0, import_jsx_runtime15.jsx)(
|
|
1594
|
-
|
|
1735
|
+
import_radix_ui13.Form.Submit,
|
|
1595
1736
|
{
|
|
1596
1737
|
"data-slot": "form-submit",
|
|
1597
1738
|
className,
|
|
@@ -1601,17 +1742,17 @@ function FormSubmit({
|
|
|
1601
1742
|
}
|
|
1602
1743
|
|
|
1603
1744
|
// src/ui/aspect-ratio.tsx
|
|
1604
|
-
var
|
|
1745
|
+
var import_radix_ui14 = require("radix-ui");
|
|
1605
1746
|
var import_jsx_runtime16 = require("react/jsx-runtime");
|
|
1606
1747
|
function AspectRatio({
|
|
1607
1748
|
...props
|
|
1608
1749
|
}) {
|
|
1609
|
-
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(
|
|
1750
|
+
return /* @__PURE__ */ (0, import_jsx_runtime16.jsx)(import_radix_ui14.AspectRatio.Root, { "data-slot": "aspect-ratio", ...props });
|
|
1610
1751
|
}
|
|
1611
1752
|
|
|
1612
1753
|
// src/ui/breadcrumb.tsx
|
|
1613
1754
|
var import_lucide_react6 = require("lucide-react");
|
|
1614
|
-
var
|
|
1755
|
+
var import_radix_ui15 = require("radix-ui");
|
|
1615
1756
|
var import_jsx_runtime17 = require("react/jsx-runtime");
|
|
1616
1757
|
function Breadcrumb({ ...props }) {
|
|
1617
1758
|
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)("nav", { "data-slot": "breadcrumb", "aria-label": "Breadcrumb", ...props });
|
|
@@ -1644,7 +1785,7 @@ function BreadcrumbLink({
|
|
|
1644
1785
|
asChild,
|
|
1645
1786
|
...props
|
|
1646
1787
|
}) {
|
|
1647
|
-
const Comp = asChild ?
|
|
1788
|
+
const Comp = asChild ? import_radix_ui15.Slot.Root : "a";
|
|
1648
1789
|
return /* @__PURE__ */ (0, import_jsx_runtime17.jsx)(
|
|
1649
1790
|
Comp,
|
|
1650
1791
|
{
|
|
@@ -1803,14 +1944,14 @@ function PaginationEllipsis({
|
|
|
1803
1944
|
}
|
|
1804
1945
|
|
|
1805
1946
|
// src/ui/toolbar.tsx
|
|
1806
|
-
var
|
|
1947
|
+
var import_radix_ui16 = require("radix-ui");
|
|
1807
1948
|
var import_jsx_runtime19 = require("react/jsx-runtime");
|
|
1808
1949
|
function Toolbar({
|
|
1809
1950
|
className,
|
|
1810
1951
|
...props
|
|
1811
1952
|
}) {
|
|
1812
1953
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1813
|
-
|
|
1954
|
+
import_radix_ui16.Toolbar.Root,
|
|
1814
1955
|
{
|
|
1815
1956
|
"data-slot": "toolbar",
|
|
1816
1957
|
className: cn(
|
|
@@ -1826,7 +1967,7 @@ function ToolbarButton({
|
|
|
1826
1967
|
...props
|
|
1827
1968
|
}) {
|
|
1828
1969
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1829
|
-
|
|
1970
|
+
import_radix_ui16.Toolbar.Button,
|
|
1830
1971
|
{
|
|
1831
1972
|
"data-slot": "toolbar-button",
|
|
1832
1973
|
className: cn(
|
|
@@ -1843,7 +1984,7 @@ function ToolbarSeparator({
|
|
|
1843
1984
|
...props
|
|
1844
1985
|
}) {
|
|
1845
1986
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1846
|
-
|
|
1987
|
+
import_radix_ui16.Toolbar.Separator,
|
|
1847
1988
|
{
|
|
1848
1989
|
"data-slot": "toolbar-separator",
|
|
1849
1990
|
className: cn("mx-1 h-6 w-px bg-border", className),
|
|
@@ -1856,7 +1997,7 @@ function ToolbarToggleGroup({
|
|
|
1856
1997
|
...props
|
|
1857
1998
|
}) {
|
|
1858
1999
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1859
|
-
|
|
2000
|
+
import_radix_ui16.Toolbar.ToggleGroup,
|
|
1860
2001
|
{
|
|
1861
2002
|
"data-slot": "toolbar-toggle-group",
|
|
1862
2003
|
className: cn("flex items-center gap-0.5", className),
|
|
@@ -1869,7 +2010,7 @@ function ToolbarToggleItem({
|
|
|
1869
2010
|
...props
|
|
1870
2011
|
}) {
|
|
1871
2012
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1872
|
-
|
|
2013
|
+
import_radix_ui16.Toolbar.ToggleItem,
|
|
1873
2014
|
{
|
|
1874
2015
|
"data-slot": "toolbar-toggle-item",
|
|
1875
2016
|
className: cn(
|
|
@@ -1887,7 +2028,7 @@ function ToolbarLink({
|
|
|
1887
2028
|
...props
|
|
1888
2029
|
}) {
|
|
1889
2030
|
return /* @__PURE__ */ (0, import_jsx_runtime19.jsx)(
|
|
1890
|
-
|
|
2031
|
+
import_radix_ui16.Toolbar.Link,
|
|
1891
2032
|
{
|
|
1892
2033
|
"data-slot": "toolbar-link",
|
|
1893
2034
|
className: cn(
|
|
@@ -1900,7 +2041,7 @@ function ToolbarLink({
|
|
|
1900
2041
|
}
|
|
1901
2042
|
|
|
1902
2043
|
// src/ui/menubar.tsx
|
|
1903
|
-
var
|
|
2044
|
+
var import_radix_ui17 = require("radix-ui");
|
|
1904
2045
|
var import_lucide_react8 = require("lucide-react");
|
|
1905
2046
|
var import_jsx_runtime20 = require("react/jsx-runtime");
|
|
1906
2047
|
function Menubar({
|
|
@@ -1908,7 +2049,7 @@ function Menubar({
|
|
|
1908
2049
|
...props
|
|
1909
2050
|
}) {
|
|
1910
2051
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1911
|
-
|
|
2052
|
+
import_radix_ui17.Menubar.Root,
|
|
1912
2053
|
{
|
|
1913
2054
|
"data-slot": "menubar",
|
|
1914
2055
|
className: cn(
|
|
@@ -1922,14 +2063,14 @@ function Menubar({
|
|
|
1922
2063
|
function MenubarMenu({
|
|
1923
2064
|
...props
|
|
1924
2065
|
}) {
|
|
1925
|
-
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2066
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui17.Menubar.Menu, { "data-slot": "menubar-menu", ...props });
|
|
1926
2067
|
}
|
|
1927
2068
|
function MenubarTrigger({
|
|
1928
2069
|
className,
|
|
1929
2070
|
...props
|
|
1930
2071
|
}) {
|
|
1931
2072
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1932
|
-
|
|
2073
|
+
import_radix_ui17.Menubar.Trigger,
|
|
1933
2074
|
{
|
|
1934
2075
|
"data-slot": "menubar-trigger",
|
|
1935
2076
|
className: cn(
|
|
@@ -1948,8 +2089,8 @@ function MenubarContent({
|
|
|
1948
2089
|
sideOffset = 8,
|
|
1949
2090
|
...props
|
|
1950
2091
|
}) {
|
|
1951
|
-
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1952
|
-
|
|
2092
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui17.Menubar.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2093
|
+
import_radix_ui17.Menubar.Content,
|
|
1953
2094
|
{
|
|
1954
2095
|
"data-slot": "menubar-content",
|
|
1955
2096
|
align,
|
|
@@ -1971,7 +2112,7 @@ function MenubarItem({
|
|
|
1971
2112
|
...props
|
|
1972
2113
|
}) {
|
|
1973
2114
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
1974
|
-
|
|
2115
|
+
import_radix_ui17.Menubar.Item,
|
|
1975
2116
|
{
|
|
1976
2117
|
"data-slot": "menubar-item",
|
|
1977
2118
|
"data-inset": inset,
|
|
@@ -1992,14 +2133,14 @@ function MenubarCheckboxItem({
|
|
|
1992
2133
|
...props
|
|
1993
2134
|
}) {
|
|
1994
2135
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
1995
|
-
|
|
2136
|
+
import_radix_ui17.Menubar.CheckboxItem,
|
|
1996
2137
|
{
|
|
1997
2138
|
"data-slot": "menubar-checkbox-item",
|
|
1998
2139
|
className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
|
|
1999
2140
|
checked,
|
|
2000
2141
|
...props,
|
|
2001
2142
|
children: [
|
|
2002
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2143
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui17.Menubar.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react8.CheckIcon, { className: "size-4" }) }) }),
|
|
2003
2144
|
children
|
|
2004
2145
|
]
|
|
2005
2146
|
}
|
|
@@ -2008,7 +2149,7 @@ function MenubarCheckboxItem({
|
|
|
2008
2149
|
function MenubarRadioGroup({
|
|
2009
2150
|
...props
|
|
2010
2151
|
}) {
|
|
2011
|
-
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2152
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui17.Menubar.RadioGroup, { "data-slot": "menubar-radio-group", ...props });
|
|
2012
2153
|
}
|
|
2013
2154
|
function MenubarRadioItem({
|
|
2014
2155
|
className,
|
|
@@ -2016,13 +2157,13 @@ function MenubarRadioItem({
|
|
|
2016
2157
|
...props
|
|
2017
2158
|
}) {
|
|
2018
2159
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
2019
|
-
|
|
2160
|
+
import_radix_ui17.Menubar.RadioItem,
|
|
2020
2161
|
{
|
|
2021
2162
|
"data-slot": "menubar-radio-item",
|
|
2022
2163
|
className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
|
|
2023
2164
|
...props,
|
|
2024
2165
|
children: [
|
|
2025
|
-
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2166
|
+
/* @__PURE__ */ (0, import_jsx_runtime20.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui17.Menubar.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_lucide_react8.CircleIcon, { className: "size-2 fill-current" }) }) }),
|
|
2026
2167
|
children
|
|
2027
2168
|
]
|
|
2028
2169
|
}
|
|
@@ -2034,7 +2175,7 @@ function MenubarLabel({
|
|
|
2034
2175
|
...props
|
|
2035
2176
|
}) {
|
|
2036
2177
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2037
|
-
|
|
2178
|
+
import_radix_ui17.Menubar.Label,
|
|
2038
2179
|
{
|
|
2039
2180
|
"data-slot": "menubar-label",
|
|
2040
2181
|
"data-inset": inset,
|
|
@@ -2051,7 +2192,7 @@ function MenubarSeparator({
|
|
|
2051
2192
|
...props
|
|
2052
2193
|
}) {
|
|
2053
2194
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2054
|
-
|
|
2195
|
+
import_radix_ui17.Menubar.Separator,
|
|
2055
2196
|
{
|
|
2056
2197
|
"data-slot": "menubar-separator",
|
|
2057
2198
|
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
@@ -2078,7 +2219,7 @@ function MenubarShortcut({
|
|
|
2078
2219
|
function MenubarSub({
|
|
2079
2220
|
...props
|
|
2080
2221
|
}) {
|
|
2081
|
-
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2222
|
+
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(import_radix_ui17.Menubar.Sub, { "data-slot": "menubar-sub", ...props });
|
|
2082
2223
|
}
|
|
2083
2224
|
function MenubarSubTrigger({
|
|
2084
2225
|
className,
|
|
@@ -2087,7 +2228,7 @@ function MenubarSubTrigger({
|
|
|
2087
2228
|
...props
|
|
2088
2229
|
}) {
|
|
2089
2230
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsxs)(
|
|
2090
|
-
|
|
2231
|
+
import_radix_ui17.Menubar.SubTrigger,
|
|
2091
2232
|
{
|
|
2092
2233
|
"data-slot": "menubar-sub-trigger",
|
|
2093
2234
|
"data-inset": inset,
|
|
@@ -2109,7 +2250,7 @@ function MenubarSubContent({
|
|
|
2109
2250
|
...props
|
|
2110
2251
|
}) {
|
|
2111
2252
|
return /* @__PURE__ */ (0, import_jsx_runtime20.jsx)(
|
|
2112
|
-
|
|
2253
|
+
import_radix_ui17.Menubar.SubContent,
|
|
2113
2254
|
{
|
|
2114
2255
|
"data-slot": "menubar-sub-content",
|
|
2115
2256
|
className: cn(
|
|
@@ -2123,9 +2264,9 @@ function MenubarSubContent({
|
|
|
2123
2264
|
}
|
|
2124
2265
|
|
|
2125
2266
|
// src/ui/navigation-menu.tsx
|
|
2126
|
-
var
|
|
2267
|
+
var import_radix_ui18 = require("radix-ui");
|
|
2127
2268
|
var import_lucide_react9 = require("lucide-react");
|
|
2128
|
-
var
|
|
2269
|
+
var import_class_variance_authority3 = require("class-variance-authority");
|
|
2129
2270
|
var import_jsx_runtime21 = require("react/jsx-runtime");
|
|
2130
2271
|
function NavigationMenu({
|
|
2131
2272
|
className,
|
|
@@ -2134,7 +2275,7 @@ function NavigationMenu({
|
|
|
2134
2275
|
...props
|
|
2135
2276
|
}) {
|
|
2136
2277
|
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
2137
|
-
|
|
2278
|
+
import_radix_ui18.NavigationMenu.Root,
|
|
2138
2279
|
{
|
|
2139
2280
|
"data-slot": "navigation-menu",
|
|
2140
2281
|
"data-viewport": viewport,
|
|
@@ -2155,7 +2296,7 @@ function NavigationMenuList({
|
|
|
2155
2296
|
...props
|
|
2156
2297
|
}) {
|
|
2157
2298
|
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2158
|
-
|
|
2299
|
+
import_radix_ui18.NavigationMenu.List,
|
|
2159
2300
|
{
|
|
2160
2301
|
"data-slot": "navigation-menu-list",
|
|
2161
2302
|
className: cn(
|
|
@@ -2169,9 +2310,9 @@ function NavigationMenuList({
|
|
|
2169
2310
|
function NavigationMenuItem({
|
|
2170
2311
|
...props
|
|
2171
2312
|
}) {
|
|
2172
|
-
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2313
|
+
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(import_radix_ui18.NavigationMenu.Item, { "data-slot": "navigation-menu-item", ...props });
|
|
2173
2314
|
}
|
|
2174
|
-
var navigationMenuTriggerStyle = (0,
|
|
2315
|
+
var navigationMenuTriggerStyle = (0, import_class_variance_authority3.cva)(
|
|
2175
2316
|
"group inline-flex h-9 w-max items-center justify-center rounded-lg bg-transparent px-4 py-2 text-sm font-medium transition-colors hover:bg-muted hover:text-foreground focus:bg-muted focus:text-foreground focus:outline-none disabled:pointer-events-none disabled:opacity-50 data-[state=open]:bg-muted/80 data-[state=open]:text-foreground"
|
|
2176
2317
|
);
|
|
2177
2318
|
function NavigationMenuTrigger({
|
|
@@ -2180,7 +2321,7 @@ function NavigationMenuTrigger({
|
|
|
2180
2321
|
...props
|
|
2181
2322
|
}) {
|
|
2182
2323
|
return /* @__PURE__ */ (0, import_jsx_runtime21.jsxs)(
|
|
2183
|
-
|
|
2324
|
+
import_radix_ui18.NavigationMenu.Trigger,
|
|
2184
2325
|
{
|
|
2185
2326
|
"data-slot": "navigation-menu-trigger",
|
|
2186
2327
|
className: cn(navigationMenuTriggerStyle(), "group", className),
|
|
@@ -2204,11 +2345,11 @@ function NavigationMenuContent({
|
|
|
2204
2345
|
...props
|
|
2205
2346
|
}) {
|
|
2206
2347
|
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2207
|
-
|
|
2348
|
+
import_radix_ui18.NavigationMenu.Content,
|
|
2208
2349
|
{
|
|
2209
2350
|
"data-slot": "navigation-menu-content",
|
|
2210
2351
|
className: cn(
|
|
2211
|
-
"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-
|
|
2352
|
+
"data-[motion^=from-]:animate-in data-[motion^=to-]:animate-out data-[motion^=from-]:fade-in data-[motion^=to-]:fade-out data-[motion=from-end]:slide-in-from-right-52 data-[motion=from-start]:slide-in-from-left-52 data-[motion=to-end]:slide-out-to-right-52 data-[motion=to-start]:slide-out-to-left-52 top-0 left-0 w-full p-1 md:absolute md:w-auto",
|
|
2212
2353
|
"group-data-[viewport=false]/navigation-menu:bg-popover group-data-[viewport=false]/navigation-menu:text-popover-foreground group-data-[viewport=false]/navigation-menu:data-[state=open]:animate-in group-data-[viewport=false]/navigation-menu:data-[state=closed]:animate-out group-data-[viewport=false]/navigation-menu:data-[state=closed]:zoom-out-95 group-data-[viewport=false]/navigation-menu:data-[state=open]:zoom-in-95 group-data-[viewport=false]/navigation-menu:top-full group-data-[viewport=false]/navigation-menu:mt-1.5 group-data-[viewport=false]/navigation-menu:overflow-hidden group-data-[viewport=false]/navigation-menu:rounded-lg group-data-[viewport=false]/navigation-menu:border group-data-[viewport=false]/navigation-menu:border-border group-data-[viewport=false]/navigation-menu:shadow-card",
|
|
2213
2354
|
className
|
|
2214
2355
|
),
|
|
@@ -2221,7 +2362,7 @@ function NavigationMenuViewport({
|
|
|
2221
2362
|
...props
|
|
2222
2363
|
}) {
|
|
2223
2364
|
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)("div", { className: cn("absolute top-full left-0 isolate z-[80] flex justify-center"), children: /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2224
|
-
|
|
2365
|
+
import_radix_ui18.NavigationMenu.Viewport,
|
|
2225
2366
|
{
|
|
2226
2367
|
"data-slot": "navigation-menu-viewport",
|
|
2227
2368
|
className: cn(
|
|
@@ -2238,11 +2379,11 @@ function NavigationMenuLink({
|
|
|
2238
2379
|
...props
|
|
2239
2380
|
}) {
|
|
2240
2381
|
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2241
|
-
|
|
2382
|
+
import_radix_ui18.NavigationMenu.Link,
|
|
2242
2383
|
{
|
|
2243
2384
|
"data-slot": "navigation-menu-link",
|
|
2244
2385
|
className: cn(
|
|
2245
|
-
"flex flex-col gap-1 rounded-md
|
|
2386
|
+
"flex flex-col gap-1 rounded-md px-3 py-1.5 text-sm transition-colors hover:bg-accent hover:text-accent-foreground focus:bg-accent focus:text-accent-foreground focus:outline-none data-[active=true]:bg-accent/50 data-[active=true]:text-accent-foreground [&_svg:not([class*='size-'])]:size-4",
|
|
2246
2387
|
className
|
|
2247
2388
|
),
|
|
2248
2389
|
...props
|
|
@@ -2254,7 +2395,7 @@ function NavigationMenuIndicator({
|
|
|
2254
2395
|
...props
|
|
2255
2396
|
}) {
|
|
2256
2397
|
return /* @__PURE__ */ (0, import_jsx_runtime21.jsx)(
|
|
2257
|
-
|
|
2398
|
+
import_radix_ui18.NavigationMenu.Indicator,
|
|
2258
2399
|
{
|
|
2259
2400
|
"data-slot": "navigation-menu-indicator",
|
|
2260
2401
|
className: cn(
|
|
@@ -2425,7 +2566,7 @@ function CommandShortcut({
|
|
|
2425
2566
|
}
|
|
2426
2567
|
|
|
2427
2568
|
// src/ui/calendar.tsx
|
|
2428
|
-
var
|
|
2569
|
+
var React2 = __toESM(require("react"), 1);
|
|
2429
2570
|
var import_lucide_react11 = require("lucide-react");
|
|
2430
2571
|
var import_react_day_picker = require("react-day-picker");
|
|
2431
2572
|
var import_jsx_runtime23 = require("react/jsx-runtime");
|
|
@@ -2519,8 +2660,8 @@ function CalendarDayButton({
|
|
|
2519
2660
|
modifiers,
|
|
2520
2661
|
...props
|
|
2521
2662
|
}) {
|
|
2522
|
-
const ref =
|
|
2523
|
-
|
|
2663
|
+
const ref = React2.useRef(null);
|
|
2664
|
+
React2.useEffect(() => {
|
|
2524
2665
|
if (modifiers.focused) ref.current?.focus();
|
|
2525
2666
|
}, [modifiers.focused]);
|
|
2526
2667
|
const isSingle = modifiers.selected && !modifiers.range_start && !modifiers.range_end && !modifiers.range_middle;
|
|
@@ -2731,7 +2872,7 @@ function DatePickerButton({
|
|
|
2731
2872
|
|
|
2732
2873
|
// src/ui/input-otp.tsx
|
|
2733
2874
|
var import_lucide_react14 = require("lucide-react");
|
|
2734
|
-
var
|
|
2875
|
+
var import_radix_ui19 = require("radix-ui");
|
|
2735
2876
|
var import_jsx_runtime26 = require("react/jsx-runtime");
|
|
2736
2877
|
function InputOTP({
|
|
2737
2878
|
className,
|
|
@@ -2740,7 +2881,7 @@ function InputOTP({
|
|
|
2740
2881
|
...props
|
|
2741
2882
|
}) {
|
|
2742
2883
|
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
2743
|
-
|
|
2884
|
+
import_radix_ui19.unstable_OneTimePasswordField.Root,
|
|
2744
2885
|
{
|
|
2745
2886
|
"data-slot": "input-otp",
|
|
2746
2887
|
className: cn(
|
|
@@ -2771,7 +2912,7 @@ function InputOTPSlot({
|
|
|
2771
2912
|
...props
|
|
2772
2913
|
}) {
|
|
2773
2914
|
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
2774
|
-
|
|
2915
|
+
import_radix_ui19.unstable_OneTimePasswordField.Input,
|
|
2775
2916
|
{
|
|
2776
2917
|
"data-slot": "input-otp-slot",
|
|
2777
2918
|
className: cn(
|
|
@@ -2788,7 +2929,7 @@ function InputOTPSlot({
|
|
|
2788
2929
|
function InputOTPHiddenInput({
|
|
2789
2930
|
...props
|
|
2790
2931
|
}) {
|
|
2791
|
-
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(
|
|
2932
|
+
return /* @__PURE__ */ (0, import_jsx_runtime26.jsx)(import_radix_ui19.unstable_OneTimePasswordField.HiddenInput, { "data-slot": "input-otp-hidden-input", ...props });
|
|
2792
2933
|
}
|
|
2793
2934
|
function InputOTPSeparator({
|
|
2794
2935
|
className,
|
|
@@ -2946,20 +3087,20 @@ function InputGroupText({
|
|
|
2946
3087
|
}
|
|
2947
3088
|
|
|
2948
3089
|
// src/ui/accordion.tsx
|
|
2949
|
-
var
|
|
3090
|
+
var import_radix_ui20 = require("radix-ui");
|
|
2950
3091
|
var import_lucide_react15 = require("lucide-react");
|
|
2951
3092
|
var import_jsx_runtime30 = require("react/jsx-runtime");
|
|
2952
3093
|
function Accordion({
|
|
2953
3094
|
...props
|
|
2954
3095
|
}) {
|
|
2955
|
-
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
3096
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_radix_ui20.Accordion.Root, { "data-slot": "accordion", ...props });
|
|
2956
3097
|
}
|
|
2957
3098
|
function AccordionItem({
|
|
2958
3099
|
className,
|
|
2959
3100
|
...props
|
|
2960
3101
|
}) {
|
|
2961
3102
|
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2962
|
-
|
|
3103
|
+
import_radix_ui20.Accordion.Item,
|
|
2963
3104
|
{
|
|
2964
3105
|
"data-slot": "accordion-item",
|
|
2965
3106
|
className: cn("border-b border-border last:border-b-0", className),
|
|
@@ -2972,8 +3113,8 @@ function AccordionTrigger({
|
|
|
2972
3113
|
children,
|
|
2973
3114
|
...props
|
|
2974
3115
|
}) {
|
|
2975
|
-
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2976
|
-
|
|
3116
|
+
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(import_radix_ui20.Accordion.Header, { className: "flex", children: /* @__PURE__ */ (0, import_jsx_runtime30.jsxs)(
|
|
3117
|
+
import_radix_ui20.Accordion.Trigger,
|
|
2977
3118
|
{
|
|
2978
3119
|
"data-slot": "accordion-trigger",
|
|
2979
3120
|
className: cn(
|
|
@@ -2996,7 +3137,7 @@ function AccordionContent({
|
|
|
2996
3137
|
...props
|
|
2997
3138
|
}) {
|
|
2998
3139
|
return /* @__PURE__ */ (0, import_jsx_runtime30.jsx)(
|
|
2999
|
-
|
|
3140
|
+
import_radix_ui20.Accordion.Content,
|
|
3000
3141
|
{
|
|
3001
3142
|
"data-slot": "accordion-content",
|
|
3002
3143
|
className: "overflow-hidden text-sm text-muted-foreground data-[state=closed]:animate-accordion-up data-[state=open]:animate-accordion-down",
|
|
@@ -3007,7 +3148,7 @@ function AccordionContent({
|
|
|
3007
3148
|
}
|
|
3008
3149
|
|
|
3009
3150
|
// src/ui/separator.tsx
|
|
3010
|
-
var
|
|
3151
|
+
var import_radix_ui21 = require("radix-ui");
|
|
3011
3152
|
var import_jsx_runtime31 = require("react/jsx-runtime");
|
|
3012
3153
|
function Separator({
|
|
3013
3154
|
className,
|
|
@@ -3016,7 +3157,7 @@ function Separator({
|
|
|
3016
3157
|
...props
|
|
3017
3158
|
}) {
|
|
3018
3159
|
return /* @__PURE__ */ (0, import_jsx_runtime31.jsx)(
|
|
3019
|
-
|
|
3160
|
+
import_radix_ui21.Separator.Root,
|
|
3020
3161
|
{
|
|
3021
3162
|
"data-slot": "separator",
|
|
3022
3163
|
decorative,
|
|
@@ -3031,8 +3172,8 @@ function Separator({
|
|
|
3031
3172
|
}
|
|
3032
3173
|
|
|
3033
3174
|
// src/ui/slider.tsx
|
|
3034
|
-
var
|
|
3035
|
-
var
|
|
3175
|
+
var React3 = __toESM(require("react"), 1);
|
|
3176
|
+
var import_radix_ui22 = require("radix-ui");
|
|
3036
3177
|
var import_jsx_runtime32 = require("react/jsx-runtime");
|
|
3037
3178
|
function Slider({
|
|
3038
3179
|
className,
|
|
@@ -3042,13 +3183,13 @@ function Slider({
|
|
|
3042
3183
|
max = 100,
|
|
3043
3184
|
...props
|
|
3044
3185
|
}) {
|
|
3045
|
-
const thumbs =
|
|
3186
|
+
const thumbs = React3.useMemo(() => {
|
|
3046
3187
|
if (Array.isArray(value)) return value;
|
|
3047
3188
|
if (Array.isArray(defaultValue)) return defaultValue;
|
|
3048
3189
|
return [min];
|
|
3049
3190
|
}, [value, defaultValue, min]);
|
|
3050
3191
|
return /* @__PURE__ */ (0, import_jsx_runtime32.jsxs)(
|
|
3051
|
-
|
|
3192
|
+
import_radix_ui22.Slider.Root,
|
|
3052
3193
|
{
|
|
3053
3194
|
"data-slot": "slider",
|
|
3054
3195
|
defaultValue,
|
|
@@ -3063,12 +3204,12 @@ function Slider({
|
|
|
3063
3204
|
...props,
|
|
3064
3205
|
children: [
|
|
3065
3206
|
/* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
3066
|
-
|
|
3207
|
+
import_radix_ui22.Slider.Track,
|
|
3067
3208
|
{
|
|
3068
3209
|
"data-slot": "slider-track",
|
|
3069
3210
|
className: "relative grow overflow-hidden rounded-full bg-muted data-[orientation=horizontal]:h-1.5 data-[orientation=horizontal]:w-full data-[orientation=vertical]:h-full data-[orientation=vertical]:w-1.5",
|
|
3070
3211
|
children: /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
3071
|
-
|
|
3212
|
+
import_radix_ui22.Slider.Range,
|
|
3072
3213
|
{
|
|
3073
3214
|
"data-slot": "slider-range",
|
|
3074
3215
|
className: "absolute bg-gradient-to-b from-primary-fill-from to-primary-fill-to data-[orientation=horizontal]:h-full data-[orientation=vertical]:w-full"
|
|
@@ -3077,7 +3218,7 @@ function Slider({
|
|
|
3077
3218
|
}
|
|
3078
3219
|
),
|
|
3079
3220
|
Array.from({ length: thumbs.length }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime32.jsx)(
|
|
3080
|
-
|
|
3221
|
+
import_radix_ui22.Slider.Thumb,
|
|
3081
3222
|
{
|
|
3082
3223
|
"data-slot": "slider-thumb",
|
|
3083
3224
|
className: "block size-4 shrink-0 rounded-full border border-border bg-gradient-to-b from-elevated-from to-elevated-to shadow-card outline-none transition-[box-shadow] focus-visible:ring-2 focus-visible:ring-foreground/10 disabled:pointer-events-none disabled:opacity-50"
|
|
@@ -3090,7 +3231,7 @@ function Slider({
|
|
|
3090
3231
|
}
|
|
3091
3232
|
|
|
3092
3233
|
// src/ui/progress.tsx
|
|
3093
|
-
var
|
|
3234
|
+
var import_radix_ui23 = require("radix-ui");
|
|
3094
3235
|
var import_jsx_runtime33 = require("react/jsx-runtime");
|
|
3095
3236
|
function Progress({
|
|
3096
3237
|
className,
|
|
@@ -3098,7 +3239,7 @@ function Progress({
|
|
|
3098
3239
|
...props
|
|
3099
3240
|
}) {
|
|
3100
3241
|
return /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
3101
|
-
|
|
3242
|
+
import_radix_ui23.Progress.Root,
|
|
3102
3243
|
{
|
|
3103
3244
|
"data-slot": "progress",
|
|
3104
3245
|
className: cn(
|
|
@@ -3107,7 +3248,7 @@ function Progress({
|
|
|
3107
3248
|
),
|
|
3108
3249
|
...props,
|
|
3109
3250
|
children: /* @__PURE__ */ (0, import_jsx_runtime33.jsx)(
|
|
3110
|
-
|
|
3251
|
+
import_radix_ui23.Progress.Indicator,
|
|
3111
3252
|
{
|
|
3112
3253
|
"data-slot": "progress-indicator",
|
|
3113
3254
|
className: "h-full w-full flex-1 bg-gradient-to-b from-primary-fill-from to-primary-fill-to transition-transform",
|
|
@@ -3119,10 +3260,10 @@ function Progress({
|
|
|
3119
3260
|
}
|
|
3120
3261
|
|
|
3121
3262
|
// src/ui/badge.tsx
|
|
3122
|
-
var
|
|
3123
|
-
var
|
|
3263
|
+
var import_radix_ui24 = require("radix-ui");
|
|
3264
|
+
var import_class_variance_authority4 = require("class-variance-authority");
|
|
3124
3265
|
var import_jsx_runtime34 = require("react/jsx-runtime");
|
|
3125
|
-
var badgeVariants = (0,
|
|
3266
|
+
var badgeVariants = (0, import_class_variance_authority4.cva)(
|
|
3126
3267
|
"inline-flex w-fit shrink-0 items-center justify-center gap-1 whitespace-nowrap rounded-md border px-2 py-0.5 text-xs font-medium [&>svg]:pointer-events-none [&>svg]:size-3",
|
|
3127
3268
|
{
|
|
3128
3269
|
variants: {
|
|
@@ -3144,7 +3285,7 @@ function Badge({
|
|
|
3144
3285
|
asChild = false,
|
|
3145
3286
|
...props
|
|
3146
3287
|
}) {
|
|
3147
|
-
const Comp = asChild ?
|
|
3288
|
+
const Comp = asChild ? import_radix_ui24.Slot.Root : "span";
|
|
3148
3289
|
return /* @__PURE__ */ (0, import_jsx_runtime34.jsx)(
|
|
3149
3290
|
Comp,
|
|
3150
3291
|
{
|
|
@@ -3157,59 +3298,85 @@ function Badge({
|
|
|
3157
3298
|
|
|
3158
3299
|
// src/ui/sheet.tsx
|
|
3159
3300
|
var import_lucide_react16 = require("lucide-react");
|
|
3160
|
-
var
|
|
3161
|
-
var
|
|
3301
|
+
var import_radix_ui25 = require("radix-ui");
|
|
3302
|
+
var import_class_variance_authority5 = require("class-variance-authority");
|
|
3162
3303
|
var import_jsx_runtime35 = require("react/jsx-runtime");
|
|
3163
3304
|
function Sheet({ ...props }) {
|
|
3164
|
-
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
3305
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_radix_ui25.Dialog.Root, { "data-slot": "sheet", ...props });
|
|
3165
3306
|
}
|
|
3166
3307
|
function SheetTrigger({
|
|
3167
3308
|
...props
|
|
3168
3309
|
}) {
|
|
3169
|
-
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
3310
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_radix_ui25.Dialog.Trigger, { "data-slot": "sheet-trigger", ...props });
|
|
3170
3311
|
}
|
|
3171
3312
|
function SheetClose({
|
|
3172
3313
|
...props
|
|
3173
3314
|
}) {
|
|
3174
|
-
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
3315
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_radix_ui25.Dialog.Close, { "data-slot": "sheet-close", ...props });
|
|
3175
3316
|
}
|
|
3176
3317
|
function SheetPortal({
|
|
3177
3318
|
...props
|
|
3178
3319
|
}) {
|
|
3179
|
-
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
3320
|
+
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_radix_ui25.Dialog.Portal, { "data-slot": "sheet-portal", ...props });
|
|
3180
3321
|
}
|
|
3181
3322
|
function SheetOverlay({
|
|
3182
3323
|
className,
|
|
3183
3324
|
...props
|
|
3184
3325
|
}) {
|
|
3185
3326
|
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
3186
|
-
|
|
3327
|
+
import_radix_ui25.Dialog.Overlay,
|
|
3187
3328
|
{
|
|
3188
3329
|
"data-slot": "sheet-overlay",
|
|
3189
3330
|
className: cn(
|
|
3190
|
-
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-[70] bg-black/
|
|
3331
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=closed]:fade-out-0 data-[state=open]:fade-in-0 fixed inset-0 z-[70] bg-black/40 backdrop-blur-[2px] duration-300",
|
|
3191
3332
|
className
|
|
3192
3333
|
),
|
|
3193
3334
|
...props
|
|
3194
3335
|
}
|
|
3195
3336
|
);
|
|
3196
3337
|
}
|
|
3197
|
-
var sheetContentVariants = (0,
|
|
3338
|
+
var sheetContentVariants = (0, import_class_variance_authority5.cva)(
|
|
3198
3339
|
cn(
|
|
3199
3340
|
TIMBAL_V2_MODAL_SURFACE,
|
|
3200
|
-
"data-[state=open]:animate-in data-[state=closed]:animate-out fixed z-[70] flex flex-col gap-4 shadow-card-elevated
|
|
3341
|
+
"data-[state=open]:animate-in data-[state=closed]:animate-out data-[state=open]:fade-in-0 data-[state=closed]:fade-out-0 fixed z-[70] flex flex-col gap-4 shadow-card-elevated duration-300"
|
|
3201
3342
|
),
|
|
3202
3343
|
{
|
|
3203
3344
|
variants: {
|
|
3204
3345
|
side: {
|
|
3205
|
-
top: "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top inset-x-
|
|
3206
|
-
bottom: "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom inset-x-
|
|
3207
|
-
left: "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left
|
|
3208
|
-
right: "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right
|
|
3346
|
+
top: "data-[state=closed]:slide-out-to-top data-[state=open]:slide-in-from-top fixed top-4 inset-x-4 mx-auto w-[calc(100vw-2rem)] sm:max-w-lg rounded-2xl p-6",
|
|
3347
|
+
bottom: "data-[state=closed]:slide-out-to-bottom data-[state=open]:slide-in-from-bottom fixed bottom-4 inset-x-4 mx-auto w-[calc(100vw-2rem)] sm:max-w-lg rounded-2xl p-6",
|
|
3348
|
+
left: "data-[state=closed]:slide-out-to-left data-[state=open]:slide-in-from-left fixed top-4 bottom-4 left-4 w-[calc(100vw-2rem)] rounded-2xl p-6",
|
|
3349
|
+
right: "data-[state=closed]:slide-out-to-right data-[state=open]:slide-in-from-right fixed top-4 bottom-4 right-4 w-[calc(100vw-2rem)] rounded-2xl p-6"
|
|
3350
|
+
},
|
|
3351
|
+
size: {
|
|
3352
|
+
default: "",
|
|
3353
|
+
sm: "",
|
|
3354
|
+
md: "",
|
|
3355
|
+
lg: "",
|
|
3356
|
+
xl: "",
|
|
3357
|
+
"2xl": "",
|
|
3358
|
+
full: ""
|
|
3209
3359
|
}
|
|
3210
3360
|
},
|
|
3361
|
+
compoundVariants: [
|
|
3362
|
+
{ side: "left", size: "default", class: "sm:max-w-md md:max-w-lg" },
|
|
3363
|
+
{ side: "right", size: "default", class: "sm:max-w-md md:max-w-lg" },
|
|
3364
|
+
{ side: "left", size: "sm", class: "sm:max-w-sm md:max-w-md" },
|
|
3365
|
+
{ side: "right", size: "sm", class: "sm:max-w-sm md:max-w-md" },
|
|
3366
|
+
{ side: "left", size: "md", class: "sm:max-w-md md:max-w-lg" },
|
|
3367
|
+
{ side: "right", size: "md", class: "sm:max-w-md md:max-w-lg" },
|
|
3368
|
+
{ side: "left", size: "lg", class: "sm:max-w-lg md:max-w-xl lg:max-w-2xl" },
|
|
3369
|
+
{ side: "right", size: "lg", class: "sm:max-w-lg md:max-w-xl lg:max-w-2xl" },
|
|
3370
|
+
{ side: "left", size: "xl", class: "sm:max-w-xl md:max-w-3xl lg:max-w-4xl" },
|
|
3371
|
+
{ side: "right", size: "xl", class: "sm:max-w-xl md:max-w-3xl lg:max-w-4xl" },
|
|
3372
|
+
{ side: "left", size: "2xl", class: "sm:max-w-2xl md:max-w-4xl lg:max-w-5xl xl:max-w-6xl" },
|
|
3373
|
+
{ side: "right", size: "2xl", class: "sm:max-w-2xl md:max-w-4xl lg:max-w-5xl xl:max-w-6xl" },
|
|
3374
|
+
{ side: "left", size: "full", class: "max-w-[calc(100vw-2rem)]" },
|
|
3375
|
+
{ side: "right", size: "full", class: "max-w-[calc(100vw-2rem)]" }
|
|
3376
|
+
],
|
|
3211
3377
|
defaultVariants: {
|
|
3212
|
-
side: "right"
|
|
3378
|
+
side: "right",
|
|
3379
|
+
size: "default"
|
|
3213
3380
|
}
|
|
3214
3381
|
}
|
|
3215
3382
|
);
|
|
@@ -3217,20 +3384,21 @@ function SheetContent({
|
|
|
3217
3384
|
className,
|
|
3218
3385
|
children,
|
|
3219
3386
|
side = "right",
|
|
3387
|
+
size = "default",
|
|
3220
3388
|
showCloseButton = true,
|
|
3221
3389
|
...props
|
|
3222
3390
|
}) {
|
|
3223
3391
|
return /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(SheetPortal, { children: [
|
|
3224
3392
|
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(SheetOverlay, {}),
|
|
3225
3393
|
/* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
|
|
3226
|
-
|
|
3394
|
+
import_radix_ui25.Dialog.Content,
|
|
3227
3395
|
{
|
|
3228
3396
|
"data-slot": "sheet-content",
|
|
3229
|
-
className: cn(sheetContentVariants({ side }), className),
|
|
3397
|
+
className: cn(sheetContentVariants({ side, size }), className),
|
|
3230
3398
|
...props,
|
|
3231
3399
|
children: [
|
|
3232
3400
|
children,
|
|
3233
|
-
showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(
|
|
3401
|
+
showCloseButton ? /* @__PURE__ */ (0, import_jsx_runtime35.jsxs)(import_radix_ui25.Dialog.Close, { className: "absolute top-4 right-4 rounded-xs opacity-70 transition-[opacity,background-color] hover:bg-ghost-fill-hover hover:opacity-100 focus:ring-2 focus:ring-foreground/10 focus:outline-hidden disabled:pointer-events-none", children: [
|
|
3234
3402
|
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)(import_lucide_react16.XIcon, { className: "size-4" }),
|
|
3235
3403
|
/* @__PURE__ */ (0, import_jsx_runtime35.jsx)("span", { className: "sr-only", children: "Close" })
|
|
3236
3404
|
] }) : null
|
|
@@ -3264,7 +3432,7 @@ function SheetTitle({
|
|
|
3264
3432
|
...props
|
|
3265
3433
|
}) {
|
|
3266
3434
|
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
3267
|
-
|
|
3435
|
+
import_radix_ui25.Dialog.Title,
|
|
3268
3436
|
{
|
|
3269
3437
|
"data-slot": "sheet-title",
|
|
3270
3438
|
className: cn("text-lg font-semibold text-foreground", className),
|
|
@@ -3277,7 +3445,7 @@ function SheetDescription({
|
|
|
3277
3445
|
...props
|
|
3278
3446
|
}) {
|
|
3279
3447
|
return /* @__PURE__ */ (0, import_jsx_runtime35.jsx)(
|
|
3280
|
-
|
|
3448
|
+
import_radix_ui25.Dialog.Description,
|
|
3281
3449
|
{
|
|
3282
3450
|
"data-slot": "sheet-description",
|
|
3283
3451
|
className: cn("text-sm text-muted-foreground", className),
|
|
@@ -3287,29 +3455,29 @@ function SheetDescription({
|
|
|
3287
3455
|
}
|
|
3288
3456
|
|
|
3289
3457
|
// src/ui/alert-dialog.tsx
|
|
3290
|
-
var
|
|
3458
|
+
var import_radix_ui26 = require("radix-ui");
|
|
3291
3459
|
var import_jsx_runtime36 = require("react/jsx-runtime");
|
|
3292
3460
|
function AlertDialog({
|
|
3293
3461
|
...props
|
|
3294
3462
|
}) {
|
|
3295
|
-
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
3463
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_radix_ui26.AlertDialog.Root, { "data-slot": "alert-dialog", ...props });
|
|
3296
3464
|
}
|
|
3297
3465
|
function AlertDialogTrigger({
|
|
3298
3466
|
...props
|
|
3299
3467
|
}) {
|
|
3300
|
-
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
3468
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_radix_ui26.AlertDialog.Trigger, { "data-slot": "alert-dialog-trigger", ...props });
|
|
3301
3469
|
}
|
|
3302
3470
|
function AlertDialogPortal({
|
|
3303
3471
|
...props
|
|
3304
3472
|
}) {
|
|
3305
|
-
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
3473
|
+
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(import_radix_ui26.AlertDialog.Portal, { "data-slot": "alert-dialog-portal", ...props });
|
|
3306
3474
|
}
|
|
3307
3475
|
function AlertDialogOverlay({
|
|
3308
3476
|
className,
|
|
3309
3477
|
...props
|
|
3310
3478
|
}) {
|
|
3311
3479
|
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
3312
|
-
|
|
3480
|
+
import_radix_ui26.AlertDialog.Overlay,
|
|
3313
3481
|
{
|
|
3314
3482
|
"data-slot": "alert-dialog-overlay",
|
|
3315
3483
|
className: cn(
|
|
@@ -3327,7 +3495,7 @@ function AlertDialogContent({
|
|
|
3327
3495
|
return /* @__PURE__ */ (0, import_jsx_runtime36.jsxs)(AlertDialogPortal, { children: [
|
|
3328
3496
|
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(AlertDialogOverlay, {}),
|
|
3329
3497
|
/* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
3330
|
-
|
|
3498
|
+
import_radix_ui26.AlertDialog.Content,
|
|
3331
3499
|
{
|
|
3332
3500
|
"data-slot": "alert-dialog-content",
|
|
3333
3501
|
className: cn(
|
|
@@ -3368,7 +3536,7 @@ function AlertDialogTitle({
|
|
|
3368
3536
|
...props
|
|
3369
3537
|
}) {
|
|
3370
3538
|
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
3371
|
-
|
|
3539
|
+
import_radix_ui26.AlertDialog.Title,
|
|
3372
3540
|
{
|
|
3373
3541
|
"data-slot": "alert-dialog-title",
|
|
3374
3542
|
className: cn("text-lg font-semibold", className),
|
|
@@ -3381,7 +3549,7 @@ function AlertDialogDescription({
|
|
|
3381
3549
|
...props
|
|
3382
3550
|
}) {
|
|
3383
3551
|
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
3384
|
-
|
|
3552
|
+
import_radix_ui26.AlertDialog.Description,
|
|
3385
3553
|
{
|
|
3386
3554
|
"data-slot": "alert-dialog-description",
|
|
3387
3555
|
className: cn("text-sm text-muted-foreground", className),
|
|
@@ -3394,7 +3562,7 @@ function AlertDialogAction({
|
|
|
3394
3562
|
...props
|
|
3395
3563
|
}) {
|
|
3396
3564
|
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Button, { asChild: true, children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
3397
|
-
|
|
3565
|
+
import_radix_ui26.AlertDialog.Action,
|
|
3398
3566
|
{
|
|
3399
3567
|
"data-slot": "alert-dialog-action",
|
|
3400
3568
|
className,
|
|
@@ -3407,7 +3575,7 @@ function AlertDialogCancel({
|
|
|
3407
3575
|
...props
|
|
3408
3576
|
}) {
|
|
3409
3577
|
return /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(Button, { asChild: true, variant: "outline", children: /* @__PURE__ */ (0, import_jsx_runtime36.jsx)(
|
|
3410
|
-
|
|
3578
|
+
import_radix_ui26.AlertDialog.Cancel,
|
|
3411
3579
|
{
|
|
3412
3580
|
"data-slot": "alert-dialog-cancel",
|
|
3413
3581
|
className,
|
|
@@ -3417,24 +3585,24 @@ function AlertDialogCancel({
|
|
|
3417
3585
|
}
|
|
3418
3586
|
|
|
3419
3587
|
// src/ui/collapsible.tsx
|
|
3420
|
-
var
|
|
3588
|
+
var import_radix_ui27 = require("radix-ui");
|
|
3421
3589
|
var import_jsx_runtime37 = require("react/jsx-runtime");
|
|
3422
3590
|
function Collapsible({
|
|
3423
3591
|
...props
|
|
3424
3592
|
}) {
|
|
3425
|
-
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
3593
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_radix_ui27.Collapsible.Root, { "data-slot": "collapsible", ...props });
|
|
3426
3594
|
}
|
|
3427
3595
|
function CollapsibleTrigger({
|
|
3428
3596
|
...props
|
|
3429
3597
|
}) {
|
|
3430
|
-
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
3598
|
+
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(import_radix_ui27.Collapsible.Trigger, { "data-slot": "collapsible-trigger", ...props });
|
|
3431
3599
|
}
|
|
3432
3600
|
function CollapsibleContent({
|
|
3433
3601
|
className,
|
|
3434
3602
|
...props
|
|
3435
3603
|
}) {
|
|
3436
3604
|
return /* @__PURE__ */ (0, import_jsx_runtime37.jsx)(
|
|
3437
|
-
|
|
3605
|
+
import_radix_ui27.Collapsible.Content,
|
|
3438
3606
|
{
|
|
3439
3607
|
"data-slot": "collapsible-content",
|
|
3440
3608
|
className: cn(
|
|
@@ -3447,7 +3615,7 @@ function CollapsibleContent({
|
|
|
3447
3615
|
}
|
|
3448
3616
|
|
|
3449
3617
|
// src/ui/scroll-area.tsx
|
|
3450
|
-
var
|
|
3618
|
+
var import_radix_ui28 = require("radix-ui");
|
|
3451
3619
|
var import_jsx_runtime38 = require("react/jsx-runtime");
|
|
3452
3620
|
function ScrollArea({
|
|
3453
3621
|
className,
|
|
@@ -3455,14 +3623,14 @@ function ScrollArea({
|
|
|
3455
3623
|
...props
|
|
3456
3624
|
}) {
|
|
3457
3625
|
return /* @__PURE__ */ (0, import_jsx_runtime38.jsxs)(
|
|
3458
|
-
|
|
3626
|
+
import_radix_ui28.ScrollArea.Root,
|
|
3459
3627
|
{
|
|
3460
3628
|
"data-slot": "scroll-area",
|
|
3461
3629
|
className: cn("relative overflow-hidden", className),
|
|
3462
3630
|
...props,
|
|
3463
3631
|
children: [
|
|
3464
3632
|
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
3465
|
-
|
|
3633
|
+
import_radix_ui28.ScrollArea.Viewport,
|
|
3466
3634
|
{
|
|
3467
3635
|
"data-slot": "scroll-area-viewport",
|
|
3468
3636
|
className: "size-full rounded-[inherit] outline-none transition-[color,box-shadow] focus-visible:ring-2 focus-visible:ring-foreground/10",
|
|
@@ -3470,7 +3638,7 @@ function ScrollArea({
|
|
|
3470
3638
|
}
|
|
3471
3639
|
),
|
|
3472
3640
|
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(ScrollBar, {}),
|
|
3473
|
-
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
3641
|
+
/* @__PURE__ */ (0, import_jsx_runtime38.jsx)(import_radix_ui28.ScrollArea.Corner, {})
|
|
3474
3642
|
]
|
|
3475
3643
|
}
|
|
3476
3644
|
);
|
|
@@ -3481,7 +3649,7 @@ function ScrollBar({
|
|
|
3481
3649
|
...props
|
|
3482
3650
|
}) {
|
|
3483
3651
|
return /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
3484
|
-
|
|
3652
|
+
import_radix_ui28.ScrollArea.ScrollAreaScrollbar,
|
|
3485
3653
|
{
|
|
3486
3654
|
"data-slot": "scroll-area-scrollbar",
|
|
3487
3655
|
orientation,
|
|
@@ -3493,7 +3661,7 @@ function ScrollBar({
|
|
|
3493
3661
|
),
|
|
3494
3662
|
...props,
|
|
3495
3663
|
children: /* @__PURE__ */ (0, import_jsx_runtime38.jsx)(
|
|
3496
|
-
|
|
3664
|
+
import_radix_ui28.ScrollArea.ScrollAreaThumb,
|
|
3497
3665
|
{
|
|
3498
3666
|
"data-slot": "scroll-area-thumb",
|
|
3499
3667
|
className: "relative flex-1 rounded-full bg-border"
|
|
@@ -3504,10 +3672,10 @@ function ScrollBar({
|
|
|
3504
3672
|
}
|
|
3505
3673
|
|
|
3506
3674
|
// src/ui/toggle.tsx
|
|
3507
|
-
var
|
|
3508
|
-
var
|
|
3675
|
+
var import_radix_ui29 = require("radix-ui");
|
|
3676
|
+
var import_class_variance_authority6 = require("class-variance-authority");
|
|
3509
3677
|
var import_jsx_runtime39 = require("react/jsx-runtime");
|
|
3510
|
-
var toggleVariants = (0,
|
|
3678
|
+
var toggleVariants = (0, import_class_variance_authority6.cva)(
|
|
3511
3679
|
"inline-flex items-center justify-center gap-2 rounded-lg text-sm font-medium whitespace-nowrap outline-none transition-[color,box-shadow,background-color,border-color] disabled:pointer-events-none disabled:opacity-50 [&_svg]:pointer-events-none [&_svg:not([class*='size-'])]:size-4 [&_svg]:shrink-0",
|
|
3512
3680
|
{
|
|
3513
3681
|
variants: {
|
|
@@ -3544,7 +3712,7 @@ function Toggle({
|
|
|
3544
3712
|
...props
|
|
3545
3713
|
}) {
|
|
3546
3714
|
return /* @__PURE__ */ (0, import_jsx_runtime39.jsx)(
|
|
3547
|
-
|
|
3715
|
+
import_radix_ui29.Toggle.Root,
|
|
3548
3716
|
{
|
|
3549
3717
|
"data-slot": "toggle",
|
|
3550
3718
|
className: cn(toggleVariants({ variant, size, className })),
|
|
@@ -3554,14 +3722,14 @@ function Toggle({
|
|
|
3554
3722
|
}
|
|
3555
3723
|
|
|
3556
3724
|
// src/ui/toggle-group.tsx
|
|
3557
|
-
var
|
|
3725
|
+
var import_radix_ui30 = require("radix-ui");
|
|
3558
3726
|
var import_jsx_runtime40 = require("react/jsx-runtime");
|
|
3559
3727
|
function ToggleGroup({
|
|
3560
3728
|
className,
|
|
3561
3729
|
...props
|
|
3562
3730
|
}) {
|
|
3563
3731
|
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
3564
|
-
|
|
3732
|
+
import_radix_ui30.ToggleGroup.Root,
|
|
3565
3733
|
{
|
|
3566
3734
|
"data-slot": "toggle-group",
|
|
3567
3735
|
className: cn("flex items-center gap-1", className),
|
|
@@ -3574,7 +3742,7 @@ function ToggleGroupItem({
|
|
|
3574
3742
|
...props
|
|
3575
3743
|
}) {
|
|
3576
3744
|
return /* @__PURE__ */ (0, import_jsx_runtime40.jsx)(
|
|
3577
|
-
|
|
3745
|
+
import_radix_ui30.ToggleGroup.Item,
|
|
3578
3746
|
{
|
|
3579
3747
|
"data-slot": "toggle-group-item",
|
|
3580
3748
|
className: cn(toggleVariants({ variant: "default", size: "default" }), className),
|
|
@@ -3584,17 +3752,17 @@ function ToggleGroupItem({
|
|
|
3584
3752
|
}
|
|
3585
3753
|
|
|
3586
3754
|
// src/ui/hover-card.tsx
|
|
3587
|
-
var
|
|
3755
|
+
var import_radix_ui31 = require("radix-ui");
|
|
3588
3756
|
var import_jsx_runtime41 = require("react/jsx-runtime");
|
|
3589
3757
|
function HoverCard({
|
|
3590
3758
|
...props
|
|
3591
3759
|
}) {
|
|
3592
|
-
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
3760
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_radix_ui31.HoverCard.Root, { "data-slot": "hover-card", ...props });
|
|
3593
3761
|
}
|
|
3594
3762
|
function HoverCardTrigger({
|
|
3595
3763
|
...props
|
|
3596
3764
|
}) {
|
|
3597
|
-
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
3765
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_radix_ui31.HoverCard.Trigger, { "data-slot": "hover-card-trigger", ...props });
|
|
3598
3766
|
}
|
|
3599
3767
|
function HoverCardContent({
|
|
3600
3768
|
className,
|
|
@@ -3602,8 +3770,8 @@ function HoverCardContent({
|
|
|
3602
3770
|
sideOffset = 4,
|
|
3603
3771
|
...props
|
|
3604
3772
|
}) {
|
|
3605
|
-
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
3606
|
-
|
|
3773
|
+
return /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(import_radix_ui31.HoverCard.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime41.jsx)(
|
|
3774
|
+
import_radix_ui31.HoverCard.Content,
|
|
3607
3775
|
{
|
|
3608
3776
|
"data-slot": "hover-card-content",
|
|
3609
3777
|
align,
|
|
@@ -3619,30 +3787,30 @@ function HoverCardContent({
|
|
|
3619
3787
|
}
|
|
3620
3788
|
|
|
3621
3789
|
// src/ui/context-menu.tsx
|
|
3622
|
-
var
|
|
3790
|
+
var import_radix_ui32 = require("radix-ui");
|
|
3623
3791
|
var import_lucide_react17 = require("lucide-react");
|
|
3624
3792
|
var import_jsx_runtime42 = require("react/jsx-runtime");
|
|
3625
3793
|
function ContextMenu({
|
|
3626
3794
|
...props
|
|
3627
3795
|
}) {
|
|
3628
|
-
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3796
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui32.ContextMenu.Root, { "data-slot": "context-menu", ...props });
|
|
3629
3797
|
}
|
|
3630
3798
|
function ContextMenuTrigger({
|
|
3631
3799
|
...props
|
|
3632
3800
|
}) {
|
|
3633
|
-
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3801
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui32.ContextMenu.Trigger, { "data-slot": "context-menu-trigger", ...props });
|
|
3634
3802
|
}
|
|
3635
3803
|
function ContextMenuGroup({
|
|
3636
3804
|
...props
|
|
3637
3805
|
}) {
|
|
3638
|
-
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3806
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui32.ContextMenu.Group, { "data-slot": "context-menu-group", ...props });
|
|
3639
3807
|
}
|
|
3640
3808
|
function ContextMenuContent({
|
|
3641
3809
|
className,
|
|
3642
3810
|
...props
|
|
3643
3811
|
}) {
|
|
3644
|
-
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3645
|
-
|
|
3812
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui32.ContextMenu.Portal, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3813
|
+
import_radix_ui32.ContextMenu.Content,
|
|
3646
3814
|
{
|
|
3647
3815
|
"data-slot": "context-menu-content",
|
|
3648
3816
|
className: cn(
|
|
@@ -3661,7 +3829,7 @@ function ContextMenuItem({
|
|
|
3661
3829
|
...props
|
|
3662
3830
|
}) {
|
|
3663
3831
|
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3664
|
-
|
|
3832
|
+
import_radix_ui32.ContextMenu.Item,
|
|
3665
3833
|
{
|
|
3666
3834
|
"data-slot": "context-menu-item",
|
|
3667
3835
|
"data-inset": inset,
|
|
@@ -3682,14 +3850,14 @@ function ContextMenuCheckboxItem({
|
|
|
3682
3850
|
...props
|
|
3683
3851
|
}) {
|
|
3684
3852
|
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
|
|
3685
|
-
|
|
3853
|
+
import_radix_ui32.ContextMenu.CheckboxItem,
|
|
3686
3854
|
{
|
|
3687
3855
|
"data-slot": "context-menu-checkbox-item",
|
|
3688
3856
|
className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
|
|
3689
3857
|
checked,
|
|
3690
3858
|
...props,
|
|
3691
3859
|
children: [
|
|
3692
|
-
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3860
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui32.ContextMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react17.CheckIcon, { className: "size-4" }) }) }),
|
|
3693
3861
|
children
|
|
3694
3862
|
]
|
|
3695
3863
|
}
|
|
@@ -3699,7 +3867,7 @@ function ContextMenuRadioGroup({
|
|
|
3699
3867
|
...props
|
|
3700
3868
|
}) {
|
|
3701
3869
|
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3702
|
-
|
|
3870
|
+
import_radix_ui32.ContextMenu.RadioGroup,
|
|
3703
3871
|
{
|
|
3704
3872
|
"data-slot": "context-menu-radio-group",
|
|
3705
3873
|
...props
|
|
@@ -3712,13 +3880,13 @@ function ContextMenuRadioItem({
|
|
|
3712
3880
|
...props
|
|
3713
3881
|
}) {
|
|
3714
3882
|
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
|
|
3715
|
-
|
|
3883
|
+
import_radix_ui32.ContextMenu.RadioItem,
|
|
3716
3884
|
{
|
|
3717
3885
|
"data-slot": "context-menu-radio-item",
|
|
3718
3886
|
className: cn(overlayItemClass, "py-1.5 pr-2 pl-8", className),
|
|
3719
3887
|
...props,
|
|
3720
3888
|
children: [
|
|
3721
|
-
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3889
|
+
/* @__PURE__ */ (0, import_jsx_runtime42.jsx)("span", { className: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center", children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui32.ContextMenu.ItemIndicator, { children: /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_lucide_react17.CircleIcon, { className: "size-2 fill-current" }) }) }),
|
|
3722
3890
|
children
|
|
3723
3891
|
]
|
|
3724
3892
|
}
|
|
@@ -3730,7 +3898,7 @@ function ContextMenuLabel({
|
|
|
3730
3898
|
...props
|
|
3731
3899
|
}) {
|
|
3732
3900
|
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3733
|
-
|
|
3901
|
+
import_radix_ui32.ContextMenu.Label,
|
|
3734
3902
|
{
|
|
3735
3903
|
"data-slot": "context-menu-label",
|
|
3736
3904
|
"data-inset": inset,
|
|
@@ -3747,7 +3915,7 @@ function ContextMenuSeparator({
|
|
|
3747
3915
|
...props
|
|
3748
3916
|
}) {
|
|
3749
3917
|
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3750
|
-
|
|
3918
|
+
import_radix_ui32.ContextMenu.Separator,
|
|
3751
3919
|
{
|
|
3752
3920
|
"data-slot": "context-menu-separator",
|
|
3753
3921
|
className: cn("-mx-1 my-1 h-px bg-border", className),
|
|
@@ -3774,7 +3942,7 @@ function ContextMenuShortcut({
|
|
|
3774
3942
|
function ContextMenuSub({
|
|
3775
3943
|
...props
|
|
3776
3944
|
}) {
|
|
3777
|
-
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3945
|
+
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(import_radix_ui32.ContextMenu.Sub, { "data-slot": "context-menu-sub", ...props });
|
|
3778
3946
|
}
|
|
3779
3947
|
function ContextMenuSubTrigger({
|
|
3780
3948
|
className,
|
|
@@ -3783,7 +3951,7 @@ function ContextMenuSubTrigger({
|
|
|
3783
3951
|
...props
|
|
3784
3952
|
}) {
|
|
3785
3953
|
return /* @__PURE__ */ (0, import_jsx_runtime42.jsxs)(
|
|
3786
|
-
|
|
3954
|
+
import_radix_ui32.ContextMenu.SubTrigger,
|
|
3787
3955
|
{
|
|
3788
3956
|
"data-slot": "context-menu-sub-trigger",
|
|
3789
3957
|
"data-inset": inset,
|
|
@@ -3805,7 +3973,7 @@ function ContextMenuSubContent({
|
|
|
3805
3973
|
...props
|
|
3806
3974
|
}) {
|
|
3807
3975
|
return /* @__PURE__ */ (0, import_jsx_runtime42.jsx)(
|
|
3808
|
-
|
|
3976
|
+
import_radix_ui32.ContextMenu.SubContent,
|
|
3809
3977
|
{
|
|
3810
3978
|
"data-slot": "context-menu-sub-content",
|
|
3811
3979
|
className: cn(
|
|
@@ -3819,9 +3987,9 @@ function ContextMenuSubContent({
|
|
|
3819
3987
|
}
|
|
3820
3988
|
|
|
3821
3989
|
// src/ui/alert.tsx
|
|
3822
|
-
var
|
|
3990
|
+
var import_class_variance_authority7 = require("class-variance-authority");
|
|
3823
3991
|
var import_jsx_runtime43 = require("react/jsx-runtime");
|
|
3824
|
-
var alertVariants = (0,
|
|
3992
|
+
var alertVariants = (0, import_class_variance_authority7.cva)(
|
|
3825
3993
|
"relative grid w-full gap-1 rounded-xl border px-4 py-3 text-sm [&>svg]:absolute [&>svg]:top-3.5 [&>svg]:left-4 [&>svg]:size-4 [&>svg+div]:translate-y-[-3px] [&:has(svg)]:pl-11",
|
|
3826
3994
|
{
|
|
3827
3995
|
variants: {
|
|
@@ -3945,13 +4113,13 @@ function Skeleton({ className, ...props }) {
|
|
|
3945
4113
|
}
|
|
3946
4114
|
|
|
3947
4115
|
// src/ui/chart.tsx
|
|
3948
|
-
var
|
|
4116
|
+
var React4 = __toESM(require("react"), 1);
|
|
3949
4117
|
var RechartsPrimitive = __toESM(require("recharts"), 1);
|
|
3950
4118
|
var import_jsx_runtime46 = require("react/jsx-runtime");
|
|
3951
4119
|
var THEMES = { light: "", dark: ".dark" };
|
|
3952
|
-
var ChartContext =
|
|
4120
|
+
var ChartContext = React4.createContext(null);
|
|
3953
4121
|
function useChart() {
|
|
3954
|
-
const context =
|
|
4122
|
+
const context = React4.useContext(ChartContext);
|
|
3955
4123
|
if (!context) {
|
|
3956
4124
|
throw new Error("useChart must be used within a <ChartContainer />");
|
|
3957
4125
|
}
|
|
@@ -3964,7 +4132,7 @@ function ChartContainer({
|
|
|
3964
4132
|
config,
|
|
3965
4133
|
...props
|
|
3966
4134
|
}) {
|
|
3967
|
-
const uniqueId =
|
|
4135
|
+
const uniqueId = React4.useId();
|
|
3968
4136
|
const chartId = `chart-${id || uniqueId.replace(/:/g, "")}`;
|
|
3969
4137
|
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ChartContext.Provider, { value: { config }, children: /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
|
|
3970
4138
|
"div",
|
|
@@ -3978,7 +4146,7 @@ function ChartContainer({
|
|
|
3978
4146
|
...props,
|
|
3979
4147
|
children: [
|
|
3980
4148
|
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)(ChartStyle, { id: chartId, config }),
|
|
3981
|
-
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)(RechartsPrimitive.ResponsiveContainer, { children })
|
|
4149
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)(RechartsPrimitive.ResponsiveContainer, { width: "100%", height: "100%", children })
|
|
3982
4150
|
]
|
|
3983
4151
|
}
|
|
3984
4152
|
) });
|
|
@@ -4009,6 +4177,36 @@ ${colorConfig.map(([key, itemConfig]) => {
|
|
|
4009
4177
|
);
|
|
4010
4178
|
};
|
|
4011
4179
|
var ChartTooltip = RechartsPrimitive.Tooltip;
|
|
4180
|
+
var CHART_TOOLTIP_SURFACE = "rounded-xl border px-5 py-4 text-left text-[11px] leading-snug shadow-[0_12px_40px_-10px_rgba(0,0,0,0.55)] border-white/10 bg-gradient-to-b from-neutral-800 to-neutral-950 text-white dark:border-black/10 dark:from-white dark:to-neutral-100 dark:text-neutral-900";
|
|
4181
|
+
var CHART_TOOLTIP_TEXT = "text-white dark:text-neutral-900";
|
|
4182
|
+
var CHART_TOOLTIP_MUTED = "text-neutral-300 dark:text-neutral-600";
|
|
4183
|
+
function isCssColor(value) {
|
|
4184
|
+
return typeof value === "string" && value.length > 0 && !value.startsWith("url(");
|
|
4185
|
+
}
|
|
4186
|
+
function resolvePayloadConfigKey(payload, key) {
|
|
4187
|
+
if (typeof payload !== "object" || payload === null) {
|
|
4188
|
+
return key;
|
|
4189
|
+
}
|
|
4190
|
+
const row = payload;
|
|
4191
|
+
const nested = "payload" in row && typeof row.payload === "object" && row.payload !== null ? row.payload : void 0;
|
|
4192
|
+
if (key in row && typeof row[key] === "string") {
|
|
4193
|
+
return row[key];
|
|
4194
|
+
}
|
|
4195
|
+
if (nested && key in nested && typeof nested[key] === "string") {
|
|
4196
|
+
return nested[key];
|
|
4197
|
+
}
|
|
4198
|
+
if (typeof row.value === "string") {
|
|
4199
|
+
return row.value;
|
|
4200
|
+
}
|
|
4201
|
+
return key;
|
|
4202
|
+
}
|
|
4203
|
+
function resolveSwatchColor(itemConfig, configKey, ...candidates) {
|
|
4204
|
+
for (const candidate of candidates) {
|
|
4205
|
+
if (isCssColor(candidate)) return candidate;
|
|
4206
|
+
}
|
|
4207
|
+
if (isCssColor(itemConfig?.color)) return itemConfig.color;
|
|
4208
|
+
return `var(--color-${configKey})`;
|
|
4209
|
+
}
|
|
4012
4210
|
function ChartTooltipContent({
|
|
4013
4211
|
active,
|
|
4014
4212
|
payload,
|
|
@@ -4020,12 +4218,13 @@ function ChartTooltipContent({
|
|
|
4020
4218
|
labelFormatter,
|
|
4021
4219
|
labelClassName,
|
|
4022
4220
|
formatter,
|
|
4221
|
+
valueFormatter,
|
|
4023
4222
|
color,
|
|
4024
4223
|
nameKey,
|
|
4025
4224
|
labelKey
|
|
4026
4225
|
}) {
|
|
4027
4226
|
const { config } = useChart();
|
|
4028
|
-
const tooltipLabel =
|
|
4227
|
+
const tooltipLabel = React4.useMemo(() => {
|
|
4029
4228
|
if (hideLabel || !payload?.length) {
|
|
4030
4229
|
return null;
|
|
4031
4230
|
}
|
|
@@ -4034,12 +4233,12 @@ function ChartTooltipContent({
|
|
|
4034
4233
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
4035
4234
|
const value = !labelKey && typeof label === "string" ? config[label]?.label || label : itemConfig?.label;
|
|
4036
4235
|
if (labelFormatter) {
|
|
4037
|
-
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: cn("font-medium", labelClassName), children: labelFormatter(value, payload) });
|
|
4236
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: cn("font-medium leading-none", labelClassName), children: labelFormatter(value, payload) });
|
|
4038
4237
|
}
|
|
4039
4238
|
if (!value) {
|
|
4040
4239
|
return null;
|
|
4041
4240
|
}
|
|
4042
|
-
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: cn("font-medium", labelClassName), children: value });
|
|
4241
|
+
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: cn("font-medium leading-none", labelClassName), children: value });
|
|
4043
4242
|
}, [label, labelFormatter, payload, hideLabel, labelClassName, config, labelKey]);
|
|
4044
4243
|
if (!active || !payload?.length) {
|
|
4045
4244
|
return null;
|
|
@@ -4049,7 +4248,8 @@ function ChartTooltipContent({
|
|
|
4049
4248
|
"div",
|
|
4050
4249
|
{
|
|
4051
4250
|
className: cn(
|
|
4052
|
-
"
|
|
4251
|
+
"grid min-w-[8rem] items-start gap-1.5",
|
|
4252
|
+
CHART_TOOLTIP_SURFACE,
|
|
4053
4253
|
"animate-in fade-in-0 zoom-in-95 duration-150",
|
|
4054
4254
|
className
|
|
4055
4255
|
),
|
|
@@ -4057,31 +4257,35 @@ function ChartTooltipContent({
|
|
|
4057
4257
|
!nestLabel ? tooltipLabel : null,
|
|
4058
4258
|
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("div", { className: "grid gap-1.5", children: payload.filter((item) => item.type !== "none").map((item, index) => {
|
|
4059
4259
|
const key = `${nameKey || item.name || item.dataKey || "value"}`;
|
|
4260
|
+
const configKey = resolvePayloadConfigKey(item, key);
|
|
4060
4261
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
4061
|
-
const indicatorColor =
|
|
4262
|
+
const indicatorColor = resolveSwatchColor(
|
|
4263
|
+
itemConfig,
|
|
4264
|
+
configKey,
|
|
4265
|
+
color,
|
|
4266
|
+
item.payload?.fill,
|
|
4267
|
+
item.color
|
|
4268
|
+
);
|
|
4062
4269
|
return /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
4063
4270
|
"div",
|
|
4064
4271
|
{
|
|
4065
4272
|
className: cn(
|
|
4066
|
-
"
|
|
4273
|
+
"flex w-full flex-wrap items-stretch gap-2 [&>svg]:h-2.5 [&>svg]:w-2.5 [&>svg]:text-neutral-500 dark:[&>svg]:text-neutral-400",
|
|
4067
4274
|
indicator === "dot" && "items-center"
|
|
4068
4275
|
),
|
|
4069
4276
|
children: formatter && item?.value !== void 0 && item.name ? formatter(item.value, item.name, item, index, item.payload) : /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(import_jsx_runtime46.Fragment, { children: [
|
|
4070
4277
|
itemConfig?.icon ? /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(itemConfig.icon, {}) : !hideIndicator && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)(
|
|
4071
4278
|
"div",
|
|
4072
4279
|
{
|
|
4073
|
-
className: cn(
|
|
4074
|
-
"
|
|
4075
|
-
|
|
4076
|
-
|
|
4077
|
-
|
|
4078
|
-
|
|
4079
|
-
"my-0.5": nestLabel && indicator === "dashed"
|
|
4080
|
-
}
|
|
4081
|
-
),
|
|
4280
|
+
className: cn("shrink-0 rounded-[2px]", {
|
|
4281
|
+
"h-2.5 w-2.5": indicator === "dot",
|
|
4282
|
+
"w-1": indicator === "line",
|
|
4283
|
+
"w-0 border-[1.5px] border-dashed bg-transparent": indicator === "dashed",
|
|
4284
|
+
"my-0.5": nestLabel && indicator === "dashed"
|
|
4285
|
+
}),
|
|
4082
4286
|
style: {
|
|
4083
|
-
"
|
|
4084
|
-
|
|
4287
|
+
backgroundColor: indicator === "dashed" ? void 0 : indicatorColor,
|
|
4288
|
+
borderColor: indicatorColor
|
|
4085
4289
|
}
|
|
4086
4290
|
}
|
|
4087
4291
|
),
|
|
@@ -4089,15 +4293,15 @@ function ChartTooltipContent({
|
|
|
4089
4293
|
"div",
|
|
4090
4294
|
{
|
|
4091
4295
|
className: cn(
|
|
4092
|
-
"flex flex-1 justify-between leading-none",
|
|
4296
|
+
"flex flex-1 justify-between gap-3 leading-none",
|
|
4093
4297
|
nestLabel ? "items-end" : "items-center"
|
|
4094
4298
|
),
|
|
4095
4299
|
children: [
|
|
4096
4300
|
/* @__PURE__ */ (0, import_jsx_runtime46.jsxs)("div", { className: "grid gap-1.5", children: [
|
|
4097
4301
|
nestLabel ? tooltipLabel : null,
|
|
4098
|
-
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className:
|
|
4302
|
+
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: CHART_TOOLTIP_MUTED, children: itemConfig?.label || item.name })
|
|
4099
4303
|
] }),
|
|
4100
|
-
item.value != null && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "
|
|
4304
|
+
item.value != null && /* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: cn("font-medium tabular-nums", CHART_TOOLTIP_TEXT), children: valueFormatter ? valueFormatter(item.value, item) : typeof item.value === "number" ? item.value.toLocaleString() : String(item.value) })
|
|
4101
4305
|
]
|
|
4102
4306
|
}
|
|
4103
4307
|
)
|
|
@@ -4132,7 +4336,9 @@ function ChartLegendContent({
|
|
|
4132
4336
|
),
|
|
4133
4337
|
children: payload.filter((item) => item.type !== "none").map((item, index) => {
|
|
4134
4338
|
const key = `${nameKey || item.dataKey || "value"}`;
|
|
4339
|
+
const configKey = resolvePayloadConfigKey(item, key);
|
|
4135
4340
|
const itemConfig = getPayloadConfigFromPayload(config, item, key);
|
|
4341
|
+
const swatchColor = resolveSwatchColor(itemConfig, configKey, item.color);
|
|
4136
4342
|
return /* @__PURE__ */ (0, import_jsx_runtime46.jsxs)(
|
|
4137
4343
|
"div",
|
|
4138
4344
|
{
|
|
@@ -4142,7 +4348,7 @@ function ChartLegendContent({
|
|
|
4142
4348
|
"div",
|
|
4143
4349
|
{
|
|
4144
4350
|
className: "h-2 w-2 shrink-0 rounded-[2px]",
|
|
4145
|
-
style: { backgroundColor:
|
|
4351
|
+
style: { backgroundColor: swatchColor }
|
|
4146
4352
|
}
|
|
4147
4353
|
),
|
|
4148
4354
|
/* @__PURE__ */ (0, import_jsx_runtime46.jsx)("span", { className: "min-w-0 truncate", children: itemConfig?.label ?? (item.value != null ? String(item.value) : null) })
|
|
@@ -4158,13 +4364,7 @@ function getPayloadConfigFromPayload(config, payload, key) {
|
|
|
4158
4364
|
if (typeof payload !== "object" || payload === null) {
|
|
4159
4365
|
return void 0;
|
|
4160
4366
|
}
|
|
4161
|
-
const
|
|
4162
|
-
let configLabelKey = key;
|
|
4163
|
-
if (key in payload && typeof payload[key] === "string") {
|
|
4164
|
-
configLabelKey = payload[key];
|
|
4165
|
-
} else if (payloadPayload && key in payloadPayload && typeof payloadPayload[key] === "string") {
|
|
4166
|
-
configLabelKey = payloadPayload[key];
|
|
4167
|
-
}
|
|
4367
|
+
const configLabelKey = resolvePayloadConfigKey(payload, key);
|
|
4168
4368
|
return configLabelKey in config ? config[configLabelKey] : config[key];
|
|
4169
4369
|
}
|
|
4170
4370
|
|
|
@@ -4264,20 +4464,20 @@ function TableCaption({ className, ...props }) {
|
|
|
4264
4464
|
}
|
|
4265
4465
|
|
|
4266
4466
|
// src/ui/toast.tsx
|
|
4267
|
-
var
|
|
4467
|
+
var import_radix_ui33 = require("radix-ui");
|
|
4268
4468
|
var import_lucide_react18 = require("lucide-react");
|
|
4269
4469
|
var import_jsx_runtime48 = require("react/jsx-runtime");
|
|
4270
4470
|
function ToastProvider({
|
|
4271
4471
|
...props
|
|
4272
4472
|
}) {
|
|
4273
|
-
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
4473
|
+
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(import_radix_ui33.Toast.Provider, { "data-slot": "toast-provider", ...props });
|
|
4274
4474
|
}
|
|
4275
4475
|
function ToastViewport({
|
|
4276
4476
|
className,
|
|
4277
4477
|
...props
|
|
4278
4478
|
}) {
|
|
4279
4479
|
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
4280
|
-
|
|
4480
|
+
import_radix_ui33.Toast.Viewport,
|
|
4281
4481
|
{
|
|
4282
4482
|
"data-slot": "toast-viewport",
|
|
4283
4483
|
className: cn(
|
|
@@ -4294,7 +4494,7 @@ function Toast({
|
|
|
4294
4494
|
...props
|
|
4295
4495
|
}) {
|
|
4296
4496
|
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
4297
|
-
|
|
4497
|
+
import_radix_ui33.Toast.Root,
|
|
4298
4498
|
{
|
|
4299
4499
|
"data-slot": "toast",
|
|
4300
4500
|
className: cn(
|
|
@@ -4313,7 +4513,7 @@ function ToastAction({
|
|
|
4313
4513
|
...props
|
|
4314
4514
|
}) {
|
|
4315
4515
|
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
4316
|
-
|
|
4516
|
+
import_radix_ui33.Toast.Action,
|
|
4317
4517
|
{
|
|
4318
4518
|
"data-slot": "toast-action",
|
|
4319
4519
|
className: cn(
|
|
@@ -4329,7 +4529,7 @@ function ToastClose({
|
|
|
4329
4529
|
...props
|
|
4330
4530
|
}) {
|
|
4331
4531
|
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
4332
|
-
|
|
4532
|
+
import_radix_ui33.Toast.Close,
|
|
4333
4533
|
{
|
|
4334
4534
|
"data-slot": "toast-close",
|
|
4335
4535
|
className: cn(
|
|
@@ -4347,7 +4547,7 @@ function ToastTitle({
|
|
|
4347
4547
|
...props
|
|
4348
4548
|
}) {
|
|
4349
4549
|
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
4350
|
-
|
|
4550
|
+
import_radix_ui33.Toast.Title,
|
|
4351
4551
|
{
|
|
4352
4552
|
"data-slot": "toast-title",
|
|
4353
4553
|
className: cn("text-sm font-medium", className),
|
|
@@ -4360,7 +4560,7 @@ function ToastDescription({
|
|
|
4360
4560
|
...props
|
|
4361
4561
|
}) {
|
|
4362
4562
|
return /* @__PURE__ */ (0, import_jsx_runtime48.jsx)(
|
|
4363
|
-
|
|
4563
|
+
import_radix_ui33.Toast.Description,
|
|
4364
4564
|
{
|
|
4365
4565
|
"data-slot": "toast-description",
|
|
4366
4566
|
className: cn("text-sm text-muted-foreground", className),
|
|
@@ -4370,7 +4570,7 @@ function ToastDescription({
|
|
|
4370
4570
|
}
|
|
4371
4571
|
|
|
4372
4572
|
// src/ui/use-toast.ts
|
|
4373
|
-
var
|
|
4573
|
+
var React5 = __toESM(require("react"), 1);
|
|
4374
4574
|
var TOAST_LIMIT = 3;
|
|
4375
4575
|
var TOAST_REMOVE_DELAY = 5e3;
|
|
4376
4576
|
var listeners = /* @__PURE__ */ new Set();
|
|
@@ -4423,8 +4623,8 @@ function toast(input) {
|
|
|
4423
4623
|
return memoryState.add(input);
|
|
4424
4624
|
}
|
|
4425
4625
|
function useToast() {
|
|
4426
|
-
const [state, setState] =
|
|
4427
|
-
|
|
4626
|
+
const [state, setState] = React5.useState(memoryState);
|
|
4627
|
+
React5.useEffect(() => {
|
|
4428
4628
|
listeners.add(setState);
|
|
4429
4629
|
return () => {
|
|
4430
4630
|
listeners.delete(setState);
|
|
@@ -4479,30 +4679,159 @@ var ShimmerComponent = ({
|
|
|
4479
4679
|
() => (children?.length ?? 0) * spread,
|
|
4480
4680
|
[children, spread]
|
|
4481
4681
|
);
|
|
4482
|
-
return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
4483
|
-
MotionComponent,
|
|
4682
|
+
return /* @__PURE__ */ (0, import_jsx_runtime50.jsx)(
|
|
4683
|
+
MotionComponent,
|
|
4684
|
+
{
|
|
4685
|
+
animate: { backgroundPosition: "0% center" },
|
|
4686
|
+
className: cn(
|
|
4687
|
+
"relative inline-block bg-[length:250%_100%,auto] bg-clip-text text-transparent",
|
|
4688
|
+
"[--bg:linear-gradient(90deg,#0000_calc(50%-var(--spread)),var(--color-background),#0000_calc(50%+var(--spread)))] [background-repeat:no-repeat,padding-box]",
|
|
4689
|
+
className
|
|
4690
|
+
),
|
|
4691
|
+
initial: { backgroundPosition: "100% center" },
|
|
4692
|
+
style: {
|
|
4693
|
+
"--spread": `${dynamicSpread}px`,
|
|
4694
|
+
backgroundImage: "var(--bg), linear-gradient(var(--color-muted-foreground), var(--color-muted-foreground))"
|
|
4695
|
+
},
|
|
4696
|
+
transition: {
|
|
4697
|
+
repeat: Number.POSITIVE_INFINITY,
|
|
4698
|
+
duration,
|
|
4699
|
+
ease: "linear"
|
|
4700
|
+
},
|
|
4701
|
+
children
|
|
4702
|
+
}
|
|
4703
|
+
);
|
|
4704
|
+
};
|
|
4705
|
+
var Shimmer = (0, import_react2.memo)(ShimmerComponent);
|
|
4706
|
+
|
|
4707
|
+
// src/ui/timbal-v2-button.tsx
|
|
4708
|
+
var React6 = __toESM(require("react"), 1);
|
|
4709
|
+
var import_radix_ui34 = require("radix-ui");
|
|
4710
|
+
var import_jsx_runtime51 = require("react/jsx-runtime");
|
|
4711
|
+
var TIMBAL_V2_FILL_AS_CHILD = {
|
|
4712
|
+
primary: [
|
|
4713
|
+
"bg-gradient-to-b from-primary-fill-from to-primary-fill-to",
|
|
4714
|
+
"hover:from-primary-fill-hover-from hover:to-primary-fill-hover-to",
|
|
4715
|
+
"active:from-primary-fill-active-from active:to-primary-fill-active-to"
|
|
4716
|
+
].join(" "),
|
|
4717
|
+
informative: [
|
|
4718
|
+
TIMBAL_V2_PRIMARY_GRADIENT,
|
|
4719
|
+
"hover:from-primary-fill-hover-from hover:to-primary-fill-hover-to",
|
|
4720
|
+
"active:from-primary-fill-active-from active:to-primary-fill-active-to",
|
|
4721
|
+
"active:[background-image:linear-gradient(to_top,rgba(0,0,0,0.08),transparent_55%)]"
|
|
4722
|
+
].join(" "),
|
|
4723
|
+
destructive: [
|
|
4724
|
+
TIMBAL_V2_ELEVATED_GRADIENT,
|
|
4725
|
+
"hover:from-destructive-fill-hover-from hover:to-destructive-fill-hover-to",
|
|
4726
|
+
"active:from-destructive-fill-active-from active:to-destructive-fill-active-to"
|
|
4727
|
+
].join(" "),
|
|
4728
|
+
"destructive-solid": [
|
|
4729
|
+
"bg-gradient-to-b from-destructive-solid-from to-destructive-solid-to",
|
|
4730
|
+
"hover:from-destructive-solid-hover-from hover:to-destructive-solid-hover-to",
|
|
4731
|
+
"active:from-destructive-solid-active-from active:to-destructive-solid-active-to"
|
|
4732
|
+
].join(" "),
|
|
4733
|
+
secondary: [
|
|
4734
|
+
TIMBAL_V2_ELEVATED_GRADIENT,
|
|
4735
|
+
"hover:from-secondary-fill-hover-from hover:to-secondary-fill-hover-to",
|
|
4736
|
+
"active:from-secondary-fill-active-from active:to-secondary-fill-active-to"
|
|
4737
|
+
].join(" "),
|
|
4738
|
+
ghost: [
|
|
4739
|
+
"bg-transparent",
|
|
4740
|
+
"hover:bg-ghost-fill-hover",
|
|
4741
|
+
"active:bg-ghost-fill-active"
|
|
4742
|
+
].join(" "),
|
|
4743
|
+
link: "bg-transparent"
|
|
4744
|
+
};
|
|
4745
|
+
var TIMBAL_V2_LABEL_AS_CHILD = {
|
|
4746
|
+
...TIMBAL_V2_LABEL,
|
|
4747
|
+
link: "text-foreground underline decoration-foreground/25 underline-offset-2 hover:decoration-foreground/45"
|
|
4748
|
+
};
|
|
4749
|
+
var TimbalV2Button = React6.forwardRef(function TimbalV2Button2({
|
|
4750
|
+
variant = "secondary",
|
|
4751
|
+
size = "sm",
|
|
4752
|
+
isIconOnly = false,
|
|
4753
|
+
isLoading = false,
|
|
4754
|
+
fullWidth = false,
|
|
4755
|
+
shape = "pill",
|
|
4756
|
+
asChild = false,
|
|
4757
|
+
className,
|
|
4758
|
+
disabled,
|
|
4759
|
+
type = "button",
|
|
4760
|
+
children,
|
|
4761
|
+
...props
|
|
4762
|
+
}, ref) {
|
|
4763
|
+
const isDisabled = disabled || isLoading;
|
|
4764
|
+
const sizeClass2 = isIconOnly ? TIMBAL_V2_SIZE_ICON[size] : TIMBAL_V2_SIZE_HEIGHT[size];
|
|
4765
|
+
const radiusClass = shape === "rect" ? "rounded-lg" : "rounded-full";
|
|
4766
|
+
const sharedRootClass = cn(
|
|
4767
|
+
"relative box-border inline-flex items-center justify-center gap-2 whitespace-nowrap border-0 text-sm font-normal shadow-none transition duration-200 ease-in-out",
|
|
4768
|
+
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring/60 focus-visible:ring-offset-1 focus-visible:ring-offset-background",
|
|
4769
|
+
sizeClass2,
|
|
4770
|
+
radiusClass,
|
|
4771
|
+
TIMBAL_V2_BORDER[variant],
|
|
4772
|
+
TIMBAL_V2_SHADOW[variant],
|
|
4773
|
+
fullWidth && "w-full",
|
|
4774
|
+
isDisabled && "pointer-events-none opacity-50",
|
|
4775
|
+
className
|
|
4776
|
+
);
|
|
4777
|
+
if (asChild) {
|
|
4778
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
4779
|
+
import_radix_ui34.Slot.Root,
|
|
4780
|
+
{
|
|
4781
|
+
ref,
|
|
4782
|
+
"aria-disabled": isDisabled ? true : void 0,
|
|
4783
|
+
"data-slot": "timbal-v2-button",
|
|
4784
|
+
"data-variant": variant,
|
|
4785
|
+
className: cn(
|
|
4786
|
+
sharedRootClass,
|
|
4787
|
+
TIMBAL_V2_FILL_AS_CHILD[variant],
|
|
4788
|
+
!isIconOnly && TIMBAL_V2_SIZE_LABEL_PX[size],
|
|
4789
|
+
TIMBAL_V2_LABEL_AS_CHILD[variant]
|
|
4790
|
+
),
|
|
4791
|
+
...props,
|
|
4792
|
+
children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "size-4 animate-spin rounded-full border-2 border-current border-t-transparent" }) : children
|
|
4793
|
+
}
|
|
4794
|
+
);
|
|
4795
|
+
}
|
|
4796
|
+
return /* @__PURE__ */ (0, import_jsx_runtime51.jsxs)(
|
|
4797
|
+
"button",
|
|
4484
4798
|
{
|
|
4485
|
-
|
|
4799
|
+
ref,
|
|
4800
|
+
type,
|
|
4801
|
+
disabled: isDisabled,
|
|
4802
|
+
"data-slot": "timbal-v2-button",
|
|
4803
|
+
"data-variant": variant,
|
|
4486
4804
|
className: cn(
|
|
4487
|
-
"
|
|
4488
|
-
|
|
4489
|
-
className
|
|
4805
|
+
"group/tbv2 flex-col items-stretch overflow-hidden bg-transparent p-0",
|
|
4806
|
+
sharedRootClass
|
|
4490
4807
|
),
|
|
4491
|
-
|
|
4492
|
-
|
|
4493
|
-
|
|
4494
|
-
|
|
4495
|
-
|
|
4496
|
-
|
|
4497
|
-
|
|
4498
|
-
|
|
4499
|
-
|
|
4500
|
-
|
|
4501
|
-
|
|
4808
|
+
...props,
|
|
4809
|
+
children: [
|
|
4810
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
4811
|
+
"span",
|
|
4812
|
+
{
|
|
4813
|
+
"aria-hidden": true,
|
|
4814
|
+
className: cn(
|
|
4815
|
+
"pointer-events-none absolute inset-0 transition duration-200 ease-in-out",
|
|
4816
|
+
TIMBAL_V2_FILL[variant]
|
|
4817
|
+
)
|
|
4818
|
+
}
|
|
4819
|
+
),
|
|
4820
|
+
/* @__PURE__ */ (0, import_jsx_runtime51.jsx)(
|
|
4821
|
+
"span",
|
|
4822
|
+
{
|
|
4823
|
+
className: cn(
|
|
4824
|
+
"relative z-10 flex min-h-0 flex-1 items-center justify-center gap-1 leading-tight",
|
|
4825
|
+
!isIconOnly && TIMBAL_V2_SIZE_LABEL_PX[size],
|
|
4826
|
+
TIMBAL_V2_LABEL[variant]
|
|
4827
|
+
),
|
|
4828
|
+
children: isLoading ? /* @__PURE__ */ (0, import_jsx_runtime51.jsx)("span", { className: "size-4 animate-spin rounded-full border-2 border-current border-t-transparent" }) : children
|
|
4829
|
+
}
|
|
4830
|
+
)
|
|
4831
|
+
]
|
|
4502
4832
|
}
|
|
4503
4833
|
);
|
|
4504
|
-
};
|
|
4505
|
-
var Shimmer = (0, import_react2.memo)(ShimmerComponent);
|
|
4834
|
+
});
|
|
4506
4835
|
|
|
4507
4836
|
// src/ui/pill-segmented-tabs.tsx
|
|
4508
4837
|
var import_react3 = require("react");
|
|
@@ -4539,7 +4868,7 @@ var pillSegmentedActiveIndicatorClass = cn(
|
|
|
4539
4868
|
);
|
|
4540
4869
|
|
|
4541
4870
|
// src/ui/pill-segmented-tabs.tsx
|
|
4542
|
-
var
|
|
4871
|
+
var import_jsx_runtime52 = require("react/jsx-runtime");
|
|
4543
4872
|
var PillTab = ({
|
|
4544
4873
|
tabKey,
|
|
4545
4874
|
label,
|
|
@@ -4553,7 +4882,7 @@ var PillTab = ({
|
|
|
4553
4882
|
const handlePress = (0, import_react3.useCallback)(() => {
|
|
4554
4883
|
if (!disabled) onSelect(tabKey);
|
|
4555
4884
|
}, [disabled, onSelect, tabKey]);
|
|
4556
|
-
return /* @__PURE__ */ (0,
|
|
4885
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsxs)(
|
|
4557
4886
|
"button",
|
|
4558
4887
|
{
|
|
4559
4888
|
type: "button",
|
|
@@ -4566,15 +4895,15 @@ var PillTab = ({
|
|
|
4566
4895
|
!disabled && (isActive ? "text-foreground" : "text-muted-foreground hover:text-foreground")
|
|
4567
4896
|
),
|
|
4568
4897
|
children: [
|
|
4569
|
-
isActive && animateIndicator ? /* @__PURE__ */ (0,
|
|
4898
|
+
isActive && animateIndicator ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
4570
4899
|
import_react4.motion.div,
|
|
4571
4900
|
{
|
|
4572
4901
|
layoutId,
|
|
4573
4902
|
className: pillSegmentedActiveIndicatorClass,
|
|
4574
4903
|
transition: { type: "spring", duration: 0.3, bounce: 0.15 }
|
|
4575
4904
|
}
|
|
4576
|
-
) : isActive ? /* @__PURE__ */ (0,
|
|
4577
|
-
/* @__PURE__ */ (0,
|
|
4905
|
+
) : isActive ? /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { className: pillSegmentedActiveIndicatorClass, "aria-hidden": true }) : null,
|
|
4906
|
+
/* @__PURE__ */ (0, import_jsx_runtime52.jsx)("span", { className: "relative z-10 whitespace-nowrap", children: label })
|
|
4578
4907
|
]
|
|
4579
4908
|
}
|
|
4580
4909
|
);
|
|
@@ -4594,7 +4923,7 @@ var PillSegmentedTabs = ({
|
|
|
4594
4923
|
const isFlush = trackVariant === "flush";
|
|
4595
4924
|
const trackClass = isFlush ? pillSegmentedTrackFlushClass : pillSegmentedTrackClass;
|
|
4596
4925
|
const segmentClassName = isFlush ? pillSegmentedFlushSegmentClass : pillSegmentedSegmentClass;
|
|
4597
|
-
return /* @__PURE__ */ (0,
|
|
4926
|
+
return /* @__PURE__ */ (0, import_jsx_runtime52.jsx)("div", { role: "group", "aria-label": ariaLabel, className: cn(trackClass, className), children: tabs.map((tab) => /* @__PURE__ */ (0, import_jsx_runtime52.jsx)(
|
|
4598
4927
|
PillTab,
|
|
4599
4928
|
{
|
|
4600
4929
|
tabKey: tab.key,
|
|
@@ -4613,7 +4942,7 @@ var MemoPillSegmentedTabs = (0, import_react3.memo)(PillSegmentedTabs);
|
|
|
4613
4942
|
|
|
4614
4943
|
// src/ui/avatar-group.tsx
|
|
4615
4944
|
var React7 = __toESM(require("react"), 1);
|
|
4616
|
-
var
|
|
4945
|
+
var import_jsx_runtime53 = require("react/jsx-runtime");
|
|
4617
4946
|
var spacingClass = {
|
|
4618
4947
|
sm: "-space-x-2",
|
|
4619
4948
|
md: "-space-x-3"
|
|
@@ -4628,7 +4957,7 @@ function AvatarGroup({
|
|
|
4628
4957
|
const items = React7.Children.toArray(children);
|
|
4629
4958
|
const overflow = typeof max === "number" ? items.length - max : 0;
|
|
4630
4959
|
const visible = typeof max === "number" ? items.slice(0, max) : items;
|
|
4631
|
-
return /* @__PURE__ */ (0,
|
|
4960
|
+
return /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
|
|
4632
4961
|
"div",
|
|
4633
4962
|
{
|
|
4634
4963
|
"data-slot": "avatar-group",
|
|
@@ -4641,7 +4970,7 @@ function AvatarGroup({
|
|
|
4641
4970
|
...props,
|
|
4642
4971
|
children: [
|
|
4643
4972
|
visible,
|
|
4644
|
-
overflow > 0 ? /* @__PURE__ */ (0,
|
|
4973
|
+
overflow > 0 ? /* @__PURE__ */ (0, import_jsx_runtime53.jsxs)(
|
|
4645
4974
|
"span",
|
|
4646
4975
|
{
|
|
4647
4976
|
"aria-label": `${overflow} more`,
|
|
@@ -4659,7 +4988,7 @@ function AvatarGroup({
|
|
|
4659
4988
|
|
|
4660
4989
|
// src/ui/stepper.tsx
|
|
4661
4990
|
var import_lucide_react19 = require("lucide-react");
|
|
4662
|
-
var
|
|
4991
|
+
var import_jsx_runtime54 = require("react/jsx-runtime");
|
|
4663
4992
|
function Stepper({
|
|
4664
4993
|
steps,
|
|
4665
4994
|
current,
|
|
@@ -4668,7 +4997,7 @@ function Stepper({
|
|
|
4668
4997
|
...props
|
|
4669
4998
|
}) {
|
|
4670
4999
|
const isVertical = orientation === "vertical";
|
|
4671
|
-
return /* @__PURE__ */ (0,
|
|
5000
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
4672
5001
|
"ol",
|
|
4673
5002
|
{
|
|
4674
5003
|
"data-slot": "stepper",
|
|
@@ -4683,7 +5012,7 @@ function Stepper({
|
|
|
4683
5012
|
const active = index === current;
|
|
4684
5013
|
const last = index === steps.length - 1;
|
|
4685
5014
|
const connectorFilled = index < current;
|
|
4686
|
-
return /* @__PURE__ */ (0,
|
|
5015
|
+
return /* @__PURE__ */ (0, import_jsx_runtime54.jsxs)(
|
|
4687
5016
|
"li",
|
|
4688
5017
|
{
|
|
4689
5018
|
"aria-current": active ? "step" : void 0,
|
|
@@ -4693,8 +5022,8 @@ function Stepper({
|
|
|
4693
5022
|
last && !isVertical && "flex-none"
|
|
4694
5023
|
),
|
|
4695
5024
|
children: [
|
|
4696
|
-
/* @__PURE__ */ (0,
|
|
4697
|
-
/* @__PURE__ */ (0,
|
|
5025
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: cn("flex items-center gap-2", isVertical && "flex-col"), children: [
|
|
5026
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
4698
5027
|
"span",
|
|
4699
5028
|
{
|
|
4700
5029
|
className: cn(
|
|
@@ -4703,10 +5032,10 @@ function Stepper({
|
|
|
4703
5032
|
active && "border-primary text-primary",
|
|
4704
5033
|
!complete && !active && "border-border text-muted-foreground"
|
|
4705
5034
|
),
|
|
4706
|
-
children: complete ? /* @__PURE__ */ (0,
|
|
5035
|
+
children: complete ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(import_lucide_react19.CheckIcon, { className: "size-3.5", "aria-hidden": true }) : index + 1
|
|
4707
5036
|
}
|
|
4708
5037
|
),
|
|
4709
|
-
!last ? /* @__PURE__ */ (0,
|
|
5038
|
+
!last ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
4710
5039
|
"span",
|
|
4711
5040
|
{
|
|
4712
5041
|
"aria-hidden": true,
|
|
@@ -4718,8 +5047,8 @@ function Stepper({
|
|
|
4718
5047
|
}
|
|
4719
5048
|
) : null
|
|
4720
5049
|
] }),
|
|
4721
|
-
/* @__PURE__ */ (0,
|
|
4722
|
-
/* @__PURE__ */ (0,
|
|
5050
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsxs)("div", { className: cn("min-w-0", isVertical && "pb-4"), children: [
|
|
5051
|
+
/* @__PURE__ */ (0, import_jsx_runtime54.jsx)(
|
|
4723
5052
|
"p",
|
|
4724
5053
|
{
|
|
4725
5054
|
className: cn(
|
|
@@ -4729,7 +5058,7 @@ function Stepper({
|
|
|
4729
5058
|
children: step.label
|
|
4730
5059
|
}
|
|
4731
5060
|
),
|
|
4732
|
-
step.description ? /* @__PURE__ */ (0,
|
|
5061
|
+
step.description ? /* @__PURE__ */ (0, import_jsx_runtime54.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: step.description }) : null
|
|
4733
5062
|
] })
|
|
4734
5063
|
]
|
|
4735
5064
|
},
|
|
@@ -4741,49 +5070,104 @@ function Stepper({
|
|
|
4741
5070
|
}
|
|
4742
5071
|
|
|
4743
5072
|
// src/ui/timeline.tsx
|
|
4744
|
-
var
|
|
4745
|
-
var
|
|
4746
|
-
|
|
4747
|
-
|
|
4748
|
-
success: "border-emerald-500 bg-emerald-500",
|
|
4749
|
-
warn: "border-amber-500 bg-amber-500",
|
|
4750
|
-
danger: "border-destructive bg-destructive"
|
|
5073
|
+
var import_jsx_runtime55 = require("react/jsx-runtime");
|
|
5074
|
+
var timelineRowGap = {
|
|
5075
|
+
sm: "pb-4",
|
|
5076
|
+
default: "pb-6"
|
|
4751
5077
|
};
|
|
4752
|
-
|
|
4753
|
-
|
|
5078
|
+
var toneStyles = {
|
|
5079
|
+
default: {
|
|
5080
|
+
border: "border-neutral-300 dark:border-neutral-700",
|
|
5081
|
+
dot: "bg-neutral-400 dark:bg-neutral-500",
|
|
5082
|
+
icon: "text-neutral-500 dark:text-neutral-400"
|
|
5083
|
+
},
|
|
5084
|
+
primary: {
|
|
5085
|
+
border: "border-primary/50 dark:border-primary/40",
|
|
5086
|
+
dot: "bg-primary",
|
|
5087
|
+
icon: "text-primary"
|
|
5088
|
+
},
|
|
5089
|
+
success: {
|
|
5090
|
+
border: "border-emerald-500/40 dark:border-emerald-500/30",
|
|
5091
|
+
dot: "bg-emerald-500",
|
|
5092
|
+
icon: "text-emerald-500"
|
|
5093
|
+
},
|
|
5094
|
+
warn: {
|
|
5095
|
+
border: "border-amber-500/40 dark:border-amber-500/30",
|
|
5096
|
+
dot: "bg-amber-500",
|
|
5097
|
+
icon: "text-amber-500"
|
|
5098
|
+
},
|
|
5099
|
+
danger: {
|
|
5100
|
+
border: "border-destructive/40 dark:border-destructive/30",
|
|
5101
|
+
dot: "bg-destructive",
|
|
5102
|
+
icon: "text-destructive"
|
|
5103
|
+
}
|
|
5104
|
+
};
|
|
5105
|
+
function Timeline({ items, size = "default", className, ...props }) {
|
|
5106
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("ol", { "data-slot": "timeline", className: cn("flex flex-col", className), ...props, children: items.map((item, index) => {
|
|
4754
5107
|
const last = index === items.length - 1;
|
|
4755
5108
|
const tone = item.tone ?? "default";
|
|
4756
|
-
|
|
4757
|
-
|
|
4758
|
-
|
|
4759
|
-
|
|
4760
|
-
|
|
4761
|
-
|
|
4762
|
-
|
|
4763
|
-
|
|
4764
|
-
|
|
4765
|
-
|
|
4766
|
-
|
|
4767
|
-
|
|
4768
|
-
|
|
4769
|
-
|
|
4770
|
-
|
|
4771
|
-
|
|
4772
|
-
|
|
4773
|
-
|
|
4774
|
-
|
|
4775
|
-
|
|
4776
|
-
|
|
4777
|
-
|
|
4778
|
-
|
|
5109
|
+
const styles = toneStyles[tone];
|
|
5110
|
+
return /* @__PURE__ */ (0, import_jsx_runtime55.jsxs)(
|
|
5111
|
+
"li",
|
|
5112
|
+
{
|
|
5113
|
+
className: cn("relative flex gap-3.5 last:pb-0", timelineRowGap[size]),
|
|
5114
|
+
children: [
|
|
5115
|
+
!last ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
5116
|
+
"span",
|
|
5117
|
+
{
|
|
5118
|
+
"aria-hidden": true,
|
|
5119
|
+
className: cn(
|
|
5120
|
+
"absolute left-2.5 bottom-0 w-[1.5px] -translate-x-1/2 bg-neutral-200 dark:bg-neutral-800",
|
|
5121
|
+
item.icon ? "top-6" : "top-3"
|
|
5122
|
+
)
|
|
5123
|
+
}
|
|
5124
|
+
) : null,
|
|
5125
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: "relative flex w-5 shrink-0 justify-center pt-0.5", children: /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
5126
|
+
"span",
|
|
5127
|
+
{
|
|
5128
|
+
className: cn(
|
|
5129
|
+
"relative z-10 flex shrink-0 items-center justify-center rounded-full border-[1.5px] bg-background transition-colors",
|
|
5130
|
+
styles.border,
|
|
5131
|
+
item.icon ? "size-6" : "size-4"
|
|
5132
|
+
),
|
|
5133
|
+
children: item.icon ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("div", { className: cn("text-xs", styles.icon), children: item.icon }) : /* @__PURE__ */ (0, import_jsx_runtime55.jsx)(
|
|
5134
|
+
"span",
|
|
5135
|
+
{
|
|
5136
|
+
className: cn(
|
|
5137
|
+
"size-1.5 rounded-full",
|
|
5138
|
+
styles.dot
|
|
5139
|
+
)
|
|
5140
|
+
}
|
|
5141
|
+
)
|
|
5142
|
+
}
|
|
5143
|
+
) }),
|
|
5144
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "min-w-0 flex-1 pb-0.5", children: [
|
|
5145
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsxs)("div", { className: "flex items-start justify-between gap-2", children: [
|
|
5146
|
+
/* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: "text-sm font-normal text-foreground", children: item.title }),
|
|
5147
|
+
item.meta ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("span", { className: "shrink-0 text-xs text-muted-foreground tabular-nums", children: item.meta }) : null
|
|
5148
|
+
] }),
|
|
5149
|
+
item.description ? /* @__PURE__ */ (0, import_jsx_runtime55.jsx)("p", { className: "mt-0.5 text-[13px] leading-relaxed text-muted-foreground", children: item.description }) : null
|
|
5150
|
+
] })
|
|
5151
|
+
]
|
|
5152
|
+
},
|
|
5153
|
+
item.id
|
|
5154
|
+
);
|
|
4779
5155
|
}) });
|
|
4780
5156
|
}
|
|
4781
5157
|
|
|
4782
5158
|
// src/ui/rating.tsx
|
|
4783
5159
|
var React8 = __toESM(require("react"), 1);
|
|
4784
5160
|
var import_lucide_react20 = require("lucide-react");
|
|
4785
|
-
var
|
|
5161
|
+
var import_jsx_runtime56 = require("react/jsx-runtime");
|
|
4786
5162
|
var sizeClass = { sm: "size-4", md: "size-5", lg: "size-6" };
|
|
5163
|
+
var ratingFillClass = {
|
|
5164
|
+
amber: "fill-amber-400 text-amber-400",
|
|
5165
|
+
primary: "fill-primary text-primary",
|
|
5166
|
+
success: "fill-emerald-500 text-emerald-500",
|
|
5167
|
+
warn: "fill-amber-500 text-amber-500",
|
|
5168
|
+
danger: "fill-destructive text-destructive"
|
|
5169
|
+
};
|
|
5170
|
+
var ratingEmptyClass = "fill-transparent text-muted-foreground/40";
|
|
4787
5171
|
function Rating({
|
|
4788
5172
|
value: valueProp,
|
|
4789
5173
|
defaultValue = 0,
|
|
@@ -4792,6 +5176,7 @@ function Rating({
|
|
|
4792
5176
|
readOnly = false,
|
|
4793
5177
|
disabled = false,
|
|
4794
5178
|
size = "md",
|
|
5179
|
+
tone = "amber",
|
|
4795
5180
|
label = "Rating",
|
|
4796
5181
|
className
|
|
4797
5182
|
}) {
|
|
@@ -4807,20 +5192,20 @@ function Rating({
|
|
|
4807
5192
|
onChange?.(next);
|
|
4808
5193
|
};
|
|
4809
5194
|
if (!interactive) {
|
|
4810
|
-
return /* @__PURE__ */ (0,
|
|
5195
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
4811
5196
|
"span",
|
|
4812
5197
|
{
|
|
4813
5198
|
"data-slot": "rating",
|
|
4814
5199
|
role: "img",
|
|
4815
5200
|
"aria-label": `${label}: ${value} of ${max}`,
|
|
4816
5201
|
className: cn("inline-flex items-center gap-0.5", disabled && "opacity-50", className),
|
|
4817
|
-
children: Array.from({ length: max }, (_, i) => /* @__PURE__ */ (0,
|
|
5202
|
+
children: Array.from({ length: max }, (_, i) => /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
4818
5203
|
import_lucide_react20.StarIcon,
|
|
4819
5204
|
{
|
|
4820
5205
|
"aria-hidden": true,
|
|
4821
5206
|
className: cn(
|
|
4822
5207
|
sizeClass[size],
|
|
4823
|
-
i < value ?
|
|
5208
|
+
i < value ? ratingFillClass[tone] : ratingEmptyClass
|
|
4824
5209
|
)
|
|
4825
5210
|
},
|
|
4826
5211
|
i
|
|
@@ -4828,7 +5213,7 @@ function Rating({
|
|
|
4828
5213
|
}
|
|
4829
5214
|
);
|
|
4830
5215
|
}
|
|
4831
|
-
return /* @__PURE__ */ (0,
|
|
5216
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
4832
5217
|
"span",
|
|
4833
5218
|
{
|
|
4834
5219
|
"data-slot": "rating",
|
|
@@ -4839,7 +5224,7 @@ function Rating({
|
|
|
4839
5224
|
children: Array.from({ length: max }, (_, i) => {
|
|
4840
5225
|
const unit = i + 1;
|
|
4841
5226
|
const filled = unit <= shown;
|
|
4842
|
-
return /* @__PURE__ */ (0,
|
|
5227
|
+
return /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
4843
5228
|
"button",
|
|
4844
5229
|
{
|
|
4845
5230
|
type: "button",
|
|
@@ -4851,13 +5236,13 @@ function Rating({
|
|
|
4851
5236
|
onFocus: () => setHover(unit),
|
|
4852
5237
|
onBlur: () => setHover(null),
|
|
4853
5238
|
className: "rounded-sm p-0.5 transition-transform hover:scale-110 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground/15",
|
|
4854
|
-
children: /* @__PURE__ */ (0,
|
|
5239
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime56.jsx)(
|
|
4855
5240
|
import_lucide_react20.StarIcon,
|
|
4856
5241
|
{
|
|
4857
5242
|
className: cn(
|
|
4858
5243
|
sizeClass[size],
|
|
4859
5244
|
"transition-colors",
|
|
4860
|
-
filled ?
|
|
5245
|
+
filled ? ratingFillClass[tone] : ratingEmptyClass
|
|
4861
5246
|
)
|
|
4862
5247
|
}
|
|
4863
5248
|
)
|
|
@@ -4872,7 +5257,7 @@ function Rating({
|
|
|
4872
5257
|
// src/ui/number-field.tsx
|
|
4873
5258
|
var React9 = __toESM(require("react"), 1);
|
|
4874
5259
|
var import_lucide_react21 = require("lucide-react");
|
|
4875
|
-
var
|
|
5260
|
+
var import_jsx_runtime57 = require("react/jsx-runtime");
|
|
4876
5261
|
var heightClass = { sm: "h-9", default: "h-10" };
|
|
4877
5262
|
var stepButtonClass = "inline-flex aspect-square h-full items-center justify-center text-muted-foreground transition-colors hover:bg-accent hover:text-foreground disabled:pointer-events-none disabled:opacity-40 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-inset focus-visible:ring-foreground/15";
|
|
4878
5263
|
function clamp(n, min, max) {
|
|
@@ -4901,7 +5286,7 @@ function NumberField({
|
|
|
4901
5286
|
if (!isControlled) setUncontrolled(clamped);
|
|
4902
5287
|
onValueChange?.(clamped);
|
|
4903
5288
|
};
|
|
4904
|
-
return /* @__PURE__ */ (0,
|
|
5289
|
+
return /* @__PURE__ */ (0, import_jsx_runtime57.jsxs)(
|
|
4905
5290
|
"div",
|
|
4906
5291
|
{
|
|
4907
5292
|
"data-slot": "number-field",
|
|
@@ -4913,7 +5298,7 @@ function NumberField({
|
|
|
4913
5298
|
className
|
|
4914
5299
|
),
|
|
4915
5300
|
children: [
|
|
4916
|
-
/* @__PURE__ */ (0,
|
|
5301
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4917
5302
|
"button",
|
|
4918
5303
|
{
|
|
4919
5304
|
type: "button",
|
|
@@ -4922,10 +5307,10 @@ function NumberField({
|
|
|
4922
5307
|
disabled: disabled || typeof min === "number" && value <= min,
|
|
4923
5308
|
onClick: () => commit(value - step),
|
|
4924
5309
|
className: cn(stepButtonClass, "border-r border-border"),
|
|
4925
|
-
children: /* @__PURE__ */ (0,
|
|
5310
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react21.MinusIcon, { className: "size-4" })
|
|
4926
5311
|
}
|
|
4927
5312
|
),
|
|
4928
|
-
/* @__PURE__ */ (0,
|
|
5313
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4929
5314
|
"input",
|
|
4930
5315
|
{
|
|
4931
5316
|
type: "number",
|
|
@@ -4949,7 +5334,7 @@ function NumberField({
|
|
|
4949
5334
|
...inputProps
|
|
4950
5335
|
}
|
|
4951
5336
|
),
|
|
4952
|
-
/* @__PURE__ */ (0,
|
|
5337
|
+
/* @__PURE__ */ (0, import_jsx_runtime57.jsx)(
|
|
4953
5338
|
"button",
|
|
4954
5339
|
{
|
|
4955
5340
|
type: "button",
|
|
@@ -4958,7 +5343,7 @@ function NumberField({
|
|
|
4958
5343
|
disabled: disabled || typeof max === "number" && value >= max,
|
|
4959
5344
|
onClick: () => commit(value + step),
|
|
4960
5345
|
className: cn(stepButtonClass, "border-l border-border"),
|
|
4961
|
-
children: /* @__PURE__ */ (0,
|
|
5346
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime57.jsx)(import_lucide_react21.PlusIcon, { className: "size-4" })
|
|
4962
5347
|
}
|
|
4963
5348
|
)
|
|
4964
5349
|
]
|
|
@@ -4969,7 +5354,11 @@ function NumberField({
|
|
|
4969
5354
|
// src/ui/tag-input.tsx
|
|
4970
5355
|
var React10 = __toESM(require("react"), 1);
|
|
4971
5356
|
var import_lucide_react22 = require("lucide-react");
|
|
4972
|
-
var
|
|
5357
|
+
var import_jsx_runtime58 = require("react/jsx-runtime");
|
|
5358
|
+
var tagInputSizeClass = {
|
|
5359
|
+
sm: "min-h-9 gap-1 px-1.5 py-1",
|
|
5360
|
+
default: "min-h-10 gap-1.5 px-2 py-1.5"
|
|
5361
|
+
};
|
|
4973
5362
|
function TagInput({
|
|
4974
5363
|
value: valueProp,
|
|
4975
5364
|
defaultValue = [],
|
|
@@ -4979,6 +5368,7 @@ function TagInput({
|
|
|
4979
5368
|
dedupe = true,
|
|
4980
5369
|
max,
|
|
4981
5370
|
disabled,
|
|
5371
|
+
size = "default",
|
|
4982
5372
|
ariaLabel,
|
|
4983
5373
|
className,
|
|
4984
5374
|
inputClassName
|
|
@@ -5013,38 +5403,39 @@ function TagInput({
|
|
|
5013
5403
|
removeAt(tags.length - 1);
|
|
5014
5404
|
}
|
|
5015
5405
|
};
|
|
5016
|
-
return /* @__PURE__ */ (0,
|
|
5406
|
+
return /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
|
|
5017
5407
|
"div",
|
|
5018
5408
|
{
|
|
5019
5409
|
"data-slot": "tag-input",
|
|
5020
5410
|
className: cn(
|
|
5021
5411
|
controlSurfaceClass,
|
|
5022
|
-
"flex
|
|
5412
|
+
"flex w-full flex-wrap items-center rounded-lg",
|
|
5413
|
+
tagInputSizeClass[size],
|
|
5023
5414
|
disabled && "pointer-events-none opacity-50",
|
|
5024
5415
|
className
|
|
5025
5416
|
),
|
|
5026
5417
|
children: [
|
|
5027
|
-
tags.map((tag, index) => /* @__PURE__ */ (0,
|
|
5418
|
+
tags.map((tag, index) => /* @__PURE__ */ (0, import_jsx_runtime58.jsxs)(
|
|
5028
5419
|
"span",
|
|
5029
5420
|
{
|
|
5030
5421
|
className: "inline-flex items-center gap-1 rounded-md bg-muted py-0.5 pl-2 pr-1 text-xs font-medium text-foreground",
|
|
5031
5422
|
children: [
|
|
5032
5423
|
tag,
|
|
5033
|
-
/* @__PURE__ */ (0,
|
|
5424
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
5034
5425
|
"button",
|
|
5035
5426
|
{
|
|
5036
5427
|
type: "button",
|
|
5037
5428
|
"aria-label": `Remove ${tag}`,
|
|
5038
5429
|
onClick: () => removeAt(index),
|
|
5039
5430
|
className: "inline-flex size-4 items-center justify-center rounded-sm text-muted-foreground transition-colors hover:bg-foreground/10 hover:text-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground/20",
|
|
5040
|
-
children: /* @__PURE__ */ (0,
|
|
5431
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime58.jsx)(import_lucide_react22.XIcon, { className: "size-3", "aria-hidden": true })
|
|
5041
5432
|
}
|
|
5042
5433
|
)
|
|
5043
5434
|
]
|
|
5044
5435
|
},
|
|
5045
5436
|
`${tag}-${index}`
|
|
5046
5437
|
)),
|
|
5047
|
-
/* @__PURE__ */ (0,
|
|
5438
|
+
/* @__PURE__ */ (0, import_jsx_runtime58.jsx)(
|
|
5048
5439
|
"input",
|
|
5049
5440
|
{
|
|
5050
5441
|
type: "text",
|
|
@@ -5068,16 +5459,41 @@ function TagInput({
|
|
|
5068
5459
|
|
|
5069
5460
|
// src/ui/banner.tsx
|
|
5070
5461
|
var import_lucide_react23 = require("lucide-react");
|
|
5071
|
-
var
|
|
5072
|
-
var
|
|
5073
|
-
default: "border-border bg-muted/
|
|
5074
|
-
primary: "border-primary/
|
|
5075
|
-
success: "border-emerald-500/
|
|
5076
|
-
warn: "border-amber-500/
|
|
5077
|
-
danger: "border-destructive/
|
|
5462
|
+
var import_jsx_runtime59 = require("react/jsx-runtime");
|
|
5463
|
+
var bannerSoftClass = {
|
|
5464
|
+
default: "border-border/50 bg-muted/30 text-foreground/90 dark:bg-muted/15",
|
|
5465
|
+
primary: "border-primary/15 bg-primary/5 text-primary-800 dark:text-primary-200 [&_[data-banner-icon]]:text-primary",
|
|
5466
|
+
success: "border-emerald-500/15 bg-emerald-500/5 text-emerald-800 dark:text-emerald-300 [&_[data-banner-icon]]:text-emerald-600 dark:[&_[data-banner-icon]]:text-emerald-400",
|
|
5467
|
+
warn: "border-amber-500/15 bg-amber-500/5 text-amber-800 dark:text-amber-300 [&_[data-banner-icon]]:text-amber-600 dark:[&_[data-banner-icon]]:text-amber-400",
|
|
5468
|
+
danger: "border-destructive/15 bg-destructive/5 text-destructive dark:text-red-300 [&_[data-banner-icon]]:text-destructive"
|
|
5469
|
+
};
|
|
5470
|
+
var bannerSolidClass = {
|
|
5471
|
+
default: "border-transparent bg-foreground text-background shadow-sm",
|
|
5472
|
+
primary: "border-transparent bg-gradient-to-r from-primary to-primary/95 text-primary-foreground shadow-sm shadow-primary/5",
|
|
5473
|
+
success: "border-transparent bg-gradient-to-r from-emerald-600 to-emerald-500 text-white shadow-sm shadow-emerald-500/5 dark:from-emerald-500 dark:to-emerald-400",
|
|
5474
|
+
warn: "border-transparent bg-gradient-to-r from-amber-500 to-amber-400 text-white shadow-sm shadow-amber-500/5 dark:from-amber-500 dark:to-amber-400",
|
|
5475
|
+
danger: "border-transparent bg-gradient-to-r from-destructive to-destructive/95 text-destructive-foreground shadow-sm shadow-destructive/5"
|
|
5476
|
+
};
|
|
5477
|
+
var bannerOutlineClass = {
|
|
5478
|
+
default: "border-border/80 bg-background/50 text-foreground/90 backdrop-blur-sm shadow-sm",
|
|
5479
|
+
primary: "border-primary/30 bg-primary/[0.02] text-foreground [&_[data-banner-icon]]:text-primary shadow-sm",
|
|
5480
|
+
success: "border-emerald-500/30 bg-emerald-500/[0.02] text-foreground [&_[data-banner-icon]]:text-emerald-600 dark:[&_[data-banner-icon]]:text-emerald-400 shadow-sm",
|
|
5481
|
+
warn: "border-amber-500/30 bg-amber-500/[0.02] text-foreground [&_[data-banner-icon]]:text-amber-600 dark:[&_[data-banner-icon]]:text-amber-400 shadow-sm",
|
|
5482
|
+
danger: "border-destructive/30 bg-destructive/[0.02] text-foreground [&_[data-banner-icon]]:text-destructive shadow-sm"
|
|
5483
|
+
};
|
|
5484
|
+
var bannerVariantClass = {
|
|
5485
|
+
soft: bannerSoftClass,
|
|
5486
|
+
solid: bannerSolidClass,
|
|
5487
|
+
outline: bannerOutlineClass
|
|
5488
|
+
};
|
|
5489
|
+
var bannerSizeClass = {
|
|
5490
|
+
sm: "gap-2.5 px-3.5 py-2 text-xs",
|
|
5491
|
+
default: "gap-3 px-4 py-3 text-sm"
|
|
5078
5492
|
};
|
|
5079
5493
|
function Banner({
|
|
5080
5494
|
tone = "default",
|
|
5495
|
+
variant = "soft",
|
|
5496
|
+
size = "default",
|
|
5081
5497
|
icon,
|
|
5082
5498
|
title,
|
|
5083
5499
|
actions,
|
|
@@ -5086,32 +5502,60 @@ function Banner({
|
|
|
5086
5502
|
children,
|
|
5087
5503
|
...props
|
|
5088
5504
|
}) {
|
|
5089
|
-
|
|
5505
|
+
const isSolid = variant === "solid";
|
|
5506
|
+
const isSingleLine = !title;
|
|
5507
|
+
return /* @__PURE__ */ (0, import_jsx_runtime59.jsxs)(
|
|
5090
5508
|
"div",
|
|
5091
5509
|
{
|
|
5092
5510
|
"data-slot": "banner",
|
|
5511
|
+
"data-variant": variant,
|
|
5093
5512
|
role: "status",
|
|
5094
5513
|
className: cn(
|
|
5095
|
-
"flex w-full
|
|
5096
|
-
|
|
5514
|
+
"flex w-full rounded-xl border transition-all duration-200",
|
|
5515
|
+
isSingleLine ? "items-center" : "items-start",
|
|
5516
|
+
bannerSizeClass[size],
|
|
5517
|
+
bannerVariantClass[variant][tone],
|
|
5097
5518
|
className
|
|
5098
5519
|
),
|
|
5099
5520
|
...props,
|
|
5100
5521
|
children: [
|
|
5101
|
-
icon ? /* @__PURE__ */ (0,
|
|
5102
|
-
|
|
5103
|
-
|
|
5104
|
-
|
|
5522
|
+
icon ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
5523
|
+
"span",
|
|
5524
|
+
{
|
|
5525
|
+
"data-banner-icon": true,
|
|
5526
|
+
className: cn(
|
|
5527
|
+
"shrink-0 [&_svg]:size-4",
|
|
5528
|
+
isSingleLine ? "self-center" : "mt-0.5"
|
|
5529
|
+
),
|
|
5530
|
+
children: icon
|
|
5531
|
+
}
|
|
5532
|
+
) : null,
|
|
5533
|
+
/* @__PURE__ */ (0, import_jsx_runtime59.jsxs)("div", { className: "min-w-0 flex-1", children: [
|
|
5534
|
+
title ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("p", { className: "font-medium tracking-tight", children: title }) : null,
|
|
5535
|
+
children ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
5536
|
+
"div",
|
|
5537
|
+
{
|
|
5538
|
+
className: cn(
|
|
5539
|
+
isSolid ? "opacity-90" : "text-muted-foreground",
|
|
5540
|
+
title && "mt-0.5"
|
|
5541
|
+
),
|
|
5542
|
+
children
|
|
5543
|
+
}
|
|
5544
|
+
) : null
|
|
5105
5545
|
] }),
|
|
5106
|
-
actions ? /* @__PURE__ */ (0,
|
|
5107
|
-
onDismiss ? /* @__PURE__ */ (0,
|
|
5546
|
+
actions ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)("div", { className: "flex shrink-0 items-center gap-2", children: actions }) : null,
|
|
5547
|
+
onDismiss ? /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(
|
|
5108
5548
|
"button",
|
|
5109
5549
|
{
|
|
5110
5550
|
type: "button",
|
|
5111
5551
|
"aria-label": "Dismiss",
|
|
5112
5552
|
onClick: onDismiss,
|
|
5113
|
-
className:
|
|
5114
|
-
|
|
5553
|
+
className: cn(
|
|
5554
|
+
"-mr-1 inline-flex size-7 shrink-0 items-center justify-center rounded-md transition-colors focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground/15",
|
|
5555
|
+
isSingleLine ? "self-center" : "-mt-0.5",
|
|
5556
|
+
isSolid ? "opacity-80 hover:bg-background/15 hover:opacity-100" : "text-muted-foreground hover:bg-foreground/10 hover:text-foreground"
|
|
5557
|
+
),
|
|
5558
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime59.jsx)(import_lucide_react23.XIcon, { className: "size-4", "aria-hidden": true })
|
|
5115
5559
|
}
|
|
5116
5560
|
) : null
|
|
5117
5561
|
]
|
|
@@ -5122,7 +5566,7 @@ function Banner({
|
|
|
5122
5566
|
// src/ui/copy-button.tsx
|
|
5123
5567
|
var React11 = __toESM(require("react"), 1);
|
|
5124
5568
|
var import_lucide_react24 = require("lucide-react");
|
|
5125
|
-
var
|
|
5569
|
+
var import_jsx_runtime60 = require("react/jsx-runtime");
|
|
5126
5570
|
function CopyButton({
|
|
5127
5571
|
value,
|
|
5128
5572
|
timeout = 1500,
|
|
@@ -5148,7 +5592,7 @@ function CopyButton({
|
|
|
5148
5592
|
}
|
|
5149
5593
|
};
|
|
5150
5594
|
const Icon = copied ? import_lucide_react24.CheckIcon : import_lucide_react24.CopyIcon;
|
|
5151
|
-
return /* @__PURE__ */ (0,
|
|
5595
|
+
return /* @__PURE__ */ (0, import_jsx_runtime60.jsxs)(
|
|
5152
5596
|
"button",
|
|
5153
5597
|
{
|
|
5154
5598
|
type: "button",
|
|
@@ -5165,7 +5609,7 @@ function CopyButton({
|
|
|
5165
5609
|
),
|
|
5166
5610
|
...props,
|
|
5167
5611
|
children: [
|
|
5168
|
-
/* @__PURE__ */ (0,
|
|
5612
|
+
/* @__PURE__ */ (0, import_jsx_runtime60.jsx)(Icon, { className: "size-4 shrink-0", "aria-hidden": true }),
|
|
5169
5613
|
children
|
|
5170
5614
|
]
|
|
5171
5615
|
}
|
|
@@ -5173,34 +5617,54 @@ function CopyButton({
|
|
|
5173
5617
|
}
|
|
5174
5618
|
|
|
5175
5619
|
// src/ui/snippet.tsx
|
|
5176
|
-
var
|
|
5620
|
+
var import_jsx_runtime61 = require("react/jsx-runtime");
|
|
5621
|
+
var snippetVariantClass = {
|
|
5622
|
+
muted: "border-border bg-muted/40",
|
|
5623
|
+
outline: "border-border bg-transparent",
|
|
5624
|
+
ghost: "border-transparent bg-foreground/[0.04]"
|
|
5625
|
+
};
|
|
5626
|
+
var snippetSizeClass = {
|
|
5627
|
+
sm: "gap-1.5 py-1 pl-2.5 pr-1 text-xs",
|
|
5628
|
+
default: "gap-2 py-1.5 pl-3 pr-1.5 text-sm"
|
|
5629
|
+
};
|
|
5177
5630
|
function Snippet({
|
|
5178
5631
|
children,
|
|
5179
5632
|
symbol,
|
|
5633
|
+
variant = "muted",
|
|
5634
|
+
size = "default",
|
|
5180
5635
|
hideCopy = false,
|
|
5181
5636
|
className,
|
|
5182
5637
|
...props
|
|
5183
5638
|
}) {
|
|
5184
|
-
return /* @__PURE__ */ (0,
|
|
5639
|
+
return /* @__PURE__ */ (0, import_jsx_runtime61.jsxs)(
|
|
5185
5640
|
"div",
|
|
5186
5641
|
{
|
|
5187
5642
|
"data-slot": "snippet",
|
|
5643
|
+
"data-variant": variant,
|
|
5188
5644
|
className: cn(
|
|
5189
|
-
"flex items-center
|
|
5645
|
+
"flex items-center rounded-lg border font-mono",
|
|
5646
|
+
snippetVariantClass[variant],
|
|
5647
|
+
snippetSizeClass[size],
|
|
5190
5648
|
className
|
|
5191
5649
|
),
|
|
5192
5650
|
...props,
|
|
5193
5651
|
children: [
|
|
5194
|
-
symbol ? /* @__PURE__ */ (0,
|
|
5195
|
-
/* @__PURE__ */ (0,
|
|
5196
|
-
hideCopy ? null : /* @__PURE__ */ (0,
|
|
5652
|
+
symbol ? /* @__PURE__ */ (0, import_jsx_runtime61.jsx)("span", { "aria-hidden": true, className: "select-none text-muted-foreground", children: symbol }) : null,
|
|
5653
|
+
/* @__PURE__ */ (0, import_jsx_runtime61.jsx)("code", { className: "min-w-0 flex-1 truncate text-foreground", children }),
|
|
5654
|
+
hideCopy ? null : /* @__PURE__ */ (0, import_jsx_runtime61.jsx)(
|
|
5655
|
+
CopyButton,
|
|
5656
|
+
{
|
|
5657
|
+
value: children,
|
|
5658
|
+
className: cn("shrink-0", size === "sm" ? "size-6" : "size-7")
|
|
5659
|
+
}
|
|
5660
|
+
)
|
|
5197
5661
|
]
|
|
5198
5662
|
}
|
|
5199
5663
|
);
|
|
5200
5664
|
}
|
|
5201
5665
|
|
|
5202
5666
|
// src/ui/circular-progress.tsx
|
|
5203
|
-
var
|
|
5667
|
+
var import_jsx_runtime62 = require("react/jsx-runtime");
|
|
5204
5668
|
var toneClass = {
|
|
5205
5669
|
primary: "text-primary",
|
|
5206
5670
|
success: "text-emerald-500",
|
|
@@ -5223,7 +5687,7 @@ function CircularProgress({
|
|
|
5223
5687
|
const circumference = 2 * Math.PI * radius;
|
|
5224
5688
|
const pct = indeterminate ? 0.25 : Math.min(Math.max(value / max, 0), 1);
|
|
5225
5689
|
const dashOffset = circumference * (1 - pct);
|
|
5226
|
-
return /* @__PURE__ */ (0,
|
|
5690
|
+
return /* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
|
|
5227
5691
|
"div",
|
|
5228
5692
|
{
|
|
5229
5693
|
"data-slot": "circular-progress",
|
|
@@ -5235,7 +5699,7 @@ function CircularProgress({
|
|
|
5235
5699
|
style: { width: size, height: size },
|
|
5236
5700
|
...props,
|
|
5237
5701
|
children: [
|
|
5238
|
-
/* @__PURE__ */ (0,
|
|
5702
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsxs)(
|
|
5239
5703
|
"svg",
|
|
5240
5704
|
{
|
|
5241
5705
|
width: size,
|
|
@@ -5243,7 +5707,7 @@ function CircularProgress({
|
|
|
5243
5707
|
viewBox: `0 0 ${size} ${size}`,
|
|
5244
5708
|
className: cn(toneClass[tone], indeterminate && "animate-spin"),
|
|
5245
5709
|
children: [
|
|
5246
|
-
/* @__PURE__ */ (0,
|
|
5710
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
5247
5711
|
"circle",
|
|
5248
5712
|
{
|
|
5249
5713
|
cx: size / 2,
|
|
@@ -5254,7 +5718,7 @@ function CircularProgress({
|
|
|
5254
5718
|
className: "stroke-current opacity-15"
|
|
5255
5719
|
}
|
|
5256
5720
|
),
|
|
5257
|
-
/* @__PURE__ */ (0,
|
|
5721
|
+
/* @__PURE__ */ (0, import_jsx_runtime62.jsx)(
|
|
5258
5722
|
"circle",
|
|
5259
5723
|
{
|
|
5260
5724
|
cx: size / 2,
|
|
@@ -5272,7 +5736,385 @@ function CircularProgress({
|
|
|
5272
5736
|
]
|
|
5273
5737
|
}
|
|
5274
5738
|
),
|
|
5275
|
-
showLabel && !indeterminate ? /* @__PURE__ */ (0,
|
|
5739
|
+
showLabel && !indeterminate ? /* @__PURE__ */ (0, import_jsx_runtime62.jsx)("span", { className: "absolute inset-0 flex items-center justify-center text-[0.7rem] font-medium tabular-nums text-foreground", children: label ?? `${Math.round(pct * 100)}%` }) : null
|
|
5740
|
+
]
|
|
5741
|
+
}
|
|
5742
|
+
);
|
|
5743
|
+
}
|
|
5744
|
+
|
|
5745
|
+
// src/ui/kanban.tsx
|
|
5746
|
+
var React12 = __toESM(require("react"), 1);
|
|
5747
|
+
var import_core = require("@dnd-kit/core");
|
|
5748
|
+
var import_sortable = require("@dnd-kit/sortable");
|
|
5749
|
+
var import_utilities = require("@dnd-kit/utilities");
|
|
5750
|
+
var import_lucide_react25 = require("lucide-react");
|
|
5751
|
+
var import_jsx_runtime63 = require("react/jsx-runtime");
|
|
5752
|
+
var columnTitleToneClass = {
|
|
5753
|
+
default: "text-foreground",
|
|
5754
|
+
primary: "text-blue-600 dark:text-blue-400",
|
|
5755
|
+
success: "text-emerald-600 dark:text-emerald-400",
|
|
5756
|
+
warn: "text-amber-600 dark:text-amber-400",
|
|
5757
|
+
danger: "text-rose-600 dark:text-rose-400"
|
|
5758
|
+
};
|
|
5759
|
+
var cardVariantClass = {
|
|
5760
|
+
default: "border border-border/70 bg-card shadow-sm hover:border-border hover:shadow-md",
|
|
5761
|
+
outline: "border border-border bg-card hover:border-foreground/25",
|
|
5762
|
+
muted: "border border-transparent bg-muted/60 hover:bg-muted"
|
|
5763
|
+
};
|
|
5764
|
+
var cardToneClass = {
|
|
5765
|
+
default: "bg-card shadow-sm hover:shadow-md",
|
|
5766
|
+
primary: "bg-card shadow-sm hover:shadow-md",
|
|
5767
|
+
success: "bg-card shadow-sm hover:shadow-md",
|
|
5768
|
+
warn: "bg-card shadow-sm hover:shadow-md",
|
|
5769
|
+
danger: "bg-card shadow-sm hover:shadow-md"
|
|
5770
|
+
};
|
|
5771
|
+
function cardSurfaceClass(variant, tone) {
|
|
5772
|
+
return variant === "tonal" ? cardToneClass[tone] : cardVariantClass[variant];
|
|
5773
|
+
}
|
|
5774
|
+
var densityColumnClass = {
|
|
5775
|
+
default: "w-72 gap-2.5",
|
|
5776
|
+
compact: "w-64 gap-2"
|
|
5777
|
+
};
|
|
5778
|
+
var densityListClass = {
|
|
5779
|
+
default: "gap-2.5",
|
|
5780
|
+
compact: "gap-2"
|
|
5781
|
+
};
|
|
5782
|
+
var densityCardClass = {
|
|
5783
|
+
default: "rounded-lg p-2",
|
|
5784
|
+
compact: "rounded-lg p-1.5"
|
|
5785
|
+
};
|
|
5786
|
+
function defaultGetCardId(card) {
|
|
5787
|
+
return card.id;
|
|
5788
|
+
}
|
|
5789
|
+
function SortableCard({
|
|
5790
|
+
card,
|
|
5791
|
+
cardId,
|
|
5792
|
+
column,
|
|
5793
|
+
density,
|
|
5794
|
+
variant,
|
|
5795
|
+
disabled,
|
|
5796
|
+
dragHandle,
|
|
5797
|
+
className,
|
|
5798
|
+
renderCard
|
|
5799
|
+
}) {
|
|
5800
|
+
const {
|
|
5801
|
+
attributes,
|
|
5802
|
+
listeners: listeners2,
|
|
5803
|
+
setNodeRef,
|
|
5804
|
+
transform,
|
|
5805
|
+
transition,
|
|
5806
|
+
isDragging
|
|
5807
|
+
} = (0, import_sortable.useSortable)({ id: cardId, disabled });
|
|
5808
|
+
const style = {
|
|
5809
|
+
transform: import_utilities.CSS.Translate.toString(transform),
|
|
5810
|
+
transition
|
|
5811
|
+
};
|
|
5812
|
+
const dragHandleProps = disabled ? void 0 : { ...attributes, ...listeners2 };
|
|
5813
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
|
|
5814
|
+
"div",
|
|
5815
|
+
{
|
|
5816
|
+
ref: setNodeRef,
|
|
5817
|
+
style,
|
|
5818
|
+
"data-slot": "kanban-card",
|
|
5819
|
+
"data-dragging": isDragging ? "" : void 0,
|
|
5820
|
+
className: cn(
|
|
5821
|
+
"group/kanban-card relative text-sm text-foreground transition",
|
|
5822
|
+
densityCardClass[density],
|
|
5823
|
+
cardSurfaceClass(variant, column.tone ?? "default"),
|
|
5824
|
+
isDragging && "opacity-40",
|
|
5825
|
+
className
|
|
5826
|
+
),
|
|
5827
|
+
children: [
|
|
5828
|
+
!disabled && dragHandle === "auto" ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
5829
|
+
"button",
|
|
5830
|
+
{
|
|
5831
|
+
type: "button",
|
|
5832
|
+
"aria-label": "Drag card",
|
|
5833
|
+
className: "absolute right-1.5 top-1.5 z-10 grid size-6 cursor-grab touch-none place-items-center rounded-md text-muted-foreground/40 opacity-0 transition hover:bg-foreground/5 hover:text-foreground focus-visible:opacity-100 focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-foreground/15 group-hover/kanban-card:opacity-100 active:cursor-grabbing",
|
|
5834
|
+
...attributes,
|
|
5835
|
+
...listeners2,
|
|
5836
|
+
children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_lucide_react25.GripVerticalIcon, { className: "size-4", "aria-hidden": true })
|
|
5837
|
+
}
|
|
5838
|
+
) : null,
|
|
5839
|
+
renderCard(card, { column, isDragging, isOverlay: false, dragHandleProps })
|
|
5840
|
+
]
|
|
5841
|
+
}
|
|
5842
|
+
);
|
|
5843
|
+
}
|
|
5844
|
+
function KanbanColumnView({
|
|
5845
|
+
column,
|
|
5846
|
+
cardIds,
|
|
5847
|
+
density,
|
|
5848
|
+
cardVariant,
|
|
5849
|
+
disabled,
|
|
5850
|
+
dragHandle,
|
|
5851
|
+
emptyColumnLabel,
|
|
5852
|
+
className,
|
|
5853
|
+
cardClassName,
|
|
5854
|
+
getCardId,
|
|
5855
|
+
renderColumnHeader,
|
|
5856
|
+
renderCard
|
|
5857
|
+
}) {
|
|
5858
|
+
const tone = column.tone ?? "default";
|
|
5859
|
+
const { setNodeRef, isOver } = (0, import_core.useDroppable)({ id: column.id, disabled });
|
|
5860
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
|
|
5861
|
+
"div",
|
|
5862
|
+
{
|
|
5863
|
+
"data-slot": "kanban-column",
|
|
5864
|
+
className: cn(
|
|
5865
|
+
"flex shrink-0 flex-col",
|
|
5866
|
+
densityColumnClass[density],
|
|
5867
|
+
className
|
|
5868
|
+
),
|
|
5869
|
+
children: [
|
|
5870
|
+
renderColumnHeader ? renderColumnHeader(column) : /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex flex-col gap-0.5 px-1 pb-0.5", children: [
|
|
5871
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsxs)("div", { className: "flex items-center gap-2", children: [
|
|
5872
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
5873
|
+
"h3",
|
|
5874
|
+
{
|
|
5875
|
+
className: cn(
|
|
5876
|
+
"min-w-0 flex-1 truncate text-xs font-medium",
|
|
5877
|
+
columnTitleToneClass[tone]
|
|
5878
|
+
),
|
|
5879
|
+
children: column.title
|
|
5880
|
+
}
|
|
5881
|
+
),
|
|
5882
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)("span", { className: "shrink-0 text-xs font-normal tabular-nums text-muted-foreground/60", children: column.cards.length }),
|
|
5883
|
+
column.action ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "shrink-0", children: column.action }) : null
|
|
5884
|
+
] }),
|
|
5885
|
+
column.description ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("p", { className: "truncate text-xs text-muted-foreground", children: column.description }) : null
|
|
5886
|
+
] }),
|
|
5887
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_sortable.SortableContext, { items: cardIds, strategy: import_sortable.verticalListSortingStrategy, children: /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
5888
|
+
"div",
|
|
5889
|
+
{
|
|
5890
|
+
ref: setNodeRef,
|
|
5891
|
+
"data-slot": "kanban-column-body",
|
|
5892
|
+
className: cn(
|
|
5893
|
+
"flex min-h-16 flex-1 flex-col rounded-xl transition-colors",
|
|
5894
|
+
densityListClass[density],
|
|
5895
|
+
isOver && "bg-muted/50"
|
|
5896
|
+
),
|
|
5897
|
+
children: column.cards.length === 0 ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "flex flex-1 items-center justify-center rounded-xl border border-dashed border-border/60 px-2 py-8 text-center text-xs text-muted-foreground/70", children: emptyColumnLabel ?? "Drop here" }) : column.cards.map((card) => {
|
|
5898
|
+
const id = getCardId(card);
|
|
5899
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
5900
|
+
SortableCard,
|
|
5901
|
+
{
|
|
5902
|
+
card,
|
|
5903
|
+
cardId: id,
|
|
5904
|
+
column,
|
|
5905
|
+
density,
|
|
5906
|
+
variant: cardVariant,
|
|
5907
|
+
disabled,
|
|
5908
|
+
dragHandle,
|
|
5909
|
+
className: cardClassName,
|
|
5910
|
+
renderCard
|
|
5911
|
+
},
|
|
5912
|
+
id
|
|
5913
|
+
);
|
|
5914
|
+
})
|
|
5915
|
+
}
|
|
5916
|
+
) }),
|
|
5917
|
+
column.footer ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)("div", { className: "px-0.5 pt-0.5", children: column.footer }) : null
|
|
5918
|
+
]
|
|
5919
|
+
}
|
|
5920
|
+
);
|
|
5921
|
+
}
|
|
5922
|
+
function cloneColumns(columns) {
|
|
5923
|
+
return columns.map((col) => ({ ...col, cards: [...col.cards] }));
|
|
5924
|
+
}
|
|
5925
|
+
function locateCard(columns, getCardId, cardId) {
|
|
5926
|
+
for (const col of columns) {
|
|
5927
|
+
const index = col.cards.findIndex((c) => getCardId(c) === cardId);
|
|
5928
|
+
if (index !== -1) return { columnId: col.id, index };
|
|
5929
|
+
}
|
|
5930
|
+
return null;
|
|
5931
|
+
}
|
|
5932
|
+
function Kanban({
|
|
5933
|
+
columns: columnsProp,
|
|
5934
|
+
defaultColumns,
|
|
5935
|
+
onColumnsChange,
|
|
5936
|
+
onMove,
|
|
5937
|
+
renderCard,
|
|
5938
|
+
renderColumnHeader,
|
|
5939
|
+
getCardId = defaultGetCardId,
|
|
5940
|
+
emptyColumnLabel,
|
|
5941
|
+
density = "default",
|
|
5942
|
+
cardVariant = "default",
|
|
5943
|
+
dragHandle = "auto",
|
|
5944
|
+
disabled = false,
|
|
5945
|
+
className,
|
|
5946
|
+
columnClassName,
|
|
5947
|
+
cardClassName,
|
|
5948
|
+
...rest
|
|
5949
|
+
}) {
|
|
5950
|
+
const ariaLabel = rest["aria-label"] ?? "Kanban board";
|
|
5951
|
+
const isControlled = columnsProp !== void 0;
|
|
5952
|
+
const [internal, setInternal] = React12.useState(
|
|
5953
|
+
() => cloneColumns(defaultColumns ?? columnsProp ?? [])
|
|
5954
|
+
);
|
|
5955
|
+
const [activeId, setActiveId] = React12.useState(null);
|
|
5956
|
+
const dragOriginRef = React12.useRef(null);
|
|
5957
|
+
React12.useEffect(() => {
|
|
5958
|
+
if (isControlled && activeId === null) {
|
|
5959
|
+
setInternal(cloneColumns(columnsProp));
|
|
5960
|
+
}
|
|
5961
|
+
}, [columnsProp, isControlled, activeId]);
|
|
5962
|
+
const columns = internal;
|
|
5963
|
+
const columnIds = React12.useMemo(
|
|
5964
|
+
() => new Set(columns.map((c) => c.id)),
|
|
5965
|
+
[columns]
|
|
5966
|
+
);
|
|
5967
|
+
const sensors = (0, import_core.useSensors)(
|
|
5968
|
+
(0, import_core.useSensor)(import_core.PointerSensor, { activationConstraint: { distance: 6 } }),
|
|
5969
|
+
(0, import_core.useSensor)(import_core.KeyboardSensor, { coordinateGetter: import_sortable.sortableKeyboardCoordinates })
|
|
5970
|
+
);
|
|
5971
|
+
const activeCard = React12.useMemo(() => {
|
|
5972
|
+
if (!activeId) return null;
|
|
5973
|
+
for (const col of columns) {
|
|
5974
|
+
const card = col.cards.find((c) => getCardId(c) === activeId);
|
|
5975
|
+
if (card) return { card, column: col };
|
|
5976
|
+
}
|
|
5977
|
+
return null;
|
|
5978
|
+
}, [activeId, columns, getCardId]);
|
|
5979
|
+
const resolveTargetColumnId = (overId) => {
|
|
5980
|
+
if (columnIds.has(overId)) return overId;
|
|
5981
|
+
const loc = locateCard(columns, getCardId, overId);
|
|
5982
|
+
return loc?.columnId;
|
|
5983
|
+
};
|
|
5984
|
+
const handleDragStart = (event) => {
|
|
5985
|
+
const id = String(event.active.id);
|
|
5986
|
+
setActiveId(id);
|
|
5987
|
+
dragOriginRef.current = locateCard(columns, getCardId, id);
|
|
5988
|
+
};
|
|
5989
|
+
const handleDragOver = (event) => {
|
|
5990
|
+
const { active, over } = event;
|
|
5991
|
+
if (!over) return;
|
|
5992
|
+
const activeCardId = String(active.id);
|
|
5993
|
+
const overId = String(over.id);
|
|
5994
|
+
const from = locateCard(columns, getCardId, activeCardId);
|
|
5995
|
+
const toColumnId = resolveTargetColumnId(overId);
|
|
5996
|
+
if (!from || !toColumnId || from.columnId === toColumnId) return;
|
|
5997
|
+
setInternal((prev) => {
|
|
5998
|
+
const next = cloneColumns(prev);
|
|
5999
|
+
const fromCol = next.find((c) => c.id === from.columnId);
|
|
6000
|
+
const toCol = next.find((c) => c.id === toColumnId);
|
|
6001
|
+
if (!fromCol || !toCol) return prev;
|
|
6002
|
+
const movingIndex = fromCol.cards.findIndex(
|
|
6003
|
+
(c) => getCardId(c) === activeCardId
|
|
6004
|
+
);
|
|
6005
|
+
if (movingIndex === -1) return prev;
|
|
6006
|
+
const [moving] = fromCol.cards.splice(movingIndex, 1);
|
|
6007
|
+
const overIsCard = !columnIds.has(overId);
|
|
6008
|
+
const overIndex = overIsCard ? toCol.cards.findIndex((c) => getCardId(c) === overId) : toCol.cards.length;
|
|
6009
|
+
const insertAt = overIndex === -1 ? toCol.cards.length : overIndex;
|
|
6010
|
+
toCol.cards.splice(insertAt, 0, moving);
|
|
6011
|
+
return next;
|
|
6012
|
+
});
|
|
6013
|
+
};
|
|
6014
|
+
const finishDrag = (event) => {
|
|
6015
|
+
const { active, over } = event;
|
|
6016
|
+
const origin = dragOriginRef.current;
|
|
6017
|
+
const movedCard = activeCard?.card;
|
|
6018
|
+
dragOriginRef.current = null;
|
|
6019
|
+
setActiveId(null);
|
|
6020
|
+
if (!over || !origin) return;
|
|
6021
|
+
const activeCardId = String(active.id);
|
|
6022
|
+
const overId = String(over.id);
|
|
6023
|
+
let next = columns;
|
|
6024
|
+
const current = locateCard(columns, getCardId, activeCardId);
|
|
6025
|
+
const toColumnId = resolveTargetColumnId(overId) ?? current?.columnId;
|
|
6026
|
+
if (current && toColumnId && current.columnId === toColumnId) {
|
|
6027
|
+
const col = columns.find((c) => c.id === toColumnId);
|
|
6028
|
+
if (col) {
|
|
6029
|
+
const oldIndex = col.cards.findIndex((c) => getCardId(c) === activeCardId);
|
|
6030
|
+
const overIsCard = !columnIds.has(overId);
|
|
6031
|
+
const overIndex = overIsCard ? col.cards.findIndex((c) => getCardId(c) === overId) : col.cards.length - 1;
|
|
6032
|
+
const newIndex = overIndex === -1 ? col.cards.length - 1 : overIndex;
|
|
6033
|
+
if (oldIndex !== -1 && newIndex !== -1 && oldIndex !== newIndex) {
|
|
6034
|
+
next = columns.map(
|
|
6035
|
+
(c) => c.id === toColumnId ? { ...c, cards: (0, import_sortable.arrayMove)(c.cards, oldIndex, newIndex) } : c
|
|
6036
|
+
);
|
|
6037
|
+
}
|
|
6038
|
+
}
|
|
6039
|
+
}
|
|
6040
|
+
if (next !== columns) setInternal(next);
|
|
6041
|
+
const finalLoc = locateCard(next, getCardId, activeCardId);
|
|
6042
|
+
const moved = finalLoc && (finalLoc.columnId !== origin.columnId || finalLoc.index !== origin.index);
|
|
6043
|
+
if (moved) {
|
|
6044
|
+
if (movedCard) {
|
|
6045
|
+
onMove?.({
|
|
6046
|
+
card: movedCard,
|
|
6047
|
+
cardId: activeCardId,
|
|
6048
|
+
from: origin,
|
|
6049
|
+
to: finalLoc,
|
|
6050
|
+
columns: next
|
|
6051
|
+
});
|
|
6052
|
+
}
|
|
6053
|
+
onColumnsChange?.(next);
|
|
6054
|
+
}
|
|
6055
|
+
};
|
|
6056
|
+
return /* @__PURE__ */ (0, import_jsx_runtime63.jsxs)(
|
|
6057
|
+
import_core.DndContext,
|
|
6058
|
+
{
|
|
6059
|
+
sensors,
|
|
6060
|
+
collisionDetection: import_core.closestCorners,
|
|
6061
|
+
onDragStart: handleDragStart,
|
|
6062
|
+
onDragOver: handleDragOver,
|
|
6063
|
+
onDragEnd: finishDrag,
|
|
6064
|
+
onDragCancel: () => {
|
|
6065
|
+
dragOriginRef.current = null;
|
|
6066
|
+
setActiveId(null);
|
|
6067
|
+
if (isControlled) setInternal(cloneColumns(columnsProp));
|
|
6068
|
+
},
|
|
6069
|
+
children: [
|
|
6070
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
6071
|
+
"div",
|
|
6072
|
+
{
|
|
6073
|
+
"data-slot": "kanban",
|
|
6074
|
+
role: "list",
|
|
6075
|
+
"aria-label": ariaLabel,
|
|
6076
|
+
className: cn(
|
|
6077
|
+
"flex w-full items-start overflow-x-auto p-1.5 pb-6 -m-1.5",
|
|
6078
|
+
density === "compact" ? "gap-3" : "gap-4",
|
|
6079
|
+
className
|
|
6080
|
+
),
|
|
6081
|
+
children: columns.map((column) => /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
6082
|
+
KanbanColumnView,
|
|
6083
|
+
{
|
|
6084
|
+
column,
|
|
6085
|
+
cardIds: column.cards.map(getCardId),
|
|
6086
|
+
density,
|
|
6087
|
+
cardVariant,
|
|
6088
|
+
disabled,
|
|
6089
|
+
dragHandle,
|
|
6090
|
+
emptyColumnLabel,
|
|
6091
|
+
className: columnClassName,
|
|
6092
|
+
cardClassName,
|
|
6093
|
+
getCardId,
|
|
6094
|
+
renderColumnHeader,
|
|
6095
|
+
renderCard
|
|
6096
|
+
},
|
|
6097
|
+
column.id
|
|
6098
|
+
))
|
|
6099
|
+
}
|
|
6100
|
+
),
|
|
6101
|
+
/* @__PURE__ */ (0, import_jsx_runtime63.jsx)(import_core.DragOverlay, { children: activeCard ? /* @__PURE__ */ (0, import_jsx_runtime63.jsx)(
|
|
6102
|
+
"div",
|
|
6103
|
+
{
|
|
6104
|
+
"data-slot": "kanban-card-overlay",
|
|
6105
|
+
className: cn(
|
|
6106
|
+
"text-sm text-foreground shadow-xl ring-1 ring-black/5",
|
|
6107
|
+
densityCardClass[density],
|
|
6108
|
+
cardSurfaceClass(cardVariant, activeCard.column.tone ?? "default"),
|
|
6109
|
+
"rotate-2 cursor-grabbing"
|
|
6110
|
+
),
|
|
6111
|
+
children: renderCard(activeCard.card, {
|
|
6112
|
+
column: activeCard.column,
|
|
6113
|
+
isDragging: true,
|
|
6114
|
+
isOverlay: true
|
|
6115
|
+
})
|
|
6116
|
+
}
|
|
6117
|
+
) : null })
|
|
5276
6118
|
]
|
|
5277
6119
|
}
|
|
5278
6120
|
);
|
|
@@ -5418,6 +6260,7 @@ function CircularProgress({
|
|
|
5418
6260
|
InputOTPHiddenInput,
|
|
5419
6261
|
InputOTPSeparator,
|
|
5420
6262
|
InputOTPSlot,
|
|
6263
|
+
Kanban,
|
|
5421
6264
|
Kbd,
|
|
5422
6265
|
KbdGroup,
|
|
5423
6266
|
Label,
|
|
@@ -5522,6 +6365,7 @@ function CircularProgress({
|
|
|
5522
6365
|
TooltipContent,
|
|
5523
6366
|
TooltipProvider,
|
|
5524
6367
|
TooltipTrigger,
|
|
6368
|
+
UntitledButton,
|
|
5525
6369
|
alertVariants,
|
|
5526
6370
|
avatarChartVariantClass,
|
|
5527
6371
|
badgeVariants,
|
|
@@ -5535,6 +6379,7 @@ function CircularProgress({
|
|
|
5535
6379
|
overlaySurfaceClass,
|
|
5536
6380
|
toast,
|
|
5537
6381
|
toggleVariants,
|
|
6382
|
+
untitledButtonVariants,
|
|
5538
6383
|
useChart,
|
|
5539
6384
|
useToast
|
|
5540
6385
|
});
|