@avenue-ticketing/ui 0.5.0 → 0.7.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.
@@ -66,9 +66,7 @@ var Checkbox = React.forwardRef(
66
66
  ...rest
67
67
  }, ref) => {
68
68
  const isControlled = checkedProp !== void 0;
69
- const [uncontrolledChecked, setUncontrolledChecked] = useState(
70
- defaultChecked
71
- );
69
+ const [uncontrolledChecked, setUncontrolledChecked] = useState(defaultChecked);
72
70
  const checked = isControlled ? checkedProp : uncontrolledChecked;
73
71
  const ariaChecked = indeterminate ? "mixed" : checked ? true : false;
74
72
  return /* @__PURE__ */ jsx(
@@ -109,7 +107,7 @@ var Checkbox = React.forwardRef(
109
107
  className: cn(
110
108
  "flex size-5 shrink-0 items-center justify-center rounded-[4px] border",
111
109
  !disabled && (indeterminate ? "border-primary bg-primary text-background" : checked ? "border-primary bg-primary text-background" : "border-primary/20 bg-background"),
112
- disabled && (indeterminate ? "border-primary/40 bg-primary/45 text-primary-foreground" : checked ? "border-primary/40 bg-primary/45 text-primary-foreground" : "border-primary/10 bg-muted/25")
110
+ disabled && (indeterminate ? "border-transparent bg-primary/45 text-primary-foreground" : checked ? "border-transparent bg-primary/45 text-primary-foreground" : "border-primary/10 bg-muted/25")
113
111
  ),
114
112
  children: indeterminate ? /* @__PURE__ */ jsx(
115
113
  "span",
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/utils.ts","../../src/react/checkbox.tsx"],"names":[],"mappings":"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","file":"checkbox.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useLayoutEffect, useRef, useState } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst CHECKBOX_TICK_DELAY_MS = 60;\nconst CHECKBOX_TICK_DRAW_MS = 100;\n\nfunction CheckboxAnimatedCheckMark() {\n const lineRef = useRef<SVGPolylineElement>(null);\n\n useLayoutEffect(() => {\n const poly = lineRef.current;\n if (!poly || typeof poly.getTotalLength !== \"function\") return;\n const len = poly.getTotalLength();\n if (len <= 0) return;\n\n poly.style.strokeDasharray = `${len}`;\n poly.style.strokeDashoffset = `${len}`;\n\n if (typeof poly.animate !== \"function\") {\n poly.style.strokeDashoffset = \"0\";\n return;\n }\n\n const anim = poly.animate(\n [{ strokeDashoffset: len }, { strokeDashoffset: 0 }],\n {\n duration: CHECKBOX_TICK_DRAW_MS,\n delay: CHECKBOX_TICK_DELAY_MS,\n easing: \"cubic-bezier(0.45, 0, 0.2, 1)\",\n fill: \"forwards\",\n },\n );\n return () => anim.cancel();\n }, []);\n\n return (\n <svg\n className=\"size-4 shrink-0 overflow-visible\"\n viewBox=\"0 0 24 24\"\n aria-hidden\n >\n <polyline\n ref={lineRef}\n points=\"4 12 9 17 20 6\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport type CheckboxProps = Omit<\n React.ComponentProps<\"button\">,\n \"type\" | \"role\" | \"aria-checked\" | \"children\"\n> & {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (next: boolean) => void;\n // tri-state: same frame as checked; center shows a visible “blank” (inner surface)\n indeterminate?: boolean;\n};\n\nconst Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\n (\n {\n checked: checkedProp,\n defaultChecked = false,\n onCheckedChange,\n indeterminate = false,\n disabled = false,\n className,\n onClick,\n ...rest\n },\n ref,\n ) => {\n const isControlled = checkedProp !== undefined;\n const [uncontrolledChecked, setUncontrolledChecked] = useState(\n defaultChecked,\n );\n const checked = isControlled ? checkedProp : uncontrolledChecked;\n const ariaChecked: boolean | \"mixed\" = indeterminate\n ? \"mixed\"\n : checked\n ? true\n : false;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"checkbox\"\n data-slot=\"checkbox\"\n data-state={\n indeterminate ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\"\n }\n disabled={disabled}\n aria-checked={ariaChecked}\n className={cn(\n \"ring-offset-background focus-visible:ring-primary/40 inline-flex shrink-0 items-center justify-center rounded-md border border-transparent p-0 outline-none select-none\",\n \"focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed\",\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n if (disabled) return;\n if (isControlled) {\n onCheckedChange?.(!checked);\n return;\n }\n setUncontrolledChecked((prev) => {\n const next = !prev;\n onCheckedChange?.(next);\n return next;\n });\n }}\n {...rest}\n >\n <span className=\"pointer-events-none\">\n <span\n aria-hidden\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded-[4px] border\",\n !disabled &&\n (indeterminate\n ? \"border-primary bg-primary text-background\"\n : checked\n ? \"border-primary bg-primary text-background\"\n : \"border-primary/20 bg-background\"),\n disabled &&\n (indeterminate\n ? \"border-primary/40 bg-primary/45 text-primary-foreground\"\n : checked\n ? \"border-primary/40 bg-primary/45 text-primary-foreground\"\n : \"border-primary/10 bg-muted/25\"),\n )}\n >\n {indeterminate ? (\n <span\n className=\"size-2.5 shrink-0 rounded-[2px] border border-primary/20 bg-background\"\n aria-hidden\n />\n ) : checked ? (\n <CheckboxAnimatedCheckMark />\n ) : null}\n </span>\n </span>\n </button>\n );\n },\n);\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n"]}
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/react/checkbox.tsx"],"names":[],"mappings":"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","file":"checkbox.js","sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\nimport { twMerge } from \"tailwind-merge\";\n\nexport function cn(...inputs: ClassValue[]) {\n return twMerge(clsx(inputs));\n}\n","\"use client\";\n\nimport * as React from \"react\";\nimport { useLayoutEffect, useRef, useState } from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst CHECKBOX_TICK_DELAY_MS = 60;\nconst CHECKBOX_TICK_DRAW_MS = 100;\n\nfunction CheckboxAnimatedCheckMark() {\n const lineRef = useRef<SVGPolylineElement>(null);\n\n useLayoutEffect(() => {\n const poly = lineRef.current;\n if (!poly || typeof poly.getTotalLength !== \"function\") return;\n const len = poly.getTotalLength();\n if (len <= 0) return;\n\n poly.style.strokeDasharray = `${len}`;\n poly.style.strokeDashoffset = `${len}`;\n\n if (typeof poly.animate !== \"function\") {\n poly.style.strokeDashoffset = \"0\";\n return;\n }\n\n const anim = poly.animate(\n [{ strokeDashoffset: len }, { strokeDashoffset: 0 }],\n {\n duration: CHECKBOX_TICK_DRAW_MS,\n delay: CHECKBOX_TICK_DELAY_MS,\n easing: \"cubic-bezier(0.45, 0, 0.2, 1)\",\n fill: \"forwards\",\n },\n );\n return () => anim.cancel();\n }, []);\n\n return (\n <svg\n className=\"size-4 shrink-0 overflow-visible\"\n viewBox=\"0 0 24 24\"\n aria-hidden\n >\n <polyline\n ref={lineRef}\n points=\"4 12 9 17 20 6\"\n fill=\"none\"\n stroke=\"currentColor\"\n strokeWidth=\"3\"\n strokeLinecap=\"round\"\n strokeLinejoin=\"round\"\n />\n </svg>\n );\n}\n\nexport type CheckboxProps = Omit<\n React.ComponentProps<\"button\">,\n \"type\" | \"role\" | \"aria-checked\" | \"children\"\n> & {\n checked?: boolean;\n defaultChecked?: boolean;\n onCheckedChange?: (next: boolean) => void;\n // tri-state: same frame as checked; center shows a visible “blank” (inner surface)\n indeterminate?: boolean;\n};\n\nconst Checkbox = React.forwardRef<HTMLButtonElement, CheckboxProps>(\n (\n {\n checked: checkedProp,\n defaultChecked = false,\n onCheckedChange,\n indeterminate = false,\n disabled = false,\n className,\n onClick,\n ...rest\n },\n ref,\n ) => {\n const isControlled = checkedProp !== undefined;\n const [uncontrolledChecked, setUncontrolledChecked] =\n useState(defaultChecked);\n const checked = isControlled ? checkedProp : uncontrolledChecked;\n const ariaChecked: boolean | \"mixed\" = indeterminate\n ? \"mixed\"\n : checked\n ? true\n : false;\n\n return (\n <button\n ref={ref}\n type=\"button\"\n role=\"checkbox\"\n data-slot=\"checkbox\"\n data-state={\n indeterminate ? \"indeterminate\" : checked ? \"checked\" : \"unchecked\"\n }\n disabled={disabled}\n aria-checked={ariaChecked}\n className={cn(\n \"ring-offset-background focus-visible:ring-primary/40 inline-flex shrink-0 items-center justify-center rounded-md border border-transparent p-0 outline-none select-none\",\n \"focus-visible:ring-2 focus-visible:ring-offset-2\",\n \"disabled:cursor-not-allowed\",\n className,\n )}\n onClick={(e) => {\n onClick?.(e);\n if (e.defaultPrevented) return;\n if (disabled) return;\n if (isControlled) {\n onCheckedChange?.(!checked);\n return;\n }\n setUncontrolledChecked((prev) => {\n const next = !prev;\n onCheckedChange?.(next);\n return next;\n });\n }}\n {...rest}\n >\n <span className=\"pointer-events-none\">\n <span\n aria-hidden\n className={cn(\n \"flex size-5 shrink-0 items-center justify-center rounded-[4px] border\",\n !disabled &&\n (indeterminate\n ? \"border-primary bg-primary text-background\"\n : checked\n ? \"border-primary bg-primary text-background\"\n : \"border-primary/20 bg-background\"),\n disabled &&\n (indeterminate\n ? \"border-transparent bg-primary/45 text-primary-foreground\"\n : checked\n ? \"border-transparent bg-primary/45 text-primary-foreground\"\n : \"border-primary/10 bg-muted/25\"),\n )}\n >\n {indeterminate ? (\n <span\n className=\"size-2.5 shrink-0 rounded-[2px] border border-primary/20 bg-background\"\n aria-hidden\n />\n ) : checked ? (\n <CheckboxAnimatedCheckMark />\n ) : null}\n </span>\n </span>\n </button>\n );\n },\n);\nCheckbox.displayName = \"Checkbox\";\n\nexport { Checkbox };\n"]}
@@ -105,8 +105,16 @@ interface DropdownRadioItemProps extends Omit<DropdownItemProps, "icon"> {
105
105
  value: string;
106
106
  }
107
107
  declare const DropdownRadioItem: React__default.FC<DropdownRadioItemProps>;
108
+ /**
109
+ * `openOnHover` (default `true`) controls whether moving a mouse onto the
110
+ * `DropdownSubTrigger` (or off the `DropdownSubContent`) opens / closes the
111
+ * sub. Set to `false` for menus rendered inside a scrollable container, where
112
+ * rows passing under a stationary cursor would otherwise toggle the sub on
113
+ * every scroll tick. Click, Enter, ArrowRight always open regardless.
114
+ */
108
115
  declare const DropdownSub: React__default.FC<{
109
116
  children: React__default.ReactNode;
117
+ openOnHover?: boolean;
110
118
  }>;
111
119
  declare const DropdownSubTrigger: React__default.FC<React__default.HTMLAttributes<HTMLDivElement> & {
112
120
  icon?: React__default.ReactNode;
@@ -124,9 +124,7 @@ var Checkbox = React3.forwardRef(
124
124
  ...rest
125
125
  }, ref) => {
126
126
  const isControlled = checkedProp !== void 0;
127
- const [uncontrolledChecked, setUncontrolledChecked] = useState(
128
- defaultChecked
129
- );
127
+ const [uncontrolledChecked, setUncontrolledChecked] = useState(defaultChecked);
130
128
  const checked = isControlled ? checkedProp : uncontrolledChecked;
131
129
  const ariaChecked = indeterminate ? "mixed" : checked ? true : false;
132
130
  return /* @__PURE__ */ jsx(
@@ -167,7 +165,7 @@ var Checkbox = React3.forwardRef(
167
165
  className: cn(
168
166
  "flex size-5 shrink-0 items-center justify-center rounded-[4px] border",
169
167
  !disabled && (indeterminate ? "border-primary bg-primary text-background" : checked ? "border-primary bg-primary text-background" : "border-primary/20 bg-background"),
170
- disabled && (indeterminate ? "border-primary/40 bg-primary/45 text-primary-foreground" : checked ? "border-primary/40 bg-primary/45 text-primary-foreground" : "border-primary/10 bg-muted/25")
168
+ disabled && (indeterminate ? "border-transparent bg-primary/45 text-primary-foreground" : checked ? "border-transparent bg-primary/45 text-primary-foreground" : "border-primary/10 bg-muted/25")
171
169
  ),
172
170
  children: indeterminate ? /* @__PURE__ */ jsx(
173
171
  "span",
@@ -200,6 +198,22 @@ function resolveDropdownMobileSheet(mobileOptions) {
200
198
  };
201
199
  }
202
200
  var DROPDOWN_SUB_CONTENT_ATTR = "data-dropdown-sub-content";
201
+ var DROPDOWN_PANEL_SHADOW = "shadow-[0_12px_32px_-8px_rgba(0,0,0,0.18),0_2px_6px_-2px_rgba(0,0,0,0.06)] dark:shadow-[0_12px_32px_-8px_rgba(0,0,0,0.55),0_2px_6px_-2px_rgba(0,0,0,0.35)]";
202
+ var DROPDOWN_PANEL_SCROLL = "[&_*]:[scrollbar-width:none] [&_*::-webkit-scrollbar]:hidden [&_*]:overscroll-contain";
203
+ function preventMenuWheelChain(menu, e) {
204
+ let el = e.target;
205
+ while (el && menu.contains(el)) {
206
+ const oy = getComputedStyle(el).overflowY;
207
+ if ((oy === "auto" || oy === "scroll") && el.scrollHeight > el.clientHeight) {
208
+ const atTop = el.scrollTop <= 0;
209
+ const atBottom = el.scrollTop + el.clientHeight >= el.scrollHeight;
210
+ if (e.deltaY < 0 && !atTop || e.deltaY > 0 && !atBottom) return;
211
+ break;
212
+ }
213
+ el = el.parentElement;
214
+ }
215
+ e.preventDefault();
216
+ }
203
217
  var DROPDOWN_SHEET_MENU_TEXT = "max-[1024px]:text-base";
204
218
  var DROPDOWN_SHEET_MENU_SHORTCUT = "max-[1024px]:text-sm";
205
219
  var DROPDOWN_SHEET_MENU_LABEL_TEXT = "max-[1024px]:text-sm";
@@ -290,10 +304,12 @@ function computePos(trigger, menu, side, align, offset, pad) {
290
304
  return { top, left, side: effectiveSide };
291
305
  }
292
306
  function useIsMobile(breakpoint = 1025) {
293
- const [isMobile, setIsMobile] = useState(false);
307
+ const [isMobile, setIsMobile] = useState(() => {
308
+ if (typeof window === "undefined") return false;
309
+ return window.matchMedia(`(max-width: ${breakpoint - 1}px)`).matches;
310
+ });
294
311
  useEffect(() => {
295
312
  const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);
296
- setIsMobile(mq.matches);
297
313
  const handler = (e) => setIsMobile(e.matches);
298
314
  mq.addEventListener("change", handler);
299
315
  return () => mq.removeEventListener("change", handler);
@@ -452,6 +468,7 @@ function DropdownMobileBottomSheetPortal({
452
468
  onRequestClose,
453
469
  menuRef,
454
470
  portalZClassName = "z-50",
471
+ isSubPortal = false,
455
472
  children,
456
473
  className,
457
474
  style,
@@ -463,6 +480,7 @@ function DropdownMobileBottomSheetPortal({
463
480
  /* @__PURE__ */ jsxs(
464
481
  "div",
465
482
  {
483
+ ...isSubPortal ? { [DROPDOWN_SUB_CONTENT_ATTR]: "" } : {},
466
484
  className: cn(
467
485
  "fixed inset-0 flex items-end justify-center p-0",
468
486
  portalZClassName
@@ -489,8 +507,9 @@ function DropdownMobileBottomSheetPortal({
489
507
  ...panelProps,
490
508
  ref: menuRef,
491
509
  className: cn(
492
- "bg-background border-primary/10 relative z-10 flex w-full max-h-[min(90dvh,calc(100dvh-env(safe-area-inset-bottom,0px)))] flex-col overflow-hidden shadow-2xl outline-none",
510
+ "bg-background border-primary/8 relative z-10 flex w-full max-h-[min(90dvh,calc(100dvh-env(safe-area-inset-bottom,0px)))] flex-col overflow-hidden shadow-2xl outline-none",
493
511
  "rounded-t-2xl rounded-b-none border-x-0 border-b-0 border-t",
512
+ DROPDOWN_PANEL_SCROLL,
494
513
  sheetExtraClassName,
495
514
  className
496
515
  ),
@@ -567,25 +586,25 @@ var DropdownContent = ({
567
586
  const [pos, setPos] = useState({ top: -9999, left: -9999, side });
568
587
  const [triggerW, setTriggerW] = useState(0);
569
588
  const menuRef = useRef(null);
570
- const resolvedMobile = useMemo(
571
- () => resolveDropdownMobileSheet(mobileOptions),
572
- [mobileOptions]
573
- );
574
- const slideOffsetPx = useMemo(
575
- () => slideEntranceOffsetPxProp ?? DROPDOWN_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX,
576
- [slideEntranceOffsetPxProp]
577
- );
578
- const closeDuration = isMobile && resolvedMobile.sheet ? DROPDOWN_MOBILE_SHEET_MOTION_MS : duration;
579
- const closeMenu = useCallback(() => setOpen(false), [setOpen]);
589
+ const resolvedMobile = resolveDropdownMobileSheet(mobileOptions);
590
+ const isMobileSheet = isMobile && resolvedMobile.sheet;
591
+ const slideOffsetPx = slideEntranceOffsetPxProp ?? DROPDOWN_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX;
580
592
  useEffect(() => {
581
593
  if (open) {
582
594
  setShouldRender(true);
583
- } else {
584
- setIsAnimating(false);
585
- const timer = setTimeout(() => setShouldRender(false), closeDuration);
586
- return () => clearTimeout(timer);
595
+ return;
587
596
  }
588
- }, [open, closeDuration]);
597
+ if (!isMobileSheet) {
598
+ setShouldRender(false);
599
+ return;
600
+ }
601
+ setIsAnimating(false);
602
+ const t = setTimeout(
603
+ () => setShouldRender(false),
604
+ DROPDOWN_MOBILE_SHEET_MOTION_MS
605
+ );
606
+ return () => clearTimeout(t);
607
+ }, [open, isMobileSheet]);
589
608
  useEffect(() => {
590
609
  if (!shouldRender || !open) return;
591
610
  let raf2 = 0;
@@ -615,12 +634,27 @@ var DropdownContent = ({
615
634
  };
616
635
  update();
617
636
  window.addEventListener("resize", update);
618
- window.addEventListener("scroll", update, true);
619
637
  return () => {
620
638
  window.removeEventListener("resize", update);
621
- window.removeEventListener("scroll", update, true);
622
639
  };
623
640
  }, [shouldRender, side, align, offset, viewportPadding]);
641
+ useEffect(() => {
642
+ if (!open || isMobileSheet) return;
643
+ const isInsideMenu = (t) => t instanceof Node && (!!menuRef.current?.contains(t) || !!triggerRef.current?.contains(t) || t instanceof Element && !!t.closest(`[${DROPDOWN_SUB_CONTENT_ATTR}]`));
644
+ const onScroll = (e) => {
645
+ if (!isInsideMenu(e.target)) setOpen(false);
646
+ };
647
+ window.addEventListener("scroll", onScroll, true);
648
+ return () => window.removeEventListener("scroll", onScroll, true);
649
+ }, [open, isMobileSheet, setOpen, triggerRef]);
650
+ useEffect(() => {
651
+ if (!shouldRender || isMobileSheet) return;
652
+ const menu = menuRef.current;
653
+ if (!menu) return;
654
+ const onWheel = (e) => preventMenuWheelChain(menu, e);
655
+ menu.addEventListener("wheel", onWheel, { passive: false });
656
+ return () => menu.removeEventListener("wheel", onWheel);
657
+ }, [shouldRender, isMobileSheet]);
624
658
  useEffect(() => {
625
659
  if (isAnimating && menuRef.current) {
626
660
  menuRef.current.focus();
@@ -686,15 +720,14 @@ var DropdownContent = ({
686
720
  return () => window.removeEventListener("keydown", handler);
687
721
  }, [open, closeOnEscape, loop, setOpen, triggerRef]);
688
722
  useEffect(() => {
689
- if (open && isMobile && resolvedMobile.sheet) {
690
- document.body.style.overflow = "hidden";
691
- }
723
+ if (!open || !isMobileSheet) return;
724
+ document.body.style.overflow = "hidden";
692
725
  return () => {
693
726
  document.body.style.overflow = "";
694
727
  };
695
- }, [open, isMobile, resolvedMobile.sheet]);
728
+ }, [open, isMobileSheet]);
696
729
  if (!shouldRender || typeof document === "undefined") return null;
697
- if (isMobile && resolvedMobile.sheet) {
730
+ if (isMobileSheet) {
698
731
  return /* @__PURE__ */ jsx(
699
732
  DropdownMobileBottomSheetPortal,
700
733
  {
@@ -706,7 +739,7 @@ var DropdownContent = ({
706
739
  sheetTitle: resolvedMobile.title,
707
740
  sheetExtraClassName: resolvedMobile.sheetExtraClassName,
708
741
  contentClassName: resolvedMobile.contentClassName,
709
- onRequestClose: closeMenu,
742
+ onRequestClose: () => setOpen(false),
710
743
  menuRef,
711
744
  portalZClassName: "z-50",
712
745
  className,
@@ -729,7 +762,9 @@ var DropdownContent = ({
729
762
  "aria-orientation": "vertical",
730
763
  tabIndex: -1,
731
764
  className: cn(
732
- "bg-background border-primary/10 absolute z-50 overflow-hidden rounded-xl border py-1.5 shadow-xl outline-none",
765
+ "bg-background border-primary/8 absolute z-50 overflow-hidden rounded-xl border py-1.5 outline-none",
766
+ DROPDOWN_PANEL_SHADOW,
767
+ DROPDOWN_PANEL_SCROLL,
733
768
  className
734
769
  ),
735
770
  style: {
@@ -805,7 +840,7 @@ var DropdownItem = ({
805
840
  ),
806
841
  children: [
807
842
  icon && /* @__PURE__ */ jsx("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
808
- /* @__PURE__ */ jsx("span", { className: "flex-1", children }),
843
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children }),
809
844
  shortcut ? /* @__PURE__ */ jsx(
810
845
  "span",
811
846
  {
@@ -1002,21 +1037,19 @@ var DropdownRadioItem = ({
1002
1037
  }
1003
1038
  );
1004
1039
  };
1005
- var DropdownSub = ({
1006
- children
1007
- }) => {
1040
+ var DropdownSub = ({ children, openOnHover = true }) => {
1008
1041
  const [open, setOpen] = useState(false);
1009
1042
  const triggerRef = useRef(null);
1010
1043
  const subCtx = useMemo(
1011
- () => ({ open, setOpen, triggerRef }),
1012
- [open, setOpen]
1044
+ () => ({ open, setOpen, triggerRef, openOnHover }),
1045
+ [open, setOpen, openOnHover]
1013
1046
  );
1014
1047
  return /* @__PURE__ */ jsx(SubContext.Provider, { value: subCtx, children });
1015
1048
  };
1016
1049
  var DropdownSubTrigger = ({ children, icon, inset, disabled = false, className, ...props }) => {
1017
1050
  const sub = React3__default.useContext(SubContext);
1018
1051
  if (!sub) throw new Error("DropdownSubTrigger must be inside DropdownSub");
1019
- const { open, setOpen, triggerRef } = sub;
1052
+ const { open, setOpen, triggerRef, openOnHover } = sub;
1020
1053
  const isMobile = useIsMobile(DROPDOWN_MOBILE_SHEET_MAX_PX + 1);
1021
1054
  return /* @__PURE__ */ jsxs(
1022
1055
  "div",
@@ -1031,11 +1064,11 @@ var DropdownSubTrigger = ({ children, icon, inset, disabled = false, className,
1031
1064
  tabIndex: disabled ? void 0 : -1,
1032
1065
  "aria-disabled": disabled,
1033
1066
  onMouseEnter: () => {
1034
- if (disabled || isMobile) return;
1067
+ if (disabled || isMobile || !openOnHover) return;
1035
1068
  setOpen(true);
1036
1069
  },
1037
1070
  onMouseLeave: () => {
1038
- if (isMobile) return;
1071
+ if (isMobile || !openOnHover) return;
1039
1072
  setOpen(false);
1040
1073
  },
1041
1074
  onKeyDown: (e) => {
@@ -1059,8 +1092,8 @@ var DropdownSubTrigger = ({ children, icon, inset, disabled = false, className,
1059
1092
  ),
1060
1093
  children: [
1061
1094
  icon && /* @__PURE__ */ jsx("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
1062
- /* @__PURE__ */ jsx("span", { className: "flex-1", children }),
1063
- /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto size-4 opacity-50" })
1095
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children }),
1096
+ /* @__PURE__ */ jsx(ChevronRight, { className: "ml-auto size-4 shrink-0 opacity-50" })
1064
1097
  ]
1065
1098
  }
1066
1099
  );
@@ -1079,16 +1112,11 @@ var DropdownSubContent = ({
1079
1112
  }) => {
1080
1113
  const sub = React3__default.useContext(SubContext);
1081
1114
  if (!sub) throw new Error("DropdownSubContent must be inside DropdownSub");
1082
- const { open, setOpen, triggerRef } = sub;
1115
+ const { open, setOpen, triggerRef, openOnHover } = sub;
1083
1116
  const isMobile = useIsMobile(DROPDOWN_MOBILE_SHEET_MAX_PX + 1);
1084
- const slideOffsetPx = useMemo(
1085
- () => slideEntranceOffsetPxProp ?? DROPDOWN_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX,
1086
- [slideEntranceOffsetPxProp]
1087
- );
1088
- const resolvedMobile = useMemo(
1089
- () => resolveDropdownMobileSheet(mobileOptions),
1090
- [mobileOptions]
1091
- );
1117
+ const resolvedMobile = resolveDropdownMobileSheet(mobileOptions);
1118
+ const isMobileSheet = isMobile && resolvedMobile.sheet;
1119
+ const slideOffsetPx = slideEntranceOffsetPxProp ?? DROPDOWN_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX;
1092
1120
  const [shouldRender, setShouldRender] = useState(false);
1093
1121
  const [isAnimating, setIsAnimating] = useState(false);
1094
1122
  const [pos, setPos] = useState({
@@ -1097,17 +1125,22 @@ var DropdownSubContent = ({
1097
1125
  side: "right"
1098
1126
  });
1099
1127
  const menuRef = useRef(null);
1100
- const closeDuration = isMobile && resolvedMobile.sheet ? DROPDOWN_MOBILE_SHEET_MOTION_MS : duration;
1101
- const closeSub = useCallback(() => setOpen(false), [setOpen]);
1102
1128
  useEffect(() => {
1103
1129
  if (open) {
1104
1130
  setShouldRender(true);
1105
- } else {
1106
- setIsAnimating(false);
1107
- const timer = setTimeout(() => setShouldRender(false), closeDuration);
1108
- return () => clearTimeout(timer);
1131
+ return;
1132
+ }
1133
+ if (!isMobileSheet) {
1134
+ setShouldRender(false);
1135
+ return;
1109
1136
  }
1110
- }, [open, closeDuration]);
1137
+ setIsAnimating(false);
1138
+ const t = setTimeout(
1139
+ () => setShouldRender(false),
1140
+ DROPDOWN_MOBILE_SHEET_MOTION_MS
1141
+ );
1142
+ return () => clearTimeout(t);
1143
+ }, [open, isMobileSheet]);
1111
1144
  useEffect(() => {
1112
1145
  if (!shouldRender || !open) return;
1113
1146
  let raf2 = 0;
@@ -1120,8 +1153,8 @@ var DropdownSubContent = ({
1120
1153
  };
1121
1154
  }, [shouldRender, open]);
1122
1155
  useLayoutEffect(() => {
1123
- if (!shouldRender || !triggerRef.current || !menuRef.current) return;
1124
- if (isMobile && resolvedMobile.sheet) return;
1156
+ if (!shouldRender || isMobileSheet) return;
1157
+ if (!triggerRef.current || !menuRef.current) return;
1125
1158
  const update = () => {
1126
1159
  if (!triggerRef.current || !menuRef.current) return;
1127
1160
  setPos(
@@ -1137,12 +1170,29 @@ var DropdownSubContent = ({
1137
1170
  };
1138
1171
  update();
1139
1172
  window.addEventListener("resize", update);
1140
- window.addEventListener("scroll", update, true);
1141
1173
  return () => {
1142
1174
  window.removeEventListener("resize", update);
1143
- window.removeEventListener("scroll", update, true);
1144
1175
  };
1145
- }, [shouldRender, viewportPadding, isMobile, resolvedMobile.sheet]);
1176
+ }, [shouldRender, viewportPadding, isMobileSheet]);
1177
+ useEffect(() => {
1178
+ if (!open || isMobileSheet) return;
1179
+ const onScroll = (e) => {
1180
+ const t = e.target;
1181
+ if (!(t instanceof Node) || menuRef.current?.contains(t)) return;
1182
+ const trigger = triggerRef.current;
1183
+ if (trigger && (t === trigger || t.contains(trigger))) setOpen(false);
1184
+ };
1185
+ window.addEventListener("scroll", onScroll, true);
1186
+ return () => window.removeEventListener("scroll", onScroll, true);
1187
+ }, [open, isMobileSheet, setOpen, triggerRef]);
1188
+ useEffect(() => {
1189
+ if (!shouldRender || isMobileSheet) return;
1190
+ const menu = menuRef.current;
1191
+ if (!menu) return;
1192
+ const onWheel = (e) => preventMenuWheelChain(menu, e);
1193
+ menu.addEventListener("wheel", onWheel, { passive: false });
1194
+ return () => menu.removeEventListener("wheel", onWheel);
1195
+ }, [shouldRender, isMobileSheet]);
1146
1196
  useEffect(() => {
1147
1197
  if (isAnimating && menuRef.current) {
1148
1198
  menuRef.current.focus();
@@ -1203,7 +1253,7 @@ var DropdownSubContent = ({
1203
1253
  [onKeyDownProp, setOpen, triggerRef]
1204
1254
  );
1205
1255
  if (!shouldRender || typeof document === "undefined") return null;
1206
- if (isMobile && resolvedMobile.sheet) {
1256
+ if (isMobileSheet) {
1207
1257
  return /* @__PURE__ */ jsx(
1208
1258
  DropdownMobileBottomSheetPortal,
1209
1259
  {
@@ -1215,9 +1265,10 @@ var DropdownSubContent = ({
1215
1265
  sheetTitle: resolvedMobile.title,
1216
1266
  sheetExtraClassName: resolvedMobile.sheetExtraClassName,
1217
1267
  contentClassName: resolvedMobile.contentClassName,
1218
- onRequestClose: closeSub,
1268
+ onRequestClose: () => setOpen(false),
1219
1269
  menuRef,
1220
1270
  portalZClassName: "z-[70]",
1271
+ isSubPortal: true,
1221
1272
  className,
1222
1273
  style,
1223
1274
  role: "menu",
@@ -1236,12 +1287,14 @@ var DropdownSubContent = ({
1236
1287
  ref: menuRef,
1237
1288
  role: "menu",
1238
1289
  tabIndex: -1,
1239
- onMouseEnter: () => setOpen(true),
1240
- onMouseLeave: () => setOpen(false),
1290
+ onMouseEnter: openOnHover ? () => setOpen(true) : void 0,
1291
+ onMouseLeave: openOnHover ? () => setOpen(false) : void 0,
1241
1292
  onKeyDown: handleSubMenuKeyDown,
1242
1293
  "data-dropdown-sub-content": "",
1243
1294
  className: cn(
1244
- "bg-background border-primary/10 absolute z-60 overflow-hidden rounded-xl border py-1.5 shadow-xl outline-none",
1295
+ "bg-background border-primary/8 absolute z-60 overflow-hidden rounded-xl border py-1.5 outline-none",
1296
+ DROPDOWN_PANEL_SHADOW,
1297
+ DROPDOWN_PANEL_SCROLL,
1245
1298
  className
1246
1299
  ),
1247
1300
  style: {