@avenue-ticketing/ui 0.9.0 → 0.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -1 +1 @@
1
- {"version":3,"sources":["../../src/lib/utils.ts","../../src/react/button.tsx","../../src/react/pagination.tsx","../../src/react/select.tsx","../../src/react/table-pagination.tsx"],"names":["React","jsx","Pagination","React3","useCallback","useMemo","jsxs","SelectTrigger","React4"],"mappings":"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","file":"table-pagination.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 { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Button, type ButtonProps } from \"./button\";\n\nexport type PaginationMeta = {\n currentPage: number;\n totalItems: number;\n itemsPerPage: number;\n /** omit to derive `ceil(totalItems / itemsPerPage)` (minimum 1) */\n totalPages?: number;\n};\n\nexport type PaginationProps = {\n meta: PaginationMeta;\n onPageChange?: (page: number) => void;\n className?: string;\n /** max page numbers in the sliding window (excluding first/last when ellipses show; default 3) */\n maxVisibleButtons?: number;\n disabled?: boolean;\n /**\n * density preset → resolved `Button` size for every control (`xs` → `default`;\n * `default` / `lg` → `lg`) so chevrons and page cells share one hit grid.\n */\n size?: ButtonProps[\"size\"];\n /** same as `Button` `rounded`; pagination defaults to `full` */\n rounded?: NonNullable<ButtonProps[\"rounded\"]>;\n};\n\nconst PaginationInner = React.forwardRef<HTMLDivElement, PaginationProps>(\n function Pagination(\n {\n meta,\n onPageChange,\n className,\n maxVisibleButtons = 3,\n disabled = false,\n size = \"default\",\n rounded = \"full\",\n },\n ref,\n ) {\n const handlePageChange = React.useCallback(\n (page: number) => {\n onPageChange?.(page);\n },\n [onPageChange],\n );\n\n const totalPages = React.useMemo(() => {\n const totalItems = Math.max(0, Number(meta.totalItems) || 0);\n const itemsPerPage = Math.max(1, Number(meta.itemsPerPage) || 16);\n if (meta.totalPages != null && Number.isFinite(meta.totalPages)) {\n return Math.max(1, Math.floor(Number(meta.totalPages)));\n }\n return Math.max(1, Math.ceil(totalItems / itemsPerPage));\n }, [meta.totalItems, meta.itemsPerPage, meta.totalPages]);\n\n const currentPage = React.useMemo(\n () => Math.max(1, Number(meta.currentPage) || 1),\n [meta.currentPage],\n );\n\n const { endPage, adjustedStart } = React.useMemo(() => {\n const sp = Math.max(1, currentPage - Math.floor(maxVisibleButtons / 2));\n const ep = Math.min(totalPages, sp + maxVisibleButtons - 1);\n const adj =\n ep - sp + 1 < maxVisibleButtons ? Math.max(1, ep - maxVisibleButtons + 1) : sp;\n return { endPage: ep, adjustedStart: adj };\n }, [currentPage, totalPages, maxVisibleButtons]);\n\n const middlePageNumbers = React.useMemo(\n () =>\n Array.from({ length: endPage - adjustedStart + 1 }, (_, i) => adjustedStart + i),\n [endPage, adjustedStart],\n );\n\n const navButtonSize = React.useMemo(\n (): NonNullable<ButtonProps[\"size\"]> => (size === \"xs\" ? \"default\" : \"lg\"),\n [size],\n );\n\n const ellipsisClassName = React.useMemo(\n () =>\n cn(\n \"inline-flex shrink-0 items-center justify-center\",\n navButtonSize === \"lg\"\n ? \"size-11 min-h-11 min-w-11\"\n : \"size-10 min-h-10 min-w-10\",\n rounded === \"full\"\n ? \"rounded-full\"\n : rounded === \"lg\"\n ? \"rounded-lg\"\n : \"rounded-md\",\n ),\n [navButtonSize, rounded],\n );\n\n const gapIconClassName = React.useMemo(\n () =>\n cn(\n \"mx-auto shrink-0 text-primary/45\",\n navButtonSize === \"lg\" ? \"size-[18px]\" : \"size-4\",\n ),\n [navButtonSize],\n );\n\n if (totalPages <= 1) return null;\n\n return (\n <div ref={ref} className={cn(\"flex w-full justify-center\", className)}>\n <nav\n role=\"navigation\"\n aria-label=\"Pagination\"\n className=\"text-primary flex items-center justify-center gap-0.5 text-base font-medium tabular-nums tracking-tight\"\n >\n <Button\n type=\"button\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"border-0 tracking-tight focus-visible:border-transparent focus-visible:ring-0\"\n disabled={disabled || currentPage <= 1}\n onClick={() => handlePageChange(currentPage - 1)}\n aria-label=\"Previous page\"\n >\n <ChevronLeft aria-hidden className=\"size-5 shrink-0 mr-0.5\" />\n </Button>\n <div className=\"flex items-center gap-0.5\">\n {adjustedStart > 1 && (\n <>\n {currentPage === 1 ? (\n <Button\n type=\"button\"\n variant=\"primary\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"tracking-tight\"\n aria-current=\"page\"\n tabIndex={-1}\n >\n <span className=\"tabular-nums\">{1}</span>\n </Button>\n ) : (\n <Button\n type=\"button\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"border-none tracking-tight\"\n disabled={disabled}\n onClick={() => handlePageChange(1)}\n aria-label=\"Go to page 1\"\n >\n <span className=\"tabular-nums\">1</span>\n </Button>\n )}\n {adjustedStart > 2 && (\n <span aria-hidden className={ellipsisClassName}>\n <MoreHorizontal className={gapIconClassName} aria-hidden />\n </span>\n )}\n </>\n )}\n {middlePageNumbers.map((page) =>\n currentPage === page ? (\n <Button\n key={page}\n type=\"button\"\n variant=\"primary\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"tracking-tight\"\n aria-current=\"page\"\n tabIndex={-1}\n >\n <span className=\"tabular-nums\">{page}</span>\n </Button>\n ) : (\n <Button\n key={page}\n type=\"button\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"border-none tracking-tight\"\n disabled={disabled}\n onClick={() => handlePageChange(page)}\n aria-label={`Go to page ${page}`}\n >\n <span className=\"tabular-nums\">{page}</span>\n </Button>\n ),\n )}\n {endPage < totalPages && (\n <>\n {endPage < totalPages - 1 && (\n <span aria-hidden className={ellipsisClassName}>\n <MoreHorizontal className={gapIconClassName} aria-hidden />\n </span>\n )}\n {currentPage === totalPages ? (\n <Button\n type=\"button\"\n variant=\"primary\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"tracking-tight\"\n aria-current=\"page\"\n tabIndex={-1}\n >\n <span className=\"tabular-nums\">{totalPages}</span>\n </Button>\n ) : (\n <Button\n type=\"button\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"border-none tracking-tight\"\n disabled={disabled}\n onClick={() => handlePageChange(totalPages)}\n aria-label={`Go to page ${totalPages}`}\n >\n <span className=\"tabular-nums\">{totalPages}</span>\n </Button>\n )}\n </>\n )}\n </div>\n <Button\n type=\"button\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"border-0 tracking-tight focus-visible:border-transparent focus-visible:ring-0\"\n disabled={disabled || currentPage >= totalPages}\n onClick={() => handlePageChange(currentPage + 1)}\n aria-label=\"Next page\"\n >\n <ChevronRight aria-hidden className=\"size-5 shrink-0 ml-0.5\" />\n </Button>\n </nav>\n </div>\n );\n },\n);\n\nPaginationInner.displayName = \"Pagination\";\n\nexport const Pagination = React.memo(PaginationInner);\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","\"use client\";\n\nimport { Loader2 } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Pagination, type PaginationMeta } from \"./pagination\";\nimport {\n Select,\n SelectChevron,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\n\nexport type TablePaginationProps = {\n currentPage?: number;\n totalPages?: number;\n paginationItemsToDisplay?: number;\n currentItems?: number;\n totalItems?: number;\n onPageChange: (page: number) => void;\n onLimitChange: (limit: number) => void;\n className?: string;\n};\n\nexport function TablePagination({\n currentPage = 1,\n totalPages = 1,\n paginationItemsToDisplay = 10,\n currentItems,\n totalItems,\n onPageChange,\n onLimitChange,\n className,\n}: TablePaginationProps) {\n const itemsPerPage = Math.max(1, paginationItemsToDisplay);\n\n const paginationMeta = React.useMemo<PaginationMeta>(\n () => ({\n currentPage,\n totalItems: totalItems ?? Math.max(0, totalPages * itemsPerPage),\n itemsPerPage,\n totalPages,\n }),\n [currentPage, totalItems, totalPages, itemsPerPage],\n );\n\n return (\n <div\n className={cn(\n \"flex max-sm:flex-col items-center justify-between gap-3\",\n className,\n )}\n >\n <p\n className=\"text-primary/60 flex-1 text-sm whitespace-nowrap\"\n aria-live=\"polite\"\n >\n <span className=\"ml-2\">\n Showing{\" \"}\n <span className=\"text-primary\">\n {currentItems ?? paginationItemsToDisplay}\n </span>{\" \"}\n out of{\" \"}\n <span className=\"text-primary\">\n {totalItems ?? (\n <Loader2 className=\"mb-[3px] inline h-4 w-4 animate-spin\" />\n )}\n </span>{\" \"}\n results\n </span>\n </p>\n\n <div className=\"grow\">\n <Pagination meta={paginationMeta} onPageChange={onPageChange} />\n </div>\n\n <div className=\"flex flex-1 justify-end\">\n <Select\n value={paginationItemsToDisplay.toString()}\n onValueChange={(value) => {\n onLimitChange(parseInt(value, 10));\n }}\n >\n <SelectTrigger className=\"w-fit rounded-full whitespace-nowrap\">\n <SelectValue placeholder=\"Select number of results\" />\n <SelectChevron className=\"opacity-60\" />\n </SelectTrigger>\n <SelectContent>\n {[10, 25, 50, 100].map((pageSize) => (\n <SelectItem key={pageSize} value={pageSize.toString()}>\n {pageSize} / page\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n );\n}\n\nexport default TablePagination;\n"]}
1
+ {"version":3,"sources":["../../src/lib/utils.ts","../../src/react/button.tsx","../../src/react/pagination.tsx","../../src/lib/typeahead.ts","../../src/react/select.tsx","../../src/react/table-pagination.tsx"],"names":["React","jsx","Pagination","React3","useCallback","useMemo","jsxs","SelectTrigger","React4"],"mappings":"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","file":"table-pagination.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 { ChevronLeft, ChevronRight, MoreHorizontal } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Button, type ButtonProps } from \"./button\";\n\nexport type PaginationMeta = {\n currentPage: number;\n totalItems: number;\n itemsPerPage: number;\n /** omit to derive `ceil(totalItems / itemsPerPage)` (minimum 1) */\n totalPages?: number;\n};\n\nexport type PaginationProps = {\n meta: PaginationMeta;\n onPageChange?: (page: number) => void;\n className?: string;\n /** max page numbers in the sliding window (excluding first/last when ellipses show; default 3) */\n maxVisibleButtons?: number;\n disabled?: boolean;\n /**\n * density preset → resolved `Button` size for every control (`xs` → `default`;\n * `default` / `lg` → `lg`) so chevrons and page cells share one hit grid.\n */\n size?: ButtonProps[\"size\"];\n /** same as `Button` `rounded`; pagination defaults to `full` */\n rounded?: NonNullable<ButtonProps[\"rounded\"]>;\n};\n\nconst PaginationInner = React.forwardRef<HTMLDivElement, PaginationProps>(\n function Pagination(\n {\n meta,\n onPageChange,\n className,\n maxVisibleButtons = 3,\n disabled = false,\n size = \"default\",\n rounded = \"full\",\n },\n ref,\n ) {\n const handlePageChange = React.useCallback(\n (page: number) => {\n onPageChange?.(page);\n },\n [onPageChange],\n );\n\n const totalPages = React.useMemo(() => {\n const totalItems = Math.max(0, Number(meta.totalItems) || 0);\n const itemsPerPage = Math.max(1, Number(meta.itemsPerPage) || 16);\n if (meta.totalPages != null && Number.isFinite(meta.totalPages)) {\n return Math.max(1, Math.floor(Number(meta.totalPages)));\n }\n return Math.max(1, Math.ceil(totalItems / itemsPerPage));\n }, [meta.totalItems, meta.itemsPerPage, meta.totalPages]);\n\n const currentPage = React.useMemo(\n () => Math.max(1, Number(meta.currentPage) || 1),\n [meta.currentPage],\n );\n\n const { endPage, adjustedStart } = React.useMemo(() => {\n const sp = Math.max(1, currentPage - Math.floor(maxVisibleButtons / 2));\n const ep = Math.min(totalPages, sp + maxVisibleButtons - 1);\n const adj =\n ep - sp + 1 < maxVisibleButtons ? Math.max(1, ep - maxVisibleButtons + 1) : sp;\n return { endPage: ep, adjustedStart: adj };\n }, [currentPage, totalPages, maxVisibleButtons]);\n\n const middlePageNumbers = React.useMemo(\n () =>\n Array.from({ length: endPage - adjustedStart + 1 }, (_, i) => adjustedStart + i),\n [endPage, adjustedStart],\n );\n\n const navButtonSize = React.useMemo(\n (): NonNullable<ButtonProps[\"size\"]> => (size === \"xs\" ? \"default\" : \"lg\"),\n [size],\n );\n\n const ellipsisClassName = React.useMemo(\n () =>\n cn(\n \"inline-flex shrink-0 items-center justify-center\",\n navButtonSize === \"lg\"\n ? \"size-11 min-h-11 min-w-11\"\n : \"size-10 min-h-10 min-w-10\",\n rounded === \"full\"\n ? \"rounded-full\"\n : rounded === \"lg\"\n ? \"rounded-lg\"\n : \"rounded-md\",\n ),\n [navButtonSize, rounded],\n );\n\n const gapIconClassName = React.useMemo(\n () =>\n cn(\n \"mx-auto shrink-0 text-primary/45\",\n navButtonSize === \"lg\" ? \"size-[18px]\" : \"size-4\",\n ),\n [navButtonSize],\n );\n\n if (totalPages <= 1) return null;\n\n return (\n <div ref={ref} className={cn(\"flex w-full justify-center\", className)}>\n <nav\n role=\"navigation\"\n aria-label=\"Pagination\"\n className=\"text-primary flex items-center justify-center gap-0.5 text-base font-medium tabular-nums tracking-tight\"\n >\n <Button\n type=\"button\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"border-0 tracking-tight focus-visible:border-transparent focus-visible:ring-0\"\n disabled={disabled || currentPage <= 1}\n onClick={() => handlePageChange(currentPage - 1)}\n aria-label=\"Previous page\"\n >\n <ChevronLeft aria-hidden className=\"size-5 shrink-0 mr-0.5\" />\n </Button>\n <div className=\"flex items-center gap-0.5\">\n {adjustedStart > 1 && (\n <>\n {currentPage === 1 ? (\n <Button\n type=\"button\"\n variant=\"primary\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"tracking-tight\"\n aria-current=\"page\"\n tabIndex={-1}\n >\n <span className=\"tabular-nums\">{1}</span>\n </Button>\n ) : (\n <Button\n type=\"button\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"border-none tracking-tight\"\n disabled={disabled}\n onClick={() => handlePageChange(1)}\n aria-label=\"Go to page 1\"\n >\n <span className=\"tabular-nums\">1</span>\n </Button>\n )}\n {adjustedStart > 2 && (\n <span aria-hidden className={ellipsisClassName}>\n <MoreHorizontal className={gapIconClassName} aria-hidden />\n </span>\n )}\n </>\n )}\n {middlePageNumbers.map((page) =>\n currentPage === page ? (\n <Button\n key={page}\n type=\"button\"\n variant=\"primary\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"tracking-tight\"\n aria-current=\"page\"\n tabIndex={-1}\n >\n <span className=\"tabular-nums\">{page}</span>\n </Button>\n ) : (\n <Button\n key={page}\n type=\"button\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"border-none tracking-tight\"\n disabled={disabled}\n onClick={() => handlePageChange(page)}\n aria-label={`Go to page ${page}`}\n >\n <span className=\"tabular-nums\">{page}</span>\n </Button>\n ),\n )}\n {endPage < totalPages && (\n <>\n {endPage < totalPages - 1 && (\n <span aria-hidden className={ellipsisClassName}>\n <MoreHorizontal className={gapIconClassName} aria-hidden />\n </span>\n )}\n {currentPage === totalPages ? (\n <Button\n type=\"button\"\n variant=\"primary\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"tracking-tight\"\n aria-current=\"page\"\n tabIndex={-1}\n >\n <span className=\"tabular-nums\">{totalPages}</span>\n </Button>\n ) : (\n <Button\n type=\"button\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"border-none tracking-tight\"\n disabled={disabled}\n onClick={() => handlePageChange(totalPages)}\n aria-label={`Go to page ${totalPages}`}\n >\n <span className=\"tabular-nums\">{totalPages}</span>\n </Button>\n )}\n </>\n )}\n </div>\n <Button\n type=\"button\"\n rounded={rounded}\n iconOnly\n size={navButtonSize}\n className=\"border-0 tracking-tight focus-visible:border-transparent focus-visible:ring-0\"\n disabled={disabled || currentPage >= totalPages}\n onClick={() => handlePageChange(currentPage + 1)}\n aria-label=\"Next page\"\n >\n <ChevronRight aria-hidden className=\"size-5 shrink-0 ml-0.5\" />\n </Button>\n </nav>\n </div>\n );\n },\n);\n\nPaginationInner.displayName = \"Pagination\";\n\nexport const Pagination = React.memo(PaginationInner);\n","/** How long typed characters accumulate before the search buffer resets. */\nexport const TYPEAHEAD_TIMEOUT_MS = 500;\n\nexport type TypeaheadState = {\n search: string;\n timer: ReturnType<typeof setTimeout> | null;\n};\n\nexport function createTypeaheadState(): TypeaheadState {\n return { search: \"\", timer: null };\n}\n\nexport function resetTypeahead(state: TypeaheadState): void {\n state.search = \"\";\n if (state.timer) {\n clearTimeout(state.timer);\n state.timer = null;\n }\n}\n\nexport function getItemLabel(item: HTMLElement): string {\n const aria = item.getAttribute(\"aria-label\")?.trim();\n if (aria) return aria;\n\n const marked = item.querySelector<HTMLElement>(\"[data-menu-label]\");\n if (marked?.textContent) return marked.textContent.replace(/\\s+/g, \" \").trim();\n\n return (item.textContent ?? \"\").replace(/\\s+/g, \" \").trim();\n}\n\nfunction normalizeSearch(value: string): string {\n return value.trim().toLocaleLowerCase();\n}\n\nfunction isTypeaheadTarget(target: EventTarget | null): boolean {\n if (!(target instanceof HTMLElement)) return true;\n if (target.isContentEditable) return false;\n const tag = target.tagName;\n return tag !== \"INPUT\" && tag !== \"TEXTAREA\" && tag !== \"SELECT\";\n}\n\n/**\n * Focus the next matching item for printable keys.\n * Returns `true` when the key was consumed.\n */\nexport function handleTypeaheadKeyDown(\n event: KeyboardEvent,\n items: HTMLElement[],\n state: TypeaheadState,\n options?: { enabled?: boolean; timeoutMs?: number },\n): boolean {\n if (options?.enabled === false || items.length === 0) return false;\n if (event.ctrlKey || event.metaKey || event.altKey) return false;\n if (event.key.length !== 1 || !isTypeaheadTarget(event.target)) return false;\n\n event.preventDefault();\n\n const timeoutMs = options?.timeoutMs ?? TYPEAHEAD_TIMEOUT_MS;\n const char = event.key;\n const prevSearch = state.search;\n const repeatSingleChar =\n prevSearch.length === 1 && prevSearch === char;\n\n if (repeatSingleChar) {\n state.search = prevSearch;\n } else {\n state.search = prevSearch + char;\n }\n\n if (state.timer) clearTimeout(state.timer);\n state.timer = setTimeout(() => {\n state.search = \"\";\n state.timer = null;\n }, timeoutMs);\n\n const labels = items.map((item) => normalizeSearch(getItemLabel(item)));\n let needle = normalizeSearch(state.search);\n\n let matches = items\n .map((item, index) => ({ item, index, label: labels[index]! }))\n .filter(({ label }) => label.startsWith(needle));\n\n if (matches.length === 0 && state.search.length > 1) {\n state.search = char;\n needle = normalizeSearch(char);\n matches = items\n .map((item, index) => ({ item, index, label: labels[index]! }))\n .filter(({ label }) => label.startsWith(needle));\n }\n\n if (matches.length === 0) return true;\n\n const focused = document.activeElement as HTMLElement | null;\n const focusedIndex = focused ? items.indexOf(focused) : -1;\n\n if (repeatSingleChar && focusedIndex !== -1) {\n const currentMatch = matches.findIndex(\n ({ index }) => index === focusedIndex,\n );\n if (currentMatch !== -1) {\n const next = matches[(currentMatch + 1) % matches.length];\n next?.item.focus();\n return true;\n }\n }\n\n if (focusedIndex !== -1) {\n const nextAfterFocus = matches.find(({ index }) => index > focusedIndex);\n if (nextAfterFocus) {\n nextAfterFocus.item.focus();\n return true;\n }\n }\n\n matches[0]?.item.focus();\n return true;\n}\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 {\n createTypeaheadState,\n handleTypeaheadKeyDown,\n resetTypeahead,\n} from \"../lib/typeahead\";\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-primary/4\",\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 /** Type characters to jump to matching options (default true). */\n typeahead?: 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 typeahead = 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 typeaheadStateRef = useRef(createTypeaheadState());\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) resetTypeahead(typeaheadStateRef.current);\n }, [open]);\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 handleTypeaheadKeyDown(e, items, typeaheadStateRef.current, {\n enabled: typeahead,\n });\n break;\n }\n };\n window.addEventListener(\"keydown\", onKey);\n return () => window.removeEventListener(\"keydown\", onKey);\n }, [open, closeOnEscape, loop, typeahead, 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\" data-menu-label>\n {children}\n </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","\"use client\";\n\nimport { Loader2 } from \"lucide-react\";\nimport * as React from \"react\";\n\nimport { cn } from \"../lib/utils\";\nimport { Pagination, type PaginationMeta } from \"./pagination\";\nimport {\n Select,\n SelectChevron,\n SelectContent,\n SelectItem,\n SelectTrigger,\n SelectValue,\n} from \"./select\";\n\nexport type TablePaginationProps = {\n currentPage?: number;\n totalPages?: number;\n paginationItemsToDisplay?: number;\n currentItems?: number;\n totalItems?: number;\n onPageChange: (page: number) => void;\n onLimitChange: (limit: number) => void;\n className?: string;\n};\n\nexport function TablePagination({\n currentPage = 1,\n totalPages = 1,\n paginationItemsToDisplay = 10,\n currentItems,\n totalItems,\n onPageChange,\n onLimitChange,\n className,\n}: TablePaginationProps) {\n const itemsPerPage = Math.max(1, paginationItemsToDisplay);\n\n const paginationMeta = React.useMemo<PaginationMeta>(\n () => ({\n currentPage,\n totalItems: totalItems ?? Math.max(0, totalPages * itemsPerPage),\n itemsPerPage,\n totalPages,\n }),\n [currentPage, totalItems, totalPages, itemsPerPage],\n );\n\n return (\n <div\n className={cn(\n \"flex max-sm:flex-col items-center justify-between gap-3\",\n className,\n )}\n >\n <p\n className=\"text-primary/60 flex-1 text-sm whitespace-nowrap\"\n aria-live=\"polite\"\n >\n <span className=\"ml-2\">\n Showing{\" \"}\n <span className=\"text-primary\">\n {currentItems ?? paginationItemsToDisplay}\n </span>{\" \"}\n out of{\" \"}\n <span className=\"text-primary\">\n {totalItems ?? (\n <Loader2 className=\"mb-[3px] inline h-4 w-4 animate-spin\" />\n )}\n </span>{\" \"}\n results\n </span>\n </p>\n\n <div className=\"grow\">\n <Pagination meta={paginationMeta} onPageChange={onPageChange} />\n </div>\n\n <div className=\"flex flex-1 justify-end\">\n <Select\n value={paginationItemsToDisplay.toString()}\n onValueChange={(value) => {\n onLimitChange(parseInt(value, 10));\n }}\n >\n <SelectTrigger className=\"w-fit rounded-full whitespace-nowrap\">\n <SelectValue placeholder=\"Select number of results\" />\n <SelectChevron className=\"opacity-60\" />\n </SelectTrigger>\n <SelectContent>\n {[10, 25, 50, 100].map((pageSize) => (\n <SelectItem key={pageSize} value={pageSize.toString()}>\n {pageSize} / page\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n </div>\n );\n}\n\nexport default TablePagination;\n"]}
@@ -65,6 +65,85 @@ var Button = React2.forwardRef(
65
65
  }
