@avenue-ticketing/ui 0.8.0 → 0.9.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.
- package/dist/react/datetime-picker.js +0 -3
- package/dist/react/datetime-picker.js.map +1 -1
- package/dist/react/dropdown.js +0 -3
- package/dist/react/dropdown.js.map +1 -1
- package/dist/react/popover.js +0 -3
- package/dist/react/popover.js.map +1 -1
- package/dist/react/select.js +0 -3
- package/dist/react/select.js.map +1 -1
- package/dist/react/table-pagination.js +0 -3
- package/dist/react/table-pagination.js.map +1 -1
- package/dist/react/table-view/column-menu.js +0 -3
- package/dist/react/table-view/column-menu.js.map +1 -1
- package/dist/react/table-view/index.js +0 -3
- package/dist/react/table-view/index.js.map +1 -1
- package/dist/react/tooltip.js +0 -8
- package/dist/react/tooltip.js.map +1 -1
- package/package.json +1 -1
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/popover.tsx"],"names":[],"mappings":"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","file":"popover.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\";\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\n/** Mobile popover as bottom sheet — same cutoff and motion as {@link DropdownContent}. */\nconst POPOVER_MOBILE_SHEET_MAX_PX = 1024;\nconst POPOVER_MOBILE_SHEET_MOTION_MS = 175;\nconst POPOVER_MOBILE_SHEET_ENTRY_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\nconst POPOVER_MOBILE_SHEET_EXIT_EASING = \"cubic-bezier(0.85, 0, 1, 0.15)\";\nconst POPOVER_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX = 120;\n/** Shrink on the preferred side until space drops below ~2 rows; then allow flip. */\nconst POPOVER_FLIP_MIN_SPACE_PX = 100;\n\nfunction preventPopoverWheelChain(panel: HTMLElement, e: WheelEvent) {\n let el: HTMLElement | null = e.target as HTMLElement | null;\n while (el && panel.contains(el)) {\n const oy = getComputedStyle(el).overflowY;\n if (\n (oy === \"auto\" || oy === \"scroll\") &&\n el.scrollHeight > el.clientHeight\n ) {\n const atTop = el.scrollTop <= 0;\n const atBottom =\n el.scrollTop + el.clientHeight >= el.scrollHeight;\n if ((e.deltaY < 0 && !atTop) || (e.deltaY > 0 && !atBottom)) return;\n break;\n }\n el = el.parentElement;\n }\n e.preventDefault();\n}\n\nfunction usePopoverIsMobile(breakpoint = 1025): boolean {\n const [isMobile, setIsMobile] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);\n setIsMobile(mq.matches);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, [breakpoint]);\n return isMobile;\n}\n\n//////////////////////////////////////////////// Context\n\ntype PopoverContextValue = {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n};\n\nconst PopoverContext = React.createContext<PopoverContextValue | undefined>(\n undefined,\n);\n\nfunction usePopover() {\n const context = React.useContext(PopoverContext);\n if (!context) {\n throw new Error(\"Popover components must be used within a <Popover />\");\n }\n return context;\n}\n\n//////////////////////////////////////////////// Main\n\nexport const Popover: React.FC<{\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}> = ({ children, open: controlledOpen, onOpenChange }) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const setOpen = useCallback(\n (value: boolean) => {\n if (!isControlled) setInternalOpen(value);\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange],\n );\n\n return (\n <PopoverContext.Provider value={{ open, setOpen, triggerRef }}>\n {children}\n </PopoverContext.Provider>\n );\n};\n\n//////////////////////////////////////////////// Trigger\n\nexport const PopoverTrigger: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n}> = ({ children, asChild }) => {\n const { open, setOpen, triggerRef } = usePopover();\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n setOpen(!open);\n };\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n ref?: React.Ref<unknown>;\n }>;\n return React.cloneElement(child, {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref: (el: HTMLElement) => {\n triggerRef.current = el;\n },\n onClick: (e: React.MouseEvent) => {\n child.props.onClick?.(e);\n handleClick(e);\n },\n } as Partial<typeof child.props>);\n }\n\n return (\n <button\n type=\"button\"\n ref={(el) => {\n triggerRef.current = el;\n }}\n onClick={handleClick}\n >\n {children}\n </button>\n );\n};\n\n//////////////////////////////////////////////// Close\n\nexport const PopoverClose: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n}> = ({ children, asChild }) => {\n const { setOpen } = usePopover();\n const handleClick = () => setOpen(false);\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 handleClick();\n },\n } as Partial<typeof child.props>);\n }\n\n return (\n <button type=\"button\" onClick={handleClick}>\n {children}\n </button>\n );\n};\n\n//////////////////////////////////////////////// Mobile sheet (popover-specific; mirrors dropdown behavior)\n\n/**\n * Narrow-viewport (≤1024px) bottom-sheet options for {@link PopoverContent}.\n * `className` merges onto the sheet panel root (after base sheet styles).\n */\nexport interface PopoverMobileSheetOptions {\n /** When `true`, use a bottom sheet on narrow viewports. Default `false`. */\n sheet?: boolean;\n title?: string;\n className?: string;\n contentClassName?: string;\n}\n\nfunction resolvePopoverMobileSheet(\n mobileOptions: PopoverMobileSheetOptions | undefined,\n) {\n return {\n sheet: mobileOptions?.sheet ?? false,\n title: mobileOptions?.title,\n sheetExtraClassName: mobileOptions?.className,\n contentClassName: mobileOptions?.contentClassName,\n };\n}\n\nexport interface PopoverMobileCloseProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * Dismiss control for the mobile bottom-sheet popover. Styling matches\n * {@link DialogCloseButton} (circular hit target, X icon).\n */\nexport const PopoverMobileClose = React.forwardRef<\n HTMLButtonElement,\n PopoverMobileCloseProps\n>(({ className, type = \"button\", ...props }, ref) => {\n return (\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 {...props}\n >\n <X className=\"size-5.5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n );\n});\nPopoverMobileClose.displayName = \"PopoverMobileClose\";\n\ninterface PopoverMobileBottomSheetPortalProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"ref\"\n> {\n children: React.ReactNode;\n open: boolean;\n isAnimating: boolean;\n slideEntrance: boolean;\n slideOffsetPx: number;\n sheetTitle?: string;\n sheetExtraClassName?: string;\n contentClassName?: string;\n onRequestClose: () => void;\n menuRef: React.RefObject<HTMLDivElement | null>;\n /** When `false`, scrim taps do not close (matches `closeOnClickOutside={false}`). */\n dismissOnBackdropPress?: boolean;\n}\n\nfunction PopoverMobileBottomSheetPortal({\n open,\n isAnimating,\n slideEntrance,\n slideOffsetPx,\n sheetTitle,\n sheetExtraClassName,\n contentClassName,\n onRequestClose,\n menuRef,\n dismissOnBackdropPress = true,\n children,\n className,\n style,\n ...panelProps\n}: PopoverMobileBottomSheetPortalProps) {\n const sheetMotion = open\n ? POPOVER_MOBILE_SHEET_ENTRY_EASING\n : POPOVER_MOBILE_SHEET_EXIT_EASING;\n const sheetHiddenTransform = slideEntrance\n ? `translateY(${slideOffsetPx}px)`\n : \"translateY(100%)\";\n\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 transitionProperty: \"opacity\",\n transitionDuration: `${POPOVER_MOBILE_SHEET_MOTION_MS}ms`,\n transitionTimingFunction: sheetMotion,\n }}\n onClick={dismissOnBackdropPress ? onRequestClose : undefined}\n aria-hidden\n />\n <div\n {...panelProps}\n ref={menuRef}\n className={cn(\n // Panel chrome + padding rhythm matches `DropdownMobileBottomSheetPortal`.\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 sheetExtraClassName,\n className,\n )}\n style={{\n transform: isAnimating ? \"translateY(0)\" : sheetHiddenTransform,\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"transform, opacity\",\n transitionDuration: `${POPOVER_MOBILE_SHEET_MOTION_MS}ms`,\n transitionTimingFunction: sheetMotion,\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 <PopoverMobileClose\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 px-4 pt-3\",\n contentClassName,\n \"pb-[calc(5rem+env(safe-area-inset-bottom,0px))]\",\n )}\n >\n {children}\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n\n//////////////////////////////////////////////// Content\n\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\";\ntype Align = \"start\" | \"center\" | \"end\";\n\ninterface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Which side of the trigger to render on */\n side?: Side;\n /** Alignment along the cross-axis */\n align?: Align;\n /** Gap between trigger and popover in px */\n offset?: number;\n /** Show a small arrow pointing to the trigger */\n showArrow?: boolean;\n /** Close when clicking outside */\n closeOnClickOutside?: boolean;\n /** Close when Escape key is pressed */\n closeOnEscape?: boolean;\n /** Animation duration in ms */\n duration?: number;\n /** Minimum distance from the viewport edge in px */\n viewportPadding?: number;\n /** Portal container – defaults to document.body */\n container?: HTMLElement | null;\n /** Width of the popover. 'trigger' matches the trigger width. */\n width?: \"auto\" | \"trigger\" | number;\n /**\n * Narrow-viewport (≤1024px) bottom sheet — same options as dropdown\n * `mobileOptions`, except `sheet` defaults to `false`.\n */\n mobileOptions?: PopoverMobileSheetOptions;\n /**\n * Mobile bottom sheet only. When `true` (default), panel motion matches Dialog\n * `slideEntrance`; when `false`, uses full `translateY(100%)`.\n */\n slideEntrance?: boolean;\n /** Mobile sheet only; defaults to 120px (same as dropdown / dialog full sheet). */\n slideEntranceOffsetPx?: number;\n}\n\ninterface Position {\n top: number;\n left: number;\n side: Side;\n maxHeight?: number;\n}\n\nfunction computePosition(\n trigger: HTMLElement,\n popover: HTMLElement,\n side: Side,\n align: Align,\n offset: number,\n viewportPadding: number,\n): Position {\n const triggerRect = trigger.getBoundingClientRect();\n /** Layout box — not affected by exit/enter `transform: scale()`, unlike `getBoundingClientRect()`. */\n const pw = popover.offsetWidth;\n const ph = popover.offsetHeight;\n const contentHeight = popover.scrollHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const pad = viewportPadding;\n\n let top = 0;\n let left = 0;\n let effectiveSide: Side = side;\n let maxHeight: number | undefined;\n\n /** Viewport-space coords — pairs with `position: fixed` on the portal root. */\n const placeVertical = (s: Side, height: number) => {\n if (s === \"bottom\") top = triggerRect.bottom + offset;\n else top = triggerRect.top - height - offset;\n if (align === \"start\") left = triggerRect.left;\n else if (align === \"end\") left = triggerRect.right - pw;\n else left = triggerRect.left + triggerRect.width / 2 - pw / 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 = triggerRect.right + offset;\n top =\n align === \"start\"\n ? triggerRect.top\n : align === \"end\"\n ? triggerRect.bottom - ph\n : triggerRect.top + triggerRect.height / 2 - ph / 2;\n break;\n case \"left\":\n left = triggerRect.left - pw - offset;\n top =\n align === \"start\"\n ? triggerRect.top\n : align === \"end\"\n ? triggerRect.bottom - ph\n : triggerRect.top + triggerRect.height / 2 - ph / 2;\n break;\n }\n };\n\n place(side);\n\n const spaceBelow = Math.max(0, vh - pad - triggerRect.bottom - offset);\n const spaceAbove = Math.max(0, triggerRect.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 < POPOVER_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 + pw > vw - pad) {\n const flippedLeft = triggerRect.left - pw - offset;\n if (flippedLeft >= pad) {\n effectiveSide = \"left\";\n left = flippedLeft;\n }\n } else if (side === \"left\" && left < pad) {\n const flippedLeft = triggerRect.right + offset;\n if (flippedLeft + pw <= vw - pad) {\n effectiveSide = \"right\";\n left = flippedLeft;\n }\n }\n\n const layoutHeight = maxHeight ?? contentHeight;\n left = Math.max(pad, Math.min(left, vw - pw - pad));\n top = Math.max(pad, Math.min(top, vh - layoutHeight - pad));\n\n return { top, left, side: effectiveSide, maxHeight };\n}\n\nconst ARROW_SIZE = 6;\n\nexport const PopoverContent: React.FC<PopoverContentProps> = ({\n children,\n side = \"bottom\",\n align = \"center\",\n offset = 10,\n showArrow = false,\n closeOnClickOutside = true,\n closeOnEscape = true,\n duration = 80,\n viewportPadding = 8,\n container,\n width = \"auto\",\n mobileOptions,\n slideEntrance = true,\n slideEntranceOffsetPx: slideEntranceOffsetPxProp,\n className,\n style,\n ...props\n}) => {\n const { open, setOpen, triggerRef } = usePopover();\n const isMobile = usePopoverIsMobile(POPOVER_MOBILE_SHEET_MAX_PX + 1);\n const resolvedMobile = useMemo(\n () => resolvePopoverMobileSheet(mobileOptions),\n [mobileOptions],\n );\n const sheetMode = isMobile && resolvedMobile.sheet;\n const slideOffsetPx = useMemo(\n () =>\n slideEntranceOffsetPxProp ??\n POPOVER_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX,\n [slideEntranceOffsetPxProp],\n );\n const closeDuration = sheetMode\n ? POPOVER_MOBILE_SHEET_MOTION_MS\n : duration;\n\n const [shouldRender, setShouldRender] = useState(false);\n const [isAnimating, setIsAnimating] = useState(false);\n const [position, setPosition] = useState<Position>({\n top: -9999,\n left: -9999,\n side,\n });\n const [triggerWidth, setTriggerWidth] = useState<number>(0);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const closePopover = useCallback(() => setOpen(false), [setOpen]);\n\n /** Same open/close sequencing as dropdown mobile sheet / `DialogContent`. */\n useEffect(() => {\n if (open) {\n setShouldRender(true);\n } else {\n setIsAnimating(false);\n const timer = setTimeout(() => setShouldRender(false), closeDuration);\n return () => clearTimeout(timer);\n }\n }, [open, closeDuration]);\n\n useEffect(() => {\n if (!shouldRender || !open) return;\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 // Position calculation – runs after render so the popover has dimensions.\n // Skip while `open` is false: panel still mounts for the exit animation, but\n // `getBoundingClientRect` on the root would reflect `scale()` and re-trigger a jump.\n useLayoutEffect(() => {\n if (\n !shouldRender ||\n !open ||\n sheetMode ||\n !triggerRef.current ||\n !popoverRef.current\n )\n return;\n\n const update = () => {\n if (!triggerRef.current || !popoverRef.current) return;\n setTriggerWidth(triggerRef.current.getBoundingClientRect().width);\n const pos = computePosition(\n triggerRef.current,\n popoverRef.current,\n side,\n align,\n offset,\n viewportPadding,\n );\n setPosition(pos);\n };\n\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n return () => {\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n };\n }, [shouldRender, open, sheetMode, side, align, offset, viewportPadding]);\n\n useEffect(() => {\n if (!shouldRender || !open || sheetMode || position.maxHeight == null) return;\n const panel = popoverRef.current;\n if (!panel) return;\n const onWheel = (e: WheelEvent) => preventPopoverWheelChain(panel, e);\n panel.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => panel.removeEventListener(\"wheel\", onWheel);\n }, [shouldRender, open, sheetMode, position.maxHeight]);\n\n // Body scroll lock (mobile sheet)\n useEffect(() => {\n if (open && sheetMode) {\n document.body.style.overflow = \"hidden\";\n }\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [open, sheetMode]);\n\n // Close on outside click (floating only — sheet uses scrim `dismissOnBackdropPress`)\n useEffect(() => {\n if (!open || !closeOnClickOutside || sheetMode) return;\n const handler = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n popoverRef.current?.contains(target) ||\n triggerRef.current?.contains(target)\n )\n return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, closeOnClickOutside, sheetMode, setOpen, triggerRef]);\n\n // Close on Escape\n useEffect(() => {\n if (!open || !closeOnEscape) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [open, closeOnEscape, setOpen]);\n\n if (!shouldRender) return null;\n\n if (sheetMode && typeof document !== \"undefined\") {\n return (\n <PopoverMobileBottomSheetPortal\n {...props}\n open={open}\n isAnimating={isAnimating}\n slideEntrance={slideEntrance}\n slideOffsetPx={slideOffsetPx}\n sheetTitle={resolvedMobile.title}\n sheetExtraClassName={resolvedMobile.sheetExtraClassName}\n contentClassName={cn(resolvedMobile.contentClassName, className)}\n onRequestClose={closePopover}\n dismissOnBackdropPress={closeOnClickOutside}\n menuRef={popoverRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n className={undefined}\n style={style}\n data-slot=\"popover-content\"\n >\n {children}\n </PopoverMobileBottomSheetPortal>\n );\n }\n\n // Animation direction by side\n const transformOrigin: Record<Side, string> = {\n bottom: \"top center\",\n top: \"bottom center\",\n left: \"right center\",\n right: \"left center\",\n };\n\n const hiddenTransform: Record<Side, string> = {\n bottom: \"translateY(-6px) scale(0.97)\",\n top: \"translateY(6px) scale(0.97)\",\n left: \"translateX(6px) scale(0.97)\",\n right: \"translateX(-6px) scale(0.97)\",\n };\n\n const resolvedWidth =\n width === \"trigger\" ? triggerWidth : width === \"auto\" ? undefined : width;\n\n // Arrow position relative to popover\n const arrowStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n position: \"absolute\",\n width: 0,\n height: 0,\n pointerEvents: \"none\",\n };\n switch (position.side) {\n case \"bottom\":\n return {\n ...base,\n top: -ARROW_SIZE,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n borderLeft: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid var(--border)`,\n };\n case \"top\":\n return {\n ...base,\n bottom: -ARROW_SIZE,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n borderLeft: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid transparent`,\n borderTop: `${ARROW_SIZE}px solid var(--border)`,\n };\n case \"right\":\n return {\n ...base,\n left: -ARROW_SIZE,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n borderTop: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid var(--border)`,\n };\n case \"left\":\n return {\n ...base,\n right: -ARROW_SIZE,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n borderTop: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid transparent`,\n borderLeft: `${ARROW_SIZE}px solid var(--border)`,\n };\n }\n };\n\n const resolvedContainer =\n container !== undefined\n ? container\n : typeof document !== \"undefined\"\n ? document.body\n : null;\n\n if (!resolvedContainer) return null;\n\n return createPortal(\n <div\n {...props}\n ref={popoverRef}\n className={cn(\n \"bg-background border-primary/10 fixed z-50 rounded-xl border shadow-xl outline-none\",\n className,\n position.maxHeight != null ? \"overflow-y-auto overscroll-contain\" : \"overflow-hidden\",\n )}\n data-slot=\"popover-content\"\n style={{\n position: \"fixed\",\n top: position.top,\n left: position.left,\n width: resolvedWidth,\n maxHeight: position.maxHeight,\n transformOrigin: transformOrigin[position.side],\n transform: isAnimating ? \"none\" : hiddenTransform[position.side],\n opacity: isAnimating ? 1 : 0,\n transition: `opacity ${duration}ms ease, transform ${duration}ms ease`,\n ...style,\n }}\n >\n {showArrow && <div style={arrowStyles()} />}\n {children}\n </div>,\n resolvedContainer,\n );\n};\n\n//////////////////////////////////////////////// Sub-components\n\nexport const PopoverHeader: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n}) => (\n <div\n className={cn(\n \"border-primary/10 flex flex-col space-y-1 border-b px-4 py-3\",\n className,\n )}\n {...props}\n />\n);\n\nexport const PopoverFooter: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n}) => (\n <div\n className={cn(\n \"border-primary/10 flex flex-row justify-end gap-2 border-t px-4 py-3\",\n className,\n )}\n {...props}\n />\n);\n\nexport const PopoverTitle: React.FC<\n React.HTMLAttributes<HTMLHeadingElement>\n> = ({ className, ...props }) => (\n <h4\n className={cn(\"text-primary text-sm leading-none font-semibold\", className)}\n {...props}\n />\n);\n\nexport const PopoverDescription: React.FC<\n React.HTMLAttributes<HTMLParagraphElement>\n> = ({ className, ...props }) => (\n <p className={cn(\"text-muted-foreground text-xs\", className)} {...props} />\n);\n"]}
|
|
1
|
+
{"version":3,"sources":["../../src/lib/utils.ts","../../src/react/popover.tsx"],"names":[],"mappings":"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","file":"popover.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\";\nimport React, {\n useCallback,\n useEffect,\n useLayoutEffect,\n useMemo,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\nimport { X } from \"lucide-react\";\nimport { cn } from \"../lib/utils\";\n\n/** Mobile popover as bottom sheet — same cutoff and motion as {@link DropdownContent}. */\nconst POPOVER_MOBILE_SHEET_MAX_PX = 1024;\nconst POPOVER_MOBILE_SHEET_MOTION_MS = 175;\nconst POPOVER_MOBILE_SHEET_ENTRY_EASING = \"cubic-bezier(0.85, 0, 0.15, 1)\";\nconst POPOVER_MOBILE_SHEET_EXIT_EASING = \"cubic-bezier(0.85, 0, 1, 0.15)\";\nconst POPOVER_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX = 120;\n/** Shrink on the preferred side until space drops below ~2 rows; then allow flip. */\nconst POPOVER_FLIP_MIN_SPACE_PX = 100;\n\nfunction preventPopoverWheelChain(panel: HTMLElement, e: WheelEvent) {\n let el: HTMLElement | null = e.target as HTMLElement | null;\n while (el && panel.contains(el)) {\n const oy = getComputedStyle(el).overflowY;\n if (\n (oy === \"auto\" || oy === \"scroll\") &&\n el.scrollHeight > el.clientHeight\n ) {\n const atTop = el.scrollTop <= 0;\n const atBottom =\n el.scrollTop + el.clientHeight >= el.scrollHeight;\n if ((e.deltaY < 0 && !atTop) || (e.deltaY > 0 && !atBottom)) return;\n break;\n }\n el = el.parentElement;\n }\n e.preventDefault();\n}\n\nfunction usePopoverIsMobile(breakpoint = 1025): boolean {\n const [isMobile, setIsMobile] = useState(false);\n useEffect(() => {\n const mq = window.matchMedia(`(max-width: ${breakpoint - 1}px)`);\n setIsMobile(mq.matches);\n const handler = (e: MediaQueryListEvent) => setIsMobile(e.matches);\n mq.addEventListener(\"change\", handler);\n return () => mq.removeEventListener(\"change\", handler);\n }, [breakpoint]);\n return isMobile;\n}\n\n//////////////////////////////////////////////// Context\n\ntype PopoverContextValue = {\n open: boolean;\n setOpen: (open: boolean) => void;\n triggerRef: React.RefObject<HTMLElement | null>;\n};\n\nconst PopoverContext = React.createContext<PopoverContextValue | undefined>(\n undefined,\n);\n\nfunction usePopover() {\n const context = React.useContext(PopoverContext);\n if (!context) {\n throw new Error(\"Popover components must be used within a <Popover />\");\n }\n return context;\n}\n\n//////////////////////////////////////////////// Main\n\nexport const Popover: React.FC<{\n children: React.ReactNode;\n open?: boolean;\n onOpenChange?: (open: boolean) => void;\n}> = ({ children, open: controlledOpen, onOpenChange }) => {\n const [internalOpen, setInternalOpen] = useState(false);\n const isControlled = controlledOpen !== undefined;\n const open = isControlled ? controlledOpen : internalOpen;\n const triggerRef = useRef<HTMLElement | null>(null);\n\n const setOpen = useCallback(\n (value: boolean) => {\n if (!isControlled) setInternalOpen(value);\n onOpenChange?.(value);\n },\n [isControlled, onOpenChange],\n );\n\n return (\n <PopoverContext.Provider value={{ open, setOpen, triggerRef }}>\n {children}\n </PopoverContext.Provider>\n );\n};\n\n//////////////////////////////////////////////// Trigger\n\nexport const PopoverTrigger: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n}> = ({ children, asChild }) => {\n const { open, setOpen, triggerRef } = usePopover();\n\n const handleClick = (e: React.MouseEvent) => {\n e.stopPropagation();\n setOpen(!open);\n };\n\n if (asChild && React.isValidElement(children)) {\n const child = children as React.ReactElement<{\n onClick?: React.MouseEventHandler;\n ref?: React.Ref<unknown>;\n }>;\n return React.cloneElement(child, {\n // eslint-disable-next-line @typescript-eslint/no-explicit-any\n ref: (el: HTMLElement) => {\n triggerRef.current = el;\n },\n onClick: (e: React.MouseEvent) => {\n child.props.onClick?.(e);\n handleClick(e);\n },\n } as Partial<typeof child.props>);\n }\n\n return (\n <button\n type=\"button\"\n ref={(el) => {\n triggerRef.current = el;\n }}\n onClick={handleClick}\n >\n {children}\n </button>\n );\n};\n\n//////////////////////////////////////////////// Close\n\nexport const PopoverClose: React.FC<{\n children: React.ReactNode;\n asChild?: boolean;\n}> = ({ children, asChild }) => {\n const { setOpen } = usePopover();\n const handleClick = () => setOpen(false);\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 handleClick();\n },\n } as Partial<typeof child.props>);\n }\n\n return (\n <button type=\"button\" onClick={handleClick}>\n {children}\n </button>\n );\n};\n\n//////////////////////////////////////////////// Mobile sheet (popover-specific; mirrors dropdown behavior)\n\n/**\n * Narrow-viewport (≤1024px) bottom-sheet options for {@link PopoverContent}.\n * `className` merges onto the sheet panel root (after base sheet styles).\n */\nexport interface PopoverMobileSheetOptions {\n /** When `true`, use a bottom sheet on narrow viewports. Default `false`. */\n sheet?: boolean;\n title?: string;\n className?: string;\n contentClassName?: string;\n}\n\nfunction resolvePopoverMobileSheet(\n mobileOptions: PopoverMobileSheetOptions | undefined,\n) {\n return {\n sheet: mobileOptions?.sheet ?? false,\n title: mobileOptions?.title,\n sheetExtraClassName: mobileOptions?.className,\n contentClassName: mobileOptions?.contentClassName,\n };\n}\n\nexport interface PopoverMobileCloseProps\n extends React.ButtonHTMLAttributes<HTMLButtonElement> {}\n\n/**\n * Dismiss control for the mobile bottom-sheet popover. Styling matches\n * {@link DialogCloseButton} (circular hit target, X icon).\n */\nexport const PopoverMobileClose = React.forwardRef<\n HTMLButtonElement,\n PopoverMobileCloseProps\n>(({ className, type = \"button\", ...props }, ref) => {\n return (\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 {...props}\n >\n <X className=\"size-5.5\" />\n <span className=\"sr-only\">Close</span>\n </button>\n );\n});\nPopoverMobileClose.displayName = \"PopoverMobileClose\";\n\ninterface PopoverMobileBottomSheetPortalProps extends Omit<\n React.HTMLAttributes<HTMLDivElement>,\n \"ref\"\n> {\n children: React.ReactNode;\n open: boolean;\n isAnimating: boolean;\n slideEntrance: boolean;\n slideOffsetPx: number;\n sheetTitle?: string;\n sheetExtraClassName?: string;\n contentClassName?: string;\n onRequestClose: () => void;\n menuRef: React.RefObject<HTMLDivElement | null>;\n /** When `false`, scrim taps do not close (matches `closeOnClickOutside={false}`). */\n dismissOnBackdropPress?: boolean;\n}\n\nfunction PopoverMobileBottomSheetPortal({\n open,\n isAnimating,\n slideEntrance,\n slideOffsetPx,\n sheetTitle,\n sheetExtraClassName,\n contentClassName,\n onRequestClose,\n menuRef,\n dismissOnBackdropPress = true,\n children,\n className,\n style,\n ...panelProps\n}: PopoverMobileBottomSheetPortalProps) {\n const sheetMotion = open\n ? POPOVER_MOBILE_SHEET_ENTRY_EASING\n : POPOVER_MOBILE_SHEET_EXIT_EASING;\n const sheetHiddenTransform = slideEntrance\n ? `translateY(${slideOffsetPx}px)`\n : \"translateY(100%)\";\n\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 transitionProperty: \"opacity\",\n transitionDuration: `${POPOVER_MOBILE_SHEET_MOTION_MS}ms`,\n transitionTimingFunction: sheetMotion,\n }}\n onClick={dismissOnBackdropPress ? onRequestClose : undefined}\n aria-hidden\n />\n <div\n {...panelProps}\n ref={menuRef}\n className={cn(\n // Panel chrome + padding rhythm matches `DropdownMobileBottomSheetPortal`.\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 sheetExtraClassName,\n className,\n )}\n style={{\n transform: isAnimating ? \"translateY(0)\" : sheetHiddenTransform,\n opacity: isAnimating ? 1 : 0,\n transitionProperty: \"transform, opacity\",\n transitionDuration: `${POPOVER_MOBILE_SHEET_MOTION_MS}ms`,\n transitionTimingFunction: sheetMotion,\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 <PopoverMobileClose\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 px-4 pt-3\",\n contentClassName,\n \"pb-[calc(5rem+env(safe-area-inset-bottom,0px))]\",\n )}\n >\n {children}\n </div>\n </div>\n </div>,\n document.body,\n );\n}\n\n//////////////////////////////////////////////// Content\n\ntype Side = \"top\" | \"right\" | \"bottom\" | \"left\";\ntype Align = \"start\" | \"center\" | \"end\";\n\ninterface PopoverContentProps extends React.HTMLAttributes<HTMLDivElement> {\n /** Which side of the trigger to render on */\n side?: Side;\n /** Alignment along the cross-axis */\n align?: Align;\n /** Gap between trigger and popover in px */\n offset?: number;\n /** Show a small arrow pointing to the trigger */\n showArrow?: boolean;\n /** Close when clicking outside */\n closeOnClickOutside?: boolean;\n /** Close when Escape key is pressed */\n closeOnEscape?: boolean;\n /** Animation duration in ms */\n duration?: number;\n /** Minimum distance from the viewport edge in px */\n viewportPadding?: number;\n /** Portal container – defaults to document.body */\n container?: HTMLElement | null;\n /** Width of the popover. 'trigger' matches the trigger width. */\n width?: \"auto\" | \"trigger\" | number;\n /**\n * Narrow-viewport (≤1024px) bottom sheet — same options as dropdown\n * `mobileOptions`, except `sheet` defaults to `false`.\n */\n mobileOptions?: PopoverMobileSheetOptions;\n /**\n * Mobile bottom sheet only. When `true` (default), panel motion matches Dialog\n * `slideEntrance`; when `false`, uses full `translateY(100%)`.\n */\n slideEntrance?: boolean;\n /** Mobile sheet only; defaults to 120px (same as dropdown / dialog full sheet). */\n slideEntranceOffsetPx?: number;\n}\n\ninterface Position {\n top: number;\n left: number;\n side: Side;\n maxHeight?: number;\n}\n\nfunction computePosition(\n trigger: HTMLElement,\n popover: HTMLElement,\n side: Side,\n align: Align,\n offset: number,\n viewportPadding: number,\n): Position {\n const triggerRect = trigger.getBoundingClientRect();\n /** Layout box — not affected by exit/enter `transform: scale()`, unlike `getBoundingClientRect()`. */\n const pw = popover.offsetWidth;\n const ph = popover.offsetHeight;\n const contentHeight = popover.scrollHeight;\n const vw = window.innerWidth;\n const vh = window.innerHeight;\n const pad = viewportPadding;\n\n let top = 0;\n let left = 0;\n let effectiveSide: Side = side;\n let maxHeight: number | undefined;\n\n /** Viewport-space coords — pairs with `position: fixed` on the portal root. */\n const placeVertical = (s: Side, height: number) => {\n if (s === \"bottom\") top = triggerRect.bottom + offset;\n else top = triggerRect.top - height - offset;\n if (align === \"start\") left = triggerRect.left;\n else if (align === \"end\") left = triggerRect.right - pw;\n else left = triggerRect.left + triggerRect.width / 2 - pw / 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 = triggerRect.right + offset;\n top =\n align === \"start\"\n ? triggerRect.top\n : align === \"end\"\n ? triggerRect.bottom - ph\n : triggerRect.top + triggerRect.height / 2 - ph / 2;\n break;\n case \"left\":\n left = triggerRect.left - pw - offset;\n top =\n align === \"start\"\n ? triggerRect.top\n : align === \"end\"\n ? triggerRect.bottom - ph\n : triggerRect.top + triggerRect.height / 2 - ph / 2;\n break;\n }\n };\n\n place(side);\n\n const spaceBelow = Math.max(0, vh - pad - triggerRect.bottom - offset);\n const spaceAbove = Math.max(0, triggerRect.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 < POPOVER_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 + pw > vw - pad) {\n const flippedLeft = triggerRect.left - pw - offset;\n if (flippedLeft >= pad) {\n effectiveSide = \"left\";\n left = flippedLeft;\n }\n } else if (side === \"left\" && left < pad) {\n const flippedLeft = triggerRect.right + offset;\n if (flippedLeft + pw <= vw - pad) {\n effectiveSide = \"right\";\n left = flippedLeft;\n }\n }\n\n return { top, left, side: effectiveSide, maxHeight };\n}\n\nconst ARROW_SIZE = 6;\n\nexport const PopoverContent: React.FC<PopoverContentProps> = ({\n children,\n side = \"bottom\",\n align = \"center\",\n offset = 10,\n showArrow = false,\n closeOnClickOutside = true,\n closeOnEscape = true,\n duration = 80,\n viewportPadding = 8,\n container,\n width = \"auto\",\n mobileOptions,\n slideEntrance = true,\n slideEntranceOffsetPx: slideEntranceOffsetPxProp,\n className,\n style,\n ...props\n}) => {\n const { open, setOpen, triggerRef } = usePopover();\n const isMobile = usePopoverIsMobile(POPOVER_MOBILE_SHEET_MAX_PX + 1);\n const resolvedMobile = useMemo(\n () => resolvePopoverMobileSheet(mobileOptions),\n [mobileOptions],\n );\n const sheetMode = isMobile && resolvedMobile.sheet;\n const slideOffsetPx = useMemo(\n () =>\n slideEntranceOffsetPxProp ??\n POPOVER_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX,\n [slideEntranceOffsetPxProp],\n );\n const closeDuration = sheetMode\n ? POPOVER_MOBILE_SHEET_MOTION_MS\n : duration;\n\n const [shouldRender, setShouldRender] = useState(false);\n const [isAnimating, setIsAnimating] = useState(false);\n const [position, setPosition] = useState<Position>({\n top: -9999,\n left: -9999,\n side,\n });\n const [triggerWidth, setTriggerWidth] = useState<number>(0);\n const popoverRef = useRef<HTMLDivElement>(null);\n\n const closePopover = useCallback(() => setOpen(false), [setOpen]);\n\n /** Same open/close sequencing as dropdown mobile sheet / `DialogContent`. */\n useEffect(() => {\n if (open) {\n setShouldRender(true);\n } else {\n setIsAnimating(false);\n const timer = setTimeout(() => setShouldRender(false), closeDuration);\n return () => clearTimeout(timer);\n }\n }, [open, closeDuration]);\n\n useEffect(() => {\n if (!shouldRender || !open) return;\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 // Position calculation – runs after render so the popover has dimensions.\n // Skip while `open` is false: panel still mounts for the exit animation, but\n // `getBoundingClientRect` on the root would reflect `scale()` and re-trigger a jump.\n useLayoutEffect(() => {\n if (\n !shouldRender ||\n !open ||\n sheetMode ||\n !triggerRef.current ||\n !popoverRef.current\n )\n return;\n\n const update = () => {\n if (!triggerRef.current || !popoverRef.current) return;\n setTriggerWidth(triggerRef.current.getBoundingClientRect().width);\n const pos = computePosition(\n triggerRef.current,\n popoverRef.current,\n side,\n align,\n offset,\n viewportPadding,\n );\n setPosition(pos);\n };\n\n update();\n window.addEventListener(\"resize\", update);\n window.addEventListener(\"scroll\", update, true);\n return () => {\n window.removeEventListener(\"resize\", update);\n window.removeEventListener(\"scroll\", update, true);\n };\n }, [shouldRender, open, sheetMode, side, align, offset, viewportPadding]);\n\n useEffect(() => {\n if (!shouldRender || !open || sheetMode || position.maxHeight == null) return;\n const panel = popoverRef.current;\n if (!panel) return;\n const onWheel = (e: WheelEvent) => preventPopoverWheelChain(panel, e);\n panel.addEventListener(\"wheel\", onWheel, { passive: false });\n return () => panel.removeEventListener(\"wheel\", onWheel);\n }, [shouldRender, open, sheetMode, position.maxHeight]);\n\n // Body scroll lock (mobile sheet)\n useEffect(() => {\n if (open && sheetMode) {\n document.body.style.overflow = \"hidden\";\n }\n return () => {\n document.body.style.overflow = \"\";\n };\n }, [open, sheetMode]);\n\n // Close on outside click (floating only — sheet uses scrim `dismissOnBackdropPress`)\n useEffect(() => {\n if (!open || !closeOnClickOutside || sheetMode) return;\n const handler = (e: MouseEvent) => {\n const target = e.target as Node;\n if (\n popoverRef.current?.contains(target) ||\n triggerRef.current?.contains(target)\n )\n return;\n setOpen(false);\n };\n document.addEventListener(\"mousedown\", handler);\n return () => document.removeEventListener(\"mousedown\", handler);\n }, [open, closeOnClickOutside, sheetMode, setOpen, triggerRef]);\n\n // Close on Escape\n useEffect(() => {\n if (!open || !closeOnEscape) return;\n const handler = (e: KeyboardEvent) => {\n if (e.key === \"Escape\") setOpen(false);\n };\n window.addEventListener(\"keydown\", handler);\n return () => window.removeEventListener(\"keydown\", handler);\n }, [open, closeOnEscape, setOpen]);\n\n if (!shouldRender) return null;\n\n if (sheetMode && typeof document !== \"undefined\") {\n return (\n <PopoverMobileBottomSheetPortal\n {...props}\n open={open}\n isAnimating={isAnimating}\n slideEntrance={slideEntrance}\n slideOffsetPx={slideOffsetPx}\n sheetTitle={resolvedMobile.title}\n sheetExtraClassName={resolvedMobile.sheetExtraClassName}\n contentClassName={cn(resolvedMobile.contentClassName, className)}\n onRequestClose={closePopover}\n dismissOnBackdropPress={closeOnClickOutside}\n menuRef={popoverRef}\n role=\"dialog\"\n aria-modal=\"true\"\n tabIndex={-1}\n className={undefined}\n style={style}\n data-slot=\"popover-content\"\n >\n {children}\n </PopoverMobileBottomSheetPortal>\n );\n }\n\n // Animation direction by side\n const transformOrigin: Record<Side, string> = {\n bottom: \"top center\",\n top: \"bottom center\",\n left: \"right center\",\n right: \"left center\",\n };\n\n const hiddenTransform: Record<Side, string> = {\n bottom: \"translateY(-6px) scale(0.97)\",\n top: \"translateY(6px) scale(0.97)\",\n left: \"translateX(6px) scale(0.97)\",\n right: \"translateX(-6px) scale(0.97)\",\n };\n\n const resolvedWidth =\n width === \"trigger\" ? triggerWidth : width === \"auto\" ? undefined : width;\n\n // Arrow position relative to popover\n const arrowStyles = (): React.CSSProperties => {\n const base: React.CSSProperties = {\n position: \"absolute\",\n width: 0,\n height: 0,\n pointerEvents: \"none\",\n };\n switch (position.side) {\n case \"bottom\":\n return {\n ...base,\n top: -ARROW_SIZE,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n borderLeft: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid var(--border)`,\n };\n case \"top\":\n return {\n ...base,\n bottom: -ARROW_SIZE,\n left: \"50%\",\n transform: \"translateX(-50%)\",\n borderLeft: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid transparent`,\n borderTop: `${ARROW_SIZE}px solid var(--border)`,\n };\n case \"right\":\n return {\n ...base,\n left: -ARROW_SIZE,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n borderTop: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid transparent`,\n borderRight: `${ARROW_SIZE}px solid var(--border)`,\n };\n case \"left\":\n return {\n ...base,\n right: -ARROW_SIZE,\n top: \"50%\",\n transform: \"translateY(-50%)\",\n borderTop: `${ARROW_SIZE}px solid transparent`,\n borderBottom: `${ARROW_SIZE}px solid transparent`,\n borderLeft: `${ARROW_SIZE}px solid var(--border)`,\n };\n }\n };\n\n const resolvedContainer =\n container !== undefined\n ? container\n : typeof document !== \"undefined\"\n ? document.body\n : null;\n\n if (!resolvedContainer) return null;\n\n return createPortal(\n <div\n {...props}\n ref={popoverRef}\n className={cn(\n \"bg-background border-primary/10 fixed z-50 rounded-xl border shadow-xl outline-none\",\n className,\n position.maxHeight != null ? \"overflow-y-auto overscroll-contain\" : \"overflow-hidden\",\n )}\n data-slot=\"popover-content\"\n style={{\n position: \"fixed\",\n top: position.top,\n left: position.left,\n width: resolvedWidth,\n maxHeight: position.maxHeight,\n transformOrigin: transformOrigin[position.side],\n transform: isAnimating ? \"none\" : hiddenTransform[position.side],\n opacity: isAnimating ? 1 : 0,\n transition: `opacity ${duration}ms ease, transform ${duration}ms ease`,\n ...style,\n }}\n >\n {showArrow && <div style={arrowStyles()} />}\n {children}\n </div>,\n resolvedContainer,\n );\n};\n\n//////////////////////////////////////////////// Sub-components\n\nexport const PopoverHeader: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n}) => (\n <div\n className={cn(\n \"border-primary/10 flex flex-col space-y-1 border-b px-4 py-3\",\n className,\n )}\n {...props}\n />\n);\n\nexport const PopoverFooter: React.FC<React.HTMLAttributes<HTMLDivElement>> = ({\n className,\n ...props\n}) => (\n <div\n className={cn(\n \"border-primary/10 flex flex-row justify-end gap-2 border-t px-4 py-3\",\n className,\n )}\n {...props}\n />\n);\n\nexport const PopoverTitle: React.FC<\n React.HTMLAttributes<HTMLHeadingElement>\n> = ({ className, ...props }) => (\n <h4\n className={cn(\"text-primary text-sm leading-none font-semibold\", className)}\n {...props}\n />\n);\n\nexport const PopoverDescription: React.FC<\n React.HTMLAttributes<HTMLParagraphElement>\n> = ({ className, ...props }) => (\n <p className={cn(\"text-muted-foreground text-xs\", className)} {...props} />\n);\n"]}
|
package/dist/react/select.js
CHANGED
|
@@ -155,9 +155,6 @@ function computeMenuPosition(trigger, menu, side, align, offset, pad) {
|
|
|
155
155
|
left = flip;
|
|
156
156
|
}
|
|
157
157
|
}
|
|
158
|
-
const layoutHeight = maxHeight ?? contentHeight;
|
|
159
|
-
left = Math.max(sx + pad, Math.min(left, vw + sx - mr.width - pad));
|
|
160
|
-
top = Math.max(sy + pad, Math.min(top, vh + sy - layoutHeight - pad));
|
|
161
158
|
return { top, left, side: effectiveSide, maxHeight };
|
|
162
159
|
}
|
|
163
160
|
function useNarrowSheetViewport(breakpoint = 1025) {
|
package/dist/react/select.js.map
CHANGED
|
@@ -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/** 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
|
+
{"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 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"]}
|
|
@@ -348,9 +348,6 @@ function computeMenuPosition(trigger, menu, side, align, offset, pad) {
|
|
|
348
348
|
left = flip;
|
|
349
349
|
}
|
|
350
350
|
}
|
|
351
|
-
const layoutHeight = maxHeight ?? contentHeight;
|
|
352
|
-
left = Math.max(sx + pad, Math.min(left, vw + sx - mr.width - pad));
|
|
353
|
-
top = Math.max(sy + pad, Math.min(top, vh + sy - layoutHeight - pad));
|
|
354
351
|
return { top, left, side: effectiveSide, maxHeight };
|
|
355
352
|
}
|
|
356
353
|
function useNarrowSheetViewport(breakpoint = 1025) {
|