@rpcbase/ui 0.207.0 → 0.208.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/index.js +7 -7
- package/dist/index19.js +1 -1
- package/dist/index19.js.map +1 -1
- package/dist/index200.js +56 -55
- package/dist/index200.js.map +1 -1
- package/dist/index201.js +60 -8
- package/dist/index201.js.map +1 -1
- package/dist/index202.js +7 -15
- package/dist/index202.js.map +1 -1
- package/dist/index203.js +15 -143
- package/dist/index203.js.map +1 -1
- package/dist/index204.js +145 -4
- package/dist/index204.js.map +1 -1
- package/dist/index205.js +4 -11
- package/dist/index205.js.map +1 -1
- package/dist/index206.js +10 -104
- package/dist/index206.js.map +1 -1
- package/dist/index207.js +94 -347
- package/dist/index207.js.map +1 -1
- package/dist/index208.js +349 -87
- package/dist/index208.js.map +1 -1
- package/dist/index209.js +73 -304
- package/dist/index209.js.map +1 -1
- package/dist/index210.js +309 -193
- package/dist/index210.js.map +1 -1
- package/dist/index211.js +211 -19
- package/dist/index211.js.map +1 -1
- package/dist/index212.js +18 -27
- package/dist/index212.js.map +1 -1
- package/dist/index213.js +27 -187
- package/dist/index213.js.map +1 -1
- package/dist/index214.js +186 -16
- package/dist/index214.js.map +1 -1
- package/dist/index215.js +18 -44
- package/dist/index215.js.map +1 -1
- package/dist/index216.js +60 -8
- package/dist/index216.js.map +1 -1
- package/dist/index217.js +42 -23
- package/dist/index217.js.map +1 -1
- package/dist/index218.js +9 -44
- package/dist/index218.js.map +1 -1
- package/dist/index219.js +25 -18
- package/dist/index219.js.map +1 -1
- package/dist/index220.js +45 -3
- package/dist/index220.js.map +1 -1
- package/dist/index221.js +17 -4
- package/dist/index221.js.map +1 -1
- package/dist/index222.js +3 -21
- package/dist/index222.js.map +1 -1
- package/dist/index223.js +4 -24
- package/dist/index223.js.map +1 -1
- package/dist/index224.js +17 -64
- package/dist/index224.js.map +1 -1
- package/dist/index225.js +23 -13
- package/dist/index225.js.map +1 -1
- package/dist/index226.js +68 -4
- package/dist/index226.js.map +1 -1
- package/dist/index227.js +14 -50
- package/dist/index227.js.map +1 -1
- package/dist/index228.js +4 -6
- package/dist/index228.js.map +1 -1
- package/dist/index229.js +50 -26
- package/dist/index229.js.map +1 -1
- package/dist/index230.js +5 -13
- package/dist/index230.js.map +1 -1
- package/dist/index231.js +25 -8
- package/dist/index231.js.map +1 -1
- package/dist/index232.js +17 -3
- package/dist/index232.js.map +1 -0
- package/dist/index233.js +8 -24
- package/dist/index233.js.map +1 -1
- package/dist/index234.js +2 -71
- package/dist/index235.js +29 -3
- package/dist/index235.js.map +1 -0
- package/dist/index236.js +69 -12
- package/dist/index236.js.map +1 -1
- package/dist/index237.js +3 -54
- package/dist/index238.js +11 -114
- package/dist/index238.js.map +1 -1
- package/dist/index239.js +51 -6
- package/dist/index239.js.map +1 -1
- package/dist/index240.js +115 -13
- package/dist/index240.js.map +1 -1
- package/dist/index241.js +6 -687
- package/dist/index241.js.map +1 -1
- package/dist/index242.js +13 -253
- package/dist/index242.js.map +1 -1
- package/dist/index243.js +662 -676
- package/dist/index243.js.map +1 -1
- package/dist/index244.js +252 -7430
- package/dist/index244.js.map +1 -1
- package/dist/index245.js +700 -6
- package/dist/index245.js.map +1 -1
- package/dist/index246.js +7429 -11
- package/dist/index246.js.map +1 -1
- package/dist/index247.js +5 -4
- package/dist/index247.js.map +1 -1
- package/dist/index248.js +11 -458
- package/dist/index248.js.map +1 -1
- package/dist/index249.js +5 -37
- package/dist/index249.js.map +1 -1
- package/dist/index250.js +458 -18
- package/dist/index250.js.map +1 -1
- package/dist/index251.js +34 -24
- package/dist/index251.js.map +1 -1
- package/dist/index252.js +19 -4
- package/dist/index252.js.map +1 -1
- package/dist/index253.js +23 -54
- package/dist/index253.js.map +1 -1
- package/dist/index254.js +4 -7
- package/dist/index254.js.map +1 -1
- package/dist/index255.js +57 -11
- package/dist/index255.js.map +1 -1
- package/dist/index256.js +8 -3
- package/dist/index256.js.map +1 -1
- package/dist/index257.js +12 -16
- package/dist/index257.js.map +1 -1
- package/dist/index258.js +3 -26
- package/dist/index258.js.map +1 -1
- package/dist/index259.js +15 -42
- package/dist/index259.js.map +1 -1
- package/dist/index260.js +25 -13
- package/dist/index260.js.map +1 -1
- package/dist/index261.js +40 -22
- package/dist/index261.js.map +1 -1
- package/dist/index262.js +13 -17
- package/dist/index262.js.map +1 -1
- package/dist/index263.js +24 -34
- package/dist/index263.js.map +1 -1
- package/dist/index264.js +17 -5
- package/dist/index264.js.map +1 -1
- package/dist/index265.js +35 -9
- package/dist/index265.js.map +1 -1
- package/dist/index266.js +5 -8
- package/dist/index266.js.map +1 -1
- package/dist/index267.js +9 -9
- package/dist/index267.js.map +1 -1
- package/dist/index268.js +8 -10
- package/dist/index268.js.map +1 -1
- package/dist/index269.js +9 -7
- package/dist/index269.js.map +1 -1
- package/dist/index270.js +9 -72
- package/dist/index270.js.map +1 -1
- package/dist/index271.js +7 -171
- package/dist/index271.js.map +1 -1
- package/dist/index272.js +63 -104
- package/dist/index272.js.map +1 -1
- package/dist/index273.js +169 -12
- package/dist/index273.js.map +1 -1
- package/dist/index274.js +109 -75
- package/dist/index274.js.map +1 -1
- package/dist/index275.js +12 -44
- package/dist/index275.js.map +1 -1
- package/dist/index276.js +79 -12
- package/dist/index276.js.map +1 -1
- package/dist/index277.js +45 -15
- package/dist/index277.js.map +1 -1
- package/dist/index278.js +12 -98
- package/dist/index278.js.map +1 -1
- package/dist/index279.js +15 -55
- package/dist/index279.js.map +1 -1
- package/dist/index280.js +89 -98
- package/dist/index280.js.map +1 -1
- package/dist/index281.js +27 -42
- package/dist/index281.js.map +1 -1
- package/dist/index282.js +92 -97
- package/dist/index282.js.map +1 -1
- package/dist/index283.js +62 -46
- package/dist/index283.js.map +1 -1
- package/dist/index284.js +108 -38
- package/dist/index284.js.map +1 -1
- package/dist/index285.js +48 -135
- package/dist/index285.js.map +1 -1
- package/dist/index286.js +43 -139
- package/dist/index286.js.map +1 -1
- package/dist/index287.js +105 -217
- package/dist/index287.js.map +1 -1
- package/dist/index288.js +109 -210
- package/dist/index288.js.map +1 -1
- package/dist/index289.js +168 -212
- package/dist/index289.js.map +1 -1
- package/dist/index290.js +240 -5
- package/dist/index290.js.map +1 -1
- package/dist/index291.js +298 -6
- package/dist/index291.js.map +1 -1
- package/dist/index292.js +5 -7
- package/dist/index292.js.map +1 -1
- package/dist/index293.js +4 -4
- package/dist/index293.js.map +1 -1
- package/dist/index294.js +7 -6
- package/dist/index294.js.map +1 -1
- package/dist/index295.js +6 -21
- package/dist/index295.js.map +1 -1
- package/dist/index296.js +6 -10
- package/dist/index296.js.map +1 -1
- package/dist/index297.js +18 -123
- package/dist/index297.js.map +1 -1
- package/dist/index298.js +10 -164
- package/dist/index298.js.map +1 -1
- package/dist/index299.js +116 -58
- package/dist/index299.js.map +1 -1
- package/dist/index300.js +161 -106
- package/dist/index300.js.map +1 -1
- package/dist/index301.js +66 -489
- package/dist/index301.js.map +1 -1
- package/dist/index302.js +106 -59
- package/dist/index302.js.map +1 -1
- package/dist/index303.js +492 -4
- package/dist/index303.js.map +1 -1
- package/dist/index304.js +62 -27
- package/dist/index304.js.map +1 -1
- package/dist/index305.js +4 -66
- package/dist/index305.js.map +1 -1
- package/dist/index306.js +27 -152
- package/dist/index306.js.map +1 -1
- package/dist/index307.js +59 -555
- package/dist/index307.js.map +1 -1
- package/dist/index308.js +143 -201
- package/dist/index308.js.map +1 -1
- package/dist/index309.js +56 -326
- package/dist/index309.js.map +1 -1
- package/dist/index310.js +553 -260
- package/dist/index310.js.map +1 -1
- package/dist/index311.js +214 -0
- package/dist/index311.js.map +1 -0
- package/dist/index312.js +335 -0
- package/dist/index312.js.map +1 -0
- package/dist/index313.js +272 -0
- package/dist/index313.js.map +1 -0
- package/package.json +2 -2
- package/dist/index234.js.map +0 -1
- package/dist/index237.js.map +0 -1
package/dist/index243.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index243.js","names":["Check","ChevronDown","ChevronUp","React","DismissableLayerBranch","createPortal","IMaskInput","IMask","InputMask","Select","SelectContent","SelectItem","SelectTrigger","SelectValue","useIsTouchDevice","cn","imaskAny","HourPickerOption","value","label","disabled","description","ReactNode","pad2","String","padStart","parseTimeInput","raw","trimmed","trim","match","exec","hours","Number","minutes","isFinite","getAcceptedInputSignature","parsed","digits","replace","length","minutePart","slice","hourPart","ParsedTimeInputResult","selectableValue","parseTimeInputWithSelectableOption","options","parsedOption","find","option","isOptionSelectable","timeStringToMinutes","findClosestSelectableOption","targetMinutes","bestOption","bestDiff","POSITIVE_INFINITY","bestMinutes","NEGATIVE_INFINITY","optionMinutes","diff","Math","abs","HourPickerScrollButtonDirection","HourPickerScrollButtonProps","direction","viewportRef","RefObject","HTMLElement","speed","className","HourPickerScrollButton","setDisabled","useState","animationRef","useRef","undefined","lastTimeRef","isScrollingRef","checkScrollability","useCallback","viewport","current","scrollTop","scrollHeight","clientHeight","tolerance","canScrollUp","canScrollDown","hasScrollableContent","shouldDisable","useEffect","handleScroll","handleResize","addEventListener","passive","resizeObserver","ResizeObserver","observe","mutationObserver","MutationObserver","childList","subtree","removeEventListener","disconnect","stopScrolling","cancelAnimationFrame","smoothScroll","currentTime","deltaTime","distance","requestAnimationFrame","oldScrollTop","maxScroll","newScrollTop","max","min","scrollTo","top","canContinue","setTimeout","startScrolling","HourPickerInputProps","id","onChange","onValueUpdate","placeholder","inputClassName","readOnly","open","onOpenChange","triggerTestId","contentTestId","isHydrated","HourPickerInput","openProp","reactId","useId","triggerId","triggerInputRef","HTMLInputElement","setTriggerDraftValueRef","setTriggerDraftValueHandler","handler","highlightedValueRef","keyboardNavigationActiveRef","highlightedValue","setHighlightedValue","containerRef","HTMLDivElement","desktopPopoverRef","desktopContentRef","desktopPopoverPosition","setDesktopPopoverPosition","left","width","uncontrolledOpen","setUncontrolledOpen","setOpen","openRef","input","document","activeElement","focus","preventScroll","updateHighlightedValue","next","markKeyboardNavigation","currentOption","firstEnabled","updateValue","matchingOption","commitValue","ownerDocument","ownerWindow","defaultView","window","handlePointerDown","event","PointerEvent","target","Node","container","contains","popover","handleKeyDown","KeyboardEvent","key","preventDefault","stopPropagation","handleWheel","WheelEvent","deltaY","maxScrollTop","atTop","atBottom","isWheelOverViewport","nextScrollTop","trigger","isActive","observer","IntersectionObserver","entries","entry","isIntersecting","updateDesktopPopoverPosition","rect","getBoundingClientRect","popoverHeight","offsetHeight","viewportWidth","innerWidth","viewportHeight","innerHeight","padding","bottom","overflowBottom","aboveTop","useLayoutEffect","rafId","run","selected","querySelector","targetTop","offsetTop","targetBottom","viewportBottom","all","Array","from","querySelectorAll","lastDisabledBefore","el","isDisabled","hasAttribute","offset","raf","node","map","isChecked","movementX","movementY","body","displayName","HourPickerFieldProps","HourPickerSelectField","t0","$","_c","t1","t2","t3","t4","t5","next_0","t6","t7","t8","t9","t10","t11","t12","_temp","t13","t14","t15","option_0","HourPickerField","props","isTouchDevice","HourPickerMaskedSelectTriggerProps","onCommit","MutableRefObject","inputRef","onDraftValueHandlerChange","HourPickerMaskedSelectTrigger","isEditingRef","pointerDownOnInputRef","inputWasFocusedOnPointerDownRef","ignoreNextMaskCommitValueRef","lastAcceptedSignatureRef","clearCommitPendingRef","draft","setDraft","nextValue","base","baseIndex","findIndex","nextIndex","nextOption","moveSelection","triggerClassName","Symbol","for","mask","lazy","t16","appended","dynamicMasked","compiledMasks","hourPrefix","hasTwoDigitHour","some","startsWith","t17","accepted","_mask","nextText","nextDigits","nextSignature","t18","completed","_mask_0","event_0","nextText_0","resolved","closestOption","t19","t20","t21","event_1","currentTarget","t22","event_2","defaultPrevented","shouldReopen","ctrlKey","metaKey","altKey","resolved_0","highlightedOption","option_1","fallbackValue","_temp2","targetMinutes_0","closestOption_0","t23","event_3","shouldSelectAll","element","select","t24","resolved_1","t25","t26","t27","t28","t29","t30","_temp3","_temp4","t31","event_5","event_4","option_2"],"sources":["../src/components/HourPickerField/index.tsx"],"sourcesContent":["import { Check, ChevronDown, ChevronUp } from \"lucide-react\"\nimport * as React from \"react\"\nimport { DismissableLayerBranch } from \"@radix-ui/react-dismissable-layer\"\nimport { createPortal } from \"react-dom\"\nimport { IMaskInput } from \"react-imask\"\nimport IMask, { InputMask } from \"imask\"\n\nimport { Select, SelectContent, SelectItem, SelectTrigger, SelectValue } from \"@/components/Select\"\nimport { useIsTouchDevice } from \"@/helpers/useIsTouchDevice\"\nimport { cn } from \"@/lib/utils\"\n\n\n// WARNING: used to preserve input mask even with tree shaking\n// DO NOT REMOVE THIS CODE OR THIS COMMENT\nconst imaskAny = IMask as any\nif (typeof imaskAny.InputMask !== \"function\") {\n imaskAny.InputMask = InputMask\n}\n\n\nexport type HourPickerOption = {\n value: string\n label: string\n disabled?: boolean\n description?: React.ReactNode\n}\n\nfunction pad2(value: number) {\n return String(value).padStart(2, \"0\")\n}\n\nfunction parseTimeInput(raw: string) {\n const trimmed = raw.trim()\n if (!trimmed) return null\n\n const match = /^(\\d{1,2}):(\\d{2})$/.exec(trimmed)\n if (!match) {\n return null\n }\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n if (!Number.isFinite(hours) || !Number.isFinite(minutes)) {\n return null\n }\n\n if (hours < 0 || hours > 23 || minutes < 0 || minutes > 59) {\n return null\n }\n\n return `${pad2(hours)}:${pad2(minutes)}`\n}\n\nfunction getAcceptedInputSignature(raw: string) {\n const parsed = parseTimeInput(raw)\n if (parsed) {\n return `parsed:${parsed}`\n }\n\n const digits = raw.replace(/\\D/g, \"\")\n if (!digits) {\n return \"empty\"\n }\n\n if (digits.length <= 2) {\n return `hour:${Number(digits)}`\n }\n\n const minutePart = digits.slice(-2)\n const hourPart = digits.slice(0, -2)\n return `hour-minute:${Number(hourPart)}:${minutePart}`\n}\n\ntype ParsedTimeInputResult = {\n parsed: string\n selectableValue: string | null\n}\n\nfunction parseTimeInputWithSelectableOption(raw: string, options: HourPickerOption[]): ParsedTimeInputResult | null {\n const parsed = parseTimeInput(raw)\n if (!parsed) return null\n\n const parsedOption = options.find((option) => option.value === parsed)\n if (isOptionSelectable(parsedOption)) {\n return { parsed, selectableValue: parsed }\n }\n\n return { parsed, selectableValue: null }\n}\n\nfunction timeStringToMinutes(value: string) {\n const match = /^(\\d{2}):(\\d{2})$/.exec(value)\n if (!match) {\n return null\n }\n\n const hours = Number(match[1])\n const minutes = Number(match[2])\n\n if (!Number.isFinite(hours) || !Number.isFinite(minutes)) {\n return null\n }\n\n return hours * 60 + minutes\n}\n\nfunction isOptionSelectable(option: HourPickerOption | undefined) {\n if (!option) return false\n return !option.disabled\n}\n\nfunction findClosestSelectableOption(targetMinutes: number, options: HourPickerOption[]) {\n let bestOption: HourPickerOption | null = null\n let bestDiff = Number.POSITIVE_INFINITY\n let bestMinutes = Number.NEGATIVE_INFINITY\n\n for (const option of options) {\n if (!isOptionSelectable(option)) continue\n const optionMinutes = timeStringToMinutes(option.value)\n if (optionMinutes == null) continue\n\n const diff = Math.abs(optionMinutes - targetMinutes)\n if (diff < bestDiff || (diff === bestDiff && optionMinutes > bestMinutes)) {\n bestOption = option\n bestDiff = diff\n bestMinutes = optionMinutes\n }\n }\n\n return bestOption\n}\n\ntype HourPickerScrollButtonDirection = \"up\" | \"down\"\n\ntype HourPickerScrollButtonProps = {\n direction: HourPickerScrollButtonDirection\n viewportRef: React.RefObject<HTMLElement | null>\n speed?: number\n className?: string\n}\n\nfunction HourPickerScrollButton({\n direction,\n viewportRef,\n speed = 400,\n className,\n}: HourPickerScrollButtonProps) {\n const [disabled, setDisabled] = React.useState(true)\n const animationRef = React.useRef<number | undefined>(undefined)\n const lastTimeRef = React.useRef<number | undefined>(undefined)\n const isScrollingRef = React.useRef(false)\n\n const checkScrollability = React.useCallback(() => {\n const viewport = viewportRef.current\n if (!viewport) {\n setDisabled(true)\n return\n }\n\n const { scrollTop, scrollHeight, clientHeight } = viewport\n const tolerance = 2\n\n const canScrollUp = scrollTop > tolerance\n const canScrollDown = scrollTop < (scrollHeight - clientHeight - tolerance)\n const hasScrollableContent = scrollHeight > clientHeight + tolerance\n\n if (!hasScrollableContent) {\n setDisabled(true)\n return\n }\n\n const shouldDisable = direction === \"up\" ? !canScrollUp : !canScrollDown\n setDisabled(shouldDisable)\n }, [direction, viewportRef])\n\n React.useEffect(() => {\n const viewport = viewportRef.current\n if (!viewport) return\n\n checkScrollability()\n\n const handleScroll = () => checkScrollability()\n const handleResize = () => checkScrollability()\n\n viewport.addEventListener(\"scroll\", handleScroll, { passive: true })\n\n const resizeObserver = new ResizeObserver(handleResize)\n resizeObserver.observe(viewport)\n\n const mutationObserver = new MutationObserver(handleResize)\n mutationObserver.observe(viewport, { childList: true, subtree: true })\n\n return () => {\n viewport.removeEventListener(\"scroll\", handleScroll)\n resizeObserver.disconnect()\n mutationObserver.disconnect()\n }\n }, [viewportRef, checkScrollability])\n\n const stopScrolling = React.useCallback(() => {\n if (animationRef.current) {\n cancelAnimationFrame(animationRef.current)\n animationRef.current = undefined\n }\n isScrollingRef.current = false\n lastTimeRef.current = undefined\n }, [])\n\n const smoothScroll = React.useCallback(\n (currentTime: number) => {\n const viewport = viewportRef.current\n if (!viewport || disabled || !isScrollingRef.current) {\n stopScrolling()\n return\n }\n\n if (!lastTimeRef.current) {\n lastTimeRef.current = currentTime\n }\n\n const deltaTime = currentTime - lastTimeRef.current\n const distance = (speed * deltaTime) / 1000\n\n if (distance < 0.1) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n return\n }\n\n const oldScrollTop = viewport.scrollTop\n const maxScroll = viewport.scrollHeight - viewport.clientHeight\n\n let newScrollTop: number\n if (direction === \"up\") {\n newScrollTop = Math.max(0, oldScrollTop - distance)\n } else {\n newScrollTop = Math.min(maxScroll, oldScrollTop + distance)\n }\n\n viewport.scrollTo({ top: newScrollTop })\n\n lastTimeRef.current = currentTime\n\n const tolerance = 1\n const canContinue =\n direction === \"up\"\n ? newScrollTop > tolerance\n : newScrollTop < (maxScroll - tolerance)\n\n if (canContinue && Math.abs(newScrollTop - oldScrollTop) > 0.01) {\n animationRef.current = requestAnimationFrame(smoothScroll)\n } else {\n stopScrolling()\n setTimeout(checkScrollability, 16)\n }\n },\n [checkScrollability, direction, disabled, speed, stopScrolling, viewportRef],\n )\n\n const startScrolling = React.useCallback(() => {\n if (disabled || !viewportRef.current || isScrollingRef.current) return\n\n isScrollingRef.current = true\n lastTimeRef.current = undefined\n animationRef.current = requestAnimationFrame(smoothScroll)\n }, [disabled, smoothScroll, viewportRef])\n\n React.useEffect(() => stopScrolling, [stopScrolling])\n\n return (\n <div\n className={cn(\n \"flex items-center justify-center py-1 select-none\",\n disabled ? \"cursor-default opacity-40\" : \"cursor-pointer opacity-100 hover:bg-accent/20\",\n className\n )}\n onPointerEnter={() => {\n if (!disabled) startScrolling()\n }}\n onPointerMove={() => {\n if (!disabled && !isScrollingRef.current) startScrolling()\n }}\n onPointerLeave={() => {\n stopScrolling()\n }}\n >\n {direction === \"up\"\n ? <ChevronUp aria-hidden className=\"h-4 w-4 opacity-50\" />\n : <ChevronDown aria-hidden className=\"h-4 w-4 opacity-50\" />}\n </div>\n )\n}\n\nexport type HourPickerInputProps = {\n id?: string\n value: string | null\n onChange: (value: string | null) => void\n onValueUpdate?: (value: string | null) => void\n options: HourPickerOption[]\n placeholder?: string\n className?: string\n inputClassName?: string\n disabled?: boolean\n readOnly?: boolean\n open?: boolean\n onOpenChange?: (open: boolean) => void\n triggerTestId?: string\n contentTestId?: string\n isHydrated?: boolean\n}\n\nexport function HourPickerInput({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n readOnly,\n open: openProp,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerInputProps) {\n const reactId = React.useId()\n const triggerId = id ?? `hours-picker-${reactId}`\n const triggerInputRef = React.useRef<HTMLInputElement | null>(null)\n const setTriggerDraftValueRef = React.useRef<((value: string) => void) | null>(null)\n const setTriggerDraftValueHandler = React.useCallback((handler: ((value: string) => void) | null) => {\n setTriggerDraftValueRef.current = handler\n }, [])\n const highlightedValueRef = React.useRef<string | null>(null)\n const keyboardNavigationActiveRef = React.useRef(false)\n const [highlightedValue, setHighlightedValue] = React.useState<string | null>(null)\n const containerRef = React.useRef<HTMLDivElement | null>(null)\n const desktopPopoverRef = React.useRef<HTMLDivElement | null>(null)\n const desktopContentRef = React.useRef<HTMLDivElement | null>(null)\n const [desktopPopoverPosition, setDesktopPopoverPosition] = React.useState(() => ({\n left: 0,\n top: 0,\n width: 0,\n }))\n\n const [uncontrolledOpen, setUncontrolledOpen] = React.useState(false)\n const open = openProp ?? uncontrolledOpen\n const setOpen = onOpenChange ?? setUncontrolledOpen\n const openRef = React.useRef(false)\n openRef.current = open\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (disabled || readOnly) {\n return\n }\n\n const input = triggerInputRef.current\n if (!(input instanceof HTMLInputElement)) {\n return\n }\n if (typeof document !== \"undefined\" && document.activeElement === input) {\n return\n }\n\n input.focus({ preventScroll: true })\n }, [disabled, open, readOnly])\n\n const updateHighlightedValue = React.useCallback((next: string | null) => {\n highlightedValueRef.current = next\n setHighlightedValue(next)\n }, [])\n\n const markKeyboardNavigation = React.useCallback(() => {\n keyboardNavigationActiveRef.current = true\n }, [])\n\n React.useEffect(() => {\n if (!open) return\n\n const currentOption = options.find((option) => option.value === value)\n if (currentOption && isOptionSelectable(currentOption)) {\n updateHighlightedValue(currentOption.value)\n return\n }\n\n const firstEnabled = options.find((option) => isOptionSelectable(option))\n updateHighlightedValue(firstEnabled?.value ?? null)\n }, [open, options, updateHighlightedValue, value])\n\n const updateValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n },\n [onValueUpdate, options],\n )\n\n const commitValue = React.useCallback(\n (next: string | null) => {\n if (next === null) {\n if (onValueUpdate) {\n onValueUpdate(null)\n }\n onChange(null)\n return\n }\n\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n React.useEffect(() => {\n if (!open) return\n\n const ownerDocument = containerRef.current?.ownerDocument ?? document\n const ownerWindow = ownerDocument.defaultView ?? window\n\n const handlePointerDown = (event: PointerEvent) => {\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n if (!container) {\n return\n }\n\n if (container.contains(target)) {\n return\n }\n\n const popover = desktopPopoverRef.current\n if (popover?.contains(target)) {\n return\n }\n\n setOpen(false)\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== \"Escape\") {\n return\n }\n if (!openRef.current) {\n return\n }\n\n const target = event.target\n if (!(target instanceof Node)) {\n return\n }\n\n const container = containerRef.current\n const popover = desktopPopoverRef.current\n if (!container?.contains(target) && !popover?.contains(target)) {\n return\n }\n\n event.preventDefault()\n event.stopPropagation()\n setOpen(false)\n }\n\n ownerDocument.addEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.addEventListener(\"keydown\", handleKeyDown, true)\n return () => {\n ownerDocument.removeEventListener(\"pointerdown\", handlePointerDown, true)\n ownerWindow.removeEventListener(\"keydown\", handleKeyDown, true)\n }\n }, [open, setOpen])\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n\n const popover = desktopPopoverRef.current\n if (!popover) {\n return\n }\n\n const handleWheel = (event: WheelEvent) => {\n const viewport = desktopContentRef.current\n if (!viewport) {\n return\n }\n\n const deltaY = event.deltaY\n if (deltaY === 0) {\n return\n }\n\n const maxScrollTop = Math.max(0, viewport.scrollHeight - viewport.clientHeight)\n const atTop = viewport.scrollTop <= 0\n const atBottom = viewport.scrollTop >= maxScrollTop\n\n const target = event.target\n const isWheelOverViewport = target instanceof Node && viewport.contains(target)\n\n if (isWheelOverViewport) {\n if ((deltaY < 0 && atTop) || (deltaY > 0 && atBottom)) {\n event.preventDefault()\n }\n return\n }\n\n event.preventDefault()\n const nextScrollTop = Math.min(maxScrollTop, Math.max(0, viewport.scrollTop + deltaY))\n viewport.scrollTop = nextScrollTop\n }\n\n popover.addEventListener(\"wheel\", handleWheel, { passive: false })\n return () => {\n popover.removeEventListener(\"wheel\", handleWheel)\n }\n }, [open])\n\n React.useEffect(() => {\n if (!open) {\n return\n }\n if (openProp !== undefined && !onOpenChange) {\n return\n }\n if (typeof window === \"undefined\") {\n return\n }\n if (!(\"IntersectionObserver\" in window)) {\n return\n }\n\n const trigger = triggerInputRef.current\n if (!(trigger instanceof HTMLElement)) {\n return\n }\n\n let isActive = true\n const observer = new IntersectionObserver(entries => {\n if (!isActive) {\n return\n }\n const entry = entries[0]\n if (entry && !entry.isIntersecting) {\n setOpen(false)\n }\n })\n observer.observe(trigger)\n return () => {\n isActive = false\n observer.disconnect()\n }\n }, [onOpenChange, open, openProp, setOpen])\n\n const updateDesktopPopoverPosition = React.useCallback(() => {\n if (typeof window === \"undefined\") return\n\n const trigger = triggerInputRef.current\n const popover = desktopPopoverRef.current\n if (!(trigger instanceof HTMLElement) || !popover) return\n\n const rect = trigger.getBoundingClientRect()\n const popoverHeight = popover.offsetHeight\n const viewportWidth = window.innerWidth ?? 0\n const viewportHeight = window.innerHeight ?? 0\n const padding = 8\n\n const width = rect.width\n\n let left = rect.left\n if (left + width > viewportWidth - padding) {\n left = Math.max(padding, viewportWidth - width - padding)\n }\n if (left < padding) {\n left = padding\n }\n\n let top = rect.bottom + padding\n const overflowBottom = top + popoverHeight > viewportHeight - padding\n const aboveTop = rect.top - popoverHeight - padding\n if (overflowBottom && aboveTop >= padding) {\n top = aboveTop\n }\n\n if (top < padding) {\n top = padding\n }\n if (top + popoverHeight > viewportHeight - padding) {\n top = Math.max(padding, viewportHeight - popoverHeight - padding)\n }\n\n setDesktopPopoverPosition({ left, top, width })\n }, [])\n\n // React Compiler rejects hook aliasing (useIsomorphicLayoutEffect pattern), so we\n // call useLayoutEffect directly and keep the SSR guard inside the effect.\n React.useLayoutEffect(() => {\n if (!open || disabled) return\n if (typeof window === \"undefined\") return\n\n updateDesktopPopoverPosition()\n const rafId = window.requestAnimationFrame(updateDesktopPopoverPosition)\n\n window.addEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.addEventListener(\"resize\", updateDesktopPopoverPosition)\n return () => {\n window.cancelAnimationFrame(rafId)\n window.removeEventListener(\"scroll\", updateDesktopPopoverPosition, true)\n window.removeEventListener(\"resize\", updateDesktopPopoverPosition)\n }\n }, [disabled, open, updateDesktopPopoverPosition])\n\n React.useEffect(() => {\n if (!open) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const run = () => {\n const selected = viewport.querySelector(\"[role=\\\"option\\\"][data-state=\\\"checked\\\"]\")\n if (selected instanceof HTMLElement) {\n const padding = 8\n const targetTop = selected.offsetTop - padding\n const targetBottom = selected.offsetTop + selected.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n return\n }\n\n const all = Array.from(viewport.querySelectorAll(\"[role=\\\"option\\\"]\")) as HTMLElement[]\n if (!all.length) return\n\n let firstEnabled: HTMLElement | undefined\n let lastDisabledBefore: HTMLElement | undefined\n\n for (const el of all) {\n const isDisabled = el.hasAttribute(\"data-disabled\")\n if (!isDisabled) {\n firstEnabled = el\n break\n }\n lastDisabledBefore = el\n }\n\n if (!firstEnabled) return\n\n const target = lastDisabledBefore ? lastDisabledBefore : firstEnabled\n\n const offset = Math.max(0, target.offsetTop - 8)\n viewport.scrollTop = offset\n }\n\n const raf = requestAnimationFrame(run)\n return () => cancelAnimationFrame(raf)\n }, [open, options])\n\n React.useEffect(() => {\n if (!open) return\n if (!highlightedValue) return\n if (!keyboardNavigationActiveRef.current) return\n\n const viewport = desktopContentRef.current\n if (!viewport) return\n\n const target = viewport.querySelector(`[role=\"option\"][data-value=\"${highlightedValue}\"]`)\n if (!(target instanceof HTMLElement)) return\n\n const padding = 8\n const targetTop = target.offsetTop - padding\n const targetBottom = target.offsetTop + target.offsetHeight + padding\n\n if (targetTop < viewport.scrollTop) {\n viewport.scrollTop = Math.max(0, targetTop)\n return\n }\n\n const viewportBottom = viewport.scrollTop + viewport.clientHeight\n if (targetBottom > viewportBottom) {\n viewport.scrollTop = Math.max(0, targetBottom - viewport.clientHeight)\n }\n }, [highlightedValue, open])\n\n return (\n <div\n data-slot=\"hours-picker-input\"\n className={cn(\"w-[150px]\", className)}\n ref={containerRef}\n >\n <div className=\"relative\">\n <HourPickerMaskedSelectTrigger\n id={triggerId}\n placeholder={placeholder}\n value={value}\n onValueUpdate={updateValue}\n onCommit={commitValue}\n options={options}\n disabled={disabled}\n readOnly={readOnly}\n open={open}\n setOpen={setOpen}\n inputClassName={inputClassName}\n triggerTestId={triggerTestId}\n isHydrated={isHydrated}\n highlightedValueRef={highlightedValueRef}\n setHighlightedValue={updateHighlightedValue}\n markKeyboardNavigation={markKeyboardNavigation}\n inputRef={(node) => {\n triggerInputRef.current = node\n }}\n onDraftValueHandlerChange={setTriggerDraftValueHandler}\n />\n\n {open ? (() => {\n const popover = (\n <DismissableLayerBranch>\n <div\n ref={desktopPopoverRef}\n data-testid={contentTestId}\n data-state=\"open\"\n className={cn(\n \"pointer-events-auto fixed z-[60] overflow-hidden rounded-md border bg-popover text-popover-foreground shadow-md\",\n \"data-[state=open]:animate-in data-[state=open]:fade-in-0 data-[state=open]:zoom-in-95\",\n )}\n style={{\n left: desktopPopoverPosition.left,\n top: desktopPopoverPosition.top,\n width: desktopPopoverPosition.width,\n }}\n >\n <HourPickerScrollButton\n direction=\"up\"\n viewportRef={desktopContentRef}\n />\n\n <div\n ref={desktopContentRef}\n role=\"listbox\"\n className=\"max-h-64 overflow-y-auto p-1 [overscroll-behavior:contain] [scrollbar-width:none] [-ms-overflow-style:none] [&::-webkit-scrollbar]:hidden\"\n >\n {options.map((option) => {\n const isChecked = option.value === value\n\n return (\n <div\n key={option.value}\n role=\"option\"\n aria-selected={isChecked}\n data-value={option.value}\n data-state={isChecked ? \"checked\" : \"unchecked\"}\n data-disabled={option.disabled ? \"\" : undefined}\n className={cn(\n \"relative flex w-full select-none items-center rounded-sm py-1.5 pl-8 pr-2 text-sm outline-none cursor-pointer\",\n option.disabled && \"pointer-events-none opacity-50\",\n highlightedValue === option.value && \"bg-accent text-accent-foreground\",\n )}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (option.disabled) return\n\n setTriggerDraftValueRef.current?.(option.value)\n updateHighlightedValue(option.value)\n triggerInputRef.current?.focus({ preventScroll: true })\n commitValue(option.value)\n setOpen(false)\n }}\n onPointerEnter={() => {\n if (keyboardNavigationActiveRef.current) return\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n onPointerMove={(event) => {\n if (keyboardNavigationActiveRef.current && event.movementX === 0 && event.movementY === 0) {\n return\n }\n keyboardNavigationActiveRef.current = false\n updateHighlightedValue(option.value)\n }}\n >\n <span className=\"absolute left-2 flex h-3.5 w-3.5 items-center justify-center\">\n {isChecked ? <Check aria-hidden className=\"h-4 w-4\" /> : null}\n </span>\n\n <div className=\"flex flex-col\">\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </div>\n </div>\n )\n })}\n </div>\n\n <HourPickerScrollButton\n direction=\"down\"\n viewportRef={desktopContentRef}\n />\n </div>\n </DismissableLayerBranch>\n )\n\n if (typeof document === \"undefined\") return popover\n return createPortal(popover, document.body)\n })() : null}\n </div>\n </div>\n )\n}\n\nHourPickerInput.displayName = \"HourPickerInput\"\n\nexport type HourPickerFieldProps = HourPickerInputProps\n\nfunction HourPickerSelectField({\n id,\n value,\n onChange,\n onValueUpdate,\n options,\n placeholder = \"Select time\",\n className,\n inputClassName,\n disabled,\n open,\n onOpenChange,\n triggerTestId,\n contentTestId,\n isHydrated,\n}: HourPickerFieldProps) {\n const commitValue = React.useCallback(\n (next: string) => {\n const matchingOption = options.find((option) => option.value === next)\n if (!isOptionSelectable(matchingOption)) {\n return\n }\n\n if (onValueUpdate) {\n onValueUpdate(next)\n }\n onChange(next)\n },\n [onChange, onValueUpdate, options],\n )\n\n return (\n <div data-slot=\"hours-picker-field\" className={cn(\"w-[150px]\", className)}>\n <Select\n disabled={disabled}\n open={open}\n onOpenChange={onOpenChange}\n value={value ?? \"\"}\n onValueChange={(next) => commitValue(next)}\n >\n <SelectTrigger\n id={id}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n className={cn(\n \"transition-colors hover:bg-accent hover:text-accent-foreground\",\n !value && \"text-muted-foreground\",\n open && \"ring-2 ring-primary ring-offset-2\",\n \"[&_[data-slot='description']]:hidden\",\n inputClassName,\n )}\n >\n <SelectValue placeholder={placeholder} />\n </SelectTrigger>\n\n <SelectContent\n data-testid={contentTestId}\n autoScroll={\"firstEnabledWithContext\"}\n className=\"max-h-64 overflow-y-auto\"\n >\n {options.map((option) => (\n <SelectItem\n key={option.value}\n value={option.value}\n disabled={option.disabled}\n >\n <span>{option.label}</span>\n {option.description != null ? (\n <span data-slot=\"description\" className=\"block text-xs text-muted-foreground\">\n {option.description}\n </span>\n ) : null}\n </SelectItem>\n ))}\n </SelectContent>\n </Select>\n </div>\n )\n}\n\nexport function HourPickerField(props: HourPickerFieldProps) {\n const isTouchDevice = useIsTouchDevice()\n\n if (isTouchDevice) {\n return <HourPickerSelectField {...props} />\n }\n\n return <HourPickerInput {...props} />\n}\n\nHourPickerField.displayName = \"HourPickerField\"\n\ntype HourPickerMaskedSelectTriggerProps = {\n id: string\n placeholder: string\n value: string | null\n onValueUpdate: (value: string | null) => void\n onCommit: (value: string | null) => void\n options: HourPickerOption[]\n disabled?: boolean\n readOnly?: boolean\n open: boolean\n setOpen: (open: boolean) => void\n inputClassName?: string\n triggerTestId?: string\n isHydrated?: boolean\n highlightedValueRef: React.MutableRefObject<string | null>\n setHighlightedValue: (value: string | null) => void\n markKeyboardNavigation: () => void\n inputRef: (node: HTMLInputElement | null) => void\n onDraftValueHandlerChange: (handler: ((value: string) => void) | null) => void\n}\n\nfunction HourPickerMaskedSelectTrigger({\n id,\n placeholder,\n value,\n onValueUpdate,\n onCommit,\n options,\n disabled,\n readOnly,\n open,\n setOpen,\n inputClassName,\n triggerTestId,\n isHydrated,\n highlightedValueRef,\n setHighlightedValue,\n markKeyboardNavigation,\n inputRef,\n onDraftValueHandlerChange,\n}: HourPickerMaskedSelectTriggerProps) {\n const isEditingRef = React.useRef(false)\n const pointerDownOnInputRef = React.useRef(false)\n const inputWasFocusedOnPointerDownRef = React.useRef(false)\n const ignoreNextMaskCommitValueRef = React.useRef<string | null>(null)\n const lastAcceptedSignatureRef = React.useRef<string | null>(null)\n const clearCommitPendingRef = React.useRef(false)\n\n const [draft, setDraft] = React.useState(() => (value ? value : \"\"))\n\n React.useEffect(() => {\n onDraftValueHandlerChange((nextValue) => {\n setDraft(nextValue)\n })\n return () => {\n onDraftValueHandlerChange(null)\n }\n }, [onDraftValueHandlerChange])\n\n const moveSelection = React.useCallback(\n (direction: -1 | 1) => {\n const base = highlightedValueRef.current ?? value ?? \"\"\n\n let baseIndex = options.findIndex((option) => option.value === base)\n if (baseIndex === -1) {\n baseIndex = direction === 1 ? -1 : options.length\n }\n\n for (let nextIndex = baseIndex + direction; nextIndex >= 0 && nextIndex < options.length; nextIndex += direction) {\n const nextOption = options[nextIndex]\n if (!isOptionSelectable(nextOption)) continue\n\n setHighlightedValue(nextOption.value)\n ignoreNextMaskCommitValueRef.current = nextOption.value\n setDraft(nextOption.value)\n onValueUpdate(nextOption.value)\n return\n }\n },\n [highlightedValueRef, onValueUpdate, options, setHighlightedValue, value],\n )\n\n React.useEffect(() => {\n if (isEditingRef.current) return\n setDraft(value ? value : \"\")\n }, [value])\n\n React.useEffect(() => {\n lastAcceptedSignatureRef.current = getAcceptedInputSignature(draft)\n }, [draft])\n\n React.useEffect(() => {\n if (value === null) {\n clearCommitPendingRef.current = false\n }\n }, [value])\n\n const triggerClassName = cn(\n \"flex h-10 w-full rounded-md border border-input bg-background px-3 py-2 pr-10 text-base ring-offset-background file:border-0 file:bg-transparent file:text-sm file:font-medium file:text-foreground placeholder:text-muted-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:cursor-not-allowed disabled:opacity-50 md:text-sm\",\n \"transition-colors group-hover:bg-accent group-hover:text-accent-foreground\",\n !draft && \"text-muted-foreground\",\n open && \"ring-2 ring-primary ring-offset-2\",\n \"[&_[data-slot='description']]:hidden\",\n inputClassName,\n )\n\n return (\n <div className=\"relative group\">\n <IMaskInput\n id={id}\n data-testid={triggerTestId}\n data-hydrated={isHydrated ? \"true\" : undefined}\n type=\"text\"\n disabled={disabled}\n readOnly={readOnly}\n inputRef={inputRef}\n autoComplete={\"off\"}\n mask={[\n { mask: \"00:00\", lazy: true },\n { mask: \"0:00\", lazy: true },\n ]}\n dispatch={(appended, dynamicMasked) => {\n const digits = (dynamicMasked.value + appended).replace(/\\D/g, \"\")\n if (digits.length <= 2) return dynamicMasked.compiledMasks[0]\n if (digits.length >= 4) return dynamicMasked.compiledMasks[0]\n\n const hourPrefix = pad2(Number(digits.slice(0, 2)))\n const hasTwoDigitHour = options.some((option) => option.value.startsWith(`${hourPrefix}:`))\n if (hasTwoDigitHour) return dynamicMasked.compiledMasks[0]\n\n return dynamicMasked.compiledMasks[1]\n }}\n placeholder={placeholder}\n value={draft}\n className={triggerClassName}\n onAccept={(accepted, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof accepted === \"string\" ? accepted : String(accepted ?? \"\")\n const nextDigits = nextText.replace(/\\D/g, \"\")\n const nextSignature = getAcceptedInputSignature(nextText)\n if (lastAcceptedSignatureRef.current === nextSignature) {\n return\n }\n lastAcceptedSignatureRef.current = nextSignature\n setDraft(nextText)\n\n if (nextDigits.length !== 0) {\n clearCommitPendingRef.current = false\n return\n }\n\n if (value && !clearCommitPendingRef.current) {\n clearCommitPendingRef.current = true\n onCommit(null)\n }\n }}\n onComplete={(completed, _mask, event) => {\n if (!event) {\n return\n }\n const nextText = typeof completed === \"string\" ? completed : String(completed ?? \"\")\n if (ignoreNextMaskCommitValueRef.current === nextText) {\n ignoreNextMaskCommitValueRef.current = null\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(nextText, options)\n if (!resolved) {\n return\n }\n\n if (resolved.selectableValue) {\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n\n if (value === resolved.selectableValue) {\n return\n }\n\n onCommit(resolved.selectableValue)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n setHighlightedValue(closestOption.value)\n }}\n onPointerDown={() => {\n pointerDownOnInputRef.current = true\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onMouseDown={(event) => {\n pointerDownOnInputRef.current = true\n inputWasFocusedOnPointerDownRef.current = typeof document !== \"undefined\" && document.activeElement === event.currentTarget\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onClick={() => {\n if (disabled) return\n if (!open) {\n setOpen(true)\n }\n }}\n onKeyDown={(event) => {\n if (disabled) {\n return\n }\n\n if (event.key === \"Tab\" && open && !event.defaultPrevented) {\n setOpen(false)\n return\n }\n\n if (event.key === \"Escape\") {\n if (!open) {\n return\n }\n event.preventDefault()\n setOpen(false)\n return\n }\n\n if (!open && !event.defaultPrevented) {\n const shouldReopen =\n (event.key.length === 1 || event.key === \"Backspace\" || event.key === \"Delete\") &&\n !event.ctrlKey &&\n !event.metaKey &&\n !event.altKey\n\n if (shouldReopen) {\n setOpen(true)\n }\n }\n\n if (event.key === \"ArrowDown\" || event.key === \"ArrowUp\") {\n markKeyboardNavigation()\n event.preventDefault()\n\n if (!open) {\n setOpen(true)\n return\n }\n\n moveSelection(event.key === \"ArrowDown\" ? 1 : -1)\n return\n }\n\n if (event.key === \"Enter\") {\n markKeyboardNavigation()\n const resolved = parseTimeInputWithSelectableOption(draft, options)\n if (!resolved) {\n if (!open) {\n return\n }\n\n if (draft.trim() !== \"\") {\n return\n }\n\n const highlightedOption = options.find((option) => option.value === highlightedValueRef.current)\n const fallbackValue =\n (isOptionSelectable(highlightedOption) ? highlightedOption?.value : undefined) ??\n options.find((option) => isOptionSelectable(option))?.value\n\n if (!fallbackValue) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(fallbackValue)\n setDraft(fallbackValue)\n onCommit(fallbackValue)\n setOpen(false)\n return\n }\n\n if (resolved.selectableValue) {\n event.preventDefault()\n setHighlightedValue(resolved.selectableValue)\n setDraft(resolved.selectableValue)\n onCommit(resolved.selectableValue)\n setOpen(false)\n return\n }\n\n const targetMinutes = timeStringToMinutes(resolved.parsed)\n if (targetMinutes == null) {\n return\n }\n\n const closestOption = findClosestSelectableOption(targetMinutes, options)\n if (!closestOption) {\n return\n }\n\n event.preventDefault()\n setHighlightedValue(closestOption.value)\n setDraft(closestOption.value)\n onCommit(closestOption.value)\n setOpen(false)\n return\n }\n }}\n onFocus={(event) => {\n const shouldSelectAll = !pointerDownOnInputRef.current || !inputWasFocusedOnPointerDownRef.current\n pointerDownOnInputRef.current = false\n inputWasFocusedOnPointerDownRef.current = false\n isEditingRef.current = true\n if (shouldSelectAll) {\n const element = event.currentTarget\n requestAnimationFrame(() => element.select())\n }\n\n if (disabled) {\n return\n }\n\n if (open) {\n return\n }\n\n setOpen(true)\n }}\n onBlur={() => {\n isEditingRef.current = false\n\n const trimmed = draft.trim()\n if (!trimmed) {\n setDraft(value ? value : \"\")\n return\n }\n\n const resolved = parseTimeInputWithSelectableOption(trimmed, options)\n if (!resolved) {\n setDraft(value ? value : \"\")\n return\n }\n\n if (!resolved.selectableValue) {\n setDraft(value ? value : \"\")\n return\n }\n\n setDraft(resolved.selectableValue)\n if (value !== resolved.selectableValue) {\n onCommit(resolved.selectableValue)\n }\n }}\n />\n\n <button\n type=\"button\"\n tabIndex={-1}\n disabled={disabled}\n data-slot=\"hours-picker-input-toggle\"\n className={cn(\n \"absolute right-1 top-1/2 inline-flex size-8 -translate-y-1/2 items-center justify-center rounded-md text-muted-foreground transition-colors hover:text-accent-foreground focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-ring focus-visible:ring-offset-2 disabled:pointer-events-none disabled:opacity-50\",\n )}\n aria-label={open ? \"Close time picker\" : \"Open time picker\"}\n onPointerDown={(event) => {\n event.preventDefault()\n }}\n onMouseDown={(event) => {\n event.preventDefault()\n }}\n onClick={() => {\n if (disabled) return\n setOpen(!open)\n }}\n >\n <ChevronDown aria-hidden className=\"size-4\" />\n </button>\n </div>\n )\n}\n"],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index243.js","names":["React","PopperPrimitive.Root","PopperPrimitive.Anchor","PortalPrimitive","ReactDOM","RemoveScroll","PopperPrimitive.Content","PopperPrimitive.Arrow"],"sources":["../../../node_modules/@radix-ui/react-select/dist/index.mjs"],"sourcesContent":["\"use client\";\n\n// src/select.tsx\nimport * as React from \"react\";\nimport * as ReactDOM from \"react-dom\";\nimport { clamp } from \"@radix-ui/number\";\nimport { composeEventHandlers } from \"@radix-ui/primitive\";\nimport { createCollection } from \"@radix-ui/react-collection\";\nimport { useComposedRefs } from \"@radix-ui/react-compose-refs\";\nimport { createContextScope } from \"@radix-ui/react-context\";\nimport { useDirection } from \"@radix-ui/react-direction\";\nimport { DismissableLayer } from \"@radix-ui/react-dismissable-layer\";\nimport { useFocusGuards } from \"@radix-ui/react-focus-guards\";\nimport { FocusScope } from \"@radix-ui/react-focus-scope\";\nimport { useId } from \"@radix-ui/react-id\";\nimport * as PopperPrimitive from \"@radix-ui/react-popper\";\nimport { createPopperScope } from \"@radix-ui/react-popper\";\nimport { Portal as PortalPrimitive } from \"@radix-ui/react-portal\";\nimport { Primitive } from \"@radix-ui/react-primitive\";\nimport { createSlot } from \"@radix-ui/react-slot\";\nimport { useCallbackRef } from \"@radix-ui/react-use-callback-ref\";\nimport { useControllableState } from \"@radix-ui/react-use-controllable-state\";\nimport { useLayoutEffect } from \"@radix-ui/react-use-layout-effect\";\nimport { usePrevious } from \"@radix-ui/react-use-previous\";\nimport { VISUALLY_HIDDEN_STYLES } from \"@radix-ui/react-visually-hidden\";\nimport { hideOthers } from \"aria-hidden\";\nimport { RemoveScroll } from \"react-remove-scroll\";\nimport { Fragment, jsx, jsxs } from \"react/jsx-runtime\";\nvar OPEN_KEYS = [\" \", \"Enter\", \"ArrowUp\", \"ArrowDown\"];\nvar SELECTION_KEYS = [\" \", \"Enter\"];\nvar SELECT_NAME = \"Select\";\nvar [Collection, useCollection, createCollectionScope] = createCollection(SELECT_NAME);\nvar [createSelectContext, createSelectScope] = createContextScope(SELECT_NAME, [\n createCollectionScope,\n createPopperScope\n]);\nvar usePopperScope = createPopperScope();\nvar [SelectProvider, useSelectContext] = createSelectContext(SELECT_NAME);\nvar [SelectNativeOptionsProvider, useSelectNativeOptionsContext] = createSelectContext(SELECT_NAME);\nvar Select = (props) => {\n const {\n __scopeSelect,\n children,\n open: openProp,\n defaultOpen,\n onOpenChange,\n value: valueProp,\n defaultValue,\n onValueChange,\n dir,\n name,\n autoComplete,\n disabled,\n required,\n form\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const [trigger, setTrigger] = React.useState(null);\n const [valueNode, setValueNode] = React.useState(null);\n const [valueNodeHasChildren, setValueNodeHasChildren] = React.useState(false);\n const direction = useDirection(dir);\n const [open, setOpen] = useControllableState({\n prop: openProp,\n defaultProp: defaultOpen ?? false,\n onChange: onOpenChange,\n caller: SELECT_NAME\n });\n const [value, setValue] = useControllableState({\n prop: valueProp,\n defaultProp: defaultValue,\n onChange: onValueChange,\n caller: SELECT_NAME\n });\n const triggerPointerDownPosRef = React.useRef(null);\n const isFormControl = trigger ? form || !!trigger.closest(\"form\") : true;\n const [nativeOptionsSet, setNativeOptionsSet] = React.useState(/* @__PURE__ */ new Set());\n const nativeSelectKey = Array.from(nativeOptionsSet).map((option) => option.props.value).join(\";\");\n return /* @__PURE__ */ jsx(PopperPrimitive.Root, { ...popperScope, children: /* @__PURE__ */ jsxs(\n SelectProvider,\n {\n required,\n scope: __scopeSelect,\n trigger,\n onTriggerChange: setTrigger,\n valueNode,\n onValueNodeChange: setValueNode,\n valueNodeHasChildren,\n onValueNodeHasChildrenChange: setValueNodeHasChildren,\n contentId: useId(),\n value,\n onValueChange: setValue,\n open,\n onOpenChange: setOpen,\n dir: direction,\n triggerPointerDownPosRef,\n disabled,\n children: [\n /* @__PURE__ */ jsx(Collection.Provider, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n SelectNativeOptionsProvider,\n {\n scope: props.__scopeSelect,\n onNativeOptionAdd: React.useCallback((option) => {\n setNativeOptionsSet((prev) => new Set(prev).add(option));\n }, []),\n onNativeOptionRemove: React.useCallback((option) => {\n setNativeOptionsSet((prev) => {\n const optionsSet = new Set(prev);\n optionsSet.delete(option);\n return optionsSet;\n });\n }, []),\n children\n }\n ) }),\n isFormControl ? /* @__PURE__ */ jsxs(\n SelectBubbleInput,\n {\n \"aria-hidden\": true,\n required,\n tabIndex: -1,\n name,\n autoComplete,\n value,\n onChange: (event) => setValue(event.target.value),\n disabled,\n form,\n children: [\n value === void 0 ? /* @__PURE__ */ jsx(\"option\", { value: \"\" }) : null,\n Array.from(nativeOptionsSet)\n ]\n },\n nativeSelectKey\n ) : null\n ]\n }\n ) });\n};\nSelect.displayName = SELECT_NAME;\nvar TRIGGER_NAME = \"SelectTrigger\";\nvar SelectTrigger = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, disabled = false, ...triggerProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(TRIGGER_NAME, __scopeSelect);\n const isDisabled = context.disabled || disabled;\n const composedRefs = useComposedRefs(forwardedRef, context.onTriggerChange);\n const getItems = useCollection(__scopeSelect);\n const pointerTypeRef = React.useRef(\"touch\");\n const [searchRef, handleTypeaheadSearch, resetTypeahead] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.value === context.value);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem !== void 0) {\n context.onValueChange(nextItem.value);\n }\n });\n const handleOpen = (pointerEvent) => {\n if (!isDisabled) {\n context.onOpenChange(true);\n resetTypeahead();\n }\n if (pointerEvent) {\n context.triggerPointerDownPosRef.current = {\n x: Math.round(pointerEvent.pageX),\n y: Math.round(pointerEvent.pageY)\n };\n }\n };\n return /* @__PURE__ */ jsx(PopperPrimitive.Anchor, { asChild: true, ...popperScope, children: /* @__PURE__ */ jsx(\n Primitive.button,\n {\n type: \"button\",\n role: \"combobox\",\n \"aria-controls\": context.contentId,\n \"aria-expanded\": context.open,\n \"aria-required\": context.required,\n \"aria-autocomplete\": \"none\",\n dir: context.dir,\n \"data-state\": context.open ? \"open\" : \"closed\",\n disabled: isDisabled,\n \"data-disabled\": isDisabled ? \"\" : void 0,\n \"data-placeholder\": shouldShowPlaceholder(context.value) ? \"\" : void 0,\n ...triggerProps,\n ref: composedRefs,\n onClick: composeEventHandlers(triggerProps.onClick, (event) => {\n event.currentTarget.focus();\n if (pointerTypeRef.current !== \"mouse\") {\n handleOpen(event);\n }\n }),\n onPointerDown: composeEventHandlers(triggerProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n const target = event.target;\n if (target.hasPointerCapture(event.pointerId)) {\n target.releasePointerCapture(event.pointerId);\n }\n if (event.button === 0 && event.ctrlKey === false && event.pointerType === \"mouse\") {\n handleOpen(event);\n event.preventDefault();\n }\n }),\n onKeyDown: composeEventHandlers(triggerProps.onKeyDown, (event) => {\n const isTypingAhead = searchRef.current !== \"\";\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if (isTypingAhead && event.key === \" \") return;\n if (OPEN_KEYS.includes(event.key)) {\n handleOpen();\n event.preventDefault();\n }\n })\n }\n ) });\n }\n);\nSelectTrigger.displayName = TRIGGER_NAME;\nvar VALUE_NAME = \"SelectValue\";\nvar SelectValue = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, children, placeholder = \"\", ...valueProps } = props;\n const context = useSelectContext(VALUE_NAME, __scopeSelect);\n const { onValueNodeHasChildrenChange } = context;\n const hasChildren = children !== void 0;\n const composedRefs = useComposedRefs(forwardedRef, context.onValueNodeChange);\n useLayoutEffect(() => {\n onValueNodeHasChildrenChange(hasChildren);\n }, [onValueNodeHasChildrenChange, hasChildren]);\n return /* @__PURE__ */ jsx(\n Primitive.span,\n {\n ...valueProps,\n ref: composedRefs,\n style: { pointerEvents: \"none\" },\n children: shouldShowPlaceholder(context.value) ? /* @__PURE__ */ jsx(Fragment, { children: placeholder }) : children\n }\n );\n }\n);\nSelectValue.displayName = VALUE_NAME;\nvar ICON_NAME = \"SelectIcon\";\nvar SelectIcon = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, children, ...iconProps } = props;\n return /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...iconProps, ref: forwardedRef, children: children || \"\\u25BC\" });\n }\n);\nSelectIcon.displayName = ICON_NAME;\nvar PORTAL_NAME = \"SelectPortal\";\nvar SelectPortal = (props) => {\n return /* @__PURE__ */ jsx(PortalPrimitive, { asChild: true, ...props });\n};\nSelectPortal.displayName = PORTAL_NAME;\nvar CONTENT_NAME = \"SelectContent\";\nvar SelectContent = React.forwardRef(\n (props, forwardedRef) => {\n const context = useSelectContext(CONTENT_NAME, props.__scopeSelect);\n const [fragment, setFragment] = React.useState();\n useLayoutEffect(() => {\n setFragment(new DocumentFragment());\n }, []);\n if (!context.open) {\n const frag = fragment;\n return frag ? ReactDOM.createPortal(\n /* @__PURE__ */ jsx(SelectContentProvider, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(Collection.Slot, { scope: props.__scopeSelect, children: /* @__PURE__ */ jsx(\"div\", { children: props.children }) }) }),\n frag\n ) : null;\n }\n return /* @__PURE__ */ jsx(SelectContentImpl, { ...props, ref: forwardedRef });\n }\n);\nSelectContent.displayName = CONTENT_NAME;\nvar CONTENT_MARGIN = 10;\nvar [SelectContentProvider, useSelectContentContext] = createSelectContext(CONTENT_NAME);\nvar CONTENT_IMPL_NAME = \"SelectContentImpl\";\nvar Slot = createSlot(\"SelectContent.RemoveScroll\");\nvar SelectContentImpl = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n position = \"item-aligned\",\n onCloseAutoFocus,\n onEscapeKeyDown,\n onPointerDownOutside,\n //\n // PopperContent props\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions,\n //\n ...contentProps\n } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const [content, setContent] = React.useState(null);\n const [viewport, setViewport] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const [selectedItem, setSelectedItem] = React.useState(null);\n const [selectedItemText, setSelectedItemText] = React.useState(\n null\n );\n const getItems = useCollection(__scopeSelect);\n const [isPositioned, setIsPositioned] = React.useState(false);\n const firstValidItemFoundRef = React.useRef(false);\n React.useEffect(() => {\n if (content) return hideOthers(content);\n }, [content]);\n useFocusGuards();\n const focusFirst = React.useCallback(\n (candidates) => {\n const [firstItem, ...restItems] = getItems().map((item) => item.ref.current);\n const [lastItem] = restItems.slice(-1);\n const PREVIOUSLY_FOCUSED_ELEMENT = document.activeElement;\n for (const candidate of candidates) {\n if (candidate === PREVIOUSLY_FOCUSED_ELEMENT) return;\n candidate?.scrollIntoView({ block: \"nearest\" });\n if (candidate === firstItem && viewport) viewport.scrollTop = 0;\n if (candidate === lastItem && viewport) viewport.scrollTop = viewport.scrollHeight;\n candidate?.focus();\n if (document.activeElement !== PREVIOUSLY_FOCUSED_ELEMENT) return;\n }\n },\n [getItems, viewport]\n );\n const focusSelectedItem = React.useCallback(\n () => focusFirst([selectedItem, content]),\n [focusFirst, selectedItem, content]\n );\n React.useEffect(() => {\n if (isPositioned) {\n focusSelectedItem();\n }\n }, [isPositioned, focusSelectedItem]);\n const { onOpenChange, triggerPointerDownPosRef } = context;\n React.useEffect(() => {\n if (content) {\n let pointerMoveDelta = { x: 0, y: 0 };\n const handlePointerMove = (event) => {\n pointerMoveDelta = {\n x: Math.abs(Math.round(event.pageX) - (triggerPointerDownPosRef.current?.x ?? 0)),\n y: Math.abs(Math.round(event.pageY) - (triggerPointerDownPosRef.current?.y ?? 0))\n };\n };\n const handlePointerUp = (event) => {\n if (pointerMoveDelta.x <= 10 && pointerMoveDelta.y <= 10) {\n event.preventDefault();\n } else {\n if (!content.contains(event.target)) {\n onOpenChange(false);\n }\n }\n document.removeEventListener(\"pointermove\", handlePointerMove);\n triggerPointerDownPosRef.current = null;\n };\n if (triggerPointerDownPosRef.current !== null) {\n document.addEventListener(\"pointermove\", handlePointerMove);\n document.addEventListener(\"pointerup\", handlePointerUp, { capture: true, once: true });\n }\n return () => {\n document.removeEventListener(\"pointermove\", handlePointerMove);\n document.removeEventListener(\"pointerup\", handlePointerUp, { capture: true });\n };\n }\n }, [content, onOpenChange, triggerPointerDownPosRef]);\n React.useEffect(() => {\n const close = () => onOpenChange(false);\n window.addEventListener(\"blur\", close);\n window.addEventListener(\"resize\", close);\n return () => {\n window.removeEventListener(\"blur\", close);\n window.removeEventListener(\"resize\", close);\n };\n }, [onOpenChange]);\n const [searchRef, handleTypeaheadSearch] = useTypeaheadSearch((search) => {\n const enabledItems = getItems().filter((item) => !item.disabled);\n const currentItem = enabledItems.find((item) => item.ref.current === document.activeElement);\n const nextItem = findNextItem(enabledItems, search, currentItem);\n if (nextItem) {\n setTimeout(() => nextItem.ref.current.focus());\n }\n });\n const itemRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItem(node);\n if (isFirstValidItem) firstValidItemFoundRef.current = true;\n }\n },\n [context.value]\n );\n const handleItemLeave = React.useCallback(() => content?.focus(), [content]);\n const itemTextRefCallback = React.useCallback(\n (node, value, disabled) => {\n const isFirstValidItem = !firstValidItemFoundRef.current && !disabled;\n const isSelectedItem = context.value !== void 0 && context.value === value;\n if (isSelectedItem || isFirstValidItem) {\n setSelectedItemText(node);\n }\n },\n [context.value]\n );\n const SelectPosition = position === \"popper\" ? SelectPopperPosition : SelectItemAlignedPosition;\n const popperContentProps = SelectPosition === SelectPopperPosition ? {\n side,\n sideOffset,\n align,\n alignOffset,\n arrowPadding,\n collisionBoundary,\n collisionPadding,\n sticky,\n hideWhenDetached,\n avoidCollisions\n } : {};\n return /* @__PURE__ */ jsx(\n SelectContentProvider,\n {\n scope: __scopeSelect,\n content,\n viewport,\n onViewportChange: setViewport,\n itemRefCallback,\n selectedItem,\n onItemLeave: handleItemLeave,\n itemTextRefCallback,\n focusSelectedItem,\n selectedItemText,\n position,\n isPositioned,\n searchRef,\n children: /* @__PURE__ */ jsx(RemoveScroll, { as: Slot, allowPinchZoom: true, children: /* @__PURE__ */ jsx(\n FocusScope,\n {\n asChild: true,\n trapped: context.open,\n onMountAutoFocus: (event) => {\n event.preventDefault();\n },\n onUnmountAutoFocus: composeEventHandlers(onCloseAutoFocus, (event) => {\n context.trigger?.focus({ preventScroll: true });\n event.preventDefault();\n }),\n children: /* @__PURE__ */ jsx(\n DismissableLayer,\n {\n asChild: true,\n disableOutsidePointerEvents: true,\n onEscapeKeyDown,\n onPointerDownOutside,\n onFocusOutside: (event) => event.preventDefault(),\n onDismiss: () => context.onOpenChange(false),\n children: /* @__PURE__ */ jsx(\n SelectPosition,\n {\n role: \"listbox\",\n id: context.contentId,\n \"data-state\": context.open ? \"open\" : \"closed\",\n dir: context.dir,\n onContextMenu: (event) => event.preventDefault(),\n ...contentProps,\n ...popperContentProps,\n onPlaced: () => setIsPositioned(true),\n ref: composedRefs,\n style: {\n // flex layout so we can place the scroll buttons properly\n display: \"flex\",\n flexDirection: \"column\",\n // reset the outline by default as the content MAY get focused\n outline: \"none\",\n ...contentProps.style\n },\n onKeyDown: composeEventHandlers(contentProps.onKeyDown, (event) => {\n const isModifierKey = event.ctrlKey || event.altKey || event.metaKey;\n if (event.key === \"Tab\") event.preventDefault();\n if (!isModifierKey && event.key.length === 1) handleTypeaheadSearch(event.key);\n if ([\"ArrowUp\", \"ArrowDown\", \"Home\", \"End\"].includes(event.key)) {\n const items = getItems().filter((item) => !item.disabled);\n let candidateNodes = items.map((item) => item.ref.current);\n if ([\"ArrowUp\", \"End\"].includes(event.key)) {\n candidateNodes = candidateNodes.slice().reverse();\n }\n if ([\"ArrowUp\", \"ArrowDown\"].includes(event.key)) {\n const currentElement = event.target;\n const currentIndex = candidateNodes.indexOf(currentElement);\n candidateNodes = candidateNodes.slice(currentIndex + 1);\n }\n setTimeout(() => focusFirst(candidateNodes));\n event.preventDefault();\n }\n })\n }\n )\n }\n )\n }\n ) })\n }\n );\n }\n);\nSelectContentImpl.displayName = CONTENT_IMPL_NAME;\nvar ITEM_ALIGNED_POSITION_NAME = \"SelectItemAlignedPosition\";\nvar SelectItemAlignedPosition = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onPlaced, ...popperProps } = props;\n const context = useSelectContext(CONTENT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(CONTENT_NAME, __scopeSelect);\n const [contentWrapper, setContentWrapper] = React.useState(null);\n const [content, setContent] = React.useState(null);\n const composedRefs = useComposedRefs(forwardedRef, (node) => setContent(node));\n const getItems = useCollection(__scopeSelect);\n const shouldExpandOnScrollRef = React.useRef(false);\n const shouldRepositionRef = React.useRef(true);\n const { viewport, selectedItem, selectedItemText, focusSelectedItem } = contentContext;\n const position = React.useCallback(() => {\n if (context.trigger && context.valueNode && contentWrapper && content && viewport && selectedItem && selectedItemText) {\n const triggerRect = context.trigger.getBoundingClientRect();\n const contentRect = content.getBoundingClientRect();\n const valueNodeRect = context.valueNode.getBoundingClientRect();\n const itemTextRect = selectedItemText.getBoundingClientRect();\n if (context.dir !== \"rtl\") {\n const itemTextOffset = itemTextRect.left - contentRect.left;\n const left = valueNodeRect.left - itemTextOffset;\n const leftDelta = triggerRect.left - left;\n const minContentWidth = triggerRect.width + leftDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const rightEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedLeft = clamp(left, [\n CONTENT_MARGIN,\n // Prevents the content from going off the starting edge of the\n // viewport. It may still go off the ending edge, but this can be\n // controlled by the user since they may want to manage overflow in a\n // specific way.\n // https://github.com/radix-ui/primitives/issues/2049\n Math.max(CONTENT_MARGIN, rightEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.left = clampedLeft + \"px\";\n } else {\n const itemTextOffset = contentRect.right - itemTextRect.right;\n const right = window.innerWidth - valueNodeRect.right - itemTextOffset;\n const rightDelta = window.innerWidth - triggerRect.right - right;\n const minContentWidth = triggerRect.width + rightDelta;\n const contentWidth = Math.max(minContentWidth, contentRect.width);\n const leftEdge = window.innerWidth - CONTENT_MARGIN;\n const clampedRight = clamp(right, [\n CONTENT_MARGIN,\n Math.max(CONTENT_MARGIN, leftEdge - contentWidth)\n ]);\n contentWrapper.style.minWidth = minContentWidth + \"px\";\n contentWrapper.style.right = clampedRight + \"px\";\n }\n const items = getItems();\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const itemsHeight = viewport.scrollHeight;\n const contentStyles = window.getComputedStyle(content);\n const contentBorderTopWidth = parseInt(contentStyles.borderTopWidth, 10);\n const contentPaddingTop = parseInt(contentStyles.paddingTop, 10);\n const contentBorderBottomWidth = parseInt(contentStyles.borderBottomWidth, 10);\n const contentPaddingBottom = parseInt(contentStyles.paddingBottom, 10);\n const fullContentHeight = contentBorderTopWidth + contentPaddingTop + itemsHeight + contentPaddingBottom + contentBorderBottomWidth;\n const minContentHeight = Math.min(selectedItem.offsetHeight * 5, fullContentHeight);\n const viewportStyles = window.getComputedStyle(viewport);\n const viewportPaddingTop = parseInt(viewportStyles.paddingTop, 10);\n const viewportPaddingBottom = parseInt(viewportStyles.paddingBottom, 10);\n const topEdgeToTriggerMiddle = triggerRect.top + triggerRect.height / 2 - CONTENT_MARGIN;\n const triggerMiddleToBottomEdge = availableHeight - topEdgeToTriggerMiddle;\n const selectedItemHalfHeight = selectedItem.offsetHeight / 2;\n const itemOffsetMiddle = selectedItem.offsetTop + selectedItemHalfHeight;\n const contentTopToItemMiddle = contentBorderTopWidth + contentPaddingTop + itemOffsetMiddle;\n const itemMiddleToContentBottom = fullContentHeight - contentTopToItemMiddle;\n const willAlignWithoutTopOverflow = contentTopToItemMiddle <= topEdgeToTriggerMiddle;\n if (willAlignWithoutTopOverflow) {\n const isLastItem = items.length > 0 && selectedItem === items[items.length - 1].ref.current;\n contentWrapper.style.bottom = \"0px\";\n const viewportOffsetBottom = content.clientHeight - viewport.offsetTop - viewport.offsetHeight;\n const clampedTriggerMiddleToBottomEdge = Math.max(\n triggerMiddleToBottomEdge,\n selectedItemHalfHeight + // viewport might have padding bottom, include it to avoid a scrollable viewport\n (isLastItem ? viewportPaddingBottom : 0) + viewportOffsetBottom + contentBorderBottomWidth\n );\n const height = contentTopToItemMiddle + clampedTriggerMiddleToBottomEdge;\n contentWrapper.style.height = height + \"px\";\n } else {\n const isFirstItem = items.length > 0 && selectedItem === items[0].ref.current;\n contentWrapper.style.top = \"0px\";\n const clampedTopEdgeToTriggerMiddle = Math.max(\n topEdgeToTriggerMiddle,\n contentBorderTopWidth + viewport.offsetTop + // viewport might have padding top, include it to avoid a scrollable viewport\n (isFirstItem ? viewportPaddingTop : 0) + selectedItemHalfHeight\n );\n const height = clampedTopEdgeToTriggerMiddle + itemMiddleToContentBottom;\n contentWrapper.style.height = height + \"px\";\n viewport.scrollTop = contentTopToItemMiddle - topEdgeToTriggerMiddle + viewport.offsetTop;\n }\n contentWrapper.style.margin = `${CONTENT_MARGIN}px 0`;\n contentWrapper.style.minHeight = minContentHeight + \"px\";\n contentWrapper.style.maxHeight = availableHeight + \"px\";\n onPlaced?.();\n requestAnimationFrame(() => shouldExpandOnScrollRef.current = true);\n }\n }, [\n getItems,\n context.trigger,\n context.valueNode,\n contentWrapper,\n content,\n viewport,\n selectedItem,\n selectedItemText,\n context.dir,\n onPlaced\n ]);\n useLayoutEffect(() => position(), [position]);\n const [contentZIndex, setContentZIndex] = React.useState();\n useLayoutEffect(() => {\n if (content) setContentZIndex(window.getComputedStyle(content).zIndex);\n }, [content]);\n const handleScrollButtonChange = React.useCallback(\n (node) => {\n if (node && shouldRepositionRef.current === true) {\n position();\n focusSelectedItem?.();\n shouldRepositionRef.current = false;\n }\n },\n [position, focusSelectedItem]\n );\n return /* @__PURE__ */ jsx(\n SelectViewportProvider,\n {\n scope: __scopeSelect,\n contentWrapper,\n shouldExpandOnScrollRef,\n onScrollButtonChange: handleScrollButtonChange,\n children: /* @__PURE__ */ jsx(\n \"div\",\n {\n ref: setContentWrapper,\n style: {\n display: \"flex\",\n flexDirection: \"column\",\n position: \"fixed\",\n zIndex: contentZIndex\n },\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n ...popperProps,\n ref: composedRefs,\n style: {\n // When we get the height of the content, it includes borders. If we were to set\n // the height without having `boxSizing: 'border-box'` it would be too big.\n boxSizing: \"border-box\",\n // We need to ensure the content doesn't get taller than the wrapper\n maxHeight: \"100%\",\n ...popperProps.style\n }\n }\n )\n }\n )\n }\n );\n});\nSelectItemAlignedPosition.displayName = ITEM_ALIGNED_POSITION_NAME;\nvar POPPER_POSITION_NAME = \"SelectPopperPosition\";\nvar SelectPopperPosition = React.forwardRef((props, forwardedRef) => {\n const {\n __scopeSelect,\n align = \"start\",\n collisionPadding = CONTENT_MARGIN,\n ...popperProps\n } = props;\n const popperScope = usePopperScope(__scopeSelect);\n return /* @__PURE__ */ jsx(\n PopperPrimitive.Content,\n {\n ...popperScope,\n ...popperProps,\n ref: forwardedRef,\n align,\n collisionPadding,\n style: {\n // Ensure border-box for floating-ui calculations\n boxSizing: \"border-box\",\n ...popperProps.style,\n // re-namespace exposed content custom properties\n ...{\n \"--radix-select-content-transform-origin\": \"var(--radix-popper-transform-origin)\",\n \"--radix-select-content-available-width\": \"var(--radix-popper-available-width)\",\n \"--radix-select-content-available-height\": \"var(--radix-popper-available-height)\",\n \"--radix-select-trigger-width\": \"var(--radix-popper-anchor-width)\",\n \"--radix-select-trigger-height\": \"var(--radix-popper-anchor-height)\"\n }\n }\n }\n );\n});\nSelectPopperPosition.displayName = POPPER_POSITION_NAME;\nvar [SelectViewportProvider, useSelectViewportContext] = createSelectContext(CONTENT_NAME, {});\nvar VIEWPORT_NAME = \"SelectViewport\";\nvar SelectViewport = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, nonce, ...viewportProps } = props;\n const contentContext = useSelectContentContext(VIEWPORT_NAME, __scopeSelect);\n const viewportContext = useSelectViewportContext(VIEWPORT_NAME, __scopeSelect);\n const composedRefs = useComposedRefs(forwardedRef, contentContext.onViewportChange);\n const prevScrollTopRef = React.useRef(0);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(\n \"style\",\n {\n dangerouslySetInnerHTML: {\n __html: `[data-radix-select-viewport]{scrollbar-width:none;-ms-overflow-style:none;-webkit-overflow-scrolling:touch;}[data-radix-select-viewport]::-webkit-scrollbar{display:none}`\n },\n nonce\n }\n ),\n /* @__PURE__ */ jsx(Collection.Slot, { scope: __scopeSelect, children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"data-radix-select-viewport\": \"\",\n role: \"presentation\",\n ...viewportProps,\n ref: composedRefs,\n style: {\n // we use position: 'relative' here on the `viewport` so that when we call\n // `selectedItem.offsetTop` in calculations, the offset is relative to the viewport\n // (independent of the scrollUpButton).\n position: \"relative\",\n flex: 1,\n // Viewport should only be scrollable in the vertical direction.\n // This won't work in vertical writing modes, so we'll need to\n // revisit this if/when that is supported\n // https://developer.chrome.com/blog/vertical-form-controls\n overflow: \"hidden auto\",\n ...viewportProps.style\n },\n onScroll: composeEventHandlers(viewportProps.onScroll, (event) => {\n const viewport = event.currentTarget;\n const { contentWrapper, shouldExpandOnScrollRef } = viewportContext;\n if (shouldExpandOnScrollRef?.current && contentWrapper) {\n const scrolledBy = Math.abs(prevScrollTopRef.current - viewport.scrollTop);\n if (scrolledBy > 0) {\n const availableHeight = window.innerHeight - CONTENT_MARGIN * 2;\n const cssMinHeight = parseFloat(contentWrapper.style.minHeight);\n const cssHeight = parseFloat(contentWrapper.style.height);\n const prevHeight = Math.max(cssMinHeight, cssHeight);\n if (prevHeight < availableHeight) {\n const nextHeight = prevHeight + scrolledBy;\n const clampedNextHeight = Math.min(availableHeight, nextHeight);\n const heightDiff = nextHeight - clampedNextHeight;\n contentWrapper.style.height = clampedNextHeight + \"px\";\n if (contentWrapper.style.bottom === \"0px\") {\n viewport.scrollTop = heightDiff > 0 ? heightDiff : 0;\n contentWrapper.style.justifyContent = \"flex-end\";\n }\n }\n }\n }\n prevScrollTopRef.current = viewport.scrollTop;\n })\n }\n ) })\n ] });\n }\n);\nSelectViewport.displayName = VIEWPORT_NAME;\nvar GROUP_NAME = \"SelectGroup\";\nvar [SelectGroupContextProvider, useSelectGroupContext] = createSelectContext(GROUP_NAME);\nvar SelectGroup = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...groupProps } = props;\n const groupId = useId();\n return /* @__PURE__ */ jsx(SelectGroupContextProvider, { scope: __scopeSelect, id: groupId, children: /* @__PURE__ */ jsx(Primitive.div, { role: \"group\", \"aria-labelledby\": groupId, ...groupProps, ref: forwardedRef }) });\n }\n);\nSelectGroup.displayName = GROUP_NAME;\nvar LABEL_NAME = \"SelectLabel\";\nvar SelectLabel = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...labelProps } = props;\n const groupContext = useSelectGroupContext(LABEL_NAME, __scopeSelect);\n return /* @__PURE__ */ jsx(Primitive.div, { id: groupContext.id, ...labelProps, ref: forwardedRef });\n }\n);\nSelectLabel.displayName = LABEL_NAME;\nvar ITEM_NAME = \"SelectItem\";\nvar [SelectItemContextProvider, useSelectItemContext] = createSelectContext(ITEM_NAME);\nvar SelectItem = React.forwardRef(\n (props, forwardedRef) => {\n const {\n __scopeSelect,\n value,\n disabled = false,\n textValue: textValueProp,\n ...itemProps\n } = props;\n const context = useSelectContext(ITEM_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_NAME, __scopeSelect);\n const isSelected = context.value === value;\n const [textValue, setTextValue] = React.useState(textValueProp ?? \"\");\n const [isFocused, setIsFocused] = React.useState(false);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => contentContext.itemRefCallback?.(node, value, disabled)\n );\n const textId = useId();\n const pointerTypeRef = React.useRef(\"touch\");\n const handleSelect = () => {\n if (!disabled) {\n context.onValueChange(value);\n context.onOpenChange(false);\n }\n };\n if (value === \"\") {\n throw new Error(\n \"A <Select.Item /> must have a value prop that is not an empty string. This is because the Select value can be set to an empty string to clear the selection and show the placeholder.\"\n );\n }\n return /* @__PURE__ */ jsx(\n SelectItemContextProvider,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textId,\n isSelected,\n onItemTextChange: React.useCallback((node) => {\n setTextValue((prevTextValue) => prevTextValue || (node?.textContent ?? \"\").trim());\n }, []),\n children: /* @__PURE__ */ jsx(\n Collection.ItemSlot,\n {\n scope: __scopeSelect,\n value,\n disabled,\n textValue,\n children: /* @__PURE__ */ jsx(\n Primitive.div,\n {\n role: \"option\",\n \"aria-labelledby\": textId,\n \"data-highlighted\": isFocused ? \"\" : void 0,\n \"aria-selected\": isSelected && isFocused,\n \"data-state\": isSelected ? \"checked\" : \"unchecked\",\n \"aria-disabled\": disabled || void 0,\n \"data-disabled\": disabled ? \"\" : void 0,\n tabIndex: disabled ? void 0 : -1,\n ...itemProps,\n ref: composedRefs,\n onFocus: composeEventHandlers(itemProps.onFocus, () => setIsFocused(true)),\n onBlur: composeEventHandlers(itemProps.onBlur, () => setIsFocused(false)),\n onClick: composeEventHandlers(itemProps.onClick, () => {\n if (pointerTypeRef.current !== \"mouse\") handleSelect();\n }),\n onPointerUp: composeEventHandlers(itemProps.onPointerUp, () => {\n if (pointerTypeRef.current === \"mouse\") handleSelect();\n }),\n onPointerDown: composeEventHandlers(itemProps.onPointerDown, (event) => {\n pointerTypeRef.current = event.pointerType;\n }),\n onPointerMove: composeEventHandlers(itemProps.onPointerMove, (event) => {\n pointerTypeRef.current = event.pointerType;\n if (disabled) {\n contentContext.onItemLeave?.();\n } else if (pointerTypeRef.current === \"mouse\") {\n event.currentTarget.focus({ preventScroll: true });\n }\n }),\n onPointerLeave: composeEventHandlers(itemProps.onPointerLeave, (event) => {\n if (event.currentTarget === document.activeElement) {\n contentContext.onItemLeave?.();\n }\n }),\n onKeyDown: composeEventHandlers(itemProps.onKeyDown, (event) => {\n const isTypingAhead = contentContext.searchRef?.current !== \"\";\n if (isTypingAhead && event.key === \" \") return;\n if (SELECTION_KEYS.includes(event.key)) handleSelect();\n if (event.key === \" \") event.preventDefault();\n })\n }\n )\n }\n )\n }\n );\n }\n);\nSelectItem.displayName = ITEM_NAME;\nvar ITEM_TEXT_NAME = \"SelectItemText\";\nvar SelectItemText = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, className, style, ...itemTextProps } = props;\n const context = useSelectContext(ITEM_TEXT_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ITEM_TEXT_NAME, __scopeSelect);\n const itemContext = useSelectItemContext(ITEM_TEXT_NAME, __scopeSelect);\n const nativeOptionsContext = useSelectNativeOptionsContext(ITEM_TEXT_NAME, __scopeSelect);\n const [itemTextNode, setItemTextNode] = React.useState(null);\n const composedRefs = useComposedRefs(\n forwardedRef,\n (node) => setItemTextNode(node),\n itemContext.onItemTextChange,\n (node) => contentContext.itemTextRefCallback?.(node, itemContext.value, itemContext.disabled)\n );\n const textContent = itemTextNode?.textContent;\n const nativeOption = React.useMemo(\n () => /* @__PURE__ */ jsx(\"option\", { value: itemContext.value, disabled: itemContext.disabled, children: textContent }, itemContext.value),\n [itemContext.disabled, itemContext.value, textContent]\n );\n const { onNativeOptionAdd, onNativeOptionRemove } = nativeOptionsContext;\n useLayoutEffect(() => {\n onNativeOptionAdd(nativeOption);\n return () => onNativeOptionRemove(nativeOption);\n }, [onNativeOptionAdd, onNativeOptionRemove, nativeOption]);\n return /* @__PURE__ */ jsxs(Fragment, { children: [\n /* @__PURE__ */ jsx(Primitive.span, { id: itemContext.textId, ...itemTextProps, ref: composedRefs }),\n itemContext.isSelected && context.valueNode && !context.valueNodeHasChildren ? ReactDOM.createPortal(itemTextProps.children, context.valueNode) : null\n ] });\n }\n);\nSelectItemText.displayName = ITEM_TEXT_NAME;\nvar ITEM_INDICATOR_NAME = \"SelectItemIndicator\";\nvar SelectItemIndicator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...itemIndicatorProps } = props;\n const itemContext = useSelectItemContext(ITEM_INDICATOR_NAME, __scopeSelect);\n return itemContext.isSelected ? /* @__PURE__ */ jsx(Primitive.span, { \"aria-hidden\": true, ...itemIndicatorProps, ref: forwardedRef }) : null;\n }\n);\nSelectItemIndicator.displayName = ITEM_INDICATOR_NAME;\nvar SCROLL_UP_BUTTON_NAME = \"SelectScrollUpButton\";\nvar SelectScrollUpButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_UP_BUTTON_NAME, props.__scopeSelect);\n const [canScrollUp, setCanScrollUp] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const canScrollUp2 = viewport.scrollTop > 0;\n setCanScrollUp(canScrollUp2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollUp ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop - selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollUpButton.displayName = SCROLL_UP_BUTTON_NAME;\nvar SCROLL_DOWN_BUTTON_NAME = \"SelectScrollDownButton\";\nvar SelectScrollDownButton = React.forwardRef((props, forwardedRef) => {\n const contentContext = useSelectContentContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const viewportContext = useSelectViewportContext(SCROLL_DOWN_BUTTON_NAME, props.__scopeSelect);\n const [canScrollDown, setCanScrollDown] = React.useState(false);\n const composedRefs = useComposedRefs(forwardedRef, viewportContext.onScrollButtonChange);\n useLayoutEffect(() => {\n if (contentContext.viewport && contentContext.isPositioned) {\n let handleScroll2 = function() {\n const maxScroll = viewport.scrollHeight - viewport.clientHeight;\n const canScrollDown2 = Math.ceil(viewport.scrollTop) < maxScroll;\n setCanScrollDown(canScrollDown2);\n };\n var handleScroll = handleScroll2;\n const viewport = contentContext.viewport;\n handleScroll2();\n viewport.addEventListener(\"scroll\", handleScroll2);\n return () => viewport.removeEventListener(\"scroll\", handleScroll2);\n }\n }, [contentContext.viewport, contentContext.isPositioned]);\n return canScrollDown ? /* @__PURE__ */ jsx(\n SelectScrollButtonImpl,\n {\n ...props,\n ref: composedRefs,\n onAutoScroll: () => {\n const { viewport, selectedItem } = contentContext;\n if (viewport && selectedItem) {\n viewport.scrollTop = viewport.scrollTop + selectedItem.offsetHeight;\n }\n }\n }\n ) : null;\n});\nSelectScrollDownButton.displayName = SCROLL_DOWN_BUTTON_NAME;\nvar SelectScrollButtonImpl = React.forwardRef((props, forwardedRef) => {\n const { __scopeSelect, onAutoScroll, ...scrollIndicatorProps } = props;\n const contentContext = useSelectContentContext(\"SelectScrollButton\", __scopeSelect);\n const autoScrollTimerRef = React.useRef(null);\n const getItems = useCollection(__scopeSelect);\n const clearAutoScrollTimer = React.useCallback(() => {\n if (autoScrollTimerRef.current !== null) {\n window.clearInterval(autoScrollTimerRef.current);\n autoScrollTimerRef.current = null;\n }\n }, []);\n React.useEffect(() => {\n return () => clearAutoScrollTimer();\n }, [clearAutoScrollTimer]);\n useLayoutEffect(() => {\n const activeItem = getItems().find((item) => item.ref.current === document.activeElement);\n activeItem?.ref.current?.scrollIntoView({ block: \"nearest\" });\n }, [getItems]);\n return /* @__PURE__ */ jsx(\n Primitive.div,\n {\n \"aria-hidden\": true,\n ...scrollIndicatorProps,\n ref: forwardedRef,\n style: { flexShrink: 0, ...scrollIndicatorProps.style },\n onPointerDown: composeEventHandlers(scrollIndicatorProps.onPointerDown, () => {\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerMove: composeEventHandlers(scrollIndicatorProps.onPointerMove, () => {\n contentContext.onItemLeave?.();\n if (autoScrollTimerRef.current === null) {\n autoScrollTimerRef.current = window.setInterval(onAutoScroll, 50);\n }\n }),\n onPointerLeave: composeEventHandlers(scrollIndicatorProps.onPointerLeave, () => {\n clearAutoScrollTimer();\n })\n }\n );\n});\nvar SEPARATOR_NAME = \"SelectSeparator\";\nvar SelectSeparator = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...separatorProps } = props;\n return /* @__PURE__ */ jsx(Primitive.div, { \"aria-hidden\": true, ...separatorProps, ref: forwardedRef });\n }\n);\nSelectSeparator.displayName = SEPARATOR_NAME;\nvar ARROW_NAME = \"SelectArrow\";\nvar SelectArrow = React.forwardRef(\n (props, forwardedRef) => {\n const { __scopeSelect, ...arrowProps } = props;\n const popperScope = usePopperScope(__scopeSelect);\n const context = useSelectContext(ARROW_NAME, __scopeSelect);\n const contentContext = useSelectContentContext(ARROW_NAME, __scopeSelect);\n return context.open && contentContext.position === \"popper\" ? /* @__PURE__ */ jsx(PopperPrimitive.Arrow, { ...popperScope, ...arrowProps, ref: forwardedRef }) : null;\n }\n);\nSelectArrow.displayName = ARROW_NAME;\nvar BUBBLE_INPUT_NAME = \"SelectBubbleInput\";\nvar SelectBubbleInput = React.forwardRef(\n ({ __scopeSelect, value, ...props }, forwardedRef) => {\n const ref = React.useRef(null);\n const composedRefs = useComposedRefs(forwardedRef, ref);\n const prevValue = usePrevious(value);\n React.useEffect(() => {\n const select = ref.current;\n if (!select) return;\n const selectProto = window.HTMLSelectElement.prototype;\n const descriptor = Object.getOwnPropertyDescriptor(\n selectProto,\n \"value\"\n );\n const setValue = descriptor.set;\n if (prevValue !== value && setValue) {\n const event = new Event(\"change\", { bubbles: true });\n setValue.call(select, value);\n select.dispatchEvent(event);\n }\n }, [prevValue, value]);\n return /* @__PURE__ */ jsx(\n Primitive.select,\n {\n ...props,\n style: { ...VISUALLY_HIDDEN_STYLES, ...props.style },\n ref: composedRefs,\n defaultValue: value\n }\n );\n }\n);\nSelectBubbleInput.displayName = BUBBLE_INPUT_NAME;\nfunction shouldShowPlaceholder(value) {\n return value === \"\" || value === void 0;\n}\nfunction useTypeaheadSearch(onSearchChange) {\n const handleSearchChange = useCallbackRef(onSearchChange);\n const searchRef = React.useRef(\"\");\n const timerRef = React.useRef(0);\n const handleTypeaheadSearch = React.useCallback(\n (key) => {\n const search = searchRef.current + key;\n handleSearchChange(search);\n (function updateSearch(value) {\n searchRef.current = value;\n window.clearTimeout(timerRef.current);\n if (value !== \"\") timerRef.current = window.setTimeout(() => updateSearch(\"\"), 1e3);\n })(search);\n },\n [handleSearchChange]\n );\n const resetTypeahead = React.useCallback(() => {\n searchRef.current = \"\";\n window.clearTimeout(timerRef.current);\n }, []);\n React.useEffect(() => {\n return () => window.clearTimeout(timerRef.current);\n }, []);\n return [searchRef, handleTypeaheadSearch, resetTypeahead];\n}\nfunction findNextItem(items, search, currentItem) {\n const isRepeated = search.length > 1 && Array.from(search).every((char) => char === search[0]);\n const normalizedSearch = isRepeated ? search[0] : search;\n const currentItemIndex = currentItem ? items.indexOf(currentItem) : -1;\n let wrappedItems = wrapArray(items, Math.max(currentItemIndex, 0));\n const excludeCurrentItem = normalizedSearch.length === 1;\n if (excludeCurrentItem) wrappedItems = wrappedItems.filter((v) => v !== currentItem);\n const nextItem = wrappedItems.find(\n (item) => item.textValue.toLowerCase().startsWith(normalizedSearch.toLowerCase())\n );\n return nextItem !== currentItem ? nextItem : void 0;\n}\nfunction wrapArray(array, startIndex) {\n return array.map((_, index) => array[(startIndex + index) % array.length]);\n}\nvar Root2 = Select;\nvar Trigger = SelectTrigger;\nvar Value = SelectValue;\nvar Icon = SelectIcon;\nvar Portal = SelectPortal;\nvar Content2 = SelectContent;\nvar Viewport = SelectViewport;\nvar Group = SelectGroup;\nvar Label = SelectLabel;\nvar Item = SelectItem;\nvar ItemText = SelectItemText;\nvar ItemIndicator = SelectItemIndicator;\nvar ScrollUpButton = SelectScrollUpButton;\nvar ScrollDownButton = SelectScrollDownButton;\nvar Separator = SelectSeparator;\nvar Arrow2 = SelectArrow;\nexport {\n Arrow2 as Arrow,\n Content2 as Content,\n Group,\n Icon,\n Item,\n ItemIndicator,\n ItemText,\n Label,\n Portal,\n Root2 as Root,\n ScrollDownButton,\n ScrollUpButton,\n Select,\n SelectArrow,\n SelectContent,\n SelectGroup,\n SelectIcon,\n SelectItem,\n SelectItemIndicator,\n SelectItemText,\n SelectLabel,\n SelectPortal,\n SelectScrollDownButton,\n SelectScrollUpButton,\n SelectSeparator,\n SelectTrigger,\n SelectValue,\n SelectViewport,\n Separator,\n Trigger,\n Value,\n Viewport,\n createSelectScope\n};\n//# sourceMappingURL=index.mjs.map\n"],"x_google_ignoreList":[0],"mappings":"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"}
|