66
66
  );
67
67
  Button.displayName = "Button";
68
+
69
+ // src/lib/typeahead.ts
70
+ var TYPEAHEAD_TIMEOUT_MS = 500;
71
+ function createTypeaheadState() {
72
+ return { search: "", timer: null };
73
+ }
74
+ function resetTypeahead(state) {
75
+ state.search = "";
76
+ if (state.timer) {
77
+ clearTimeout(state.timer);
78
+ state.timer = null;
79
+ }
80
+ }
81
+ function getItemLabel(item) {
82
+ const aria = item.getAttribute("aria-label")?.trim();
83
+ if (aria) return aria;
84
+ const marked = item.querySelector("[data-menu-label]");
85
+ if (marked?.textContent) return marked.textContent.replace(/\s+/g, " ").trim();
86
+ return (item.textContent ?? "").replace(/\s+/g, " ").trim();
87
+ }
88
+ function normalizeSearch(value) {
89
+ return value.trim().toLocaleLowerCase();
90
+ }
91
+ function isTypeaheadTarget(target) {
92
+ if (!(target instanceof HTMLElement)) return true;
93
+ if (target.isContentEditable) return false;
94
+ const tag = target.tagName;
95
+ return tag !== "INPUT" && tag !== "TEXTAREA" && tag !== "SELECT";
96
+ }
97
+ function handleTypeaheadKeyDown(event, items, state, options) {
98
+ if (options?.enabled === false || items.length === 0) return false;
99
+ if (event.ctrlKey || event.metaKey || event.altKey) return false;
100
+ if (event.key.length !== 1 || !isTypeaheadTarget(event.target)) return false;
101
+ event.preventDefault();
102
+ const timeoutMs = options?.timeoutMs ?? TYPEAHEAD_TIMEOUT_MS;
103
+ const char = event.key;
104
+ const prevSearch = state.search;
105
+ const repeatSingleChar = prevSearch.length === 1 && prevSearch === char;
106
+ if (repeatSingleChar) {
107
+ state.search = prevSearch;
108
+ } else {
109
+ state.search = prevSearch + char;
110
+ }
111
+ if (state.timer) clearTimeout(state.timer);
112
+ state.timer = setTimeout(() => {
113
+ state.search = "";
114
+ state.timer = null;
115
+ }, timeoutMs);
116
+ const labels = items.map((item) => normalizeSearch(getItemLabel(item)));
117
+ let needle = normalizeSearch(state.search);
118
+ let matches = items.map((item, index) => ({ item, index, label: labels[index] })).filter(({ label }) => label.startsWith(needle));
119
+ if (matches.length === 0 && state.search.length > 1) {
120
+ state.search = char;
121
+ needle = normalizeSearch(char);
122
+ matches = items.map((item, index) => ({ item, index, label: labels[index] })).filter(({ label }) => label.startsWith(needle));
123
+ }
124
+ if (matches.length === 0) return true;
125
+ const focused = document.activeElement;
126
+ const focusedIndex = focused ? items.indexOf(focused) : -1;
127
+ if (repeatSingleChar && focusedIndex !== -1) {
128
+ const currentMatch = matches.findIndex(
129
+ ({ index }) => index === focusedIndex
130
+ );
131
+ if (currentMatch !== -1) {
132
+ const next = matches[(currentMatch + 1) % matches.length];
133
+ next?.item.focus();
134
+ return true;
135
+ }
136
+ }
137
+ if (focusedIndex !== -1) {
138
+ const nextAfterFocus = matches.find(({ index }) => index > focusedIndex);
139
+ if (nextAfterFocus) {
140
+ nextAfterFocus.item.focus();
141
+ return true;
142
+ }
143
+ }
144
+ matches[0]?.item.focus();
145
+ return true;
146
+ }
68
147
  var DROPDOWN_PANEL_OPEN_EASING = "cubic-bezier(0,0.55,0.45,1)";
