@avenue-ticketing/ui 0.8.0 → 0.10.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.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/utils.ts","../../src/react/sheet.tsx"],"names":[],"mappings":"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","file":"sheet.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 React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ArrowLeft, X } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\n// -----------------------------------------------------------------------------\n// Constants\n// -----------------------------------------------------------------------------\n\nconst CLOSE_THRESHOLD = 200;\nconst VELOCITY_THRESHOLD = 1;\nconst SHEET_MOBILE_MAX_WIDTH_PX = 1024;\n\nconst PANEL_OPEN_MS = 280;\nconst PANEL_OPEN_EASING = \"cubic-bezier(0,0.55,0.45,1)\";\nconst PANEL_CLOSE_EASING = \"cubic-bezier(0.55,0,1,0.45)\";\nconst PANEL_SWIPE_CLOSE_EASING = \"cubic-bezier(2,0,1,0.45)\";\nconst PANEL_CLOSE_MS_DESKTOP = 200;\nconst PANEL_CLOSE_MS_MOBILE = 220;\n\n/**\n * Handoff slide-out duration; matches embed `sheetReplace` phase 1\n * (`transform 150ms cubic-bezier(0.55,0,1,0.45)`).\n */\nconst PANEL_CLOSE_MS_HANDOFF = 150;\n\n/** Delay before `afterClose` runs; matches embed `sheetReplace` `setTimeout(..., 80)`. */\nconst HANDOFF_AFTER_CLOSE_DELAY_MS = 80;\n\nconst BACKDROP_OPEN_MS = 500;\nconst BACKDROP_OPEN_EASING = \"cubic-bezier(0.85,0,0.15,1)\";\nconst BACKDROP_CLOSE_MS = 150;\nconst BACKDROP_CLOSE_EASING = \"cubic-bezier(0.55,0,1,0.45)\";\n\n/** Bounded `role=\"dialog\"` on mobile , slide + opacity; entry/exit curves below. */\nconst DIALOG_MOTION_MS = 200;\nconst DIALOG_ENTRY_MOTION_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\nconst DIALOG_EXIT_MOTION_EASING = \"cubic-bezier(0.85, 0, 1, 0.15)\";\nconst DIALOG_MOTION_OFFSET_PX = 120;\n\n/** Off-screen distance: horizontal slides match desktop embed (112%), vertical 100%. */\nconst PANEL_OFF_X = \"112%\";\nconst PANEL_OFF_Y = \"100%\";\n\n/**\n * Z-order for `SheetContent`: default close uses `SHEET_Z_PANEL_CLOSE` (above\n * `ScrollHeaderSticky` z-40, same idea as `Dialog`). Portal roots use\n * `SHEET_Z_PORTAL_STEP` as the main tier size; viewport base is `close - 5*step` (50).\n * Bounded stacks start at `close + step` so they sit above an ancestor's close control;\n * nested bounded sheets add `(nestDepth - 1) * 2` within the same boundary tree.\n */\nconst SHEET_Z_PANEL_CLOSE = 100;\nconst SHEET_Z_PORTAL_STEP = 10;\n\nconst SIDE_LAYOUT: Record<\"top\" | \"right\" | \"bottom\" | \"left\", string> = {\n top: \"top-0 left-0 right-0 border-b border-primary/10\",\n bottom: \"bottom-0 left-0 right-0 border-t border-primary/10\",\n left: \"left-0 top-0 bottom-0 border-r border-primary/10\",\n right: \"right-0 top-0 bottom-0 md:border-l border-primary/10\",\n};\n\nfunction sizeClassFor(\n side: \"top\" | \"right\" | \"bottom\" | \"left\",\n size: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\",\n): string {\n const horizontal = side === \"left\" || side === \"right\";\n if (size === \"full\") return \"w-full h-full\";\n if (horizontal) {\n const max = {\n sm: \"sm:max-w-sm\",\n md: \"sm:max-w-md\",\n lg: \"sm:max-w-lg\",\n xl: \"sm:max-w-xl\",\n }[size];\n return `w-full ${max} h-full`;\n }\n const maxH = {\n sm: \"max-h-sm\",\n md: \"max-h-md\",\n lg: \"max-h-lg\",\n xl: \"max-h-xl\",\n }[size];\n return `h-auto w-full ${maxH}`;\n}\n\n/**\n * Tailwind v4 `translate-*` uses the CSS `translate` property, not `transform`.\n * We animate `transform` inline so open/close transitions run.\n */\nfunction panelSlideTransform(\n side: \"top\" | \"right\" | \"bottom\" | \"left\",\n isAnimating: boolean,\n bounded: boolean,\n): string {\n if (isAnimating) return \"none\";\n\n if (bounded) {\n if (side === \"right\") return \"translateX(100%)\";\n if (side === \"left\") return \"translateX(-100%)\";\n }\n\n switch (side) {\n case \"right\":\n return `translateX(${PANEL_OFF_X})`;\n case \"left\":\n return `translateX(-${PANEL_OFF_X})`;\n case \"bottom\":\n return `translateY(${PANEL_OFF_Y})`;\n case \"top\":\n return `translateY(-${PANEL_OFF_Y})`;\n default:\n return \"none\";\n }\n}\n\n// -----------------------------------------------------------------------------\n// Context: one provider per `<Sheet>` (open state + tree depth for z-index / Esc)\n// -----------------------------------------------------------------------------\n\ntype SheetSetOpenOptions = {\n /**\n * Fires 80ms after the handoff close starts (same overlap as the embed event details `sheetReplace`). Exit animation is 150ms.\n */\n afterClose?: () => void;\n};\n\nconst SheetContext = React.createContext<\n | {\n open: boolean;\n setOpen: (open: boolean, options?: SheetSetOpenOptions) => void;\n /** 1-based: outermost viewport sheet = 1 */\n nestDepth: number;\n /**\n * When `true`, shows a dimmed scrim; when `false`, an invisible full-area\n * layer still captures outside clicks. Default `false`.\n */\n showBackdrop: boolean;\n /** True while closing with `afterClose` , SheetContent uses faster exit motion. */\n closeHandoffActive: boolean;\n clearCloseHandoff: () => void;\n handoffAfterCloseRef: React.MutableRefObject<(() => void) | null>;\n }\n | undefined\n>(undefined);\n\nfunction useSheetContext() {\n const ctx = React.useContext(SheetContext);\n if (!ctx) {\n throw new Error(\"Sheet components must be used within a <Sheet />\");\n }\n return ctx;\n}\n\n/** Portal host + nesting depth for z-stacking inside nested boundaries. */\nconst SheetBoundaryContext = React.createContext<{\n host: HTMLElement | null;\n depth: number;\n} | null>(null);\n\nexport const SheetBoundary: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { children: React.ReactNode }\n> = ({ className, children, ...props }) => {\n const [host, setHost] = useState<HTMLDivElement | null>(null);\n const parent = React.useContext(SheetBoundaryContext);\n const depth = (parent?.depth ?? 0) + 1;\n const setRef = useCallback((node: HTMLDivElement | null) => {\n setHost(node);\n }, []);\n\n const boundaryValue = useMemo(() => ({ host, depth }), [host, depth]);\n\n return (\n <SheetBoundaryContext.Provider value={boundaryValue}>\n <div\n ref={setRef}\n className={cn(\"relative min-h-0 min-w-0\", className)}\n {...props}\n >\n {children}\n </div>\n </SheetBoundaryContext.Provider>\n );\n};\n\nexport const Sheet: React.FC<{\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * Dimmed scrim behind the panel. Outside-click layer is always present; when\n * `false` the layer is invisible. Default `false`.\n */\n showBackdrop?: boolean;\n}> = ({\n children,\n open: controlledOpen,\n onOpenChange,\n showBackdrop = false,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const handoffAfterCloseRef = React.useRef<(() => void) | null>(null);\n const [closeHandoffActive, setCloseHandoffActive] = useState(false);\n\n const clearCloseHandoff = useCallback(() => {\n handoffAfterCloseRef.current = null;\n setCloseHandoffActive(false);\n }, []);\n\n const parentSheet = React.useContext(SheetContext);\n const parentNestDepth = parentSheet?.nestDepth ?? 0;\n const nestDepth = parentNestDepth + 1;\n\n const setOpen = useCallback(\n (value: boolean, options?: SheetSetOpenOptions) => {\n if (value) {\n clearCloseHandoff();\n } else if (options?.afterClose) {\n handoffAfterCloseRef.current = options.afterClose;\n setCloseHandoffActive(true);\n } else {\n clearCloseHandoff();\n }\n if (!isControlled) setInternalOpen(value);\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange, clearCloseHandoff],\n );\n\n const prevOpenRef = React.useRef<boolean | undefined>(undefined);\n useEffect(() => {\n const prev = prevOpenRef.current;\n prevOpenRef.current = open;\n if (open && prev === false) {\n clearCloseHandoff();\n }\n }, [open, clearCloseHandoff]);\n\n const sheetContextValue = useMemo(\n () => ({\n open,\n setOpen,\n nestDepth,\n showBackdrop,\n closeHandoffActive,\n clearCloseHandoff,\n handoffAfterCloseRef,\n }),\n [\n open,\n setOpen,\n nestDepth,\n showBackdrop,\n closeHandoffActive,\n clearCloseHandoff,\n ],\n );\n\n return (\n <SheetContext.Provider value={sheetContextValue}>\n {children}\n </SheetContext.Provider>\n );\n};\n\nfunction mergeChildClick(\n children: React.ReactNode,\n asChild: boolean | undefined,\n action: () => void,\n) {\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n }>;\n return React.cloneElement(child, {\n onClick: (e: React.MouseEvent) => {\n child.props.onClick?.(e);\n action();\n },\n });\n }\n return (\n <button type=\"button\" onClick={action}>\n {children}\n </button>\n );\n}\n\nexport const SheetTrigger: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n}> = ({ children, asChild }) => {\n const { setOpen } = useSheetContext();\n const openSheet = useCallback(() => setOpen(true), [setOpen]);\n return mergeChildClick(children, asChild, openSheet);\n};\n\nexport const SheetClose: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n afterClose?: () => void;\n}> = ({ children, asChild, afterClose }) => {\n const { setOpen } = useSheetContext();\n const closeSheet = useCallback(\n () => setOpen(false, afterClose ? { afterClose } : undefined),\n [setOpen, afterClose],\n );\n return mergeChildClick(children, asChild, closeSheet);\n};\n\n// -----------------------------------------------------------------------------\n// SheetContent internals\n// -----------------------------------------------------------------------------\n\nfunction useSheetMobileViewport() {\n const [isMobileViewport, setIsMobileViewport] = useState(false);\n\n useEffect(() => {\n const mqMobile = window.matchMedia(\n `(max-width: ${SHEET_MOBILE_MAX_WIDTH_PX}px)`,\n );\n const sync = () => setIsMobileViewport(mqMobile.matches);\n sync();\n mqMobile.addEventListener(\"change\", sync);\n return () => mqMobile.removeEventListener(\"change\", sync);\n }, []);\n\n return isMobileViewport;\n}\n\nfunction useSheetRenderLifecycle(\n open: boolean,\n panelCloseMs: number,\n showBackdrop: boolean,\n) {\n const unmountAfterCloseMs = showBackdrop\n ? Math.max(BACKDROP_CLOSE_MS, panelCloseMs)\n : panelCloseMs;\n\n const [shouldRender, setShouldRender] = useState(open);\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n if (open) {\n setShouldRender(true);\n } else {\n setIsAnimating(false);\n const timer = setTimeout(\n () => setShouldRender(false),\n unmountAfterCloseMs,\n );\n return () => clearTimeout(timer);\n }\n }, [open, unmountAfterCloseMs]);\n\n useEffect(() => {\n if (!shouldRender || !open) return;\n\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsAnimating(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }, [shouldRender, open]);\n\n return { shouldRender, isAnimating };\n}\n\nfunction useSheetScrollLock(\n open: boolean,\n setOpen: (v: boolean) => void,\n bounded: boolean,\n nestDepth: number,\n) {\n useEffect(() => {\n if (!open) return;\n\n const handleEscRoot = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n const handleEscNested = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.stopImmediatePropagation();\n setOpen(false);\n };\n\n if (typeof document === \"undefined\") return;\n\n const rootViewportSheet = !bounded && nestDepth === 1;\n\n if (rootViewportSheet) {\n document.body.style.overflow = \"hidden\";\n window.addEventListener(\"keydown\", handleEscRoot);\n return () => {\n window.removeEventListener(\"keydown\", handleEscRoot);\n document.body.style.overflow = \"\";\n };\n }\n\n window.addEventListener(\"keydown\", handleEscNested, true);\n return () => window.removeEventListener(\"keydown\", handleEscNested, true);\n }, [open, setOpen, bounded, nestDepth]);\n}\n\nexport type SheetCloseButtonSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface SheetCloseButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * Desktop offset matches {@link SheetContent} for the same `side`; default\n * `right` matches `SheetContent` default.\n */\n side?: SheetCloseButtonSide;\n}\n\n/**\n * Default dismiss control for {@link SheetContent}. Includes absolute placement\n * for the given `side`; pass `className` to adjust or replace positioning.\n * When `onClick` is omitted, uses sheet context to call `setOpen(false)`.\n */\nexport const SheetCloseButton = React.forwardRef<\n HTMLButtonElement,\n SheetCloseButtonProps\n>(\n (\n { className, side = \"right\", style, type = \"button\", onClick, ...props },\n ref,\n ) => {\n const { setOpen } = useSheetContext();\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (onClick == null) {\n setOpen(false);\n }\n },\n [onClick, setOpen],\n );\n\n return (\n <button\n ref={ref}\n type={type}\n style={{ zIndex: SHEET_Z_PANEL_CLOSE, ...style }}\n className={cn(\n \"flex size-12 cursor-pointer items-center justify-center rounded-full md:bg-background transition-all hover:bg-secondary-background active:scale-[0.96] md:border md:border-primary/10 md:shadow-xl hover:border-primary/20\",\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n <X className=\"size-5.5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n );\n },\n);\nSheetCloseButton.displayName = \"SheetCloseButton\";\n\ninterface SheetContentProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n closeThreshold?: number;\n velocityThreshold?: number;\n swipeEnabled?: boolean;\n showClose?: boolean;\n duration?: number;\n}\n\nexport const SheetContent: React.FC<SheetContentProps> = ({\n children,\n side = \"right\",\n size = \"md\",\n className,\n closeThreshold = CLOSE_THRESHOLD,\n velocityThreshold = VELOCITY_THRESHOLD,\n swipeEnabled = true,\n showClose = true,\n duration = PANEL_OPEN_MS,\n role,\n ...props\n}) => {\n const {\n open,\n setOpen,\n nestDepth,\n showBackdrop,\n closeHandoffActive,\n clearCloseHandoff,\n handoffAfterCloseRef,\n } = useSheetContext();\n const boundaryCtx = React.useContext(SheetBoundaryContext);\n const inBoundaryTree = useMemo(() => boundaryCtx != null, [boundaryCtx]);\n const boundaryHost = useMemo(() => boundaryCtx?.host ?? null, [boundaryCtx]);\n const bounded = useMemo(\n () => inBoundaryTree && boundaryHost != null,\n [inBoundaryTree, boundaryHost],\n );\n\n const isMobileViewport = useSheetMobileViewport();\n\n const dialogMotion = useMemo(\n () => bounded && role === \"dialog\" && isMobileViewport,\n [bounded, role, isMobileViewport],\n );\n\n const swipeActive = useMemo(\n () => swipeEnabled && !dialogMotion,\n [swipeEnabled, dialogMotion],\n );\n\n const basePanelCloseMs = useMemo(\n () =>\n dialogMotion\n ? DIALOG_MOTION_MS\n : isMobileViewport\n ? PANEL_CLOSE_MS_MOBILE\n : PANEL_CLOSE_MS_DESKTOP,\n [dialogMotion, isMobileViewport],\n );\n\n const [handoffExitMsLatch, setHandoffExitMsLatch] = useState<number | null>(\n null,\n );\n\n useLayoutEffect(() => {\n if (open) {\n setHandoffExitMsLatch(null);\n return;\n }\n if (closeHandoffActive) {\n setHandoffExitMsLatch(PANEL_CLOSE_MS_HANDOFF);\n }\n }, [open, closeHandoffActive]);\n\n const panelCloseMs = useMemo(() => {\n return !open && closeHandoffActive\n ? PANEL_CLOSE_MS_HANDOFF\n : !open && handoffExitMsLatch != null\n ? handoffExitMsLatch\n : basePanelCloseMs;\n }, [open, closeHandoffActive, handoffExitMsLatch, basePanelCloseMs]);\n\n const { shouldRender, isAnimating } = useSheetRenderLifecycle(\n open,\n panelCloseMs,\n showBackdrop,\n );\n\n useEffect(() => {\n if (open || !closeHandoffActive) return;\n const cb = handoffAfterCloseRef.current;\n if (!cb) return;\n const id = window.setTimeout(() => {\n cb();\n clearCloseHandoff();\n }, HANDOFF_AFTER_CLOSE_DELAY_MS);\n return () => clearTimeout(id);\n }, [open, closeHandoffActive, clearCloseHandoff, handoffAfterCloseRef]);\n\n useSheetScrollLock(open, setOpen, bounded, nestDepth);\n\n const panelOpenMs = useMemo(() => {\n return duration;\n }, [duration]);\n\n const closeSheet = useCallback(() => setOpen(false), [setOpen]);\n\n const touchRef = React.useRef({\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n startTime: 0,\n isDragging: false,\n direction: null as \"x\" | \"y\" | null,\n });\n const panelRef = React.useRef<HTMLDivElement>(null);\n const rafId = React.useRef<number | null>(null);\n const swipeReboundCleanupRef = React.useRef<(() => void) | null>(null);\n /** So `panelSurfaceStyle` can match swipe-dismiss easing after `setOpen(false)` overwrites inline styles. */\n const panelCloseEasingViaSwipeRef = React.useRef(false);\n\n useLayoutEffect(() => {\n if (open) panelCloseEasingViaSwipeRef.current = false;\n }, [open]);\n\n const cancelSwipeRebound = useCallback(() => {\n swipeReboundCleanupRef.current?.();\n swipeReboundCleanupRef.current = null;\n }, []);\n\n const updateTransform = useCallback(() => {\n if (!panelRef.current || !touchRef.current.isDragging || !swipeActive)\n return;\n\n const { startX, startY, currentX, currentY, direction } = touchRef.current;\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n\n let transform = \"\";\n if (side === \"right\" && direction === \"x\" && deltaX > 0)\n transform = `translateX(${deltaX}px)`;\n else if (side === \"left\" && direction === \"x\" && deltaX < 0)\n transform = `translateX(${deltaX}px)`;\n else if (side === \"bottom\" && direction === \"y\" && deltaY > 0)\n transform = `translateY(${deltaY}px)`;\n else if (side === \"top\" && direction === \"y\" && deltaY < 0)\n transform = `translateY(${deltaY}px)`;\n\n if (transform) {\n panelRef.current.style.transform = transform;\n panelRef.current.style.transition = \"none\";\n }\n\n rafId.current = requestAnimationFrame(updateTransform);\n }, [swipeActive, side]);\n\n const handleTouchStart = useCallback(\n (e: React.TouchEvent) => {\n if (!swipeActive || !e.touches[0]) return;\n cancelSwipeRebound();\n touchRef.current = {\n startX: e.touches[0].clientX,\n startY: e.touches[0].clientY,\n currentX: e.touches[0].clientX,\n currentY: e.touches[0].clientY,\n startTime: Date.now(),\n isDragging: true,\n direction: null,\n };\n if (rafId.current) cancelAnimationFrame(rafId.current);\n rafId.current = requestAnimationFrame(updateTransform);\n },\n [swipeActive, updateTransform, cancelSwipeRebound],\n );\n\n const handleTouchMove = useCallback(\n (e: React.TouchEvent) => {\n if (!touchRef.current.isDragging || !swipeActive || !e.touches[0]) return;\n\n touchRef.current.currentX = e.touches[0].clientX;\n touchRef.current.currentY = e.touches[0].clientY;\n\n const deltaX = Math.abs(\n touchRef.current.currentX - touchRef.current.startX,\n );\n const deltaY = Math.abs(\n touchRef.current.currentY - touchRef.current.startY,\n );\n\n if (!touchRef.current.direction && (deltaX > 5 || deltaY > 5)) {\n touchRef.current.direction = deltaX > deltaY ? \"x\" : \"y\";\n }\n },\n [swipeActive],\n );\n\n const handleTouchEnd = useCallback(\n (e: React.TouchEvent) => {\n if (!touchRef.current.isDragging || !swipeActive || !e.changedTouches[0])\n return;\n touchRef.current.isDragging = false;\n if (rafId.current) cancelAnimationFrame(rafId.current);\n\n const endX = e.changedTouches[0].clientX;\n const endY = e.changedTouches[0].clientY;\n const deltaX = endX - touchRef.current.startX;\n const deltaY = endY - touchRef.current.startY;\n const deltaTime = Date.now() - touchRef.current.startTime;\n\n const velocityX = Math.abs(deltaX / deltaTime);\n const velocityY = Math.abs(deltaY / deltaTime);\n\n const flickPx = 80;\n let shouldCloseGesture = false;\n\n if (side === \"right\") {\n shouldCloseGesture =\n deltaX > closeThreshold ||\n (deltaX > flickPx && velocityX > velocityThreshold);\n } else if (side === \"left\") {\n shouldCloseGesture =\n deltaX < -closeThreshold ||\n (deltaX < -flickPx && velocityX > velocityThreshold);\n } else if (side === \"bottom\") {\n shouldCloseGesture =\n deltaY > closeThreshold ||\n (deltaY > flickPx && velocityY > velocityThreshold);\n } else if (side === \"top\") {\n shouldCloseGesture =\n deltaY < -closeThreshold ||\n (deltaY < -flickPx && velocityY > velocityThreshold);\n }\n\n if (panelRef.current) {\n if (shouldCloseGesture) {\n cancelSwipeRebound();\n panelCloseEasingViaSwipeRef.current = true;\n const el = panelRef.current;\n el.style.transition = \"\";\n const swipeCloseMs = isMobileViewport\n ? PANEL_CLOSE_MS_MOBILE\n : PANEL_CLOSE_MS_DESKTOP;\n el.style.transition =\n swipeCloseMs > 0\n ? `transform ${swipeCloseMs}ms ${PANEL_SWIPE_CLOSE_EASING}`\n : \"none\";\n\n if (bounded && (side === \"left\" || side === \"right\")) {\n el.style.transform =\n side === \"right\" ? \"translateX(100%)\" : \"translateX(-100%)\";\n } else {\n const axis = side === \"left\" || side === \"right\" ? \"X\" : \"Y\";\n const dir = side === \"right\" || side === \"bottom\" ? \"\" : \"-\";\n const off =\n axis === \"X\" ? `${dir}${PANEL_OFF_X}` : `${dir}${PANEL_OFF_Y}`;\n el.style.transform = `translate${axis}(${off})`;\n }\n setOpen(false);\n } else {\n cancelSwipeRebound();\n const el = panelRef.current;\n if (panelOpenMs > 0) {\n el.style.transition = `transform ${panelOpenMs}ms ${PANEL_OPEN_EASING}`;\n el.style.transform = \"none\";\n let finished = false;\n let fallbackId: number | undefined;\n const finishRebound = () => {\n if (finished) return;\n finished = true;\n el.removeEventListener(\"transitionend\", onTransitionEnd);\n if (fallbackId !== undefined) window.clearTimeout(fallbackId);\n swipeReboundCleanupRef.current = null;\n if (panelRef.current) {\n panelRef.current.style.transition = \"\";\n panelRef.current.style.transform = \"\";\n }\n };\n const onTransitionEnd = (ev: TransitionEvent) => {\n if (ev.target !== el || ev.propertyName !== \"transform\") return;\n finishRebound();\n };\n fallbackId = window.setTimeout(finishRebound, panelOpenMs + 80);\n swipeReboundCleanupRef.current = finishRebound;\n el.addEventListener(\"transitionend\", onTransitionEnd);\n } else {\n el.style.transition = \"\";\n el.style.transform = \"\";\n }\n }\n }\n },\n [\n swipeActive,\n closeThreshold,\n velocityThreshold,\n side,\n isMobileViewport,\n bounded,\n setOpen,\n cancelSwipeRebound,\n panelOpenMs,\n ],\n );\n\n const panelTransform = useMemo(\n () =>\n dialogMotion\n ? isAnimating\n ? \"translateY(0)\"\n : `translateY(${DIALOG_MOTION_OFFSET_PX}px)`\n : panelSlideTransform(side, isAnimating, bounded),\n [dialogMotion, isAnimating, side, bounded],\n );\n\n const boundaryDepth = boundaryCtx?.depth ?? 0;\n const zIndex = bounded\n ? SHEET_Z_PANEL_CLOSE +\n SHEET_Z_PORTAL_STEP +\n boundaryDepth * SHEET_Z_PORTAL_STEP +\n (nestDepth - 1) * 2\n : SHEET_Z_PANEL_CLOSE -\n 5 * SHEET_Z_PORTAL_STEP +\n (nestDepth - 1) * SHEET_Z_PORTAL_STEP;\n const layerPosition = bounded ? \"absolute\" : \"fixed\";\n\n const backdropStyle = useMemo(() => {\n if (!showBackdrop) return { transition: \"none\" } as const;\n if (dialogMotion) {\n return {\n transitionProperty: \"opacity\",\n transitionDuration: `${open ? DIALOG_MOTION_MS : panelCloseMs}ms`,\n transitionTimingFunction: open\n ? DIALOG_ENTRY_MOTION_EASING\n : DIALOG_EXIT_MOTION_EASING,\n };\n }\n return {\n transitionProperty: \"opacity\",\n transitionDuration: open\n ? `${BACKDROP_OPEN_MS}ms`\n : `${BACKDROP_CLOSE_MS}ms`,\n transitionTimingFunction: open\n ? BACKDROP_OPEN_EASING\n : BACKDROP_CLOSE_EASING,\n };\n }, [open, showBackdrop, dialogMotion, panelCloseMs]);\n\n const rootLayerStyle = useMemo(() => ({ zIndex }), [zIndex]);\n\n const panelSurfaceStyle = useMemo(() => {\n const touchAction = !swipeActive\n ? undefined\n : side === \"left\" || side === \"right\"\n ? \"pan-y\"\n : \"pan-x\";\n\n if (dialogMotion) {\n return {\n ...props.style,\n transform: panelTransform,\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"transform, opacity\",\n transitionDuration: `${open ? DIALOG_MOTION_MS : panelCloseMs}ms`,\n transitionTimingFunction: open\n ? DIALOG_ENTRY_MOTION_EASING\n : DIALOG_EXIT_MOTION_EASING,\n touchAction,\n } satisfies React.CSSProperties;\n }\n\n return {\n ...props.style,\n transform: panelTransform,\n transitionProperty: \"transform\",\n transitionDuration: open ? `${panelOpenMs}ms` : `${panelCloseMs}ms`,\n transitionTimingFunction: open\n ? PANEL_OPEN_EASING\n : panelCloseEasingViaSwipeRef.current\n ? PANEL_SWIPE_CLOSE_EASING\n : PANEL_CLOSE_EASING,\n touchAction,\n } satisfies React.CSSProperties;\n }, [\n dialogMotion,\n props.style,\n panelTransform,\n isAnimating,\n open,\n panelOpenMs,\n panelCloseMs,\n side,\n swipeActive,\n ]);\n\n if (!shouldRender) return null;\n\n if (inBoundaryTree && boundaryHost == null) {\n return null;\n }\n\n const sheetTree = (\n <div\n className={cn(\n layerPosition,\n \"inset-0\",\n !bounded && \"flex items-center justify-center\",\n bounded && \"pointer-events-none\",\n )}\n style={rootLayerStyle}\n >\n <div\n className={cn(\n layerPosition,\n \"inset-0\",\n showBackdrop && \"bg-black/20 transition-opacity dark:bg-black/50\",\n showBackdrop && (isAnimating ? \"opacity-100\" : \"opacity-0\"),\n !showBackdrop && \"bg-transparent\",\n bounded && \"pointer-events-auto\",\n )}\n style={backdropStyle}\n onClick={closeSheet}\n />\n\n <div\n {...props}\n ref={panelRef}\n role={role}\n className={cn(\n \"bg-background flex flex-col p-6 shadow-xl\",\n layerPosition,\n bounded\n ? cn(\n \"inset-0 z-10 h-full w-full max-w-none overflow-hidden pointer-events-auto\",\n )\n : cn(\"z-50\", SIDE_LAYOUT[side], sizeClassFor(side, size)),\n className,\n )}\n style={panelSurfaceStyle}\n onTouchStart={swipeActive ? handleTouchStart : undefined}\n onTouchMove={swipeActive ? handleTouchMove : undefined}\n onTouchEnd={swipeActive ? handleTouchEnd : undefined}\n >\n {children}\n\n {showClose && (\n <SheetCloseButton\n side={side}\n className={cn(\n \"absolute top-4 right-4\",\n side === \"right\" && \"md:top-5 md:right-auto md:-left-16\",\n side === \"left\" && \"md:top-5 md:-right-16 md:left-auto\",\n side === \"top\" &&\n \"md:top-auto md:right-auto md:-bottom-15 md:left-1/2 md:-translate-x-1/2\",\n side === \"bottom\" &&\n \"md:-top-15 md:right-auto md:bottom-auto md:left-1/2 md:-translate-x-1/2\",\n )}\n />\n )}\n </div>\n </div>\n );\n\n return createPortal(\n sheetTree,\n bounded && boundaryHost ? boundaryHost : document.body,\n );\n};\n\n// -----------------------------------------------------------------------------\n// Chrome\n// -----------------------------------------------------------------------------\n\nexport const SheetHeader: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { fixed?: boolean }\n> = ({ className, fixed, ...props }) => (\n <div\n className={cn(\n \"flex flex-col text-left\",\n fixed && \"bg-background border-primary/10 sticky top-0 z-10 border-b p-4\",\n className,\n )}\n {...props}\n />\n);\n\nexport const SheetFooter: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { fixed?: boolean }\n> = ({ className, fixed, ...props }) => (\n <div\n className={cn(\n \"flex flex-row\",\n fixed &&\n \"bg-background border-primary/10 sticky bottom-0 z-10 border-t p-4\",\n className,\n )}\n {...props}\n />\n);\n\nexport const SheetTitle: React.FC<React.HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h3\n className={cn(\"text-primary text-lg font-semibold\", className)}\n {...props}\n />\n);\n\nexport const SheetDescription: React.FC<\n React.HTMLAttributes<HTMLParagraphElement>\n> = ({ className, ...props }) => (\n <p className={cn(\"text-muted-foreground text-sm\", className)} {...props} />\n);\n/**\n * Circular back control for nested sheets (arrow, same footprint as the default\n * sheet close icon). Wraps `SheetClose` with `asChild`.\n *\n * `onClick` (and any other button props) run in the same activation handler as\n * close: your handler runs first, then the sheet closes. Prefer `afterClose`\n * over a delayed `onClick` when opening another sheet so the exit uses the\n * handoff timing built into `Sheet`.\n */\nexport const SheetNestedClose: React.FC<\n React.ComponentPropsWithoutRef<\"button\"> & {\n children?: React.ReactNode;\n /**\n * Runs after the close animation when chaining another sheet. Uses a shorter\n * exit (see `SheetSetOpenOptions.afterClose`).\n */\n afterClose?: () => void;\n }\n> = ({ className, children, onClick, afterClose, ...props }) => (\n <SheetClose asChild afterClose={afterClose}>\n <button\n type=\"button\"\n className={cn(\n \"inline-flex size-12 shrink-0 cursor-pointer items-center justify-center rounded-full bg-background transition-all hover:bg-primary/5 active:scale-[0.96]\",\n className,\n )}\n onClick={onClick}\n {...props}\n >\n {children ?? (\n <>\n <ArrowLeft className=\"size-5.5\" aria-hidden />\n <span className=\"sr-only\">Back</span>\n </>\n )}\n </button>\n </SheetClose>\n);\n"]}
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/react/sheet.tsx"],"names":[],"mappings":"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","file":"sheet.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 React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { ArrowLeft, X } from \"lucide-react\";\n\nimport { cn } from \"../lib/utils\";\n\n// -----------------------------------------------------------------------------\n// Constants\n// -----------------------------------------------------------------------------\n\nconst CLOSE_THRESHOLD = 200;\nconst VELOCITY_THRESHOLD = 1;\nconst SHEET_MOBILE_MAX_WIDTH_PX = 1024;\n\nconst PANEL_OPEN_MS = 280;\nconst PANEL_OPEN_EASING = \"cubic-bezier(0,0.55,0.45,1)\";\nconst PANEL_CLOSE_EASING = \"cubic-bezier(0.55,0,1,0.45)\";\nconst PANEL_SWIPE_CLOSE_EASING = \"cubic-bezier(2,0,1,0.45)\";\nconst PANEL_CLOSE_MS_DESKTOP = 200;\nconst PANEL_CLOSE_MS_MOBILE = 220;\n\n/**\n * Handoff slide-out duration; matches embed `sheetReplace` phase 1\n * (`transform 150ms cubic-bezier(0.55,0,1,0.45)`).\n */\nconst PANEL_CLOSE_MS_HANDOFF = 150;\n\n/** Delay before `afterClose` runs; matches embed `sheetReplace` `setTimeout(..., 80)`. */\nconst HANDOFF_AFTER_CLOSE_DELAY_MS = 80;\n\nconst BACKDROP_OPEN_MS = 500;\nconst BACKDROP_OPEN_EASING = \"cubic-bezier(0.85,0,0.15,1)\";\nconst BACKDROP_CLOSE_MS = 150;\nconst BACKDROP_CLOSE_EASING = \"cubic-bezier(0.55,0,1,0.45)\";\n\n/** Bounded `role=\"dialog\"` on mobile , slide + opacity; entry/exit curves below. */\nconst DIALOG_MOTION_MS = 200;\nconst DIALOG_ENTRY_MOTION_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\nconst DIALOG_EXIT_MOTION_EASING = \"cubic-bezier(0.85, 0, 1, 0.15)\";\nconst DIALOG_MOTION_OFFSET_PX = 120;\n\n/** Off-screen distance: horizontal slides match desktop embed (112%), vertical 100%. */\nconst PANEL_OFF_X = \"112%\";\nconst PANEL_OFF_Y = \"100%\";\n\n/**\n * Z-order for `SheetContent`: default close uses `SHEET_Z_PANEL_CLOSE` (above\n * `ScrollHeaderSticky` z-40, same idea as `Dialog`). Portal roots use\n * `SHEET_Z_PORTAL_STEP` as the main tier size; viewport base is `close - 5*step` (50).\n * Bounded stacks start at `close + step` so they sit above an ancestor's close control;\n * nested bounded sheets add `(nestDepth - 1) * 2` within the same boundary tree.\n */\nconst SHEET_Z_PANEL_CLOSE = 100;\nconst SHEET_Z_PORTAL_STEP = 10;\n\nconst SIDE_LAYOUT: Record<\"top\" | \"right\" | \"bottom\" | \"left\", string> = {\n top: \"top-0 left-0 right-0 border-b border-primary/10\",\n bottom: \"bottom-0 left-0 right-0 border-t border-primary/10\",\n left: \"left-0 top-0 bottom-0 border-r border-primary/10\",\n right: \"right-0 top-0 bottom-0 md:border-l border-primary/10\",\n};\n\nfunction sizeClassFor(\n side: \"top\" | \"right\" | \"bottom\" | \"left\",\n size: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\",\n): string {\n const horizontal = side === \"left\" || side === \"right\";\n if (size === \"full\") return \"w-full h-full\";\n if (horizontal) {\n const max = {\n sm: \"sm:max-w-sm\",\n md: \"sm:max-w-md\",\n lg: \"sm:max-w-lg\",\n xl: \"sm:max-w-xl\",\n }[size];\n return `w-full ${max} h-full`;\n }\n const maxH = {\n sm: \"max-h-sm\",\n md: \"max-h-md\",\n lg: \"max-h-lg\",\n xl: \"max-h-xl\",\n }[size];\n return `h-auto w-full ${maxH}`;\n}\n\n/**\n * Tailwind v4 `translate-*` uses the CSS `translate` property, not `transform`.\n * We animate `transform` inline so open/close transitions run.\n */\nfunction panelSlideTransform(\n side: \"top\" | \"right\" | \"bottom\" | \"left\",\n isAnimating: boolean,\n bounded: boolean,\n): string {\n if (isAnimating) return \"none\";\n\n if (bounded) {\n if (side === \"right\") return \"translateX(100%)\";\n if (side === \"left\") return \"translateX(-100%)\";\n }\n\n switch (side) {\n case \"right\":\n return `translateX(${PANEL_OFF_X})`;\n case \"left\":\n return `translateX(-${PANEL_OFF_X})`;\n case \"bottom\":\n return `translateY(${PANEL_OFF_Y})`;\n case \"top\":\n return `translateY(-${PANEL_OFF_Y})`;\n default:\n return \"none\";\n }\n}\n\n// -----------------------------------------------------------------------------\n// Context: one provider per `<Sheet>` (open state + tree depth for z-index / Esc)\n// -----------------------------------------------------------------------------\n\ntype SheetSetOpenOptions = {\n /**\n * Fires 80ms after the handoff close starts (same overlap as the embed event details `sheetReplace`). Exit animation is 150ms.\n */\n afterClose?: () => void;\n};\n\nconst SheetContext = React.createContext<\n | {\n open: boolean;\n setOpen: (open: boolean, options?: SheetSetOpenOptions) => void;\n /** 1-based: outermost viewport sheet = 1 */\n nestDepth: number;\n /**\n * When `true`, shows a dimmed scrim; when `false`, an invisible full-area\n * layer still captures outside clicks. Default `false`.\n */\n showBackdrop: boolean;\n /** True while closing with `afterClose` , SheetContent uses faster exit motion. */\n closeHandoffActive: boolean;\n clearCloseHandoff: () => void;\n handoffAfterCloseRef: React.MutableRefObject<(() => void) | null>;\n }\n | undefined\n>(undefined);\n\nfunction useSheetContext() {\n const ctx = React.useContext(SheetContext);\n if (!ctx) {\n throw new Error(\"Sheet components must be used within a <Sheet />\");\n }\n return ctx;\n}\n\n/** Portal host + nesting depth for z-stacking inside nested boundaries. */\nconst SheetBoundaryContext = React.createContext<{\n host: HTMLElement | null;\n depth: number;\n} | null>(null);\n\nexport const SheetBoundary: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { children: React.ReactNode }\n> = ({ className, children, ...props }) => {\n const [host, setHost] = useState<HTMLDivElement | null>(null);\n const parent = React.useContext(SheetBoundaryContext);\n const depth = (parent?.depth ?? 0) + 1;\n const setRef = useCallback((node: HTMLDivElement | null) => {\n setHost(node);\n }, []);\n\n const boundaryValue = useMemo(() => ({ host, depth }), [host, depth]);\n\n return (\n <SheetBoundaryContext.Provider value={boundaryValue}>\n <div\n ref={setRef}\n className={cn(\"relative min-h-0 min-w-0\", className)}\n {...props}\n >\n {children}\n </div>\n </SheetBoundaryContext.Provider>\n );\n};\n\nexport const Sheet: React.FC<{\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n /**\n * Dimmed scrim behind the panel. Outside-click layer is always present; when\n * `false` the layer is invisible. Default `false`.\n */\n showBackdrop?: boolean;\n}> = ({\n children,\n open: controlledOpen,\n onOpenChange,\n showBackdrop = false,\n}) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n\n const handoffAfterCloseRef = React.useRef<(() => void) | null>(null);\n const [closeHandoffActive, setCloseHandoffActive] = useState(false);\n\n const clearCloseHandoff = useCallback(() => {\n handoffAfterCloseRef.current = null;\n setCloseHandoffActive(false);\n }, []);\n\n const parentSheet = React.useContext(SheetContext);\n const parentNestDepth = parentSheet?.nestDepth ?? 0;\n const nestDepth = parentNestDepth + 1;\n\n const setOpen = useCallback(\n (value: boolean, options?: SheetSetOpenOptions) => {\n if (value) {\n clearCloseHandoff();\n } else if (options?.afterClose) {\n handoffAfterCloseRef.current = options.afterClose;\n setCloseHandoffActive(true);\n } else {\n clearCloseHandoff();\n }\n if (!isControlled) setInternalOpen(value);\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange, clearCloseHandoff],\n );\n\n const prevOpenRef = React.useRef<boolean | undefined>(undefined);\n useEffect(() => {\n const prev = prevOpenRef.current;\n prevOpenRef.current = open;\n if (open && prev === false) {\n clearCloseHandoff();\n }\n }, [open, clearCloseHandoff]);\n\n const sheetContextValue = useMemo(\n () => ({\n open,\n setOpen,\n nestDepth,\n showBackdrop,\n closeHandoffActive,\n clearCloseHandoff,\n handoffAfterCloseRef,\n }),\n [\n open,\n setOpen,\n nestDepth,\n showBackdrop,\n closeHandoffActive,\n clearCloseHandoff,\n ],\n );\n\n return (\n <SheetContext.Provider value={sheetContextValue}>\n {children}\n </SheetContext.Provider>\n );\n};\n\nfunction mergeChildClick(\n children: React.ReactNode,\n asChild: boolean | undefined,\n action: () => void,\n) {\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n }>;\n return React.cloneElement(child, {\n onClick: (e: React.MouseEvent) => {\n child.props.onClick?.(e);\n action();\n },\n });\n }\n return (\n <button type=\"button\" onClick={action}>\n {children}\n </button>\n );\n}\n\nexport const SheetTrigger: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n}> = ({ children, asChild }) => {\n const { setOpen } = useSheetContext();\n const openSheet = useCallback(() => setOpen(true), [setOpen]);\n return mergeChildClick(children, asChild, openSheet);\n};\n\nexport const SheetClose: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n afterClose?: () => void;\n}> = ({ children, asChild, afterClose }) => {\n const { setOpen } = useSheetContext();\n const closeSheet = useCallback(\n () => setOpen(false, afterClose ? { afterClose } : undefined),\n [setOpen, afterClose],\n );\n return mergeChildClick(children, asChild, closeSheet);\n};\n\n// -----------------------------------------------------------------------------\n// SheetContent internals\n// -----------------------------------------------------------------------------\n\nfunction useSheetMobileViewport() {\n const [isMobileViewport, setIsMobileViewport] = useState(false);\n\n useEffect(() => {\n const mqMobile = window.matchMedia(\n `(max-width: ${SHEET_MOBILE_MAX_WIDTH_PX}px)`,\n );\n const sync = () => setIsMobileViewport(mqMobile.matches);\n sync();\n mqMobile.addEventListener(\"change\", sync);\n return () => mqMobile.removeEventListener(\"change\", sync);\n }, []);\n\n return isMobileViewport;\n}\n\nfunction useSheetRenderLifecycle(\n open: boolean,\n panelCloseMs: number,\n showBackdrop: boolean,\n) {\n const unmountAfterCloseMs = showBackdrop\n ? Math.max(BACKDROP_CLOSE_MS, panelCloseMs)\n : panelCloseMs;\n\n const [shouldRender, setShouldRender] = useState(open);\n const [isAnimating, setIsAnimating] = useState(false);\n\n useEffect(() => {\n if (open) {\n setShouldRender(true);\n } else {\n setIsAnimating(false);\n const timer = setTimeout(\n () => setShouldRender(false),\n unmountAfterCloseMs,\n );\n return () => clearTimeout(timer);\n }\n }, [open, unmountAfterCloseMs]);\n\n useEffect(() => {\n if (!shouldRender || !open) return;\n\n let raf2 = 0;\n const raf1 = requestAnimationFrame(() => {\n raf2 = requestAnimationFrame(() => setIsAnimating(true));\n });\n return () => {\n cancelAnimationFrame(raf1);\n if (raf2) cancelAnimationFrame(raf2);\n };\n }, [shouldRender, open]);\n\n return { shouldRender, isAnimating };\n}\n\nfunction useSheetScrollLock(\n open: boolean,\n setOpen: (v: boolean) => void,\n bounded: boolean,\n nestDepth: number,\n) {\n useEffect(() => {\n if (!open) return;\n\n const handleEscRoot = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n const handleEscNested = (e: KeyboardEvent) => {\n if (e.key !== \"Escape\") return;\n e.stopImmediatePropagation();\n setOpen(false);\n };\n\n if (typeof document === \"undefined\") return;\n\n const rootViewportSheet = !bounded && nestDepth === 1;\n\n if (rootViewportSheet) {\n document.body.style.overflow = \"hidden\";\n window.addEventListener(\"keydown\", handleEscRoot);\n return () => {\n window.removeEventListener(\"keydown\", handleEscRoot);\n document.body.style.overflow = \"\";\n };\n }\n\n window.addEventListener(\"keydown\", handleEscNested, true);\n return () => window.removeEventListener(\"keydown\", handleEscNested, true);\n }, [open, setOpen, bounded, nestDepth]);\n}\n\nexport type SheetCloseButtonSide = \"top\" | \"right\" | \"bottom\" | \"left\";\n\nexport interface SheetCloseButtonProps extends React.ButtonHTMLAttributes<HTMLButtonElement> {\n /**\n * Desktop offset matches {@link SheetContent} for the same `side`; default\n * `right` matches `SheetContent` default.\n */\n side?: SheetCloseButtonSide;\n}\n\n/**\n * Default dismiss control for {@link SheetContent}. Includes absolute placement\n * for the given `side`; pass `className` to adjust or replace positioning.\n * When `onClick` is omitted, uses sheet context to call `setOpen(false)`.\n */\nexport const SheetCloseButton = React.forwardRef<\n HTMLButtonElement,\n SheetCloseButtonProps\n>(\n (\n { className, side = \"right\", style, type = \"button\", onClick, ...props },\n ref,\n ) => {\n const { setOpen } = useSheetContext();\n const handleClick = useCallback(\n (e: React.MouseEvent<HTMLButtonElement>) => {\n onClick?.(e);\n if (onClick == null) {\n setOpen(false);\n }\n },\n [onClick, setOpen],\n );\n\n return (\n <button\n ref={ref}\n type={type}\n style={{ zIndex: SHEET_Z_PANEL_CLOSE, ...style }}\n className={cn(\n \"flex size-12 cursor-pointer items-center justify-center rounded-full md:bg-background transition-all hover:bg-secondary-background active:scale-[0.96] md:border md:border-primary/10 md:shadow-xl hover:border-primary/20\",\n className,\n )}\n onClick={handleClick}\n {...props}\n >\n <X className=\"size-5.5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n );\n },\n);\nSheetCloseButton.displayName = \"SheetCloseButton\";\n\ninterface SheetContentProps extends React.HTMLAttributes<HTMLDivElement> {\n side?: \"top\" | \"right\" | \"bottom\" | \"left\";\n size?: \"sm\" | \"md\" | \"lg\" | \"xl\" | \"full\";\n closeThreshold?: number;\n velocityThreshold?: number;\n swipeEnabled?: boolean;\n showClose?: boolean;\n duration?: number;\n}\n\nexport const SheetContent: React.FC<SheetContentProps> = ({\n children,\n side = \"right\",\n size = \"md\",\n className,\n closeThreshold = CLOSE_THRESHOLD,\n velocityThreshold = VELOCITY_THRESHOLD,\n swipeEnabled = true,\n showClose = true,\n duration = PANEL_OPEN_MS,\n role,\n ...props\n}) => {\n const {\n open,\n setOpen,\n nestDepth,\n showBackdrop,\n closeHandoffActive,\n clearCloseHandoff,\n handoffAfterCloseRef,\n } = useSheetContext();\n const boundaryCtx = React.useContext(SheetBoundaryContext);\n const inBoundaryTree = useMemo(() => boundaryCtx != null, [boundaryCtx]);\n const boundaryHost = useMemo(() => boundaryCtx?.host ?? null, [boundaryCtx]);\n const bounded = useMemo(\n () => inBoundaryTree && boundaryHost != null,\n [inBoundaryTree, boundaryHost],\n );\n\n const isMobileViewport = useSheetMobileViewport();\n\n const dialogMotion = useMemo(\n () => bounded && role === \"dialog\" && isMobileViewport,\n [bounded, role, isMobileViewport],\n );\n\n const swipeActive = useMemo(\n () => swipeEnabled && !dialogMotion,\n [swipeEnabled, dialogMotion],\n );\n\n const basePanelCloseMs = useMemo(\n () =>\n dialogMotion\n ? DIALOG_MOTION_MS\n : isMobileViewport\n ? PANEL_CLOSE_MS_MOBILE\n : PANEL_CLOSE_MS_DESKTOP,\n [dialogMotion, isMobileViewport],\n );\n\n const [handoffExitMsLatch, setHandoffExitMsLatch] = useState<number | null>(\n null,\n );\n\n useLayoutEffect(() => {\n if (open) {\n setHandoffExitMsLatch(null);\n return;\n }\n if (closeHandoffActive) {\n setHandoffExitMsLatch(PANEL_CLOSE_MS_HANDOFF);\n }\n }, [open, closeHandoffActive]);\n\n const panelCloseMs = useMemo(() => {\n return !open && closeHandoffActive\n ? PANEL_CLOSE_MS_HANDOFF\n : !open && handoffExitMsLatch != null\n ? handoffExitMsLatch\n : basePanelCloseMs;\n }, [open, closeHandoffActive, handoffExitMsLatch, basePanelCloseMs]);\n\n const { shouldRender, isAnimating } = useSheetRenderLifecycle(\n open,\n panelCloseMs,\n showBackdrop,\n );\n\n useEffect(() => {\n if (open || !closeHandoffActive) return;\n const cb = handoffAfterCloseRef.current;\n if (!cb) return;\n const id = window.setTimeout(() => {\n cb();\n clearCloseHandoff();\n }, HANDOFF_AFTER_CLOSE_DELAY_MS);\n return () => clearTimeout(id);\n }, [open, closeHandoffActive, clearCloseHandoff, handoffAfterCloseRef]);\n\n useSheetScrollLock(open, setOpen, bounded, nestDepth);\n\n const panelOpenMs = useMemo(() => {\n return duration;\n }, [duration]);\n\n const closeSheet = useCallback(() => setOpen(false), [setOpen]);\n\n const touchRef = React.useRef({\n startX: 0,\n startY: 0,\n currentX: 0,\n currentY: 0,\n startTime: 0,\n isDragging: false,\n direction: null as \"x\" | \"y\" | null,\n });\n const panelRef = React.useRef<HTMLDivElement>(null);\n const rafId = React.useRef<number | null>(null);\n const swipeReboundCleanupRef = React.useRef<(() => void) | null>(null);\n /** So `panelSurfaceStyle` can match swipe-dismiss easing after `setOpen(false)` overwrites inline styles. */\n const panelCloseEasingViaSwipeRef = React.useRef(false);\n\n useLayoutEffect(() => {\n if (open) panelCloseEasingViaSwipeRef.current = false;\n }, [open]);\n\n const cancelSwipeRebound = useCallback(() => {\n swipeReboundCleanupRef.current?.();\n swipeReboundCleanupRef.current = null;\n }, []);\n\n const updateTransform = useCallback(() => {\n if (!panelRef.current || !touchRef.current.isDragging || !swipeActive)\n return;\n\n const { startX, startY, currentX, currentY, direction } = touchRef.current;\n const deltaX = currentX - startX;\n const deltaY = currentY - startY;\n\n let transform = \"\";\n if (side === \"right\" && direction === \"x\" && deltaX > 0)\n transform = `translateX(${deltaX}px)`;\n else if (side === \"left\" && direction === \"x\" && deltaX < 0)\n transform = `translateX(${deltaX}px)`;\n else if (side === \"bottom\" && direction === \"y\" && deltaY > 0)\n transform = `translateY(${deltaY}px)`;\n else if (side === \"top\" && direction === \"y\" && deltaY < 0)\n transform = `translateY(${deltaY}px)`;\n\n if (transform) {\n panelRef.current.style.transform = transform;\n panelRef.current.style.transition = \"none\";\n }\n\n rafId.current = requestAnimationFrame(updateTransform);\n }, [swipeActive, side]);\n\n const handleTouchStart = useCallback(\n (e: React.TouchEvent) => {\n if (!swipeActive || !e.touches[0]) return;\n cancelSwipeRebound();\n touchRef.current = {\n startX: e.touches[0].clientX,\n startY: e.touches[0].clientY,\n currentX: e.touches[0].clientX,\n currentY: e.touches[0].clientY,\n startTime: Date.now(),\n isDragging: true,\n direction: null,\n };\n if (rafId.current) cancelAnimationFrame(rafId.current);\n rafId.current = requestAnimationFrame(updateTransform);\n },\n [swipeActive, updateTransform, cancelSwipeRebound],\n );\n\n const handleTouchMove = useCallback(\n (e: React.TouchEvent) => {\n if (!touchRef.current.isDragging || !swipeActive || !e.touches[0]) return;\n\n touchRef.current.currentX = e.touches[0].clientX;\n touchRef.current.currentY = e.touches[0].clientY;\n\n const deltaX = Math.abs(\n touchRef.current.currentX - touchRef.current.startX,\n );\n const deltaY = Math.abs(\n touchRef.current.currentY - touchRef.current.startY,\n );\n\n if (!touchRef.current.direction && (deltaX > 5 || deltaY > 5)) {\n touchRef.current.direction = deltaX > deltaY ? \"x\" : \"y\";\n }\n },\n [swipeActive],\n );\n\n const handleTouchEnd = useCallback(\n (e: React.TouchEvent) => {\n if (!touchRef.current.isDragging || !swipeActive || !e.changedTouches[0])\n return;\n touchRef.current.isDragging = false;\n if (rafId.current) cancelAnimationFrame(rafId.current);\n\n const endX = e.changedTouches[0].clientX;\n const endY = e.changedTouches[0].clientY;\n const deltaX = endX - touchRef.current.startX;\n const deltaY = endY - touchRef.current.startY;\n const deltaTime = Date.now() - touchRef.current.startTime;\n\n const velocityX = Math.abs(deltaX / deltaTime);\n const velocityY = Math.abs(deltaY / deltaTime);\n\n const flickPx = 80;\n let shouldCloseGesture = false;\n\n if (side === \"right\") {\n shouldCloseGesture =\n deltaX > closeThreshold ||\n (deltaX > flickPx && velocityX > velocityThreshold);\n } else if (side === \"left\") {\n shouldCloseGesture =\n deltaX < -closeThreshold ||\n (deltaX < -flickPx && velocityX > velocityThreshold);\n } else if (side === \"bottom\") {\n shouldCloseGesture =\n deltaY > closeThreshold ||\n (deltaY > flickPx && velocityY > velocityThreshold);\n } else if (side === \"top\") {\n shouldCloseGesture =\n deltaY < -closeThreshold ||\n (deltaY < -flickPx && velocityY > velocityThreshold);\n }\n\n if (panelRef.current) {\n if (shouldCloseGesture) {\n cancelSwipeRebound();\n panelCloseEasingViaSwipeRef.current = true;\n const el = panelRef.current;\n el.style.transition = \"\";\n const swipeCloseMs = isMobileViewport\n ? PANEL_CLOSE_MS_MOBILE\n : PANEL_CLOSE_MS_DESKTOP;\n el.style.transition =\n swipeCloseMs > 0\n ? `transform ${swipeCloseMs}ms ${PANEL_SWIPE_CLOSE_EASING}`\n : \"none\";\n\n if (bounded && (side === \"left\" || side === \"right\")) {\n el.style.transform =\n side === \"right\" ? \"translateX(100%)\" : \"translateX(-100%)\";\n } else {\n const axis = side === \"left\" || side === \"right\" ? \"X\" : \"Y\";\n const dir = side === \"right\" || side === \"bottom\" ? \"\" : \"-\";\n const off =\n axis === \"X\" ? `${dir}${PANEL_OFF_X}` : `${dir}${PANEL_OFF_Y}`;\n el.style.transform = `translate${axis}(${off})`;\n }\n setOpen(false);\n } else {\n cancelSwipeRebound();\n const el = panelRef.current;\n if (panelOpenMs > 0) {\n el.style.transition = `transform ${panelOpenMs}ms ${PANEL_OPEN_EASING}`;\n el.style.transform = \"none\";\n let finished = false;\n let fallbackId: number | undefined;\n const finishRebound = () => {\n if (finished) return;\n finished = true;\n el.removeEventListener(\"transitionend\", onTransitionEnd);\n if (fallbackId !== undefined) window.clearTimeout(fallbackId);\n swipeReboundCleanupRef.current = null;\n if (panelRef.current) {\n panelRef.current.style.transition = \"\";\n panelRef.current.style.transform = \"\";\n }\n };\n const onTransitionEnd = (ev: TransitionEvent) => {\n if (ev.target !== el || ev.propertyName !== \"transform\") return;\n finishRebound();\n };\n fallbackId = window.setTimeout(finishRebound, panelOpenMs + 80);\n swipeReboundCleanupRef.current = finishRebound;\n el.addEventListener(\"transitionend\", onTransitionEnd);\n } else {\n el.style.transition = \"\";\n el.style.transform = \"\";\n }\n }\n }\n },\n [\n swipeActive,\n closeThreshold,\n velocityThreshold,\n side,\n isMobileViewport,\n bounded,\n setOpen,\n cancelSwipeRebound,\n panelOpenMs,\n ],\n );\n\n const panelTransform = useMemo(\n () =>\n dialogMotion\n ? isAnimating\n ? \"translateY(0)\"\n : `translateY(${DIALOG_MOTION_OFFSET_PX}px)`\n : panelSlideTransform(side, isAnimating, bounded),\n [dialogMotion, isAnimating, side, bounded],\n );\n\n const boundaryDepth = boundaryCtx?.depth ?? 0;\n const zIndex = bounded\n ? SHEET_Z_PANEL_CLOSE +\n SHEET_Z_PORTAL_STEP +\n boundaryDepth * SHEET_Z_PORTAL_STEP +\n (nestDepth - 1) * 2\n : SHEET_Z_PANEL_CLOSE -\n 5 * SHEET_Z_PORTAL_STEP +\n (nestDepth - 1) * SHEET_Z_PORTAL_STEP;\n const layerPosition = bounded ? \"absolute\" : \"fixed\";\n\n const backdropStyle = useMemo(() => {\n if (!showBackdrop) return { transition: \"none\" } as const;\n if (dialogMotion) {\n return {\n transitionProperty: \"opacity\",\n transitionDuration: `${open ? DIALOG_MOTION_MS : panelCloseMs}ms`,\n transitionTimingFunction: open\n ? DIALOG_ENTRY_MOTION_EASING\n : DIALOG_EXIT_MOTION_EASING,\n };\n }\n return {\n transitionProperty: \"opacity\",\n transitionDuration: open\n ? `${BACKDROP_OPEN_MS}ms`\n : `${BACKDROP_CLOSE_MS}ms`,\n transitionTimingFunction: open\n ? BACKDROP_OPEN_EASING\n : BACKDROP_CLOSE_EASING,\n };\n }, [open, showBackdrop, dialogMotion, panelCloseMs]);\n\n const rootLayerStyle = useMemo(() => ({ zIndex }), [zIndex]);\n\n const panelSurfaceStyle = useMemo(() => {\n const touchAction = !swipeActive\n ? undefined\n : side === \"left\" || side === \"right\"\n ? \"pan-y\"\n : \"pan-x\";\n\n if (dialogMotion) {\n return {\n ...props.style,\n transform: panelTransform,\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"transform, opacity\",\n transitionDuration: `${open ? DIALOG_MOTION_MS : panelCloseMs}ms`,\n transitionTimingFunction: open\n ? DIALOG_ENTRY_MOTION_EASING\n : DIALOG_EXIT_MOTION_EASING,\n touchAction,\n } satisfies React.CSSProperties;\n }\n\n return {\n ...props.style,\n transform: panelTransform,\n transitionProperty: \"transform\",\n transitionDuration: open ? `${panelOpenMs}ms` : `${panelCloseMs}ms`,\n transitionTimingFunction: open\n ? PANEL_OPEN_EASING\n : panelCloseEasingViaSwipeRef.current\n ? PANEL_SWIPE_CLOSE_EASING\n : PANEL_CLOSE_EASING,\n touchAction,\n } satisfies React.CSSProperties;\n }, [\n dialogMotion,\n props.style,\n panelTransform,\n isAnimating,\n open,\n panelOpenMs,\n panelCloseMs,\n side,\n swipeActive,\n ]);\n\n if (!shouldRender) return null;\n\n if (inBoundaryTree && boundaryHost == null) {\n return null;\n }\n\n const sheetTree = (\n <div\n className={cn(\n layerPosition,\n \"inset-0\",\n !bounded && \"flex items-center justify-center\",\n bounded && \"pointer-events-none\",\n )}\n style={rootLayerStyle}\n >\n <div\n className={cn(\n layerPosition,\n \"inset-0\",\n showBackdrop && \"bg-black/20 transition-opacity dark:bg-primary/4\",\n showBackdrop && (isAnimating ? \"opacity-100\" : \"opacity-0\"),\n !showBackdrop && \"bg-transparent\",\n bounded && \"pointer-events-auto\",\n )}\n style={backdropStyle}\n onClick={closeSheet}\n />\n\n <div\n {...props}\n ref={panelRef}\n role={role}\n className={cn(\n \"bg-background flex flex-col p-6 shadow-xl\",\n layerPosition,\n bounded\n ? cn(\n \"inset-0 z-10 h-full w-full max-w-none overflow-hidden pointer-events-auto\",\n )\n : cn(\"z-50\", SIDE_LAYOUT[side], sizeClassFor(side, size)),\n className,\n )}\n style={panelSurfaceStyle}\n onTouchStart={swipeActive ? handleTouchStart : undefined}\n onTouchMove={swipeActive ? handleTouchMove : undefined}\n onTouchEnd={swipeActive ? handleTouchEnd : undefined}\n >\n {children}\n\n {showClose && (\n <SheetCloseButton\n side={side}\n className={cn(\n \"absolute top-4 right-4\",\n side === \"right\" && \"md:top-5 md:right-auto md:-left-16\",\n side === \"left\" && \"md:top-5 md:-right-16 md:left-auto\",\n side === \"top\" &&\n \"md:top-auto md:right-auto md:-bottom-15 md:left-1/2 md:-translate-x-1/2\",\n side === \"bottom\" &&\n \"md:-top-15 md:right-auto md:bottom-auto md:left-1/2 md:-translate-x-1/2\",\n )}\n />\n )}\n </div>\n </div>\n );\n\n return createPortal(\n sheetTree,\n bounded && boundaryHost ? boundaryHost : document.body,\n );\n};\n\n// -----------------------------------------------------------------------------\n// Chrome\n// -----------------------------------------------------------------------------\n\nexport const SheetHeader: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { fixed?: boolean }\n> = ({ className, fixed, ...props }) => (\n <div\n className={cn(\n \"flex flex-col text-left\",\n fixed && \"bg-background border-primary/10 sticky top-0 z-10 border-b p-4\",\n className,\n )}\n {...props}\n />\n);\n\nexport const SheetFooter: React.FC<\n React.HTMLAttributes<HTMLDivElement> & { fixed?: boolean }\n> = ({ className, fixed, ...props }) => (\n <div\n className={cn(\n \"flex flex-row\",\n fixed &&\n \"bg-background border-primary/10 sticky bottom-0 z-10 border-t p-4\",\n className,\n )}\n {...props}\n />\n);\n\nexport const SheetTitle: React.FC<React.HTMLAttributes<HTMLHeadingElement>> = ({\n className,\n ...props\n}) => (\n <h3\n className={cn(\"text-primary text-lg font-semibold\", className)}\n {...props}\n />\n);\n\nexport const SheetDescription: React.FC<\n React.HTMLAttributes<HTMLParagraphElement>\n> = ({ className, ...props }) => (\n <p className={cn(\"text-muted-foreground text-sm\", className)} {...props} />\n);\n/**\n * Circular back control for nested sheets (arrow, same footprint as the default\n * sheet close icon). Wraps `SheetClose` with `asChild`.\n *\n * `onClick` (and any other button props) run in the same activation handler as\n * close: your handler runs first, then the sheet closes. Prefer `afterClose`\n * over a delayed `onClick` when opening another sheet so the exit uses the\n * handoff timing built into `Sheet`.\n */\nexport const SheetNestedClose: React.FC<\n React.ComponentPropsWithoutRef<\"button\"> & {\n children?: React.ReactNode;\n /**\n * Runs after the close animation when chaining another sheet. Uses a shorter\n * exit (see `SheetSetOpenOptions.afterClose`).\n */\n afterClose?: () => void;\n }\n> = ({ className, children, onClick, afterClose, ...props }) => (\n <SheetClose asChild afterClose={afterClose}>\n <button\n type=\"button\"\n className={cn(\n \"inline-flex size-12 shrink-0 cursor-pointer items-center justify-center rounded-full bg-background transition-all hover:bg-primary/5 active:scale-[0.96]\",\n className,\n )}\n onClick={onClick}\n {...props}\n >\n {children ?? (\n <>\n <ArrowLeft className=\"size-5.5\" aria-hidden />\n <span className=\"sr-only\">Back</span>\n </>\n )}\n </button>\n </SheetClose>\n);\n"]}
@@ -258,6 +258,85 @@ var PaginationInner = React2.forwardRef(
258
258
  );
