@avenue-ticketing/ui 0.6.0 → 0.8.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/button.tsx","../../src/react/select.tsx"],"names":["React","jsx","SelectTrigger"],"mappings":"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","file":"select.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","import * as React from \"react\";\n\nimport { cn } from \"@/lib/utils\";\n\nconst sizeClass = {\n xs: \"h-8 min-h-8 gap-2 px-4 text-sm has-[>svg]:px-3 [&_svg:not([class*='size-'])]:size-3\",\n default:\n \"h-10 min-h-10 gap-2 px-5 text-sm has-[>svg]:px-4 [&_svg:not([class*='size-'])]:size-4\",\n lg: \"h-11 min-h-11 gap-2 px-6 text-base has-[>svg]:px-5 [&_svg:not([class*='size-'])]:size-5\",\n} as const;\n\n/** Square hit targets for `iconOnly` — same keys as `sizeClass` (`default` | `lg`). */\nconst iconOnlySizeClass = {\n xs: \"size-8 min-h-8 min-w-8 gap-0 p-0 [&_svg:not([class*='size-'])]:size-3\",\n default:\n \"size-10 min-h-10 min-w-10 gap-0 p-0 [&_svg:not([class*='size-'])]:size-4\",\n lg: \"size-11 min-h-11 min-w-11 gap-0 p-0 [&_svg:not([class*='size-'])]:size-5\",\n} as const;\n\nconst roundedClass = {\n full: \"rounded-full\",\n lg: \"rounded-lg\",\n md: \"rounded-md\",\n} as const;\n\nconst variantClass = {\n primary:\n \"bg-primary text-background border border-transparent hover:bg-primary/90 active:bg-primary/85\",\n secondary:\n \"bg-background text-primary border border-primary/10 hover:bg-primary/5\",\n destructive:\n \"bg-background text-red-500 border border-red-500/25 hover:bg-red-500/5\",\n success:\n \"bg-background text-green-500 border border-green-500/25 hover:bg-green-500/5\",\n} as const;\n\nexport type ButtonProps = React.ComponentProps<\"button\"> & {\n /**\n * Visual style: neutral (`secondary`, `primary`), or outline (`destructive`,\n * `success`) using Tailwind `red-500` / `green-500` text and matching borders on\n * `bg-background` (no solid fill).\n */\n variant?: keyof typeof variantClass;\n /**\n * Corner radius. Labeled buttons default to `full` (pill). `iconOnly` buttons\n * default to `md` (square corners) unless you pass `rounded` explicitly.\n */\n rounded?: keyof typeof roundedClass;\n /** Height and horizontal padding: `default` or `lg` only. */\n size?: keyof typeof sizeClass;\n /**\n * Square icon-only control; same `size` presets (`default` | `lg`). Pair with\n * `aria-label` (or `title`) when there is no visible text.\n */\n iconOnly?: boolean;\n};\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n type = \"button\",\n variant = \"secondary\",\n rounded: roundedProp,\n size = \"default\",\n iconOnly = false,\n disabled,\n ...props\n },\n ref,\n ) => {\n const rounded = roundedProp ?? (iconOnly ? \"md\" : \"full\");\n\n return (\n <button\n type={type}\n disabled={disabled}\n data-slot=\"button\"\n data-icon-only={iconOnly ? \"\" : undefined}\n className={cn(\n \"inline-flex shrink-0 cursor-pointer items-center justify-center whitespace-nowrap outline-none scale-100 transition-[color,background-color,box-shadow,transform] duration-150 ease-out active:scale-[0.98] active:duration-100 active:ease-linear [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:border-ring font-medium lg:tracking-wide focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n iconOnly ? iconOnlySizeClass[size] : sizeClass[size],\n roundedClass[rounded],\n variantClass[variant],\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\n\nimport { Button, type ButtonProps } from \"./button\";\nimport { cn } from \"@/lib/utils\";\n\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 MOBILE_SHEET_MAX_PX = 1024;\nconst MOBILE_SHEET_MS = 175;\nconst MOBILE_SHEET_IN = \"cubic-bezier(0.85, 0, 0.15, 1)\";\nconst MOBILE_SHEET_OUT = \"cubic-bezier(0.85, 0, 1, 0.15)\";\nconst SLIDE_DEFAULT_PX = 120;\nconst SHEET_MENU_TEXT = \"max-[1024px]:text-base\";\nconst SHEET_MENU_SHORTCUT = \"max-[1024px]:text-sm\";\n\ntype Side = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype Align = \"start\" | \"center\" | \"end\";\n\ntype Pos = { top: number; left: number; side: Side };\n\nconst CONTENT_ORIGIN: Record<Side, string> = {\n bottom: \"top center\",\n top: \"bottom center\",\n left: \"right center\",\n right: \"left center\",\n};\n\nconst CONTENT_HIDDEN: Record<Side, string> = {\n bottom: \"translateY(-4px) scale(0.97)\",\n top: \"translateY(4px) scale(0.97)\",\n left: \"translateX(4px) scale(0.97)\",\n right: \"translateX(-4px) scale(0.97)\",\n};\n\nfunction computeMenuPosition(\n trigger: HTMLElement,\n menu: HTMLElement,\n side: Side,\n align: Align,\n offset: number,\n pad: number,\n): Pos {\n const tr = trigger.getBoundingClientRect();\n const mr = menu.getBoundingClientRect();\n const vh = window.innerHeight;\n const vw = window.innerWidth;\n const sx = window.scrollX;\n const sy = window.scrollY;\n\n let top = 0;\n let left = 0;\n let effectiveSide = side;\n\n const place = (s: Side) => {\n switch (s) {\n case \"bottom\":\n top = tr.bottom + sy + offset;\n if (align === \"start\") left = tr.left + sx;\n else if (align === \"end\") left = tr.right + sx - mr.width;\n else left = tr.left + sx + tr.width / 2 - mr.width / 2;\n break;\n case \"top\":\n top = tr.top + sy - mr.height - offset;\n if (align === \"start\") left = tr.left + sx;\n else if (align === \"end\") left = tr.right + sx - mr.width;\n else left = tr.left + sx + tr.width / 2 - mr.width / 2;\n break;\n case \"right\":\n left = tr.right + sx + offset;\n if (align === \"start\") top = tr.top + sy;\n else if (align === \"end\") top = tr.bottom + sy - mr.height;\n else top = tr.top + sy + tr.height / 2 - mr.height / 2;\n break;\n case \"left\":\n left = tr.left + sx - mr.width - offset;\n if (align === \"start\") top = tr.top + sy;\n else if (align === \"end\") top = tr.bottom + sy - mr.height;\n else top = tr.top + sy + tr.height / 2 - mr.height / 2;\n break;\n }\n };\n\n place(side);\n\n if (side === \"bottom\" && top + mr.height > vh + sy - pad) {\n const flip = tr.top + sy - mr.height - offset;\n if (flip >= sy + pad) {\n effectiveSide = \"top\";\n top = flip;\n }\n } else if (side === \"top\" && top < sy + pad) {\n const flip = tr.bottom + sy + offset;\n if (flip + mr.height <= vh + sy - pad) {\n effectiveSide = \"bottom\";\n top = flip;\n }\n } else if (side === \"right\" && left + mr.width > vw + sx - pad) {\n const flip = tr.left + sx - mr.width - offset;\n if (flip >= sx + pad) {\n effectiveSide = \"left\";\n left = flip;\n }\n } else if (side === \"left\" && left < sx + pad) {\n const flip = tr.right + sx + offset;\n if (flip + mr.width <= vw + sx - pad) {\n effectiveSide = \"right\";\n left = flip;\n }\n }\n\n left = Math.max(sx + pad, Math.min(left, vw + sx - mr.width - pad));\n top = Math.max(sy + pad, Math.min(top, vh + sy - mr.height - pad));\n\n return { top, left, side: effectiveSide };\n}\n\nfunction useNarrowSheetViewport(breakpoint = 1025) {\n const [narrow, setNarrow] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);\n setNarrow(mq.matches);\n const h = (e: MediaQueryListEvent) => setNarrow(e.matches);\n mq.addEventListener(\"change\", h);\n return () => mq.removeEventListener(\"change\", h);\n }, [breakpoint]);\n return narrow;\n}\n\nfunction plainTextFromNode(node: React.ReactNode): string {\n if (node == null || node === false || node === true) return \"\";\n if (typeof node === \"string\" || typeof node === \"number\")\n return String(node);\n if (Array.isArray(node)) return node.map(plainTextFromNode).join(\"\");\n if (React.isValidElement(node)) {\n return plainTextFromNode(\n (node.props as { children?: React.ReactNode }).children,\n );\n }\n return \"\";\n}\n\n// ----- value context -----\n\ntype ItemRegistration = { value: string; label: React.ReactNode; disabled?: boolean };\n\ntype ValueCtx = {\n native: boolean;\n value: string;\n setValue: (v: string) => void;\n disabled: boolean;\n setLabel: (v: string, n: React.ReactNode) => void;\n clearLabel: (v: string) => void;\n registerNativeItem: (e: ItemRegistration) => void;\n unregisterNativeItem: (v: string) => void;\n labelFor: (v: string) => React.ReactNode | undefined;\n placeholder: string;\n};\n\nconst ValueContext = React.createContext<ValueCtx | null>(null);\n\nfunction useSelectValue() {\n const c = React.useContext(ValueContext);\n if (!c) throw new Error(\"Select subcomponents must be used within <Select>\");\n return c;\n}\n\n// ----- open context (custom mode only) -----\n\ntype OpenCtx = {\n open: boolean;\n setOpen: (v: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n};\n\nconst OpenContext = React.createContext<OpenCtx | null>(null);\n\nfunction useSelectOpen() {\n const c = React.useContext(OpenContext);\n if (!c)\n throw new Error(\n \"Select.Trigger, SelectContent, and SelectItem need <Select> without native\",\n );\n return c;\n}\n\n// ----- root -----\n\nexport type SelectProps = {\n children: React.ReactNode;\n className?: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (v: string) => void;\n /** native `<select>`; default `false` — custom trigger + list / sheet. */\n native?: boolean;\n disabled?: boolean;\n name?: string;\n id?: string;\n placeholder?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const Select = ({\n children,\n className,\n value: valueProp,\n defaultValue = \"\",\n onValueChange,\n native: nativeProp = false,\n disabled = false,\n name,\n id: idAttr,\n placeholder = \"Select\",\n open: openProp,\n onOpenChange,\n}: SelectProps) => {\n const isValueControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const value = isValueControlled ? (valueProp as string) : internalValue;\n\n const [labels, setLabels] = useState<Record<string, React.ReactNode>>({});\n const [nativeMeta, setNativeMeta] = useState<\n Record<string, { label: React.ReactNode; disabled?: boolean }>\n >({});\n const [nativeOrder, setNativeOrder] = useState<string[]>([]);\n\n const setValue = useCallback(\n (v: string) => {\n if (!isValueControlled) setInternalValue(v);\n onValueChange?.(v);\n },\n [isValueControlled, onValueChange],\n );\n\n const setLabel = useCallback((v: string, n: React.ReactNode) => {\n setLabels((p) => (p[v] === n ? p : { ...p, [v]: n }));\n }, []);\n\n const clearLabel = useCallback((v: string) => {\n setLabels((p) => {\n if (!(v in p)) return p;\n const n = { ...p };\n delete n[v];\n return n;\n });\n }, []);\n\n // labelFor keeps [] deps and reads labelsRef so selectitem effect deps stay stable;\n // valueCtx still lists `labels` so provider value updates and selectvalue re-renders\n const labelsRef = useRef(labels);\n labelsRef.current = labels;\n const labelFor = useCallback(\n (v: string) => labelsRef.current[v] as React.ReactNode | undefined,\n [],\n );\n\n const registerNativeItem = useCallback(\n (e: ItemRegistration) => {\n setLabel(e.value, e.label);\n setNativeMeta((p) => ({ ...p, [e.value]: { label: e.label, disabled: e.disabled } }));\n setNativeOrder((o) => (o.includes(e.value) ? o : [...o, e.value]));\n },\n [setLabel],\n );\n\n const unregisterNativeItem = useCallback(\n (v: string) => {\n setNativeMeta((p) => {\n if (!(v in p)) return p;\n const n = { ...p };\n delete n[v];\n return n;\n });\n setNativeOrder((o) => o.filter((x) => x !== v));\n clearLabel(v);\n },\n [clearLabel],\n );\n\n const valueCtx: ValueCtx = useMemo(\n () => ({\n native: nativeProp,\n value,\n setValue,\n disabled,\n setLabel,\n clearLabel,\n registerNativeItem,\n unregisterNativeItem,\n labelFor,\n placeholder,\n }),\n [\n nativeProp,\n value,\n setValue,\n disabled,\n labels,\n setLabel,\n clearLabel,\n registerNativeItem,\n unregisterNativeItem,\n labelFor,\n placeholder,\n ],\n );\n\n if (nativeProp) {\n return (\n <ValueContext.Provider value={valueCtx}>\n <div\n className={cn(\n \"group relative inline-block w-max min-w-0 max-w-full\",\n className,\n )}\n >\n <select\n id={idAttr}\n name={name}\n className={cn(\n \"peer\",\n \"border-primary/10 bg-background text-primary w-full min-w-0 max-w-full cursor-pointer appearance-none border pr-9 pl-3 outline-none\",\n \"h-10 min-h-10 text-sm font-medium\",\n \"rounded-full transition-[color,background-color,box-shadow,transform] duration-150\",\n \"focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"active:scale-[0.99]\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n )}\n value={value}\n disabled={disabled}\n onChange={(ev) => setValue(ev.target.value)}\n >\n <option value=\"\" disabled>\n {placeholder}\n </option>\n {nativeOrder.map((key) => {\n const m = nativeMeta[key];\n if (!m) return null;\n return (\n <option key={key} value={key} disabled={m.disabled}>\n {plainTextFromNode(m.label)}\n </option>\n );\n })}\n </select>\n <ChevronDown\n aria-hidden\n className=\"text-primary/50 pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 peer-disabled:opacity-50\"\n />\n </div>\n {children}\n </ValueContext.Provider>\n );\n }\n\n return (\n <ValueContext.Provider value={valueCtx}>\n <SelectOpenBridge open={openProp} onOpenChange={onOpenChange}>\n <div className={cn(\"inline-block min-w-0 max-w-full\", className)}>{children}</div>\n </SelectOpenBridge>\n </ValueContext.Provider>\n );\n};\n\nfunction SelectOpenBridge({\n children,\n open: controlled,\n onOpenChange,\n}: {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (o: boolean) => void;\n}) {\n const [inner, setInner] = useState(false);\n const isControlled = controlled !== undefined;\n const open = isControlled ? (controlled as boolean) : inner;\n const setOpen = useCallback(\n (o: boolean) => {\n if (!isControlled) setInner(o);\n onOpenChange?.(o);\n },\n [isControlled, onOpenChange],\n );\n const triggerRef = useRef<HTMLElement | null>(null);\n const ctx = useMemo(\n () => ({ open, setOpen, triggerRef }) satisfies OpenCtx,\n [open, setOpen],\n );\n return <OpenContext.Provider value={ctx}>{children}</OpenContext.Provider>;\n}\n\n// ----- mobile sheet -----\n\nconst SheetClose = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, type = \"button\", ...p }, ref) => (\n <button\n ref={ref}\n type={type}\n className={cn(\n \"z-100 flex size-12 shrink-0 cursor-pointer items-center justify-center rounded-full transition-all hover:bg-secondary-background active:scale-[0.96]\",\n className,\n )}\n {...p}\n >\n <X className=\"size-5.5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n));\nSheetClose.displayName = \"SelectSheetClose\";\n\nexport type SelectMobileSheetOptions = {\n sheet?: boolean;\n title?: string;\n className?: string;\n contentClassName?: string;\n};\n\nfunction resolveSheetOpts(o?: SelectMobileSheetOptions) {\n return {\n sheet: o?.sheet ?? true,\n title: o?.title,\n panelClass: o?.className,\n bodyClass: o?.contentClassName,\n };\n}\n\ntype SheetPortalProps = React.HTMLAttributes<HTMLDivElement> & {\n open: boolean;\n isAnimating: boolean;\n slideEntrance: boolean;\n slideOffsetPx: number;\n sheetTitle?: string;\n sheetPanelClassName?: string;\n contentClassName?: string;\n onRequestClose: () => void;\n menuRef: React.RefObject<HTMLDivElement | null>;\n};\n\nfunction MobileSheetPortal({\n open,\n isAnimating,\n slideEntrance,\n slideOffsetPx,\n sheetTitle,\n sheetPanelClassName,\n contentClassName,\n onRequestClose,\n menuRef,\n children,\n className,\n style,\n ...rest\n}: SheetPortalProps) {\n const ease = open ? MOBILE_SHEET_IN : MOBILE_SHEET_OUT;\n const hiddenY = slideEntrance ? `translateY(${slideOffsetPx}px)` : \"translateY(100%)\";\n return createPortal(\n <div className=\"fixed inset-0 z-50 flex items-end justify-center p-0\">\n <div\n className={cn(\n \"fixed inset-0 bg-black/40 dark:bg-black/60\",\n isAnimating ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{\n transition: `opacity ${MOBILE_SHEET_MS}ms ${ease}`,\n }}\n onClick={onRequestClose}\n />\n <div\n {...rest}\n ref={menuRef}\n className={cn(\n \"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\",\n \"rounded-t-2xl rounded-b-none border-x-0 border-b-0 border-t\",\n sheetPanelClassName,\n className,\n )}\n style={{\n transform: isAnimating ? \"translateY(0)\" : hiddenY,\n opacity: isAnimating ? 1 : 0,\n transition: `transform ${MOBILE_SHEET_MS}ms ${ease}, opacity ${MOBILE_SHEET_MS}ms ${ease}`,\n ...style,\n }}\n >\n <div\n className={cn(\n \"flex w-full shrink-0 items-center py-2 pl-4 pr-2\",\n sheetTitle ? \"justify-between gap-3\" : \"justify-end\",\n )}\n >\n {sheetTitle ? (\n <p className=\"text-foreground min-w-0 flex-1 truncate text-base font-semibold\">\n {sheetTitle}\n </p>\n ) : null}\n <SheetClose\n onClick={(e) => {\n e.stopPropagation();\n onRequestClose();\n }}\n />\n </div>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto pb-[calc(5rem+env(safe-area-inset-bottom,0px))]\",\n contentClassName,\n )}\n >\n {children}\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n\n// ----- list helpers -----\n\nfunction listFocusableItems(host: HTMLElement): HTMLElement[] {\n return Array.from(\n host.querySelectorAll<HTMLElement>(\n '[data-select-item=\"true\"]:not([aria-disabled=\"true\"])',\n ),\n );\n}\n\n// ----- content -----\n\nexport type SelectContentProps = React.HTMLAttributes<HTMLDivElement> & {\n side?: Side;\n align?: Align;\n offset?: number;\n duration?: number;\n viewportPadding?: number;\n closeOnEscape?: boolean;\n minWidth?: number | \"trigger\";\n loop?: boolean;\n mobileOptions?: SelectMobileSheetOptions;\n slideEntrance?: boolean;\n slideEntranceOffsetPx?: number;\n};\n\nexport const SelectContent: React.FC<SelectContentProps> = ({\n children,\n side = \"bottom\",\n align = \"start\",\n offset = 10,\n duration = 80,\n viewportPadding = 8,\n closeOnEscape = true,\n minWidth = \"trigger\",\n loop = true,\n mobileOptions,\n slideEntrance = true,\n slideEntranceOffsetPx: slidePxProp,\n className,\n style,\n ...rest\n}) => {\n const narrow = useNarrowSheetViewport(MOBILE_SHEET_MAX_PX + 1);\n const { open, setOpen, triggerRef } = useSelectOpen();\n const [show, setShow] = useState(false);\n const [anim, setAnim] = useState(false);\n const [pos, setPos] = useState<Pos>({ top: -9999, left: -9999, side });\n const [triggerW, setTriggerW] = useState(0);\n const menuRef = useRef<HTMLDivElement>(null);\n const sheet = useMemo(() => resolveSheetOpts(mobileOptions), [mobileOptions]);\n const slidePx = slidePxProp ?? SLIDE_DEFAULT_PX;\n const closeMs = narrow && sheet.sheet ? MOBILE_SHEET_MS : duration;\n const close = useCallback(() => setOpen(false), [setOpen]);\n const [portalReady, setPortalReady] = useState(false);\n useLayoutEffect(() => {\n setPortalReady(true);\n }, []);\n\n useEffect(() => {\n if (open) {\n setShow(true);\n } else {\n setAnim(false);\n const t = setTimeout(() => setShow(false), closeMs);\n return () => clearTimeout(t);\n }\n }, [open, closeMs]);\n\n useEffect(() => {\n if (!show || !open) return;\n let r2 = 0;\n const r1 = requestAnimationFrame(() => {\n r2 = requestAnimationFrame(() => setAnim(true));\n });\n return () => {\n cancelAnimationFrame(r1);\n if (r2) cancelAnimationFrame(r2);\n };\n }, [show, open]);\n\n useLayoutEffect(() => {\n if (!triggerRef.current || !menuRef.current) return;\n if (!open && !show) return;\n const run = () => {\n if (!triggerRef.current || !menuRef.current) return;\n setTriggerW(triggerRef.current.getBoundingClientRect().width);\n setPos(\n computeMenuPosition(\n triggerRef.current,\n menuRef.current,\n side,\n align,\n offset,\n viewportPadding,\n ),\n );\n };\n run();\n window.addEventListener(\"resize\", run);\n window.addEventListener(\"scroll\", run, true);\n return () => {\n window.removeEventListener(\"resize\", run);\n window.removeEventListener(\"scroll\", run, true);\n };\n }, [open, show, side, align, offset, viewportPadding, triggerRef]);\n\n useEffect(() => {\n if (anim && menuRef.current) menuRef.current.focus();\n }, [anim]);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n const t = e.target as Node;\n if (menuRef.current?.contains(t) || triggerRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open, setOpen, triggerRef]);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n const m = menuRef.current;\n if (!m) return;\n const active = document.activeElement as HTMLElement | null;\n if (active && !m.contains(active) && !triggerRef.current?.contains(active))\n return;\n const items = listFocusableItems(m);\n const i = items.indexOf(active!);\n switch (e.key) {\n case \"Escape\":\n if (closeOnEscape) {\n e.preventDefault();\n setOpen(false);\n triggerRef.current?.focus();\n }\n break;\n case \"ArrowDown\":\n e.preventDefault();\n if (!items.length) break;\n if (i === -1 || (i === items.length - 1 && loop)) items[0]?.focus();\n else if (i < items.length - 1) items[i + 1]?.focus();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!items.length) break;\n if (i <= 0 && loop) items[items.length - 1]?.focus();\n else if (i > 0) items[i - 1]?.focus();\n break;\n case \"Home\":\n e.preventDefault();\n items[0]?.focus();\n break;\n case \"End\":\n e.preventDefault();\n items[items.length - 1]?.focus();\n break;\n case \"Tab\":\n setOpen(false);\n break;\n default:\n break;\n }\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [open, closeOnEscape, loop, setOpen, triggerRef]);\n\n const lockBodyScroll = (open || show) && narrow && sheet.sheet;\n useEffect(() => {\n if (!lockBodyScroll) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [lockBodyScroll]);\n\n if (narrow && sheet.sheet) {\n if (!open && !show) {\n const registrationSlot = (\n <div className=\"sr-only pointer-events-none\" aria-hidden>\n {children}\n </div>\n );\n if (!portalReady) return registrationSlot;\n return createPortal(registrationSlot, document.body);\n }\n return (\n <MobileSheetPortal\n {...rest}\n open={open}\n isAnimating={anim}\n slideEntrance={slideEntrance}\n slideOffsetPx={slidePx}\n sheetTitle={sheet.title}\n sheetPanelClassName={sheet.panelClass}\n contentClassName={sheet.bodyClass}\n onRequestClose={close}\n menuRef={menuRef}\n className={className}\n style={style}\n role=\"listbox\"\n tabIndex={-1}\n aria-label={sheet.title}\n >\n {children}\n </MobileSheetPortal>\n );\n }\n\n const resolvedMin =\n minWidth === \"trigger\" ? (triggerW > 0 ? triggerW : undefined) : minWidth;\n\n const listbox = (\n <div\n {...rest}\n ref={menuRef}\n role=\"listbox\"\n tabIndex={-1}\n aria-hidden={!open}\n className={cn(\n \"bg-background border-primary/10 absolute z-50 overflow-hidden rounded-xl border py-1.5 shadow-xl outline-none\",\n className,\n )}\n style={{\n position: \"absolute\",\n top: pos.top,\n left: pos.left,\n ...(typeof resolvedMin === \"number\" ? { minWidth: resolvedMin } : {}),\n transformOrigin: CONTENT_ORIGIN[pos.side],\n transform: anim ? \"none\" : CONTENT_HIDDEN[pos.side],\n opacity: anim ? 1 : 0,\n pointerEvents: !open ? \"none\" : \"auto\",\n transitionProperty: \"opacity, transform\",\n transitionDuration: `${duration}ms`,\n transitionTimingFunction: anim ? PANEL_OPEN_EASING : PANEL_CLOSE_EASING,\n ...style,\n }}\n >\n {children}\n </div>\n );\n\n if (!portalReady) {\n return listbox;\n }\n return createPortal(listbox, document.body);\n};\n\n// ----- trigger + chevron -----\n\nexport type SelectTriggerProps = Omit<ButtonProps, \"type\"> & { asChild?: boolean };\n\nfunction mergeRef(\n store: React.RefObject<HTMLElement | null>,\n node: HTMLElement | null,\n fromChild?: React.Ref<HTMLElement> | null,\n) {\n store.current = node;\n if (typeof fromChild === \"function\") fromChild(node);\n else if (fromChild && typeof fromChild === \"object\")\n (fromChild as React.MutableRefObject<HTMLElement | null>).current = node;\n}\n\nexport const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n function SelectTrigger(\n { children, asChild, className, onClick, disabled, ...buttonProps },\n ref,\n ) {\n const { open, setOpen, triggerRef } = useSelectOpen();\n const triggerVariant =\n (buttonProps as { variant?: ButtonProps[\"variant\"] }).variant ?? \"secondary\";\n\n const onPress = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n (onClick as React.MouseEventHandler<HTMLButtonElement> | undefined)?.(\n e as React.MouseEvent<HTMLButtonElement>,\n );\n e.stopPropagation();\n if (disabled) return;\n setOpen(!open);\n },\n [onClick, disabled, open, setOpen],\n );\n\n const setBtnRef = useCallback(\n (el: HTMLButtonElement | null) => {\n mergeRef(triggerRef, el, null);\n if (typeof ref === \"function\") ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = el;\n },\n [ref, triggerRef],\n );\n\n if (asChild && React.isValidElement(children)) {\n const ch = children as React.ReactElement<{\n onClick?: React.MouseEventHandler<HTMLElement>;\n className?: string;\n }>;\n const childRef = (ch as { ref?: React.Ref<HTMLElement> | null }).ref;\n return React.cloneElement(ch, {\n ref: (n: HTMLElement | null) => mergeRef(triggerRef, n, childRef),\n className: cn(\"group w-fit max-w-full min-w-0 justify-start gap-2\", ch.props.className),\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n ch.props.onClick?.(e);\n onPress(e);\n },\n \"aria-expanded\": open,\n \"aria-haspopup\": \"listbox\",\n \"data-state\": open ? \"open\" : \"closed\",\n \"data-variant\": triggerVariant,\n ...((disabled !== undefined\n ? { \"aria-disabled\": disabled }\n : {}) as Record<string, unknown>),\n } as Partial<typeof ch.props>);\n }\n\n return (\n <Button\n ref={setBtnRef}\n type=\"button\"\n {...buttonProps}\n disabled={disabled}\n className={cn(\"group w-fit max-w-full min-w-0 justify-start gap-2\", className)}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n data-state={open ? \"open\" : \"closed\"}\n data-variant={triggerVariant}\n onClick={onPress as React.MouseEventHandler<HTMLButtonElement>}\n >\n {children}\n </Button>\n );\n },\n);\nSelectTrigger.displayName = \"SelectTrigger\";\n\nexport const SelectChevron: React.FC<React.ComponentProps<typeof ChevronDown>> = ({\n className,\n ...props\n}) => {\n const { open } = useSelectOpen();\n return (\n <ChevronDown\n aria-hidden\n className={cn(\"size-4 shrink-0\", open && \"rotate-180\", className)}\n {...props}\n />\n );\n};\n\n// ----- value display -----\n\nexport const SelectValue: React.FC<{\n placeholder?: string;\n className?: string;\n}> = ({ placeholder, className }) => {\n const c = useSelectValue();\n if (c.native) return null;\n const ph = placeholder ?? c.placeholder;\n const text = c.value ? c.labelFor(c.value) : undefined;\n const isEmpty = !c.value;\n // trigger sets `data-variant` so we can override the button’s full-strength `text-*`\n return (\n <span\n data-slot=\"select-value\"\n className={cn(\n \"min-w-0 flex-1 truncate text-left\",\n isEmpty &&\n cn(\n \"group-data-[variant=primary]:!text-background/50\",\n \"group-data-[variant=secondary]:!text-primary/50\",\n \"group-data-[variant=destructive]:!text-red-500/50\",\n \"group-data-[variant=success]:!text-green-500/50\",\n ),\n className,\n )}\n >\n {text != null ? text : ph}\n </span>\n );\n};\n\n// ----- items -----\n\nexport type SelectItemProps = React.HTMLAttributes<HTMLDivElement> & {\n value: string;\n children: React.ReactNode;\n disabled?: boolean;\n shortcut?: string;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n};\n\nconst SelectItemRow: React.FC<SelectItemProps> = ({\n value: v,\n children,\n disabled,\n shortcut,\n className,\n onClick: userClick,\n ...divProps\n}) => {\n const c = useSelectValue();\n const { setOpen } = useSelectOpen();\n const selected = c.value === v;\n\n const click: React.MouseEventHandler<HTMLDivElement> = (e) => {\n if (disabled) return;\n c.setValue(v);\n userClick?.(e);\n setOpen(false);\n };\n\n const keyDown: React.KeyboardEventHandler<HTMLDivElement> = (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n click(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n return (\n <div\n {...divProps}\n data-select-item=\"true\"\n role=\"option\"\n aria-selected={selected}\n tabIndex={disabled ? undefined : -1}\n aria-disabled={disabled}\n onClick={click}\n onKeyDown={keyDown}\n className={cn(\n \"relative mx-1.5 flex items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors duration-0 outline-none select-none\",\n SHEET_MENU_TEXT,\n !disabled &&\n \"text-foreground hover:bg-primary/8 focus-visible:bg-primary/8 dark:hover:bg-primary/4 dark:focus-visible:bg-primary/4\",\n disabled &&\n \"lg:cursor-not-allowed text-foreground/45 dark:text-foreground/50\",\n !disabled && \"cursor-pointer\",\n className,\n )}\n >\n <span className=\"min-w-0 flex-1\">{children}</span>\n {shortcut ? (\n <span\n className={cn(\n \"shrink-0 text-xs tracking-widest opacity-40\",\n SHEET_MENU_SHORTCUT,\n )}\n >\n {shortcut}\n </span>\n ) : null}\n <span className=\"flex size-4 shrink-0 items-center justify-center\" aria-hidden>\n {selected ? <Check className=\"size-3.5\" strokeWidth={2.5} /> : null}\n </span>\n </div>\n );\n};\n\nexport const SelectItem: React.FC<SelectItemProps> = ({\n value: v,\n children,\n disabled,\n ...rest\n}) => {\n const {\n native,\n setLabel,\n clearLabel,\n registerNativeItem,\n unregisterNativeItem,\n } = useSelectValue();\n useLayoutEffect(() => {\n setLabel(v, children);\n if (native) registerNativeItem({ value: v, label: children, disabled });\n return () => {\n clearLabel(v);\n if (native) unregisterNativeItem(v);\n };\n }, [\n v,\n children,\n disabled,\n native,\n setLabel,\n clearLabel,\n registerNativeItem,\n unregisterNativeItem,\n ]);\n\n if (native) return null;\n return (\n <SelectItemRow value={v} disabled={disabled} {...rest}>\n {children}\n </SelectItemRow>\n );\n};\nSelectItem.displayName = \"SelectItem\";\n"]}
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/react/button.tsx","../../src/react/select.tsx"],"names":["React","jsx","SelectTrigger"],"mappings":"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","file":"select.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","import * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\n\nconst sizeClass = {\n xs: \"h-8 min-h-8 gap-2 px-4 text-sm has-[>svg]:px-3 [&_svg:not([class*='size-'])]:size-3\",\n default:\n \"h-10 min-h-10 gap-2 px-5 text-sm has-[>svg]:px-4 [&_svg:not([class*='size-'])]:size-4\",\n lg: \"h-11 min-h-11 gap-2 px-6 text-base has-[>svg]:px-5 [&_svg:not([class*='size-'])]:size-5\",\n} as const;\n\n/** Square hit targets for `iconOnly` — same keys as `sizeClass` (`default` | `lg`). */\nconst iconOnlySizeClass = {\n xs: \"size-8 min-h-8 min-w-8 gap-0 p-0 [&_svg:not([class*='size-'])]:size-3\",\n default:\n \"size-10 min-h-10 min-w-10 gap-0 p-0 [&_svg:not([class*='size-'])]:size-4\",\n lg: \"size-11 min-h-11 min-w-11 gap-0 p-0 [&_svg:not([class*='size-'])]:size-5\",\n} as const;\n\nconst roundedClass = {\n full: \"rounded-full\",\n lg: \"rounded-lg\",\n md: \"rounded-md\",\n} as const;\n\nconst variantClass = {\n primary:\n \"bg-primary text-background border border-transparent hover:bg-primary/90 active:bg-primary/85\",\n secondary:\n \"bg-background text-primary border border-primary/10 hover:bg-primary/5\",\n destructive:\n \"bg-background text-red-500 border border-red-500/25 hover:bg-red-500/5\",\n success:\n \"bg-background text-green-500 border border-green-500/25 hover:bg-green-500/5\",\n} as const;\n\nexport type ButtonProps = React.ComponentProps<\"button\"> & {\n /**\n * Visual style: neutral (`secondary`, `primary`), or outline (`destructive`,\n * `success`) using Tailwind `red-500` / `green-500` text and matching borders on\n * `bg-background` (no solid fill).\n */\n variant?: keyof typeof variantClass;\n /**\n * Corner radius. Labeled buttons default to `full` (pill). `iconOnly` buttons\n * default to `md` (square corners) unless you pass `rounded` explicitly.\n */\n rounded?: keyof typeof roundedClass;\n /** Height and horizontal padding: `default` or `lg` only. */\n size?: keyof typeof sizeClass;\n /**\n * Square icon-only control; same `size` presets (`default` | `lg`). Pair with\n * `aria-label` (or `title`) when there is no visible text.\n */\n iconOnly?: boolean;\n};\n\nconst Button = React.forwardRef<HTMLButtonElement, ButtonProps>(\n (\n {\n className,\n type = \"button\",\n variant = \"secondary\",\n rounded: roundedProp,\n size = \"default\",\n iconOnly = false,\n disabled,\n ...props\n },\n ref,\n ) => {\n const rounded = roundedProp ?? (iconOnly ? \"md\" : \"full\");\n\n return (\n <button\n type={type}\n disabled={disabled}\n data-slot=\"button\"\n data-icon-only={iconOnly ? \"\" : undefined}\n className={cn(\n \"inline-flex shrink-0 cursor-pointer items-center justify-center whitespace-nowrap outline-none scale-100 transition-[color,background-color,box-shadow,transform] duration-150 ease-out active:scale-[0.98] active:duration-100 active:ease-linear [&_svg]:pointer-events-none [&_svg]:shrink-0\",\n \"disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-50\",\n \"focus-visible:border-ring font-medium lg:tracking-wide focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n iconOnly ? iconOnlySizeClass[size] : sizeClass[size],\n roundedClass[rounded],\n variantClass[variant],\n className,\n )}\n ref={ref}\n {...props}\n />\n );\n },\n);\nButton.displayName = \"Button\";\n\nexport { Button };\n","\"use client\";\n\nimport * as React from \"react\";\nimport { createPortal } from \"react-dom\";\nimport {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { Check, ChevronDown, X } from \"lucide-react\";\n\nimport { Button, type ButtonProps } from \"./button\";\nimport { cn } from \"../lib/utils\";\n\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 MOBILE_SHEET_MAX_PX = 1024;\nconst MOBILE_SHEET_MS = 175;\nconst MOBILE_SHEET_IN = \"cubic-bezier(0.85, 0, 0.15, 1)\";\nconst MOBILE_SHEET_OUT = \"cubic-bezier(0.85, 0, 1, 0.15)\";\nconst SLIDE_DEFAULT_PX = 120;\nconst SHEET_MENU_TEXT = \"max-[1024px]:text-base\";\nconst SHEET_MENU_SHORTCUT = \"max-[1024px]:text-sm\";\n/** Shrink on the preferred side until space drops below ~2 rows; then allow flip. */\nconst SELECT_FLIP_MIN_SPACE_PX = 100;\n\ntype Side = \"top\" | \"bottom\" | \"left\" | \"right\";\ntype Align = \"start\" | \"center\" | \"end\";\n\ntype Pos = {\n top: number;\n left: number;\n side: Side;\n maxHeight?: number;\n};\n\nconst CONTENT_ORIGIN: Record<Side, string> = {\n bottom: \"top center\",\n top: \"bottom center\",\n left: \"right center\",\n right: \"left center\",\n};\n\nconst CONTENT_HIDDEN: Record<Side, string> = {\n bottom: \"translateY(-4px) scale(0.97)\",\n top: \"translateY(4px) scale(0.97)\",\n left: \"translateX(4px) scale(0.97)\",\n right: \"translateX(-4px) scale(0.97)\",\n};\n\nfunction computeMenuPosition(\n trigger: HTMLElement,\n menu: HTMLElement,\n side: Side,\n align: Align,\n offset: number,\n pad: number,\n): Pos {\n const tr = trigger.getBoundingClientRect();\n const mr = menu.getBoundingClientRect();\n const contentHeight = menu.scrollHeight;\n const vh = window.innerHeight;\n const vw = window.innerWidth;\n const sx = window.scrollX;\n const sy = window.scrollY;\n\n let top = 0;\n let left = 0;\n let effectiveSide = side;\n let maxHeight: number | undefined;\n\n const placeVertical = (s: Side, height: number) => {\n if (s === \"bottom\") top = tr.bottom + sy + offset;\n else top = tr.top + sy - height - offset;\n if (align === \"start\") left = tr.left + sx;\n else if (align === \"end\") left = tr.right + sx - mr.width;\n else left = tr.left + sx + tr.width / 2 - mr.width / 2;\n };\n\n const place = (s: Side, height = contentHeight) => {\n switch (s) {\n case \"bottom\":\n case \"top\":\n placeVertical(s, height);\n break;\n case \"right\":\n left = tr.right + sx + offset;\n if (align === \"start\") top = tr.top + sy;\n else if (align === \"end\") top = tr.bottom + sy - mr.height;\n else top = tr.top + sy + tr.height / 2 - mr.height / 2;\n break;\n case \"left\":\n left = tr.left + sx - mr.width - offset;\n if (align === \"start\") top = tr.top + sy;\n else if (align === \"end\") top = tr.bottom + sy - mr.height;\n else top = tr.top + sy + tr.height / 2 - mr.height / 2;\n break;\n }\n };\n\n place(side);\n\n const spaceBelow = Math.max(0, vh - pad - tr.bottom - offset);\n const spaceAbove = Math.max(0, tr.top - offset - pad);\n\n if (side === \"bottom\" || side === \"top\") {\n const primarySpace = side === \"bottom\" ? spaceBelow : spaceAbove;\n const alternateSpace = side === \"bottom\" ? spaceAbove : spaceBelow;\n const alternateSide: Side = side === \"bottom\" ? \"top\" : \"bottom\";\n\n if (contentHeight > primarySpace) {\n maxHeight = Math.min(contentHeight, primarySpace);\n place(side, maxHeight);\n }\n\n if (\n contentHeight > primarySpace &&\n primarySpace < SELECT_FLIP_MIN_SPACE_PX &&\n alternateSpace > primarySpace\n ) {\n effectiveSide = alternateSide;\n maxHeight = Math.min(contentHeight, alternateSpace);\n place(alternateSide, maxHeight);\n }\n } else if (side === \"right\" && left + mr.width > vw + sx - pad) {\n const flip = tr.left + sx - mr.width - offset;\n if (flip >= sx + pad) {\n effectiveSide = \"left\";\n left = flip;\n }\n } else if (side === \"left\" && left < sx + pad) {\n const flip = tr.right + sx + offset;\n if (flip + mr.width <= vw + sx - pad) {\n effectiveSide = \"right\";\n left = flip;\n }\n }\n\n const layoutHeight = maxHeight ?? contentHeight;\n left = Math.max(sx + pad, Math.min(left, vw + sx - mr.width - pad));\n top = Math.max(sy + pad, Math.min(top, vh + sy - layoutHeight - pad));\n\n return { top, left, side: effectiveSide, maxHeight };\n}\n\nfunction useNarrowSheetViewport(breakpoint = 1025) {\n const [narrow, setNarrow] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);\n setNarrow(mq.matches);\n const h = (e: MediaQueryListEvent) => setNarrow(e.matches);\n mq.addEventListener(\"change\", h);\n return () => mq.removeEventListener(\"change\", h);\n }, [breakpoint]);\n return narrow;\n}\n\nfunction plainTextFromNode(node: React.ReactNode): string {\n if (node == null || node === false || node === true) return \"\";\n if (typeof node === \"string\" || typeof node === \"number\")\n return String(node);\n if (Array.isArray(node)) return node.map(plainTextFromNode).join(\"\");\n if (React.isValidElement(node)) {\n return plainTextFromNode(\n (node.props as { children?: React.ReactNode }).children,\n );\n }\n return \"\";\n}\n\n// ----- value context -----\n\ntype ItemRegistration = { value: string; label: React.ReactNode; disabled?: boolean };\n\ntype ValueCtx = {\n native: boolean;\n value: string;\n setValue: (v: string) => void;\n disabled: boolean;\n setLabel: (v: string, n: React.ReactNode) => void;\n clearLabel: (v: string) => void;\n registerNativeItem: (e: ItemRegistration) => void;\n unregisterNativeItem: (v: string) => void;\n labelFor: (v: string) => React.ReactNode | undefined;\n placeholder: string;\n};\n\nconst ValueContext = React.createContext<ValueCtx | null>(null);\n\nfunction useSelectValue() {\n const c = React.useContext(ValueContext);\n if (!c) throw new Error(\"Select subcomponents must be used within <Select>\");\n return c;\n}\n\n// ----- open context (custom mode only) -----\n\ntype OpenCtx = {\n open: boolean;\n setOpen: (v: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n};\n\nconst OpenContext = React.createContext<OpenCtx | null>(null);\n\nfunction useSelectOpen() {\n const c = React.useContext(OpenContext);\n if (!c)\n throw new Error(\n \"Select.Trigger, SelectContent, and SelectItem need <Select> without native\",\n );\n return c;\n}\n\n// ----- root -----\n\nexport type SelectProps = {\n children: React.ReactNode;\n className?: string;\n value?: string;\n defaultValue?: string;\n onValueChange?: (v: string) => void;\n /** native `<select>`; default `false` — custom trigger + list / sheet. */\n native?: boolean;\n disabled?: boolean;\n name?: string;\n id?: string;\n placeholder?: string;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n};\n\nexport const Select = ({\n children,\n className,\n value: valueProp,\n defaultValue = \"\",\n onValueChange,\n native: nativeProp = false,\n disabled = false,\n name,\n id: idAttr,\n placeholder = \"Select\",\n open: openProp,\n onOpenChange,\n}: SelectProps) => {\n const isValueControlled = valueProp !== undefined;\n const [internalValue, setInternalValue] = useState(defaultValue);\n const value = isValueControlled ? (valueProp as string) : internalValue;\n\n const [labels, setLabels] = useState<Record<string, React.ReactNode>>({});\n const [nativeMeta, setNativeMeta] = useState<\n Record<string, { label: React.ReactNode; disabled?: boolean }>\n >({});\n const [nativeOrder, setNativeOrder] = useState<string[]>([]);\n\n const setValue = useCallback(\n (v: string) => {\n if (!isValueControlled) setInternalValue(v);\n onValueChange?.(v);\n },\n [isValueControlled, onValueChange],\n );\n\n const setLabel = useCallback((v: string, n: React.ReactNode) => {\n setLabels((p) => (p[v] === n ? p : { ...p, [v]: n }));\n }, []);\n\n const clearLabel = useCallback((v: string) => {\n setLabels((p) => {\n if (!(v in p)) return p;\n const n = { ...p };\n delete n[v];\n return n;\n });\n }, []);\n\n // labelFor keeps [] deps and reads labelsRef so selectitem effect deps stay stable;\n // valueCtx still lists `labels` so provider value updates and selectvalue re-renders\n const labelsRef = useRef(labels);\n labelsRef.current = labels;\n const labelFor = useCallback(\n (v: string) => labelsRef.current[v] as React.ReactNode | undefined,\n [],\n );\n\n const registerNativeItem = useCallback(\n (e: ItemRegistration) => {\n setLabel(e.value, e.label);\n setNativeMeta((p) => ({ ...p, [e.value]: { label: e.label, disabled: e.disabled } }));\n setNativeOrder((o) => (o.includes(e.value) ? o : [...o, e.value]));\n },\n [setLabel],\n );\n\n const unregisterNativeItem = useCallback(\n (v: string) => {\n setNativeMeta((p) => {\n if (!(v in p)) return p;\n const n = { ...p };\n delete n[v];\n return n;\n });\n setNativeOrder((o) => o.filter((x) => x !== v));\n clearLabel(v);\n },\n [clearLabel],\n );\n\n const valueCtx: ValueCtx = useMemo(\n () => ({\n native: nativeProp,\n value,\n setValue,\n disabled,\n setLabel,\n clearLabel,\n registerNativeItem,\n unregisterNativeItem,\n labelFor,\n placeholder,\n }),\n [\n nativeProp,\n value,\n setValue,\n disabled,\n labels,\n setLabel,\n clearLabel,\n registerNativeItem,\n unregisterNativeItem,\n labelFor,\n placeholder,\n ],\n );\n\n if (nativeProp) {\n return (\n <ValueContext.Provider value={valueCtx}>\n <div\n className={cn(\n \"group relative inline-block w-max min-w-0 max-w-full\",\n className,\n )}\n >\n <select\n id={idAttr}\n name={name}\n className={cn(\n \"peer\",\n \"border-primary/10 bg-background text-primary w-full min-w-0 max-w-full cursor-pointer appearance-none border pr-9 pl-3 outline-none\",\n \"h-10 min-h-10 text-sm font-medium\",\n \"rounded-full transition-[color,background-color,box-shadow,transform] duration-150\",\n \"focus-visible:ring-ring/50 focus-visible:ring-[3px]\",\n \"active:scale-[0.99]\",\n \"disabled:cursor-not-allowed disabled:opacity-50\",\n )}\n value={value}\n disabled={disabled}\n onChange={(ev) => setValue(ev.target.value)}\n >\n <option value=\"\" disabled>\n {placeholder}\n </option>\n {nativeOrder.map((key) => {\n const m = nativeMeta[key];\n if (!m) return null;\n return (\n <option key={key} value={key} disabled={m.disabled}>\n {plainTextFromNode(m.label)}\n </option>\n );\n })}\n </select>\n <ChevronDown\n aria-hidden\n className=\"text-primary/50 pointer-events-none absolute top-1/2 right-2.5 size-4 -translate-y-1/2 peer-disabled:opacity-50\"\n />\n </div>\n {children}\n </ValueContext.Provider>\n );\n }\n\n return (\n <ValueContext.Provider value={valueCtx}>\n <SelectOpenBridge open={openProp} onOpenChange={onOpenChange}>\n <div className={cn(\"inline-block min-w-0 max-w-full\", className)}>{children}</div>\n </SelectOpenBridge>\n </ValueContext.Provider>\n );\n};\n\nfunction SelectOpenBridge({\n children,\n open: controlled,\n onOpenChange,\n}: {\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (o: boolean) => void;\n}) {\n const [inner, setInner] = useState(false);\n const isControlled = controlled !== undefined;\n const open = isControlled ? (controlled as boolean) : inner;\n const setOpen = useCallback(\n (o: boolean) => {\n if (!isControlled) setInner(o);\n onOpenChange?.(o);\n },\n [isControlled, onOpenChange],\n );\n const triggerRef = useRef<HTMLElement | null>(null);\n const ctx = useMemo(\n () => ({ open, setOpen, triggerRef }) satisfies OpenCtx,\n [open, setOpen],\n );\n return <OpenContext.Provider value={ctx}>{children}</OpenContext.Provider>;\n}\n\n// ----- mobile sheet -----\n\nconst SheetClose = React.forwardRef<\n HTMLButtonElement,\n React.ButtonHTMLAttributes<HTMLButtonElement>\n>(({ className, type = \"button\", ...p }, ref) => (\n <button\n ref={ref}\n type={type}\n className={cn(\n \"z-100 flex size-12 shrink-0 cursor-pointer items-center justify-center rounded-full transition-all hover:bg-secondary-background active:scale-[0.96]\",\n className,\n )}\n {...p}\n >\n <X className=\"size-5.5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n));\nSheetClose.displayName = \"SelectSheetClose\";\n\nexport type SelectMobileSheetOptions = {\n sheet?: boolean;\n title?: string;\n className?: string;\n contentClassName?: string;\n};\n\nfunction resolveSheetOpts(o?: SelectMobileSheetOptions) {\n return {\n sheet: o?.sheet ?? true,\n title: o?.title,\n panelClass: o?.className,\n bodyClass: o?.contentClassName,\n };\n}\n\ntype SheetPortalProps = React.HTMLAttributes<HTMLDivElement> & {\n open: boolean;\n isAnimating: boolean;\n slideEntrance: boolean;\n slideOffsetPx: number;\n sheetTitle?: string;\n sheetPanelClassName?: string;\n contentClassName?: string;\n onRequestClose: () => void;\n menuRef: React.RefObject<HTMLDivElement | null>;\n};\n\nfunction MobileSheetPortal({\n open,\n isAnimating,\n slideEntrance,\n slideOffsetPx,\n sheetTitle,\n sheetPanelClassName,\n contentClassName,\n onRequestClose,\n menuRef,\n children,\n className,\n style,\n ...rest\n}: SheetPortalProps) {\n const ease = open ? MOBILE_SHEET_IN : MOBILE_SHEET_OUT;\n const hiddenY = slideEntrance ? `translateY(${slideOffsetPx}px)` : \"translateY(100%)\";\n return createPortal(\n <div className=\"fixed inset-0 z-50 flex items-end justify-center p-0\">\n <div\n className={cn(\n \"fixed inset-0 bg-black/40 dark:bg-black/60\",\n isAnimating ? \"opacity-100\" : \"opacity-0\",\n )}\n style={{\n transition: `opacity ${MOBILE_SHEET_MS}ms ${ease}`,\n }}\n onClick={onRequestClose}\n />\n <div\n {...rest}\n ref={menuRef}\n className={cn(\n \"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\",\n \"rounded-t-2xl rounded-b-none border-x-0 border-b-0 border-t\",\n sheetPanelClassName,\n className,\n )}\n style={{\n transform: isAnimating ? \"translateY(0)\" : hiddenY,\n opacity: isAnimating ? 1 : 0,\n transition: `transform ${MOBILE_SHEET_MS}ms ${ease}, opacity ${MOBILE_SHEET_MS}ms ${ease}`,\n ...style,\n }}\n >\n <div\n className={cn(\n \"flex w-full shrink-0 items-center py-2 pl-4 pr-2\",\n sheetTitle ? \"justify-between gap-3\" : \"justify-end\",\n )}\n >\n {sheetTitle ? (\n <p className=\"text-foreground min-w-0 flex-1 truncate text-base font-semibold\">\n {sheetTitle}\n </p>\n ) : null}\n <SheetClose\n onClick={(e) => {\n e.stopPropagation();\n onRequestClose();\n }}\n />\n </div>\n <div\n className={cn(\n \"min-h-0 flex-1 overflow-y-auto pb-[calc(5rem+env(safe-area-inset-bottom,0px))]\",\n contentClassName,\n )}\n >\n {children}\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n\n// ----- list helpers -----\n\nfunction listFocusableItems(host: HTMLElement): HTMLElement[] {\n return Array.from(\n host.querySelectorAll<HTMLElement>(\n '[data-select-item=\"true\"]:not([aria-disabled=\"true\"])',\n ),\n );\n}\n\n// ----- content -----\n\nexport type SelectContentProps = React.HTMLAttributes<HTMLDivElement> & {\n side?: Side;\n align?: Align;\n offset?: number;\n duration?: number;\n viewportPadding?: number;\n closeOnEscape?: boolean;\n minWidth?: number | \"trigger\";\n loop?: boolean;\n mobileOptions?: SelectMobileSheetOptions;\n slideEntrance?: boolean;\n slideEntranceOffsetPx?: number;\n};\n\nexport const SelectContent: React.FC<SelectContentProps> = ({\n children,\n side = \"bottom\",\n align = \"start\",\n offset = 10,\n duration = 80,\n viewportPadding = 8,\n closeOnEscape = true,\n minWidth = \"trigger\",\n loop = true,\n mobileOptions,\n slideEntrance = true,\n slideEntranceOffsetPx: slidePxProp,\n className,\n style,\n ...rest\n}) => {\n const narrow = useNarrowSheetViewport(MOBILE_SHEET_MAX_PX + 1);\n const { open, setOpen, triggerRef } = useSelectOpen();\n const [show, setShow] = useState(false);\n const [anim, setAnim] = useState(false);\n const [pos, setPos] = useState<Pos>({ top: -9999, left: -9999, side });\n const [triggerW, setTriggerW] = useState(0);\n const menuRef = useRef<HTMLDivElement>(null);\n const sheet = useMemo(() => resolveSheetOpts(mobileOptions), [mobileOptions]);\n const slidePx = slidePxProp ?? SLIDE_DEFAULT_PX;\n const closeMs = narrow && sheet.sheet ? MOBILE_SHEET_MS : duration;\n const close = useCallback(() => setOpen(false), [setOpen]);\n const [portalReady, setPortalReady] = useState(false);\n useLayoutEffect(() => {\n setPortalReady(true);\n }, []);\n\n useEffect(() => {\n if (open) {\n setShow(true);\n } else {\n setAnim(false);\n const t = setTimeout(() => setShow(false), closeMs);\n return () => clearTimeout(t);\n }\n }, [open, closeMs]);\n\n useEffect(() => {\n if (!show || !open) return;\n let r2 = 0;\n const r1 = requestAnimationFrame(() => {\n r2 = requestAnimationFrame(() => setAnim(true));\n });\n return () => {\n cancelAnimationFrame(r1);\n if (r2) cancelAnimationFrame(r2);\n };\n }, [show, open]);\n\n useLayoutEffect(() => {\n if (!triggerRef.current || !menuRef.current) return;\n if (!open && !show) return;\n const run = () => {\n if (!triggerRef.current || !menuRef.current) return;\n setTriggerW(triggerRef.current.getBoundingClientRect().width);\n setPos(\n computeMenuPosition(\n triggerRef.current,\n menuRef.current,\n side,\n align,\n offset,\n viewportPadding,\n ),\n );\n };\n run();\n window.addEventListener(\"resize\", run);\n window.addEventListener(\"scroll\", run, true);\n return () => {\n window.removeEventListener(\"resize\", run);\n window.removeEventListener(\"scroll\", run, true);\n };\n }, [open, show, side, align, offset, viewportPadding, triggerRef]);\n\n useEffect(() => {\n if (anim && menuRef.current) menuRef.current.focus();\n }, [anim]);\n\n useEffect(() => {\n if (!open) return;\n const onDoc = (e: MouseEvent) => {\n const t = e.target as Node;\n if (menuRef.current?.contains(t) || triggerRef.current?.contains(t)) return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", onDoc);\n return () => document.removeEventListener(\"mousedown\", onDoc);\n }, [open, setOpen, triggerRef]);\n\n useEffect(() => {\n if (!open) return;\n const onKey = (e: KeyboardEvent) => {\n const m = menuRef.current;\n if (!m) return;\n const active = document.activeElement as HTMLElement | null;\n if (active && !m.contains(active) && !triggerRef.current?.contains(active))\n return;\n const items = listFocusableItems(m);\n const i = items.indexOf(active!);\n switch (e.key) {\n case \"Escape\":\n if (closeOnEscape) {\n e.preventDefault();\n setOpen(false);\n triggerRef.current?.focus();\n }\n break;\n case \"ArrowDown\":\n e.preventDefault();\n if (!items.length) break;\n if (i === -1 || (i === items.length - 1 && loop)) items[0]?.focus();\n else if (i < items.length - 1) items[i + 1]?.focus();\n break;\n case \"ArrowUp\":\n e.preventDefault();\n if (!items.length) break;\n if (i <= 0 && loop) items[items.length - 1]?.focus();\n else if (i > 0) items[i - 1]?.focus();\n break;\n case \"Home\":\n e.preventDefault();\n items[0]?.focus();\n break;\n case \"End\":\n e.preventDefault();\n items[items.length - 1]?.focus();\n break;\n case \"Tab\":\n setOpen(false);\n break;\n default:\n break;\n }\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [open, closeOnEscape, loop, setOpen, triggerRef]);\n\n const lockBodyScroll = (open || show) && narrow && sheet.sheet;\n useEffect(() => {\n if (!lockBodyScroll) return;\n const prev = document.body.style.overflow;\n document.body.style.overflow = \"hidden\";\n return () => {\n document.body.style.overflow = prev;\n };\n }, [lockBodyScroll]);\n\n if (narrow && sheet.sheet) {\n if (!open && !show) {\n const registrationSlot = (\n <div className=\"sr-only pointer-events-none\" aria-hidden>\n {children}\n </div>\n );\n if (!portalReady) return registrationSlot;\n return createPortal(registrationSlot, document.body);\n }\n return (\n <MobileSheetPortal\n {...rest}\n open={open}\n isAnimating={anim}\n slideEntrance={slideEntrance}\n slideOffsetPx={slidePx}\n sheetTitle={sheet.title}\n sheetPanelClassName={sheet.panelClass}\n contentClassName={sheet.bodyClass}\n onRequestClose={close}\n menuRef={menuRef}\n className={className}\n style={style}\n role=\"listbox\"\n tabIndex={-1}\n aria-label={sheet.title}\n >\n {children}\n </MobileSheetPortal>\n );\n }\n\n const resolvedMin =\n minWidth === \"trigger\" ? (triggerW > 0 ? triggerW : undefined) : minWidth;\n\n const listbox = (\n <div\n {...rest}\n ref={menuRef}\n role=\"listbox\"\n tabIndex={-1}\n aria-hidden={!open}\n className={cn(\n \"bg-background border-primary/10 absolute z-50 rounded-xl border py-1.5 shadow-xl outline-none\",\n className,\n pos.maxHeight != null ? \"overflow-y-auto overscroll-contain\" : \"overflow-hidden\",\n )}\n style={{\n position: \"absolute\",\n top: pos.top,\n left: pos.left,\n ...(typeof resolvedMin === \"number\" ? { minWidth: resolvedMin } : {}),\n maxHeight: pos.maxHeight,\n transformOrigin: CONTENT_ORIGIN[pos.side],\n transform: anim ? \"none\" : CONTENT_HIDDEN[pos.side],\n opacity: anim ? 1 : 0,\n pointerEvents: !open ? \"none\" : \"auto\",\n transitionProperty: \"opacity, transform\",\n transitionDuration: `${duration}ms`,\n transitionTimingFunction: anim ? PANEL_OPEN_EASING : PANEL_CLOSE_EASING,\n ...style,\n }}\n >\n {children}\n </div>\n );\n\n if (!portalReady) {\n return listbox;\n }\n return createPortal(listbox, document.body);\n};\n\n// ----- trigger + chevron -----\n\nexport type SelectTriggerProps = Omit<ButtonProps, \"type\"> & { asChild?: boolean };\n\nfunction mergeRef(\n store: React.RefObject<HTMLElement | null>,\n node: HTMLElement | null,\n fromChild?: React.Ref<HTMLElement> | null,\n) {\n store.current = node;\n if (typeof fromChild === \"function\") fromChild(node);\n else if (fromChild && typeof fromChild === \"object\")\n (fromChild as React.MutableRefObject<HTMLElement | null>).current = node;\n}\n\nexport const SelectTrigger = React.forwardRef<HTMLButtonElement, SelectTriggerProps>(\n function SelectTrigger(\n { children, asChild, className, onClick, disabled, ...buttonProps },\n ref,\n ) {\n const { open, setOpen, triggerRef } = useSelectOpen();\n const triggerVariant =\n (buttonProps as { variant?: ButtonProps[\"variant\"] }).variant ?? \"secondary\";\n\n const onPress = useCallback(\n (e: React.MouseEvent<HTMLElement>) => {\n (onClick as React.MouseEventHandler<HTMLButtonElement> | undefined)?.(\n e as React.MouseEvent<HTMLButtonElement>,\n );\n e.stopPropagation();\n if (disabled) return;\n setOpen(!open);\n },\n [onClick, disabled, open, setOpen],\n );\n\n const setBtnRef = useCallback(\n (el: HTMLButtonElement | null) => {\n mergeRef(triggerRef, el, null);\n if (typeof ref === \"function\") ref(el);\n else if (ref) (ref as React.MutableRefObject<HTMLButtonElement | null>).current = el;\n },\n [ref, triggerRef],\n );\n\n if (asChild && React.isValidElement(children)) {\n const ch = children as React.ReactElement<{\n onClick?: React.MouseEventHandler<HTMLElement>;\n className?: string;\n }>;\n const childRef = (ch as { ref?: React.Ref<HTMLElement> | null }).ref;\n return React.cloneElement(ch, {\n ref: (n: HTMLElement | null) => mergeRef(triggerRef, n, childRef),\n className: cn(\"group w-fit max-w-full min-w-0 justify-start gap-2\", ch.props.className),\n onClick: (e: React.MouseEvent<HTMLElement>) => {\n ch.props.onClick?.(e);\n onPress(e);\n },\n \"aria-expanded\": open,\n \"aria-haspopup\": \"listbox\",\n \"data-state\": open ? \"open\" : \"closed\",\n \"data-variant\": triggerVariant,\n ...((disabled !== undefined\n ? { \"aria-disabled\": disabled }\n : {}) as Record<string, unknown>),\n } as Partial<typeof ch.props>);\n }\n\n return (\n <Button\n ref={setBtnRef}\n type=\"button\"\n {...buttonProps}\n disabled={disabled}\n className={cn(\"group w-fit max-w-full min-w-0 justify-start gap-2\", className)}\n aria-expanded={open}\n aria-haspopup=\"listbox\"\n data-state={open ? \"open\" : \"closed\"}\n data-variant={triggerVariant}\n onClick={onPress as React.MouseEventHandler<HTMLButtonElement>}\n >\n {children}\n </Button>\n );\n },\n);\nSelectTrigger.displayName = \"SelectTrigger\";\n\nexport const SelectChevron: React.FC<React.ComponentProps<typeof ChevronDown>> = ({\n className,\n ...props\n}) => {\n const { open } = useSelectOpen();\n return (\n <ChevronDown\n aria-hidden\n className={cn(\"size-4 shrink-0\", open && \"rotate-180\", className)}\n {...props}\n />\n );\n};\n\n// ----- value display -----\n\nexport const SelectValue: React.FC<{\n placeholder?: string;\n className?: string;\n}> = ({ placeholder, className }) => {\n const c = useSelectValue();\n if (c.native) return null;\n const ph = placeholder ?? c.placeholder;\n const text = c.value ? c.labelFor(c.value) : undefined;\n const isEmpty = !c.value;\n // trigger sets `data-variant` so we can override the button’s full-strength `text-*`\n return (\n <span\n data-slot=\"select-value\"\n className={cn(\n \"min-w-0 flex-1 truncate text-left\",\n isEmpty &&\n cn(\n \"group-data-[variant=primary]:!text-background/50\",\n \"group-data-[variant=secondary]:!text-primary/50\",\n \"group-data-[variant=destructive]:!text-red-500/50\",\n \"group-data-[variant=success]:!text-green-500/50\",\n ),\n className,\n )}\n >\n {text != null ? text : ph}\n </span>\n );\n};\n\n// ----- items -----\n\nexport type SelectItemProps = React.HTMLAttributes<HTMLDivElement> & {\n value: string;\n children: React.ReactNode;\n disabled?: boolean;\n shortcut?: string;\n onClick?: React.MouseEventHandler<HTMLDivElement>;\n};\n\nconst SelectItemRow: React.FC<SelectItemProps> = ({\n value: v,\n children,\n disabled,\n shortcut,\n className,\n onClick: userClick,\n ...divProps\n}) => {\n const c = useSelectValue();\n const { setOpen } = useSelectOpen();\n const selected = c.value === v;\n\n const click: React.MouseEventHandler<HTMLDivElement> = (e) => {\n if (disabled) return;\n c.setValue(v);\n userClick?.(e);\n setOpen(false);\n };\n\n const keyDown: React.KeyboardEventHandler<HTMLDivElement> = (e) => {\n if (e.key === \"Enter\" || e.key === \" \") {\n e.preventDefault();\n click(e as unknown as React.MouseEvent<HTMLDivElement>);\n }\n };\n\n return (\n <div\n {...divProps}\n data-select-item=\"true\"\n role=\"option\"\n aria-selected={selected}\n tabIndex={disabled ? undefined : -1}\n aria-disabled={disabled}\n onClick={click}\n onKeyDown={keyDown}\n className={cn(\n \"relative mx-1.5 flex items-center gap-2 rounded-md px-3 py-2 text-sm transition-colors duration-0 outline-none select-none\",\n SHEET_MENU_TEXT,\n !disabled &&\n \"text-foreground hover:bg-primary/8 focus-visible:bg-primary/8 dark:hover:bg-primary/4 dark:focus-visible:bg-primary/4\",\n disabled &&\n \"lg:cursor-not-allowed text-foreground/45 dark:text-foreground/50\",\n !disabled && \"cursor-pointer\",\n className,\n )}\n >\n <span className=\"min-w-0 flex-1\">{children}</span>\n {shortcut ? (\n <span\n className={cn(\n \"shrink-0 text-xs tracking-widest opacity-40\",\n SHEET_MENU_SHORTCUT,\n )}\n >\n {shortcut}\n </span>\n ) : null}\n <span className=\"flex size-4 shrink-0 items-center justify-center\" aria-hidden>\n {selected ? <Check className=\"size-3.5\" strokeWidth={2.5} /> : null}\n </span>\n </div>\n );\n};\n\nexport const SelectItem: React.FC<SelectItemProps> = ({\n value: v,\n children,\n disabled,\n ...rest\n}) => {\n const {\n native,\n setLabel,\n clearLabel,\n registerNativeItem,\n unregisterNativeItem,\n } = useSelectValue();\n useLayoutEffect(() => {\n setLabel(v, children);\n if (native) registerNativeItem({ value: v, label: children, disabled });\n return () => {\n clearLabel(v);\n if (native) unregisterNativeItem(v);\n };\n }, [\n v,\n children,\n disabled,\n native,\n setLabel,\n clearLabel,\n registerNativeItem,\n unregisterNativeItem,\n ]);\n\n if (native) return null;\n return (\n <SelectItemRow value={v} disabled={disabled} {...rest}>\n {children}\n </SelectItemRow>\n );\n};\nSelectItem.displayName = \"SelectItem\";\n"]}
@@ -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-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"]}