69
148
  var DROPDOWN_PANEL_CLOSE_EASING = "cubic-bezier(0.55,0,1,0.45)";
70
149
  var DROPDOWN_MENU_MIN_WIDTH_PX = 192;
@@ -356,7 +435,7 @@ function DropdownMobileBottomSheetPortal({
356
435
  "div",
357
436
  {
358
437
  className: cn(
359
- "fixed inset-0 bg-black/40 dark:bg-black/60",
438
+ "fixed inset-0 bg-black/40 dark:bg-primary/4",
360
439
  isAnimating ? "opacity-100" : "opacity-0"
361
440
  ),
362
441
  style: {
@@ -438,6 +517,7 @@ var DropdownContent = ({
438
517
  closeOnEscape = true,
439
518
  minWidth = "trigger",
440
519
  loop = true,
520
+ typeahead = true,
441
521
  mobileOptions,
442
522
  slideEntrance = true,
443
523
  slideEntranceOffsetPx: slideEntranceOffsetPxProp,
@@ -452,6 +532,7 @@ var DropdownContent = ({
452
532
  const [pos, setPos] = useState({ top: -9999, left: -9999, side });
453
533
  const [triggerW, setTriggerW] = useState(0);
454
534
  const menuRef = useRef(null);
535
+ const typeaheadStateRef = useRef(createTypeaheadState());
455
536
  const resolvedMobile = resolveDropdownMobileSheet(mobileOptions);
456
537
  const isMobileSheet = isMobile && resolvedMobile.sheet;
457
538
  const slideOffsetPx = slideEntranceOffsetPxProp ?? DROPDOWN_MOBILE_SHEET_SLIDE_ENTRANCE_OFFSET_DEFAULT_PX;
@@ -526,6 +607,9 @@ var DropdownContent = ({
526
607
  menuRef.current.focus();
527
608
  }
528
609
  }, [isAnimating]);
610
+ useEffect(() => {
611
+ if (!open) resetTypeahead(typeaheadStateRef.current);
612
+ }, [open]);
529
613
  useEffect(() => {
530
614
  if (!open) return;
531
615
  const handler = (e) => {
@@ -580,11 +664,16 @@ var DropdownContent = ({
580
664
  case "Tab":
581
665
  setOpen(false);
582
666
  break;
667
+ default:
668
+ handleTypeaheadKeyDown(e, items, typeaheadStateRef.current, {
669
+ enabled: typeahead
670
+ });
671
+ break;
583
672
  }
584
673
  };
585
674
  window.addEventListener("keydown", handler);
586
675
  return () => window.removeEventListener("keydown", handler);
587
- }, [open, closeOnEscape, loop, setOpen, triggerRef]);
676
+ }, [open, closeOnEscape, loop, typeahead, setOpen, triggerRef]);
588
677
  useEffect(() => {
589
678
  if (!open || !isMobileSheet) return;
590
679
  document.body.style.overflow = "hidden";
@@ -708,7 +797,7 @@ var DropdownItem = ({
708
797
  ),
709
798
  children: [
710
799
  icon && /* @__PURE__ */ jsx("span", { className: "flex size-4 shrink-0 items-center justify-center", children: icon }),
711
- /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", children }),
800
+ /* @__PURE__ */ jsx("span", { className: "min-w-0 flex-1", "data-menu-label": true, children }),
712
801
  shortcut ? /* @__PURE__ */ jsx(
713
802
  "span",
714
803
  {