shadcn-glass-ui 2.1.2 → 2.1.5

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.
Files changed (45) hide show
  1. package/README.md +5 -5
  2. package/context7.json +17 -2
  3. package/dist/cli/index.cjs +1 -1
  4. package/dist/components.cjs +4 -4
  5. package/dist/components.js +1 -1
  6. package/dist/hooks.cjs +2 -2
  7. package/dist/index.cjs +1659 -5
  8. package/dist/index.cjs.map +1 -1
  9. package/dist/index.js +1651 -4
  10. package/dist/index.js.map +1 -1
  11. package/dist/r/registry.json +36 -0
  12. package/dist/r/sidebar-context.json +35 -0
  13. package/dist/r/sidebar-glass.json +40 -0
  14. package/dist/r/sidebar-menu.json +39 -0
  15. package/dist/r/split-layout-accordion.json +24 -0
  16. package/dist/r/split-layout-context.json +21 -0
  17. package/dist/r/split-layout-glass.json +25 -0
  18. package/dist/shadcn-glass-ui.css +1 -1
  19. package/dist/{theme-context-BHXYJ4RE.cjs → theme-context-Y98bGvcm.cjs} +2 -2
  20. package/dist/{theme-context-BHXYJ4RE.cjs.map → theme-context-Y98bGvcm.cjs.map} +1 -1
  21. package/dist/themes.cjs +1 -1
  22. package/dist/{trust-score-card-glass-CGXmOIfq.cjs → trust-score-card-glass-2rjz00d_.cjs} +47 -5
  23. package/dist/trust-score-card-glass-2rjz00d_.cjs.map +1 -0
  24. package/dist/{trust-score-card-glass-L9g0qamo.js → trust-score-card-glass-zjkx4OC2.js} +3 -3
  25. package/dist/trust-score-card-glass-zjkx4OC2.js.map +1 -0
  26. package/dist/{use-focus-CeNHOiBa.cjs → use-focus-DbpBEuee.cjs} +2 -2
  27. package/dist/{use-focus-CeNHOiBa.cjs.map → use-focus-DbpBEuee.cjs.map} +1 -1
  28. package/dist/{use-wallpaper-tint-Bt2G3g1v.cjs → use-wallpaper-tint-DbawS9zh.cjs} +2 -2
  29. package/dist/{use-wallpaper-tint-Bt2G3g1v.cjs.map → use-wallpaper-tint-DbawS9zh.cjs.map} +1 -1
  30. package/dist/{utils-LYxxWvUn.cjs → utils-XlyXIhuP.cjs} +2 -2
  31. package/dist/{utils-LYxxWvUn.cjs.map → utils-XlyXIhuP.cjs.map} +1 -1
  32. package/dist/utils.cjs +1 -1
  33. package/docs/AI_USAGE.md +5 -5
  34. package/docs/BEST_PRACTICES.md +1 -1
  35. package/docs/COMPONENTS_CATALOG.md +215 -0
  36. package/docs/EXPORTS_MAP.json +140 -14
  37. package/docs/EXPORTS_STRUCTURE.md +43 -9
  38. package/docs/GETTING_STARTED.md +1 -1
  39. package/docs/REGISTRY_USAGE.md +1 -1
  40. package/docs/api/README.md +1 -1
  41. package/docs/components/SIDEBAR_GLASS.md +555 -0
  42. package/docs/components/SPLIT_LAYOUT_GLASS.md +546 -0
  43. package/package.json +3 -3
  44. package/dist/trust-score-card-glass-CGXmOIfq.cjs.map +0 -1
  45. package/dist/trust-score-card-glass-L9g0qamo.js.map +0 -1
package/dist/index.cjs CHANGED
@@ -1,15 +1,17 @@
1
- const require_trust_score_card_glass = require("./trust-score-card-glass-CGXmOIfq.cjs");
2
- const require_utils = require("./utils-LYxxWvUn.cjs");
3
- const require_use_focus = require("./use-focus-CeNHOiBa.cjs");
4
- const require_theme_context = require("./theme-context-BHXYJ4RE.cjs");
5
- const require_use_wallpaper_tint = require("./use-wallpaper-tint-Bt2G3g1v.cjs");
1
+ const require_trust_score_card_glass = require("./trust-score-card-glass-2rjz00d_.cjs");
2
+ const require_utils = require("./utils-XlyXIhuP.cjs");
3
+ const require_use_focus = require("./use-focus-DbpBEuee.cjs");
4
+ const require_theme_context = require("./theme-context-Y98bGvcm.cjs");
5
+ const require_use_wallpaper_tint = require("./use-wallpaper-tint-DbawS9zh.cjs");
6
6
  let react = require("react");
7
7
  react = require_trust_score_card_glass.__toESM(react);
8
8
  let lucide_react = require("lucide-react");
9
9
  let clsx = require("clsx");
10
10
  let class_variance_authority = require("class-variance-authority");
11
11
  let react_jsx_runtime = require("react/jsx-runtime");
12
+ let __radix_ui_react_slot = require("@radix-ui/react-slot");
12
13
  let react_dom = require("react-dom");