259
259
  PaginationInner.displayName = "Pagination";
260
260
  var Pagination2 = React2.memo(PaginationInner);
261
+
262
+ // src/lib/typeahead.ts
263
+ var TYPEAHEAD_TIMEOUT_MS = 500;
264
+ function createTypeaheadState() {
265
+ return { search: "", timer: null };
266
+ }
267
+ function resetTypeahead(state) {
268
+ state.search = "";
269
+ if (state.timer) {
270
+ clearTimeout(state.timer);
271
+ state.timer = null;
272
+ }
273
+ }
274
+ function getItemLabel(item) {
275
+ const aria = item.getAttribute("aria-label")?.trim();
276
+ if (aria) return aria;
277
+ const marked = item.querySelector("[data-menu-label]");
278
+ if (marked?.textContent) return marked.textContent.replace(/\s+/g, " ").trim();
279
+ return (item.textContent ?? "").replace(/\s+/g, " ").trim();
280
+ }
281
+ function normalizeSearch(value) {
282
+ return value.trim().toLocaleLowerCase();
283
+ }
284
+ function isTypeaheadTarget(target) {
285
+ if (!(target instanceof HTMLElement)) return true;
286
+ if (target.isContentEditable) return false;
287
+ const tag = target.tagName;
288
+ return tag !== "INPUT" && tag !== "TEXTAREA" && tag !== "SELECT";
289
+ }
290
+ function handleTypeaheadKeyDown(event, items, state, options) {
291
+ if (options?.enabled === false || items.length === 0) return false;
292
+ if (event.ctrlKey || event.metaKey || event.altKey) return false;
293
+ if (event.key.length !== 1 || !isTypeaheadTarget(event.target)) return false;
294
+ event.preventDefault();
295
+ const timeoutMs = options?.timeoutMs ?? TYPEAHEAD_TIMEOUT_MS;
296
+ const char = event.key;
297
+ const prevSearch = state.search;
298
+ const repeatSingleChar = prevSearch.length === 1 && prevSearch === char;
299
+ if (repeatSingleChar) {
300
+ state.search = prevSearch;
301
+ } else {
302
+ state.search = prevSearch + char;
303
+ }
304
+ if (state.timer) clearTimeout(state.timer);
305
+ state.timer = setTimeout(() => {
306
+ state.search = "";
307
+ state.timer = null;
308
+ }, timeoutMs);
309
+ const labels = items.map((item) => normalizeSearch(getItemLabel(item)));
310
+ let needle = normalizeSearch(state.search);
311
+ let matches = items.map((item, index) => ({ item, index, label: labels[index] })).filter(({ label }) => label.startsWith(needle));
312
+ if (matches.length === 0 && state.search.length > 1) {
313
+ state.search = char;
314
+ needle = normalizeSearch(char);
315
+ matches = items.map((item, index) => ({ item, index, label: labels[index] })).filter(({ label }) => label.startsWith(needle));
316
+ }
317
+ if (matches.length === 0) return true;
318
+ const focused = document.activeElement;
319
+ const focusedIndex = focused ? items.indexOf(focused) : -1;
320
+ if (repeatSingleChar && focusedIndex !== -1) {
321
+ const currentMatch = matches.findIndex(
322
+ ({ index }) => index === focusedIndex
323
+ );
324
+ if (currentMatch !== -1) {
325
+ const next = matches[(currentMatch + 1) % matches.length];
326
+ next?.item.focus();
327
+ return true;
328
+ }
329
+ }
330
+ if (focusedIndex !== -1) {
331
+ const nextAfterFocus = matches.find(({ index }) => index > focusedIndex);
332
+ if (nextAfterFocus) {
333
+ nextAfterFocus.item.focus();
334
+ return true;
335
+ }
336
+ }
337
+ matches[0]?.item.focus();
338
+ return true;
339
+ }
261
340
  var PANEL_OPEN_EASING = "cubic-bezier(0,0.55,0.45,1)";
