@work-rjkashyap/unified-ui 0.2.3 → 0.3.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.
@@ -775,9 +775,7 @@ var avatarVariants = classVarianceAuthority.cva(
775
775
  // Typography for fallback initials
776
776
  "font-medium leading-none select-none",
777
777
  // Default colors for fallback state
778
- "bg-muted text-muted-foreground",
779
- // Border for visual separation on grouped/colored backgrounds
780
- "ring-2 ring-background"
778
+ "bg-muted text-muted-foreground"
781
779
  ],
782
780
  {
783
781
  variants: {
@@ -859,15 +857,18 @@ function getInitials(name) {
859
857
  return (parts[0][0] + parts[parts.length - 1][0]).toUpperCase();
860
858
  }
861
859
  function DefaultFallbackIcon({ className }) {
862
- return /* @__PURE__ */ jsxRuntime.jsx(
860
+ return /* @__PURE__ */ jsxRuntime.jsxs(
863
861
  "svg",
864
862
  {
865
- className: chunk4ON3M3OM_cjs.cn("size-[60%] text-current opacity-60", className),
863
+ className: chunk4ON3M3OM_cjs.cn("size-8 translate-y-px text-current opacity-70", className),
866
864
  xmlns: "http://www.w3.org/2000/svg",
867
865
  viewBox: "0 0 24 24",
868
866
  fill: "currentColor",
869
867
  "aria-hidden": "true",
870
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 12c2.761 0 5-2.239 5-5s-2.239-5-5-5-5 2.239-5 5 2.239 5 5 5zm0 2c-3.866 0-7 1.79-7 4v1a1 1 0 001 1h12a1 1 0 001-1v-1c0-2.21-3.134-4-7-4z" })
868
+ children: [
869
+ /* @__PURE__ */ jsxRuntime.jsx("circle", { cx: "12", cy: "7", r: "4" }),
870
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M12 14c-4.42 0-8 2.24-8 5v5h16v-5c0-2.76-3.58-5-8-5z" })
871
+ ]
871
872
  }
872
873
  );
873
874
  }
@@ -988,11 +989,11 @@ var Avatar = React.forwardRef(function Avatar2({
988
989
  });
989
990
  Avatar.displayName = "Avatar";
990
991
  var overlapMap = {
991
- xs: { tight: "-ml-2", default: "-ml-1.5", loose: "-ml-1" },
992
- sm: { tight: "-ml-3", default: "-ml-2", loose: "-ml-1.5" },
993
- md: { tight: "-ml-4", default: "-ml-3", loose: "-ml-2" },
994
- lg: { tight: "-ml-5", default: "-ml-3.5", loose: "-ml-2.5" },
995
- xl: { tight: "-ml-6", default: "-ml-4", loose: "-ml-3" }
992
+ xs: { tight: "-ml-3", default: "-ml-2.5", loose: "-ml-1.5" },
993
+ sm: { tight: "-ml-4", default: "-ml-3", loose: "-ml-2" },
994
+ md: { tight: "-ml-5", default: "-ml-4", loose: "-ml-3" },
995
+ lg: { tight: "-ml-6", default: "-ml-5", loose: "-ml-3.5" },
996
+ xl: { tight: "-ml-8", default: "-ml-6", loose: "-ml-4" }
996
997
  };
997
998
  var AvatarGroup = React.forwardRef(
998
999
  function AvatarGroup2({
@@ -1028,35 +1029,53 @@ var AvatarGroup = React.forwardRef(
1028
1029
  className: chunk4ON3M3OM_cjs.cn(
1029
1030
  index > 0 && overlapClass,
1030
1031
  // Ensure proper stacking order (first avatar on top)
1031
- "relative"
1032
+ // z-index is set via CSS var so hover:z-50! (Tailwind) can override it
1033
+ "relative inline-flex cursor-pointer transition-transform duration-150 ease-out",
1034
+ "z-(--ag-z)",
1035
+ "hover:z-50! hover:scale-110"
1032
1036
  ),
1033
- style: { zIndex: totalCount - index },
1037
+ style: { "--ag-z": totalCount - index },
1034
1038
  children: React.cloneElement(child, {
1035
1039
  size,
1036
- shape
1040
+ shape,
1041
+ className: chunk4ON3M3OM_cjs.cn(
1042
+ child.props?.className,
1043
+ "ring-2 ring-background"
1044
+ )
1037
1045
  })
1038
1046
  },
1039
1047
  child.props?.alt ?? child.props?.name ?? index
1040
1048
  );
1041
1049
  }),
1042
- overflowCount > 0 && /* @__PURE__ */ jsxRuntime.jsx("span", { className: chunk4ON3M3OM_cjs.cn(overlapClass, "relative"), style: { zIndex: 0 }, children: /* @__PURE__ */ jsxRuntime.jsxs(
1050
+ overflowCount > 0 && /* @__PURE__ */ jsxRuntime.jsx(
1043
1051
  "span",
1044
1052
  {
1045
1053
  className: chunk4ON3M3OM_cjs.cn(
1046
- avatarVariants({ size, shape }),
1047
- "bg-muted text-muted-foreground",
1048
- "font-semibold"
1054
+ overlapClass,
1055
+ "relative inline-flex z-(--ag-z)"
1049
1056
  ),
1050
- role: "img",
1051
- "aria-label": `${overflowCount} more`,
1052
- "data-ds": "",
1053
- "data-ds-component": "avatar-overflow",
1054
- children: [
1055
- "+",
1056
- overflowCount
1057
- ]
1057
+ style: { "--ag-z": 0 },
1058
+ children: /* @__PURE__ */ jsxRuntime.jsxs(
1059
+ "span",
1060
+ {
1061
+ className: chunk4ON3M3OM_cjs.cn(
1062
+ avatarVariants({ size, shape }),
1063
+ "ring-2 ring-background",
1064
+ "bg-muted text-muted-foreground",
1065
+ "font-semibold"
1066
+ ),
1067
+ role: "img",
1068
+ "aria-label": `${overflowCount} more`,
1069
+ "data-ds": "",
1070
+ "data-ds-component": "avatar-overflow",
1071
+ children: [
1072
+ "+",
1073
+ overflowCount
1074
+ ]
1075
+ }
1076
+ )
1058
1077
  }
1059
- ) })
1078
+ )
1060
1079
  ]
1061
1080
  }
1062
1081
  );
@@ -10317,9 +10336,9 @@ var DropdownMenuItem = React.forwardRef(function DropdownMenuItem2({ className,
10317
10336
  ref,
10318
10337
  className: chunk4ON3M3OM_cjs.cn(
10319
10338
  ...menuItemBase2,
10339
+ "gap-2",
10320
10340
  variant === "danger" && "text-danger focus:bg-danger-muted focus:text-danger-muted-foreground",
10321
10341
  variant === "default" && "text-foreground",
10322
- icon && "gap-2",
10323
10342
  className
10324
10343
  ),
10325
10344
  "data-ds": "",
@@ -10327,7 +10346,7 @@ var DropdownMenuItem = React.forwardRef(function DropdownMenuItem2({ className,
10327
10346
  ...rest,
10328
10347
  children: [
10329
10348
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 [&>svg]:size-4", "aria-hidden": "true", children: icon }),
10330
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1", children }),
10349
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 flex items-center gap-2 [&>svg]:shrink-0 [&>svg]:size-4", children }),
10331
10350
  shortcut && /* @__PURE__ */ jsxRuntime.jsx(DropdownMenuShortcut, { children: shortcut })
10332
10351
  ]
10333
10352
  }
@@ -10339,13 +10358,13 @@ var DropdownMenuCheckboxItem = React.forwardRef(function DropdownMenuCheckboxIte
10339
10358
  radixUi.DropdownMenu.CheckboxItem,
10340
10359
  {
10341
10360
  ref,
10342
- className: chunk4ON3M3OM_cjs.cn(...menuItemBase2, "pl-8", className),
10361
+ className: chunk4ON3M3OM_cjs.cn(...menuItemBase2, "gap-2 pl-8", className),
10343
10362
  "data-ds": "",
10344
10363
  "data-ds-component": "dropdown-menu-checkbox-item",
10345
10364
  ...rest,
10346
10365
  children: [
10347
10366
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(radixUi.DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(CheckIcon6, { className: "size-4" }) }) }),
10348
- children
10367
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 flex items-center gap-2 [&>svg]:shrink-0 [&>svg]:size-4", children })
10349
10368
  ]
10350
10369
  }
10351
10370
  );
@@ -10360,13 +10379,13 @@ var DropdownMenuRadioItem = React.forwardRef(function DropdownMenuRadioItem2({ c
10360
10379
  radixUi.DropdownMenu.RadioItem,
10361
10380
  {
10362
10381
  ref,
10363
- className: chunk4ON3M3OM_cjs.cn(...menuItemBase2, "pl-8", className),
10382
+ className: chunk4ON3M3OM_cjs.cn(...menuItemBase2, "gap-2 pl-8", className),
10364
10383
  "data-ds": "",
10365
10384
  "data-ds-component": "dropdown-menu-radio-item",
10366
10385
  ...rest,
10367
10386
  children: [
10368
10387
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "absolute left-2 flex items-center justify-center", children: /* @__PURE__ */ jsxRuntime.jsx(radixUi.DropdownMenu.ItemIndicator, { children: /* @__PURE__ */ jsxRuntime.jsx(DotIcon2, { className: "size-4" }) }) }),
10369
- children
10388
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 flex items-center gap-2 [&>svg]:shrink-0 [&>svg]:size-4", children })
10370
10389
  ]
10371
10390
  }
10372
10391
  );
@@ -10414,8 +10433,7 @@ var DropdownMenuSubTrigger = React.forwardRef(function DropdownMenuSubTrigger2({
10414
10433
  ref,
10415
10434
  className: chunk4ON3M3OM_cjs.cn(
10416
10435
  ...menuItemBase2,
10417
- "data-[state=open]:bg-muted",
10418
- icon && "gap-2",
10436
+ "gap-2 data-[state=open]:bg-muted",
10419
10437
  inset && "pl-8",
10420
10438
  className
10421
10439
  ),
@@ -10424,7 +10442,7 @@ var DropdownMenuSubTrigger = React.forwardRef(function DropdownMenuSubTrigger2({
10424
10442
  ...rest,
10425
10443
  children: [
10426
10444
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 [&>svg]:size-4", "aria-hidden": "true", children: icon }),
10427
- /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1", children }),
10445
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "flex-1 flex items-center gap-2 [&>svg]:shrink-0 [&>svg]:size-4", children }),
10428
10446
  /* @__PURE__ */ jsxRuntime.jsx(ChevronRightIcon4, { className: "ml-auto size-4 text-muted-foreground" })
10429
10447
  ]
10430
10448
  }
@@ -13477,18 +13495,7 @@ var stripedStyle = {
13477
13495
  backgroundSize: "1rem 1rem"
13478
13496
  };
13479
13497
  var PROGRESS_STYLE_ID = "unified-ui-progress-keyframes";
13480
- function ProgressKeyframes() {
13481
- if (typeof document !== "undefined") {
13482
- if (document.getElementById(PROGRESS_STYLE_ID)) {
13483
- return null;
13484
- }
13485
- }
13486
- return /* @__PURE__ */ jsxRuntime.jsx(
13487
- "style",
13488
- {
13489
- id: PROGRESS_STYLE_ID,
13490
- dangerouslySetInnerHTML: {
13491
- __html: `
13498
+ var PROGRESS_KEYFRAMES_CSS = `
13492
13499
  @keyframes unified-ui-progress-indeterminate {
13493
13500
  0% { transform: translateX(-100%); width: 50%; }
13494
13501
  50% { transform: translateX(50%); width: 30%; }
@@ -13498,10 +13505,17 @@ function ProgressKeyframes() {
13498
13505
  0% { background-position: 1rem 0; }
13499
13506
  100% { background-position: 0 0; }
13500
13507
  }
13501
- `
13502
- }
13508
+ `;
13509
+ function useProgressKeyframes() {
13510
+ React.useEffect(() => {
13511
+ if (document.getElementById(PROGRESS_STYLE_ID)) {
13512
+ return;
13503
13513
  }
13504
- );
13514
+ const style = document.createElement("style");
13515
+ style.id = PROGRESS_STYLE_ID;
13516
+ style.textContent = PROGRESS_KEYFRAMES_CSS;
13517
+ document.head.appendChild(style);
13518
+ }, []);
13505
13519
  }
13506
13520
  var Progress = React.forwardRef(
13507
13521
  function Progress2({
@@ -13522,6 +13536,7 @@ var Progress = React.forwardRef(
13522
13536
  indicatorClassName,
13523
13537
  ...rest
13524
13538
  }, ref) {
13539
+ useProgressKeyframes();
13525
13540
  const clampedValue = Math.max(min2, Math.min(value, max2));
13526
13541
  const range = max2 - min2;
13527
13542
  const percentage = range > 0 ? (clampedValue - min2) / range * 100 : 0;
@@ -13561,7 +13576,6 @@ var Progress = React.forwardRef(
13561
13576
  "data-ds-size": size,
13562
13577
  ...indeterminate ? { "data-ds-indeterminate": "" } : {},
13563
13578
  children: [
13564
- /* @__PURE__ */ jsxRuntime.jsx(ProgressKeyframes, {}),
13565
13579
  showLabel && /* @__PURE__ */ jsxRuntime.jsxs("div", { className: "flex items-center justify-between mb-1.5", children: [
13566
13580
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium leading-4 text-foreground", children: label ?? "" }),
13567
13581
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "text-xs font-medium leading-4 text-muted-foreground tabular-nums", children: typeof label === "string" || !label ? labelFormatter(clampedValue, max2) : "" })
@@ -14595,6 +14609,168 @@ var SelectSeparator = React.forwardRef(function SelectSeparator2({ className, ..
14595
14609
  );
14596
14610
  });
14597
14611
  SelectSeparator.displayName = "SelectSeparator";
14612
+ var separatorVariants = classVarianceAuthority.cva(
14613
+ // Base styles — shared across all variants
14614
+ "shrink-0 bg-border",
14615
+ {
14616
+ variants: {
14617
+ /**
14618
+ * Visual variant of the separator line.
14619
+ */
14620
+ variant: {
14621
+ /**
14622
+ * Default — solid line using the border token color.
14623
+ */
14624
+ default: "",
14625
+ /**
14626
+ * Muted — lighter separator using the muted-foreground color at
14627
+ * reduced opacity. Useful for less prominent divisions.
14628
+ */
14629
+ muted: "bg-muted-foreground/20",
14630
+ /**
14631
+ * Dashed — renders a dashed border instead of a solid background.
14632
+ * Uses border-style rather than background.
14633
+ */
14634
+ dashed: "bg-transparent !h-auto !w-auto",
14635
+ /**
14636
+ * Gradient — fades in from transparent at both ends.
14637
+ * Creates a more elegant, subtle divider.
14638
+ */
14639
+ gradient: "bg-transparent"
14640
+ },
14641
+ /**
14642
+ * Orientation of the separator.
14643
+ */
14644
+ orientation: {
14645
+ horizontal: "h-px w-full",
14646
+ vertical: "h-full w-px"
14647
+ }
14648
+ },
14649
+ compoundVariants: [
14650
+ // Dashed + horizontal
14651
+ {
14652
+ variant: "dashed",
14653
+ orientation: "horizontal",
14654
+ class: "border-b border-dashed border-border w-full"
14655
+ },
14656
+ // Dashed + vertical
14657
+ {
14658
+ variant: "dashed",
14659
+ orientation: "vertical",
14660
+ class: "border-l border-dashed border-border h-full"
14661
+ }
14662
+ ],
14663
+ defaultVariants: {
14664
+ variant: "default",
14665
+ orientation: "horizontal"
14666
+ }
14667
+ }
14668
+ );
14669
+ var spacingYMap = {
14670
+ 0: "my-0",
14671
+ 1: "my-1",
14672
+ 2: "my-2",
14673
+ 3: "my-3",
14674
+ 4: "my-4",
14675
+ 5: "my-5",
14676
+ 6: "my-6",
14677
+ 8: "my-8",
14678
+ 10: "my-10",
14679
+ 12: "my-12"
14680
+ };
14681
+ var spacingXMap = {
14682
+ 0: "mx-0",
14683
+ 1: "mx-1",
14684
+ 2: "mx-2",
14685
+ 3: "mx-3",
14686
+ 4: "mx-4",
14687
+ 5: "mx-5",
14688
+ 6: "mx-6",
14689
+ 8: "mx-8",
14690
+ 10: "mx-10",
14691
+ 12: "mx-12"
14692
+ };
14693
+ var gradientHorizontal = "bg-gradient-to-r from-transparent via-border to-transparent";
14694
+ var gradientVertical = "bg-gradient-to-b from-transparent via-border to-transparent";
14695
+ var Separator2 = React.forwardRef(function Separator3({
14696
+ variant = "default",
14697
+ orientation = "horizontal",
14698
+ decorative = true,
14699
+ spacing = 4,
14700
+ label,
14701
+ className,
14702
+ ...rest
14703
+ }, ref) {
14704
+ const isVertical = orientation === "vertical";
14705
+ const spacingClass = isVertical ? spacingXMap[spacing] ?? "mx-4" : spacingYMap[spacing] ?? "my-4";
14706
+ const gradientClass = variant === "gradient" ? isVertical ? gradientVertical : gradientHorizontal : void 0;
14707
+ if (label && !isVertical) {
14708
+ return /* @__PURE__ */ jsxRuntime.jsxs(
14709
+ "div",
14710
+ {
14711
+ className: chunk4ON3M3OM_cjs.cn(
14712
+ "flex items-center w-full",
14713
+ spacingClass,
14714
+ className
14715
+ ),
14716
+ role: decorative ? "none" : "separator",
14717
+ "aria-orientation": decorative ? void 0 : orientation,
14718
+ "data-ds": "",
14719
+ "data-ds-component": "separator",
14720
+ "data-ds-variant": variant,
14721
+ "data-ds-orientation": orientation,
14722
+ "data-ds-labeled": "",
14723
+ children: [
14724
+ /* @__PURE__ */ jsxRuntime.jsx(
14725
+ radixUi.Separator.Root,
14726
+ {
14727
+ decorative: true,
14728
+ orientation,
14729
+ className: chunk4ON3M3OM_cjs.cn(
14730
+ separatorVariants({ variant, orientation }),
14731
+ gradientClass,
14732
+ "flex-1"
14733
+ )
14734
+ }
14735
+ ),
14736
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "px-3 text-xs text-muted-foreground font-medium select-none shrink-0", children: label }),
14737
+ /* @__PURE__ */ jsxRuntime.jsx(
14738
+ radixUi.Separator.Root,
14739
+ {
14740
+ decorative: true,
14741
+ orientation,
14742
+ className: chunk4ON3M3OM_cjs.cn(
14743
+ separatorVariants({ variant, orientation }),
14744
+ gradientClass,
14745
+ "flex-1"
14746
+ )
14747
+ }
14748
+ )
14749
+ ]
14750
+ }
14751
+ );
14752
+ }
14753
+ return /* @__PURE__ */ jsxRuntime.jsx(
14754
+ radixUi.Separator.Root,
14755
+ {
14756
+ ref,
14757
+ decorative,
14758
+ orientation,
14759
+ className: chunk4ON3M3OM_cjs.cn(
14760
+ separatorVariants({ variant, orientation }),
14761
+ gradientClass,
14762
+ spacingClass,
14763
+ className
14764
+ ),
14765
+ "data-ds": "",
14766
+ "data-ds-component": "separator",
14767
+ "data-ds-variant": variant,
14768
+ "data-ds-orientation": orientation,
14769
+ ...rest
14770
+ }
14771
+ );
14772
+ });
14773
+ Separator2.displayName = "Separator";
14598
14774
  var sheetContentVariants = classVarianceAuthority.cva(
14599
14775
  [
14600
14776
  // Layout
@@ -15163,51 +15339,14 @@ var DrawerClose = React.forwardRef(function DrawerClose2({ className, ...rest },
15163
15339
  );
15164
15340
  });
15165
15341
  DrawerClose.displayName = "DrawerClose";
15166
- var SidebarContext = React.createContext({
15167
- collapsed: false,
15168
- setCollapsed: () => {
15169
- },
15170
- isMobile: false,
15171
- mobileOpen: false,
15172
- setMobileOpen: () => {
15173
- }
15174
- });
15175
- function useSidebarContext() {
15176
- return React.useContext(SidebarContext);
15177
- }
15178
- function SidebarProvider({
15179
- defaultCollapsed = false,
15180
- collapsed: controlledCollapsed,
15181
- onCollapsedChange,
15182
- children
15183
- }) {
15184
- const [internalCollapsed, setInternalCollapsed] = React.useState(defaultCollapsed);
15185
- const [mobileOpen, setMobileOpen] = React.useState(false);
15186
- const collapsed = controlledCollapsed !== void 0 ? controlledCollapsed : internalCollapsed;
15187
- const setCollapsed = React.useCallback(
15188
- (v) => {
15189
- if (controlledCollapsed === void 0) setInternalCollapsed(v);
15190
- onCollapsedChange?.(v);
15191
- },
15192
- [controlledCollapsed, onCollapsedChange]
15193
- );
15194
- return /* @__PURE__ */ jsxRuntime.jsx(
15195
- SidebarContext.Provider,
15196
- {
15197
- value: {
15198
- collapsed,
15199
- setCollapsed,
15200
- isMobile: false,
15201
- mobileOpen,
15202
- setMobileOpen
15203
- },
15204
- children
15205
- }
15206
- );
15207
- }
15208
- SidebarProvider.displayName = "SidebarProvider";
15209
- function ChevronLeftIcon3({ className }) {
15210
- return /* @__PURE__ */ jsxRuntime.jsx(
15342
+ var SIDEBAR_COOKIE_NAME = "sidebar:state";
15343
+ var SIDEBAR_COOKIE_MAX_AGE = 60 * 60 * 24 * 7;
15344
+ var SIDEBAR_WIDTH = "16rem";
15345
+ var SIDEBAR_WIDTH_MOBILE = "18rem";
15346
+ var SIDEBAR_WIDTH_ICON = "3rem";
15347
+ var SIDEBAR_KEYBOARD_SHORTCUT = "b";
15348
+ function PanelLeftIcon({ className }) {
15349
+ return /* @__PURE__ */ jsxRuntime.jsxs(
15211
15350
  "svg",
15212
15351
  {
15213
15352
  className,
@@ -15219,162 +15358,893 @@ function ChevronLeftIcon3({ className }) {
15219
15358
  strokeLinecap: "round",
15220
15359
  strokeLinejoin: "round",
15221
15360
  "aria-hidden": "true",
15222
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m15 18-6-6 6-6" })
15361
+ children: [
15362
+ /* @__PURE__ */ jsxRuntime.jsx("rect", { width: "18", height: "18", x: "3", y: "3", rx: "2" }),
15363
+ /* @__PURE__ */ jsxRuntime.jsx("path", { d: "M9 3v18" })
15364
+ ]
15223
15365
  }
15224
15366
  );
15225
15367
  }
15226
- function ChevronRightIcon7({ className }) {
15227
- return /* @__PURE__ */ jsxRuntime.jsx(
15228
- "svg",
15229
- {
15230
- className,
15231
- xmlns: "http://www.w3.org/2000/svg",
15232
- viewBox: "0 0 24 24",
15233
- fill: "none",
15234
- stroke: "currentColor",
15235
- strokeWidth: "2",
15236
- strokeLinecap: "round",
15237
- strokeLinejoin: "round",
15238
- "aria-hidden": "true",
15239
- children: /* @__PURE__ */ jsxRuntime.jsx("path", { d: "m9 18 6-6-6-6" })
15240
- }
15241
- );
15368
+ var SidebarContext = React.createContext({
15369
+ state: "expanded",
15370
+ open: true,
15371
+ setOpen: () => {
15372
+ },
15373
+ openMobile: false,
15374
+ setOpenMobile: () => {
15375
+ },
15376
+ isMobile: false,
15377
+ toggleSidebar: () => {
15378
+ },
15379
+ variant: "default",
15380
+ collapsible: "offcanvas",
15381
+ side: "left"
15382
+ });
15383
+ function useSidebar() {
15384
+ const context = React.useContext(SidebarContext);
15385
+ if (!context) {
15386
+ throw new Error("useSidebar must be used within a <SidebarProvider>");
15387
+ }
15388
+ return context;
15242
15389
  }
15243
- var Sidebar = React.forwardRef(function Sidebar2({
15244
- side = "left",
15245
- collapsedWidth = "64px",
15246
- expandedWidth = "240px",
15247
- className,
15248
- children
15249
- }, ref) {
15250
- const { collapsed } = useSidebarContext();
15251
- const shouldReduce = framerMotion.useReducedMotion();
15252
- return /* @__PURE__ */ jsxRuntime.jsx(
15253
- framerMotion.motion.aside,
15254
- {
15255
- ref,
15256
- className: chunk4ON3M3OM_cjs.cn(
15257
- "flex flex-col h-full border-r border-border bg-background overflow-hidden",
15258
- side === "right" && "border-r-0 border-l",
15259
- className
15260
- ),
15261
- animate: {
15262
- width: collapsed ? collapsedWidth : expandedWidth
15390
+ var useSidebarContext = useSidebar;
15391
+ var MOBILE_BREAKPOINT = 768;
15392
+ function useIsMobile() {
15393
+ const [isMobile, setIsMobile] = React.useState(false);
15394
+ React.useEffect(() => {
15395
+ const mql = window.matchMedia(`(max-width: ${MOBILE_BREAKPOINT - 1}px)`);
15396
+ const onChange = () => setIsMobile(mql.matches);
15397
+ mql.addEventListener("change", onChange);
15398
+ setIsMobile(mql.matches);
15399
+ return () => mql.removeEventListener("change", onChange);
15400
+ }, []);
15401
+ return isMobile;
15402
+ }
15403
+ var SidebarProvider = React.forwardRef(
15404
+ function SidebarProvider2({
15405
+ defaultOpen = true,
15406
+ open: openProp,
15407
+ onOpenChange: setOpenProp,
15408
+ variant = "default",
15409
+ collapsible = "offcanvas",
15410
+ side = "left",
15411
+ className,
15412
+ style,
15413
+ children,
15414
+ ...rest
15415
+ }, ref) {
15416
+ const isMobile = useIsMobile();
15417
+ const [openMobile, setOpenMobile] = React.useState(false);
15418
+ const isControlled = openProp !== void 0;
15419
+ const [_open, _setOpen] = React.useState(defaultOpen);
15420
+ const open = isControlled ? openProp : _open;
15421
+ const setOpen = React.useCallback(
15422
+ (value) => {
15423
+ const openState = typeof value === "function" ? value(open) : value;
15424
+ if (setOpenProp) {
15425
+ setOpenProp(openState);
15426
+ } else {
15427
+ _setOpen(openState);
15428
+ }
15429
+ try {
15430
+ document.cookie = `${SIDEBAR_COOKIE_NAME}=${openState}; path=/; max-age=${SIDEBAR_COOKIE_MAX_AGE}`;
15431
+ } catch {
15432
+ }
15263
15433
  },
15264
- transition: shouldReduce ? { duration: 0 } : { type: "spring", stiffness: 300, damping: 30, mass: 0.8 },
15265
- "data-ds": "",
15266
- "data-ds-component": "sidebar",
15267
- "data-ds-collapsed": collapsed ? "" : void 0,
15268
- "data-ds-animated": "",
15269
- children
15270
- }
15271
- );
15272
- });
15273
- Sidebar.displayName = "Sidebar";
15274
- var SidebarToggle = React.forwardRef(
15275
- function SidebarToggle2({ className, children, ...rest }, ref) {
15276
- const { collapsed, setCollapsed } = useSidebarContext();
15277
- return /* @__PURE__ */ jsxRuntime.jsx(
15278
- "button",
15279
- {
15280
- ref,
15281
- type: "button",
15282
- onClick: () => setCollapsed(!collapsed),
15283
- "aria-label": collapsed ? "Expand sidebar" : "Collapse sidebar",
15284
- "aria-expanded": !collapsed,
15285
- className: chunk4ON3M3OM_cjs.cn(
15286
- "inline-flex items-center justify-center size-8 rounded-md",
15287
- "text-muted-foreground hover:text-foreground hover:bg-accent",
15288
- "transition-colors duration-fast",
15289
- chunk3EHT6IOA_cjs.focusRingClasses,
15290
- className
15291
- ),
15292
- "data-ds-component": "sidebar-toggle",
15293
- ...rest,
15294
- children: children ?? (collapsed ? /* @__PURE__ */ jsxRuntime.jsx(ChevronRightIcon7, { className: "size-4" }) : /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon3, { className: "size-4" }))
15434
+ [setOpenProp, open]
15435
+ );
15436
+ const toggleSidebar = React.useCallback(() => {
15437
+ if (isMobile) {
15438
+ setOpenMobile((prev) => !prev);
15439
+ } else {
15440
+ setOpen((prev) => !prev);
15295
15441
  }
15442
+ }, [isMobile, setOpen]);
15443
+ React.useEffect(() => {
15444
+ const handleKeyDown = (e) => {
15445
+ if (e.key === SIDEBAR_KEYBOARD_SHORTCUT && (e.metaKey || e.ctrlKey)) {
15446
+ e.preventDefault();
15447
+ toggleSidebar();
15448
+ }
15449
+ };
15450
+ window.addEventListener("keydown", handleKeyDown);
15451
+ return () => window.removeEventListener("keydown", handleKeyDown);
15452
+ }, [toggleSidebar]);
15453
+ const state = open ? "expanded" : "collapsed";
15454
+ const contextValue = React.useMemo(
15455
+ () => ({
15456
+ state,
15457
+ open,
15458
+ setOpen,
15459
+ openMobile,
15460
+ setOpenMobile,
15461
+ isMobile,
15462
+ toggleSidebar,
15463
+ variant,
15464
+ collapsible,
15465
+ side
15466
+ }),
15467
+ [
15468
+ state,
15469
+ open,
15470
+ setOpen,
15471
+ openMobile,
15472
+ setOpenMobile,
15473
+ isMobile,
15474
+ toggleSidebar,
15475
+ variant,
15476
+ collapsible,
15477
+ side
15478
+ ]
15296
15479
  );
15297
- }
15298
- );
15299
- SidebarToggle.displayName = "SidebarToggle";
15300
- var SidebarHeader = React.forwardRef(
15301
- function SidebarHeader2({ className, children, ...rest }, ref) {
15302
- return /* @__PURE__ */ jsxRuntime.jsx(
15480
+ return /* @__PURE__ */ jsxRuntime.jsx(SidebarContext.Provider, { value: contextValue, children: /* @__PURE__ */ jsxRuntime.jsx(radixUi.Tooltip.Provider, { delayDuration: 0, children: /* @__PURE__ */ jsxRuntime.jsx(
15303
15481
  "div",
15304
15482
  {
15305
15483
  ref,
15306
15484
  className: chunk4ON3M3OM_cjs.cn(
15307
- "flex items-center gap-3 p-4 border-b border-border shrink-0",
15485
+ "group/sidebar-wrapper flex min-h-svh w-full",
15486
+ "has-data-[variant=inset]:bg-sidebar",
15308
15487
  className
15309
15488
  ),
15310
- "data-ds-component": "sidebar-header",
15311
- ...rest,
15312
- children
15313
- }
15314
- );
15315
- }
15316
- );
15317
- SidebarHeader.displayName = "SidebarHeader";
15318
- var SidebarContent = React.forwardRef(
15319
- function SidebarContent2({ className, children, ...rest }, ref) {
15320
- return /* @__PURE__ */ jsxRuntime.jsx(
15321
- "div",
15322
- {
15323
- ref,
15324
- className: chunk4ON3M3OM_cjs.cn("flex-1 overflow-y-auto py-2", className),
15325
- "data-ds-component": "sidebar-content",
15489
+ style: {
15490
+ "--sidebar-width": SIDEBAR_WIDTH,
15491
+ "--sidebar-width-icon": SIDEBAR_WIDTH_ICON,
15492
+ ...style
15493
+ },
15494
+ "data-ds": "",
15495
+ "data-ds-component": "sidebar-provider",
15326
15496
  ...rest,
15327
15497
  children
15328
15498
  }
15329
- );
15499
+ ) }) });
15330
15500
  }
15331
15501
  );
15332
- SidebarContent.displayName = "SidebarContent";
15333
- var SidebarFooter = React.forwardRef(
15334
- function SidebarFooter2({ className, children, ...rest }, ref) {
15335
- return /* @__PURE__ */ jsxRuntime.jsx(
15336
- "div",
15337
- {
15338
- ref,
15339
- className: chunk4ON3M3OM_cjs.cn("shrink-0 border-t border-border p-4", className),
15340
- "data-ds-component": "sidebar-footer",
15341
- ...rest,
15342
- children
15343
- }
15344
- );
15502
+ SidebarProvider.displayName = "SidebarProvider";
15503
+ var Sidebar = React.forwardRef(
15504
+ function Sidebar2({
15505
+ side: sideProp,
15506
+ variant: variantProp,
15507
+ collapsible: collapsibleProp,
15508
+ className,
15509
+ children,
15510
+ ...rest
15511
+ }, ref) {
15512
+ const ctx = useSidebar();
15513
+ const side = sideProp ?? ctx.side;
15514
+ const variant = variantProp ?? ctx.variant;
15515
+ const collapsible = collapsibleProp ?? ctx.collapsible;
15516
+ const shouldReduce = framerMotion.useReducedMotion();
15517
+ if (collapsible === "none") {
15518
+ return /* @__PURE__ */ jsxRuntime.jsx(
15519
+ "div",
15520
+ {
15521
+ ref,
15522
+ className: chunk4ON3M3OM_cjs.cn(
15523
+ "flex h-full w-[--sidebar-width] flex-col bg-sidebar text-sidebar-foreground",
15524
+ className
15525
+ ),
15526
+ "data-ds": "",
15527
+ "data-ds-component": "sidebar",
15528
+ ...rest,
15529
+ children
15530
+ }
15531
+ );
15532
+ }
15533
+ return /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
15534
+ ctx.isMobile && /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: ctx.openMobile && /* @__PURE__ */ jsxRuntime.jsxs(jsxRuntime.Fragment, { children: [
15535
+ /* @__PURE__ */ jsxRuntime.jsx(
15536
+ framerMotion.motion.div,
15537
+ {
15538
+ className: "fixed inset-0 z-50 bg-black/50 backdrop-blur-sm",
15539
+ variants: shouldReduce ? void 0 : chunkF4JJFWWU_cjs.overlayBackdrop.variants,
15540
+ initial: shouldReduce ? { opacity: 0 } : "initial",
15541
+ animate: shouldReduce ? { opacity: 1 } : "animate",
15542
+ exit: shouldReduce ? { opacity: 0 } : "exit",
15543
+ transition: shouldReduce ? { duration: 0.15 } : chunkF4JJFWWU_cjs.overlayBackdrop.transition,
15544
+ onClick: () => ctx.setOpenMobile(false),
15545
+ "data-ds-animated": ""
15546
+ }
15547
+ ),
15548
+ /* @__PURE__ */ jsxRuntime.jsx(
15549
+ framerMotion.motion.div,
15550
+ {
15551
+ className: chunk4ON3M3OM_cjs.cn(
15552
+ "fixed inset-y-0 z-50 flex w-[--sidebar-width-mobile] flex-col bg-sidebar text-sidebar-foreground",
15553
+ "p-0 shadow-lg",
15554
+ side === "left" ? "left-0 border-r border-sidebar-border" : "right-0 border-l border-sidebar-border",
15555
+ className
15556
+ ),
15557
+ style: {
15558
+ "--sidebar-width-mobile": SIDEBAR_WIDTH_MOBILE
15559
+ },
15560
+ initial: {
15561
+ x: side === "left" ? "-100%" : "100%",
15562
+ opacity: shouldReduce ? 0 : 1
15563
+ },
15564
+ animate: {
15565
+ x: 0,
15566
+ opacity: 1
15567
+ },
15568
+ exit: {
15569
+ x: side === "left" ? "-100%" : "100%",
15570
+ opacity: shouldReduce ? 0 : 1
15571
+ },
15572
+ transition: shouldReduce ? { duration: 0.15 } : {
15573
+ type: "spring",
15574
+ stiffness: 300,
15575
+ damping: 30,
15576
+ mass: 0.8
15577
+ },
15578
+ "data-ds": "",
15579
+ "data-ds-component": "sidebar",
15580
+ "data-variant": variant,
15581
+ "data-side": side,
15582
+ "data-mobile": "",
15583
+ "data-ds-animated": "",
15584
+ children
15585
+ }
15586
+ )
15587
+ ] }) }),
15588
+ !ctx.isMobile && /* @__PURE__ */ jsxRuntime.jsxs(
15589
+ "div",
15590
+ {
15591
+ ref,
15592
+ className: "group peer hidden md:block text-sidebar-foreground",
15593
+ "data-state": ctx.state,
15594
+ "data-collapsible": ctx.state === "collapsed" ? collapsible : "",
15595
+ "data-variant": variant,
15596
+ "data-side": side,
15597
+ children: [
15598
+ /* @__PURE__ */ jsxRuntime.jsx(
15599
+ framerMotion.motion.div,
15600
+ {
15601
+ className: chunk4ON3M3OM_cjs.cn(
15602
+ "relative h-svh bg-transparent",
15603
+ "duration-200 ease-linear",
15604
+ variant === "floating" || variant === "inset" ? "w-[calc(var(--sidebar-width)+(--spacing(4)))]" : "w-[--sidebar-width]"
15605
+ ),
15606
+ animate: {
15607
+ width: ctx.state === "collapsed" ? collapsible === "offcanvas" ? "0px" : variant === "floating" || variant === "inset" ? "calc(var(--sidebar-width-icon) + theme(spacing.4) + 2px)" : "var(--sidebar-width-icon)" : variant === "floating" || variant === "inset" ? "calc(var(--sidebar-width) + theme(spacing.4))" : "var(--sidebar-width)"
15608
+ },
15609
+ transition: shouldReduce ? { duration: 0 } : { duration: 0.2, ease: [0.25, 0.1, 0.25, 1] }
15610
+ }
15611
+ ),
15612
+ /* @__PURE__ */ jsxRuntime.jsx(
15613
+ framerMotion.motion.div,
15614
+ {
15615
+ className: chunk4ON3M3OM_cjs.cn(
15616
+ "fixed inset-y-0 z-10 hidden h-svh md:flex flex-col",
15617
+ side === "left" ? "left-0" : "right-0",
15618
+ // Variant styles
15619
+ variant === "floating" && "m-2 rounded-lg border border-sidebar-border shadow-lg overflow-hidden",
15620
+ variant === "inset" && "m-2 rounded-lg overflow-hidden",
15621
+ variant === "default" && chunk4ON3M3OM_cjs.cn(
15622
+ "border-sidebar-border",
15623
+ side === "left" ? "border-r" : "border-l"
15624
+ ),
15625
+ "bg-sidebar text-sidebar-foreground",
15626
+ className
15627
+ ),
15628
+ animate: {
15629
+ width: ctx.state === "collapsed" ? collapsible === "offcanvas" ? "0px" : "var(--sidebar-width-icon)" : "var(--sidebar-width)"
15630
+ },
15631
+ transition: shouldReduce ? { duration: 0 } : { duration: 0.2, ease: [0.25, 0.1, 0.25, 1] },
15632
+ "data-ds": "",
15633
+ "data-ds-component": "sidebar",
15634
+ "data-variant": variant,
15635
+ "data-side": side,
15636
+ "data-state": ctx.state,
15637
+ "data-collapsible": ctx.state === "collapsed" ? collapsible : "",
15638
+ children: /* @__PURE__ */ jsxRuntime.jsx(
15639
+ "div",
15640
+ {
15641
+ className: chunk4ON3M3OM_cjs.cn(
15642
+ "flex h-full w-full flex-col",
15643
+ "group-data-[collapsible=offcanvas]:opacity-0 group-data-[collapsible=offcanvas]:pointer-events-none"
15644
+ ),
15645
+ "data-sidebar": "content-wrapper",
15646
+ children
15647
+ }
15648
+ )
15649
+ }
15650
+ )
15651
+ ]
15652
+ }
15653
+ )
15654
+ ] });
15655
+ }
15656
+ );
15657
+ Sidebar.displayName = "Sidebar";
15658
+ var SidebarTrigger = React.forwardRef(function SidebarTrigger2({ className, onClick, children, ...rest }, ref) {
15659
+ const { toggleSidebar, state, isMobile } = useSidebar();
15660
+ return /* @__PURE__ */ jsxRuntime.jsxs(
15661
+ "button",
15662
+ {
15663
+ ref,
15664
+ type: "button",
15665
+ onClick: (e) => {
15666
+ onClick?.(e);
15667
+ toggleSidebar();
15668
+ },
15669
+ "aria-label": state === "expanded" ? "Collapse sidebar" : "Expand sidebar",
15670
+ "aria-expanded": state === "expanded",
15671
+ className: chunk4ON3M3OM_cjs.cn(
15672
+ "inline-flex items-center justify-center size-8 shrink-0 rounded-md",
15673
+ "text-muted-foreground hover:text-foreground hover:bg-accent",
15674
+ "transition-colors duration-fast",
15675
+ chunk3EHT6IOA_cjs.focusRingClasses,
15676
+ className
15677
+ ),
15678
+ "data-ds": "",
15679
+ "data-ds-component": "sidebar-trigger",
15680
+ ...rest,
15681
+ children: [
15682
+ children ?? /* @__PURE__ */ jsxRuntime.jsx(PanelLeftIcon, { className: "size-4" }),
15683
+ /* @__PURE__ */ jsxRuntime.jsx("span", { className: "sr-only", children: "Toggle Sidebar" })
15684
+ ]
15685
+ }
15686
+ );
15687
+ });
15688
+ SidebarTrigger.displayName = "SidebarTrigger";
15689
+ var SidebarToggle = SidebarTrigger;
15690
+ var SidebarRail = React.forwardRef(
15691
+ function SidebarRail2({ className, ...rest }, ref) {
15692
+ const { toggleSidebar, side } = useSidebar();
15693
+ return /* @__PURE__ */ jsxRuntime.jsx(
15694
+ "button",
15695
+ {
15696
+ ref,
15697
+ type: "button",
15698
+ tabIndex: -1,
15699
+ "aria-label": "Toggle Sidebar",
15700
+ onClick: toggleSidebar,
15701
+ title: "Toggle Sidebar",
15702
+ className: chunk4ON3M3OM_cjs.cn(
15703
+ "absolute inset-y-0 z-20 hidden w-4 -translate-x-1/2 md:flex items-center justify-center",
15704
+ "after:absolute after:inset-y-0 after:left-1/2 after:w-0.5",
15705
+ "hover:after:bg-sidebar-border",
15706
+ "transition-all duration-fast ease-linear",
15707
+ "group-data-[side=left]:right-0 group-data-[side=right]:left-0",
15708
+ side === "left" ? "cursor-w-resize group-data-[state=collapsed]:cursor-e-resize" : "cursor-e-resize group-data-[state=collapsed]:cursor-w-resize",
15709
+ "[[data-side=left][data-state=collapsed]_&]:cursor-e-resize",
15710
+ "[[data-side=right][data-state=collapsed]_&]:cursor-w-resize",
15711
+ className
15712
+ ),
15713
+ "data-ds": "",
15714
+ "data-ds-component": "sidebar-rail",
15715
+ ...rest
15716
+ }
15717
+ );
15718
+ }
15719
+ );
15720
+ SidebarRail.displayName = "SidebarRail";
15721
+ var SidebarInset = React.forwardRef(
15722
+ function SidebarInset2({ className, children, ...rest }, ref) {
15723
+ return /* @__PURE__ */ jsxRuntime.jsx(
15724
+ "main",
15725
+ {
15726
+ ref,
15727
+ className: chunk4ON3M3OM_cjs.cn(
15728
+ "relative flex min-h-svh flex-1 flex-col bg-background",
15729
+ "peer-data-[variant=inset]:min-h-[calc(100svh-(--spacing(4)))]",
15730
+ "md:peer-data-[variant=inset]:m-2 md:peer-data-[variant=inset]:ml-0",
15731
+ "md:peer-data-[variant=inset]:rounded-xl md:peer-data-[variant=inset]:shadow-sm",
15732
+ className
15733
+ ),
15734
+ "data-ds": "",
15735
+ "data-ds-component": "sidebar-inset",
15736
+ ...rest,
15737
+ children
15738
+ }
15739
+ );
15740
+ }
15741
+ );
15742
+ SidebarInset.displayName = "SidebarInset";
15743
+ var SidebarHeader = React.forwardRef(
15744
+ function SidebarHeader2({ className, children, ...rest }, ref) {
15745
+ return /* @__PURE__ */ jsxRuntime.jsx(
15746
+ "div",
15747
+ {
15748
+ ref,
15749
+ className: chunk4ON3M3OM_cjs.cn(
15750
+ "flex flex-col gap-2 p-2",
15751
+ "group-data-[collapsible=icon]:items-center group-data-[collapsible=icon]:px-1.5",
15752
+ className
15753
+ ),
15754
+ "data-ds": "",
15755
+ "data-ds-component": "sidebar-header",
15756
+ "data-sidebar": "header",
15757
+ ...rest,
15758
+ children
15759
+ }
15760
+ );
15761
+ }
15762
+ );
15763
+ SidebarHeader.displayName = "SidebarHeader";
15764
+ var SidebarContent = React.forwardRef(
15765
+ function SidebarContent2({ className, children, ...rest }, ref) {
15766
+ return /* @__PURE__ */ jsxRuntime.jsx(
15767
+ "div",
15768
+ {
15769
+ ref,
15770
+ className: chunk4ON3M3OM_cjs.cn(
15771
+ "flex min-h-0 flex-1 flex-col gap-2 overflow-y-auto overflow-x-hidden",
15772
+ "group-data-[collapsible=icon]:items-center",
15773
+ className
15774
+ ),
15775
+ "data-ds": "",
15776
+ "data-ds-component": "sidebar-content",
15777
+ "data-sidebar": "content",
15778
+ ...rest,
15779
+ children
15780
+ }
15781
+ );
15782
+ }
15783
+ );
15784
+ SidebarContent.displayName = "SidebarContent";
15785
+ var SidebarFooter = React.forwardRef(
15786
+ function SidebarFooter2({ className, children, ...rest }, ref) {
15787
+ return /* @__PURE__ */ jsxRuntime.jsx(
15788
+ "div",
15789
+ {
15790
+ ref,
15791
+ className: chunk4ON3M3OM_cjs.cn(
15792
+ "flex flex-col gap-2 p-2",
15793
+ "group-data-[collapsible=icon]:items-center group-data-[collapsible=icon]:px-1.5",
15794
+ className
15795
+ ),
15796
+ "data-ds": "",
15797
+ "data-ds-component": "sidebar-footer",
15798
+ "data-sidebar": "footer",
15799
+ ...rest,
15800
+ children
15801
+ }
15802
+ );
15345
15803
  }
15346
15804
  );
15347
15805
  SidebarFooter.displayName = "SidebarFooter";
15348
- var SidebarSection = React.forwardRef(
15349
- function SidebarSection2({ title, className, children, ...rest }, ref) {
15350
- const { collapsed } = useSidebarContext();
15351
- return /* @__PURE__ */ jsxRuntime.jsxs(
15806
+ var SidebarSeparator = React.forwardRef(function SidebarSeparator2({ className, ...rest }, ref) {
15807
+ return /* @__PURE__ */ jsxRuntime.jsx(
15808
+ "hr",
15809
+ {
15810
+ ref,
15811
+ className: chunk4ON3M3OM_cjs.cn("mx-2 w-auto border-sidebar-border", className),
15812
+ "data-ds": "",
15813
+ "data-ds-component": "sidebar-separator",
15814
+ "data-sidebar": "separator",
15815
+ ...rest
15816
+ }
15817
+ );
15818
+ });
15819
+ SidebarSeparator.displayName = "SidebarSeparator";
15820
+ var SidebarInput = React.forwardRef(
15821
+ function SidebarInput2({ className, ...rest }, ref) {
15822
+ return /* @__PURE__ */ jsxRuntime.jsx(
15823
+ "input",
15824
+ {
15825
+ ref,
15826
+ className: chunk4ON3M3OM_cjs.cn(
15827
+ "h-8 w-full rounded-md border border-sidebar-border bg-background px-3",
15828
+ "text-sm text-sidebar-foreground placeholder:text-sidebar-foreground/50",
15829
+ "transition-[border-color,box-shadow] duration-fast",
15830
+ "focus:border-sidebar-ring focus:outline-none focus:ring-2 focus:ring-sidebar-ring/20",
15831
+ className
15832
+ ),
15833
+ "data-ds": "",
15834
+ "data-ds-component": "sidebar-input",
15835
+ "data-sidebar": "input",
15836
+ ...rest
15837
+ }
15838
+ );
15839
+ }
15840
+ );
15841
+ SidebarInput.displayName = "SidebarInput";
15842
+ var SidebarGroup = React.forwardRef(
15843
+ function SidebarGroup2({ className, children, ...rest }, ref) {
15844
+ return /* @__PURE__ */ jsxRuntime.jsx(
15352
15845
  "div",
15353
15846
  {
15354
15847
  ref,
15355
- className: chunk4ON3M3OM_cjs.cn("px-3 py-2", className),
15356
- "data-ds-component": "sidebar-section",
15848
+ className: chunk4ON3M3OM_cjs.cn(
15849
+ "relative flex w-full min-w-0 flex-col p-2",
15850
+ "group-data-[collapsible=icon]:items-center group-data-[collapsible=icon]:px-1.5",
15851
+ className
15852
+ ),
15853
+ "data-ds": "",
15854
+ "data-ds-component": "sidebar-group",
15855
+ "data-sidebar": "group",
15357
15856
  ...rest,
15358
- children: [
15359
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: title && !collapsed && /* @__PURE__ */ jsxRuntime.jsx(
15360
- framerMotion.motion.p,
15361
- {
15362
- className: "px-2 mb-1 text-xs font-semibold uppercase tracking-wider text-muted-foreground",
15363
- initial: { opacity: 0 },
15364
- animate: { opacity: 1 },
15365
- exit: { opacity: 0 },
15366
- transition: { duration: 0.15 },
15367
- "data-ds-animated": "",
15368
- children: title
15369
- }
15370
- ) }),
15371
- /* @__PURE__ */ jsxRuntime.jsx("div", { className: "flex flex-col gap-0.5", children })
15372
- ]
15857
+ children
15858
+ }
15859
+ );
15860
+ }
15861
+ );
15862
+ SidebarGroup.displayName = "SidebarGroup";
15863
+ var SidebarGroupLabel = React.forwardRef(function SidebarGroupLabel2({ className, asChild = false, children, ...rest }, ref) {
15864
+ const { state } = useSidebar();
15865
+ const classes = chunk4ON3M3OM_cjs.cn(
15866
+ "flex h-8 shrink-0 items-center rounded-md px-2",
15867
+ "text-xs font-medium text-sidebar-foreground/70",
15868
+ "outline-none ring-sidebar-ring",
15869
+ "transition-[margin,opacity,padding] duration-200 ease-linear",
15870
+ // When collapsed to icon mode, hide label
15871
+ state === "collapsed" && "opacity-0 overflow-hidden h-0 p-0 m-0",
15872
+ className
15873
+ );
15874
+ if (asChild) {
15875
+ return /* @__PURE__ */ jsxRuntime.jsx(
15876
+ "div",
15877
+ {
15878
+ ref,
15879
+ className: classes,
15880
+ "data-ds": "",
15881
+ "data-ds-component": "sidebar-group-label",
15882
+ "data-sidebar": "group-label",
15883
+ ...rest,
15884
+ children
15885
+ }
15886
+ );
15887
+ }
15888
+ return /* @__PURE__ */ jsxRuntime.jsx(
15889
+ "div",
15890
+ {
15891
+ ref,
15892
+ className: classes,
15893
+ "data-ds": "",
15894
+ "data-ds-component": "sidebar-group-label",
15895
+ "data-sidebar": "group-label",
15896
+ ...rest,
15897
+ children
15898
+ }
15899
+ );
15900
+ });
15901
+ SidebarGroupLabel.displayName = "SidebarGroupLabel";
15902
+ var SidebarGroupAction = React.forwardRef(function SidebarGroupAction2({ className, children, ...rest }, ref) {
15903
+ const { state } = useSidebar();
15904
+ return /* @__PURE__ */ jsxRuntime.jsx(
15905
+ "button",
15906
+ {
15907
+ ref,
15908
+ type: "button",
15909
+ className: chunk4ON3M3OM_cjs.cn(
15910
+ "absolute right-3 top-3.5 flex items-center justify-center",
15911
+ "size-5 rounded-md p-0",
15912
+ "text-sidebar-foreground/70 ring-sidebar-ring",
15913
+ "outline-none",
15914
+ "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
15915
+ "transition-transform duration-200",
15916
+ chunk3EHT6IOA_cjs.focusRingClasses,
15917
+ "[&>svg]:size-4 [&>svg]:shrink-0",
15918
+ // When icon-collapsed, hide
15919
+ state === "collapsed" && "hidden",
15920
+ className
15921
+ ),
15922
+ "data-ds": "",
15923
+ "data-ds-component": "sidebar-group-action",
15924
+ "data-sidebar": "group-action",
15925
+ ...rest,
15926
+ children
15927
+ }
15928
+ );
15929
+ });
15930
+ SidebarGroupAction.displayName = "SidebarGroupAction";
15931
+ var SidebarGroupContent = React.forwardRef(function SidebarGroupContent2({ className, children, ...rest }, ref) {
15932
+ return /* @__PURE__ */ jsxRuntime.jsx(
15933
+ "div",
15934
+ {
15935
+ ref,
15936
+ className: chunk4ON3M3OM_cjs.cn("w-full text-sm", className),
15937
+ "data-ds": "",
15938
+ "data-ds-component": "sidebar-group-content",
15939
+ "data-sidebar": "group-content",
15940
+ ...rest,
15941
+ children
15942
+ }
15943
+ );
15944
+ });
15945
+ SidebarGroupContent.displayName = "SidebarGroupContent";
15946
+ var SidebarMenu = React.forwardRef(
15947
+ function SidebarMenu2({ className, children, ...rest }, ref) {
15948
+ return /* @__PURE__ */ jsxRuntime.jsx(
15949
+ "ul",
15950
+ {
15951
+ ref,
15952
+ className: chunk4ON3M3OM_cjs.cn(
15953
+ "flex w-full min-w-0 flex-col gap-1 list-none m-0 p-0",
15954
+ "group-data-[collapsible=icon]:items-center",
15955
+ className
15956
+ ),
15957
+ "data-ds": "",
15958
+ "data-ds-component": "sidebar-menu",
15959
+ "data-sidebar": "menu",
15960
+ ...rest,
15961
+ children
15373
15962
  }
15374
15963
  );
15375
15964
  }
15376
15965
  );
15377
- SidebarSection.displayName = "SidebarSection";
15966
+ SidebarMenu.displayName = "SidebarMenu";
15967
+ var SidebarMenuItem = React.forwardRef(function SidebarMenuItem2({ className, children, ...rest }, ref) {
15968
+ return /* @__PURE__ */ jsxRuntime.jsx(
15969
+ "li",
15970
+ {
15971
+ ref,
15972
+ className: chunk4ON3M3OM_cjs.cn("group/menu-item relative list-none m-0 p-0", className),
15973
+ "data-ds": "",
15974
+ "data-ds-component": "sidebar-menu-item",
15975
+ "data-sidebar": "menu-item",
15976
+ ...rest,
15977
+ children
15978
+ }
15979
+ );
15980
+ });
15981
+ SidebarMenuItem.displayName = "SidebarMenuItem";
15982
+ var SidebarMenuButton = React.forwardRef(function SidebarMenuButton2({
15983
+ isActive = false,
15984
+ size = "default",
15985
+ variant = "default",
15986
+ tooltip,
15987
+ asChild = false,
15988
+ className,
15989
+ children,
15990
+ ...rest
15991
+ }, ref) {
15992
+ const { state, isMobile, collapsible } = useSidebar();
15993
+ const isCollapsed = state === "collapsed" && collapsible === "icon";
15994
+ const lgExpandedLayout = !isCollapsed ? [
15995
+ "[&>*:nth-child(2)]:flex-1 [&>*:nth-child(2)]:min-w-0",
15996
+ "[&>*:nth-child(2)]:grid [&>*:nth-child(2)]:text-left [&>*:nth-child(2)]:text-sm [&>*:nth-child(2)]:leading-tight",
15997
+ "[&>*:nth-child(2)_span]:truncate",
15998
+ "[&>svg:last-child]:ml-auto [&>svg:last-child]:shrink-0"
15999
+ ].join(" ") : "";
16000
+ const sizeClasses3 = {
16001
+ sm: "h-7 text-xs",
16002
+ default: "h-8 text-sm",
16003
+ lg: [
16004
+ "h-12 text-sm",
16005
+ lgExpandedLayout,
16006
+ // lg collapsed: shrink height to match default buttons and scale
16007
+ // the first-child wrapper (logo div, Avatar) to 24px so it fits
16008
+ // neatly inside the 32px collapsed button.
16009
+ "group-data-[collapsible=icon]:!h-8",
16010
+ "group-data-[collapsible=icon]:[&>:first-child]:!size-6",
16011
+ "group-data-[collapsible=icon]:[&>:first-child]:shrink-0",
16012
+ "group-data-[collapsible=icon]:[&>:first-child]:overflow-hidden",
16013
+ "group-data-[collapsible=icon]:[&>:first-child]:rounded-md"
16014
+ ].join(" ")
16015
+ };
16016
+ const buttonClasses = chunk4ON3M3OM_cjs.cn(
16017
+ // Base
16018
+ "peer/menu-button flex w-full items-center gap-2 overflow-hidden rounded-md p-2",
16019
+ "outline-none ring-sidebar-ring",
16020
+ "transition-[width,height,padding] duration-200 ease-linear",
16021
+ chunk3EHT6IOA_cjs.focusRingClasses,
16022
+ // Active & hover states
16023
+ "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
16024
+ "active:bg-sidebar-accent active:text-sidebar-accent-foreground",
16025
+ // Size
16026
+ sizeClasses3[size],
16027
+ // Variant
16028
+ variant === "outline" && "bg-background shadow-[0_0_0_1px_var(--sidebar-border)] hover:shadow-[0_0_0_1px_var(--sidebar-accent)]",
16029
+ // Active
16030
+ isActive && "bg-sidebar-accent text-sidebar-accent-foreground font-medium",
16031
+ // Icon collapse — fixed 32px button, no padding, center the icon,
16032
+ // hide everything except the first child (icon/avatar).
16033
+ // Plain <svg> icons stay at size-4 (16px); lg wrapper divs are
16034
+ // handled separately by the lg sizeClass above.
16035
+ isCollapsed && "!size-8 !p-0 !gap-0 justify-center [&>*:not(:first-child)]:hidden [&>svg]:size-4",
16036
+ // Disabled
16037
+ "disabled:pointer-events-none disabled:opacity-50",
16038
+ // Icon sizing
16039
+ "[&>svg]:size-4 [&>svg]:shrink-0",
16040
+ className
16041
+ );
16042
+ const button = asChild ? /* @__PURE__ */ jsxRuntime.jsx(
16043
+ "span",
16044
+ {
16045
+ ref,
16046
+ className: buttonClasses,
16047
+ "data-ds": "",
16048
+ "data-ds-component": "sidebar-menu-button",
16049
+ "data-sidebar": "menu-button",
16050
+ "data-size": size,
16051
+ "data-active": isActive ? "" : void 0,
16052
+ children
16053
+ }
16054
+ ) : /* @__PURE__ */ jsxRuntime.jsx(
16055
+ "button",
16056
+ {
16057
+ ref,
16058
+ type: "button",
16059
+ className: buttonClasses,
16060
+ "aria-current": isActive ? "page" : void 0,
16061
+ "data-ds": "",
16062
+ "data-ds-component": "sidebar-menu-button",
16063
+ "data-sidebar": "menu-button",
16064
+ "data-size": size,
16065
+ "data-active": isActive ? "" : void 0,
16066
+ ...rest,
16067
+ children
16068
+ }
16069
+ );
16070
+ if (!tooltip || isMobile) {
16071
+ return button;
16072
+ }
16073
+ if (!isCollapsed) {
16074
+ return button;
16075
+ }
16076
+ const tooltipContent = typeof tooltip === "string" ? tooltip : tooltip;
16077
+ return /* @__PURE__ */ jsxRuntime.jsxs(radixUi.Tooltip.Root, { children: [
16078
+ /* @__PURE__ */ jsxRuntime.jsx(radixUi.Tooltip.Trigger, { asChild: true, children: button }),
16079
+ /* @__PURE__ */ jsxRuntime.jsx(radixUi.Tooltip.Portal, { children: /* @__PURE__ */ jsxRuntime.jsx(
16080
+ radixUi.Tooltip.Content,
16081
+ {
16082
+ side: "right",
16083
+ align: "center",
16084
+ sideOffset: 4,
16085
+ className: chunk4ON3M3OM_cjs.cn(
16086
+ "z-(--z-tooltip,9999)",
16087
+ "overflow-hidden rounded-md px-3 py-1.5",
16088
+ "bg-sidebar-primary text-sidebar-primary-foreground",
16089
+ "text-xs font-medium",
16090
+ "animate-in fade-in-0 zoom-in-95",
16091
+ "data-[side=right]:slide-in-from-left-2"
16092
+ ),
16093
+ children: tooltipContent
16094
+ }
16095
+ ) })
16096
+ ] });
16097
+ });
16098
+ SidebarMenuButton.displayName = "SidebarMenuButton";
16099
+ var SidebarMenuAction = React.forwardRef(function SidebarMenuAction2({ showOnHover = false, className, children, ...rest }, ref) {
16100
+ const { state } = useSidebar();
16101
+ return /* @__PURE__ */ jsxRuntime.jsx(
16102
+ "button",
16103
+ {
16104
+ ref,
16105
+ type: "button",
16106
+ className: chunk4ON3M3OM_cjs.cn(
16107
+ "absolute right-1 top-1.5 flex items-center justify-center",
16108
+ "size-5 rounded-md p-0",
16109
+ "text-sidebar-foreground/70 outline-none ring-sidebar-ring",
16110
+ "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground",
16111
+ "transition-opacity duration-fast",
16112
+ chunk3EHT6IOA_cjs.focusRingClasses,
16113
+ "[&>svg]:size-4 [&>svg]:shrink-0",
16114
+ // Show on hover only
16115
+ showOnHover && "opacity-0 group-hover/menu-item:opacity-100 group-focus-within/menu-item:opacity-100 peer-data-active/menu-button:text-sidebar-accent-foreground",
16116
+ // Hide when collapsed to icon mode
16117
+ state === "collapsed" && "hidden",
16118
+ className
16119
+ ),
16120
+ "data-ds": "",
16121
+ "data-ds-component": "sidebar-menu-action",
16122
+ "data-sidebar": "menu-action",
16123
+ ...rest,
16124
+ children
16125
+ }
16126
+ );
16127
+ });
16128
+ SidebarMenuAction.displayName = "SidebarMenuAction";
16129
+ var SidebarMenuBadge = React.forwardRef(function SidebarMenuBadge2({ className, children, ...rest }, ref) {
16130
+ const { state } = useSidebar();
16131
+ return /* @__PURE__ */ jsxRuntime.jsx(
16132
+ "div",
16133
+ {
16134
+ ref,
16135
+ className: chunk4ON3M3OM_cjs.cn(
16136
+ "absolute right-1 flex h-5 min-w-5 items-center justify-center rounded-md px-1",
16137
+ "text-xs font-medium tabular-nums text-sidebar-foreground",
16138
+ "select-none pointer-events-none",
16139
+ // Hide when collapsed
16140
+ state === "collapsed" && "hidden",
16141
+ className
16142
+ ),
16143
+ "data-ds": "",
16144
+ "data-ds-component": "sidebar-menu-badge",
16145
+ "data-sidebar": "menu-badge",
16146
+ ...rest,
16147
+ children
16148
+ }
16149
+ );
16150
+ });
16151
+ SidebarMenuBadge.displayName = "SidebarMenuBadge";
16152
+ var SidebarMenuSkeleton = React.forwardRef(function SidebarMenuSkeleton2({ className, showIcon = false, ...rest }, ref) {
16153
+ const width = React.useMemo(() => {
16154
+ return `${Math.floor(Math.random() * 40) + 50}%`;
16155
+ }, []);
16156
+ return /* @__PURE__ */ jsxRuntime.jsxs(
16157
+ "div",
16158
+ {
16159
+ ref,
16160
+ className: chunk4ON3M3OM_cjs.cn(
16161
+ "flex h-8 items-center gap-2 rounded-md px-2",
16162
+ className
16163
+ ),
16164
+ "data-ds": "",
16165
+ "data-ds-component": "sidebar-menu-skeleton",
16166
+ "data-sidebar": "menu-skeleton",
16167
+ ...rest,
16168
+ children: [
16169
+ showIcon && /* @__PURE__ */ jsxRuntime.jsx("div", { className: "size-4 rounded-md bg-sidebar-accent animate-pulse" }),
16170
+ /* @__PURE__ */ jsxRuntime.jsx(
16171
+ "div",
16172
+ {
16173
+ className: "h-4 max-w-[--skeleton-width] flex-1 rounded-md bg-sidebar-accent animate-pulse",
16174
+ style: { "--skeleton-width": width }
16175
+ }
16176
+ )
16177
+ ]
16178
+ }
16179
+ );
16180
+ });
16181
+ SidebarMenuSkeleton.displayName = "SidebarMenuSkeleton";
16182
+ var SidebarMenuSub = React.forwardRef(function SidebarMenuSub2({ className, children, ...rest }, ref) {
16183
+ const { state } = useSidebar();
16184
+ return /* @__PURE__ */ jsxRuntime.jsx(
16185
+ "ul",
16186
+ {
16187
+ ref,
16188
+ className: chunk4ON3M3OM_cjs.cn(
16189
+ "mx-3.5 flex min-w-0 translate-x-px flex-col gap-1 list-none m-0 p-0",
16190
+ "border-l border-sidebar-border pl-2.5 py-0.5",
16191
+ // Hide when collapsed to icon
16192
+ state === "collapsed" && "hidden",
16193
+ className
16194
+ ),
16195
+ "data-ds": "",
16196
+ "data-ds-component": "sidebar-menu-sub",
16197
+ "data-sidebar": "menu-sub",
16198
+ ...rest,
16199
+ children
16200
+ }
16201
+ );
16202
+ });
16203
+ SidebarMenuSub.displayName = "SidebarMenuSub";
16204
+ var SidebarMenuSubItem = React.forwardRef(function SidebarMenuSubItem2({ className, children, ...rest }, ref) {
16205
+ return /* @__PURE__ */ jsxRuntime.jsx(
16206
+ "li",
16207
+ {
16208
+ ref,
16209
+ className: chunk4ON3M3OM_cjs.cn("list-none m-0 p-0", className),
16210
+ "data-ds": "",
16211
+ "data-ds-component": "sidebar-menu-sub-item",
16212
+ "data-sidebar": "menu-sub-item",
16213
+ ...rest,
16214
+ children
16215
+ }
16216
+ );
16217
+ });
16218
+ SidebarMenuSubItem.displayName = "SidebarMenuSubItem";
16219
+ var SidebarMenuSubButton = React.forwardRef(function SidebarMenuSubButton2({ isActive = false, size = "md", className, children, ...rest }, ref) {
16220
+ return /* @__PURE__ */ jsxRuntime.jsx(
16221
+ "a",
16222
+ {
16223
+ ref,
16224
+ className: chunk4ON3M3OM_cjs.cn(
16225
+ "flex min-w-0 items-center gap-2 overflow-hidden rounded-md px-2 no-underline",
16226
+ "text-sidebar-foreground/70 outline-none ring-sidebar-ring",
16227
+ "transition-colors duration-fast",
16228
+ "hover:bg-sidebar-accent hover:text-sidebar-accent-foreground hover:no-underline",
16229
+ chunk3EHT6IOA_cjs.focusRingClasses,
16230
+ size === "sm" ? "h-6 text-xs" : "h-7 text-xs",
16231
+ isActive && "bg-sidebar-accent text-sidebar-accent-foreground font-medium",
16232
+ "disabled:pointer-events-none disabled:opacity-50",
16233
+ "[&>svg]:size-4 [&>svg]:shrink-0 [&>svg]:text-sidebar-accent-foreground",
16234
+ className
16235
+ ),
16236
+ "aria-current": isActive ? "page" : void 0,
16237
+ "data-ds": "",
16238
+ "data-ds-component": "sidebar-menu-sub-button",
16239
+ "data-sidebar": "menu-sub-button",
16240
+ "data-active": isActive ? "" : void 0,
16241
+ ...rest,
16242
+ children
16243
+ }
16244
+ );
16245
+ });
16246
+ SidebarMenuSubButton.displayName = "SidebarMenuSubButton";
16247
+ var SidebarSection = SidebarGroup;
15378
16248
  var SidebarItem = React.forwardRef(
15379
16249
  function SidebarItem2({
15380
16250
  icon,
@@ -15386,12 +16256,14 @@ var SidebarItem = React.forwardRef(
15386
16256
  className,
15387
16257
  children,
15388
16258
  ...rest
15389
- }, _ref) {
15390
- const { collapsed } = useSidebarContext();
16259
+ }, ref) {
16260
+ const { state } = useSidebar();
16261
+ const isCollapsed = state === "collapsed";
15391
16262
  const Tag3 = href ? "a" : "button";
15392
16263
  return /* @__PURE__ */ jsxRuntime.jsxs(
15393
16264
  Tag3,
15394
16265
  {
16266
+ ref,
15395
16267
  href,
15396
16268
  type: href ? void 0 : "button",
15397
16269
  disabled,
@@ -15402,17 +16274,18 @@ var SidebarItem = React.forwardRef(
15402
16274
  "transition-colors duration-fast",
15403
16275
  "disabled:pointer-events-none disabled:opacity-50",
15404
16276
  chunk3EHT6IOA_cjs.focusRingClasses,
15405
- active ? "bg-accent text-accent-foreground" : "text-muted-foreground hover:text-foreground hover:bg-accent/60",
15406
- collapsed && "justify-center",
16277
+ active ? "bg-sidebar-accent text-sidebar-accent-foreground" : "text-sidebar-foreground/70 hover:text-sidebar-foreground hover:bg-sidebar-accent/60",
16278
+ isCollapsed && "justify-center",
15407
16279
  className
15408
16280
  ),
15409
- title: collapsed && typeof label === "string" ? label : void 0,
16281
+ title: isCollapsed && typeof label === "string" ? label : void 0,
16282
+ "data-ds": "",
15410
16283
  "data-ds-component": "sidebar-item",
15411
16284
  "data-ds-active": active ? "" : void 0,
15412
16285
  ...rest,
15413
16286
  children: [
15414
16287
  icon && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0 size-5 flex items-center justify-center", children: icon }),
15415
- /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: !collapsed && (label || children) && /* @__PURE__ */ jsxRuntime.jsx(
16288
+ /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: !isCollapsed && (label || children) && /* @__PURE__ */ jsxRuntime.jsx(
15416
16289
  framerMotion.motion.span,
15417
16290
  {
15418
16291
  className: "flex-1 truncate",
@@ -15424,32 +16297,15 @@ var SidebarItem = React.forwardRef(
15424
16297
  children: label ?? children
15425
16298
  }
15426
16299
  ) }),
15427
- badge && !collapsed && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: badge })
16300
+ badge && !isCollapsed && /* @__PURE__ */ jsxRuntime.jsx("span", { className: "shrink-0", children: badge })
15428
16301
  ]
15429
16302
  }
15430
16303
  );
15431
16304
  }
15432
16305
  );
15433
16306
  SidebarItem.displayName = "SidebarItem";
15434
- function SidebarMobileOverlay({ className }) {
15435
- const { mobileOpen, setMobileOpen } = useSidebarContext();
15436
- const shouldReduce = framerMotion.useReducedMotion();
15437
- return /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { children: mobileOpen && /* @__PURE__ */ jsxRuntime.jsx(
15438
- framerMotion.motion.div,
15439
- {
15440
- className: chunk4ON3M3OM_cjs.cn(
15441
- "fixed inset-0 z-overlay bg-black/50 backdrop-blur-sm md:hidden",
15442
- className
15443
- ),
15444
- variants: shouldReduce ? void 0 : chunkF4JJFWWU_cjs.overlayBackdrop.variants,
15445
- initial: shouldReduce ? { opacity: 0 } : "initial",
15446
- animate: shouldReduce ? { opacity: 1 } : "animate",
15447
- exit: shouldReduce ? { opacity: 0 } : "exit",
15448
- transition: shouldReduce ? { duration: 0.15 } : chunkF4JJFWWU_cjs.overlayBackdrop.transition,
15449
- onClick: () => setMobileOpen(false),
15450
- "data-ds-animated": ""
15451
- }
15452
- ) });
16307
+ function SidebarMobileOverlay(_props) {
16308
+ return null;
15453
16309
  }
15454
16310
  SidebarMobileOverlay.displayName = "SidebarMobileOverlay";
15455
16311
  var skeletonVariants = classVarianceAuthority.cva(
@@ -16557,11 +17413,11 @@ var Switch = React.forwardRef(function Switch2({
16557
17413
  const [internalChecked, setInternalChecked] = React.useState(
16558
17414
  checked ?? defaultChecked ?? false
16559
17415
  );
16560
- React.useEffect(() => {
16561
- if (isControlled) {
16562
- setInternalChecked(checked);
16563
- }
16564
- }, [isControlled, checked]);
17416
+ const [prevChecked, setPrevChecked] = React.useState(checked);
17417
+ if (isControlled && checked !== prevChecked) {
17418
+ setPrevChecked(checked);
17419
+ setInternalChecked(checked);
17420
+ }
16565
17421
  const handleCheckedChange = React.useCallback(
16566
17422
  (value) => {
16567
17423
  if (!isControlled) {
@@ -17076,20 +17932,17 @@ var Textarea = React.forwardRef(
17076
17932
  ...rest
17077
17933
  }, ref) {
17078
17934
  const internalRef = React.useRef(null);
17079
- const [charCount, setCharCount] = React.useState(() => {
17080
- if (value !== void 0) return String(value).length;
17081
- if (defaultValue !== void 0) return String(defaultValue).length;
17082
- return 0;
17083
- });
17084
- const adjustHeight = useAutoResize(internalRef, autoResize, maxHeight);
17085
- React.useEffect(() => {
17086
- if (value !== void 0) {
17087
- setCharCount(String(value).length);
17935
+ const [uncontrolledCharCount, setUncontrolledCharCount] = React.useState(
17936
+ () => {
17937
+ if (defaultValue !== void 0) return String(defaultValue).length;
17938
+ return 0;
17088
17939
  }
17089
- }, [value]);
17940
+ );
17941
+ const charCount = value !== void 0 ? String(value).length : uncontrolledCharCount;
17942
+ const adjustHeight = useAutoResize(internalRef, autoResize, maxHeight);
17090
17943
  const handleChange = React.useCallback(
17091
17944
  (e) => {
17092
- setCharCount(e.target.value.length);
17945
+ setUncontrolledCharCount(e.target.value.length);
17093
17946
  adjustHeight();
17094
17947
  onChange?.(e);
17095
17948
  },
@@ -18424,13 +19277,15 @@ var ColorPicker = React.forwardRef(
18424
19277
  const [hue, setHue] = React.useState(hsl.h);
18425
19278
  const [sat, setSat] = React.useState(hsl.s);
18426
19279
  const [lit, setLit] = React.useState(hsl.l);
18427
- React.useEffect(() => {
19280
+ const [prevValue, setPrevValue] = React.useState(currentValue);
19281
+ if (currentValue !== prevValue) {
19282
+ setPrevValue(currentValue);
18428
19283
  const parsed = hexToHsl(currentValue);
18429
19284
  setHue(parsed.h);
18430
19285
  setSat(parsed.s);
18431
19286
  setLit(parsed.l);
18432
19287
  setHexInput(currentValue);
18433
- }, [currentValue]);
19288
+ }
18434
19289
  const updateColor = React.useCallback(
18435
19290
  (hex) => {
18436
19291
  if (!value) setInternalValue(hex);
@@ -18727,7 +19582,7 @@ var SonnerToaster = React.forwardRef(
18727
19582
  }
18728
19583
  );
18729
19584
  SonnerToaster.displayName = "SonnerToaster";
18730
- function ChevronRightIcon8({ className }) {
19585
+ function ChevronRightIcon7({ className }) {
18731
19586
  return /* @__PURE__ */ jsxRuntime.jsx(
18732
19587
  "svg",
18733
19588
  {
@@ -18955,7 +19810,7 @@ function TreeItem({ node, depth }) {
18955
19810
  tabIndex: node.disabled ? -1 : 0,
18956
19811
  children: [
18957
19812
  /* @__PURE__ */ jsxRuntime.jsx("span", { className: "inline-flex size-4 items-center justify-center shrink-0", children: hasChildren && /* @__PURE__ */ jsxRuntime.jsx(
18958
- ChevronRightIcon8,
19813
+ ChevronRightIcon7,
18959
19814
  {
18960
19815
  className: chunk4ON3M3OM_cjs.cn(
18961
19816
  "size-3.5 text-muted-foreground transition-transform duration-fast",
@@ -19277,7 +20132,7 @@ function XIcon6({ className }) {
19277
20132
  }
19278
20133
  );
19279
20134
  }
19280
- function ChevronLeftIcon4({ className }) {
20135
+ function ChevronLeftIcon3({ className }) {
19281
20136
  return /* @__PURE__ */ jsxRuntime.jsx(
19282
20137
  "svg",
19283
20138
  {
@@ -19294,7 +20149,7 @@ function ChevronLeftIcon4({ className }) {
19294
20149
  }
19295
20150
  );
19296
20151
  }
19297
- function ChevronRightIcon9({ className }) {
20152
+ function ChevronRightIcon8({ className }) {
19298
20153
  return /* @__PURE__ */ jsxRuntime.jsx(
19299
20154
  "svg",
19300
20155
  {
@@ -19445,7 +20300,7 @@ function Lightbox({
19445
20300
  onClick: prev,
19446
20301
  className: "absolute left-3 z-10 inline-flex size-10 items-center justify-center rounded-full bg-black/50 text-white/80 hover:bg-black/70 hover:text-white transition-colors",
19447
20302
  "aria-label": "Previous image",
19448
- children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon4, { className: "size-5" })
20303
+ children: /* @__PURE__ */ jsxRuntime.jsx(ChevronLeftIcon3, { className: "size-5" })
19449
20304
  }
19450
20305
  ),
19451
20306
  /* @__PURE__ */ jsxRuntime.jsx(framerMotion.AnimatePresence, { mode: "wait", children: /* @__PURE__ */ jsxRuntime.jsx(
@@ -19473,7 +20328,7 @@ function Lightbox({
19473
20328
  onClick: next,
19474
20329
  className: "absolute right-3 z-10 inline-flex size-10 items-center justify-center rounded-full bg-black/50 text-white/80 hover:bg-black/70 hover:text-white transition-colors",
19475
20330
  "aria-label": "Next image",
19476
- children: /* @__PURE__ */ jsxRuntime.jsx(ChevronRightIcon9, { className: "size-5" })
20331
+ children: /* @__PURE__ */ jsxRuntime.jsx(ChevronRightIcon8, { className: "size-5" })
19477
20332
  }
19478
20333
  )
19479
20334
  ] }),
@@ -20224,10 +21079,12 @@ var DataTableToolbar = React.forwardRef(function DataTableToolbar2({
20224
21079
  className
20225
21080
  }, ref) {
20226
21081
  const [localSearch, setLocalSearch] = React.useState(searchValue);
20227
- const debounceTimer = React.useRef(null);
20228
- React.useEffect(() => {
21082
+ const [prevSearchValue, setPrevSearchValue] = React.useState(searchValue);
21083
+ if (searchValue !== prevSearchValue) {
21084
+ setPrevSearchValue(searchValue);
20229
21085
  setLocalSearch(searchValue);
20230
- }, [searchValue]);
21086
+ }
21087
+ const debounceTimer = React.useRef(null);
20231
21088
  const handleSearchChange = React.useCallback(
20232
21089
  (value) => {
20233
21090
  setLocalSearch(value);
@@ -20829,6 +21686,7 @@ exports.SelectScrollUpButton = SelectScrollUpButton;
20829
21686
  exports.SelectSeparator = SelectSeparator;
20830
21687
  exports.SelectTrigger = SelectTrigger;
20831
21688
  exports.SelectValue = SelectValue;
21689
+ exports.Separator = Separator2;
20832
21690
  exports.Sheet = Sheet;
20833
21691
  exports.SheetClose = SheetClose;
20834
21692
  exports.SheetContent = SheetContent;
@@ -20840,12 +21698,30 @@ exports.SheetTrigger = SheetTrigger;
20840
21698
  exports.Sidebar = Sidebar;
20841
21699
  exports.SidebarContent = SidebarContent;
20842
21700
  exports.SidebarFooter = SidebarFooter;
21701
+ exports.SidebarGroup = SidebarGroup;
21702
+ exports.SidebarGroupAction = SidebarGroupAction;
21703
+ exports.SidebarGroupContent = SidebarGroupContent;
21704
+ exports.SidebarGroupLabel = SidebarGroupLabel;
20843
21705
  exports.SidebarHeader = SidebarHeader;
21706
+ exports.SidebarInput = SidebarInput;
21707
+ exports.SidebarInset = SidebarInset;
20844
21708
  exports.SidebarItem = SidebarItem;
21709
+ exports.SidebarMenu = SidebarMenu;
21710
+ exports.SidebarMenuAction = SidebarMenuAction;
21711
+ exports.SidebarMenuBadge = SidebarMenuBadge;
21712
+ exports.SidebarMenuButton = SidebarMenuButton;
21713
+ exports.SidebarMenuItem = SidebarMenuItem;
21714
+ exports.SidebarMenuSkeleton = SidebarMenuSkeleton;
21715
+ exports.SidebarMenuSub = SidebarMenuSub;
21716
+ exports.SidebarMenuSubButton = SidebarMenuSubButton;
21717
+ exports.SidebarMenuSubItem = SidebarMenuSubItem;
20845
21718
  exports.SidebarMobileOverlay = SidebarMobileOverlay;
20846
21719
  exports.SidebarProvider = SidebarProvider;
21720
+ exports.SidebarRail = SidebarRail;
20847
21721
  exports.SidebarSection = SidebarSection;
21722
+ exports.SidebarSeparator = SidebarSeparator;
20848
21723
  exports.SidebarToggle = SidebarToggle;
21724
+ exports.SidebarTrigger = SidebarTrigger;
20849
21725
  exports.Skeleton = Skeleton;
20850
21726
  exports.SkeletonCircle = SkeletonCircle;
20851
21727
  exports.SkeletonRect = SkeletonRect;
@@ -20921,6 +21797,7 @@ exports.scrollbarThumbVariants = scrollbarThumbVariants;
20921
21797
  exports.scrollbarVariants = scrollbarVariants;
20922
21798
  exports.searchInputVariants = searchInputVariants;
20923
21799
  exports.selectTriggerVariants = selectTriggerVariants;
21800
+ exports.separatorVariants = separatorVariants;
20924
21801
  exports.sheetContentVariants = sheetContentVariants;
20925
21802
  exports.skeletonVariants = skeletonVariants;
20926
21803
  exports.sliderRangeVariants = sliderRangeVariants;
@@ -20943,6 +21820,7 @@ exports.useCarouselContext = useCarouselContext;
20943
21820
  exports.useCheckboxGroupContext = useCheckboxGroupContext;
20944
21821
  exports.useCollapsibleContext = useCollapsibleContext;
20945
21822
  exports.useDataTable = useDataTable;
21823
+ exports.useSidebar = useSidebar;
20946
21824
  exports.useSidebarContext = useSidebarContext;
20947
21825
  exports.useToast = useToast;
20948
21826
  exports.useToggleGroupContext = useToggleGroupContext;