@nebutra/ui 0.2.2 → 2.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/animate-in-BlvjVh2S.d.ts +250 -0
- package/dist/{canonical-CrO71UPO.d.ts → canonical-Bf4czR2u.d.ts} +225 -211
- package/dist/chat/index.d.ts +1 -0
- package/dist/chat/index.js +3 -0
- package/dist/chat/index.js.map +1 -0
- package/dist/components/index.d.ts +58 -123
- package/dist/components/index.js +504 -203
- package/dist/components/index.js.map +1 -1
- package/dist/editorial/index.d.ts +404 -0
- package/dist/editorial/index.js +868 -0
- package/dist/editorial/index.js.map +1 -0
- package/dist/icons/index.d.ts +1 -0
- package/dist/layout/index.d.ts +2 -2
- package/dist/layout/index.js +116 -26
- package/dist/layout/index.js.map +1 -1
- package/dist/layouts/index.d.ts +80 -2
- package/dist/layouts/index.js +13 -11
- package/dist/layouts/index.js.map +1 -1
- package/dist/patterns/index.d.ts +4 -5
- package/dist/patterns/index.js +221 -106
- package/dist/patterns/index.js.map +1 -1
- package/dist/primitives/canonical.d.ts +4 -3
- package/dist/primitives/canonical.js +609 -197
- package/dist/primitives/canonical.js.map +1 -1
- package/dist/primitives/index.d.ts +213 -21
- package/dist/primitives/index.js +2209 -1317
- package/dist/primitives/index.js.map +1 -1
- package/dist/tailwind.preset.d.ts +2 -2
- package/dist/tailwind.preset.js +1 -1
- package/dist/tailwind.preset.js.map +1 -1
- package/dist/typography/fonts.css +21 -26
- package/dist/typography/index.d.ts +4 -4
- package/dist/typography/index.js +1 -1
- package/dist/typography/index.js.map +1 -1
- package/dist/utils/auth-surfaces.d.ts +33 -0
- package/dist/utils/auth-surfaces.js +9 -0
- package/dist/utils/auth-surfaces.js.map +1 -0
- package/dist/utils/index.d.ts +33 -5
- package/dist/utils/index.js +15 -3
- package/dist/utils/index.js.map +1 -1
- package/package.json +43 -9
- package/src/styles/sources.css +10 -0
- package/src/typography/fonts.css +21 -26
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
"use client";
|
|
2
2
|
import { Accordion as Accordion$1 } from '@base-ui/react/accordion';
|
|
3
|
-
import { ChevronUpDown, Check, ChevronRight, ChevronDown, MagnifyingGlass, Plus, Cross, MoreHorizontal, Status, Copy,
|
|
3
|
+
import { ChevronUpDown, Check, ChevronRight, ChevronDown, MagnifyingGlass, Plus, Cross, MoreHorizontal, Status, Copy, Information, Warning, External, LoaderCircle, EyeOff, Eye, Minus, LockClosed, CheckCircle, MoreVertical, DeviceDesktop, Sun, Moon, Hash, Code, Link, FolderOpen, FolderClosed, File, ChevronLeft, ChevronUp, FileText } from '@nebutra/icons';
|
|
4
4
|
import { clsx } from 'clsx';
|
|
5
5
|
import { twMerge } from 'tailwind-merge';
|
|
6
6
|
import { jsx, jsxs, Fragment } from 'react/jsx-runtime';
|
|
@@ -8,9 +8,9 @@ import { cva } from 'class-variance-authority';
|
|
|
8
8
|
import { AlertDialog as AlertDialog$1 } from '@base-ui/react/alert-dialog';
|
|
9
9
|
import * as React24 from 'react';
|
|
10
10
|
import React24__default, { createContext, useId, useRef, useState, useMemo, use, useCallback, useEffect, Children, isValidElement, cloneElement } from 'react';
|
|
11
|
-
import { colors, flow, emerge } from '@nebutra/brand';
|
|
11
|
+
import { colors, brandSpring, flow, emerge } from '@nebutra/brand';
|
|
12
12
|
export { brandSpring } from '@nebutra/brand';
|
|
13
|
-
import { useReducedMotion,
|
|
13
|
+
import { useReducedMotion, LazyMotion, domAnimation, AnimatePresence, motion, m } from 'framer-motion';
|
|
14
14
|
import { Avatar as Avatar$1 } from '@base-ui/react/avatar';
|
|
15
15
|
import { Prism } from 'react-syntax-highlighter';
|
|
16
16
|
import { nightOwl } from 'react-syntax-highlighter/dist/esm/styles/prism';
|
|
@@ -41,6 +41,10 @@ function cn(...inputs) {
|
|
|
41
41
|
}
|
|
42
42
|
|
|
43
43
|
// src/utils/primitive-props.ts
|
|
44
|
+
function asPlainStyle(style) {
|
|
45
|
+
if (style == null || typeof style === "function") return {};
|
|
46
|
+
return style;
|
|
47
|
+
}
|
|
44
48
|
function withHtmlProps(Component) {
|
|
45
49
|
return Component;
|
|
46
50
|
}
|
|
@@ -73,7 +77,7 @@ var AccordionTrigger = ({
|
|
|
73
77
|
{
|
|
74
78
|
ref,
|
|
75
79
|
className: cn(
|
|
76
|
-
"font-medium flex flex-1 items-center justify-between transition-[color,box-shadow] duration-flow ease-out hover:text-muted-foreground focus-visible:
|
|
80
|
+
"font-medium flex flex-1 items-center justify-between transition-[color,box-shadow] duration-flow ease-out hover:text-muted-foreground focus-visible:outline-none [&[data-panel-open]>svg]:rotate-45",
|
|
77
81
|
size === "small" ? "py-2.5 text-sm" : "py-4 text-[15px]",
|
|
78
82
|
className
|
|
79
83
|
),
|
|
@@ -305,7 +309,7 @@ function Alert({
|
|
|
305
309
|
className: cn(
|
|
306
310
|
"group shrink-0 size-4 inline-flex items-center justify-center rounded-[var(--radius-sm)]",
|
|
307
311
|
"opacity-70 hover:opacity-100 transition-opacity",
|
|
308
|
-
"focus-visible:outline-none
|
|
312
|
+
"focus-visible:outline-none"
|
|
309
313
|
),
|
|
310
314
|
children: /* @__PURE__ */ jsx(Cross, { className: "size-4" })
|
|
311
315
|
}
|
|
@@ -454,7 +458,7 @@ var primitiveTransition = {
|
|
|
454
458
|
// hero entrance, big delight moments
|
|
455
459
|
},
|
|
456
460
|
easing: {
|
|
457
|
-
default: "ease-
|
|
461
|
+
default: "var(--ease-brand)",
|
|
458
462
|
inOut: "cubic-bezier(0.4, 0, 0.2, 1)"
|
|
459
463
|
}
|
|
460
464
|
};
|
|
@@ -472,7 +476,7 @@ var shadowClasses = {
|
|
|
472
476
|
"2xl": "shadow-2xl"};
|
|
473
477
|
|
|
474
478
|
// src/tokens/components/overlay.ts
|
|
475
|
-
var overlayFocusRingClassName = "outline-none
|
|
479
|
+
var overlayFocusRingClassName = "outline-none";
|
|
476
480
|
var overlayZIndex = {
|
|
477
481
|
backdrop: 1040,
|
|
478
482
|
modal: 1050,
|
|
@@ -488,72 +492,73 @@ var overlayTokens = {
|
|
|
488
492
|
}};
|
|
489
493
|
var overlayClassNames = {
|
|
490
494
|
focusRing: overlayFocusRingClassName,
|
|
491
|
-
backdrop: "fixed inset-0 bg-black/40 backdrop-blur-sm transition-[opacity,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-
|
|
495
|
+
backdrop: "fixed inset-0 bg-black/40 backdrop-blur-sm transition-[opacity,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)] data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none",
|
|
492
496
|
modalSurface: [
|
|
493
497
|
"fixed left-1/2 top-1/2 grid w-full max-w-lg -translate-x-1/2 -translate-y-1/2 gap-4",
|
|
494
498
|
"border border-border/60 bg-background/95 p-6 text-foreground backdrop-blur-xl",
|
|
495
499
|
"rounded-[var(--radius-xl)]",
|
|
496
500
|
shadowClasses["2xl"],
|
|
497
501
|
"outline-none",
|
|
498
|
-
"transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-
|
|
502
|
+
"transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
|
|
499
503
|
"data-starting-style:scale-95 data-starting-style:opacity-0 data-ending-style:scale-95 data-ending-style:opacity-0",
|
|
500
504
|
"motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none"
|
|
501
505
|
].join(" "),
|
|
502
506
|
menuSurface: [
|
|
503
|
-
"min-w-32 overflow-hidden rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-1 text-popover-foreground backdrop-blur-md",
|
|
507
|
+
"min-w-32 origin-[var(--transform-origin)] overflow-hidden rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-1 text-popover-foreground backdrop-blur-md",
|
|
504
508
|
shadowClasses.xl,
|
|
505
|
-
"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-
|
|
506
|
-
"data-[starting-style]:scale-
|
|
509
|
+
"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
|
|
510
|
+
"data-[starting-style]:scale-[0.97] data-[starting-style]:opacity-0 data-[ending-style]:scale-[0.97] data-[ending-style]:opacity-0",
|
|
507
511
|
"motion-reduce:transition-none motion-reduce:data-[starting-style]:transform-none motion-reduce:data-[ending-style]:transform-none"
|
|
508
512
|
].join(" "),
|
|
509
513
|
selectSurface: [
|
|
510
|
-
"max-h-[var(--select-content-max-height)] min-w-[var(--select-content-min-width)] overflow-hidden",
|
|
514
|
+
"max-h-[var(--select-content-max-height)] min-w-[var(--select-content-min-width)] origin-[var(--transform-origin)] overflow-hidden",
|
|
511
515
|
"rounded-[var(--select-content-radius)] border border-border/70 bg-popover/95 text-popover-foreground backdrop-blur-md",
|
|
512
516
|
"shadow-[var(--select-content-shadow)] outline-none",
|
|
513
|
-
"transition-[opacity,transform,display] duration-[var(--select-duration)] ease-[var(--
|
|
514
|
-
"data-starting-style:scale-
|
|
517
|
+
"transition-[opacity,transform,display] duration-[var(--select-duration)] ease-[var(--ease-brand)]",
|
|
518
|
+
"data-starting-style:scale-[0.97] data-starting-style:opacity-0 data-ending-style:scale-[0.97] data-ending-style:opacity-0",
|
|
515
519
|
"motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none"
|
|
516
520
|
].join(" "),
|
|
517
521
|
navigationMenuSurface: [
|
|
518
|
-
"min-w-32 overflow-hidden rounded-[var(--radius-xl)] border border-border/70 bg-popover/95 text-popover-foreground backdrop-blur-md",
|
|
522
|
+
"min-w-32 origin-[var(--transform-origin)] overflow-hidden rounded-[var(--radius-xl)] border border-border/70 bg-popover/95 text-popover-foreground backdrop-blur-md",
|
|
519
523
|
shadowClasses.xl,
|
|
520
|
-
"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-
|
|
521
|
-
"data-[starting-style]:scale-
|
|
524
|
+
"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
|
|
525
|
+
"data-[starting-style]:scale-[0.97] data-[starting-style]:opacity-0 data-[ending-style]:scale-[0.97] data-[ending-style]:opacity-0",
|
|
522
526
|
"motion-reduce:transition-none motion-reduce:data-[starting-style]:transform-none motion-reduce:data-[ending-style]:transform-none"
|
|
523
527
|
].join(" "),
|
|
524
528
|
popoverSurface: [
|
|
525
|
-
"w-72 rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-4 text-popover-foreground backdrop-blur-md",
|
|
529
|
+
"w-72 origin-[var(--transform-origin)] rounded-[var(--radius-lg)] border border-border/70 bg-popover/95 p-4 text-popover-foreground backdrop-blur-md",
|
|
526
530
|
shadowClasses.xl,
|
|
527
|
-
"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-
|
|
528
|
-
"data-[open]:opacity-100 data-[closed]:opacity-0 data-[closed]:scale-
|
|
531
|
+
"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
|
|
532
|
+
"data-[open]:opacity-100 data-[closed]:opacity-0 data-[closed]:scale-[0.97] data-[open]:scale-100",
|
|
529
533
|
"motion-reduce:transition-none motion-reduce:data-[closed]:transform-none motion-reduce:data-[open]:transform-none"
|
|
530
534
|
].join(" "),
|
|
531
535
|
tooltipSurface: [
|
|
532
|
-
"overflow-hidden rounded-[var(--radius-md)] border border-border/70 bg-popover/95 px-3 py-1.5 text-sm text-popover-foreground backdrop-blur-md",
|
|
536
|
+
"origin-[var(--transform-origin)] overflow-hidden rounded-[var(--radius-md)] border border-border/70 bg-popover/95 px-3 py-1.5 text-sm text-popover-foreground backdrop-blur-md",
|
|
533
537
|
shadowClasses.md,
|
|
534
|
-
"transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-
|
|
535
|
-
"data-starting-style:scale-
|
|
538
|
+
"transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
|
|
539
|
+
"data-starting-style:scale-[0.97] data-starting-style:opacity-0 data-ending-style:scale-[0.97] data-ending-style:opacity-0",
|
|
540
|
+
"data-[instant]:duration-0",
|
|
536
541
|
"motion-reduce:transition-none motion-reduce:data-starting-style:transform-none motion-reduce:data-ending-style:transform-none"
|
|
537
542
|
].join(" "),
|
|
538
543
|
sheetBackdrop: [
|
|
539
544
|
"fixed inset-0 bg-[var(--sheet-overlay-background)] backdrop-blur-[var(--sheet-overlay-blur)]",
|
|
540
|
-
"transition-[opacity,backdrop-filter,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-
|
|
545
|
+
"transition-[opacity,backdrop-filter,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
|
|
541
546
|
"data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none"
|
|
542
547
|
].join(" "),
|
|
543
548
|
sheetSurface: [
|
|
544
549
|
"fixed flex flex-col overflow-hidden border border-border bg-[var(--sheet-background)] text-foreground shadow-[var(--sheet-shadow)]",
|
|
545
|
-
"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-
|
|
550
|
+
"outline-none transition-[opacity,transform,display] duration-[var(--motion-duration-flow)] ease-[var(--ease-brand)]",
|
|
546
551
|
"data-ending-style:opacity-0 data-starting-style:opacity-0 motion-reduce:transition-none"
|
|
547
552
|
].join(" "),
|
|
548
|
-
closeButton: `absolute right-4 top-4 rounded-[var(--radius-sm)] opacity-70 ring-offset-background ${overlayFocusRingClassName} transition-opacity duration-[var(--motion-duration-micro)] ease-[var(--ease-
|
|
553
|
+
closeButton: `absolute right-4 top-4 rounded-[var(--radius-sm)] opacity-70 ring-offset-background ${overlayFocusRingClassName} transition-opacity duration-[var(--motion-duration-micro)] ease-[var(--ease-brand)] hover:opacity-100 disabled:pointer-events-none data-[open]:bg-accent data-[open]:text-muted-foreground motion-reduce:transition-none`
|
|
549
554
|
};
|
|
550
555
|
var buttonVariants = cva(
|
|
551
556
|
[
|
|
552
557
|
"inline-flex items-center justify-center gap-2 whitespace-nowrap",
|
|
553
558
|
"rounded-[var(--btn-default-radius,var(--radius-md))]",
|
|
554
559
|
"text-[length:var(--control-font-size-md,0.875rem)] font-[number:var(--font-weight-medium,500)]",
|
|
555
|
-
"transition-
|
|
556
|
-
"
|
|
560
|
+
"transition-[color,background-color,border-color,transform] duration-flow ease-[var(--ease-brand)]",
|
|
561
|
+
"active:scale-[0.97] motion-reduce:active:scale-100 motion-reduce:transition-none",
|
|
557
562
|
"disabled:pointer-events-none disabled:opacity-50",
|
|
558
563
|
"aria-busy:cursor-wait"
|
|
559
564
|
].join(" "),
|
|
@@ -580,8 +585,30 @@ var buttonVariants = cva(
|
|
|
580
585
|
},
|
|
581
586
|
shape: {
|
|
582
587
|
default: "",
|
|
583
|
-
|
|
584
|
-
|
|
588
|
+
// Radius from --btn-default-radius / --radius-md — brand-switchable.
|
|
589
|
+
// Do not hardcode rounded-md here; a language must be able to retarget
|
|
590
|
+
// the corner treatment of every icon trigger at once.
|
|
591
|
+
square: "rounded-[var(--btn-default-radius,var(--radius-md))]",
|
|
592
|
+
// Pill radius token, not Tailwind rounded-full — same 9999px default,
|
|
593
|
+
// but a brand that ships a softer "circle" can override --radius-pill.
|
|
594
|
+
circle: "rounded-[var(--radius-pill,9999px)]",
|
|
595
|
+
pill: "rounded-[var(--radius-pill,9999px)]"
|
|
596
|
+
},
|
|
597
|
+
// Icon-only box size — orthogonal to `size` (which tunes text-button
|
|
598
|
+
// height/padding/font together) and to `shape` (which picks the
|
|
599
|
+
// corner treatment). Only takes effect combined with shape="square"
|
|
600
|
+
// or shape="circle" (see compoundVariants below); every other
|
|
601
|
+
// combination ignores it. 28/32/36 cover the icon-trigger sizes that
|
|
602
|
+
// actually occur in the app — 24/40/48 are already reachable via
|
|
603
|
+
// shape + size (tiny/default/lg). Heights read --control-height-icon-*
|
|
604
|
+
// so density-aware Brand Packages can scale them with the ladder.
|
|
605
|
+
iconSize: {
|
|
606
|
+
sm: "",
|
|
607
|
+
// 28px default
|
|
608
|
+
md: "",
|
|
609
|
+
// 32px default
|
|
610
|
+
lg: ""
|
|
611
|
+
// 36px default
|
|
585
612
|
}
|
|
586
613
|
},
|
|
587
614
|
compoundVariants: [
|
|
@@ -592,22 +619,56 @@ var buttonVariants = cva(
|
|
|
592
619
|
{
|
|
593
620
|
shape: "circle",
|
|
594
621
|
size: "tiny",
|
|
595
|
-
className: "w-[var(--control-height-tiny,1.5rem)] px-0
|
|
622
|
+
className: "w-[var(--control-height-tiny,1.5rem)] px-0"
|
|
596
623
|
},
|
|
597
624
|
{
|
|
598
625
|
shape: "circle",
|
|
599
626
|
size: "sm",
|
|
600
|
-
className: "w-[var(--control-height-sm,2rem)] px-0
|
|
627
|
+
className: "w-[var(--control-height-sm,2rem)] px-0"
|
|
601
628
|
},
|
|
602
629
|
{
|
|
603
630
|
shape: "circle",
|
|
604
631
|
size: "default",
|
|
605
|
-
className: "w-[var(--control-height-md,2.5rem)] px-0
|
|
632
|
+
className: "w-[var(--control-height-md,2.5rem)] px-0"
|
|
606
633
|
},
|
|
607
634
|
{
|
|
608
635
|
shape: "circle",
|
|
609
636
|
size: "lg",
|
|
610
|
-
className: "w-[var(--control-height-lg,3rem)] px-0
|
|
637
|
+
className: "w-[var(--control-height-lg,3rem)] px-0"
|
|
638
|
+
},
|
|
639
|
+
// iconSize wins over the size-driven box above — matched on shape +
|
|
640
|
+
// iconSize only, so it applies regardless of whatever `size` was
|
|
641
|
+
// passed (or left at its "default" fallback). Corner treatment stays
|
|
642
|
+
// on the shape variant (token-backed); only the box is set here.
|
|
643
|
+
{
|
|
644
|
+
shape: "square",
|
|
645
|
+
iconSize: "sm",
|
|
646
|
+
className: "h-[var(--control-height-icon-sm,1.75rem)] w-[var(--control-height-icon-sm,1.75rem)] px-0"
|
|
647
|
+
},
|
|
648
|
+
{
|
|
649
|
+
shape: "square",
|
|
650
|
+
iconSize: "md",
|
|
651
|
+
className: "h-[var(--control-height-icon-md,2rem)] w-[var(--control-height-icon-md,2rem)] px-0"
|
|
652
|
+
},
|
|
653
|
+
{
|
|
654
|
+
shape: "square",
|
|
655
|
+
iconSize: "lg",
|
|
656
|
+
className: "h-[var(--control-height-icon-lg,2.25rem)] w-[var(--control-height-icon-lg,2.25rem)] px-0"
|
|
657
|
+
},
|
|
658
|
+
{
|
|
659
|
+
shape: "circle",
|
|
660
|
+
iconSize: "sm",
|
|
661
|
+
className: "h-[var(--control-height-icon-sm,1.75rem)] w-[var(--control-height-icon-sm,1.75rem)] px-0"
|
|
662
|
+
},
|
|
663
|
+
{
|
|
664
|
+
shape: "circle",
|
|
665
|
+
iconSize: "md",
|
|
666
|
+
className: "h-[var(--control-height-icon-md,2rem)] w-[var(--control-height-icon-md,2rem)] px-0"
|
|
667
|
+
},
|
|
668
|
+
{
|
|
669
|
+
shape: "circle",
|
|
670
|
+
iconSize: "lg",
|
|
671
|
+
className: "h-[var(--control-height-icon-lg,2.25rem)] w-[var(--control-height-icon-lg,2.25rem)] px-0"
|
|
611
672
|
}
|
|
612
673
|
],
|
|
613
674
|
defaultVariants: {
|
|
@@ -763,13 +824,13 @@ var motionDurations = {
|
|
|
763
824
|
cinematic: 500
|
|
764
825
|
};
|
|
765
826
|
var easings = {
|
|
766
|
-
easeOut: [0,
|
|
827
|
+
easeOut: [0.16, 1, 0.3, 1],
|
|
767
828
|
easeInOut: [0.4, 0, 0.2, 1]};
|
|
768
829
|
var motionVariants = {
|
|
769
830
|
fadeInUp: {
|
|
770
|
-
initial: { opacity: 0,
|
|
771
|
-
animate: { opacity: 1,
|
|
772
|
-
exit: { opacity: 0,
|
|
831
|
+
initial: { opacity: 0, transform: "translateY(20px)" },
|
|
832
|
+
animate: { opacity: 1, transform: "translateY(0px)" },
|
|
833
|
+
exit: { opacity: 0, transform: "translateY(10px)" }
|
|
773
834
|
},
|
|
774
835
|
scaleIn: {
|
|
775
836
|
initial: { opacity: 0, scale: 0.95 },
|
|
@@ -779,15 +840,15 @@ var motionVariants = {
|
|
|
779
840
|
var staggerContainers = {
|
|
780
841
|
fast: {
|
|
781
842
|
initial: {},
|
|
782
|
-
animate: { transition: { staggerChildren: 0.
|
|
843
|
+
animate: { transition: { staggerChildren: 0.04, delayChildren: 0 } }
|
|
783
844
|
},
|
|
784
845
|
normal: {
|
|
785
846
|
initial: {},
|
|
786
|
-
animate: { transition: { staggerChildren: 0.
|
|
847
|
+
animate: { transition: { staggerChildren: 0.06, delayChildren: 0.04 } }
|
|
787
848
|
},
|
|
788
849
|
slow: {
|
|
789
850
|
initial: {},
|
|
790
|
-
animate: { transition: { staggerChildren: 0.
|
|
851
|
+
animate: { transition: { staggerChildren: 0.08, delayChildren: 0.05 } }
|
|
791
852
|
}
|
|
792
853
|
};
|
|
793
854
|
var viewportSettings = {
|
|
@@ -818,15 +879,63 @@ var PRESETS = {
|
|
|
818
879
|
/** Fade + rise */
|
|
819
880
|
fadeUp: motionVariants.fadeInUp,
|
|
820
881
|
/** Scale in */
|
|
821
|
-
scale: motionVariants.scaleIn
|
|
882
|
+
scale: motionVariants.scaleIn,
|
|
883
|
+
/**
|
|
884
|
+
* Keyed content swap — short, symmetric, blur-softened. Rises in, sinks out.
|
|
885
|
+
* Shorter and shallower than `emerge` on purpose: a swap replaces content the
|
|
886
|
+
* reader is already looking at, so it must resolve inside the reveal rail.
|
|
887
|
+
* Pair with `AnimateSwap`.
|
|
888
|
+
*/
|
|
889
|
+
swap: {
|
|
890
|
+
initial: { opacity: 0, transform: "translateY(10px)", filter: "blur(4px)" },
|
|
891
|
+
animate: { opacity: 1, transform: "translateY(0px)", filter: "blur(0px)" },
|
|
892
|
+
exit: { opacity: 0, transform: "translateY(-10px)", filter: "blur(4px)" },
|
|
893
|
+
transition: { duration: motionDurations.reveal / 1e3 }
|
|
894
|
+
},
|
|
895
|
+
/** Off-canvas panel entering from the right edge (drawer, sheet). */
|
|
896
|
+
slideFromRight: {
|
|
897
|
+
initial: { transform: "translateX(100%)" },
|
|
898
|
+
animate: { transform: "translateX(0%)" },
|
|
899
|
+
exit: { transform: "translateX(100%)" },
|
|
900
|
+
transition: brandSpring.default
|
|
901
|
+
},
|
|
902
|
+
/** Off-canvas panel entering from the left edge. */
|
|
903
|
+
slideFromLeft: {
|
|
904
|
+
initial: { transform: "translateX(-100%)" },
|
|
905
|
+
animate: { transform: "translateX(0%)" },
|
|
906
|
+
exit: { transform: "translateX(-100%)" },
|
|
907
|
+
transition: brandSpring.default
|
|
908
|
+
},
|
|
909
|
+
/** Off-canvas panel entering from the top edge (banner, command bar). */
|
|
910
|
+
slideFromTop: {
|
|
911
|
+
initial: { transform: "translateY(-100%)" },
|
|
912
|
+
animate: { transform: "translateY(0%)" },
|
|
913
|
+
exit: { transform: "translateY(-100%)" },
|
|
914
|
+
transition: brandSpring.default
|
|
915
|
+
},
|
|
916
|
+
/** Off-canvas panel entering from the bottom edge (mobile action sheet). */
|
|
917
|
+
slideFromBottom: {
|
|
918
|
+
initial: { transform: "translateY(100%)" },
|
|
919
|
+
animate: { transform: "translateY(0%)" },
|
|
920
|
+
exit: { transform: "translateY(100%)" },
|
|
921
|
+
transition: brandSpring.default
|
|
922
|
+
}
|
|
822
923
|
};
|
|
823
924
|
function MotionDiv(props) {
|
|
824
925
|
return /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsx(m.div, { ...props }) });
|
|
825
926
|
}
|
|
826
927
|
function AnimateIn(props) {
|
|
827
|
-
const {
|
|
928
|
+
const {
|
|
929
|
+
children,
|
|
930
|
+
preset = "fade",
|
|
931
|
+
delay = 0,
|
|
932
|
+
duration,
|
|
933
|
+
inView = false,
|
|
934
|
+
className,
|
|
935
|
+
...rest
|
|
936
|
+
} = props;
|
|
828
937
|
const shouldReduce = useReducedMotion();
|
|
829
|
-
const base = PRESETS[preset] || PRESETS.
|
|
938
|
+
const base = PRESETS[preset] || PRESETS.fade;
|
|
830
939
|
const initial = shouldReduce ? { opacity: 0 } : base.initial;
|
|
831
940
|
const animate2 = shouldReduce ? { opacity: 1 } : base.animate;
|
|
832
941
|
const exit = shouldReduce ? { opacity: 0 } : "exit" in base ? base.exit : void 0;
|
|
@@ -839,6 +948,7 @@ function AnimateIn(props) {
|
|
|
839
948
|
return /* @__PURE__ */ jsx(
|
|
840
949
|
MotionDiv,
|
|
841
950
|
{
|
|
951
|
+
...rest,
|
|
842
952
|
className,
|
|
843
953
|
initial,
|
|
844
954
|
whileInView: animate2,
|
|
@@ -852,6 +962,7 @@ function AnimateIn(props) {
|
|
|
852
962
|
return /* @__PURE__ */ jsx(
|
|
853
963
|
MotionDiv,
|
|
854
964
|
{
|
|
965
|
+
...rest,
|
|
855
966
|
className,
|
|
856
967
|
initial,
|
|
857
968
|
animate: animate2,
|
|
@@ -861,6 +972,10 @@ function AnimateIn(props) {
|
|
|
861
972
|
}
|
|
862
973
|
);
|
|
863
974
|
}
|
|
975
|
+
function AnimateSwap(props) {
|
|
976
|
+
const { swapKey, ...animateInProps } = props;
|
|
977
|
+
return /* @__PURE__ */ jsx(LazyMotion, { features: domAnimation, children: /* @__PURE__ */ jsx(AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsx(AnimateIn, { ...animateInProps }, swapKey) }) });
|
|
978
|
+
}
|
|
864
979
|
function AnimateInGroup(props) {
|
|
865
980
|
const { children, stagger = "normal", inView = false, className } = props;
|
|
866
981
|
const shouldReduce = useReducedMotion();
|
|
@@ -963,9 +1078,18 @@ function getAvatarFallbackClass(size) {
|
|
|
963
1078
|
}
|
|
964
1079
|
function getAvatarStyle(size, style) {
|
|
965
1080
|
if (typeof size !== "number") return style;
|
|
966
|
-
|
|
1081
|
+
const numericVars = {
|
|
967
1082
|
"--avatar-size": `${size}px`,
|
|
968
|
-
"--avatar-font-size": `${Math.max(10, Math.round(size * 0.375))}px
|
|
1083
|
+
"--avatar-font-size": `${Math.max(10, Math.round(size * 0.375))}px`
|
|
1084
|
+
};
|
|
1085
|
+
if (typeof style === "function") {
|
|
1086
|
+
return (state) => ({
|
|
1087
|
+
...numericVars,
|
|
1088
|
+
...style(state)
|
|
1089
|
+
});
|
|
1090
|
+
}
|
|
1091
|
+
return {
|
|
1092
|
+
...numericVars,
|
|
969
1093
|
...style
|
|
970
1094
|
};
|
|
971
1095
|
}
|
|
@@ -1134,7 +1258,7 @@ function AvatarGroup({
|
|
|
1134
1258
|
] });
|
|
1135
1259
|
}
|
|
1136
1260
|
var badgeVariants = cva(
|
|
1137
|
-
"inline-flex justify-center items-center align-middle shrink-0 rounded-full font-sans font-medium whitespace-nowrap tabular-nums transition-colors focus-visible:outline-none
|
|
1261
|
+
"inline-flex justify-center items-center align-middle shrink-0 rounded-full font-sans font-medium whitespace-nowrap tabular-nums transition-colors focus-visible:outline-none border border-transparent",
|
|
1138
1262
|
{
|
|
1139
1263
|
variants: {
|
|
1140
1264
|
variant: {
|
|
@@ -1156,15 +1280,26 @@ var badgeVariants = cva(
|
|
|
1156
1280
|
purple: "bg-secondary text-secondary-foreground fill-current",
|
|
1157
1281
|
"purple-subtle": "bg-secondary/40 text-secondary-foreground fill-current border-transparent",
|
|
1158
1282
|
amber: "bg-warning text-warning-foreground fill-current",
|
|
1159
|
-
"amber-subtle":
|
|
1283
|
+
"amber-subtle": (
|
|
1284
|
+
// --warning is a FILL (2.13:1). As ink on its own tint it measured 1.91:1.
|
|
1285
|
+
// --warning-strong is the AA-safe amber foreground: 5.01:1 light / 6.20:1 dark.
|
|
1286
|
+
"bg-warning/10 text-[hsl(var(--warning-strong))] fill-current border-transparent"
|
|
1287
|
+
),
|
|
1160
1288
|
red: "bg-destructive text-destructive-foreground fill-current",
|
|
1161
|
-
"red-subtle":
|
|
1289
|
+
"red-subtle": (
|
|
1290
|
+
// --destructive is fill-only in dark (2.01:1 as ink on its own tint).
|
|
1291
|
+
// --destructive-strong: 4.58:1 light / 4.97:1 dark.
|
|
1292
|
+
"bg-destructive/10 text-[hsl(var(--destructive-strong))] fill-current border-transparent"
|
|
1293
|
+
),
|
|
1162
1294
|
pink: "bg-accent text-accent-foreground fill-current",
|
|
1163
1295
|
"pink-subtle": "bg-accent/40 text-accent-foreground fill-current border-transparent",
|
|
1164
1296
|
green: "bg-success text-success-foreground fill-current",
|
|
1165
|
-
"green-subtle":
|
|
1297
|
+
"green-subtle": (
|
|
1298
|
+
// --success-strong closes the 4.49:1 light gap: 4.99:1 light / 4.83:1 dark.
|
|
1299
|
+
"bg-success/10 text-[hsl(var(--success-strong))] fill-current border-transparent"
|
|
1300
|
+
),
|
|
1166
1301
|
teal: "bg-info text-info-foreground fill-current",
|
|
1167
|
-
"teal-subtle": "bg-info/
|
|
1302
|
+
"teal-subtle": "bg-info/10 text-info fill-current border-transparent",
|
|
1168
1303
|
inverted: "bg-foreground text-background fill-current",
|
|
1169
1304
|
// Special visual treatments (intentional product design, not brand hex)
|
|
1170
1305
|
trial: "bg-gradient-to-br from-trial-start to-trial-end text-primary-foreground fill-current",
|
|
@@ -1381,7 +1516,10 @@ function Spinner({ className }) {
|
|
|
1381
1516
|
}
|
|
1382
1517
|
);
|
|
1383
1518
|
}
|
|
1384
|
-
function getIconSizeClass(size) {
|
|
1519
|
+
function getIconSizeClass(size, iconSize2) {
|
|
1520
|
+
if (iconSize2 === "sm") return "[&>svg]:size-3.5";
|
|
1521
|
+
if (iconSize2 === "md") return "[&>svg]:size-3.5";
|
|
1522
|
+
if (iconSize2 === "lg") return "[&>svg]:size-4";
|
|
1385
1523
|
switch (size) {
|
|
1386
1524
|
case "tiny":
|
|
1387
1525
|
return "[&>svg]:size-3";
|
|
@@ -1396,7 +1534,10 @@ function getIconSizeClass(size) {
|
|
|
1396
1534
|
return "[&>svg]:size-4";
|
|
1397
1535
|
}
|
|
1398
1536
|
}
|
|
1399
|
-
function getSpinnerSizeClass(size) {
|
|
1537
|
+
function getSpinnerSizeClass(size, iconSize2) {
|
|
1538
|
+
if (iconSize2 === "sm") return "size-3.5";
|
|
1539
|
+
if (iconSize2 === "md") return "size-3.5";
|
|
1540
|
+
if (iconSize2 === "lg") return "size-4";
|
|
1400
1541
|
switch (size) {
|
|
1401
1542
|
case "tiny":
|
|
1402
1543
|
return "size-3";
|
|
@@ -1421,10 +1562,10 @@ function resolveShadowClass(shadow) {
|
|
|
1421
1562
|
const level = shadow === true ? "md" : shadow;
|
|
1422
1563
|
return SHADOW_CLASSES[level];
|
|
1423
1564
|
}
|
|
1424
|
-
function ButtonContent({ loading, prefix, suffix, size, children }) {
|
|
1425
|
-
const iconSizeClass = getIconSizeClass(size);
|
|
1565
|
+
function ButtonContent({ loading, prefix, suffix, size, iconSize: iconSize2, children }) {
|
|
1566
|
+
const iconSizeClass = getIconSizeClass(size, iconSize2);
|
|
1426
1567
|
return /* @__PURE__ */ jsxs(Fragment, { children: [
|
|
1427
|
-
loading && /* @__PURE__ */ jsx(Spinner, { className: getSpinnerSizeClass(size) }),
|
|
1568
|
+
loading && /* @__PURE__ */ jsx(Spinner, { className: getSpinnerSizeClass(size, iconSize2) }),
|
|
1428
1569
|
prefix != null && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: cn("shrink-0", iconSizeClass), children: prefix }),
|
|
1429
1570
|
children,
|
|
1430
1571
|
suffix != null && /* @__PURE__ */ jsx("span", { "aria-hidden": "true", className: cn("shrink-0", iconSizeClass), children: suffix })
|
|
@@ -1435,6 +1576,7 @@ var Button = ({
|
|
|
1435
1576
|
variant,
|
|
1436
1577
|
size,
|
|
1437
1578
|
shape,
|
|
1579
|
+
iconSize: iconSize2,
|
|
1438
1580
|
asChild = false,
|
|
1439
1581
|
loading = false,
|
|
1440
1582
|
disabled,
|
|
@@ -1452,11 +1594,21 @@ var Button = ({
|
|
|
1452
1594
|
Comp,
|
|
1453
1595
|
{
|
|
1454
1596
|
ref,
|
|
1455
|
-
className: cn(buttonVariants({ variant, size, shape }), shadowClass, className),
|
|
1597
|
+
className: cn(buttonVariants({ variant, size, shape, iconSize: iconSize2 }), shadowClass, className),
|
|
1456
1598
|
disabled: isDisabled,
|
|
1457
1599
|
"aria-busy": loading || void 0,
|
|
1458
1600
|
...props,
|
|
1459
|
-
children: asChild ? children : /* @__PURE__ */ jsx(
|
|
1601
|
+
children: asChild ? children : /* @__PURE__ */ jsx(
|
|
1602
|
+
ButtonContent,
|
|
1603
|
+
{
|
|
1604
|
+
loading,
|
|
1605
|
+
prefix,
|
|
1606
|
+
suffix,
|
|
1607
|
+
size,
|
|
1608
|
+
iconSize: iconSize2,
|
|
1609
|
+
children
|
|
1610
|
+
}
|
|
1611
|
+
)
|
|
1460
1612
|
}
|
|
1461
1613
|
);
|
|
1462
1614
|
};
|
|
@@ -1466,6 +1618,7 @@ var ButtonLink = ({
|
|
|
1466
1618
|
variant,
|
|
1467
1619
|
size,
|
|
1468
1620
|
shape,
|
|
1621
|
+
iconSize: iconSize2,
|
|
1469
1622
|
prefix,
|
|
1470
1623
|
suffix,
|
|
1471
1624
|
shadow,
|
|
@@ -1485,14 +1638,24 @@ var ButtonLink = ({
|
|
|
1485
1638
|
{
|
|
1486
1639
|
ref,
|
|
1487
1640
|
className: cn(
|
|
1488
|
-
buttonVariants({ variant, size, shape }),
|
|
1641
|
+
buttonVariants({ variant, size, shape, iconSize: iconSize2 }),
|
|
1489
1642
|
shadowClass,
|
|
1490
1643
|
loading && "pointer-events-none opacity-50",
|
|
1491
1644
|
className
|
|
1492
1645
|
),
|
|
1493
1646
|
...loadingProps,
|
|
1494
1647
|
...props,
|
|
1495
|
-
children: /* @__PURE__ */ jsx(
|
|
1648
|
+
children: /* @__PURE__ */ jsx(
|
|
1649
|
+
ButtonContent,
|
|
1650
|
+
{
|
|
1651
|
+
loading,
|
|
1652
|
+
prefix,
|
|
1653
|
+
suffix,
|
|
1654
|
+
size,
|
|
1655
|
+
iconSize: iconSize2,
|
|
1656
|
+
children
|
|
1657
|
+
}
|
|
1658
|
+
)
|
|
1496
1659
|
}
|
|
1497
1660
|
);
|
|
1498
1661
|
};
|
|
@@ -1559,8 +1722,68 @@ var CardFooter = ({
|
|
|
1559
1722
|
...props
|
|
1560
1723
|
}) => /* @__PURE__ */ jsx("div", { ref, className: cn("flex items-center p-6 pt-0", className), ...props });
|
|
1561
1724
|
CardFooter.displayName = "CardFooter";
|
|
1725
|
+
var DEFAULT_STROKE_WIDTH = 1.6;
|
|
1726
|
+
function CheckGlyph({
|
|
1727
|
+
size = 16,
|
|
1728
|
+
width,
|
|
1729
|
+
height,
|
|
1730
|
+
strokeWidth = DEFAULT_STROKE_WIDTH,
|
|
1731
|
+
...props
|
|
1732
|
+
}) {
|
|
1733
|
+
return /* @__PURE__ */ jsx(
|
|
1734
|
+
"svg",
|
|
1735
|
+
{
|
|
1736
|
+
"aria-hidden": "true",
|
|
1737
|
+
className: "shrink-0",
|
|
1738
|
+
viewBox: "0 0 16 16",
|
|
1739
|
+
width: width ?? size,
|
|
1740
|
+
height: height ?? size,
|
|
1741
|
+
...props,
|
|
1742
|
+
children: /* @__PURE__ */ jsx(
|
|
1743
|
+
"path",
|
|
1744
|
+
{
|
|
1745
|
+
d: "M11.2 5.6L6.8 10L4.8 8",
|
|
1746
|
+
strokeLinecap: "round",
|
|
1747
|
+
strokeLinejoin: "round",
|
|
1748
|
+
strokeWidth
|
|
1749
|
+
}
|
|
1750
|
+
)
|
|
1751
|
+
}
|
|
1752
|
+
);
|
|
1753
|
+
}
|
|
1754
|
+
function IndeterminateGlyph({
|
|
1755
|
+
size = 16,
|
|
1756
|
+
width,
|
|
1757
|
+
height,
|
|
1758
|
+
strokeWidth = DEFAULT_STROKE_WIDTH,
|
|
1759
|
+
...props
|
|
1760
|
+
}) {
|
|
1761
|
+
return /* @__PURE__ */ jsx(
|
|
1762
|
+
"svg",
|
|
1763
|
+
{
|
|
1764
|
+
"aria-hidden": "true",
|
|
1765
|
+
className: "shrink-0",
|
|
1766
|
+
viewBox: "0 0 16 16",
|
|
1767
|
+
width: width ?? size,
|
|
1768
|
+
height: height ?? size,
|
|
1769
|
+
...props,
|
|
1770
|
+
children: /* @__PURE__ */ jsx(
|
|
1771
|
+
"line",
|
|
1772
|
+
{
|
|
1773
|
+
x1: "4",
|
|
1774
|
+
x2: "12",
|
|
1775
|
+
y1: "8",
|
|
1776
|
+
y2: "8",
|
|
1777
|
+
strokeLinecap: "round",
|
|
1778
|
+
strokeLinejoin: "round",
|
|
1779
|
+
strokeWidth
|
|
1780
|
+
}
|
|
1781
|
+
)
|
|
1782
|
+
}
|
|
1783
|
+
);
|
|
1784
|
+
}
|
|
1562
1785
|
var getInputClasses = (checked, disabled, indeterminate) => {
|
|
1563
|
-
let className = "relative border w-4 h-4 duration-
|
|
1786
|
+
let className = "relative border w-4 h-4 duration-micro rounded inline-flex items-center justify-center";
|
|
1564
1787
|
if (disabled) {
|
|
1565
1788
|
if (!checked || indeterminate) {
|
|
1566
1789
|
className += " bg-geist-gray-100 border-geist-gray-500";
|
|
@@ -1623,26 +1846,7 @@ var Checkbox = ({
|
|
|
1623
1846
|
className: "sr-only"
|
|
1624
1847
|
}
|
|
1625
1848
|
),
|
|
1626
|
-
/* @__PURE__ */ jsx("span", { className: getInputClasses(checked, disabled, indeterminate), children: /* @__PURE__ */ jsx(
|
|
1627
|
-
"line",
|
|
1628
|
-
{
|
|
1629
|
-
strokeLinecap: "round",
|
|
1630
|
-
strokeLinejoin: "round",
|
|
1631
|
-
strokeWidth: "2",
|
|
1632
|
-
x1: "5",
|
|
1633
|
-
x2: "15",
|
|
1634
|
-
y1: "10",
|
|
1635
|
-
y2: "10"
|
|
1636
|
-
}
|
|
1637
|
-
) : /* @__PURE__ */ jsx(
|
|
1638
|
-
"path",
|
|
1639
|
-
{
|
|
1640
|
-
d: "M14 7L8.5 12.5L6 10",
|
|
1641
|
-
strokeLinecap: "round",
|
|
1642
|
-
strokeLinejoin: "round",
|
|
1643
|
-
strokeWidth: "2"
|
|
1644
|
-
}
|
|
1645
|
-
) }) }),
|
|
1849
|
+
/* @__PURE__ */ jsx("span", { className: getInputClasses(checked, disabled, indeterminate), children: indeterminate ? /* @__PURE__ */ jsx(IndeterminateGlyph, {}) : /* @__PURE__ */ jsx(CheckGlyph, {}) }),
|
|
1646
1850
|
children && /* @__PURE__ */ jsx("span", { className: "ml-2", children })
|
|
1647
1851
|
]
|
|
1648
1852
|
}
|
|
@@ -1878,6 +2082,11 @@ var overlayPrimitiveClassNames = {
|
|
|
1878
2082
|
"data-[highlighted]:bg-accent data-[popup-open]:bg-accent"
|
|
1879
2083
|
].join(" "),
|
|
1880
2084
|
menuCheckboxItem: [menuItemBaseClassName, menuHighlightedClassName, "pl-8"].join(" "),
|
|
2085
|
+
menuFilterInput: [
|
|
2086
|
+
"h-7 w-full rounded-[var(--radius-sm)] bg-muted px-2 text-sm text-foreground",
|
|
2087
|
+
"placeholder:text-muted-foreground outline-none"
|
|
2088
|
+
].join(" "),
|
|
2089
|
+
menuEmpty: "px-2 py-3 text-center text-sm text-muted-foreground",
|
|
1881
2090
|
menuIndicator: "pointer-events-none absolute left-2 flex size-3.5 items-center justify-center text-muted-foreground",
|
|
1882
2091
|
menubarRoot: "flex h-10 items-center space-x-1 rounded-[var(--radius-md)] border border-border bg-background p-1 outline-none",
|
|
1883
2092
|
menubarTrigger: [
|
|
@@ -1989,7 +2198,7 @@ var DropdownMenuSubContent = ({
|
|
|
1989
2198
|
style,
|
|
1990
2199
|
ref,
|
|
1991
2200
|
...props
|
|
1992
|
-
}) => /* @__PURE__ */ jsx(Menu$1.Portal, { children: /* @__PURE__ */ jsx(Menu$1.Positioner, { children: /* @__PURE__ */ jsx(
|
|
2201
|
+
}) => /* @__PURE__ */ jsx(Menu$1.Portal, { children: /* @__PURE__ */ jsx(Menu$1.Positioner, { style: { zIndex: overlayZIndex.popover }, children: /* @__PURE__ */ jsx(
|
|
1993
2202
|
Menu$1.Popup,
|
|
1994
2203
|
{
|
|
1995
2204
|
ref,
|
|
@@ -2019,6 +2228,7 @@ var DropdownMenuContent = ({
|
|
|
2019
2228
|
align,
|
|
2020
2229
|
alignOffset,
|
|
2021
2230
|
side,
|
|
2231
|
+
style: { zIndex: overlayZIndex.popover },
|
|
2022
2232
|
children: /* @__PURE__ */ jsx(
|
|
2023
2233
|
Menu$1.Popup,
|
|
2024
2234
|
{
|
|
@@ -2087,6 +2297,40 @@ var DropdownMenuRadioItem = ({
|
|
|
2087
2297
|
}
|
|
2088
2298
|
);
|
|
2089
2299
|
DropdownMenuRadioItem.displayName = "DropdownMenuRadioItem";
|
|
2300
|
+
var MENU_RESERVED_KEYS = /* @__PURE__ */ new Set(["ArrowUp", "ArrowDown", "Enter", "Tab"]);
|
|
2301
|
+
var DropdownMenuFilterInput = ({
|
|
2302
|
+
className,
|
|
2303
|
+
onKeyDown,
|
|
2304
|
+
ref,
|
|
2305
|
+
...props
|
|
2306
|
+
}) => /* @__PURE__ */ jsx(
|
|
2307
|
+
"input",
|
|
2308
|
+
{
|
|
2309
|
+
ref,
|
|
2310
|
+
type: "search",
|
|
2311
|
+
className: cn(overlayPrimitiveClassNames.menuFilterInput, className),
|
|
2312
|
+
onKeyDown: (event) => {
|
|
2313
|
+
onKeyDown?.(event);
|
|
2314
|
+
if (!MENU_RESERVED_KEYS.has(event.key)) {
|
|
2315
|
+
event.stopPropagation();
|
|
2316
|
+
}
|
|
2317
|
+
},
|
|
2318
|
+
...props
|
|
2319
|
+
}
|
|
2320
|
+
);
|
|
2321
|
+
DropdownMenuFilterInput.displayName = "DropdownMenuFilterInput";
|
|
2322
|
+
var DropdownMenuEmpty = ({
|
|
2323
|
+
className,
|
|
2324
|
+
...props
|
|
2325
|
+
}) => /* @__PURE__ */ jsx(
|
|
2326
|
+
"div",
|
|
2327
|
+
{
|
|
2328
|
+
role: "presentation",
|
|
2329
|
+
className: cn(overlayPrimitiveClassNames.menuEmpty, className),
|
|
2330
|
+
...props
|
|
2331
|
+
}
|
|
2332
|
+
);
|
|
2333
|
+
DropdownMenuEmpty.displayName = "DropdownMenuEmpty";
|
|
2090
2334
|
var DropdownMenuLabel = ({
|
|
2091
2335
|
className,
|
|
2092
2336
|
inset,
|
|
@@ -3242,11 +3486,14 @@ var comboboxSizeTokens = {
|
|
|
3242
3486
|
var comboboxTriggerVariants = cva(
|
|
3243
3487
|
[
|
|
3244
3488
|
"flex w-full items-center justify-between gap-2 whitespace-nowrap",
|
|
3245
|
-
|
|
3489
|
+
// --input-radius, not the generic md step: this trigger is a form control and
|
|
3490
|
+
// should round like Input and Select do. Reading the scale step meant it
|
|
3491
|
+
// tracked whatever a language did to medium surfaces instead of what it
|
|
3492
|
+
// decided for its fields.
|
|
3493
|
+
"h-[var(--combobox-trigger-height)] rounded-[var(--input-radius,var(--radius-md))] border border-input bg-background px-[var(--combobox-trigger-padding-x)]",
|
|
3246
3494
|
"text-[length:var(--combobox-font-size)] ring-offset-background",
|
|
3247
3495
|
"transition-colors duration-micro ease-out",
|
|
3248
3496
|
"placeholder:text-muted-foreground",
|
|
3249
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2",
|
|
3250
3497
|
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
3251
3498
|
"[&>span]:line-clamp-1 [&>span]:text-left"
|
|
3252
3499
|
].join(" "),
|
|
@@ -3258,7 +3505,7 @@ var comboboxTriggerVariants = cva(
|
|
|
3258
3505
|
large: ""
|
|
3259
3506
|
},
|
|
3260
3507
|
error: {
|
|
3261
|
-
true: "border-destructive
|
|
3508
|
+
true: "border-destructive",
|
|
3262
3509
|
false: ""
|
|
3263
3510
|
}
|
|
3264
3511
|
},
|
|
@@ -3763,19 +4010,54 @@ var ContextMenu = Object.assign(ContextMenuRoot, {
|
|
|
3763
4010
|
SubContent: ContextMenuSubContent
|
|
3764
4011
|
});
|
|
3765
4012
|
var DEFAULT_TOOLTIP_DELAY_MS = 150;
|
|
4013
|
+
var SKIP_DELAY_WINDOW_MS = 400;
|
|
4014
|
+
var lastTooltipOpenAt = 0;
|
|
4015
|
+
var skipDelayListeners = /* @__PURE__ */ new Set();
|
|
4016
|
+
function markTooltipOpened() {
|
|
4017
|
+
lastTooltipOpenAt = Date.now();
|
|
4018
|
+
for (const listener of skipDelayListeners) listener();
|
|
4019
|
+
}
|
|
4020
|
+
function shouldSkipDelay() {
|
|
4021
|
+
return Date.now() - lastTooltipOpenAt < SKIP_DELAY_WINDOW_MS;
|
|
4022
|
+
}
|
|
4023
|
+
function useSkipDelay() {
|
|
4024
|
+
const [, tick] = React24.useReducer((count) => count + 1, 0);
|
|
4025
|
+
React24.useEffect(() => {
|
|
4026
|
+
skipDelayListeners.add(tick);
|
|
4027
|
+
return () => {
|
|
4028
|
+
skipDelayListeners.delete(tick);
|
|
4029
|
+
};
|
|
4030
|
+
}, []);
|
|
4031
|
+
return shouldSkipDelay();
|
|
4032
|
+
}
|
|
4033
|
+
var TooltipInstantContext = React24.createContext(false);
|
|
3766
4034
|
var TooltipProvider = ({
|
|
3767
4035
|
children,
|
|
3768
4036
|
delayDuration = DEFAULT_TOOLTIP_DELAY_MS
|
|
3769
4037
|
}) => {
|
|
3770
|
-
|
|
4038
|
+
const skipDelay = useSkipDelay();
|
|
4039
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Provider, { delay: skipDelay ? 0 : delayDuration, children });
|
|
3771
4040
|
};
|
|
3772
4041
|
var Tooltip = ({
|
|
3773
4042
|
delayDuration,
|
|
3774
4043
|
children,
|
|
4044
|
+
onOpenChange,
|
|
3775
4045
|
...props
|
|
3776
4046
|
}) => {
|
|
3777
|
-
const
|
|
3778
|
-
|
|
4047
|
+
const skipDelay = useSkipDelay();
|
|
4048
|
+
const instant = delayDuration == null && skipDelay;
|
|
4049
|
+
const delay = delayDuration ?? (instant ? 0 : DEFAULT_TOOLTIP_DELAY_MS);
|
|
4050
|
+
return /* @__PURE__ */ jsx(TooltipInstantContext.Provider, { value: instant, children: /* @__PURE__ */ jsx(Tooltip$1.Provider, { delay, children: /* @__PURE__ */ jsx(
|
|
4051
|
+
Tooltip$1.Root,
|
|
4052
|
+
{
|
|
4053
|
+
...props,
|
|
4054
|
+
onOpenChange: (open, eventDetails) => {
|
|
4055
|
+
if (open) markTooltipOpened();
|
|
4056
|
+
onOpenChange?.(open, eventDetails);
|
|
4057
|
+
},
|
|
4058
|
+
children
|
|
4059
|
+
}
|
|
4060
|
+
) }) });
|
|
3779
4061
|
};
|
|
3780
4062
|
var TooltipTrigger = ({
|
|
3781
4063
|
asChild,
|
|
@@ -3805,40 +4087,51 @@ var TooltipContent = ({
|
|
|
3805
4087
|
alignOffset = 0,
|
|
3806
4088
|
ref,
|
|
3807
4089
|
...props
|
|
3808
|
-
}) =>
|
|
3809
|
-
|
|
3810
|
-
{
|
|
3811
|
-
|
|
3812
|
-
|
|
3813
|
-
|
|
3814
|
-
|
|
3815
|
-
|
|
3816
|
-
|
|
3817
|
-
|
|
3818
|
-
|
|
3819
|
-
|
|
3820
|
-
|
|
3821
|
-
|
|
3822
|
-
|
|
3823
|
-
|
|
3824
|
-
|
|
3825
|
-
|
|
3826
|
-
|
|
4090
|
+
}) => {
|
|
4091
|
+
const instant = React24.use(TooltipInstantContext);
|
|
4092
|
+
return /* @__PURE__ */ jsx(Tooltip$1.Portal, { children: /* @__PURE__ */ jsx(
|
|
4093
|
+
Tooltip$1.Positioner,
|
|
4094
|
+
{
|
|
4095
|
+
side,
|
|
4096
|
+
align,
|
|
4097
|
+
sideOffset,
|
|
4098
|
+
alignOffset,
|
|
4099
|
+
style: { zIndex: overlayZIndex.tooltip },
|
|
4100
|
+
children: /* @__PURE__ */ jsx(
|
|
4101
|
+
Tooltip$1.Popup,
|
|
4102
|
+
{
|
|
4103
|
+
ref,
|
|
4104
|
+
className: cn(overlayClassNames.tooltipSurface, className),
|
|
4105
|
+
"data-instant": instant || void 0,
|
|
4106
|
+
style: { zIndex: overlayZIndex.tooltip, ...style },
|
|
4107
|
+
...props
|
|
4108
|
+
}
|
|
4109
|
+
)
|
|
4110
|
+
}
|
|
4111
|
+
) });
|
|
4112
|
+
};
|
|
3827
4113
|
TooltipContent.displayName = "TooltipContent";
|
|
4114
|
+
var COPIED_TINT = "text-[hsl(var(--success-strong))]";
|
|
4115
|
+
function CopiedAnnouncement({ copied, message }) {
|
|
4116
|
+
return /* @__PURE__ */ jsx("span", { "aria-live": "polite", className: "sr-only", children: copied ? message : "" });
|
|
4117
|
+
}
|
|
3828
4118
|
function CopyButton({
|
|
3829
4119
|
value,
|
|
3830
4120
|
label,
|
|
4121
|
+
copiedLabel = "Copied",
|
|
3831
4122
|
successMessage = "Copied to clipboard",
|
|
3832
4123
|
tooltipText = "Copy",
|
|
3833
4124
|
iconType = "copy",
|
|
4125
|
+
iconPosition = "leading",
|
|
3834
4126
|
showToast = true,
|
|
4127
|
+
timeout = 2e3,
|
|
3835
4128
|
onCopied,
|
|
3836
4129
|
variant = "ghost",
|
|
3837
4130
|
size = "icon",
|
|
3838
4131
|
className,
|
|
3839
4132
|
...props
|
|
3840
4133
|
}) {
|
|
3841
|
-
const
|
|
4134
|
+
const { copied, copy } = useCopyToClipboard({ successMessage, showToast, timeout });
|
|
3842
4135
|
const IconComponent = {
|
|
3843
4136
|
copy: Copy,
|
|
3844
4137
|
link: Link,
|
|
@@ -3846,38 +4139,30 @@ function CopyButton({
|
|
|
3846
4139
|
hash: Hash
|
|
3847
4140
|
}[iconType];
|
|
3848
4141
|
const handleCopy = async () => {
|
|
3849
|
-
|
|
3850
|
-
await navigator.clipboard.writeText(value);
|
|
3851
|
-
setCopied(true);
|
|
3852
|
-
if (showToast) {
|
|
3853
|
-
toast.success(successMessage);
|
|
3854
|
-
}
|
|
3855
|
-
onCopied?.(value);
|
|
3856
|
-
setTimeout(() => setCopied(false), 2e3);
|
|
3857
|
-
} catch (error) {
|
|
3858
|
-
console.error("Failed to copy:", error);
|
|
3859
|
-
toast.error("Failed to copy to clipboard");
|
|
3860
|
-
}
|
|
4142
|
+
if (await copy(value)) onCopied?.(value);
|
|
3861
4143
|
};
|
|
4144
|
+
const icon = copied ? /* @__PURE__ */ jsx(Check, { className: COPIED_TINT }) : /* @__PURE__ */ jsx(IconComponent, {});
|
|
4145
|
+
const iconSlot = iconPosition === "trailing" ? { suffix: icon } : { prefix: icon };
|
|
3862
4146
|
const button = /* @__PURE__ */ jsxs(
|
|
3863
4147
|
Button,
|
|
3864
4148
|
{
|
|
3865
4149
|
variant,
|
|
3866
4150
|
size,
|
|
3867
4151
|
onClick: handleCopy,
|
|
3868
|
-
className: cn("transition-colors",
|
|
4152
|
+
className: cn("transition-colors", className),
|
|
4153
|
+
...iconSlot,
|
|
3869
4154
|
...props,
|
|
3870
4155
|
children: [
|
|
3871
|
-
|
|
3872
|
-
label && /* @__PURE__ */ jsx("span", { className: "
|
|
3873
|
-
/* @__PURE__ */ jsx(
|
|
4156
|
+
label && /* @__PURE__ */ jsx("span", { className: "min-w-0 truncate", children: copied && copiedLabel ? copiedLabel : label }),
|
|
4157
|
+
!label && /* @__PURE__ */ jsx("span", { className: "sr-only", children: tooltipText }),
|
|
4158
|
+
/* @__PURE__ */ jsx(CopiedAnnouncement, { copied, message: successMessage })
|
|
3874
4159
|
]
|
|
3875
4160
|
}
|
|
3876
4161
|
);
|
|
3877
4162
|
if (!label) {
|
|
3878
4163
|
return /* @__PURE__ */ jsxs(Tooltip, { children: [
|
|
3879
4164
|
/* @__PURE__ */ jsx(TooltipTrigger, { asChild: true, children: button }),
|
|
3880
|
-
/* @__PURE__ */ jsx(TooltipContent, { children: /* @__PURE__ */ jsx("p", { children: copied ? "Copied
|
|
4165
|
+
/* @__PURE__ */ jsx(TooltipContent, { children: /* @__PURE__ */ jsx("p", { children: copied ? "Copied" : tooltipText }) })
|
|
3881
4166
|
] });
|
|
3882
4167
|
}
|
|
3883
4168
|
return button;
|
|
@@ -3933,6 +4218,36 @@ function CopyCodeButton({
|
|
|
3933
4218
|
}
|
|
3934
4219
|
);
|
|
3935
4220
|
}
|
|
4221
|
+
function CopyMenuItem({
|
|
4222
|
+
value,
|
|
4223
|
+
children,
|
|
4224
|
+
successMessage = "Copied to clipboard",
|
|
4225
|
+
showToast = false,
|
|
4226
|
+
timeout = 2e3,
|
|
4227
|
+
closeOnCopy = false,
|
|
4228
|
+
onCopied,
|
|
4229
|
+
className,
|
|
4230
|
+
...props
|
|
4231
|
+
}) {
|
|
4232
|
+
const { copied, copy } = useCopyToClipboard({ successMessage, showToast, timeout });
|
|
4233
|
+
const handleCopy = async () => {
|
|
4234
|
+
if (await copy(value)) onCopied?.(value);
|
|
4235
|
+
};
|
|
4236
|
+
return /* @__PURE__ */ jsxs(
|
|
4237
|
+
DropdownMenuItem,
|
|
4238
|
+
{
|
|
4239
|
+
closeOnClick: closeOnCopy,
|
|
4240
|
+
onClick: handleCopy,
|
|
4241
|
+
className: cn("cursor-pointer", className),
|
|
4242
|
+
...props,
|
|
4243
|
+
children: [
|
|
4244
|
+
/* @__PURE__ */ jsx("span", { className: "flex-1", children }),
|
|
4245
|
+
copied ? /* @__PURE__ */ jsx(Check, { "aria-hidden": "true", className: cn("size-4", COPIED_TINT) }) : /* @__PURE__ */ jsx(Copy, { "aria-hidden": "true", className: "size-4 text-muted-foreground" }),
|
|
4246
|
+
/* @__PURE__ */ jsx(CopiedAnnouncement, { copied, message: successMessage })
|
|
4247
|
+
]
|
|
4248
|
+
}
|
|
4249
|
+
);
|
|
4250
|
+
}
|
|
3936
4251
|
function CopyableField({ value, label, truncate = true, className }) {
|
|
3937
4252
|
return /* @__PURE__ */ jsxs("div", { className: cn("flex items-center gap-2", className), children: [
|
|
3938
4253
|
label && /* @__PURE__ */ jsxs("span", { className: "text-sm text-muted-foreground shrink-0", children: [
|
|
@@ -4142,7 +4457,7 @@ var ContextCardTrigger = ({
|
|
|
4142
4457
|
"transition-[opacity,transform,display] duration-[var(--context-card-duration)] ease-[var(--context-card-easing)]",
|
|
4143
4458
|
"data-starting-style:opacity-0 data-ending-style:opacity-0 data-starting-style:scale-[0.98] data-ending-style:scale-[0.98]",
|
|
4144
4459
|
"motion-reduce:transition-none motion-reduce:data-starting-style:scale-100 motion-reduce:data-ending-style:scale-100",
|
|
4145
|
-
"
|
|
4460
|
+
"",
|
|
4146
4461
|
"data-[side=bottom]:origin-top data-[side=left]:origin-right data-[side=right]:origin-left data-[side=top]:origin-bottom",
|
|
4147
4462
|
className
|
|
4148
4463
|
),
|
|
@@ -5146,11 +5461,11 @@ var formControlInvalidClassNames = {
|
|
|
5146
5461
|
};
|
|
5147
5462
|
var inputVariants = cva(
|
|
5148
5463
|
[
|
|
5149
|
-
"flex h-[var(--input-height)] w-full rounded-[var(--input-radius)]
|
|
5150
|
-
"px-[var(--input-padding-x)] text-[length:var(--input-font-size)] text-foreground
|
|
5464
|
+
"flex h-[var(--input-height)] w-full rounded-[var(--input-radius)]",
|
|
5465
|
+
"px-[var(--input-padding-x)] text-[length:var(--input-font-size)] text-foreground",
|
|
5151
5466
|
"transition-[background-color,border-color,box-shadow,color] duration-micro ease-out",
|
|
5152
5467
|
"placeholder:text-muted-foreground",
|
|
5153
|
-
|
|
5468
|
+
"outline-none",
|
|
5154
5469
|
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
5155
5470
|
"read-only:bg-muted/70 read-only:cursor-default",
|
|
5156
5471
|
"file:h-full file:border-0 file:border-e file:border-solid file:border-input file:bg-transparent",
|
|
@@ -5173,11 +5488,31 @@ var inputVariants = cva(
|
|
|
5173
5488
|
prefix: "pl-[var(--input-padding-left)]",
|
|
5174
5489
|
suffix: "pr-[var(--input-padding-right)]",
|
|
5175
5490
|
both: "pl-[var(--input-padding-left)] pr-[var(--input-padding-right)]"
|
|
5491
|
+
},
|
|
5492
|
+
/**
|
|
5493
|
+
* `bare` drops the field's own stroke, fill and lift so it can sit inside
|
|
5494
|
+
* a container that already provides them — a footer subscribe group, a
|
|
5495
|
+
* search well, a segmented composer. Those surfaces were each being built
|
|
5496
|
+
* by hand with a raw <input>, because overriding the bordered look from
|
|
5497
|
+
* outside is not reliable: `border-transparent` passed via className and
|
|
5498
|
+
* `border-input` from the base are both border-color utilities, so which
|
|
5499
|
+
* one wins depends on their order in the generated stylesheet rather than
|
|
5500
|
+
* on the order they were written. That is why the stroke, fill and shadow
|
|
5501
|
+
* live in this variant instead of the base — the two tones now never emit
|
|
5502
|
+
* a competing declaration.
|
|
5503
|
+
*
|
|
5504
|
+
* A bare field draws no focus ring of its own. The container owns it, so
|
|
5505
|
+
* the ring surrounds the whole group rather than a box inside it.
|
|
5506
|
+
*/
|
|
5507
|
+
tone: {
|
|
5508
|
+
bordered: `border border-input bg-background shadow-xs ${formControlFocusClassNames.input}`,
|
|
5509
|
+
bare: "border-0 bg-transparent shadow-none"
|
|
5176
5510
|
}
|
|
5177
5511
|
},
|
|
5178
5512
|
defaultVariants: {
|
|
5179
5513
|
size: "md",
|
|
5180
|
-
affix: "none"
|
|
5514
|
+
affix: "none",
|
|
5515
|
+
tone: "bordered"
|
|
5181
5516
|
}
|
|
5182
5517
|
}
|
|
5183
5518
|
);
|
|
@@ -5199,8 +5534,8 @@ var inputControlButtonVariants = cva(
|
|
|
5199
5534
|
[
|
|
5200
5535
|
"absolute right-[var(--input-control-inset)] top-1/2 flex size-[var(--input-control-size)] -translate-y-1/2 items-center justify-center",
|
|
5201
5536
|
"rounded-[var(--radius-sm)] text-muted-foreground transition-colors duration-micro ease-out",
|
|
5202
|
-
"hover:bg-accent hover:text-foreground",
|
|
5203
|
-
"focus-visible:outline-none
|
|
5537
|
+
"hover:bg-accent hover:text-accent-foreground",
|
|
5538
|
+
"focus-visible:outline-none",
|
|
5204
5539
|
"disabled:pointer-events-none disabled:opacity-50",
|
|
5205
5540
|
"[&_svg]:size-[var(--input-control-icon-size)]"
|
|
5206
5541
|
].join(" ")
|
|
@@ -5239,7 +5574,7 @@ function getInputStyle(size, style) {
|
|
|
5239
5574
|
"--input-focus-ring-width": `${inputTokens.focusRingWidth}px`,
|
|
5240
5575
|
borderRadius: "var(--input-radius)",
|
|
5241
5576
|
outline: "none",
|
|
5242
|
-
...style
|
|
5577
|
+
...asPlainStyle(style)
|
|
5243
5578
|
};
|
|
5244
5579
|
}
|
|
5245
5580
|
function getAffixMode(prefix, hasRightAdornment) {
|
|
@@ -5265,6 +5600,7 @@ var Input = ({
|
|
|
5265
5600
|
className,
|
|
5266
5601
|
type = "text",
|
|
5267
5602
|
size = "md",
|
|
5603
|
+
tone = "bordered",
|
|
5268
5604
|
prefix,
|
|
5269
5605
|
suffix,
|
|
5270
5606
|
clearable,
|
|
@@ -5384,7 +5720,7 @@ var Input = ({
|
|
|
5384
5720
|
"aria-describedby": describedBy,
|
|
5385
5721
|
"aria-busy": loading || void 0,
|
|
5386
5722
|
className: cn(
|
|
5387
|
-
inputVariants({ size, affix }),
|
|
5723
|
+
inputVariants({ size, affix, tone }),
|
|
5388
5724
|
type === "file" && "p-0 pr-[var(--input-padding-x)] text-muted-foreground",
|
|
5389
5725
|
className
|
|
5390
5726
|
),
|
|
@@ -6577,7 +6913,7 @@ var MultiSelectTrigger = ({
|
|
|
6577
6913
|
"gap-[var(--multi-select-trigger-gap)] rounded-[var(--multi-select-trigger-radius)] border border-input bg-background",
|
|
6578
6914
|
"px-[var(--multi-select-trigger-padding-x)] text-left text-[length:var(--multi-select-trigger-font-size)] text-foreground shadow-xs",
|
|
6579
6915
|
"transition-[background-color,border-color,box-shadow,color] duration-[var(--multi-select-duration)] ease-[var(--multi-select-easing)]",
|
|
6580
|
-
"hover:bg-accent/60 focus-visible:border-ring focus-visible:outline-none
|
|
6916
|
+
"hover:bg-accent/60 focus-visible:border-ring focus-visible:outline-none",
|
|
6581
6917
|
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
6582
6918
|
className
|
|
6583
6919
|
),
|
|
@@ -6768,7 +7104,7 @@ var MultiSelectRow = ({
|
|
|
6768
7104
|
"peer size-[var(--multi-select-checkbox-size)] appearance-none rounded-[var(--radius-sm)] border border-input bg-background",
|
|
6769
7105
|
"transition-[background-color,border-color,box-shadow] duration-[var(--multi-select-duration)] ease-[var(--multi-select-easing)]",
|
|
6770
7106
|
"hover:border-ring checked:border-primary checked:bg-primary",
|
|
6771
|
-
"focus-visible:outline-none
|
|
7107
|
+
"focus-visible:outline-none"
|
|
6772
7108
|
)
|
|
6773
7109
|
}
|
|
6774
7110
|
),
|
|
@@ -6798,7 +7134,7 @@ var MultiSelectRow = ({
|
|
|
6798
7134
|
className: cn(
|
|
6799
7135
|
"min-w-[var(--multi-select-action-min-width)] shrink-0 rounded-[var(--radius-sm)] px-2 py-1 text-right text-[length:var(--multi-select-row-description-size)] font-medium text-muted-foreground",
|
|
6800
7136
|
"opacity-0 transition-[background-color,color,opacity] duration-[var(--multi-select-duration)] ease-[var(--multi-select-easing)]",
|
|
6801
|
-
"hover:bg-background hover:text-foreground focus-visible:bg-background focus-visible:text-foreground focus-visible:opacity-100 focus-visible:outline-none
|
|
7137
|
+
"hover:bg-background hover:text-foreground focus-visible:bg-background focus-visible:text-foreground focus-visible:opacity-100 focus-visible:outline-none",
|
|
6802
7138
|
"group-hover:opacity-100 group-focus-within:opacity-100"
|
|
6803
7139
|
),
|
|
6804
7140
|
children: action.label
|
|
@@ -7848,7 +8184,7 @@ function PaginationRail({
|
|
|
7848
8184
|
"group flex min-h-[var(--pagination-min-height)] min-w-0 items-center gap-[var(--pagination-gap)] rounded-[var(--pagination-radius)] border border-border bg-background",
|
|
7849
8185
|
"px-[var(--pagination-padding-x)] py-[var(--pagination-padding-y)] text-foreground shadow-xs",
|
|
7850
8186
|
"transition-[background-color,border-color,box-shadow,color,transform] duration-[var(--pagination-duration)] ease-[var(--pagination-easing)]",
|
|
7851
|
-
"hover:border-ring hover:bg-accent focus-visible:outline-none
|
|
8187
|
+
"hover:border-ring hover:bg-accent focus-visible:outline-none",
|
|
7852
8188
|
"motion-reduce:transition-none",
|
|
7853
8189
|
isPrevious ? "justify-start text-left" : "justify-end text-right"
|
|
7854
8190
|
),
|
|
@@ -8081,7 +8417,7 @@ var variantMap = {
|
|
|
8081
8417
|
cta: "text-foreground decoration-border hover:text-foreground hover:decoration-foreground"
|
|
8082
8418
|
}
|
|
8083
8419
|
};
|
|
8084
|
-
var ctaBase = "font-medium underline underline-offset-[5px] transition-colors duration-
|
|
8420
|
+
var ctaBase = "font-medium underline underline-offset-[5px] transition-colors duration-micro";
|
|
8085
8421
|
function ProjectBanner({
|
|
8086
8422
|
variant = "info",
|
|
8087
8423
|
label,
|
|
@@ -8139,9 +8475,9 @@ var radioControlClassName = cn(
|
|
|
8139
8475
|
"relative inline-flex shrink-0 items-center justify-center rounded-[var(--radius-full)] border-[length:var(--radio-border-width)] border-border bg-background text-foreground",
|
|
8140
8476
|
"size-[var(--radio-control-size)]",
|
|
8141
8477
|
"transition-[background-color,border-color,box-shadow] duration-[var(--radio-motion-duration)] ease-[var(--radio-motion-easing)]",
|
|
8142
|
-
"after:size-[var(--radio-dot-size)] after:scale-
|
|
8478
|
+
"after:size-[var(--radio-dot-size)] after:scale-95 after:rounded-[var(--radius-full)] after:bg-current after:opacity-0 after:transition-[opacity,transform] after:duration-[var(--radio-motion-duration)] after:ease-[var(--radio-motion-easing)] after:content-['']",
|
|
8143
8479
|
"peer-checked:border-[var(--neutral-12)] peer-checked:after:scale-100 peer-checked:after:opacity-100",
|
|
8144
|
-
"peer-focus-visible:outline-none
|
|
8480
|
+
"peer-focus-visible:outline-none",
|
|
8145
8481
|
"peer-disabled:border-[var(--neutral-5)] peer-disabled:bg-muted peer-disabled:text-[var(--neutral-8)]"
|
|
8146
8482
|
);
|
|
8147
8483
|
function useRadioGroupContext() {
|
|
@@ -8360,7 +8696,7 @@ var ResizableHandle = ({
|
|
|
8360
8696
|
Separator,
|
|
8361
8697
|
{
|
|
8362
8698
|
className: cn(
|
|
8363
|
-
"relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none
|
|
8699
|
+
"relative flex w-px items-center justify-center bg-border after:absolute after:inset-y-0 after:left-1/2 after:w-1 after:-translate-x-1/2 focus-visible:outline-none data-[panel-group-direction=vertical]:h-px data-[panel-group-direction=vertical]:w-full data-[panel-group-direction=vertical]:after:left-0 data-[panel-group-direction=vertical]:after:h-1 data-[panel-group-direction=vertical]:after:w-full data-[panel-group-direction=vertical]:after:-translate-y-1/2 data-[panel-group-direction=vertical]:after:translate-x-0 [&[data-panel-group-direction=vertical]>div]:rotate-90",
|
|
8364
8700
|
className
|
|
8365
8701
|
),
|
|
8366
8702
|
...props,
|
|
@@ -8505,7 +8841,7 @@ function ScrollerButton({
|
|
|
8505
8841
|
"absolute z-20 grid size-[var(--scroller-button-size)] place-items-center rounded-[var(--scroller-button-radius)]",
|
|
8506
8842
|
"border border-border bg-background text-muted-foreground shadow-[var(--scroller-button-shadow)]",
|
|
8507
8843
|
"transition-[background-color,border-color,color,opacity,transform] duration-[var(--scroller-duration)] ease-[var(--scroller-easing)]",
|
|
8508
|
-
"hover:border-ring hover:text-foreground focus-visible:outline-none
|
|
8844
|
+
"hover:border-ring hover:text-foreground focus-visible:outline-none",
|
|
8509
8845
|
"disabled:pointer-events-none disabled:opacity-0 motion-reduce:transition-none",
|
|
8510
8846
|
axis === "x" && direction === "previous" && "left-[var(--scroller-button-offset)] top-1/2 -translate-y-1/2",
|
|
8511
8847
|
axis === "x" && direction === "next" && "right-[var(--scroller-button-offset)] top-1/2 -translate-y-1/2",
|
|
@@ -8600,7 +8936,7 @@ function Scroller({
|
|
|
8600
8936
|
onScroll: updateEdgeState,
|
|
8601
8937
|
className: cn(
|
|
8602
8938
|
"h-[var(--scroller-height)] rounded-[var(--scroller-radius)] outline-none",
|
|
8603
|
-
"scroll-smooth overscroll-contain
|
|
8939
|
+
"scroll-smooth overscroll-contain motion-reduce:scroll-auto",
|
|
8604
8940
|
resolveScrollClasses(overflow)
|
|
8605
8941
|
),
|
|
8606
8942
|
children: /* @__PURE__ */ jsx(
|
|
@@ -8651,7 +8987,7 @@ function getSelectTriggerStyle(size, style) {
|
|
|
8651
8987
|
"--select-focus-ring-width": `${selectTokens.focusRingWidth}px`,
|
|
8652
8988
|
borderRadius: "var(--select-radius)",
|
|
8653
8989
|
outline: "none",
|
|
8654
|
-
...style
|
|
8990
|
+
...asPlainStyle(style)
|
|
8655
8991
|
};
|
|
8656
8992
|
}
|
|
8657
8993
|
function getNativeSelectStyle(size, style) {
|
|
@@ -8670,7 +9006,7 @@ function getNativeSelectStyle(size, style) {
|
|
|
8670
9006
|
"--select-message-gap": `${selectTokens.messageGap}px`,
|
|
8671
9007
|
"--select-duration": `${selectTokens.motion.duration}ms`,
|
|
8672
9008
|
"--select-easing": selectTokens.motion.easing,
|
|
8673
|
-
...style
|
|
9009
|
+
...asPlainStyle(style)
|
|
8674
9010
|
};
|
|
8675
9011
|
}
|
|
8676
9012
|
function getSelectContentStyle(style) {
|
|
@@ -8690,7 +9026,7 @@ function getSelectContentStyle(style) {
|
|
|
8690
9026
|
"--select-item-indicator-size": `${selectTokens.item.indicatorSize}px`,
|
|
8691
9027
|
"--select-item-indicator-icon-size": `${selectTokens.item.indicatorIconSize}px`,
|
|
8692
9028
|
zIndex: overlayZIndex.popover,
|
|
8693
|
-
...style
|
|
9029
|
+
...asPlainStyle(style)
|
|
8694
9030
|
};
|
|
8695
9031
|
}
|
|
8696
9032
|
function textOf(node) {
|
|
@@ -9126,7 +9462,7 @@ function getSheetStyle(style) {
|
|
|
9126
9462
|
"--sheet-shadow": sheetTokens.surface.shadow,
|
|
9127
9463
|
"--sheet-duration": `${overlayTokens.motion.duration}ms`,
|
|
9128
9464
|
"--sheet-easing": overlayTokens.motion.easing,
|
|
9129
|
-
...style
|
|
9465
|
+
...asPlainStyle(style)
|
|
9130
9466
|
};
|
|
9131
9467
|
}
|
|
9132
9468
|
function Sheet({ modal = "trap-focus", disablePointerDismissal = true, ...props }) {
|
|
@@ -9428,7 +9764,7 @@ var ShowMore = ({
|
|
|
9428
9764
|
"h-[var(--show-more-trigger-height)] rounded-[var(--show-more-radius)] px-[var(--show-more-trigger-padding-x)]",
|
|
9429
9765
|
"transition-[background-color,border-color,color] duration-[var(--show-more-duration)] ease-[var(--show-more-easing)]",
|
|
9430
9766
|
"hover:border-border hover:bg-muted",
|
|
9431
|
-
"focus-visible:outline-none
|
|
9767
|
+
"focus-visible:outline-none",
|
|
9432
9768
|
"disabled:pointer-events-none disabled:opacity-50",
|
|
9433
9769
|
"motion-reduce:transition-none",
|
|
9434
9770
|
buttonClassName
|
|
@@ -9581,7 +9917,7 @@ function getSliderStyle(progress, style) {
|
|
|
9581
9917
|
"--slider-duration": `${sliderTokens.motion.duration}ms`,
|
|
9582
9918
|
"--slider-easing": sliderTokens.motion.easing,
|
|
9583
9919
|
"--slider-progress": `${progress}%`,
|
|
9584
|
-
...style
|
|
9920
|
+
...asPlainStyle(style)
|
|
9585
9921
|
};
|
|
9586
9922
|
}
|
|
9587
9923
|
function formatSliderValue(value, unit) {
|
|
@@ -9697,7 +10033,7 @@ var Slider = ({
|
|
|
9697
10033
|
onBlur,
|
|
9698
10034
|
className: cn(
|
|
9699
10035
|
"h-[var(--slider-height)] w-full cursor-pointer appearance-none rounded-[var(--slider-radius)] bg-[linear-gradient(to_right,var(--slider-track-fill)_0,var(--slider-track-fill)_var(--slider-progress),var(--slider-track-background)_var(--slider-progress),var(--slider-track-background)_100%)] bg-[length:100%_var(--slider-track-height)] bg-center bg-no-repeat outline-none",
|
|
9700
|
-
"
|
|
10036
|
+
"disabled:cursor-not-allowed disabled:opacity-50",
|
|
9701
10037
|
"[&::-moz-range-thumb]:size-[var(--slider-thumb-size)] [&::-moz-range-thumb]:appearance-none [&::-moz-range-thumb]:rounded-full [&::-moz-range-thumb]:border [&::-moz-range-thumb]:border-border [&::-moz-range-thumb]:bg-[var(--slider-thumb-background)] [&::-moz-range-thumb]:shadow-[var(--slider-thumb-shadow)]",
|
|
9702
10038
|
"[&::-webkit-slider-thumb]:size-[var(--slider-thumb-size)] [&::-webkit-slider-thumb]:appearance-none [&::-webkit-slider-thumb]:rounded-full [&::-webkit-slider-thumb]:border [&::-webkit-slider-thumb]:border-border [&::-webkit-slider-thumb]:bg-[var(--slider-thumb-background)] [&::-webkit-slider-thumb]:shadow-[var(--slider-thumb-shadow)]",
|
|
9703
10039
|
"[&::-moz-range-thumb]:transition-transform [&::-moz-range-thumb]:duration-[var(--slider-duration)] [&::-moz-range-thumb]:ease-[var(--slider-easing)]",
|
|
@@ -9730,7 +10066,7 @@ function getSpinnerStyle(size, style) {
|
|
|
9730
10066
|
"--spinner-bar-radius": `${spinnerTokens.barRadius}px`,
|
|
9731
10067
|
"--spinner-duration": `${spinnerTokens.motion.duration}ms`,
|
|
9732
10068
|
"--spinner-easing": spinnerTokens.motion.easing,
|
|
9733
|
-
...style
|
|
10069
|
+
...asPlainStyle(style)
|
|
9734
10070
|
};
|
|
9735
10071
|
}
|
|
9736
10072
|
function getBarOpacity(index) {
|
|
@@ -10109,7 +10445,7 @@ function getSwitchStyle(size, style) {
|
|
|
10109
10445
|
"--switch-control-radius": `${switchTokens.controlRadius}px`,
|
|
10110
10446
|
"--switch-duration": `${switchTokens.motion.duration}ms`,
|
|
10111
10447
|
"--switch-easing": switchTokens.motion.easing,
|
|
10112
|
-
...style
|
|
10448
|
+
...asPlainStyle(style)
|
|
10113
10449
|
};
|
|
10114
10450
|
}
|
|
10115
10451
|
function getSwitchControlStyle(size, style) {
|
|
@@ -10120,7 +10456,7 @@ function getSwitchControlStyle(size, style) {
|
|
|
10120
10456
|
"--switch-control-padding-x": `${sizeTokens.paddingX}px`,
|
|
10121
10457
|
"--switch-icon-size": `${sizeTokens.iconSize}px`,
|
|
10122
10458
|
"--switch-font-size": `${sizeTokens.fontSize}px`,
|
|
10123
|
-
...style
|
|
10459
|
+
...asPlainStyle(style)
|
|
10124
10460
|
};
|
|
10125
10461
|
}
|
|
10126
10462
|
var SwitchRoot = function SwitchRoot2({
|
|
@@ -10230,7 +10566,7 @@ var SwitchControl = function SwitchControl2({
|
|
|
10230
10566
|
"inline-flex h-full w-full items-center justify-center gap-1.5 whitespace-nowrap rounded-[var(--switch-control-radius)] px-[var(--switch-control-padding-x)] font-medium text-[length:var(--switch-font-size)]",
|
|
10231
10567
|
"text-muted-foreground transition-[background-color,box-shadow,color] duration-[var(--switch-duration)] ease-[var(--switch-easing)]",
|
|
10232
10568
|
"peer-checked:bg-background peer-checked:text-foreground peer-checked:shadow-sm",
|
|
10233
|
-
"
|
|
10569
|
+
"",
|
|
10234
10570
|
"peer-disabled:pointer-events-none peer-disabled:text-muted-foreground/60",
|
|
10235
10571
|
"[&_svg]:size-[var(--switch-icon-size)]"
|
|
10236
10572
|
),
|
|
@@ -10249,7 +10585,12 @@ SwitchControl.displayName = "Switch.Control";
|
|
|
10249
10585
|
var Switch = Object.assign(SwitchRoot, {
|
|
10250
10586
|
Control: SwitchControl
|
|
10251
10587
|
});
|
|
10252
|
-
|
|
10588
|
+
var ALIGNMENT_CLASS = {
|
|
10589
|
+
start: "text-left",
|
|
10590
|
+
center: "text-center",
|
|
10591
|
+
end: "text-right"
|
|
10592
|
+
};
|
|
10593
|
+
function createTableVars(style, bare) {
|
|
10253
10594
|
return {
|
|
10254
10595
|
"--table-min-width": `${tableTokens.wrapper.minWidth}px`,
|
|
10255
10596
|
"--table-padding": `${tableTokens.wrapper.padding}px`,
|
|
@@ -10261,7 +10602,7 @@ function createTableVars(style) {
|
|
|
10261
10602
|
"--table-font-size": `${tableTokens.typography.size}px`,
|
|
10262
10603
|
"--table-heading-weight": tableTokens.typography.headingWeight,
|
|
10263
10604
|
"--table-body-weight": tableTokens.typography.bodyWeight,
|
|
10264
|
-
"--table-body-spacer": `${tableTokens.spacer.bodyTop}px`,
|
|
10605
|
+
"--table-body-spacer": bare ? "0px" : `${tableTokens.spacer.bodyTop}px`,
|
|
10265
10606
|
"--table-motion-duration": `${tableTokens.motion.duration}ms`,
|
|
10266
10607
|
"--table-motion-easing": tableTokens.motion.easing,
|
|
10267
10608
|
...style
|
|
@@ -10272,16 +10613,18 @@ var TableRoot = ({
|
|
|
10272
10613
|
wrapperClassName,
|
|
10273
10614
|
wrapperStyle,
|
|
10274
10615
|
style,
|
|
10616
|
+
bare = false,
|
|
10275
10617
|
ref,
|
|
10276
10618
|
...props
|
|
10277
10619
|
}) => /* @__PURE__ */ jsx(
|
|
10278
10620
|
"div",
|
|
10279
10621
|
{
|
|
10280
10622
|
className: cn(
|
|
10281
|
-
"relative w-full
|
|
10623
|
+
"relative w-full overflow-auto",
|
|
10624
|
+
!bare && "min-w-[var(--table-min-width)] rounded-[var(--table-radius)] border border-border bg-card p-[var(--table-padding)]",
|
|
10282
10625
|
wrapperClassName
|
|
10283
10626
|
),
|
|
10284
|
-
style: createTableVars(wrapperStyle),
|
|
10627
|
+
style: createTableVars(wrapperStyle, bare),
|
|
10285
10628
|
children: /* @__PURE__ */ jsx(
|
|
10286
10629
|
"table",
|
|
10287
10630
|
{
|
|
@@ -10367,6 +10710,7 @@ TableRow.displayName = "TableRow";
|
|
|
10367
10710
|
var TableHead = ({
|
|
10368
10711
|
className,
|
|
10369
10712
|
numeric = false,
|
|
10713
|
+
alignment,
|
|
10370
10714
|
scope = "col",
|
|
10371
10715
|
ref,
|
|
10372
10716
|
...props
|
|
@@ -10377,8 +10721,10 @@ var TableHead = ({
|
|
|
10377
10721
|
scope,
|
|
10378
10722
|
className: cn(
|
|
10379
10723
|
"h-[var(--table-header-height)] px-[var(--table-cell-padding-x)] text-left align-middle font-[var(--table-heading-weight)] text-muted-foreground",
|
|
10380
|
-
"
|
|
10724
|
+
"[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-px",
|
|
10725
|
+
!alignment && "last:text-right",
|
|
10381
10726
|
numeric && "text-right font-mono tabular-nums",
|
|
10727
|
+
alignment && ALIGNMENT_CLASS[alignment],
|
|
10382
10728
|
className
|
|
10383
10729
|
),
|
|
10384
10730
|
...props
|
|
@@ -10388,6 +10734,7 @@ TableHead.displayName = "TableHead";
|
|
|
10388
10734
|
var TableCell = ({
|
|
10389
10735
|
className,
|
|
10390
10736
|
numeric = false,
|
|
10737
|
+
alignment,
|
|
10391
10738
|
ref,
|
|
10392
10739
|
...props
|
|
10393
10740
|
}) => /* @__PURE__ */ jsx(
|
|
@@ -10396,8 +10743,10 @@ var TableCell = ({
|
|
|
10396
10743
|
ref,
|
|
10397
10744
|
className: cn(
|
|
10398
10745
|
"px-[var(--table-cell-padding-x)] py-[var(--table-cell-padding-y)] align-middle",
|
|
10399
|
-
"
|
|
10746
|
+
"[&:has([role=checkbox])]:pr-0 [&>[role=checkbox]]:translate-y-px",
|
|
10747
|
+
!alignment && "last:text-right",
|
|
10400
10748
|
numeric && "text-right font-mono tabular-nums",
|
|
10749
|
+
alignment && ALIGNMENT_CLASS[alignment],
|
|
10401
10750
|
className
|
|
10402
10751
|
),
|
|
10403
10752
|
...props
|
|
@@ -10464,7 +10813,7 @@ var tabsListVariants = cva(
|
|
|
10464
10813
|
}
|
|
10465
10814
|
);
|
|
10466
10815
|
var tabsTriggerVariants = cva(
|
|
10467
|
-
"relative inline-flex h-[calc(var(--tabs-height)-var(--tabs-padding)*2)] min-w-[var(--tabs-trigger-min-width)] shrink-0 cursor-pointer items-center justify-center gap-[var(--tabs-trigger-gap)] whitespace-nowrap rounded-[var(--tabs-trigger-radius)] px-[var(--tabs-trigger-padding-x)] font-medium text-[length:var(--tabs-font-size)] outline-none transition-[background-color,border-color,box-shadow,color,opacity] duration-[var(--tabs-duration)] ease-[var(--tabs-easing)]
|
|
10816
|
+
"relative inline-flex h-[calc(var(--tabs-height)-var(--tabs-padding)*2)] min-w-[var(--tabs-trigger-min-width)] shrink-0 cursor-pointer items-center justify-center gap-[var(--tabs-trigger-gap)] whitespace-nowrap rounded-[var(--tabs-trigger-radius)] px-[var(--tabs-trigger-padding-x)] font-medium text-[length:var(--tabs-font-size)] outline-none transition-[background-color,border-color,box-shadow,color,opacity] duration-[var(--tabs-duration)] ease-[var(--tabs-easing)] disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50 data-[disabled]:pointer-events-none data-[disabled]:cursor-not-allowed data-[disabled]:opacity-50 [&_svg]:size-[var(--tabs-icon-size)] [&_svg]:shrink-0",
|
|
10468
10817
|
{
|
|
10469
10818
|
variants: {
|
|
10470
10819
|
variant: {
|
|
@@ -10501,7 +10850,7 @@ var tabsIndicatorVariants = cva(
|
|
|
10501
10850
|
}
|
|
10502
10851
|
);
|
|
10503
10852
|
var tabsContentVariants = cva(
|
|
10504
|
-
"mt-[var(--tabs-panel-gap)] text-[length:var(--tabs-font-size)] text-muted-foreground focus-visible:outline-none
|
|
10853
|
+
"mt-[var(--tabs-panel-gap)] text-[length:var(--tabs-font-size)] text-muted-foreground focus-visible:outline-none",
|
|
10505
10854
|
{
|
|
10506
10855
|
variants: {
|
|
10507
10856
|
variant: {
|
|
@@ -10543,7 +10892,7 @@ function getTabsStyle(size, style) {
|
|
|
10543
10892
|
"--tabs-badge-font-size": `${tabsTokens.badgeFontSize}px`,
|
|
10544
10893
|
"--tabs-duration": `${tabsTokens.motion.duration}ms`,
|
|
10545
10894
|
"--tabs-easing": tabsTokens.motion.easing,
|
|
10546
|
-
...style
|
|
10895
|
+
...asPlainStyle(style)
|
|
10547
10896
|
};
|
|
10548
10897
|
}
|
|
10549
10898
|
function getFirstEnabledValue(tabs) {
|
|
@@ -10739,7 +11088,7 @@ function getTextareaStyle(size, style) {
|
|
|
10739
11088
|
"--textarea-focus-ring-width": `${textareaTokens.focusRingWidth}px`,
|
|
10740
11089
|
borderRadius: "var(--textarea-radius)",
|
|
10741
11090
|
outline: "none",
|
|
10742
|
-
...style
|
|
11091
|
+
...asPlainStyle(style)
|
|
10743
11092
|
};
|
|
10744
11093
|
}
|
|
10745
11094
|
function getTextareaFieldStyle() {
|
|
@@ -10852,7 +11201,7 @@ function getThemeSwitcherStyle(size, style) {
|
|
|
10852
11201
|
"--theme-switcher-focus-ring-offset": `${themeSwitcherTokens.focusRingOffset}px`,
|
|
10853
11202
|
"--theme-switcher-duration": `${themeSwitcherTokens.motion.duration}ms`,
|
|
10854
11203
|
"--theme-switcher-easing": themeSwitcherTokens.motion.easing,
|
|
10855
|
-
...style
|
|
11204
|
+
...asPlainStyle(style)
|
|
10856
11205
|
};
|
|
10857
11206
|
}
|
|
10858
11207
|
function isThemeSwitcherValue(value) {
|
|
@@ -10951,7 +11300,7 @@ function getThemeToggleStyle(size, style) {
|
|
|
10951
11300
|
"--theme-toggle-radius": `${token.radius}px`,
|
|
10952
11301
|
"--theme-toggle-duration": `${themeToggleTokens.motion.duration}ms`,
|
|
10953
11302
|
"--theme-toggle-easing": themeToggleTokens.motion.easing,
|
|
10954
|
-
...style
|
|
11303
|
+
...asPlainStyle(style)
|
|
10955
11304
|
};
|
|
10956
11305
|
}
|
|
10957
11306
|
function readDocumentTheme() {
|
|
@@ -11076,7 +11425,6 @@ var ThemeToggle = ({
|
|
|
11076
11425
|
"inline-flex size-[var(--theme-toggle-size)] shrink-0 items-center justify-center rounded-[var(--theme-toggle-radius)] p-[var(--theme-toggle-padding)] text-foreground",
|
|
11077
11426
|
"transition-[background-color,color,box-shadow] duration-[var(--theme-toggle-duration)] ease-[var(--theme-toggle-easing)]",
|
|
11078
11427
|
"hover:bg-accent hover:text-accent-foreground",
|
|
11079
|
-
"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 focus-visible:ring-offset-background",
|
|
11080
11428
|
"disabled:pointer-events-none disabled:opacity-50",
|
|
11081
11429
|
"motion-reduce:transition-none",
|
|
11082
11430
|
className
|
|
@@ -11351,7 +11699,7 @@ function getToggleStyle(size, color, style) {
|
|
|
11351
11699
|
"--toggle-thumb": colorTokens.thumb,
|
|
11352
11700
|
"--toggle-icon-on": colorTokens.iconOn,
|
|
11353
11701
|
"--toggle-icon-off": colorTokens.iconOff,
|
|
11354
|
-
...style
|
|
11702
|
+
...asPlainStyle(style)
|
|
11355
11703
|
};
|
|
11356
11704
|
}
|
|
11357
11705
|
var Toggle = ({
|
|
@@ -11425,7 +11773,7 @@ var Toggle = ({
|
|
|
11425
11773
|
"border-[var(--toggle-track-border)] transition-[background-color,border-color] duration-[var(--toggle-duration)] ease-[var(--toggle-easing)]",
|
|
11426
11774
|
"peer-checked:bg-[var(--toggle-track-on)]",
|
|
11427
11775
|
"peer-checked:[&>span]:translate-x-[var(--toggle-thumb-translate)] peer-checked:[&>span]:text-[var(--toggle-icon-on)]",
|
|
11428
|
-
"
|
|
11776
|
+
"",
|
|
11429
11777
|
"peer-disabled:cursor-not-allowed peer-disabled:opacity-60",
|
|
11430
11778
|
"motion-reduce:transition-none"
|
|
11431
11779
|
),
|
|
@@ -11478,7 +11826,10 @@ var toggleGroupVariants = cva(
|
|
|
11478
11826
|
variants: {
|
|
11479
11827
|
variant: {
|
|
11480
11828
|
default: "",
|
|
11481
|
-
outline: "bg-transparent border"
|
|
11829
|
+
outline: "bg-transparent border",
|
|
11830
|
+
// Segmented pill look — theme-toggle / mode-pills style. Rounded-full
|
|
11831
|
+
// track with a rounded-full active segment (see toggleGroupItemVariants).
|
|
11832
|
+
pill: "rounded-full bg-neutral-2 p-0.5"
|
|
11482
11833
|
}
|
|
11483
11834
|
},
|
|
11484
11835
|
defaultVariants: {
|
|
@@ -11487,12 +11838,13 @@ var toggleGroupVariants = cva(
|
|
|
11487
11838
|
}
|
|
11488
11839
|
);
|
|
11489
11840
|
var toggleGroupItemVariants = cva(
|
|
11490
|
-
"inline-flex items-center justify-center whitespace-nowrap rounded-[var(--radius-md)] px-3 py-1.5 text-sm font-medium ring-offset-background transition-[background-color,box-shadow,color,opacity] duration-flow ease-out motion-reduce:transition-none
|
|
11841
|
+
"inline-flex items-center justify-center gap-1.5 whitespace-nowrap rounded-[var(--radius-md)] px-3 py-1.5 text-sm font-medium ring-offset-background transition-[background-color,box-shadow,color,opacity] duration-flow ease-out motion-reduce:transition-none disabled:pointer-events-none disabled:opacity-50 data-[state=on]:bg-background data-[state=on]:text-foreground data-[state=on]:shadow-sm",
|
|
11491
11842
|
{
|
|
11492
11843
|
variants: {
|
|
11493
11844
|
variant: {
|
|
11494
11845
|
default: "",
|
|
11495
|
-
outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground"
|
|
11846
|
+
outline: "border border-input bg-transparent hover:bg-accent hover:text-accent-foreground data-[state=on]:bg-accent data-[state=on]:text-accent-foreground",
|
|
11847
|
+
pill: "rounded-full text-neutral-11 hover:text-neutral-12 data-[state=on]:bg-primary/5 data-[state=on]:text-primary data-[state=on]:shadow-none"
|
|
11496
11848
|
},
|
|
11497
11849
|
size: {
|
|
11498
11850
|
default: "h-9 px-3",
|
|
@@ -11550,7 +11902,17 @@ var ToggleGroup = ({
|
|
|
11550
11902
|
}
|
|
11551
11903
|
onValueChange?.(newValue);
|
|
11552
11904
|
}
|
|
11553
|
-
return /* @__PURE__ */ jsx(
|
|
11905
|
+
return /* @__PURE__ */ jsx(
|
|
11906
|
+
"div",
|
|
11907
|
+
{
|
|
11908
|
+
ref,
|
|
11909
|
+
role: type === "single" ? "radiogroup" : "group",
|
|
11910
|
+
"data-toggle-group-root": "",
|
|
11911
|
+
className: cn(toggleGroupVariants({ variant }), className),
|
|
11912
|
+
...props,
|
|
11913
|
+
children: /* @__PURE__ */ jsx(ToggleGroupTypeContext.Provider, { value: type, children: /* @__PURE__ */ jsx(ToggleGroupValueContext.Provider, { value, children: /* @__PURE__ */ jsx(ToggleGroupChangeContext.Provider, { value: changeToggleGroupValue, children: /* @__PURE__ */ jsx(ToggleGroupDisabledContext.Provider, { value: disabled, children: /* @__PURE__ */ jsx(ToggleGroupVariantContext.Provider, { value: variant, children: /* @__PURE__ */ jsx(ToggleGroupSizeContext.Provider, { value: size, children }) }) }) }) }) })
|
|
11914
|
+
}
|
|
11915
|
+
);
|
|
11554
11916
|
};
|
|
11555
11917
|
ToggleGroup.displayName = "ToggleGroup";
|
|
11556
11918
|
var ToggleGroupItem = ({
|
|
@@ -11568,7 +11930,8 @@ var ToggleGroupItem = ({
|
|
|
11568
11930
|
function toggleItemSelection(event) {
|
|
11569
11931
|
if (isDisabled) return;
|
|
11570
11932
|
if (context.type === "single") {
|
|
11571
|
-
|
|
11933
|
+
if (isSelected) return;
|
|
11934
|
+
context.onValueChange(value);
|
|
11572
11935
|
} else {
|
|
11573
11936
|
const currentArray = Array.isArray(context.value) ? context.value : [];
|
|
11574
11937
|
context.onValueChange(
|
|
@@ -11577,26 +11940,75 @@ var ToggleGroupItem = ({
|
|
|
11577
11940
|
}
|
|
11578
11941
|
props.onClick?.(event);
|
|
11579
11942
|
}
|
|
11580
|
-
|
|
11581
|
-
|
|
11582
|
-
|
|
11583
|
-
|
|
11584
|
-
|
|
11585
|
-
|
|
11586
|
-
"data-
|
|
11587
|
-
|
|
11588
|
-
|
|
11589
|
-
|
|
11590
|
-
|
|
11591
|
-
|
|
11592
|
-
|
|
11593
|
-
|
|
11594
|
-
|
|
11595
|
-
|
|
11596
|
-
|
|
11597
|
-
|
|
11598
|
-
|
|
11599
|
-
|
|
11943
|
+
function handleItemKeyDown(event) {
|
|
11944
|
+
props.onKeyDown?.(event);
|
|
11945
|
+
if (context.type !== "single" || event.defaultPrevented) return;
|
|
11946
|
+
const container = event.currentTarget.closest("[data-toggle-group-root]");
|
|
11947
|
+
if (!container) return;
|
|
11948
|
+
const items = Array.from(
|
|
11949
|
+
container.querySelectorAll("[data-toggle-item]:not(:disabled)")
|
|
11950
|
+
);
|
|
11951
|
+
const currentIndex = items.indexOf(event.currentTarget);
|
|
11952
|
+
if (currentIndex === -1 || items.length === 0) return;
|
|
11953
|
+
const focusAndSelect = (targetIndex) => {
|
|
11954
|
+
const wrapped = (targetIndex % items.length + items.length) % items.length;
|
|
11955
|
+
const target = items[wrapped];
|
|
11956
|
+
if (!target) return;
|
|
11957
|
+
target.focus();
|
|
11958
|
+
const targetValue = target.dataset.toggleValue;
|
|
11959
|
+
if (targetValue !== void 0) context.onValueChange(targetValue);
|
|
11960
|
+
};
|
|
11961
|
+
switch (event.key) {
|
|
11962
|
+
case "ArrowRight":
|
|
11963
|
+
case "ArrowDown":
|
|
11964
|
+
event.preventDefault();
|
|
11965
|
+
focusAndSelect(currentIndex + 1);
|
|
11966
|
+
break;
|
|
11967
|
+
case "ArrowLeft":
|
|
11968
|
+
case "ArrowUp":
|
|
11969
|
+
event.preventDefault();
|
|
11970
|
+
focusAndSelect(currentIndex - 1);
|
|
11971
|
+
break;
|
|
11972
|
+
case "Home":
|
|
11973
|
+
event.preventDefault();
|
|
11974
|
+
focusAndSelect(0);
|
|
11975
|
+
break;
|
|
11976
|
+
case "End":
|
|
11977
|
+
event.preventDefault();
|
|
11978
|
+
focusAndSelect(items.length - 1);
|
|
11979
|
+
break;
|
|
11980
|
+
}
|
|
11981
|
+
}
|
|
11982
|
+
const rovingTabIndex = context.type === "single" ? isSelected || context.value === "" ? 0 : -1 : void 0;
|
|
11983
|
+
return (
|
|
11984
|
+
// biome-ignore lint/a11y/useAriaPropsSupportedByRole: see comment above.
|
|
11985
|
+
/* @__PURE__ */ jsx(
|
|
11986
|
+
"button",
|
|
11987
|
+
{
|
|
11988
|
+
ref,
|
|
11989
|
+
type: "button",
|
|
11990
|
+
disabled: isDisabled,
|
|
11991
|
+
"data-state": isSelected ? "on" : "off",
|
|
11992
|
+
"data-toggle-item": "",
|
|
11993
|
+
"data-toggle-value": value,
|
|
11994
|
+
role: context.type === "single" ? "radio" : void 0,
|
|
11995
|
+
"aria-checked": context.type === "single" ? isSelected : void 0,
|
|
11996
|
+
"aria-pressed": context.type === "multiple" ? isSelected : void 0,
|
|
11997
|
+
tabIndex: rovingTabIndex,
|
|
11998
|
+
className: cn(
|
|
11999
|
+
toggleGroupItemVariants({
|
|
12000
|
+
variant: variant ?? context.variant,
|
|
12001
|
+
size: size ?? context.size
|
|
12002
|
+
}),
|
|
12003
|
+
className,
|
|
12004
|
+
"focus-visible:z-10"
|
|
12005
|
+
),
|
|
12006
|
+
onClick: toggleItemSelection,
|
|
12007
|
+
...props,
|
|
12008
|
+
onKeyDown: handleItemKeyDown,
|
|
12009
|
+
children
|
|
12010
|
+
}
|
|
12011
|
+
)
|
|
11600
12012
|
);
|
|
11601
12013
|
};
|
|
11602
12014
|
ToggleGroupItem.displayName = "ToggleGroupItem";
|
|
@@ -11898,6 +12310,6 @@ var TreeIcon = ({ icon, hasChildren = false, className, ...props }) => {
|
|
|
11898
12310
|
};
|
|
11899
12311
|
var TreeLabel = ({ className, ...props }) => /* @__PURE__ */ jsx("span", { className: cn("font flex-1 truncate text-sm", className), ...props });
|
|
11900
12312
|
|
|
11901
|
-
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertContent, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertIcon, AlertTitle, AlertToolbar, AnimateIn, AnimateInGroup, AnimatedThemeToggler, AspectRatio, Avatar, AvatarFallback, AvatarGroup, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonLink, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, CheckboxGroup, CodeBlock, Collapse, CollapseGroup, Combobox, ComboboxEmpty, ComboboxGroupSub, ComboboxInput, ComboboxList, ComboboxOptionItem, ComboboxRoot, ComboboxSeparator, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandResults, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRoot, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyCodeButton, CopyIdButton, CopyLinkButton, CopyableField, Description, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EmptyStateIcon, EmptyStateRoot, ErrorSurface as Error, ErrorMessage, Field, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Gauge, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, Label, LoadingDots, Menu, MenuButton, MenuContainer, MenuItem, MenuItemLocked, MenuLink, MenuSection, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Modal, MultiSelectContent, MultiSelectRoot, MultiSelectRow, MultiSelectTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Note, Pagination, Popover, PopoverAnchor, PopoverContent, PopoverPositioner, PopoverTrigger, Progress, ProjectBanner, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, Scroller, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, ShowMore, Skeleton, SkeletonAvatar, SkeletonCard, SkeletonText, Slider, Spinner2 as Spinner, SplitButton, SplitButtonMenuItem, Stack, StatusDot, Switch, Table, TableBody, TableCaption, TableCell, TableCol, TableColgroup, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeSwitcher, ThemeToggle, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TreeExpander, TreeIcon, TreeLabel, TreeLines, TreeNode, TreeNodeContent, TreeNodeTrigger, TreeProvider, TreeView, alertVariants, badgeVariants, buttonVariants, containerWidths, flexLayouts, gridLayouts, labelVariants, navigationMenuTriggerStyle, progressIndicatorVariants, progressVariants, tabsContentVariants, tabsListVariants, tabsTriggerVariants, toggleGroupItemVariants, toggleGroupVariants, useCopyToClipboard, useFormField, useToasts, zIndex };
|
|
12313
|
+
export { Accordion, AccordionContent, AccordionItem, AccordionTrigger, Alert, AlertContent, AlertDescription, AlertDialog, AlertDialogAction, AlertDialogCancel, AlertDialogContent, AlertDialogDescription, AlertDialogFooter, AlertDialogHeader, AlertDialogOverlay, AlertDialogPortal, AlertDialogTitle, AlertDialogTrigger, AlertIcon, AlertTitle, AlertToolbar, AnimateIn, AnimateInGroup, AnimateSwap, AnimatedThemeToggler, AspectRatio, Avatar, AvatarFallback, AvatarGroup, AvatarImage, Badge, Breadcrumb, BreadcrumbEllipsis, BreadcrumbItem, BreadcrumbLink, BreadcrumbList, BreadcrumbPage, BreadcrumbSeparator, Button, ButtonLink, Card, CardContent, CardDescription, CardFooter, CardHeader, CardTitle, Checkbox, CheckboxGroup, CodeBlock, Collapse, CollapseGroup, Combobox, ComboboxEmpty, ComboboxGroupSub, ComboboxInput, ComboboxList, ComboboxOptionItem, ComboboxRoot, ComboboxSeparator, Command, CommandDialog, CommandEmpty, CommandGroup, CommandInput, CommandItem, CommandList, CommandResults, CommandSeparator, CommandShortcut, ContextMenu, ContextMenuCheckboxItem, ContextMenuContent, ContextMenuGroup, ContextMenuItem, ContextMenuLabel, ContextMenuRadioGroup, ContextMenuRadioItem, ContextMenuRoot, ContextMenuSeparator, ContextMenuShortcut, ContextMenuSub, ContextMenuSubContent, ContextMenuSubTrigger, ContextMenuTrigger, CopyButton, CopyCodeButton, CopyIdButton, CopyLinkButton, CopyMenuItem, CopyableField, Description, Dialog, DialogClose, DialogContent, DialogDescription, DialogFooter, DialogHeader, DialogOverlay, DialogPortal, DialogTitle, DialogTrigger, Drawer, DrawerBody, DrawerClose, DrawerContent, DrawerDescription, DrawerFooter, DrawerHeader, DrawerOverlay, DrawerPortal, DrawerTitle, DrawerTrigger, DropdownMenu, DropdownMenuCheckboxItem, DropdownMenuContent, DropdownMenuEmpty, DropdownMenuFilterInput, DropdownMenuGroup, DropdownMenuItem, DropdownMenuLabel, DropdownMenuPortal, DropdownMenuRadioGroup, DropdownMenuRadioItem, DropdownMenuSeparator, DropdownMenuShortcut, DropdownMenuSub, DropdownMenuSubContent, DropdownMenuSubTrigger, DropdownMenuTrigger, EmptyState, EmptyStateIcon, EmptyStateRoot, ErrorSurface as Error, ErrorMessage, Field, Form, FormControl, FormDescription, FormField, FormItem, FormLabel, FormMessage, Gauge, HoverCard, HoverCardContent, HoverCardTrigger, Input, InputOTP, InputOTPGroup, InputOTPSeparator, InputOTPSlot, Kbd, Label, LoadingDots, Menu, MenuButton, MenuContainer, MenuItem, MenuItemLocked, MenuLink, MenuSection, Menubar, MenubarCheckboxItem, MenubarContent, MenubarGroup, MenubarItem, MenubarLabel, MenubarMenu, MenubarPortal, MenubarRadioGroup, MenubarRadioItem, MenubarSeparator, MenubarShortcut, MenubarSub, MenubarSubContent, MenubarSubTrigger, MenubarTrigger, Modal, MultiSelectContent, MultiSelectRoot, MultiSelectRow, MultiSelectTrigger, NavigationMenu, NavigationMenuContent, NavigationMenuIndicator, NavigationMenuItem, NavigationMenuLink, NavigationMenuList, NavigationMenuTrigger, NavigationMenuViewport, Note, Pagination, Popover, PopoverAnchor, PopoverContent, PopoverPositioner, PopoverTrigger, Progress, ProjectBanner, RadioGroup, RadioGroupItem, ResizableHandle, ResizablePanel, ResizablePanelGroup, Scroller, Select, SelectContent, SelectGroup, SelectItem, SelectLabel, SelectScrollDownButton, SelectScrollUpButton, SelectSeparator, SelectTrigger, SelectValue, Separator2 as Separator, Sheet, SheetBody, SheetClose, SheetContent, SheetDescription, SheetFooter, SheetHeader, SheetOverlay, SheetPortal, SheetTitle, SheetTrigger, ShowMore, Skeleton, SkeletonAvatar, SkeletonCard, SkeletonText, Slider, Spinner2 as Spinner, SplitButton, SplitButtonMenuItem, Stack, StatusDot, Switch, Table, TableBody, TableCaption, TableCell, TableCol, TableColgroup, TableFooter, TableHead, TableHeader, TableRow, Tabs, TabsContent, TabsList, TabsTrigger, Textarea, ThemeSwitcher, ThemeToggle, Toaster, Toggle, ToggleGroup, ToggleGroupItem, Tooltip, TooltipContent, TooltipProvider, TooltipTrigger, TreeExpander, TreeIcon, TreeLabel, TreeLines, TreeNode, TreeNodeContent, TreeNodeTrigger, TreeProvider, TreeView, alertVariants, badgeVariants, buttonVariants, containerWidths, flexLayouts, gridLayouts, labelVariants, navigationMenuTriggerStyle, progressIndicatorVariants, progressVariants, tabsContentVariants, tabsListVariants, tabsTriggerVariants, toggleGroupItemVariants, toggleGroupVariants, useCopyToClipboard, useFormField, useToasts, zIndex };
|
|
11902
12314
|
//# sourceMappingURL=canonical.js.map
|
|
11903
12315
|
//# sourceMappingURL=canonical.js.map
|