262
341
  var PANEL_CLOSE_EASING = "cubic-bezier(0.55,0,1,0.45)";
263
342
  var MOBILE_SHEET_MAX_PX = 1024;
@@ -348,9 +427,6 @@ function computeMenuPosition(trigger, menu, side, align, offset, pad) {
348
427
  left = flip;
349
428
  }
350
429
  }
351
- const layoutHeight = maxHeight ?? contentHeight;
352
- left = Math.max(sx + pad, Math.min(left, vw + sx - mr.width - pad));
353
- top = Math.max(sy + pad, Math.min(top, vh + sy - layoutHeight - pad));
354
430
  return { top, left, side: effectiveSide, maxHeight };
355
431
  }
356
432
  function useNarrowSheetViewport(breakpoint = 1025) {
@@ -605,7 +681,7 @@ function MobileSheetPortal({
605
681
  "div",
606
682
  {
607
683
  className: cn(
608
- "fixed inset-0 bg-black/40 dark:bg-black/60",
684
+ "fixed inset-0 bg-black/40 dark:bg-primary/4",
609
685
  isAnimating ? "opacity-100" : "opacity-0"
610
686
  ),
611
687
  style: {
@@ -687,6 +763,7 @@ var SelectContent = ({
687
763
  closeOnEscape = true,
688
764
  minWidth = "trigger",
689
765
  loop = true,
766
+ typeahead = true,
690
767
  mobileOptions,
691
768
  slideEntrance = true,
692
769
  slideEntranceOffsetPx: slidePxProp,
@@ -701,6 +778,7 @@ var SelectContent = ({
701
778
  const [pos, setPos] = useState({ top: -9999, left: -9999, side });
702
779
  const [triggerW, setTriggerW] = useState(0);
703
780
  const menuRef = useRef(null);
781
+ const typeaheadStateRef = useRef(createTypeaheadState());
704
782
  const sheet = useMemo(() => resolveSheetOpts(mobileOptions), [mobileOptions]);
705
783
  const slidePx = slidePxProp ?? SLIDE_DEFAULT_PX;
706
784
  const closeMs = narrow && sheet.sheet ? MOBILE_SHEET_MS : duration;
@@ -757,6 +835,9 @@ var SelectContent = ({
757
835
  useEffect(() => {
758
836
  if (anim && menuRef.current) menuRef.current.focus();
759
837
  }, [anim]);
838
+ useEffect(() => {
839
+ if (!open) resetTypeahead(typeaheadStateRef.current);
840
+ }, [open]);
760
841
  useEffect(() => {
761
842
  if (!open) return;
762
843
  const onDoc = (e) => {
@@ -808,11 +889,16 @@ var SelectContent = ({
808
889
  case "Tab":
809
890
  setOpen(false);
810
891
  break;
892
+ default:
893
+ handleTypeaheadKeyDown(e, items, typeaheadStateRef.current, {
894
+ enabled: typeahead
895
+ });
896
+ break;
811
897
  }
812
898
  };
813
899
  window.addEventListener("keydown", onKey);
814
900
  return () => window.removeEventListener("keydown", onKey);
815
- }, [open, closeOnEscape, loop, setOpen, triggerRef]);
901
+ }, [open, closeOnEscape, loop, typeahead, setOpen, triggerRef]);
816
902
  const lockBodyScroll = (open || show) && narrow && sheet.sheet;
817
903
  useEffect(() => {
818
904
  if (!lockBodyScroll) return;
@@ -1034,7 +1120,7 @@ var SelectItemRow = ({
1034
1120
  className
1035
1121
  ),
1036
1122
  children: [
1037
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children }),
1123
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", "data-menu-label": true, children }),
1038
1124
  shortcut ? /* @__PURE__ */ jsx(
1039
1125
  "span",
1040
1126
  {