14
+ react_dom = require_trust_score_card_glass.__toESM(react_dom);
13
15
  const stepperRootVariants = (0, class_variance_authority.cva)("flex w-full", {
14
16
  variants: { orientation: {
15
17
  horizontal: "flex-col",
@@ -370,6 +372,413 @@ const StepperGlass = {
370
372
  Step: StepperStep,
371
373
  Content: StepperContent
372
374
  };
375
+ var MOBILE_BREAKPOINT = 768;
376
+ var SIDEBAR_COOKIE_NAME = "sidebar:state";
377
+ var SIDEBAR_COOKIE_MAX_AGE = 3600 * 24 * 7;
378
+ var SidebarContext = (0, react.createContext)(null);
379
+ function useSidebar() {
380
+ const context = (0, react.useContext)(SidebarContext);
381
+ if (!context) throw new Error("useSidebar must be used within SidebarGlass.Provider. Wrap your component tree with <SidebarGlass.Provider>.");
382
+ return context;
383
+ }
384
+ const SidebarProvider = ({ children, open: controlledOpen, onOpenChange, defaultOpen = true, side = "left", variant = "sidebar", collapsible = "offcanvas", cookieName = SIDEBAR_COOKIE_NAME, keyboardShortcut = "b" }) => {
385
+ const [internalOpen, setInternalOpen] = (0, react.useState)(() => {
386
+ if (typeof document !== "undefined") {
387
+ const sidebarCookie = document.cookie.split(";").find((c) => c.trim().startsWith(`${cookieName}=`));
388
+ if (sidebarCookie) return sidebarCookie.split("=")[1] === "true";
389
+ }
390
+ return defaultOpen;
391
+ });
392
+ const isControlled = controlledOpen !== void 0;
393
+ const open = isControlled ? controlledOpen : internalOpen;
394
+ const setOpen = (0, react.useCallback)((value$1) => {
395
+ if (!isControlled) setInternalOpen(value$1);
396
+ onOpenChange?.(value$1);
397
+ if (typeof document !== "undefined") document.cookie = `${cookieName}=${value$1}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
398
+ }, [
399
+ isControlled,
400
+ onOpenChange,
401
+ cookieName
402
+ ]);
403
+ const [openMobile, setOpenMobile] = (0, react.useState)(false);
404
+ const [isMobile, setIsMobile] = (0, react.useState)(() => {
405
+ if (typeof window === "undefined") return false;
406
+ return window.innerWidth < MOBILE_BREAKPOINT;
407
+ });
408
+ (0, react.useEffect)(() => {
409
+ if (typeof window === "undefined") return;
410
+ const checkMobile = () => {
411
+ const mobile = window.innerWidth < MOBILE_BREAKPOINT;
412
+ setIsMobile(mobile);
413
+ if (!mobile) setOpenMobile(false);
414
+ };
415
+ checkMobile();
416
+ window.addEventListener("resize", checkMobile);
417
+ return () => window.removeEventListener("resize", checkMobile);
418
+ }, []);
419
+ const toggleSidebar = (0, react.useCallback)(() => {
420
+ if (isMobile) setOpenMobile((prev) => !prev);
421
+ else setOpen(!open);
422
+ }, [
423
+ isMobile,
424
+ open,
425
+ setOpen
426
+ ]);
427
+ (0, react.useEffect)(() => {
428
+ if (!keyboardShortcut) return;
429
+ const handleKeyDown = (e) => {
430
+ if (e.key === keyboardShortcut && (e.metaKey || e.ctrlKey)) {
431
+ e.preventDefault();
432
+ toggleSidebar();
433
+ }
434
+ };
435
+ document.addEventListener("keydown", handleKeyDown);
436
+ return () => document.removeEventListener("keydown", handleKeyDown);
437
+ }, [keyboardShortcut, toggleSidebar]);
438
+ const value = (0, react.useMemo)(() => ({
439
+ state: open ? "expanded" : "collapsed",
440
+ open,
441
+ setOpen,
442
+ openMobile,
443
+ setOpenMobile,
444
+ isMobile,
445
+ toggleSidebar,
446
+ side,
447
+ variant,
448
+ collapsible
449
+ }), [
450
+ open,
451
+ setOpen,
452
+ openMobile,
453
+ isMobile,
454
+ toggleSidebar,
455
+ side,
456
+ variant,
457
+ collapsible
458
+ ]);
459
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarContext.Provider, {
460
+ value,
461
+ children
462
+ });
463
+ };
464
+ SidebarProvider.displayName = "SidebarGlass.Provider";
465
+ const SidebarRoot = (0, react.forwardRef)(({ children, side: sideProp, variant: variantProp, collapsible: collapsibleProp, className, ...props }, ref) => {
466
+ const context = useSidebar();
467
+ const side = sideProp ?? context.side;
468
+ const variant = variantProp ?? context.variant;
469
+ const collapsible = collapsibleProp ?? context.collapsible;
470
+ const { state, open, openMobile, isMobile, setOpenMobile } = context;
471
+ if (isMobile) return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(require_trust_score_card_glass.ModalGlass.Root, {
472
+ open: openMobile,
473
+ onOpenChange: setOpenMobile,
474
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.ModalGlass.Overlay, {}), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
475
+ ref,
476
+ "data-sidebar": "sidebar",
477
+ "data-side": side,
478
+ "data-variant": variant,
479
+ "data-collapsible": collapsible,
480
+ "data-state": "expanded",
481
+ "data-mobile": "true",
482
+ className: require_utils.cn("fixed inset-y-0 z-50 flex flex-col", "w-[var(--sidebar-width-mobile)]", side === "left" ? "left-0" : "right-0", className),
483
+ style: {
484
+ background: "var(--sidebar-bg)",
485
+ color: "var(--sidebar-foreground)",
486
+ borderRight: side === "left" ? "1px solid var(--sidebar-border)" : void 0,
487
+ borderLeft: side === "right" ? "1px solid var(--sidebar-border)" : void 0,
488
+ backdropFilter: "blur(var(--sidebar-backdrop-blur))",
489
+ WebkitBackdropFilter: "blur(var(--sidebar-backdrop-blur))",
490
+ boxShadow: "var(--sidebar-glow)"
491
+ },
492
+ ...props,
493
+ children
494
+ })]
495
+ });
496
+ const width = !open && collapsible !== "none" && collapsible === "icon" ? "var(--sidebar-width-icon)" : "var(--sidebar-width)";
497
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
498
+ ref,
499
+ "data-sidebar": "sidebar",
500
+ "data-side": side,
501
+ "data-variant": variant,
502
+ "data-collapsible": collapsible,
503
+ "data-state": state,
504
+ className: require_utils.cn("group/sidebar relative flex flex-col", "transition-[width] duration-300 ease-in-out", collapsible === "offcanvas" && !open && "w-0 overflow-hidden", variant === "floating" && "rounded-xl m-2", variant === "inset" && "rounded-xl", className),
505
+ style: {
506
+ width: collapsible === "offcanvas" && !open ? 0 : width,
507
+ background: "var(--sidebar-bg)",
508
+ color: "var(--sidebar-foreground)",
509
+ borderRight: side === "left" && variant !== "floating" ? "1px solid var(--sidebar-border)" : void 0,
510
+ borderLeft: side === "right" && variant !== "floating" ? "1px solid var(--sidebar-border)" : void 0,
511
+ border: variant === "floating" ? "1px solid var(--sidebar-border)" : void 0,
512
+ backdropFilter: "blur(var(--sidebar-backdrop-blur))",
513
+ WebkitBackdropFilter: "blur(var(--sidebar-backdrop-blur))",
514
+ boxShadow: variant === "floating" ? "var(--sidebar-glow)" : void 0
515
+ },
516
+ ...props,
517
+ children
518
+ });
519
+ });
520
+ SidebarRoot.displayName = "SidebarGlass.Root";
521
+ const SidebarHeader = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
522
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
523
+ ref,
524
+ "data-sidebar": "header",
525
+ className: require_utils.cn("flex shrink-0 flex-col gap-2 p-4", "border-b", className),
526
+ style: { borderColor: "var(--sidebar-border)" },
527
+ ...props,
528
+ children
529
+ });
530
+ });
531
+ SidebarHeader.displayName = "SidebarGlass.Header";
532
+ const SidebarContent = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
533
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
534
+ ref,
535
+ "data-sidebar": "content",
536
+ className: require_utils.cn("flex flex-1 flex-col gap-4 overflow-auto p-4", "[&::-webkit-scrollbar]:w-1.5", "[&::-webkit-scrollbar-track]:bg-transparent", "[&::-webkit-scrollbar-thumb]:rounded-full", "[&::-webkit-scrollbar-thumb]:bg-white/10", className),
537
+ ...props,
538
+ children
539
+ });
540
+ });
541
+ SidebarContent.displayName = "SidebarGlass.Content";
542
+ const SidebarFooter = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
543
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
544
+ ref,
545
+ "data-sidebar": "footer",
546
+ className: require_utils.cn("flex shrink-0 flex-col gap-2 p-4", "border-t", className),
547
+ style: { borderColor: "var(--sidebar-border)" },
548
+ ...props,
549
+ children
550
+ });
551
+ });
552
+ SidebarFooter.displayName = "SidebarGlass.Footer";
553
+ const SidebarRail = (0, react.forwardRef)(({ className, ...props }, ref) => {
554
+ const { toggleSidebar, side } = useSidebar();
555
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("button", {
556
+ ref,
557
+ "data-sidebar": "rail",
558
+ "aria-label": "Toggle Sidebar",
559
+ tabIndex: -1,
560
+ onClick: toggleSidebar,
561
+ className: require_utils.cn("absolute inset-y-0 z-20 w-4", "hidden group-hover/sidebar:block", "-translate-x-1/2 transition-all ease-linear", "after:absolute after:inset-y-0 after:left-1/2 after:w-[2px]", "hover:after:bg-[var(--sidebar-border)]", "cursor-col-resize", side === "left" ? "-right-2" : "-left-2", className),
562
+ ...props
563
+ });
564
+ });
565
+ SidebarRail.displayName = "SidebarGlass.Rail";
566
+ const SidebarInset = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
567
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("main", {
568
+ ref,
569
+ "data-sidebar": "inset",
570
+ className: require_utils.cn("flex flex-1 flex-col", "min-h-screen", className),
571
+ ...props,
572
+ children
573
+ });
574
+ });
575
+ SidebarInset.displayName = "SidebarGlass.Inset";
576
+ const SidebarTrigger = (0, react.forwardRef)(({ asChild = false, className, children, ...props }, ref) => {
577
+ const { toggleSidebar } = useSidebar();
578
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(asChild ? __radix_ui_react_slot.Slot : "button", {
579
+ ref,
580
+ "data-sidebar": "trigger",
581
+ onClick: toggleSidebar,
582
+ className: require_utils.cn("inline-flex items-center justify-center", "h-9 w-9 rounded-lg", "text-sm font-medium", "transition-colors", "text-[var(--sidebar-foreground)]/60", "hover:bg-[var(--sidebar-accent)]", "hover:text-[var(--sidebar-accent-foreground)]", "focus-visible:outline-none focus-visible:ring-2", "focus-visible:ring-[var(--sidebar-ring)]", "disabled:pointer-events-none disabled:opacity-50", className),
583
+ ...props,
584
+ children: [children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.PanelLeft, { className: "h-6 w-6" }), !children && /* @__PURE__ */ (0, react_jsx_runtime.jsx)("span", {
585
+ className: "sr-only",
586
+ children: "Toggle Sidebar"
587
+ })]
588
+ });
589
+ });
590
+ SidebarTrigger.displayName = "SidebarGlass.Trigger";
591
+ const SidebarSeparator = (0, react.forwardRef)(({ className, ...props }, ref) => {
592
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("hr", {
593
+ ref,
594
+ "data-sidebar": "separator",
595
+ className: require_utils.cn("mx-4 my-2 h-px border-0", className),
596
+ style: { background: "var(--sidebar-border)" },
597
+ ...props
598
+ });
599
+ });
600
+ SidebarSeparator.displayName = "SidebarGlass.Separator";
601
+ const SidebarGroup = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
602
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
603
+ ref,
604
+ "data-sidebar": "group",
605
+ className: require_utils.cn("flex flex-col gap-2 p-2", className),
606
+ ...props,
607
+ children
608
+ });
609
+ });
610
+ SidebarGroup.displayName = "SidebarGlass.Group";
611
+ const SidebarGroupLabel = (0, react.forwardRef)(({ children, asChild = false, className, ...props }, ref) => {
612
+ const { state } = useSidebar();
613
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(asChild ? __radix_ui_react_slot.Slot : "div", {
614
+ ref,
615
+ "data-sidebar": "group-label",
616
+ "data-state": state,
617
+ className: require_utils.cn("flex h-8 shrink-0 items-center px-2", "text-xs font-medium text-[var(--sidebar-foreground)]/60", "transition-[margin,opacity] duration-200 ease-linear", "group-data-[state=collapsed]/sidebar:h-0 group-data-[state=collapsed]/sidebar:overflow-hidden", "group-data-[state=collapsed]/sidebar:opacity-0", className),
618
+ ...props,
619
+ children
620
+ });
621
+ });
622
+ SidebarGroupLabel.displayName = "SidebarGlass.GroupLabel";
623
+ const SidebarGroupAction = (0, react.forwardRef)(({ asChild = false, className, ...props }, ref) => {
624
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(asChild ? __radix_ui_react_slot.Slot : "button", {
625
+ ref,
626
+ "data-sidebar": "group-action",
627
+ className: require_utils.cn("absolute right-2 top-2.5", "flex aspect-square w-5 items-center justify-center", "rounded-md p-0 text-[var(--sidebar-foreground)]/60", "ring-[var(--sidebar-ring)]", "transition-transform hover:bg-[var(--sidebar-accent)]", "hover:text-[var(--sidebar-foreground)]", "focus-visible:outline-none focus-visible:ring-2", "[&>svg]:size-4 [&>svg]:shrink-0", "group-data-[state=collapsed]/sidebar:hidden", "after:absolute after:-inset-2 after:md:hidden", className),
628
+ ...props
629
+ });
630
+ });
631
+ SidebarGroupAction.displayName = "SidebarGlass.GroupAction";
632
+ const SidebarGroupContent = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
633
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
634
+ ref,
635
+ "data-sidebar": "group-content",
636
+ className: require_utils.cn("flex flex-col gap-1", className),
637
+ ...props,
638
+ children
639
+ });
640
+ });
641
+ SidebarGroupContent.displayName = "SidebarGlass.GroupContent";
642
+ const SidebarMenu = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
643
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
644
+ ref,
645
+ "data-sidebar": "menu",
646
+ className: require_utils.cn("flex w-full flex-col gap-1", className),
647
+ ...props,
648
+ children
649
+ });
650
+ });
651
+ SidebarMenu.displayName = "SidebarGlass.Menu";
652
+ const SidebarMenuItem = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
653
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
654
+ ref,
655
+ "data-sidebar": "menu-item",
656
+ className: require_utils.cn("group/menu-item relative text-[var(--sidebar-foreground)]/60", className),
657
+ ...props,
658
+ children
659
+ });
660
+ });
661
+ SidebarMenuItem.displayName = "SidebarGlass.MenuItem";
662
+ var menuButtonSizeClasses = {
663
+ default: "h-8 text-sm",
664
+ sm: "h-7 text-xs",
665
+ lg: "h-10 text-sm group-data-[state=collapsed]/sidebar:!p-0"
666
+ };
667
+ const SidebarMenuButton = (0, react.forwardRef)(({ asChild = false, isActive = false, tooltip, size = "default", variant = "default", className, children, ...props }, ref) => {
668
+ const { state, isMobile } = useSidebar();
669
+ const button = /* @__PURE__ */ (0, react_jsx_runtime.jsx)(asChild ? __radix_ui_react_slot.Slot : "button", {
670
+ ref,
671
+ "data-sidebar": "menu-button",
672
+ "data-active": isActive,
673
+ "data-size": size,
674
+ className: require_utils.cn("peer/menu-button flex w-full items-center gap-2", "overflow-hidden rounded-md px-2", "ring-[var(--sidebar-ring)]", "transition-[width,height,padding] duration-200 ease-linear", "focus-visible:outline-none focus-visible:ring-2", "active:bg-[var(--sidebar-accent)] active:text-[var(--sidebar-accent-foreground)]", "disabled:pointer-events-none disabled:opacity-50", "aria-disabled:pointer-events-none aria-disabled:opacity-50", "[&>span:last-child]:truncate", "[&>svg]:size-4 [&>svg]:shrink-0", menuButtonSizeClasses[size], variant === "default" && ["hover:bg-[var(--sidebar-accent)] hover:text-[var(--sidebar-accent-foreground)]"], variant === "outline" && [
675
+ "bg-transparent shadow-none",
676
+ "hover:bg-[var(--sidebar-accent)] hover:text-[var(--sidebar-accent-foreground)]",
677
+ "hover:shadow-[0_0_0_1px_var(--sidebar-border)]"
678
+ ], isActive && ["bg-[var(--sidebar-primary)] text-[var(--sidebar-primary-foreground)]", "hover:bg-[var(--sidebar-primary)] hover:text-[var(--sidebar-primary-foreground)]"], "group-data-[state=collapsed]/sidebar:w-8 group-data-[state=collapsed]/sidebar:!px-0", "group-data-[state=collapsed]/sidebar:justify-center", className),
679
+ ...props,
680
+ children
681
+ });
682
+ if (!tooltip || isMobile || state === "expanded") return button;
683
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.TooltipGlassSimple, {
684
+ content: typeof tooltip === "string" ? tooltip : String(tooltip),
685
+ side: "right",
686
+ children: button
687
+ });
688
+ });
689
+ SidebarMenuButton.displayName = "SidebarGlass.MenuButton";
690
+ const SidebarMenuAction = (0, react.forwardRef)(({ asChild = false, showOnHover = false, className, ...props }, ref) => {
691
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(asChild ? __radix_ui_react_slot.Slot : "button", {
692
+ ref,
693
+ "data-sidebar": "menu-action",
694
+ className: require_utils.cn("absolute right-1 top-1.5", "flex aspect-square w-5 items-center justify-center", "rounded-md p-0 text-[var(--sidebar-foreground)]/60", "ring-[var(--sidebar-ring)]", "transition-transform hover:bg-[var(--sidebar-accent)]", "hover:text-[var(--sidebar-foreground)]", "focus-visible:outline-none focus-visible:ring-2", "[&>svg]:size-4 [&>svg]:shrink-0", "group-data-[state=collapsed]/sidebar:hidden", showOnHover && "peer-hover/menu-button:opacity-100 group-focus-within/menu-item:opacity-100", showOnHover && "data-[state=open]:opacity-100 md:opacity-0", "after:absolute after:-inset-2 after:md:hidden", className),
695
+ ...props
696
+ });
697
+ });
698
+ SidebarMenuAction.displayName = "SidebarGlass.MenuAction";
699
+ const SidebarMenuBadge = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
700
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
701
+ ref,
702
+ "data-sidebar": "menu-badge",
703
+ className: require_utils.cn("pointer-events-none absolute right-1 flex h-5 min-w-5", "select-none items-center justify-center", "rounded-md px-1 text-xs font-medium tabular-nums", "text-[var(--sidebar-foreground)]/60", "group-data-[state=collapsed]/sidebar:hidden", className),
704
+ ...props,
705
+ children
706
+ });
707
+ });
708
+ SidebarMenuBadge.displayName = "SidebarGlass.MenuBadge";
709
+ const SidebarMenuSkeleton = (0, react.forwardRef)(({ showIcon = false, className, ...props }, ref) => {
710
+ const width = "70%";
711
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
712
+ ref,
713
+ "data-sidebar": "menu-skeleton",
714
+ className: require_utils.cn("flex h-8 items-center gap-2 rounded-md px-2", className),
715
+ ...props,
716
+ children: [showIcon && /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.SkeletonGlass, { className: "size-4 rounded-md" }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.SkeletonGlass, {
717
+ className: "h-4 max-w-[var(--skeleton-width)] flex-1",
718
+ style: { "--skeleton-width": width }
719
+ })]
720
+ });
721
+ });
722
+ SidebarMenuSkeleton.displayName = "SidebarGlass.MenuSkeleton";
723
+ var SidebarMenuSubContext = (0, react.createContext)(null);
724
+ const SidebarMenuSub = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
725
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SidebarMenuSubContext.Provider, {
726
+ value: { open: true },
727
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("ul", {
728
+ ref,
729
+ "data-sidebar": "menu-sub",
730
+ className: require_utils.cn("flex min-w-0 flex-col gap-1", "mx-3.5 border-l border-[var(--sidebar-border)] px-2.5 py-0.5", "group-data-[state=collapsed]/sidebar:hidden", className),
731
+ ...props,
732
+ children
733
+ })
734
+ });
735
+ });
736
+ SidebarMenuSub.displayName = "SidebarGlass.MenuSub";
737
+ const SidebarMenuSubItem = (0, react.forwardRef)(({ children, className, ...props }, ref) => {
738
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("li", {
739
+ ref,
740
+ "data-sidebar": "menu-sub-item",
741
+ className: require_utils.cn(className),
742
+ ...props,
743
+ children
744
+ });
745
+ });
746
+ SidebarMenuSubItem.displayName = "SidebarGlass.MenuSubItem";
747
+ const SidebarMenuSubButton = (0, react.forwardRef)(({ asChild = false, isActive = false, size = "md", className, ...props }, ref) => {
748
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(asChild ? __radix_ui_react_slot.Slot : "a", {
749
+ ref,
750
+ "data-sidebar": "menu-sub-button",
751
+ "data-active": isActive,
752
+ "data-size": size,
753
+ className: require_utils.cn("flex min-w-0 items-center gap-2", "-ml-px rounded-md border-l border-transparent", "text-[var(--sidebar-foreground)]/60", "ring-[var(--sidebar-ring)]", "transition-colors", "hover:border-[var(--sidebar-border)]", "hover:bg-[var(--sidebar-accent)]", "hover:text-[var(--sidebar-accent-foreground)]", "focus-visible:outline-none focus-visible:ring-2", "active:bg-[var(--sidebar-accent)] active:text-[var(--sidebar-accent-foreground)]", "disabled:pointer-events-none disabled:opacity-50", "[&>span:last-child]:truncate", "[&>svg]:size-4 [&>svg]:shrink-0", size === "sm" && "h-7 px-2 text-xs", size === "md" && "h-8 px-2 text-sm", isActive && ["border-[var(--sidebar-primary)]", "text-[var(--sidebar-foreground)]"], className),
754
+ ...props
755
+ });
756
+ });
757
+ SidebarMenuSubButton.displayName = "SidebarGlass.MenuSubButton";
758
+ const SidebarGlass = {
759
+ Provider: SidebarProvider,
760
+ Root: SidebarRoot,
761
+ Header: SidebarHeader,
762
+ Content: SidebarContent,
763
+ Footer: SidebarFooter,
764
+ Rail: SidebarRail,
765
+ Inset: SidebarInset,
766
+ Trigger: SidebarTrigger,
767
+ Separator: SidebarSeparator,
768
+ Group: SidebarGroup,
769
+ GroupLabel: SidebarGroupLabel,
770
+ GroupAction: SidebarGroupAction,
771
+ GroupContent: SidebarGroupContent,
772
+ Menu: SidebarMenu,
773
+ MenuItem: SidebarMenuItem,
774
+ MenuButton: SidebarMenuButton,
775
+ MenuAction: SidebarMenuAction,
776
+ MenuBadge: SidebarMenuBadge,
777
+ MenuSkeleton: SidebarMenuSkeleton,
778
+ MenuSub: SidebarMenuSub,
779
+ MenuSubItem: SidebarMenuSubItem,
780
+ MenuSubButton: SidebarMenuSubButton
781
+ };
373
782
  function _extends$1() {
374
783
  return _extends$1 = Object.assign ? Object.assign.bind() : function(n) {
375
784
  for (var e = 1; e < arguments.length; e++) {
@@ -705,6 +1114,1245 @@ function Legend(outsideProps) {
705
1114
  }))), legendPortal);
706
1115
  }
707
1116
  Legend.displayName = "Legend";
1117
+ var Primitive = [
1118
+ "a",
1119
+ "button",
1120
+ "div",
1121
+ "form",
1122
+ "h2",
1123
+ "h3",
1124
+ "img",
1125
+ "input",
1126
+ "label",
1127
+ "li",
1128
+ "nav",
1129
+ "ol",
1130
+ "p",
1131
+ "select",
1132
+ "span",
1133
+ "svg",
1134
+ "ul"
1135
+ ].reduce((primitive, node) => {
1136
+ const Slot$3 = (0, __radix_ui_react_slot.createSlot)(`Primitive.${node}`);
1137
+ const Node = react.forwardRef((props, forwardedRef) => {
1138
+ const { asChild, ...primitiveProps } = props;
1139
+ const Comp = asChild ? Slot$3 : node;
1140
+ if (typeof window !== "undefined") window[Symbol.for("radix-ui")] = true;
1141
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Comp, {
1142
+ ...primitiveProps,
1143
+ ref: forwardedRef
1144
+ });
1145
+ });
1146
+ Node.displayName = `Primitive.${node}`;
1147
+ return {
1148
+ ...primitive,
1149
+ [node]: Node
1150
+ };
1151
+ }, {});
1152
+ function createContextScope(scopeName, createContextScopeDeps = []) {
1153
+ let defaultContexts = [];
1154
+ function createContext3(rootComponentName, defaultContext) {
1155
+ const BaseContext = react.createContext(defaultContext);
1156
+ const index = defaultContexts.length;
1157
+ defaultContexts = [...defaultContexts, defaultContext];
1158
+ const Provider = (props) => {
1159
+ const { scope, children, ...context } = props;
1160
+ const Context = scope?.[scopeName]?.[index] || BaseContext;
1161
+ const value = react.useMemo(() => context, Object.values(context));
1162
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Context.Provider, {
1163
+ value,
1164
+ children
1165
+ });
1166
+ };
1167
+ Provider.displayName = rootComponentName + "Provider";
1168
+ function useContext2(consumerName, scope) {
1169
+ const Context = scope?.[scopeName]?.[index] || BaseContext;
1170
+ const context = react.useContext(Context);
1171
+ if (context) return context;
1172
+ if (defaultContext !== void 0) return defaultContext;
1173
+ throw new Error(`\`${consumerName}\` must be used within \`${rootComponentName}\``);
1174
+ }
1175
+ return [Provider, useContext2];
1176
+ }
1177
+ const createScope = () => {
1178
+ const scopeContexts = defaultContexts.map((defaultContext) => {
1179
+ return react.createContext(defaultContext);
1180
+ });
1181
+ return function useScope(scope) {
1182
+ const contexts = scope?.[scopeName] || scopeContexts;
1183
+ return react.useMemo(() => ({ [`__scope${scopeName}`]: {
1184
+ ...scope,
1185
+ [scopeName]: contexts
1186
+ } }), [scope, contexts]);
1187
+ };
1188
+ };
1189
+ createScope.scopeName = scopeName;
1190
+ return [createContext3, composeContextScopes(createScope, ...createContextScopeDeps)];
1191
+ }
1192
+ function composeContextScopes(...scopes) {
1193
+ const baseScope = scopes[0];
1194
+ if (scopes.length === 1) return baseScope;
1195
+ const createScope = () => {
1196
+ const scopeHooks = scopes.map((createScope2) => ({
1197
+ useScope: createScope2(),
1198
+ scopeName: createScope2.scopeName
1199
+ }));
1200
+ return function useComposedScopes(overrideScopes) {
1201
+ const nextScopes = scopeHooks.reduce((nextScopes2, { useScope, scopeName }) => {
1202
+ const currentScope = useScope(overrideScopes)[`__scope${scopeName}`];
1203
+ return {
1204
+ ...nextScopes2,
1205
+ ...currentScope
1206
+ };
1207
+ }, {});
1208
+ return react.useMemo(() => ({ [`__scope${baseScope.scopeName}`]: nextScopes }), [nextScopes]);
1209
+ };
1210
+ };
1211
+ createScope.scopeName = baseScope.scopeName;
1212
+ return createScope;
1213
+ }
1214
+ function useStateMachine(initialState, machine) {
1215
+ return react.useReducer((state, event) => {
1216
+ return machine[state][event] ?? state;
1217
+ }, initialState);
1218
+ }
1219
+ var SCROLL_AREA_NAME = "ScrollArea";
1220
+ var [createScrollAreaContext, createScrollAreaScope] = createContextScope(SCROLL_AREA_NAME);
1221
+ var [ScrollAreaProvider, useScrollAreaContext] = createScrollAreaContext(SCROLL_AREA_NAME);
1222
+ var ScrollArea$1 = react.forwardRef((props, forwardedRef) => {
1223
+ const { __scopeScrollArea, type = "hover", dir, scrollHideDelay = 600, ...scrollAreaProps } = props;
1224
+ const [scrollArea, setScrollArea] = react.useState(null);
1225
+ const [viewport, setViewport] = react.useState(null);
1226
+ const [content, setContent] = react.useState(null);
1227
+ const [scrollbarX, setScrollbarX] = react.useState(null);
1228
+ const [scrollbarY, setScrollbarY] = react.useState(null);
1229
+ const [cornerWidth, setCornerWidth] = react.useState(0);
1230
+ const [cornerHeight, setCornerHeight] = react.useState(0);
1231
+ const [scrollbarXEnabled, setScrollbarXEnabled] = react.useState(false);
1232
+ const [scrollbarYEnabled, setScrollbarYEnabled] = react.useState(false);
1233
+ const composedRefs = require_trust_score_card_glass.useComposedRefs(forwardedRef, (node) => setScrollArea(node));
1234
+ const direction = require_trust_score_card_glass.useDirection(dir);
1235
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaProvider, {
1236
+ scope: __scopeScrollArea,
1237
+ type,
1238
+ dir: direction,
1239
+ scrollHideDelay,
1240
+ scrollArea,
1241
+ viewport,
1242
+ onViewportChange: setViewport,
1243
+ content,
1244
+ onContentChange: setContent,
1245
+ scrollbarX,
1246
+ onScrollbarXChange: setScrollbarX,
1247
+ scrollbarXEnabled,
1248
+ onScrollbarXEnabledChange: setScrollbarXEnabled,
1249
+ scrollbarY,
1250
+ onScrollbarYChange: setScrollbarY,
1251
+ scrollbarYEnabled,
1252
+ onScrollbarYEnabledChange: setScrollbarYEnabled,
1253
+ onCornerWidthChange: setCornerWidth,
1254
+ onCornerHeightChange: setCornerHeight,
1255
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Primitive.div, {
1256
+ dir: direction,
1257
+ ...scrollAreaProps,
1258
+ ref: composedRefs,
1259
+ style: {
1260
+ position: "relative",
1261
+ ["--radix-scroll-area-corner-width"]: cornerWidth + "px",
1262
+ ["--radix-scroll-area-corner-height"]: cornerHeight + "px",
1263
+ ...props.style
1264
+ }
1265
+ })
1266
+ });
1267
+ });
1268
+ ScrollArea$1.displayName = SCROLL_AREA_NAME;
1269
+ var VIEWPORT_NAME = "ScrollAreaViewport";
1270
+ var ScrollAreaViewport = react.forwardRef((props, forwardedRef) => {
1271
+ const { __scopeScrollArea, children, nonce, ...viewportProps } = props;
1272
+ const context = useScrollAreaContext(VIEWPORT_NAME, __scopeScrollArea);
1273
+ const composedRefs = require_trust_score_card_glass.useComposedRefs(forwardedRef, react.useRef(null), context.onViewportChange);
1274
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(react_jsx_runtime.Fragment, { children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("style", {
1275
+ dangerouslySetInnerHTML: { __html: `[data-radix-scroll-area-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-scroll-area-viewport]::-webkit-scrollbar{display:none}` },
1276
+ nonce
1277
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Primitive.div, {
1278
+ "data-radix-scroll-area-viewport": "",
1279
+ ...viewportProps,
1280
+ ref: composedRefs,
1281
+ style: {
1282
+ overflowX: context.scrollbarXEnabled ? "scroll" : "hidden",
1283
+ overflowY: context.scrollbarYEnabled ? "scroll" : "hidden",
1284
+ ...props.style
1285
+ },
1286
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
1287
+ ref: context.onContentChange,
1288
+ style: {
1289
+ minWidth: "100%",
1290
+ display: "table"
1291
+ },
1292
+ children
1293
+ })
1294
+ })] });
1295
+ });
1296
+ ScrollAreaViewport.displayName = VIEWPORT_NAME;
1297
+ var SCROLLBAR_NAME = "ScrollAreaScrollbar";
1298
+ var ScrollAreaScrollbar = react.forwardRef((props, forwardedRef) => {
1299
+ const { forceMount, ...scrollbarProps } = props;
1300
+ const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);
1301
+ const { onScrollbarXEnabledChange, onScrollbarYEnabledChange } = context;
1302
+ const isHorizontal = props.orientation === "horizontal";
1303
+ react.useEffect(() => {
1304
+ isHorizontal ? onScrollbarXEnabledChange(true) : onScrollbarYEnabledChange(true);
1305
+ return () => {
1306
+ isHorizontal ? onScrollbarXEnabledChange(false) : onScrollbarYEnabledChange(false);
1307
+ };
1308
+ }, [
1309
+ isHorizontal,
1310
+ onScrollbarXEnabledChange,
1311
+ onScrollbarYEnabledChange
1312
+ ]);
1313
+ return context.type === "hover" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarHover, {
1314
+ ...scrollbarProps,
1315
+ ref: forwardedRef,
1316
+ forceMount
1317
+ }) : context.type === "scroll" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarScroll, {
1318
+ ...scrollbarProps,
1319
+ ref: forwardedRef,
1320
+ forceMount
1321
+ }) : context.type === "auto" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarAuto, {
1322
+ ...scrollbarProps,
1323
+ ref: forwardedRef,
1324
+ forceMount
1325
+ }) : context.type === "always" ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarVisible, {
1326
+ ...scrollbarProps,
1327
+ ref: forwardedRef
1328
+ }) : null;
1329
+ });
1330
+ ScrollAreaScrollbar.displayName = SCROLLBAR_NAME;
1331
+ var ScrollAreaScrollbarHover = react.forwardRef((props, forwardedRef) => {
1332
+ const { forceMount, ...scrollbarProps } = props;
1333
+ const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);
1334
+ const [visible, setVisible] = react.useState(false);
1335
+ react.useEffect(() => {
1336
+ const scrollArea = context.scrollArea;
1337
+ let hideTimer = 0;
1338
+ if (scrollArea) {
1339
+ const handlePointerEnter = () => {
1340
+ window.clearTimeout(hideTimer);
1341
+ setVisible(true);
1342
+ };
1343
+ const handlePointerLeave = () => {
1344
+ hideTimer = window.setTimeout(() => setVisible(false), context.scrollHideDelay);
1345
+ };
1346
+ scrollArea.addEventListener("pointerenter", handlePointerEnter);
1347
+ scrollArea.addEventListener("pointerleave", handlePointerLeave);
1348
+ return () => {
1349
+ window.clearTimeout(hideTimer);
1350
+ scrollArea.removeEventListener("pointerenter", handlePointerEnter);
1351
+ scrollArea.removeEventListener("pointerleave", handlePointerLeave);
1352
+ };
1353
+ }
1354
+ }, [context.scrollArea, context.scrollHideDelay]);
1355
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.Presence, {
1356
+ present: forceMount || visible,
1357
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarAuto, {
1358
+ "data-state": visible ? "visible" : "hidden",
1359
+ ...scrollbarProps,
1360
+ ref: forwardedRef
1361
+ })
1362
+ });
1363
+ });
1364
+ var ScrollAreaScrollbarScroll = react.forwardRef((props, forwardedRef) => {
1365
+ const { forceMount, ...scrollbarProps } = props;
1366
+ const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);
1367
+ const isHorizontal = props.orientation === "horizontal";
1368
+ const debounceScrollEnd = useDebounceCallback(() => send("SCROLL_END"), 100);
1369
+ const [state, send] = useStateMachine("hidden", {
1370
+ hidden: { SCROLL: "scrolling" },
1371
+ scrolling: {
1372
+ SCROLL_END: "idle",
1373
+ POINTER_ENTER: "interacting"
1374
+ },
1375
+ interacting: {
1376
+ SCROLL: "interacting",
1377
+ POINTER_LEAVE: "idle"
1378
+ },
1379
+ idle: {
1380
+ HIDE: "hidden",
1381
+ SCROLL: "scrolling",
1382
+ POINTER_ENTER: "interacting"
1383
+ }
1384
+ });
1385
+ react.useEffect(() => {
1386
+ if (state === "idle") {
1387
+ const hideTimer = window.setTimeout(() => send("HIDE"), context.scrollHideDelay);
1388
+ return () => window.clearTimeout(hideTimer);
1389
+ }
1390
+ }, [
1391
+ state,
1392
+ context.scrollHideDelay,
1393
+ send
1394
+ ]);
1395
+ react.useEffect(() => {
1396
+ const viewport = context.viewport;
1397
+ const scrollDirection = isHorizontal ? "scrollLeft" : "scrollTop";
1398
+ if (viewport) {
1399
+ let prevScrollPos = viewport[scrollDirection];
1400
+ const handleScroll = () => {
1401
+ const scrollPos = viewport[scrollDirection];
1402
+ if (prevScrollPos !== scrollPos) {
1403
+ send("SCROLL");
1404
+ debounceScrollEnd();
1405
+ }
1406
+ prevScrollPos = scrollPos;
1407
+ };
1408
+ viewport.addEventListener("scroll", handleScroll);
1409
+ return () => viewport.removeEventListener("scroll", handleScroll);
1410
+ }
1411
+ }, [
1412
+ context.viewport,
1413
+ isHorizontal,
1414
+ send,
1415
+ debounceScrollEnd
1416
+ ]);
1417
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.Presence, {
1418
+ present: forceMount || state !== "hidden",
1419
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarVisible, {
1420
+ "data-state": state === "hidden" ? "hidden" : "visible",
1421
+ ...scrollbarProps,
1422
+ ref: forwardedRef,
1423
+ onPointerEnter: require_trust_score_card_glass.composeEventHandlers(props.onPointerEnter, () => send("POINTER_ENTER")),
1424
+ onPointerLeave: require_trust_score_card_glass.composeEventHandlers(props.onPointerLeave, () => send("POINTER_LEAVE"))
1425
+ })
1426
+ });
1427
+ });
1428
+ var ScrollAreaScrollbarAuto = react.forwardRef((props, forwardedRef) => {
1429
+ const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);
1430
+ const { forceMount, ...scrollbarProps } = props;
1431
+ const [visible, setVisible] = react.useState(false);
1432
+ const isHorizontal = props.orientation === "horizontal";
1433
+ const handleResize = useDebounceCallback(() => {
1434
+ if (context.viewport) {
1435
+ const isOverflowX = context.viewport.offsetWidth < context.viewport.scrollWidth;
1436
+ const isOverflowY = context.viewport.offsetHeight < context.viewport.scrollHeight;
1437
+ setVisible(isHorizontal ? isOverflowX : isOverflowY);
1438
+ }
1439
+ }, 10);
1440
+ useResizeObserver(context.viewport, handleResize);
1441
+ useResizeObserver(context.content, handleResize);
1442
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.Presence, {
1443
+ present: forceMount || visible,
1444
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarVisible, {
1445
+ "data-state": visible ? "visible" : "hidden",
1446
+ ...scrollbarProps,
1447
+ ref: forwardedRef
1448
+ })
1449
+ });
1450
+ });
1451
+ var ScrollAreaScrollbarVisible = react.forwardRef((props, forwardedRef) => {
1452
+ const { orientation = "vertical", ...scrollbarProps } = props;
1453
+ const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);
1454
+ const thumbRef = react.useRef(null);
1455
+ const pointerOffsetRef = react.useRef(0);
1456
+ const [sizes, setSizes] = react.useState({
1457
+ content: 0,
1458
+ viewport: 0,
1459
+ scrollbar: {
1460
+ size: 0,
1461
+ paddingStart: 0,
1462
+ paddingEnd: 0
1463
+ }
1464
+ });
1465
+ const thumbRatio = getThumbRatio(sizes.viewport, sizes.content);
1466
+ const commonProps = {
1467
+ ...scrollbarProps,
1468
+ sizes,
1469
+ onSizesChange: setSizes,
1470
+ hasThumb: Boolean(thumbRatio > 0 && thumbRatio < 1),
1471
+ onThumbChange: (thumb) => thumbRef.current = thumb,
1472
+ onThumbPointerUp: () => pointerOffsetRef.current = 0,
1473
+ onThumbPointerDown: (pointerPos) => pointerOffsetRef.current = pointerPos
1474
+ };
1475
+ function getScrollPosition(pointerPos, dir) {
1476
+ return getScrollPositionFromPointer(pointerPos, pointerOffsetRef.current, sizes, dir);
1477
+ }
1478
+ if (orientation === "horizontal") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarX, {
1479
+ ...commonProps,
1480
+ ref: forwardedRef,
1481
+ onThumbPositionChange: () => {
1482
+ if (context.viewport && thumbRef.current) {
1483
+ const scrollPos = context.viewport.scrollLeft;
1484
+ const offset = getThumbOffsetFromScroll(scrollPos, sizes, context.dir);
1485
+ thumbRef.current.style.transform = `translate3d(${offset}px, 0, 0)`;
1486
+ }
1487
+ },
1488
+ onWheelScroll: (scrollPos) => {
1489
+ if (context.viewport) context.viewport.scrollLeft = scrollPos;
1490
+ },
1491
+ onDragScroll: (pointerPos) => {
1492
+ if (context.viewport) context.viewport.scrollLeft = getScrollPosition(pointerPos, context.dir);
1493
+ }
1494
+ });
1495
+ if (orientation === "vertical") return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarY, {
1496
+ ...commonProps,
1497
+ ref: forwardedRef,
1498
+ onThumbPositionChange: () => {
1499
+ if (context.viewport && thumbRef.current) {
1500
+ const scrollPos = context.viewport.scrollTop;
1501
+ const offset = getThumbOffsetFromScroll(scrollPos, sizes);
1502
+ thumbRef.current.style.transform = `translate3d(0, ${offset}px, 0)`;
1503
+ }
1504
+ },
1505
+ onWheelScroll: (scrollPos) => {
1506
+ if (context.viewport) context.viewport.scrollTop = scrollPos;
1507
+ },
1508
+ onDragScroll: (pointerPos) => {
1509
+ if (context.viewport) context.viewport.scrollTop = getScrollPosition(pointerPos);
1510
+ }
1511
+ });
1512
+ return null;
1513
+ });
1514
+ var ScrollAreaScrollbarX = react.forwardRef((props, forwardedRef) => {
1515
+ const { sizes, onSizesChange, ...scrollbarProps } = props;
1516
+ const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);
1517
+ const [computedStyle, setComputedStyle] = react.useState();
1518
+ const ref = react.useRef(null);
1519
+ const composeRefs = require_trust_score_card_glass.useComposedRefs(forwardedRef, ref, context.onScrollbarXChange);
1520
+ react.useEffect(() => {
1521
+ if (ref.current) setComputedStyle(getComputedStyle(ref.current));
1522
+ }, [ref]);
1523
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarImpl, {
1524
+ "data-orientation": "horizontal",
1525
+ ...scrollbarProps,
1526
+ ref: composeRefs,
1527
+ sizes,
1528
+ style: {
1529
+ bottom: 0,
1530
+ left: context.dir === "rtl" ? "var(--radix-scroll-area-corner-width)" : 0,
1531
+ right: context.dir === "ltr" ? "var(--radix-scroll-area-corner-width)" : 0,
1532
+ ["--radix-scroll-area-thumb-width"]: getThumbSize(sizes) + "px",
1533
+ ...props.style
1534
+ },
1535
+ onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.x),
1536
+ onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.x),
1537
+ onWheelScroll: (event, maxScrollPos) => {
1538
+ if (context.viewport) {
1539
+ const scrollPos = context.viewport.scrollLeft + event.deltaX;
1540
+ props.onWheelScroll(scrollPos);
1541
+ if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) event.preventDefault();
1542
+ }
1543
+ },
1544
+ onResize: () => {
1545
+ if (ref.current && context.viewport && computedStyle) onSizesChange({
1546
+ content: context.viewport.scrollWidth,
1547
+ viewport: context.viewport.offsetWidth,
1548
+ scrollbar: {
1549
+ size: ref.current.clientWidth,
1550
+ paddingStart: toInt(computedStyle.paddingLeft),
1551
+ paddingEnd: toInt(computedStyle.paddingRight)
1552
+ }
1553
+ });
1554
+ }
1555
+ });
1556
+ });
1557
+ var ScrollAreaScrollbarY = react.forwardRef((props, forwardedRef) => {
1558
+ const { sizes, onSizesChange, ...scrollbarProps } = props;
1559
+ const context = useScrollAreaContext(SCROLLBAR_NAME, props.__scopeScrollArea);
1560
+ const [computedStyle, setComputedStyle] = react.useState();
1561
+ const ref = react.useRef(null);
1562
+ const composeRefs = require_trust_score_card_glass.useComposedRefs(forwardedRef, ref, context.onScrollbarYChange);
1563
+ react.useEffect(() => {
1564
+ if (ref.current) setComputedStyle(getComputedStyle(ref.current));
1565
+ }, [ref]);
1566
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbarImpl, {
1567
+ "data-orientation": "vertical",
1568
+ ...scrollbarProps,
1569
+ ref: composeRefs,
1570
+ sizes,
1571
+ style: {
1572
+ top: 0,
1573
+ right: context.dir === "ltr" ? 0 : void 0,
1574
+ left: context.dir === "rtl" ? 0 : void 0,
1575
+ bottom: "var(--radix-scroll-area-corner-height)",
1576
+ ["--radix-scroll-area-thumb-height"]: getThumbSize(sizes) + "px",
1577
+ ...props.style
1578
+ },
1579
+ onThumbPointerDown: (pointerPos) => props.onThumbPointerDown(pointerPos.y),
1580
+ onDragScroll: (pointerPos) => props.onDragScroll(pointerPos.y),
1581
+ onWheelScroll: (event, maxScrollPos) => {
1582
+ if (context.viewport) {
1583
+ const scrollPos = context.viewport.scrollTop + event.deltaY;
1584
+ props.onWheelScroll(scrollPos);
1585
+ if (isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos)) event.preventDefault();
1586
+ }
1587
+ },
1588
+ onResize: () => {
1589
+ if (ref.current && context.viewport && computedStyle) onSizesChange({
1590
+ content: context.viewport.scrollHeight,
1591
+ viewport: context.viewport.offsetHeight,
1592
+ scrollbar: {
1593
+ size: ref.current.clientHeight,
1594
+ paddingStart: toInt(computedStyle.paddingTop),
1595
+ paddingEnd: toInt(computedStyle.paddingBottom)
1596
+ }
1597
+ });
1598
+ }
1599
+ });
1600
+ });
1601
+ var [ScrollbarProvider, useScrollbarContext] = createScrollAreaContext(SCROLLBAR_NAME);
1602
+ var ScrollAreaScrollbarImpl = react.forwardRef((props, forwardedRef) => {
1603
+ const { __scopeScrollArea, sizes, hasThumb, onThumbChange, onThumbPointerUp, onThumbPointerDown, onThumbPositionChange, onDragScroll, onWheelScroll, onResize, ...scrollbarProps } = props;
1604
+ const context = useScrollAreaContext(SCROLLBAR_NAME, __scopeScrollArea);
1605
+ const [scrollbar, setScrollbar] = react.useState(null);
1606
+ const composeRefs = require_trust_score_card_glass.useComposedRefs(forwardedRef, (node) => setScrollbar(node));
1607
+ const rectRef = react.useRef(null);
1608
+ const prevWebkitUserSelectRef = react.useRef("");
1609
+ const viewport = context.viewport;
1610
+ const maxScrollPos = sizes.content - sizes.viewport;
1611
+ const handleWheelScroll = require_trust_score_card_glass.useCallbackRef(onWheelScroll);
1612
+ const handleThumbPositionChange = require_trust_score_card_glass.useCallbackRef(onThumbPositionChange);
1613
+ const handleResize = useDebounceCallback(onResize, 10);
1614
+ function handleDragScroll(event) {
1615
+ if (rectRef.current) onDragScroll({
1616
+ x: event.clientX - rectRef.current.left,
1617
+ y: event.clientY - rectRef.current.top
1618
+ });
1619
+ }
1620
+ react.useEffect(() => {
1621
+ const handleWheel = (event) => {
1622
+ const element = event.target;
1623
+ if (scrollbar?.contains(element)) handleWheelScroll(event, maxScrollPos);
1624
+ };
1625
+ document.addEventListener("wheel", handleWheel, { passive: false });
1626
+ return () => document.removeEventListener("wheel", handleWheel, { passive: false });
1627
+ }, [
1628
+ viewport,
1629
+ scrollbar,
1630
+ maxScrollPos,
1631
+ handleWheelScroll
1632
+ ]);
1633
+ react.useEffect(handleThumbPositionChange, [sizes, handleThumbPositionChange]);
1634
+ useResizeObserver(scrollbar, handleResize);
1635
+ useResizeObserver(context.content, handleResize);
1636
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollbarProvider, {
1637
+ scope: __scopeScrollArea,
1638
+ scrollbar,
1639
+ hasThumb,
1640
+ onThumbChange: require_trust_score_card_glass.useCallbackRef(onThumbChange),
1641
+ onThumbPointerUp: require_trust_score_card_glass.useCallbackRef(onThumbPointerUp),
1642
+ onThumbPositionChange: handleThumbPositionChange,
1643
+ onThumbPointerDown: require_trust_score_card_glass.useCallbackRef(onThumbPointerDown),
1644
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Primitive.div, {
1645
+ ...scrollbarProps,
1646
+ ref: composeRefs,
1647
+ style: {
1648
+ position: "absolute",
1649
+ ...scrollbarProps.style
1650
+ },
1651
+ onPointerDown: require_trust_score_card_glass.composeEventHandlers(props.onPointerDown, (event) => {
1652
+ if (event.button === 0) {
1653
+ event.target.setPointerCapture(event.pointerId);
1654
+ rectRef.current = scrollbar.getBoundingClientRect();
1655
+ prevWebkitUserSelectRef.current = document.body.style.webkitUserSelect;
1656
+ document.body.style.webkitUserSelect = "none";
1657
+ if (context.viewport) context.viewport.style.scrollBehavior = "auto";
1658
+ handleDragScroll(event);
1659
+ }
1660
+ }),
1661
+ onPointerMove: require_trust_score_card_glass.composeEventHandlers(props.onPointerMove, handleDragScroll),
1662
+ onPointerUp: require_trust_score_card_glass.composeEventHandlers(props.onPointerUp, (event) => {
1663
+ const element = event.target;
1664
+ if (element.hasPointerCapture(event.pointerId)) element.releasePointerCapture(event.pointerId);
1665
+ document.body.style.webkitUserSelect = prevWebkitUserSelectRef.current;
1666
+ if (context.viewport) context.viewport.style.scrollBehavior = "";
1667
+ rectRef.current = null;
1668
+ })
1669
+ })
1670
+ });
1671
+ });
1672
+ var THUMB_NAME = "ScrollAreaThumb";
1673
+ var ScrollAreaThumb = react.forwardRef((props, forwardedRef) => {
1674
+ const { forceMount, ...thumbProps } = props;
1675
+ const scrollbarContext = useScrollbarContext(THUMB_NAME, props.__scopeScrollArea);
1676
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.Presence, {
1677
+ present: forceMount || scrollbarContext.hasThumb,
1678
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaThumbImpl, {
1679
+ ref: forwardedRef,
1680
+ ...thumbProps
1681
+ })
1682
+ });
1683
+ });
1684
+ var ScrollAreaThumbImpl = react.forwardRef((props, forwardedRef) => {
1685
+ const { __scopeScrollArea, style, ...thumbProps } = props;
1686
+ const scrollAreaContext = useScrollAreaContext(THUMB_NAME, __scopeScrollArea);
1687
+ const scrollbarContext = useScrollbarContext(THUMB_NAME, __scopeScrollArea);
1688
+ const { onThumbPositionChange } = scrollbarContext;
1689
+ const composedRef = require_trust_score_card_glass.useComposedRefs(forwardedRef, (node) => scrollbarContext.onThumbChange(node));
1690
+ const removeUnlinkedScrollListenerRef = react.useRef(void 0);
1691
+ const debounceScrollEnd = useDebounceCallback(() => {
1692
+ if (removeUnlinkedScrollListenerRef.current) {
1693
+ removeUnlinkedScrollListenerRef.current();
1694
+ removeUnlinkedScrollListenerRef.current = void 0;
1695
+ }
1696
+ }, 100);
1697
+ react.useEffect(() => {
1698
+ const viewport = scrollAreaContext.viewport;
1699
+ if (viewport) {
1700
+ const handleScroll = () => {
1701
+ debounceScrollEnd();
1702
+ if (!removeUnlinkedScrollListenerRef.current) {
1703
+ removeUnlinkedScrollListenerRef.current = addUnlinkedScrollListener(viewport, onThumbPositionChange);
1704
+ onThumbPositionChange();
1705
+ }
1706
+ };
1707
+ onThumbPositionChange();
1708
+ viewport.addEventListener("scroll", handleScroll);
1709
+ return () => viewport.removeEventListener("scroll", handleScroll);
1710
+ }
1711
+ }, [
1712
+ scrollAreaContext.viewport,
1713
+ debounceScrollEnd,
1714
+ onThumbPositionChange
1715
+ ]);
1716
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Primitive.div, {
1717
+ "data-state": scrollbarContext.hasThumb ? "visible" : "hidden",
1718
+ ...thumbProps,
1719
+ ref: composedRef,
1720
+ style: {
1721
+ width: "var(--radix-scroll-area-thumb-width)",
1722
+ height: "var(--radix-scroll-area-thumb-height)",
1723
+ ...style
1724
+ },
1725
+ onPointerDownCapture: require_trust_score_card_glass.composeEventHandlers(props.onPointerDownCapture, (event) => {
1726
+ const thumbRect = event.target.getBoundingClientRect();
1727
+ const x = event.clientX - thumbRect.left;
1728
+ const y = event.clientY - thumbRect.top;
1729
+ scrollbarContext.onThumbPointerDown({
1730
+ x,
1731
+ y
1732
+ });
1733
+ }),
1734
+ onPointerUp: require_trust_score_card_glass.composeEventHandlers(props.onPointerUp, scrollbarContext.onThumbPointerUp)
1735
+ });
1736
+ });
1737
+ ScrollAreaThumb.displayName = THUMB_NAME;
1738
+ var CORNER_NAME = "ScrollAreaCorner";
1739
+ var ScrollAreaCorner = react.forwardRef((props, forwardedRef) => {
1740
+ const context = useScrollAreaContext(CORNER_NAME, props.__scopeScrollArea);
1741
+ const hasBothScrollbarsVisible = Boolean(context.scrollbarX && context.scrollbarY);
1742
+ return context.type !== "scroll" && hasBothScrollbarsVisible ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaCornerImpl, {
1743
+ ...props,
1744
+ ref: forwardedRef
1745
+ }) : null;
1746
+ });
1747
+ ScrollAreaCorner.displayName = CORNER_NAME;
1748
+ var ScrollAreaCornerImpl = react.forwardRef((props, forwardedRef) => {
1749
+ const { __scopeScrollArea, ...cornerProps } = props;
1750
+ const context = useScrollAreaContext(CORNER_NAME, __scopeScrollArea);
1751
+ const [width, setWidth] = react.useState(0);
1752
+ const [height, setHeight] = react.useState(0);
1753
+ const hasSize = Boolean(width && height);
1754
+ useResizeObserver(context.scrollbarX, () => {
1755
+ const height2 = context.scrollbarX?.offsetHeight || 0;
1756
+ context.onCornerHeightChange(height2);
1757
+ setHeight(height2);
1758
+ });
1759
+ useResizeObserver(context.scrollbarY, () => {
1760
+ const width2 = context.scrollbarY?.offsetWidth || 0;
1761
+ context.onCornerWidthChange(width2);
1762
+ setWidth(width2);
1763
+ });
1764
+ return hasSize ? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Primitive.div, {
1765
+ ...cornerProps,
1766
+ ref: forwardedRef,
1767
+ style: {
1768
+ width,
1769
+ height,
1770
+ position: "absolute",
1771
+ right: context.dir === "ltr" ? 0 : void 0,
1772
+ left: context.dir === "rtl" ? 0 : void 0,
1773
+ bottom: 0,
1774
+ ...props.style
1775
+ }
1776
+ }) : null;
1777
+ });
1778
+ function toInt(value) {
1779
+ return value ? parseInt(value, 10) : 0;
1780
+ }
1781
+ function getThumbRatio(viewportSize, contentSize) {
1782
+ const ratio = viewportSize / contentSize;
1783
+ return isNaN(ratio) ? 0 : ratio;
1784
+ }
1785
+ function getThumbSize(sizes) {
1786
+ const ratio = getThumbRatio(sizes.viewport, sizes.content);
1787
+ const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;
1788
+ const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio;
1789
+ return Math.max(thumbSize, 18);
1790
+ }
1791
+ function getScrollPositionFromPointer(pointerPos, pointerOffset, sizes, dir = "ltr") {
1792
+ const thumbSizePx = getThumbSize(sizes);
1793
+ const thumbCenter = thumbSizePx / 2;
1794
+ const offset = pointerOffset || thumbCenter;
1795
+ const thumbOffsetFromEnd = thumbSizePx - offset;
1796
+ const minPointerPos = sizes.scrollbar.paddingStart + offset;
1797
+ const maxPointerPos = sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd;
1798
+ const maxScrollPos = sizes.content - sizes.viewport;
1799
+ const scrollRange = dir === "ltr" ? [0, maxScrollPos] : [maxScrollPos * -1, 0];
1800
+ return linearScale([minPointerPos, maxPointerPos], scrollRange)(pointerPos);
1801
+ }
1802
+ function getThumbOffsetFromScroll(scrollPos, sizes, dir = "ltr") {
1803
+ const thumbSizePx = getThumbSize(sizes);
1804
+ const scrollbarPadding = sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd;
1805
+ const scrollbar = sizes.scrollbar.size - scrollbarPadding;
1806
+ const maxScrollPos = sizes.content - sizes.viewport;
1807
+ const maxThumbPos = scrollbar - thumbSizePx;
1808
+ const scrollWithoutMomentum = require_trust_score_card_glass.clamp(scrollPos, dir === "ltr" ? [0, maxScrollPos] : [maxScrollPos * -1, 0]);
1809
+ return linearScale([0, maxScrollPos], [0, maxThumbPos])(scrollWithoutMomentum);
1810
+ }
1811
+ function linearScale(input, output) {
1812
+ return (value) => {
1813
+ if (input[0] === input[1] || output[0] === output[1]) return output[0];
1814
+ const ratio = (output[1] - output[0]) / (input[1] - input[0]);
1815
+ return output[0] + ratio * (value - input[0]);
1816
+ };
1817
+ }
1818
+ function isScrollingWithinScrollbarBounds(scrollPos, maxScrollPos) {
1819
+ return scrollPos > 0 && scrollPos < maxScrollPos;
1820
+ }
1821
+ var addUnlinkedScrollListener = (node, handler = () => {}) => {
1822
+ let prevPosition = {
1823
+ left: node.scrollLeft,
1824
+ top: node.scrollTop
1825
+ };
1826
+ let rAF = 0;
1827
+ (function loop() {
1828
+ const position = {
1829
+ left: node.scrollLeft,
1830
+ top: node.scrollTop
1831
+ };
1832
+ const isHorizontalScroll = prevPosition.left !== position.left;
1833
+ const isVerticalScroll = prevPosition.top !== position.top;
1834
+ if (isHorizontalScroll || isVerticalScroll) handler();
1835
+ prevPosition = position;
1836
+ rAF = window.requestAnimationFrame(loop);
1837
+ })();
1838
+ return () => window.cancelAnimationFrame(rAF);
1839
+ };
1840
+ function useDebounceCallback(callback, delay) {
1841
+ const handleCallback = require_trust_score_card_glass.useCallbackRef(callback);
1842
+ const debounceTimerRef = react.useRef(0);
1843
+ react.useEffect(() => () => window.clearTimeout(debounceTimerRef.current), []);
1844
+ return react.useCallback(() => {
1845
+ window.clearTimeout(debounceTimerRef.current);
1846
+ debounceTimerRef.current = window.setTimeout(handleCallback, delay);
1847
+ }, [handleCallback, delay]);
1848
+ }
1849
+ function useResizeObserver(element, onResize) {
1850
+ const handleResize = require_trust_score_card_glass.useCallbackRef(onResize);
1851
+ require_trust_score_card_glass.useLayoutEffect2(() => {
1852
+ let rAF = 0;
1853
+ if (element) {
1854
+ const resizeObserver = new ResizeObserver(() => {
1855
+ cancelAnimationFrame(rAF);
1856
+ rAF = window.requestAnimationFrame(handleResize);
1857
+ });
1858
+ resizeObserver.observe(element);
1859
+ return () => {
1860
+ window.cancelAnimationFrame(rAF);
1861
+ resizeObserver.unobserve(element);
1862
+ };
1863
+ }
1864
+ }, [element, handleResize]);
1865
+ }
1866
+ var Root = ScrollArea$1;
1867
+ var Viewport = ScrollAreaViewport;
1868
+ var Corner = ScrollAreaCorner;
1869
+ function ScrollArea({ className, children, ...props }) {
1870
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)(Root, {
1871
+ "data-slot": "scroll-area",
1872
+ className: require_utils.cn("relative", className),
1873
+ ...props,
1874
+ children: [
1875
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Viewport, {
1876
+ "data-slot": "scroll-area-viewport",
1877
+ className: "focus-visible:ring-ring/50 size-full rounded-[inherit] transition-[color,box-shadow] outline-none focus-visible:ring-[3px] focus-visible:outline-1",
1878
+ children
1879
+ }),
1880
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollBar, {}),
1881
+ /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Corner, {})
1882
+ ]
1883
+ });
1884
+ }
1885
+ function ScrollBar({ className, orientation = "vertical", ...props }) {
1886
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaScrollbar, {
1887
+ "data-slot": "scroll-area-scrollbar",
1888
+ orientation,
1889
+ className: require_utils.cn("flex touch-none p-px transition-colors select-none", orientation === "vertical" && "h-full w-2.5 border-l border-l-transparent", orientation === "horizontal" && "h-2.5 flex-col border-t border-t-transparent", className),
1890
+ ...props,
1891
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollAreaThumb, {
1892
+ "data-slot": "scroll-area-thumb",
1893
+ className: "bg-border relative flex-1 rounded-full"
1894
+ })
1895
+ });
1896
+ }
1897
+ var SplitLayoutContext = (0, react.createContext)(null);
1898
+ function useSplitLayout() {
1899
+ const context = (0, react.useContext)(SplitLayoutContext);
1900
+ if (!context) throw new Error("useSplitLayout must be used within SplitLayoutGlass.Provider. Wrap your component tree with <SplitLayoutGlass.Provider>.");
1901
+ return context;
1902
+ }
1903
+ function useSplitLayoutOptional() {
1904
+ return (0, react.useContext)(SplitLayoutContext);
1905
+ }
1906
+ var BREAKPOINT_VALUES = {
1907
+ sm: 640,
1908
+ md: 768,
1909
+ lg: 1024,
1910
+ xl: 1440,
1911
+ "2xl": 1536
1912
+ };
1913
+ const SplitLayoutProvider = ({ children, selectedKey: controlledSelectedKey, onSelectedKeyChange, defaultSelectedKey = null, open: controlledOpen, onOpenChange, defaultOpen = true, breakpoint = "md", mobileMode = "stack", intensity = "medium", stickyOffset = 24, urlParamName, keyboardShortcut = "b" }) => {
1914
+ const [internalSelectedKey, setInternalSelectedKey] = (0, react.useState)(() => {
1915
+ if (urlParamName && typeof window !== "undefined") {
1916
+ const urlValue = new URLSearchParams(window.location.search).get(urlParamName);
1917
+ if (urlValue) return urlValue;
1918
+ }
1919
+ return defaultSelectedKey;
1920
+ });
1921
+ const isSelectedKeyControlled = controlledSelectedKey !== void 0;
1922
+ const selectedKey = isSelectedKeyControlled ? controlledSelectedKey : internalSelectedKey;
1923
+ const setSelectedKey = (0, react.useCallback)((key) => {
1924
+ if (!isSelectedKeyControlled) setInternalSelectedKey(key);
1925
+ onSelectedKeyChange?.(key);
1926
+ if (urlParamName && typeof window !== "undefined") {
1927
+ const url = new URL(window.location.href);
1928
+ if (key) url.searchParams.set(urlParamName, key);
1929
+ else url.searchParams.delete(urlParamName);
1930
+ window.history.replaceState({}, "", url.toString());
1931
+ }
1932
+ }, [
1933
+ isSelectedKeyControlled,
1934
+ onSelectedKeyChange,
1935
+ urlParamName
1936
+ ]);
1937
+ const [internalOpen, setInternalOpen] = (0, react.useState)(defaultOpen);
1938
+ const isOpenControlled = controlledOpen !== void 0;
1939
+ const isOpen = isOpenControlled ? controlledOpen : internalOpen;
1940
+ const setIsOpen = (0, react.useCallback)((open) => {
1941
+ if (!isOpenControlled) setInternalOpen(open);
1942
+ onOpenChange?.(open);
1943
+ }, [isOpenControlled, onOpenChange]);
1944
+ const [isMobileOpen, setMobileOpen] = (0, react.useState)(false);
1945
+ const [isMobile, setIsMobile] = (0, react.useState)(() => {
1946
+ if (typeof window === "undefined") return false;
1947
+ return window.innerWidth < BREAKPOINT_VALUES[breakpoint];
1948
+ });
1949
+ (0, react.useEffect)(() => {
1950
+ if (typeof window === "undefined") return;
1951
+ const checkMobile = () => {
1952
+ setIsMobile(window.innerWidth < BREAKPOINT_VALUES[breakpoint]);
1953
+ };
1954
+ checkMobile();
1955
+ window.addEventListener("resize", checkMobile);
1956
+ return () => window.removeEventListener("resize", checkMobile);
1957
+ }, [breakpoint]);
1958
+ const toggle = (0, react.useCallback)(() => {
1959
+ if (isMobile) setMobileOpen((prev) => !prev);
1960
+ else setIsOpen(!isOpen);
1961
+ }, [
1962
+ isMobile,
1963
+ isOpen,
1964
+ setIsOpen
1965
+ ]);
1966
+ (0, react.useEffect)(() => {
1967
+ if (!keyboardShortcut) return;
1968
+ const handleKeyDown = (e) => {
1969
+ if (e.key === "Escape" && isMobile && isMobileOpen) {
1970
+ e.preventDefault();
1971
+ setMobileOpen(false);
1972
+ return;
1973
+ }
1974
+ if (e.key === keyboardShortcut && (e.metaKey || e.ctrlKey)) {
1975
+ e.preventDefault();
1976
+ toggle();
1977
+ }
1978
+ };
1979
+ document.addEventListener("keydown", handleKeyDown);
1980
+ return () => document.removeEventListener("keydown", handleKeyDown);
1981
+ }, [
1982
+ keyboardShortcut,
1983
+ isMobile,
1984
+ isMobileOpen,
1985
+ toggle
1986
+ ]);
1987
+ const value = (0, react.useMemo)(() => ({
1988
+ selectedKey,
1989
+ setSelectedKey,
1990
+ isOpen,
1991
+ setIsOpen,
1992
+ isMobileOpen,
1993
+ setMobileOpen,
1994
+ isMobile,
1995
+ breakpoint,
1996
+ mobileMode,
1997
+ intensity,
1998
+ stickyOffset,
1999
+ toggle,
2000
+ state: isOpen ? "expanded" : "collapsed",
2001
+ open: isOpen,
2002
+ setOpen: setIsOpen,
2003
+ openMobile: isMobileOpen,
2004
+ setOpenMobile: setMobileOpen,
2005
+ toggleSidebar: toggle
2006
+ }), [
2007
+ selectedKey,
2008
+ setSelectedKey,
2009
+ isOpen,
2010
+ setIsOpen,
2011
+ isMobileOpen,
2012
+ isMobile,
2013
+ breakpoint,
2014
+ mobileMode,
2015
+ intensity,
2016
+ stickyOffset,
2017
+ toggle
2018
+ ]);
2019
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(SplitLayoutContext.Provider, {
2020
+ value,
2021
+ children
2022
+ });
2023
+ };
2024
+ SplitLayoutProvider.displayName = "SplitLayoutGlass.Provider";
2025
+ var SplitLayoutAccordionRoot = (0, react.forwardRef)(({ children, label = "Content accordion", className, ...props }, ref) => {
2026
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.GlassCard, {
2027
+ asChild: true,
2028
+ intensity: useSplitLayoutOptional()?.intensity ?? "medium",
2029
+ padding: "none",
2030
+ className: require_utils.cn("divide-y divide-white/10", className),
2031
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2032
+ ref,
2033
+ role: "region",
2034
+ "aria-label": label,
2035
+ "data-split-accordion": "",
2036
+ ...props,
2037
+ children
2038
+ })
2039
+ });
2040
+ });
2041
+ SplitLayoutAccordionRoot.displayName = "SplitLayoutAccordion.Root";
2042
+ var SplitLayoutAccordionItem = (0, react.forwardRef)(({ itemKey, trigger, children, disabled = false, className, ...props }, ref) => {
2043
+ const { selectedKey, setSelectedKey } = useSplitLayout();
2044
+ const isExpanded = selectedKey === itemKey;
2045
+ const contentRef = (0, react.useRef)(null);
2046
+ const [contentHeight, setContentHeight] = (0, react.useState)(null);
2047
+ const triggerId = (0, react.useId)();
2048
+ const contentId = (0, react.useId)();
2049
+ (0, react.useEffect)(() => {
2050
+ if (contentRef.current) setContentHeight(contentRef.current.scrollHeight);
2051
+ }, [children, isExpanded]);
2052
+ const handleToggle = (0, react.useCallback)(() => {
2053
+ if (disabled) return;
2054
+ setSelectedKey(isExpanded ? null : itemKey);
2055
+ }, [
2056
+ disabled,
2057
+ isExpanded,
2058
+ itemKey,
2059
+ setSelectedKey
2060
+ ]);
2061
+ const handleKeyDown = (0, react.useCallback)((e) => {
2062
+ if (disabled) return;
2063
+ switch (e.key) {
2064
+ case "Enter":
2065
+ case " ":
2066
+ e.preventDefault();
2067
+ handleToggle();
2068
+ break;
2069
+ case "ArrowDown":
2070
+ e.preventDefault();
2071
+ ((e.currentTarget.parentElement?.nextElementSibling)?.querySelector("[data-accordion-trigger]"))?.focus();
2072
+ break;
2073
+ case "ArrowUp":
2074
+ e.preventDefault();
2075
+ ((e.currentTarget.parentElement?.previousElementSibling)?.querySelector("[data-accordion-trigger]"))?.focus();
2076
+ break;
2077
+ case "Home":
2078
+ e.preventDefault();
2079
+ (e.currentTarget.closest("[data-split-accordion]")?.querySelector("[data-accordion-trigger]"))?.focus();
2080
+ break;
2081
+ case "End": {
2082
+ e.preventDefault();
2083
+ const triggers = e.currentTarget.closest("[data-split-accordion]")?.querySelectorAll("[data-accordion-trigger]");
2084
+ (triggers?.[triggers.length - 1])?.focus();
2085
+ break;
2086
+ }
2087
+ }
2088
+ }, [disabled, handleToggle]);
2089
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsxs)("div", {
2090
+ ref,
2091
+ "data-accordion-item": "",
2092
+ "data-state": isExpanded ? "open" : "closed",
2093
+ "data-disabled": disabled || void 0,
2094
+ className: require_utils.cn("overflow-hidden", disabled && "opacity-50 cursor-not-allowed", className),
2095
+ ...props,
2096
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsxs)("button", {
2097
+ type: "button",
2098
+ id: triggerId,
2099
+ "data-accordion-trigger": "",
2100
+ "aria-expanded": isExpanded,
2101
+ "aria-controls": contentId,
2102
+ "aria-disabled": disabled,
2103
+ disabled,
2104
+ onClick: handleToggle,
2105
+ onKeyDown: handleKeyDown,
2106
+ className: require_utils.cn("flex w-full items-center justify-between gap-4", "p-4 text-left", "transition-colors duration-200", "hover:bg-white/5 focus-visible:bg-white/5", "focus:outline-none focus-visible:ring-2 focus-visible:ring-white/20 focus-visible:ring-inset", disabled && "pointer-events-none"),
2107
+ children: [/* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2108
+ className: "flex-1",
2109
+ children: trigger
2110
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)(lucide_react.ChevronDown, { className: require_utils.cn("h-4 w-4 shrink-0 text-white/60", "transition-transform duration-300 ease-out", isExpanded && "rotate-180") })]
2111
+ }), /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2112
+ id: contentId,
2113
+ ref: contentRef,
2114
+ role: "region",
2115
+ "aria-labelledby": triggerId,
2116
+ "data-accordion-content": "",
2117
+ "data-state": isExpanded ? "open" : "closed",
2118
+ className: require_utils.cn("overflow-hidden", "transition-[max-height,opacity] duration-300 ease-out"),
2119
+ style: {
2120
+ maxHeight: isExpanded ? contentHeight ?? "auto" : 0,
2121
+ opacity: isExpanded ? 1 : 0
2122
+ },
2123
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2124
+ className: "p-4 pt-0 border-t border-white/5",
2125
+ children
2126
+ })
2127
+ })]
2128
+ });
2129
+ });
2130
+ SplitLayoutAccordionItem.displayName = "SplitLayoutAccordion.Item";
2131
+ const SplitLayoutAccordion = {
2132
+ Root: SplitLayoutAccordionRoot,
2133
+ Item: SplitLayoutAccordionItem
2134
+ };
2135
+ function useGridStyles(config) {
2136
+ const { ratio = {
2137
+ sidebar: 1,
2138
+ main: 2
2139
+ }, minSidebarWidth = "280px", maxSidebarWidth, gap = {
2140
+ mobile: 16,
2141
+ desktop: 24
2142
+ }, stickyOffset = 24 } = config;
2143
+ const gapMobile = typeof gap === "number" ? gap : gap.mobile ?? 16;
2144
+ const gapDesktop = typeof gap === "number" ? gap : gap.desktop ?? 24;
2145
+ const gridTemplate = maxSidebarWidth ? `minmax(${minSidebarWidth}, ${maxSidebarWidth}) ${ratio.main}fr` : `minmax(${minSidebarWidth}, ${ratio.sidebar}fr) ${ratio.main}fr`;
2146
+ return { cssVars: {
2147
+ "--grid-template": gridTemplate,
2148
+ "--sticky-offset": `${stickyOffset}px`,
2149
+ "--sticky-max-height": `calc(100vh - calc(${stickyOffset}px * 2))`,
2150
+ "--gap-mobile": `${gapMobile}px`,
2151
+ "--gap-desktop": `${gapDesktop}px`
2152
+ } };
2153
+ }
2154
+ var SplitLayoutRoot = (0, react.forwardRef)(({ children, ratio = {
2155
+ sidebar: 1,
2156
+ main: 2
2157
+ }, minSidebarWidth = "300px", maxSidebarWidth, gap = {
2158
+ mobile: 16,
2159
+ desktop: 24
2160
+ }, breakpoint: breakpointProp, mobileLayout = "stack", className, ...props }, ref) => {
2161
+ const context = useSplitLayoutOptional();
2162
+ const breakpoint = breakpointProp ?? context?.breakpoint ?? "md";
2163
+ const { cssVars } = useGridStyles({
2164
+ ratio,
2165
+ minSidebarWidth,
2166
+ maxSidebarWidth,
2167
+ gap,
2168
+ stickyOffset: context?.stickyOffset ?? 24
2169
+ });
2170
+ const bp = breakpoint;
2171
+ const gapClasses = {
2172
+ sm: "gap-[var(--gap-mobile)] sm:gap-[var(--gap-desktop)]",
2173
+ md: "gap-[var(--gap-mobile)] md:gap-[var(--gap-desktop)]",
2174
+ lg: "gap-[var(--gap-mobile)] lg:gap-[var(--gap-desktop)]",
2175
+ xl: "gap-[var(--gap-mobile)] xl:gap-[var(--gap-desktop)]",
2176
+ "2xl": "gap-[var(--gap-mobile)] 2xl:gap-[var(--gap-desktop)]"
2177
+ };
2178
+ const gridClasses = {
2179
+ sm: "sm:grid-cols-(--grid-template)",
2180
+ md: "md:grid-cols-(--grid-template)",
2181
+ lg: "lg:grid-cols-(--grid-template)",
2182
+ xl: "xl:grid-cols-(--grid-template)",
2183
+ "2xl": "2xl:grid-cols-(--grid-template)"
2184
+ };
2185
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2186
+ ref,
2187
+ "data-split-layout-root": "",
2188
+ "data-state": context?.state ?? "expanded",
2189
+ className: require_utils.cn("grid", "items-start", mobileLayout === "stack" && "grid-cols-1", mobileLayout === "main-only" && "grid-cols-1 *:data-split-sidebar:hidden", mobileLayout === "sidebar-only" && "grid-cols-1 *:data-split-main:hidden", gridClasses[bp], gapClasses[bp], className),
2190
+ style: cssVars,
2191
+ ...props,
2192
+ children
2193
+ });
2194
+ });
2195
+ SplitLayoutRoot.displayName = "SplitLayoutGlass.Root";
2196
+ var SplitLayoutSidebar = (0, react.forwardRef)(({ children, label = "Sidebar navigation", className, ...props }, ref) => {
2197
+ const context = useSplitLayoutOptional();
2198
+ const breakpoint = context?.breakpoint ?? "md";
2199
+ const intensity = context?.intensity ?? "medium";
2200
+ const bp = breakpoint;
2201
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.GlassCard, {
2202
+ asChild: true,
2203
+ intensity,
2204
+ padding: "none",
2205
+ className: require_utils.cn("overflow-hidden rounded-xl", `${bp}:sticky`, `${bp}:top-[var(--sticky-offset)]`, `${bp}:max-h-[var(--sticky-max-height)]`, `${bp}:flex`, `${bp}:flex-col`, className),
2206
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("aside", {
2207
+ ref,
2208
+ "data-split-sidebar": "",
2209
+ "aria-label": label,
2210
+ ...props,
2211
+ children
2212
+ })
2213
+ });
2214
+ });
2215
+ SplitLayoutSidebar.displayName = "SplitLayoutGlass.Sidebar";
2216
+ var SplitLayoutSidebarHeader = (0, react.forwardRef)(({ children, className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2217
+ ref,
2218
+ "data-split-sidebar-header": "",
2219
+ className: require_utils.cn("shrink-0 p-4 border-b border-white/10", className),
2220
+ ...props,
2221
+ children
2222
+ }));
2223
+ SplitLayoutSidebarHeader.displayName = "SplitLayoutGlass.SidebarHeader";
2224
+ var SplitLayoutSidebarContent = (0, react.forwardRef)(({ children, scrollable = true, className, ...props }, ref) => {
2225
+ if (scrollable) {
2226
+ const { dir, ...divProps } = props;
2227
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollArea, {
2228
+ ref,
2229
+ "data-split-sidebar-content": "",
2230
+ className: require_utils.cn("flex-1 min-h-0", className),
2231
+ ...divProps,
2232
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2233
+ className: "p-4",
2234
+ children
2235
+ })
2236
+ });
2237
+ }
2238
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2239
+ ref,
2240
+ "data-split-sidebar-content": "",
2241
+ className: require_utils.cn("flex-1 min-h-0 overflow-auto p-4", className),
2242
+ ...props,
2243
+ children
2244
+ });
2245
+ });
2246
+ SplitLayoutSidebarContent.displayName = "SplitLayoutGlass.SidebarContent";
2247
+ var SplitLayoutSidebarFooter = (0, react.forwardRef)(({ children, className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2248
+ ref,
2249
+ "data-split-sidebar-footer": "",
2250
+ className: require_utils.cn("shrink-0 p-4 border-t border-white/10", className),
2251
+ ...props,
2252
+ children
2253
+ }));
2254
+ SplitLayoutSidebarFooter.displayName = "SplitLayoutGlass.SidebarFooter";
2255
+ var SplitLayoutMain = (0, react.forwardRef)(({ children, label = "Main content", className, ...props }, ref) => {
2256
+ const context = useSplitLayoutOptional();
2257
+ const breakpoint = context?.breakpoint ?? "md";
2258
+ const intensity = context?.intensity ?? "medium";
2259
+ const bp = breakpoint;
2260
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.GlassCard, {
2261
+ asChild: true,
2262
+ intensity,
2263
+ padding: "none",
2264
+ className: require_utils.cn("overflow-hidden rounded-xl", `${bp}:sticky`, `${bp}:top-[var(--sticky-offset)]`, `${bp}:max-h-[var(--sticky-max-height)]`, `${bp}:flex`, `${bp}:flex-col`, className),
2265
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("main", {
2266
+ ref,
2267
+ "data-split-main": "",
2268
+ "aria-label": label,
2269
+ ...props,
2270
+ children
2271
+ })
2272
+ });
2273
+ });
2274
+ SplitLayoutMain.displayName = "SplitLayoutGlass.Main";
2275
+ var SplitLayoutMainHeader = (0, react.forwardRef)(({ children, className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2276
+ ref,
2277
+ "data-split-main-header": "",
2278
+ className: require_utils.cn("shrink-0 p-6 border-b border-white/10", className),
2279
+ ...props,
2280
+ children
2281
+ }));
2282
+ SplitLayoutMainHeader.displayName = "SplitLayoutGlass.MainHeader";
2283
+ var SplitLayoutMainContent = (0, react.forwardRef)(({ children, scrollable = true, className, ...props }, ref) => {
2284
+ if (scrollable) {
2285
+ const { dir, ...divProps } = props;
2286
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(ScrollArea, {
2287
+ ref,
2288
+ "data-split-main-content": "",
2289
+ className: require_utils.cn("flex-1 min-h-0", className),
2290
+ ...divProps,
2291
+ children: /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2292
+ className: "p-6",
2293
+ children
2294
+ })
2295
+ });
2296
+ }
2297
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2298
+ ref,
2299
+ "data-split-main-content": "",
2300
+ className: require_utils.cn("flex-1 min-h-0 overflow-auto p-6", className),
2301
+ ...props,
2302
+ children
2303
+ });
2304
+ });
2305
+ SplitLayoutMainContent.displayName = "SplitLayoutGlass.MainContent";
2306
+ var SplitLayoutMainFooter = (0, react.forwardRef)(({ children, className, ...props }, ref) => /* @__PURE__ */ (0, react_jsx_runtime.jsx)("div", {
2307
+ ref,
2308
+ "data-split-main-footer": "",
2309
+ className: require_utils.cn("shrink-0 p-6 border-t border-white/10", className),
2310
+ ...props,
2311
+ children
2312
+ }));
2313
+ SplitLayoutMainFooter.displayName = "SplitLayoutGlass.MainFooter";
2314
+ var SplitLayoutTrigger = (0, react.forwardRef)(({ asChild = false, showOnDesktop = false, variant = "menu", className, children, ...props }, ref) => {
2315
+ const { toggle, isOpen, isMobileOpen, isMobile, breakpoint } = useSplitLayout();
2316
+ const currentOpen = isMobile ? isMobileOpen : isOpen;
2317
+ const Icon$1 = variant === "menu" ? currentOpen ? lucide_react.X : lucide_react.Menu : currentOpen ? lucide_react.PanelLeftClose : lucide_react.PanelLeftOpen;
2318
+ const visibilityClass = showOnDesktop ? "" : `${breakpoint}:hidden`;
2319
+ if (asChild) return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(__radix_ui_react_slot.Slot, {
2320
+ ref,
2321
+ onClick: toggle,
2322
+ "aria-label": currentOpen ? "Close sidebar" : "Open sidebar",
2323
+ "aria-expanded": currentOpen,
2324
+ "data-state": currentOpen ? "open" : "closed",
2325
+ className: require_utils.cn(visibilityClass, className),
2326
+ ...props,
2327
+ children
2328
+ });
2329
+ return /* @__PURE__ */ (0, react_jsx_runtime.jsx)(require_trust_score_card_glass.ButtonGlass, {
2330
+ ref,
2331
+ variant: "ghost",
2332
+ size: "icon",
2333
+ onClick: toggle,
2334
+ "aria-label": currentOpen ? "Close sidebar" : "Open sidebar",
2335
+ "aria-expanded": currentOpen,
2336
+ "data-state": currentOpen ? "open" : "closed",
2337
+ className: require_utils.cn(visibilityClass, className),
2338
+ ...props,
2339
+ children: children ?? /* @__PURE__ */ (0, react_jsx_runtime.jsx)(Icon$1, { className: "h-5 w-5" })
2340
+ });
2341
+ });
2342
+ SplitLayoutTrigger.displayName = "SplitLayoutGlass.Trigger";
2343
+ const SplitLayoutGlass = {
2344
+ Provider: SplitLayoutProvider,
2345
+ Root: SplitLayoutRoot,
2346
+ Sidebar: SplitLayoutSidebar,
2347
+ SidebarHeader: SplitLayoutSidebarHeader,
2348
+ SidebarContent: SplitLayoutSidebarContent,
2349
+ SidebarFooter: SplitLayoutSidebarFooter,
2350
+ Main: SplitLayoutMain,
2351
+ MainHeader: SplitLayoutMainHeader,
2352
+ MainContent: SplitLayoutMainContent,
2353
+ MainFooter: SplitLayoutMainFooter,
2354
+ Trigger: SplitLayoutTrigger
2355
+ };
708
2356
  var ChartContext = react.createContext(null);
709
2357
  function useChart() {
710
2358
  const context = react.useContext(ChartContext);
@@ -976,10 +2624,13 @@ exports.RepositoryMetadataGlass = require_trust_score_card_glass.RepositoryMetad
976
2624
  exports.ResponsiveContainer = require_trust_score_card_glass.ResponsiveContainer;
977
2625
  exports.SearchBoxGlass = require_trust_score_card_glass.SearchBoxGlass;
978
2626
  exports.SegmentedControlGlass = require_trust_score_card_glass.SegmentedControlGlass;
2627
+ exports.SidebarGlass = SidebarGlass;
979
2628
  exports.SkeletonGlass = require_trust_score_card_glass.SkeletonGlass;
980
2629
  exports.SliderGlass = require_trust_score_card_glass.SliderGlass;
981
2630
  exports.SortDropdownGlass = require_trust_score_card_glass.SortDropdownGlass;
982
2631
  exports.SparklineGlass = require_trust_score_card_glass.SparklineGlass;
2632
+ exports.SplitLayoutAccordion = SplitLayoutAccordion;
2633
+ exports.SplitLayoutGlass = SplitLayoutGlass;
983
2634
  exports.StatItemGlass = require_trust_score_card_glass.StatItemGlass;
984
2635
  exports.StatusIndicatorGlass = require_trust_score_card_glass.StatusIndicatorGlass;
985
2636
  exports.StepperGlass = StepperGlass;
@@ -1036,6 +2687,9 @@ exports.useChart = useChart;
1036
2687
  exports.useFocus = require_use_focus.useFocus;
1037
2688
  exports.useHover = require_use_focus.useHover;
1038
2689
  exports.useResponsive = require_use_wallpaper_tint.useResponsive;
2690
+ exports.useSidebar = useSidebar;
2691
+ exports.useSplitLayout = useSplitLayout;
2692
+ exports.useSplitLayoutOptional = useSplitLayoutOptional;
1039
2693
  exports.useTheme = require_theme_context.useTheme;
1040
2694
  exports.useWallpaperTint = require_use_wallpaper_tint.useWallpaperTint;
1041
2695