@mateosuarezdev/react-ui 1.0.16 → 1.0.18
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.cjs +1 -1
- package/dist/index.cjs.map +1 -1
- package/dist/index.js +183 -181
- package/dist/index.js.map +1 -1
- package/package.json +6 -1
package/dist/index.cjs.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.cjs","sources":["../src/utils/design.ts","../src/utils/forms.ts","../src/utils/focus.ts","../src/utils/overflow.tsx","../src/components/Avatar.tsx","../src/components/AvatarsGroup.tsx","../../../node_modules/@mateosuarezdev/atoms/dist/react.js","../src/hooks/use-large-screen.tsx","../src/hooks/use-merged-ref.tsx","../src/hooks/use-ripple.tsx","../src/hooks/use-popover.tsx","../src/hooks/use-click-away.tsx","../src/hooks/use-key-listener.tsx","../src/components/Button.tsx","../../../node_modules/date-fns/constants.js","../../../node_modules/date-fns/constructFrom.js","../../../node_modules/date-fns/toDate.js","../../../node_modules/date-fns/addMonths.js","../../../node_modules/date-fns/_lib/defaultOptions.js","../../../node_modules/date-fns/startOfWeek.js","../../../node_modules/date-fns/startOfISOWeek.js","../../../node_modules/date-fns/getISOWeekYear.js","../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../../../node_modules/date-fns/_lib/normalizeDates.js","../../../node_modules/date-fns/startOfDay.js","../../../node_modules/date-fns/differenceInCalendarDays.js","../../../node_modules/date-fns/startOfISOWeekYear.js","../../../node_modules/date-fns/isSameDay.js","../../../node_modules/date-fns/isDate.js","../../../node_modules/date-fns/isValid.js","../../../node_modules/date-fns/endOfMonth.js","../../../node_modules/date-fns/_lib/normalizeInterval.js","../../../node_modules/date-fns/eachDayOfInterval.js","../../../node_modules/date-fns/startOfMonth.js","../../../node_modules/date-fns/startOfYear.js","../../../node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../../../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../../../node_modules/date-fns/locale/en-US/_lib/formatLong.js","../../../node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../../../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../../../node_modules/date-fns/locale/en-US/_lib/localize.js","../../../node_modules/date-fns/locale/_lib/buildMatchFn.js","../../../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../../../node_modules/date-fns/locale/en-US/_lib/match.js","../../../node_modules/date-fns/locale/en-US.js","../../../node_modules/date-fns/getDayOfYear.js","../../../node_modules/date-fns/getISOWeek.js","../../../node_modules/date-fns/getWeekYear.js","../../../node_modules/date-fns/startOfWeekYear.js","../../../node_modules/date-fns/getWeek.js","../../../node_modules/date-fns/_lib/addLeadingZeros.js","../../../node_modules/date-fns/_lib/format/lightFormatters.js","../../../node_modules/date-fns/_lib/format/formatters.js","../../../node_modules/date-fns/_lib/format/longFormatters.js","../../../node_modules/date-fns/_lib/protectedTokens.js","../../../node_modules/date-fns/format.js","../../../node_modules/date-fns/isSameMonth.js","../../../node_modules/date-fns/subMonths.js","../../../node_modules/date-fns/locale/es/_lib/formatDistance.js","../../../node_modules/date-fns/locale/es/_lib/formatLong.js","../../../node_modules/date-fns/locale/es/_lib/formatRelative.js","../../../node_modules/date-fns/locale/es/_lib/localize.js","../../../node_modules/date-fns/locale/es/_lib/match.js","../../../node_modules/date-fns/locale/es.js","../../../node_modules/@react-aria/utils/dist/useLayoutEffect.mjs","../../../node_modules/@react-aria/utils/dist/domHelpers.mjs","../../../node_modules/@react-stately/flags/dist/import.mjs","../../../node_modules/@react-aria/utils/dist/DOMFunctions.mjs","../../../node_modules/@react-aria/utils/dist/ShadowTreeWalker.mjs","../../../node_modules/@react-aria/utils/dist/focusWithoutScrolling.mjs","../../../node_modules/@react-aria/utils/dist/platform.mjs","../../../node_modules/@react-aria/utils/dist/runAfterTransition.mjs","../../../node_modules/@react-aria/utils/dist/isVirtualEvent.mjs","../../../node_modules/@react-aria/utils/dist/isElementVisible.mjs","../../../node_modules/@react-aria/utils/dist/isFocusable.mjs","../../../node_modules/@react-aria/interactions/dist/utils.mjs","../../../node_modules/@react-aria/interactions/dist/useFocusVisible.mjs","../../../node_modules/@react-aria/interactions/dist/focusSafely.mjs","../../../node_modules/@react-aria/focus/dist/FocusScope.mjs","../src/components/Portal.tsx","../src/components/PopoverCard.tsx","../src/components/Calendar.tsx","../src/components/Checkbox.tsx","../../../node_modules/zod/v4/core/core.js","../../../node_modules/zod/v4/core/util.js","../../../node_modules/zod/v4/core/errors.js","../../../node_modules/zod/v4/core/parse.js","../../../node_modules/@hookform/resolvers/zod/dist/zod.mjs","../src/components/Form.tsx","../src/components/Icon.tsx","../src/components/Input.tsx","../src/components/KeepAlive.tsx","../src/components/List.tsx","../src/components/MultiSelect.tsx","../src/components/PageTitle.tsx","../src/components/SearchInput.tsx","../src/components/SeeMoreText.tsx","../src/animations/utils/scroll.ts","../src/animations/utils/variants.ts","../src/components/SegmentedControl.tsx","../src/components/Separator.tsx","../src/components/Spinner.tsx","../src/components/Submit.tsx","../src/components/SuperModal.tsx","../src/components/Switch.tsx","../src/components/Tags.tsx","../src/components/TextArea.tsx","../src/utils/auto-animate.ts","../src/components/WorkingHours.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\n//Custom ClassName\r\nexport type { ClassValue };\r\n\r\n/**Tailwind Merge + Clsx */\r\nexport const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));\r\n\r\n/**\r\n * Creates a throttled function that only invokes func at most once per every limit milliseconds.\r\n * The first call executes immediately, subsequent calls are rate-limited, and the last call\r\n * during rapid firing is guaranteed to execute with the most recent arguments.\r\n *\r\n * @param func - The function to throttle\r\n * @param limit - The number of milliseconds to throttle invocations to (default: 100)\r\n * @returns A throttled version of the function\r\n *\r\n * @example\r\n * const handleScroll = throttle(() => {\r\n * console.log('Scrolled!');\r\n * }, 200);\r\n *\r\n * window.addEventListener('scroll', handleScroll);\r\n */\r\nexport function throttle<T extends (...args: any[]) => any>(\r\n func: T,\r\n limit: number = 100\r\n): (...args: Parameters<T>) => void {\r\n let lastRan: number | null = null;\r\n let timeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return function (this: any, ...args: Parameters<T>) {\r\n const now = Date.now();\r\n\r\n if (lastRan === null || now - lastRan >= limit) {\r\n func.apply(this, args);\r\n lastRan = now;\r\n } else {\r\n if (timeout) clearTimeout(timeout);\r\n timeout = setTimeout(() => {\r\n func.apply(this, args);\r\n lastRan = Date.now();\r\n }, limit - (now - lastRan));\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Creates a debounced function that delays invoking func until after delay milliseconds\r\n * have elapsed since the last time the debounced function was invoked. Each call resets\r\n * the timer, ensuring func only executes after activity has stopped.\r\n *\r\n * @param func - The function to debounce\r\n * @param delay - The number of milliseconds to delay (default: 300)\r\n * @returns A debounced version of the function\r\n *\r\n * @example\r\n * const handleSearch = debounce((query) => {\r\n * fetchResults(query);\r\n * }, 300);\r\n *\r\n * input.addEventListener('input', (e) => handleSearch(e.target.value));\r\n */\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n delay: number = 500\r\n): (...args: Parameters<T>) => void {\r\n let timeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return function (this: any, ...args: Parameters<T>) {\r\n if (timeout) clearTimeout(timeout);\r\n\r\n timeout = setTimeout(() => {\r\n func.apply(this, args);\r\n timeout = null;\r\n }, delay);\r\n };\r\n}\r\n\r\nexport function generateInitials(name: string) {\r\n if (!name) return \"\";\r\n\r\n // Trim and remove extra spaces\r\n const trimmedName = name.trim().replace(/\\s+/g, \" \");\r\n\r\n // Split by space to get words\r\n const words = trimmedName.split(\" \");\r\n\r\n // If no words (empty string), return empty\r\n if (words.length === 0 || words[0] === \"\") {\r\n return \"\";\r\n }\r\n\r\n // If only one word, return first letter\r\n if (words.length === 1) {\r\n return words[0].charAt(0).toUpperCase();\r\n }\r\n\r\n // If two or more words, return first letter of first two words\r\n return (words[0].charAt(0) + words[1].charAt(0)).toUpperCase();\r\n}\r\n","export function setFocusEnd(element: HTMLInputElement) {\r\n element.focus();\r\n const length = element.value.length;\r\n element.setSelectionRange(length, length);\r\n}\r\n\r\nexport function removeWhitespaces(text: string) {\r\n return text.replace(/\\s/g, \"\");\r\n}\r\n\r\nexport function toTitleCase(str: string) {\r\n // First, convert the entire string to lowercase\r\n const lowerCase = str.toLowerCase();\r\n\r\n // Split the string into an array of words\r\n const words = lowerCase.split(\" \");\r\n\r\n // Capitalize the first letter of each word\r\n const titleCaseWords = words.map((word) => {\r\n if (word.length === 0) return word;\r\n\r\n // Get the first character, which may be a multi-byte character\r\n const firstChar = [...word][0];\r\n // Get the rest of the word\r\n const restOfWord = word.slice(firstChar.length);\r\n\r\n // Return the capitalized first character + the rest of the word\r\n return firstChar.toUpperCase() + restOfWord;\r\n });\r\n\r\n // Join the words back together\r\n return titleCaseWords.join(\" \");\r\n}\r\n\r\n/**\r\n * helper to set an input to empty string\r\n * if the value is null\r\n */\r\nexport function nullRead(e: string | null) {\r\n if (e === null) return \"\";\r\n return e;\r\n}\r\n\r\n/**\r\n * helper to set an input\r\n * back to null if the value is empty\r\n */\r\nexport function nullSet(e: string) {\r\n if (removeWhitespaces(e) === \"\") return null;\r\n return e;\r\n}\r\n\r\n/**\r\n * Extracts only the dirty fields from form data\r\n * @param data The complete form data\r\n * @param dirtyFields The dirtyFields object from form.formState\r\n * @param staticFields An object containing fields to always include (like ID)\r\n * @returns A new object containing only dirty fields and the static fields\r\n */\r\nexport function extractDirtyData<T extends Record<string, any>>(\r\n data: T,\r\n dirtyFields: any,\r\n staticFields: Partial<T> = {} as Partial<T>\r\n): Partial<T> {\r\n // Start with the static fields\r\n const result = { ...staticFields };\r\n\r\n // Add only the dirty fields\r\n Object.keys(dirtyFields).forEach((field) => {\r\n if (dirtyFields[field] === true && field in data) {\r\n const key = field as keyof T;\r\n result[key] = data[key];\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n","//main per page focus trapping should be done\r\n//in the router itself, when setting the current active page\r\n\r\n//then for modals and popovers we can call custom trapWithinScope\r\n//and restore focus inside a classic useEffect\r\n\r\nclass FocusTrap {\r\n private container: HTMLElement | null;\r\n private previouslyFocusedElement: HTMLElement | null;\r\n\r\n constructor() {\r\n this.container = null;\r\n this.previouslyFocusedElement = null;\r\n }\r\n\r\n enable(): void {\r\n if (!this.container) return;\r\n\r\n this.previouslyFocusedElement = document.activeElement as HTMLElement;\r\n this.container.addEventListener(\"keydown\", this.trapFocus.bind(this));\r\n document.addEventListener(\"click\", this.handleClickOutside.bind(this));\r\n }\r\n\r\n disable(): void {\r\n if (!this.container) return;\r\n\r\n this.container.removeEventListener(\"keydown\", this.trapFocus.bind(this));\r\n document.removeEventListener(\"click\", this.handleClickOutside.bind(this));\r\n if (this.previouslyFocusedElement && this.previouslyFocusedElement.focus) {\r\n this.previouslyFocusedElement.focus();\r\n }\r\n }\r\n\r\n setContainer(container: HTMLElement): void {\r\n this.disable();\r\n this.container = container;\r\n this.enable();\r\n }\r\n\r\n private trapFocus(event: KeyboardEvent): void {\r\n const focusableElements = this.container?.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n\r\n if (!focusableElements) return;\r\n\r\n const firstFocusable = focusableElements[0];\r\n const lastFocusable = focusableElements[focusableElements.length - 1];\r\n\r\n if (event.key === \"Tab\") {\r\n if (event.shiftKey && document.activeElement === firstFocusable) {\r\n event.preventDefault();\r\n lastFocusable.focus();\r\n } else if (!event.shiftKey && document.activeElement === lastFocusable) {\r\n event.preventDefault();\r\n firstFocusable.focus();\r\n }\r\n }\r\n }\r\n\r\n private handleClickOutside(event: MouseEvent): void {\r\n if (this.container && !this.container.contains(event.target as Node)) {\r\n event.preventDefault();\r\n if (\r\n this.previouslyFocusedElement &&\r\n this.previouslyFocusedElement.focus\r\n ) {\r\n this.previouslyFocusedElement.focus();\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { FocusTrap };\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport { throttle } from \"./design\";\r\n\r\ntype OverflowInfo = {\r\n horizontal: boolean;\r\n vertical: boolean;\r\n scrollWidth: number;\r\n clientWidth: number;\r\n scrollHeight: number;\r\n clientHeight: number;\r\n // These require scroll position tracking\r\n canScrollLeft: boolean;\r\n canScrollRight: boolean;\r\n canScrollUp: boolean;\r\n canScrollDown: boolean;\r\n scrollPercentageX: number;\r\n scrollPercentageY: number;\r\n scrollLeft: number;\r\n scrollTop: number;\r\n};\r\n\r\nconst checkOverflow = (element: HTMLElement): OverflowInfo => {\r\n const horizontal = element.scrollWidth > element.clientWidth;\r\n const vertical = element.scrollHeight > element.clientHeight;\r\n\r\n const maxScrollLeft = Math.max(0, element.scrollWidth - element.clientWidth);\r\n const maxScrollTop = Math.max(0, element.scrollHeight - element.clientHeight);\r\n\r\n return {\r\n horizontal,\r\n vertical,\r\n scrollWidth: element.scrollWidth,\r\n clientWidth: element.clientWidth,\r\n scrollHeight: element.scrollHeight,\r\n clientHeight: element.clientHeight,\r\n scrollLeft: element.scrollLeft,\r\n scrollTop: element.scrollTop,\r\n // Scroll capabilities (require current scroll position)\r\n canScrollLeft: element.scrollLeft > 10,\r\n canScrollRight: element.scrollLeft < maxScrollLeft - 10,\r\n canScrollUp: element.scrollTop > 0,\r\n canScrollDown: element.scrollTop < maxScrollTop,\r\n // Scroll percentages\r\n scrollPercentageX:\r\n horizontal && maxScrollLeft > 0\r\n ? (element.scrollLeft / maxScrollLeft) * 100\r\n : 0,\r\n scrollPercentageY:\r\n vertical && maxScrollTop > 0\r\n ? (element.scrollTop / maxScrollTop) * 100\r\n : 0,\r\n };\r\n};\r\n\r\n// Updated hook that listens to scroll events\r\nconst useOverflow = <T extends HTMLElement>({\r\n onOverflow,\r\n trackScroll = false, // New option to enable scroll tracking\r\n withObserver = false,\r\n enabled = true,\r\n deps = [],\r\n}: {\r\n onOverflow?: (info: OverflowInfo) => void;\r\n trackScroll?: boolean;\r\n withObserver?: boolean;\r\n enabled?: boolean;\r\n deps?: any[];\r\n} = {}) => {\r\n const ref = useRef<T>(null);\r\n\r\n useEffect(() => {\r\n if (!ref.current || !enabled) return;\r\n\r\n let initialOverflow = false;\r\n\r\n const updateOverflow = () => {\r\n // console.log(\"updating overflow\");\r\n if (ref.current) {\r\n const info = checkOverflow(ref.current);\r\n onOverflow?.(info);\r\n }\r\n };\r\n\r\n const throttledUpdate = throttle(updateOverflow);\r\n\r\n // Initial check\r\n // updateOverflow();\r\n const info = checkOverflow(ref.current);\r\n initialOverflow = info.horizontal || info.vertical;\r\n onOverflow?.(info);\r\n\r\n // Listen for resize\r\n window.addEventListener(\"resize\", throttledUpdate);\r\n\r\n // Conditionally use ResizeObserver\r\n // this is for in element content changes\r\n let observer: ResizeObserver | null = null;\r\n if (withObserver) {\r\n observer = new ResizeObserver(throttledUpdate);\r\n if (ref.current) {\r\n observer.observe(ref.current);\r\n }\r\n }\r\n\r\n // Conditionally listen to scroll events\r\n let scrollElement: HTMLElement | null = null;\r\n if (trackScroll && initialOverflow) {\r\n scrollElement = ref.current;\r\n scrollElement.addEventListener(\"scroll\", throttledUpdate);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", throttledUpdate);\r\n if (observer) {\r\n observer.disconnect();\r\n }\r\n if (scrollElement && initialOverflow) {\r\n scrollElement.removeEventListener(\"scroll\", throttledUpdate);\r\n }\r\n };\r\n }, [enabled, ...deps]);\r\n\r\n return { ref };\r\n};\r\n\r\n// Alternative: State-based approach with scroll tracking\r\nconst useOverflowState = <T extends HTMLElement>({\r\n trackScroll = false,\r\n withObserver = false,\r\n enabled = true,\r\n deps = [],\r\n}: {\r\n trackScroll?: boolean;\r\n withObserver?: boolean;\r\n enabled?: boolean;\r\n deps?: any[];\r\n} = {}) => {\r\n const ref = useRef<T>(null);\r\n const [overflowInfo, setOverflowInfo] = useState<OverflowInfo | null>(null);\r\n\r\n useEffect(() => {\r\n if (!ref.current || !enabled) return;\r\n\r\n let initialOverflow = false;\r\n\r\n const updateOverflow = () => {\r\n // console.log(\"updating overflow\");\r\n if (ref.current) {\r\n const info = checkOverflow(ref.current);\r\n setOverflowInfo(info);\r\n }\r\n };\r\n\r\n const throttledUpdate = throttle(updateOverflow);\r\n\r\n // Initial check\r\n // updateOverflow();\r\n const info = checkOverflow(ref.current);\r\n initialOverflow = info.horizontal || info.vertical;\r\n setOverflowInfo(info);\r\n\r\n // Attach resize listener\r\n window.addEventListener(\"resize\", throttledUpdate);\r\n\r\n // Conditionally use ResizeObserver\r\n // this is for in element content changes\r\n let observer: ResizeObserver | null = null;\r\n if (withObserver) {\r\n observer = new ResizeObserver(throttledUpdate);\r\n if (ref.current) {\r\n observer.observe(ref.current);\r\n }\r\n }\r\n\r\n // Conditionally listen to scroll events\r\n let scrollElement: HTMLElement | null = null;\r\n if (trackScroll && initialOverflow) {\r\n scrollElement = ref.current;\r\n scrollElement.addEventListener(\"scroll\", throttledUpdate);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", throttledUpdate);\r\n if (observer) {\r\n observer.disconnect();\r\n }\r\n if (scrollElement && initialOverflow) {\r\n scrollElement.removeEventListener(\"scroll\", throttledUpdate);\r\n }\r\n };\r\n }, [enabled, ...deps]);\r\n\r\n return { ref, overflowInfo };\r\n};\r\n\r\nexport { checkOverflow, useOverflow, useOverflowState };\r\n","import { Icon } from \".\";\r\nimport { cn } from \"../utils\";\r\nimport { generateInitials } from \"../utils\";\r\n\r\nconst sizes = {\r\n xs: \"w-8 h-8\",\r\n sm: \"w-10 h-10 text-lg\",\r\n md: \"w-14 h-14 text-xl\",\r\n lg: \"h-20 w-20 text-2xl\",\r\n xl: \"h-24 w-24 text-2xl\",\r\n};\r\n\r\nconst Avatar = ({\r\n src,\r\n name,\r\n size = \"md\",\r\n className,\r\n}: {\r\n src?: string;\r\n name?: string;\r\n size?: keyof typeof sizes;\r\n className?: string;\r\n}) => {\r\n if (src) {\r\n return (\r\n <img\r\n alt=\"avatar\"\r\n src={src}\r\n className={cn(\"rounded-full bg-base-3\", sizes[size])}\r\n />\r\n );\r\n }\r\n\r\n if (name) {\r\n return (\r\n <p\r\n className={cn(\r\n \"rounded-full font-medium dark-theme:bg-base-3 border border-base-6 dark-theme:border-base-4 flex items-center justify-center\",\r\n sizes[size],\r\n className\r\n )}\r\n >\r\n {generateInitials(name)}\r\n </p>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"rounded-full text-2xl font-medium flex items-center justify-center\",\r\n \"bg-base-2 dark-theme:bg-base-3 border border-base-4\",\r\n \"lg:hover:bg-base-3 max-lg:active:bg-base-4 transition-colors\",\r\n sizes[size],\r\n className\r\n )}\r\n >\r\n <Icon\r\n size={size === \"xs\" ? 16 : size === \"sm\" ? 20 : 24}\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\r\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </Icon>\r\n </div>\r\n );\r\n};\r\n\r\nexport { Avatar };\r\n","import { ComponentPropsWithoutRef } from \"react\";\r\nimport { cn } from \"../utils\";\r\n\r\nfunction AvatarsGroup({\r\n className,\r\n children,\r\n animate = false,\r\n ...props\r\n}: ComponentPropsWithoutRef<\"div\"> & { animate?: boolean }) {\r\n return (\r\n <div\r\n className={cn(\"flex -space-x-3 rtl:space-x-reverse\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport { AvatarsGroup };\r\n","import { useSyncExternalStore as s, useCallback as o, useRef as i, useEffect as l } from \"react\";\nimport { computed as p, effect as b } from \"./index.js\";\nfunction A(e) {\n const t = s(\n (u) => e.subscribe(u),\n () => e.get(),\n () => e.get()\n ), r = o(\n (u) => {\n e.set(u);\n },\n [e]\n );\n return [t, r];\n}\nfunction f(e) {\n return s(\n (t) => e.subscribe(t),\n () => e.get(),\n () => e.get()\n );\n}\nfunction d(e) {\n return o(\n (t) => {\n e.set(t);\n },\n [e]\n );\n}\nfunction E(e) {\n const t = i(null);\n return t.current || (t.current = p(e)), f(t.current);\n}\nfunction S(e) {\n l(() => b(e), []);\n}\nfunction h(e, ...t) {\n const r = t.length > 0 ? t : Object.keys(e), u = {};\n return r.forEach((c) => {\n const n = e[c];\n n && typeof n == \"object\" && \"get\" in n ? u[c] = f(n) : u[c] = n;\n }), u;\n}\nexport {\n A as useAtom,\n S as useAtomEffect,\n f as useAtomValue,\n E as useComputed,\n d as useSetAtom,\n h as useStore\n};\n//# sourceMappingURL=react.js.map\n","import { throttle } from \"../utils\";\r\nimport { useEffect } from \"react\";\r\nimport { atom } from \"@mateosuarezdev/atoms\";\r\nimport { useAtomValue } from \"@mateosuarezdev/atoms/react\";\r\n\r\n/**\r\n * Standard breakpoints for responsive design.\r\n */\r\n// export const mediaQueries = {\r\n// sm: 640,\r\n// md: 768,\r\n// lg: 1024,\r\n// xl: 1280,\r\n// \"2xl\": 1536,\r\n// };\r\n\r\n/**\r\n * Observable state tracking whether the screen is larger than the 'lg' breakpoint.\r\n * Default to true on server (assumes desktop), update on client.\r\n */\r\n// const largeObservable = observable(\r\n// typeof window !== \"undefined\" ? window.innerWidth > mediaQueries.lg : true\r\n// );\r\nconst largeAtom = atom(true);\r\n\r\nlet listening = false;\r\n\r\n/**\r\n * Throttled resize handler to update screen size state.\r\n * Only updates the observable when the viewport crosses the large screen threshold.\r\n * Throttled to improve performance by limiting update frequency.\r\n */\r\nconst handleResize = throttle(() => {\r\n largeAtom.set(window.innerWidth > 1024);\r\n}); // Throttle to once per 100ms\r\n\r\n// Only set up listeners on client\r\nif (typeof window !== \"undefined\") {\r\n if (listening) {\r\n window.removeEventListener(\"resize\", handleResize);\r\n listening = false;\r\n }\r\n\r\n // Attach resize listener to update state when window is resized\r\n window.addEventListener(\"resize\", handleResize);\r\n listening = true;\r\n}\r\n\r\n/**\r\n * Custom hook that returns whether the current viewport is larger than the 'lg' breakpoint.\r\n *\r\n * @example\r\n * function MyComponent() {\r\n * const lg = useLargeScreen();\r\n *\r\n * return (\r\n * <div>\r\n * {lg\r\n * ? <DesktopLayout />\r\n * : <MobileLayout />\r\n * }\r\n * </div>\r\n * );\r\n * }\r\n *\r\n * @returns {boolean} True if the current viewport width is larger than the 'lg' breakpoint\r\n */\r\nconst useLargeScreen = (): boolean => {\r\n useEffect(() => {\r\n largeAtom.set(window.innerWidth > 1024);\r\n }, []);\r\n return useAtomValue(largeAtom);\r\n};\r\n\r\nexport { useLargeScreen };\r\n","function useMergedRef<T>(...refs: React.Ref<T>[]): React.RefCallback<T> {\r\n return (value) => {\r\n refs.forEach((ref) => {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n } else if (ref != null) {\r\n (ref as React.MutableRefObject<T | null>).current = value;\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport { useMergedRef };\r\n","import { CSSProperties, useCallback, useRef } from \"react\";\r\nimport { useLargeScreen } from \"./use-large-screen\";\r\n\r\n// new ripple uses a wrapper so the parent doesn't need overflow-hidden\r\nconst useRipple = <T extends HTMLElement>(\r\n enabled: boolean = true,\r\n contrastRipple?: boolean\r\n) => {\r\n const lg = useLargeScreen();\r\n const ref = useRef<T>(null);\r\n\r\n const ripple = useCallback(\r\n (event: React.MouseEvent<T>) => {\r\n if (!enabled || lg) return;\r\n\r\n const button = ref.current;\r\n if (!button) return;\r\n\r\n // Get button's position and dimensions\r\n const buttonRect = button.getBoundingClientRect();\r\n const rippleSize = Math.max(buttonRect.width, buttonRect.height);\r\n const offsetX = event.clientX - buttonRect.left - rippleSize / 2;\r\n const offsetY = event.clientY - buttonRect.top - rippleSize / 2;\r\n\r\n // Create the ripple wrapper (this element holds the ripple)\r\n const rippleWrapper = document.createElement(\"span\");\r\n rippleWrapper.classList.add(\"ripple-wrapper\");\r\n\r\n // Create the ripple element (circle)\r\n const rippleEl = document.createElement(\"span\");\r\n rippleEl.classList.add(\"ripple\");\r\n rippleEl.style.backgroundColor = contrastRipple\r\n ? \"var(--ripple-contrast)\"\r\n : \"var(--ripple-main)\";\r\n\r\n // Set the position and size of the ripple\r\n rippleEl.style.width = `${rippleSize}px`;\r\n rippleEl.style.height = `${rippleSize}px`;\r\n rippleEl.style.left = `${offsetX}px`;\r\n rippleEl.style.top = `${offsetY}px`;\r\n\r\n rippleWrapper.appendChild(rippleEl);\r\n\r\n const ripples = button.getElementsByClassName(\"ripple-wrapper\");\r\n if (ripples?.length) {\r\n for (const ripple of ripples) {\r\n ripple.remove();\r\n }\r\n }\r\n\r\n // Append the ripple wrapper to the button\r\n button.appendChild(rippleWrapper);\r\n\r\n // Remove the ripple wrapper after animation\r\n setTimeout(() => {\r\n rippleWrapper.remove();\r\n }, 700); // Match the animation duration\r\n },\r\n [enabled, lg, contrastRipple]\r\n );\r\n\r\n return {\r\n ref,\r\n ripple,\r\n styles: {\r\n position: \"relative\",\r\n } as CSSProperties,\r\n };\r\n};\r\n\r\nexport { useRipple };\r\n\r\n// ios like fade effect\r\n// const useRipple = (enabled = true, contrastRipple?: boolean) => {\r\n// const lg = useLargeScreen();\r\n// const ref = useRef<HTMLElement>(null);\r\n\r\n// const ripple = useCallback(\r\n// (event: React.MouseEvent<HTMLElement>) => {\r\n// if (!enabled || lg) return;\r\n\r\n// const rippleEl = document.createElement(\"span\");\r\n// rippleEl.classList.add(\"simple-ripple\");\r\n// rippleEl.style.backgroundColor = contrastRipple\r\n// ? \"var(--ripple-contrast)\"\r\n// : \"var(--ripple-main)\";\r\n\r\n// const target = ref.current;\r\n// if (!target) return;\r\n\r\n// target.appendChild(rippleEl);\r\n\r\n// // Remove after animation\r\n// setTimeout(() => {\r\n// rippleEl.remove();\r\n// }, 400); // Match animation duration\r\n// },\r\n// [enabled, lg, contrastRipple]\r\n// );\r\n\r\n// return { ref, ripple };\r\n// };\r\n\r\n// export default useRipple;\r\n\r\n// old ripple requires parent with overflow-hidden\r\n// const useRipple = (enabled: boolean = true, contrastRipple?: boolean) => {\r\n// const lg = useLargeScreen();\r\n// const ref = useRef<HTMLElement>(null);\r\n// const ripple = useCallback(\r\n// (event: React.MouseEvent<HTMLElement, MouseEvent>) => {\r\n// if (!lg && enabled) {\r\n// const rippleContainer = event.currentTarget.getBoundingClientRect();\r\n// const circle = document.createElement(\"span\");\r\n// const diameter = Math.max(\r\n// rippleContainer.width,\r\n// rippleContainer.height\r\n// );\r\n// const radius = diameter / 2;\r\n\r\n// circle.style.width = circle.style.height = `${diameter}px`;\r\n// circle.style.left = `${\r\n// event.clientX - (rippleContainer.left + radius)\r\n// }px`;\r\n// circle.style.top = `${\r\n// event.clientY - (rippleContainer.top + radius)\r\n// }px`;\r\n// circle.style.backgroundColor = `${\r\n// contrastRipple ? \"var(--ripple-contrast)\" : \"var(--ripple-main)\"\r\n// }`;\r\n// circle.style.pointerEvents = \"none\";\r\n// circle.classList.add(\"ripple\");\r\n\r\n// const ripples = ref.current?.getElementsByClassName(\"ripple\");\r\n// if (ripples?.length) {\r\n// for (const ripple of ripples) {\r\n// ripple.remove();\r\n// }\r\n// }\r\n\r\n// ref.current?.appendChild(circle);\r\n\r\n// (async () => {\r\n// //await sleep(750);\r\n// setTimeout(\r\n// () => ref.current?.getElementsByClassName(\"ripple\")[0]?.remove(),\r\n// 750\r\n// );\r\n// })();\r\n// }\r\n// },\r\n// [contrastRipple, lg, enabled]\r\n// );\r\n\r\n// return {\r\n// ref: ref,\r\n// ripple: ripple,\r\n// classNames: \"relative overflow-hidden inline-block\",\r\n// };\r\n// };\r\n\r\n// export default useRipple;\r\n","import { useCallback, useEffect, useId, useRef, useState } from \"react\";\r\n\r\ntype UsePopoverProps = {\r\n // routerMode?: \"stack\" | \"outlet\";\r\n scrollerId?: string;\r\n /**\r\n * To point scroller id to route id-content instead of id\r\n */\r\n // useScrollerSuffix?: boolean;\r\n align?: \"start\" | \"center\" | \"end\";\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n offset?: number;\r\n collisionPadding?: number;\r\n avoidCollisions?: boolean;\r\n closeOnScroll?: boolean;\r\n // observeResize?: boolean;\r\n onOpen?: VoidFunction;\r\n onClose?: VoidFunction;\r\n};\r\n\r\n// const hybridUseRoute = (routerMode: \"stack\" | \"outlet\") => {\r\n// if (routerMode === \"stack\") return stackUseRoute();\r\n// return outletUseRoute();\r\n// };\r\n\r\nexport const usePopover = <T extends HTMLElement, P extends HTMLElement>({\r\n // routerMode = \"outlet\",\r\n scrollerId,\r\n // useScrollerSuffix,\r\n align = \"start\",\r\n side = \"bottom\",\r\n offset = 8,\r\n collisionPadding = 8,\r\n avoidCollisions = true,\r\n closeOnScroll = true,\r\n // observeResize = false,\r\n onOpen,\r\n onClose,\r\n}: UsePopoverProps = {}) => {\r\n // const { id } = useRoute();\r\n const [open, setOpen] = useState(false);\r\n const [popoverDimensions, setPopoverDimensions] = useState({\r\n width: 192,\r\n height: 300,\r\n });\r\n const triggerRef = useRef<T>(null);\r\n const popoverRef = useRef<P>(null);\r\n const triggerRectRef = useRef({\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n bottom: 0,\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n });\r\n const scrollerRef = useRef<HTMLElement | null>(null);\r\n\r\n // Generate unique IDs for accessibility\r\n const triggerId = useId();\r\n\r\n // Calculate optimal position with collision detection\r\n const getPopoverPosition = useCallback(\r\n (customRect?: DOMRect) => {\r\n const rect = customRect ?? triggerRectRef.current;\r\n if (!rect) return { x: 0, top: 0, bottom: undefined };\r\n\r\n const popoverWidth = popoverDimensions.width;\r\n const popoverHeight = popoverDimensions.height;\r\n\r\n return calculatePopoverPosition({\r\n triggerRect: rect as DOMRect,\r\n popoverWidth,\r\n popoverHeight,\r\n align,\r\n side,\r\n offset: offset,\r\n collisionPadding: collisionPadding,\r\n avoidCollisions: avoidCollisions,\r\n });\r\n },\r\n [triggerRectRef.current, popoverDimensions, align, side]\r\n );\r\n\r\n // const popoverPosition = useMemo(\r\n // (customRect?: DOMRect) => {\r\n // const rect = customRect ?? triggerRectRef.current;\r\n // if (!rect) return { x: 0, top: 0, bottom: undefined };\r\n\r\n // const popoverWidth = popoverDimensions.width;\r\n // const popoverHeight = popoverDimensions.height;\r\n\r\n // // toast.info(`New dimensions, ${popoverWidth} ${popoverHeight}`);\r\n\r\n // const position = calculatePopoverPosition({\r\n // triggerRect: rect as DOMRect,\r\n // popoverWidth,\r\n // popoverHeight,\r\n // align,\r\n // side,\r\n // offset: offset,\r\n // collisionPadding: collisionPadding,\r\n // avoidCollisions: avoidCollisions,\r\n // });\r\n\r\n // return position;\r\n // },\r\n // [triggerRectRef.current, popoverDimensions, align, side]\r\n // );\r\n\r\n useEffect(() => {\r\n if (!open || !scrollerId) return;\r\n\r\n // let scrollerId = id;\r\n\r\n // if (customScrollerId) {\r\n // scrollerId = customScrollerId;\r\n // } else if (routerMode === \"stack\" || useScrollerSuffix) {\r\n // scrollerId = `${id}-content`;\r\n // }\r\n\r\n scrollerRef.current = document.getElementById(scrollerId);\r\n\r\n if (!scrollerRef.current) return;\r\n\r\n // added here to update popoverdimensions\r\n if (open) {\r\n updatePopoverDimensions();\r\n }\r\n\r\n // const handleScroll = throttle(() => setOpen(false), 1000);\r\n const handleScroll = () => {\r\n if (!scrollerRef.current) return;\r\n setOpen(false);\r\n onOpen?.();\r\n scrollerRef.current.removeEventListener(\"scroll\", handleScroll);\r\n };\r\n\r\n if (closeOnScroll) {\r\n scrollerRef.current.addEventListener(\"scroll\", handleScroll, {\r\n passive: true,\r\n });\r\n }\r\n\r\n return () => {\r\n scrollerRef.current &&\r\n scrollerRef.current.removeEventListener(\"scroll\", handleScroll);\r\n };\r\n }, [open, scrollerId]);\r\n\r\n // useEffect(() => {\r\n // if (!observeResize) return;\r\n // if (!popoverRef.current) return;\r\n // const observer = new ResizeObserver(() => {\r\n // updatePopoverDimensions();\r\n // if (triggerRef.current) {\r\n // // const rect = triggerRef.current.getBoundingClientRect();\r\n // // triggerRectRef.current = rect;\r\n // // Recalculate y with new height\r\n // const { x, top, bottom } = getPopoverPosition(\r\n // triggerRectRef.current as DOMRect\r\n // );\r\n // popoverRef.current!.style.left = `${x}px`;\r\n // if (top) {\r\n // popoverRef.current!.style = `${top}px`;\r\n // } else {\r\n // popoverRef.current!.style.removeProperty(\"top\");\r\n // }\r\n // if (bottom) {\r\n // popoverRef.current!.style = `${bottom}px`;\r\n // } else {\r\n // popoverRef.current!.style.removeProperty(\"bottom\");\r\n // }\r\n // }\r\n // });\r\n // observer.observe(popoverRef.current);\r\n // return () => observer.disconnect();\r\n // }, [observeResize, getPopoverPosition]);\r\n\r\n const updatePopoverDimensions = () => {\r\n if (!popoverRef.current) return;\r\n setPopoverDimensions({\r\n width: popoverRef.current.offsetWidth,\r\n height: popoverRef.current.offsetHeight,\r\n });\r\n };\r\n\r\n const toggle = useCallback(() => {\r\n if (!triggerRef.current) return;\r\n const rect = triggerRef.current.getBoundingClientRect();\r\n triggerRectRef.current = {\r\n left: rect.left,\r\n right: rect.right,\r\n top: rect.top,\r\n bottom: rect.bottom,\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n setOpen((prev) => {\r\n if (prev) {\r\n onClose?.();\r\n } else {\r\n onOpen?.();\r\n }\r\n return !prev;\r\n });\r\n }, []);\r\n\r\n const close = useCallback(() => {\r\n setOpen(false);\r\n onClose?.();\r\n }, []);\r\n\r\n return {\r\n triggerRef,\r\n triggerProps: {\r\n id: triggerId,\r\n \"aria-expanded\": open,\r\n \"aria-haspopup\": true,\r\n },\r\n popoverRef,\r\n // popoverPosition,\r\n /**\r\n * Call this sync before rendering the popover\r\n */\r\n getPopoverPosition,\r\n open,\r\n toggle,\r\n close,\r\n };\r\n};\r\n\r\ntype PositionOptions = {\r\n triggerRect: DOMRect;\r\n popoverWidth: number;\r\n popoverHeight: number;\r\n align?: \"start\" | \"center\" | \"end\";\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n offset?: number;\r\n collisionPadding?: number;\r\n avoidCollisions?: boolean;\r\n};\r\n\r\nexport const calculatePopoverPosition = ({\r\n triggerRect,\r\n popoverWidth,\r\n popoverHeight,\r\n align = \"start\",\r\n side = \"bottom\",\r\n offset = 4,\r\n collisionPadding = 8,\r\n avoidCollisions = true,\r\n}: PositionOptions) => {\r\n const viewport = {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n };\r\n\r\n let x = 0;\r\n let y = 0;\r\n\r\n if (avoidCollisions) {\r\n if (side === \"right\") {\r\n // Calculate overflow on both sides\r\n const rightSideX = triggerRect.right + offset;\r\n const leftSideX = triggerRect.left - popoverWidth - offset;\r\n\r\n const rightOverflow = Math.max(\r\n 0,\r\n rightSideX + popoverWidth - (viewport.width - collisionPadding)\r\n );\r\n const leftOverflow = Math.max(0, collisionPadding - leftSideX);\r\n\r\n // Choose the side with less overflow\r\n if (rightOverflow <= leftOverflow) {\r\n // Use right side, but adjust if needed\r\n x = rightSideX;\r\n if (rightOverflow > 0) {\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n } else {\r\n // Use left side, but adjust if needed\r\n x = leftSideX;\r\n if (leftOverflow > 0) {\r\n x = collisionPadding;\r\n }\r\n }\r\n\r\n // Vertical positioning - align with trigger top\r\n y = triggerRect.top;\r\n\r\n // Adjust if would go off bottom\r\n if (y + popoverHeight > viewport.height - collisionPadding) {\r\n y = viewport.height - popoverHeight - collisionPadding;\r\n }\r\n if (y < collisionPadding) {\r\n y = collisionPadding;\r\n }\r\n } else if (side === \"left\") {\r\n // Calculate overflow on both sides\r\n const leftSideX = triggerRect.left - popoverWidth - offset;\r\n const rightSideX = triggerRect.right + offset;\r\n\r\n const leftOverflow = Math.max(0, collisionPadding - leftSideX);\r\n const rightOverflow = Math.max(\r\n 0,\r\n rightSideX + popoverWidth - (viewport.width - collisionPadding)\r\n );\r\n\r\n // Choose the side with less overflow\r\n if (leftOverflow <= rightOverflow) {\r\n // Use left side, but adjust if needed\r\n x = leftSideX;\r\n if (leftOverflow > 0) {\r\n x = collisionPadding;\r\n }\r\n } else {\r\n // Use right side, but adjust if needed\r\n x = rightSideX;\r\n if (rightOverflow > 0) {\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n }\r\n\r\n // Vertical positioning - align with trigger top\r\n y = triggerRect.top;\r\n\r\n // Adjust if would go off bottom\r\n if (y + popoverHeight > viewport.height - collisionPadding) {\r\n y = viewport.height - popoverHeight - collisionPadding;\r\n }\r\n if (y < collisionPadding) {\r\n y = collisionPadding;\r\n }\r\n } else if (side === \"bottom\") {\r\n // Vertical positioning\r\n const spaceBelow = viewport.height - triggerRect.bottom;\r\n const spaceAbove = triggerRect.top;\r\n\r\n if (spaceBelow >= popoverHeight + offset) {\r\n y = triggerRect.bottom + offset;\r\n } else if (spaceAbove >= popoverHeight + offset) {\r\n y = triggerRect.top - popoverHeight - offset;\r\n } else {\r\n // Not enough space either way, prefer bottom but constrain\r\n y = triggerRect.bottom + offset;\r\n y = Math.min(y, viewport.height - popoverHeight - collisionPadding);\r\n }\r\n\r\n // Horizontal positioning with collision detection\r\n const spaceRight = viewport.width - triggerRect.left;\r\n const spaceLeft = triggerRect.right;\r\n\r\n if (align === \"start\") {\r\n x = triggerRect.left;\r\n\r\n // Check right edge collision\r\n if (x + popoverWidth > viewport.width - collisionPadding) {\r\n if (spaceLeft >= popoverWidth) {\r\n // Flip to end alignment\r\n x = triggerRect.right - popoverWidth;\r\n } else {\r\n // Pull back to fit\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n }\r\n } else if (align === \"end\") {\r\n x = triggerRect.right - popoverWidth;\r\n\r\n // Check left edge collision\r\n if (x < collisionPadding) {\r\n if (spaceRight >= popoverWidth) {\r\n // Flip to start alignment\r\n x = triggerRect.left;\r\n } else {\r\n // Push right to fit\r\n x = collisionPadding;\r\n }\r\n }\r\n } else {\r\n // align === \"center\"\r\n const centeredX =\r\n triggerRect.left + triggerRect.width / 2 - popoverWidth / 2;\r\n\r\n if (\r\n centeredX >= collisionPadding &&\r\n centeredX + popoverWidth <= viewport.width - collisionPadding\r\n ) {\r\n x = centeredX;\r\n } else if (centeredX < collisionPadding) {\r\n x = collisionPadding;\r\n } else {\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n }\r\n } else {\r\n // side === \"top\"\r\n // Vertical positioning\r\n const spaceAbove = triggerRect.top;\r\n const spaceBelow = viewport.height - triggerRect.bottom;\r\n\r\n if (spaceAbove >= popoverHeight + offset) {\r\n y = triggerRect.top - popoverHeight - offset;\r\n } else if (spaceBelow >= popoverHeight + offset) {\r\n y = triggerRect.bottom + offset;\r\n } else {\r\n // Not enough space either way, prefer top but constrain\r\n y = triggerRect.top - popoverHeight - offset;\r\n y = Math.max(collisionPadding, y);\r\n }\r\n\r\n // Horizontal positioning (same logic as bottom)\r\n const spaceRight = viewport.width - triggerRect.left;\r\n const spaceLeft = triggerRect.right;\r\n\r\n if (align === \"start\") {\r\n x = triggerRect.left;\r\n\r\n if (x + popoverWidth > viewport.width - collisionPadding) {\r\n if (spaceLeft >= popoverWidth) {\r\n x = triggerRect.right - popoverWidth;\r\n } else {\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n }\r\n } else if (align === \"end\") {\r\n x = triggerRect.right - popoverWidth;\r\n\r\n if (x < collisionPadding) {\r\n if (spaceRight >= popoverWidth) {\r\n x = triggerRect.left;\r\n } else {\r\n x = collisionPadding;\r\n }\r\n }\r\n } else {\r\n // center\r\n const centeredX =\r\n triggerRect.left + triggerRect.width / 2 - popoverWidth / 2;\r\n\r\n if (\r\n centeredX >= collisionPadding &&\r\n centeredX + popoverWidth <= viewport.width - collisionPadding\r\n ) {\r\n x = centeredX;\r\n } else if (centeredX < collisionPadding) {\r\n x = collisionPadding;\r\n } else {\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n }\r\n }\r\n\r\n // Final bounds check to ensure nothing goes outside viewport\r\n x = Math.max(\r\n collisionPadding,\r\n Math.min(x, viewport.width - popoverWidth - collisionPadding)\r\n );\r\n y = Math.max(\r\n collisionPadding,\r\n Math.min(y, viewport.height - popoverHeight - collisionPadding)\r\n );\r\n } else {\r\n // Simple positioning without collision detection\r\n if (side === \"right\") {\r\n x = triggerRect.right + offset;\r\n y = triggerRect.top;\r\n } else if (side === \"left\") {\r\n x = triggerRect.left - popoverWidth - offset;\r\n y = triggerRect.top;\r\n } else if (side === \"bottom\") {\r\n y = triggerRect.bottom + offset;\r\n } else {\r\n y = triggerRect.top - popoverHeight - offset;\r\n }\r\n\r\n if (side === \"top\" || side === \"bottom\") {\r\n if (align === \"start\") {\r\n x = triggerRect.left;\r\n } else if (align === \"end\") {\r\n x = triggerRect.right - popoverWidth;\r\n } else {\r\n x = triggerRect.left + triggerRect.width / 2 - popoverWidth / 2;\r\n }\r\n }\r\n }\r\n\r\n let top: number | undefined;\r\n let bottom: number | undefined;\r\n\r\n // If popover's bottom edge is above the trigger top → popover is above\r\n if (y + popoverHeight <= triggerRect.top) {\r\n bottom = window.innerHeight - (y + popoverHeight); // attach to bottom\r\n } else {\r\n // popover is below trigger → attach to top\r\n top = y;\r\n }\r\n\r\n return { x, top, bottom };\r\n};\r\n","import { useEffect, useRef } from \"react\";\r\n\r\n// Basic version\r\nexport function useClickAway<T extends HTMLElement = HTMLElement>(\r\n callback: () => void\r\n) {\r\n const ref = useRef<T>(null);\r\n\r\n useEffect(() => {\r\n const handleClickAway = (event: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(event.target as Node)) {\r\n callback();\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickAway);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickAway);\r\n };\r\n }, [callback]);\r\n\r\n return ref;\r\n}\r\n\r\n// Advanced version with options\r\ninterface UseClickOutsideOptions {\r\n enabled?: boolean;\r\n events?: string[];\r\n excludeRefs?: React.RefObject<HTMLElement>[];\r\n}\r\n\r\nexport function useClickAwayAdvanced<T extends HTMLElement = HTMLElement>(\r\n callback: () => void,\r\n options: UseClickOutsideOptions = {}\r\n) {\r\n const {\r\n enabled = true,\r\n events = [\"mousedown\", \"touchstart\"],\r\n excludeRefs = [],\r\n } = options;\r\n\r\n const ref = useRef<T>(null);\r\n\r\n useEffect(() => {\r\n if (!enabled) return;\r\n\r\n const handleClick = (event: Event) => {\r\n const target = event.target as Node;\r\n\r\n // Check if click is inside the main element\r\n if (ref.current?.contains(target)) {\r\n return;\r\n }\r\n\r\n // Check if click is inside any excluded elements\r\n const isInsideExcluded = excludeRefs.some((excludeRef) =>\r\n excludeRef.current?.contains(target)\r\n );\r\n\r\n if (isInsideExcluded) {\r\n return;\r\n }\r\n\r\n callback();\r\n };\r\n\r\n events.forEach((eventName) => {\r\n document.addEventListener(eventName, handleClick);\r\n });\r\n\r\n return () => {\r\n events.forEach((eventName) => {\r\n document.removeEventListener(eventName, handleClick);\r\n });\r\n };\r\n }, [callback, enabled, events, excludeRefs]);\r\n\r\n return ref;\r\n}\r\n\r\n// Version that accepts external ref\r\nexport function useClickAwayWithRef<T extends HTMLElement | null = HTMLElement>(\r\n ref: React.RefObject<T>,\r\n callback: (event: MouseEvent) => void,\r\n enabled: boolean = true\r\n) {\r\n useEffect(() => {\r\n if (!enabled) return;\r\n\r\n const handleClickAway = (event: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(event.target as Node)) {\r\n callback(event);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickAway);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickAway);\r\n };\r\n }, [ref, callback, enabled]);\r\n}\r\n\r\n// usage example\r\n\r\n// Dropdown with separate trigger button\r\n// function Dropdown() {\r\n// const [isOpen, setIsOpen] = useState(false);\r\n// const dropdownRef = useRef(null);\r\n// const triggerRef = useRef(null);\r\n\r\n// const ref = useClickAwayAdvanced(() => setIsOpen(false), {\r\n// enabled: isOpen,\r\n// excludeRefs: [triggerRef], // Don't close when clicking trigger\r\n// events: ['mousedown', 'touchstart'] // Mobile support\r\n// });\r\n\r\n// return (\r\n// <>\r\n// <button ref={triggerRef} onClick={() => setIsOpen(!isOpen)}>\r\n// Toggle\r\n// </button>\r\n// {isOpen && (\r\n// <div ref={ref}>Dropdown content</div>\r\n// )}\r\n// </>\r\n// );\r\n// }\r\n","import { useEffect, useRef } from \"react\";\r\n\r\ntype KeyMapping = {\r\n [key: string]: (event: KeyboardEvent) => void;\r\n};\r\n\r\ntype UseKeyListenerOptions = {\r\n target?: EventTarget | HTMLElement;\r\n event?: \"keydown\" | \"keyup\" | \"keypress\";\r\n enabled?: boolean;\r\n};\r\n\r\n/**\r\n * Custom hook for handling keyboard events in React\r\n *\r\n * @param keyMap - Object mapping keys to callback functions\r\n * @param options - Additional options for event handling\r\n *\r\n * @example\r\n * useKeyListener({\r\n * 'Escape': (e) => {\r\n * e.preventDefault();\r\n * setIsOpen(false);\r\n * },\r\n * 'Tab': (e) => {\r\n * if (document.activeElement === inputRef.current) {\r\n * e.preventDefault();\r\n * // Custom tab handling logic\r\n * }\r\n * }\r\n * });\r\n */\r\nfunction useKeyListener(\r\n keyMap: KeyMapping,\r\n { target = window, event = \"keydown\", enabled }: UseKeyListenerOptions = {}\r\n) {\r\n // Use a ref to keep the latest keyMap without triggering effect\r\n const keyMapRef = useRef<KeyMapping>(keyMap);\r\n\r\n // Update ref when keyMap changes\r\n useEffect(() => {\r\n keyMapRef.current = keyMap;\r\n }, [keyMap]);\r\n\r\n useEffect(() => {\r\n if (!enabled) return;\r\n const handleKeyEvent = (e: KeyboardEvent) => {\r\n const key = e.key;\r\n const callback = keyMapRef.current[key];\r\n\r\n if (callback) {\r\n callback(e);\r\n }\r\n };\r\n\r\n target.addEventListener(event, handleKeyEvent as EventListener);\r\n\r\n return () => {\r\n target.removeEventListener(event, handleKeyEvent as EventListener);\r\n };\r\n }, [target, event, enabled]);\r\n}\r\n\r\nexport { useKeyListener };\r\n","import { forwardRef, useState, ForwardedRef } from \"react\";\r\nimport { cn } from \"../utils\";\r\nimport { useMergedRef, useRipple } from \"../hooks\";\r\n\r\nexport type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\r\n color?: keyof typeof colorStyles;\r\n size?: keyof typeof sizeStyles;\r\n fontWeight?: keyof typeof fontWeightStyles;\r\n rounded?: keyof typeof borderRadiusStyles;\r\n state?: \"enabled\" | \"disabled\" | \"loading\";\r\n onClick?: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\r\n className?: string;\r\n withRipple?: boolean;\r\n contrastRipple?: boolean;\r\n showFocus?: \"all\" | \"desktop\" | \"mobile\" | \"none\";\r\n withDisabledDelay?: boolean;\r\n type?: \"button\" | \"submit\" | \"reset\";\r\n children?: React.ReactNode;\r\n};\r\n\r\n// Base button styles that apply to all variants\r\nconst baseStyles =\r\n \"relative shrink-0 select-none transition outline-none duration-200 ease-out focus-visible:ring-border-brand-light flex items-center justify-center cursor-pointer\"; //was pl-1.5 and rounded-lg\r\n\r\nconst sizeStyles = {\r\n xs: \"text-xs px-1 gap-x-0.5 py-1\",\r\n sm: \"text-sm px-2.5 gap-x-1 py-1.5\",\r\n mdsm: \"text-sm px-3 gap-x-1.5 py-2.5\",\r\n md: \"text-base px-4 gap-x-1.5 py-2.5\",\r\n lg: \"text-base px-4 gap-x-1.5 py-3.5\",\r\n picker: \"text-base px-2 py-2 gap-x-1.5\",\r\n iconXs: \"text-xs p-1\",\r\n iconSm: \"text-sm p-2\",\r\n iconMd: \"text-base p-3\",\r\n iconLg: \"text-base p-4\",\r\n};\r\n\r\n// Focus styles based on showFocus prop\r\nconst focusStyles = {\r\n all: \"focus-visible:ring-1\",\r\n desktop: \"lg:focus-visible:ring-1\",\r\n mobile: \"focus-visible:ring-1 lg:focus-ring-0\",\r\n none: \"\",\r\n};\r\n\r\nconst fontWeightStyles = {\r\n light: \"font-light\",\r\n normal: \"font-normal\",\r\n medium: \"font-medium\",\r\n semibold: \"font-semibold\",\r\n bold: \"font-bold\",\r\n};\r\n\r\nconst borderRadiusStyles = {\r\n none: \"rounded-none\",\r\n \"1\": \"rounded-1\",\r\n \"2\": \"rounded-2\",\r\n \"3\": \"rounded-3\",\r\n \"4\": \"rounded-4\",\r\n \"5\": \"rounded-5\",\r\n \"6\": \"rounded-6\",\r\n \"7\": \"rounded-7\",\r\n \"8\": \"rounded-8\",\r\n \"9\": \"rounded-9\",\r\n \"10\": \"rounded-10\",\r\n \"11\": \"rounded-11\",\r\n \"12\": \"rounded-12\",\r\n full: \"rounded-full\",\r\n};\r\n\r\n// Color variant styles\r\nconst colorStyles = {\r\n transparent: \"text-base-12 lg:hover:bg-base-4 focus-visible:ring-base-6\",\r\n transparentinactive: \"text-base-11 lg:hover:bg-base-4\",\r\n brand:\r\n \"bg-brand text-brand-text lg:hover:bg-brand-hover focus-visible:ring-base-6 border border-transparent\",\r\n accent: \"bg-accent text-accent-text lg:hover:bg-accent-hover\",\r\n contrast:\r\n \"bg-base-12 text-base-1 lg:hover:bg-base-11 focus-visible:ring-base-6\",\r\n solid:\r\n \"bg-base-3 dark-theme:bg-base-3 lg:hover:bg-base-4 border border-base-4 focus-visible:ring-base-5\",\r\n solidhybrid:\r\n \"border border-base-5 dark-theme:border-base-4 dark-theme:bg-base-3 lg:hover:bg-base-4 focus-visible:ring-base-6\",\r\n outline: \"border border-base-6 lg:hover:bg-base-3 focus-visible:ring-base-6\",\r\n info: \"bg-blue-3 text-blue-9 lg:hover:bg-blue-4 lg:active:bg-blue-5 focus-visible:ring-blue-9 border border-transparent\",\r\n success:\r\n \"bg-green-4 text-green-9 lg:hover:bg-green-5 lg:active:bg-green-6 focus-visible:ring-green-9 border border-transparent\",\r\n warning:\r\n \"bg-yellow-4 text-yellow-9 lg:hover:bg-yellow-5 lg:active:bg-yellow-6 focus-visible:ring-yellow-9 border border-transparent\",\r\n danger:\r\n \"bg-red-4 text-red-9 lg:hover:bg-red-5 focus-visible:ring-red-9 border border-transparent\",\r\n dangersolid:\r\n \"bg-red-9 text-base-1 dark-theme:text-base-12 lg:hover:bg-red-8 focus-visible:ring-base-6 border border-transparent\",\r\n disabled: \"bg-base-3 text-base-11 border border-transparent\",\r\n};\r\n\r\n// State based styles\r\nconst stateStyles = {\r\n enabled: \"\",\r\n disabled: \"opacity-75\",\r\n loading: \"\",\r\n};\r\n\r\nconst Button = forwardRef(\r\n (\r\n {\r\n color = \"transparent\",\r\n size = \"mdsm\",\r\n fontWeight = \"normal\",\r\n rounded = \"6\",\r\n state = \"enabled\",\r\n onClick,\r\n className,\r\n children,\r\n withRipple = true,\r\n contrastRipple,\r\n showFocus = \"desktop\",\r\n withDisabledDelay = false,\r\n type = \"button\",\r\n ...others\r\n }: ButtonProps,\r\n forwardedRef: ForwardedRef<HTMLButtonElement>\r\n ) => {\r\n const [disabledDelay, setDisabledDelay] = useState(false);\r\n\r\n const handleClick = (\r\n e: React.MouseEvent<HTMLButtonElement, MouseEvent>\r\n ) => {\r\n if (state === \"enabled\") {\r\n if (withDisabledDelay) {\r\n setDisabledDelay(true);\r\n onClick && onClick(e);\r\n setTimeout(() => setDisabledDelay(false), 1000);\r\n } else {\r\n onClick && onClick(e);\r\n }\r\n }\r\n };\r\n\r\n const { ref: rippleRef, ripple } = useRipple(\r\n withRipple,\r\n color === \"contrast\" || contrastRipple\r\n );\r\n\r\n // Merge the ripple ref with forwarded ref\r\n const ref = useMergedRef(rippleRef, forwardedRef);\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={type}\r\n disabled={\r\n others.disabled\r\n ? others.disabled\r\n : state === \"disabled\" || state === \"loading\"\r\n }\r\n onMouseDown={ripple}\r\n onClick={(e) => (!disabledDelay ? handleClick(e) : null)}\r\n className={cn(\r\n baseStyles,\r\n sizeStyles[size],\r\n fontWeightStyles[fontWeight],\r\n borderRadiusStyles[rounded],\r\n focusStyles[showFocus],\r\n colorStyles[color],\r\n stateStyles[state],\r\n others.disabled && \"opacity-50\",\r\n className\r\n )}\r\n {...others}\r\n >\r\n {children}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n\r\nexport { Button };\r\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n const dayOfMonth = _date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n _date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return _date;\n }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfDay = startOfDay(laterDate_);\n const earlierStartOfDay = startOfDay(earlierDate_);\n\n const laterTimestamp =\n +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n const earlierTimestamp =\n +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n const year = getISOWeekYear(date, options);\n const fourthOfJanuary = constructFrom(options?.in || date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link isSameDay} function options.\n */\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same day (and year and month)\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport function isSameDay(laterDate, earlierDate, options) {\n const [dateLeft_, dateRight_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return +startOfDay(dateLeft_) === +startOfDay(dateRight_);\n}\n\n// Fallback for modularized imports:\nexport default isSameDay;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMonth} function options.\n */\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n const month = _date.getMonth();\n _date.setFullYear(_date.getFullYear(), month + 1, 0);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n","import { normalizeDates } from \"./normalizeDates.js\";\n\nexport function normalizeInterval(context, interval) {\n const [start, end] = normalizeDates(context, interval.start, interval.end);\n return { start, end };\n}\n","import { normalizeInterval } from \"./_lib/normalizeInterval.js\";\nimport { constructFrom } from \"./constructFrom.js\";\n\n/**\n * The {@link eachDayOfInterval} function options.\n */\n\n/**\n * The {@link eachDayOfInterval} function result type. It resolves the proper data type.\n * It uses the first argument date object type, starting from the date argument,\n * then the start interval date, and finally the end interval date. If\n * a context function is passed, it uses the context function return type.\n */\n\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @typeParam IntervalType - Interval type.\n * @typeParam Options - Options type.\n *\n * @param interval - The interval.\n * @param options - An object with options.\n *\n * @returns The array with starts of days from the day of the interval start to the day of the interval end\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\nexport function eachDayOfInterval(interval, options) {\n const { start, end } = normalizeInterval(options?.in, interval);\n\n let reversed = +start > +end;\n const endTime = reversed ? +start : +end;\n const date = reversed ? end : start;\n date.setHours(0, 0, 0, 0);\n\n let step = options?.step ?? 1;\n if (!step) return [];\n if (step < 0) {\n step = -step;\n reversed = !reversed;\n }\n\n const dates = [];\n\n while (+date <= endTime) {\n dates.push(constructFrom(start, date));\n date.setDate(date.getDate() + step);\n date.setHours(0, 0, 0, 0);\n }\n\n return reversed ? dates.reverse() : dates;\n}\n\n// Fallback for modularized imports:\nexport default eachDayOfInterval;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n _date.setDate(1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setFullYear(date_.getFullYear(), 0, 1);\n date_.setHours(0, 0, 0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (+_date >= +startOfNextYear) {\n return year + 1;\n } else if (+_date >= +startOfThisYear) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(options?.in || date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(+date / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n return addLeadingZeros(+date, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date, options?.in);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameMonth} function options.\n */\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same month (and year)\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport function isSameMonth(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return (\n laterDate_.getFullYear() === earlierDate_.getFullYear() &&\n laterDate_.getMonth() === earlierDate_.getMonth()\n );\n}\n\n// Fallback for modularized imports:\nexport default isSameMonth;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The subMonths function options.\n */\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the months subtracted\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function subMonths(date, amount, options) {\n return addMonths(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subMonths;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"menos de un segundo\",\n other: \"menos de {{count}} segundos\",\n },\n\n xSeconds: {\n one: \"1 segundo\",\n other: \"{{count}} segundos\",\n },\n\n halfAMinute: \"medio minuto\",\n\n lessThanXMinutes: {\n one: \"menos de un minuto\",\n other: \"menos de {{count}} minutos\",\n },\n\n xMinutes: {\n one: \"1 minuto\",\n other: \"{{count}} minutos\",\n },\n\n aboutXHours: {\n one: \"alrededor de 1 hora\",\n other: \"alrededor de {{count}} horas\",\n },\n\n xHours: {\n one: \"1 hora\",\n other: \"{{count}} horas\",\n },\n\n xDays: {\n one: \"1 día\",\n other: \"{{count}} días\",\n },\n\n aboutXWeeks: {\n one: \"alrededor de 1 semana\",\n other: \"alrededor de {{count}} semanas\",\n },\n\n xWeeks: {\n one: \"1 semana\",\n other: \"{{count}} semanas\",\n },\n\n aboutXMonths: {\n one: \"alrededor de 1 mes\",\n other: \"alrededor de {{count}} meses\",\n },\n\n xMonths: {\n one: \"1 mes\",\n other: \"{{count}} meses\",\n },\n\n aboutXYears: {\n one: \"alrededor de 1 año\",\n other: \"alrededor de {{count}} años\",\n },\n\n xYears: {\n one: \"1 año\",\n other: \"{{count}} años\",\n },\n\n overXYears: {\n one: \"más de 1 año\",\n other: \"más de {{count}} años\",\n },\n\n almostXYears: {\n one: \"casi 1 año\",\n other: \"casi {{count}} años\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"en \" + result;\n } else {\n return \"hace \" + result;\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, d 'de' MMMM 'de' y\",\n long: \"d 'de' MMMM 'de' y\",\n medium: \"d MMM y\",\n short: \"dd/MM/y\",\n};\n\nconst timeFormats = {\n full: \"HH:mm:ss zzzz\",\n long: \"HH:mm:ss z\",\n medium: \"HH:mm:ss\",\n short: \"HH:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'a las' {{time}}\",\n long: \"{{date}} 'a las' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'el' eeee 'pasado a la' p\",\n yesterday: \"'ayer a la' p\",\n today: \"'hoy a la' p\",\n tomorrow: \"'mañana a la' p\",\n nextWeek: \"eeee 'a la' p\",\n other: \"P\",\n};\n\nconst formatRelativeLocalePlural = {\n lastWeek: \"'el' eeee 'pasado a las' p\",\n yesterday: \"'ayer a las' p\",\n today: \"'hoy a las' p\",\n tomorrow: \"'mañana a las' p\",\n nextWeek: \"eeee 'a las' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, date, _baseDate, _options) => {\n if (date.getHours() !== 1) {\n return formatRelativeLocalePlural[token];\n } else {\n return formatRelativeLocale[token];\n }\n};\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"AC\", \"DC\"],\n abbreviated: [\"AC\", \"DC\"],\n wide: [\"antes de cristo\", \"después de cristo\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"T1\", \"T2\", \"T3\", \"T4\"],\n wide: [\"1º trimestre\", \"2º trimestre\", \"3º trimestre\", \"4º trimestre\"],\n};\n\nconst monthValues = {\n narrow: [\"e\", \"f\", \"m\", \"a\", \"m\", \"j\", \"j\", \"a\", \"s\", \"o\", \"n\", \"d\"],\n abbreviated: [\n \"ene\",\n \"feb\",\n \"mar\",\n \"abr\",\n \"may\",\n \"jun\",\n \"jul\",\n \"ago\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dic\",\n ],\n\n wide: [\n \"enero\",\n \"febrero\",\n \"marzo\",\n \"abril\",\n \"mayo\",\n \"junio\",\n \"julio\",\n \"agosto\",\n \"septiembre\",\n \"octubre\",\n \"noviembre\",\n \"diciembre\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"d\", \"l\", \"m\", \"m\", \"j\", \"v\", \"s\"],\n short: [\"do\", \"lu\", \"ma\", \"mi\", \"ju\", \"vi\", \"sá\"],\n abbreviated: [\"dom\", \"lun\", \"mar\", \"mié\", \"jue\", \"vie\", \"sáb\"],\n wide: [\n \"domingo\",\n \"lunes\",\n \"martes\",\n \"miércoles\",\n \"jueves\",\n \"viernes\",\n \"sábado\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mn\",\n noon: \"md\",\n morning: \"mañana\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noche\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"medianoche\",\n noon: \"mediodia\",\n morning: \"mañana\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noche\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"medianoche\",\n noon: \"mediodia\",\n morning: \"mañana\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noche\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mn\",\n noon: \"md\",\n morning: \"de la mañana\",\n afternoon: \"de la tarde\",\n evening: \"de la tarde\",\n night: \"de la noche\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"medianoche\",\n noon: \"mediodia\",\n morning: \"de la mañana\",\n afternoon: \"de la tarde\",\n evening: \"de la tarde\",\n night: \"de la noche\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"medianoche\",\n noon: \"mediodia\",\n morning: \"de la mañana\",\n afternoon: \"de la tarde\",\n evening: \"de la tarde\",\n night: \"de la noche\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n return number + \"º\";\n};\n\nexport const localize = {\n ordinalNumber: ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => Number(quarter) - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\nimport { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(º)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(ac|dc|a|d)/i,\n abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n wide: /^(antes de cristo|antes de la era com[uú]n|despu[eé]s de cristo|era com[uú]n)/i,\n};\nconst parseEraPatterns = {\n any: [/^ac/i, /^dc/i],\n wide: [\n /^(antes de cristo|antes de la era com[uú]n)/i,\n /^(despu[eé]s de cristo|era com[uú]n)/i,\n ],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^T[1234]/i,\n wide: /^[1234](º)? trimestre/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[efmajsond]/i,\n abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,\n wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^e/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^en/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[dlmjvs]/i,\n short: /^(do|lu|ma|mi|ju|vi|s[áa])/i,\n abbreviated: /^(dom|lun|mar|mi[ée]|jue|vie|s[áa]b)/i,\n wide: /^(domingo|lunes|martes|mi[ée]rcoles|jueves|viernes|s[áa]bado)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mn|md|(de la|a las) (mañana|tarde|noche))/i,\n any: /^([ap]\\.?\\s?m\\.?|medianoche|mediodia|(de la|a las) (mañana|tarde|noche))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mn/i,\n noon: /^md/i,\n morning: /mañana/i,\n afternoon: /tarde/i,\n evening: /tarde/i,\n night: /noche/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10);\n },\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./es/_lib/formatDistance.js\";\nimport { formatLong } from \"./es/_lib/formatLong.js\";\nimport { formatRelative } from \"./es/_lib/formatRelative.js\";\nimport { localize } from \"./es/_lib/localize.js\";\nimport { match } from \"./es/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Spanish locale.\n * @language Spanish\n * @iso-639-2 spa\n * @author Juan Angosto [@juanangosto](https://github.com/juanangosto)\n * @author Guillermo Grau [@guigrpa](https://github.com/guigrpa)\n * @author Fernando Agüero [@fjaguero](https://github.com/fjaguero)\n * @author Gastón Haro [@harogaston](https://github.com/harogaston)\n * @author Yago Carballo [@YagoCarballo](https://github.com/YagoCarballo)\n */\nexport const es = {\n code: \"es\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1 /* Monday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default es;\n","import $HgANd$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c = typeof document !== 'undefined' ? (0, $HgANd$react).useLayoutEffect : ()=>{};\n\n\nexport {$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c as useLayoutEffect};\n//# sourceMappingURL=useLayoutEffect.module.js.map\n","const $431fbd86ca7dc216$export$b204af158042fbac = (el)=>{\n var _el_ownerDocument;\n return (_el_ownerDocument = el === null || el === void 0 ? void 0 : el.ownerDocument) !== null && _el_ownerDocument !== void 0 ? _el_ownerDocument : document;\n};\nconst $431fbd86ca7dc216$export$f21a1ffae260145a = (el)=>{\n if (el && 'window' in el && el.window === el) return el;\n const doc = $431fbd86ca7dc216$export$b204af158042fbac(el);\n return doc.defaultView || window;\n};\n/**\n * Type guard that checks if a value is a Node. Verifies the presence and type of the nodeType property.\n */ function $431fbd86ca7dc216$var$isNode(value) {\n return value !== null && typeof value === 'object' && 'nodeType' in value && typeof value.nodeType === 'number';\n}\nfunction $431fbd86ca7dc216$export$af51f0f06c0f328a(node) {\n return $431fbd86ca7dc216$var$isNode(node) && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && 'host' in node;\n}\n\n\nexport {$431fbd86ca7dc216$export$b204af158042fbac as getOwnerDocument, $431fbd86ca7dc216$export$f21a1ffae260145a as getOwnerWindow, $431fbd86ca7dc216$export$af51f0f06c0f328a as isShadowRoot};\n//# sourceMappingURL=domHelpers.module.js.map\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $f4e2df6bd15f8569$var$_tableNestedRows = false;\nlet $f4e2df6bd15f8569$var$_shadowDOM = false;\nfunction $f4e2df6bd15f8569$export$d9d8a0f82de49530() {\n $f4e2df6bd15f8569$var$_tableNestedRows = true;\n}\nfunction $f4e2df6bd15f8569$export$1b00cb14a96194e6() {\n return $f4e2df6bd15f8569$var$_tableNestedRows;\n}\nfunction $f4e2df6bd15f8569$export$12b151d9882e9985() {\n $f4e2df6bd15f8569$var$_shadowDOM = true;\n}\nfunction $f4e2df6bd15f8569$export$98658e8c59125e6a() {\n return $f4e2df6bd15f8569$var$_shadowDOM;\n}\n\n\nexport {$f4e2df6bd15f8569$export$d9d8a0f82de49530 as enableTableNestedRows, $f4e2df6bd15f8569$export$1b00cb14a96194e6 as tableNestedRows, $f4e2df6bd15f8569$export$12b151d9882e9985 as enableShadowDOM, $f4e2df6bd15f8569$export$98658e8c59125e6a as shadowDOM};\n//# sourceMappingURL=module.js.map\n","import {isShadowRoot as $431fbd86ca7dc216$export$af51f0f06c0f328a} from \"./domHelpers.mjs\";\nimport {shadowDOM as $lcSu5$shadowDOM} from \"@react-stately/flags\";\n\n// Source: https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/DOMFunctions.ts#L16\n\n\nfunction $d4ee10de306f2510$export$4282f70798064fe0(node, otherNode) {\n if (!(0, $lcSu5$shadowDOM)()) return otherNode && node ? node.contains(otherNode) : false;\n if (!node || !otherNode) return false;\n let currentNode = otherNode;\n while(currentNode !== null){\n if (currentNode === node) return true;\n if (currentNode.tagName === 'SLOT' && currentNode.assignedSlot) // Element is slotted\n currentNode = currentNode.assignedSlot.parentNode;\n else if ((0, $431fbd86ca7dc216$export$af51f0f06c0f328a)(currentNode)) // Element is in shadow root\n currentNode = currentNode.host;\n else currentNode = currentNode.parentNode;\n }\n return false;\n}\nconst $d4ee10de306f2510$export$cd4e5573fbe2b576 = (doc = document)=>{\n var _activeElement_shadowRoot;\n if (!(0, $lcSu5$shadowDOM)()) return doc.activeElement;\n let activeElement = doc.activeElement;\n while(activeElement && 'shadowRoot' in activeElement && ((_activeElement_shadowRoot = activeElement.shadowRoot) === null || _activeElement_shadowRoot === void 0 ? void 0 : _activeElement_shadowRoot.activeElement))activeElement = activeElement.shadowRoot.activeElement;\n return activeElement;\n};\nfunction $d4ee10de306f2510$export$e58f029f0fbfdb29(event) {\n if ((0, $lcSu5$shadowDOM)() && event.target.shadowRoot) {\n if (event.composedPath) return event.composedPath()[0];\n }\n return event.target;\n}\n\n\nexport {$d4ee10de306f2510$export$4282f70798064fe0 as nodeContains, $d4ee10de306f2510$export$cd4e5573fbe2b576 as getActiveElement, $d4ee10de306f2510$export$e58f029f0fbfdb29 as getEventTarget};\n//# sourceMappingURL=DOMFunctions.module.js.map\n","import {nodeContains as $d4ee10de306f2510$export$4282f70798064fe0} from \"./DOMFunctions.mjs\";\nimport {shadowDOM as $bJKXg$shadowDOM} from \"@react-stately/flags\";\n\n// https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/ShadowTreeWalker.ts\n\n\nclass $dfc540311bf7f109$export$63eb3ababa9c55c4 {\n get currentNode() {\n return this._currentNode;\n }\n set currentNode(node) {\n if (!(0, $d4ee10de306f2510$export$4282f70798064fe0)(this.root, node)) throw new Error('Cannot set currentNode to a node that is not contained by the root node.');\n const walkers = [];\n let curNode = node;\n let currentWalkerCurrentNode = node;\n this._currentNode = node;\n while(curNode && curNode !== this.root)if (curNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowRoot = curNode;\n const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n acceptNode: this._acceptNode\n });\n walkers.push(walker);\n walker.currentNode = currentWalkerCurrentNode;\n this._currentSetFor.add(walker);\n curNode = currentWalkerCurrentNode = shadowRoot.host;\n } else curNode = curNode.parentNode;\n const walker = this._doc.createTreeWalker(this.root, this.whatToShow, {\n acceptNode: this._acceptNode\n });\n walkers.push(walker);\n walker.currentNode = currentWalkerCurrentNode;\n this._currentSetFor.add(walker);\n this._walkerStack = walkers;\n }\n get doc() {\n return this._doc;\n }\n firstChild() {\n let currentNode = this.currentNode;\n let newNode = this.nextNode();\n if (!(0, $d4ee10de306f2510$export$4282f70798064fe0)(currentNode, newNode)) {\n this.currentNode = currentNode;\n return null;\n }\n if (newNode) this.currentNode = newNode;\n return newNode;\n }\n lastChild() {\n let walker = this._walkerStack[0];\n let newNode = walker.lastChild();\n if (newNode) this.currentNode = newNode;\n return newNode;\n }\n nextNode() {\n const nextNode = this._walkerStack[0].nextNode();\n if (nextNode) {\n const shadowRoot = nextNode.shadowRoot;\n if (shadowRoot) {\n var _this_filter;\n let nodeResult;\n if (typeof this.filter === 'function') nodeResult = this.filter(nextNode);\n else if ((_this_filter = this.filter) === null || _this_filter === void 0 ? void 0 : _this_filter.acceptNode) nodeResult = this.filter.acceptNode(nextNode);\n if (nodeResult === NodeFilter.FILTER_ACCEPT) {\n this.currentNode = nextNode;\n return nextNode;\n }\n // _acceptNode should have added new walker for this shadow,\n // go in recursively.\n let newNode = this.nextNode();\n if (newNode) this.currentNode = newNode;\n return newNode;\n }\n if (nextNode) this.currentNode = nextNode;\n return nextNode;\n } else {\n if (this._walkerStack.length > 1) {\n this._walkerStack.shift();\n let newNode = this.nextNode();\n if (newNode) this.currentNode = newNode;\n return newNode;\n } else return null;\n }\n }\n previousNode() {\n const currentWalker = this._walkerStack[0];\n if (currentWalker.currentNode === currentWalker.root) {\n if (this._currentSetFor.has(currentWalker)) {\n this._currentSetFor.delete(currentWalker);\n if (this._walkerStack.length > 1) {\n this._walkerStack.shift();\n let newNode = this.previousNode();\n if (newNode) this.currentNode = newNode;\n return newNode;\n } else return null;\n }\n return null;\n }\n const previousNode = currentWalker.previousNode();\n if (previousNode) {\n const shadowRoot = previousNode.shadowRoot;\n if (shadowRoot) {\n var _this_filter;\n let nodeResult;\n if (typeof this.filter === 'function') nodeResult = this.filter(previousNode);\n else if ((_this_filter = this.filter) === null || _this_filter === void 0 ? void 0 : _this_filter.acceptNode) nodeResult = this.filter.acceptNode(previousNode);\n if (nodeResult === NodeFilter.FILTER_ACCEPT) {\n if (previousNode) this.currentNode = previousNode;\n return previousNode;\n }\n // _acceptNode should have added new walker for this shadow,\n // go in recursively.\n let newNode = this.lastChild();\n if (newNode) this.currentNode = newNode;\n return newNode;\n }\n if (previousNode) this.currentNode = previousNode;\n return previousNode;\n } else {\n if (this._walkerStack.length > 1) {\n this._walkerStack.shift();\n let newNode = this.previousNode();\n if (newNode) this.currentNode = newNode;\n return newNode;\n } else return null;\n }\n }\n /**\n * @deprecated\n */ nextSibling() {\n // if (__DEV__) {\n // throw new Error(\"Method not implemented.\");\n // }\n return null;\n }\n /**\n * @deprecated\n */ previousSibling() {\n // if (__DEV__) {\n // throw new Error(\"Method not implemented.\");\n // }\n return null;\n }\n /**\n * @deprecated\n */ parentNode() {\n // if (__DEV__) {\n // throw new Error(\"Method not implemented.\");\n // }\n return null;\n }\n constructor(doc, root, whatToShow, filter){\n this._walkerStack = [];\n this._currentSetFor = new Set();\n this._acceptNode = (node)=>{\n if (node.nodeType === Node.ELEMENT_NODE) {\n const shadowRoot = node.shadowRoot;\n if (shadowRoot) {\n const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n acceptNode: this._acceptNode\n });\n this._walkerStack.unshift(walker);\n return NodeFilter.FILTER_ACCEPT;\n } else {\n var _this_filter;\n if (typeof this.filter === 'function') return this.filter(node);\n else if ((_this_filter = this.filter) === null || _this_filter === void 0 ? void 0 : _this_filter.acceptNode) return this.filter.acceptNode(node);\n else if (this.filter === null) return NodeFilter.FILTER_ACCEPT;\n }\n }\n return NodeFilter.FILTER_SKIP;\n };\n this._doc = doc;\n this.root = root;\n this.filter = filter !== null && filter !== void 0 ? filter : null;\n this.whatToShow = whatToShow !== null && whatToShow !== void 0 ? whatToShow : NodeFilter.SHOW_ALL;\n this._currentNode = root;\n this._walkerStack.unshift(doc.createTreeWalker(root, whatToShow, this._acceptNode));\n const shadowRoot = root.shadowRoot;\n if (shadowRoot) {\n const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n acceptNode: this._acceptNode\n });\n this._walkerStack.unshift(walker);\n }\n }\n}\nfunction $dfc540311bf7f109$export$4d0f8be8b12a7ef6(doc, root, whatToShow, filter) {\n if ((0, $bJKXg$shadowDOM)()) return new $dfc540311bf7f109$export$63eb3ababa9c55c4(doc, root, whatToShow, filter);\n return doc.createTreeWalker(root, whatToShow, filter);\n}\n\n\nexport {$dfc540311bf7f109$export$63eb3ababa9c55c4 as ShadowTreeWalker, $dfc540311bf7f109$export$4d0f8be8b12a7ef6 as createShadowTreeWalker};\n//# sourceMappingURL=ShadowTreeWalker.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $7215afc6de606d6b$export$de79e2c695e052f3(element) {\n if ($7215afc6de606d6b$var$supportsPreventScroll()) element.focus({\n preventScroll: true\n });\n else {\n let scrollableElements = $7215afc6de606d6b$var$getScrollableElements(element);\n element.focus();\n $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements);\n }\n}\nlet $7215afc6de606d6b$var$supportsPreventScrollCached = null;\nfunction $7215afc6de606d6b$var$supportsPreventScroll() {\n if ($7215afc6de606d6b$var$supportsPreventScrollCached == null) {\n $7215afc6de606d6b$var$supportsPreventScrollCached = false;\n try {\n let focusElem = document.createElement('div');\n focusElem.focus({\n get preventScroll () {\n $7215afc6de606d6b$var$supportsPreventScrollCached = true;\n return true;\n }\n });\n } catch {\n // Ignore\n }\n }\n return $7215afc6de606d6b$var$supportsPreventScrollCached;\n}\nfunction $7215afc6de606d6b$var$getScrollableElements(element) {\n let parent = element.parentNode;\n let scrollableElements = [];\n let rootScrollingElement = document.scrollingElement || document.documentElement;\n while(parent instanceof HTMLElement && parent !== rootScrollingElement){\n if (parent.offsetHeight < parent.scrollHeight || parent.offsetWidth < parent.scrollWidth) scrollableElements.push({\n element: parent,\n scrollTop: parent.scrollTop,\n scrollLeft: parent.scrollLeft\n });\n parent = parent.parentNode;\n }\n if (rootScrollingElement instanceof HTMLElement) scrollableElements.push({\n element: rootScrollingElement,\n scrollTop: rootScrollingElement.scrollTop,\n scrollLeft: rootScrollingElement.scrollLeft\n });\n return scrollableElements;\n}\nfunction $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements) {\n for (let { element: element, scrollTop: scrollTop, scrollLeft: scrollLeft } of scrollableElements){\n element.scrollTop = scrollTop;\n element.scrollLeft = scrollLeft;\n }\n}\n\n\nexport {$7215afc6de606d6b$export$de79e2c695e052f3 as focusWithoutScrolling};\n//# sourceMappingURL=focusWithoutScrolling.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $c87311424ea30a05$var$testUserAgent(re) {\n var _window_navigator_userAgentData;\n if (typeof window === 'undefined' || window.navigator == null) return false;\n let brands = (_window_navigator_userAgentData = window.navigator['userAgentData']) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.brands;\n return Array.isArray(brands) && brands.some((brand)=>re.test(brand.brand)) || re.test(window.navigator.userAgent);\n}\nfunction $c87311424ea30a05$var$testPlatform(re) {\n var _window_navigator_userAgentData;\n return typeof window !== 'undefined' && window.navigator != null ? re.test(((_window_navigator_userAgentData = window.navigator['userAgentData']) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.platform) || window.navigator.platform) : false;\n}\nfunction $c87311424ea30a05$var$cached(fn) {\n if (process.env.NODE_ENV === 'test') return fn;\n let res = null;\n return ()=>{\n if (res == null) res = fn();\n return res;\n };\n}\nconst $c87311424ea30a05$export$9ac100e40613ea10 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testPlatform(/^Mac/i);\n});\nconst $c87311424ea30a05$export$186c6964ca17d99 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testPlatform(/^iPhone/i);\n});\nconst $c87311424ea30a05$export$7bef049ce92e4224 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testPlatform(/^iPad/i) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n $c87311424ea30a05$export$9ac100e40613ea10() && navigator.maxTouchPoints > 1;\n});\nconst $c87311424ea30a05$export$fedb369cb70207f1 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$export$186c6964ca17d99() || $c87311424ea30a05$export$7bef049ce92e4224();\n});\nconst $c87311424ea30a05$export$e1865c3bedcd822b = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$export$9ac100e40613ea10() || $c87311424ea30a05$export$fedb369cb70207f1();\n});\nconst $c87311424ea30a05$export$78551043582a6a98 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/AppleWebKit/i) && !$c87311424ea30a05$export$6446a186d09e379e();\n});\nconst $c87311424ea30a05$export$6446a186d09e379e = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/Chrome/i);\n});\nconst $c87311424ea30a05$export$a11b0059900ceec8 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/Android/i);\n});\nconst $c87311424ea30a05$export$b7d78993b74f766d = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/Firefox/i);\n});\n\n\nexport {$c87311424ea30a05$export$9ac100e40613ea10 as isMac, $c87311424ea30a05$export$186c6964ca17d99 as isIPhone, $c87311424ea30a05$export$7bef049ce92e4224 as isIPad, $c87311424ea30a05$export$fedb369cb70207f1 as isIOS, $c87311424ea30a05$export$e1865c3bedcd822b as isAppleDevice, $c87311424ea30a05$export$78551043582a6a98 as isWebKit, $c87311424ea30a05$export$6446a186d09e379e as isChrome, $c87311424ea30a05$export$a11b0059900ceec8 as isAndroid, $c87311424ea30a05$export$b7d78993b74f766d as isFirefox};\n//# sourceMappingURL=platform.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // We store a global list of elements that are currently transitioning,\n// mapped to a set of CSS properties that are transitioning for that element.\n// This is necessary rather than a simple count of transitions because of browser\n// bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather\n// than one or the other. So we need to track what's actually transitioning so that\n// we can ignore these duplicate events.\nlet $bbed8b41f857bcc0$var$transitionsByElement = new Map();\n// A list of callbacks to call once there are no transitioning elements.\nlet $bbed8b41f857bcc0$var$transitionCallbacks = new Set();\nfunction $bbed8b41f857bcc0$var$setupGlobalEvents() {\n if (typeof window === 'undefined') return;\n function isTransitionEvent(event) {\n return 'propertyName' in event;\n }\n let onTransitionStart = (e)=>{\n if (!isTransitionEvent(e) || !e.target) return;\n // Add the transitioning property to the list for this element.\n let transitions = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);\n if (!transitions) {\n transitions = new Set();\n $bbed8b41f857bcc0$var$transitionsByElement.set(e.target, transitions);\n // The transitioncancel event must be registered on the element itself, rather than as a global\n // event. This enables us to handle when the node is deleted from the document while it is transitioning.\n // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.\n e.target.addEventListener('transitioncancel', onTransitionEnd, {\n once: true\n });\n }\n transitions.add(e.propertyName);\n };\n let onTransitionEnd = (e)=>{\n if (!isTransitionEvent(e) || !e.target) return;\n // Remove property from list of transitioning properties.\n let properties = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);\n if (!properties) return;\n properties.delete(e.propertyName);\n // If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.\n if (properties.size === 0) {\n e.target.removeEventListener('transitioncancel', onTransitionEnd);\n $bbed8b41f857bcc0$var$transitionsByElement.delete(e.target);\n }\n // If no transitioning elements, call all of the queued callbacks.\n if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) {\n for (let cb of $bbed8b41f857bcc0$var$transitionCallbacks)cb();\n $bbed8b41f857bcc0$var$transitionCallbacks.clear();\n }\n };\n document.body.addEventListener('transitionrun', onTransitionStart);\n document.body.addEventListener('transitionend', onTransitionEnd);\n}\nif (typeof document !== 'undefined') {\n if (document.readyState !== 'loading') $bbed8b41f857bcc0$var$setupGlobalEvents();\n else document.addEventListener('DOMContentLoaded', $bbed8b41f857bcc0$var$setupGlobalEvents);\n}\n/**\n * Cleans up any elements that are no longer in the document.\n * This is necessary because we can't rely on transitionend events to fire\n * for elements that are removed from the document while transitioning.\n */ function $bbed8b41f857bcc0$var$cleanupDetachedElements() {\n for (const [eventTarget] of $bbed8b41f857bcc0$var$transitionsByElement)// Similar to `eventTarget instanceof Element && !eventTarget.isConnected`, but avoids\n // the explicit instanceof check, since it may be different in different contexts.\n if ('isConnected' in eventTarget && !eventTarget.isConnected) $bbed8b41f857bcc0$var$transitionsByElement.delete(eventTarget);\n}\nfunction $bbed8b41f857bcc0$export$24490316f764c430(fn) {\n // Wait one frame to see if an animation starts, e.g. a transition on mount.\n requestAnimationFrame(()=>{\n $bbed8b41f857bcc0$var$cleanupDetachedElements();\n // If no transitions are running, call the function immediately.\n // Otherwise, add it to a list of callbacks to run at the end of the animation.\n if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) fn();\n else $bbed8b41f857bcc0$var$transitionCallbacks.add(fn);\n });\n}\n\n\nexport {$bbed8b41f857bcc0$export$24490316f764c430 as runAfterTransition};\n//# sourceMappingURL=runAfterTransition.module.js.map\n","import {isAndroid as $c87311424ea30a05$export$a11b0059900ceec8} from \"./platform.mjs\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $6a7db85432448f7f$export$60278871457622de(event) {\n // JAWS/NVDA with Firefox.\n if (event.pointerType === '' && event.isTrusted) return true;\n // Android TalkBack's detail value varies depending on the event listener providing the event so we have specific logic here instead\n // If pointerType is defined, event is from a click listener. For events from mousedown listener, detail === 0 is a sufficient check\n // to detect TalkBack virtual clicks.\n if ((0, $c87311424ea30a05$export$a11b0059900ceec8)() && event.pointerType) return event.type === 'click' && event.buttons === 1;\n return event.detail === 0 && !event.pointerType;\n}\nfunction $6a7db85432448f7f$export$29bf1b5f2c56cf63(event) {\n // If the pointer size is zero, then we assume it's from a screen reader.\n // Android TalkBack double tap will sometimes return a event with width and height of 1\n // and pointerType === 'mouse' so we need to check for a specific combination of event attributes.\n // Cannot use \"event.pressure === 0\" as the sole check due to Safari pointer events always returning pressure === 0\n // instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216. event.pointerType === 'mouse' is to distingush\n // Talkback double tap from Windows Firefox touch screen press\n return !(0, $c87311424ea30a05$export$a11b0059900ceec8)() && event.width === 0 && event.height === 0 || event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse';\n}\n\n\nexport {$6a7db85432448f7f$export$60278871457622de as isVirtualClick, $6a7db85432448f7f$export$29bf1b5f2c56cf63 as isVirtualPointerEvent};\n//# sourceMappingURL=isVirtualEvent.module.js.map\n","import {getOwnerWindow as $431fbd86ca7dc216$export$f21a1ffae260145a} from \"./domHelpers.mjs\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $7d2416ea0959daaa$var$supportsCheckVisibility = typeof Element !== 'undefined' && 'checkVisibility' in Element.prototype;\nfunction $7d2416ea0959daaa$var$isStyleVisible(element) {\n const windowObject = (0, $431fbd86ca7dc216$export$f21a1ffae260145a)(element);\n if (!(element instanceof windowObject.HTMLElement) && !(element instanceof windowObject.SVGElement)) return false;\n let { display: display, visibility: visibility } = element.style;\n let isVisible = display !== 'none' && visibility !== 'hidden' && visibility !== 'collapse';\n if (isVisible) {\n const { getComputedStyle: getComputedStyle } = element.ownerDocument.defaultView;\n let { display: computedDisplay, visibility: computedVisibility } = getComputedStyle(element);\n isVisible = computedDisplay !== 'none' && computedVisibility !== 'hidden' && computedVisibility !== 'collapse';\n }\n return isVisible;\n}\nfunction $7d2416ea0959daaa$var$isAttributeVisible(element, childElement) {\n return !element.hasAttribute('hidden') && // Ignore HiddenSelect when tree walking.\n !element.hasAttribute('data-react-aria-prevent-focus') && (element.nodeName === 'DETAILS' && childElement && childElement.nodeName !== 'SUMMARY' ? element.hasAttribute('open') : true);\n}\nfunction $7d2416ea0959daaa$export$e989c0fffaa6b27a(element, childElement) {\n if ($7d2416ea0959daaa$var$supportsCheckVisibility) return element.checkVisibility({\n visibilityProperty: true\n }) && !element.closest('[data-react-aria-prevent-focus]');\n return element.nodeName !== '#comment' && $7d2416ea0959daaa$var$isStyleVisible(element) && $7d2416ea0959daaa$var$isAttributeVisible(element, childElement) && (!element.parentElement || $7d2416ea0959daaa$export$e989c0fffaa6b27a(element.parentElement, element));\n}\n\n\nexport {$7d2416ea0959daaa$export$e989c0fffaa6b27a as isElementVisible};\n//# sourceMappingURL=isElementVisible.module.js.map\n","import {isElementVisible as $7d2416ea0959daaa$export$e989c0fffaa6b27a} from \"./isElementVisible.mjs\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $b4b717babfbb907b$var$focusableElements = [\n 'input:not([disabled]):not([type=hidden])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'a[href]',\n 'area[href]',\n 'summary',\n 'iframe',\n 'object',\n 'embed',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable^=\"false\"])',\n 'permission'\n];\nconst $b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR = $b4b717babfbb907b$var$focusableElements.join(':not([hidden]),') + ',[tabindex]:not([disabled]):not([hidden])';\n$b4b717babfbb907b$var$focusableElements.push('[tabindex]:not([tabindex=\"-1\"]):not([disabled])');\nconst $b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR = $b4b717babfbb907b$var$focusableElements.join(':not([hidden]):not([tabindex=\"-1\"]),');\nfunction $b4b717babfbb907b$export$4c063cf1350e6fed(element) {\n return element.matches($b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR) && (0, $7d2416ea0959daaa$export$e989c0fffaa6b27a)(element) && !$b4b717babfbb907b$var$isInert(element);\n}\nfunction $b4b717babfbb907b$export$bebd5a1431fec25d(element) {\n return element.matches($b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR) && (0, $7d2416ea0959daaa$export$e989c0fffaa6b27a)(element) && !$b4b717babfbb907b$var$isInert(element);\n}\nfunction $b4b717babfbb907b$var$isInert(element) {\n let node = element;\n while(node != null){\n if (node instanceof node.ownerDocument.defaultView.HTMLElement && node.inert) return true;\n node = node.parentElement;\n }\n return false;\n}\n\n\nexport {$b4b717babfbb907b$export$4c063cf1350e6fed as isFocusable, $b4b717babfbb907b$export$bebd5a1431fec25d as isTabbable};\n//# sourceMappingURL=isFocusable.module.js.map\n","import {useLayoutEffect as $6dfIe$useLayoutEffect, useEffectEvent as $6dfIe$useEffectEvent, isFocusable as $6dfIe$isFocusable, getOwnerWindow as $6dfIe$getOwnerWindow, focusWithoutScrolling as $6dfIe$focusWithoutScrolling} from \"@react-aria/utils\";\nimport {useRef as $6dfIe$useRef, useCallback as $6dfIe$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $8a9cb279dc87e130$export$525bc4921d56d4a(nativeEvent) {\n let event = nativeEvent;\n event.nativeEvent = nativeEvent;\n event.isDefaultPrevented = ()=>event.defaultPrevented;\n // cancelBubble is technically deprecated in the spec, but still supported in all browsers.\n event.isPropagationStopped = ()=>event.cancelBubble;\n event.persist = ()=>{};\n return event;\n}\nfunction $8a9cb279dc87e130$export$c2b7abe5d61ec696(event, target) {\n Object.defineProperty(event, 'target', {\n value: target\n });\n Object.defineProperty(event, 'currentTarget', {\n value: target\n });\n}\nfunction $8a9cb279dc87e130$export$715c682d09d639cc(onBlur) {\n let stateRef = (0, $6dfIe$useRef)({\n isFocused: false,\n observer: null\n });\n // Clean up MutationObserver on unmount. See below.\n (0, $6dfIe$useLayoutEffect)(()=>{\n const state = stateRef.current;\n return ()=>{\n if (state.observer) {\n state.observer.disconnect();\n state.observer = null;\n }\n };\n }, []);\n let dispatchBlur = (0, $6dfIe$useEffectEvent)((e)=>{\n onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);\n });\n // This function is called during a React onFocus event.\n return (0, $6dfIe$useCallback)((e)=>{\n // React does not fire onBlur when an element is disabled. https://github.com/facebook/react/issues/9142\n // Most browsers fire a native focusout event in this case, except for Firefox. In that case, we use a\n // MutationObserver to watch for the disabled attribute, and dispatch these events ourselves.\n // For browsers that do, focusout fires before the MutationObserver, so onBlur should not fire twice.\n if (e.target instanceof HTMLButtonElement || e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement || e.target instanceof HTMLSelectElement) {\n stateRef.current.isFocused = true;\n let target = e.target;\n let onBlurHandler = (e)=>{\n stateRef.current.isFocused = false;\n if (target.disabled) {\n // For backward compatibility, dispatch a (fake) React synthetic event.\n let event = $8a9cb279dc87e130$export$525bc4921d56d4a(e);\n dispatchBlur(event);\n }\n // We no longer need the MutationObserver once the target is blurred.\n if (stateRef.current.observer) {\n stateRef.current.observer.disconnect();\n stateRef.current.observer = null;\n }\n };\n target.addEventListener('focusout', onBlurHandler, {\n once: true\n });\n stateRef.current.observer = new MutationObserver(()=>{\n if (stateRef.current.isFocused && target.disabled) {\n var _stateRef_current_observer;\n (_stateRef_current_observer = stateRef.current.observer) === null || _stateRef_current_observer === void 0 ? void 0 : _stateRef_current_observer.disconnect();\n let relatedTargetEl = target === document.activeElement ? null : document.activeElement;\n target.dispatchEvent(new FocusEvent('blur', {\n relatedTarget: relatedTargetEl\n }));\n target.dispatchEvent(new FocusEvent('focusout', {\n bubbles: true,\n relatedTarget: relatedTargetEl\n }));\n }\n });\n stateRef.current.observer.observe(target, {\n attributes: true,\n attributeFilter: [\n 'disabled'\n ]\n });\n }\n }, [\n dispatchBlur\n ]);\n}\nlet $8a9cb279dc87e130$export$fda7da73ab5d4c48 = false;\nfunction $8a9cb279dc87e130$export$cabe61c495ee3649(target) {\n // The browser will focus the nearest focusable ancestor of our target.\n while(target && !(0, $6dfIe$isFocusable)(target))target = target.parentElement;\n let window = (0, $6dfIe$getOwnerWindow)(target);\n let activeElement = window.document.activeElement;\n if (!activeElement || activeElement === target) return;\n $8a9cb279dc87e130$export$fda7da73ab5d4c48 = true;\n let isRefocusing = false;\n let onBlur = (e)=>{\n if (e.target === activeElement || isRefocusing) e.stopImmediatePropagation();\n };\n let onFocusOut = (e)=>{\n if (e.target === activeElement || isRefocusing) {\n e.stopImmediatePropagation();\n // If there was no focusable ancestor, we don't expect a focus event.\n // Re-focus the original active element here.\n if (!target && !isRefocusing) {\n isRefocusing = true;\n (0, $6dfIe$focusWithoutScrolling)(activeElement);\n cleanup();\n }\n }\n };\n let onFocus = (e)=>{\n if (e.target === target || isRefocusing) e.stopImmediatePropagation();\n };\n let onFocusIn = (e)=>{\n if (e.target === target || isRefocusing) {\n e.stopImmediatePropagation();\n if (!isRefocusing) {\n isRefocusing = true;\n (0, $6dfIe$focusWithoutScrolling)(activeElement);\n cleanup();\n }\n }\n };\n window.addEventListener('blur', onBlur, true);\n window.addEventListener('focusout', onFocusOut, true);\n window.addEventListener('focusin', onFocusIn, true);\n window.addEventListener('focus', onFocus, true);\n let cleanup = ()=>{\n cancelAnimationFrame(raf);\n window.removeEventListener('blur', onBlur, true);\n window.removeEventListener('focusout', onFocusOut, true);\n window.removeEventListener('focusin', onFocusIn, true);\n window.removeEventListener('focus', onFocus, true);\n $8a9cb279dc87e130$export$fda7da73ab5d4c48 = false;\n isRefocusing = false;\n };\n let raf = requestAnimationFrame(cleanup);\n return cleanup;\n}\n\n\nexport {$8a9cb279dc87e130$export$525bc4921d56d4a as createSyntheticEvent, $8a9cb279dc87e130$export$c2b7abe5d61ec696 as setEventTarget, $8a9cb279dc87e130$export$715c682d09d639cc as useSyntheticBlurEvent, $8a9cb279dc87e130$export$fda7da73ab5d4c48 as ignoreFocusEvent, $8a9cb279dc87e130$export$cabe61c495ee3649 as preventFocus};\n//# sourceMappingURL=utils.module.js.map\n","import {ignoreFocusEvent as $8a9cb279dc87e130$export$fda7da73ab5d4c48} from \"./utils.mjs\";\nimport {isMac as $28AnR$isMac, isVirtualClick as $28AnR$isVirtualClick, getOwnerWindow as $28AnR$getOwnerWindow, getOwnerDocument as $28AnR$getOwnerDocument} from \"@react-aria/utils\";\nimport {useState as $28AnR$useState, useEffect as $28AnR$useEffect} from \"react\";\nimport {useIsSSR as $28AnR$useIsSSR} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\nlet $507fabe10e71c6fb$var$currentModality = null;\nlet $507fabe10e71c6fb$var$changeHandlers = new Set();\nlet $507fabe10e71c6fb$export$d90243b58daecda7 = new Map(); // We use a map here to support setting event listeners across multiple document objects.\nlet $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\nlet $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;\n// Only Tab or Esc keys will make focus visible on text input elements\nconst $507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS = {\n Tab: true,\n Escape: true\n};\nfunction $507fabe10e71c6fb$var$triggerChangeHandlers(modality, e) {\n for (let handler of $507fabe10e71c6fb$var$changeHandlers)handler(modality, e);\n}\n/**\n * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.\n */ function $507fabe10e71c6fb$var$isValidKey(e) {\n // Control and Shift keys trigger when navigating back to the tab with keyboard.\n return !(e.metaKey || !(0, $28AnR$isMac)() && e.altKey || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');\n}\nfunction $507fabe10e71c6fb$var$handleKeyboardEvent(e) {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n if ($507fabe10e71c6fb$var$isValidKey(e)) {\n $507fabe10e71c6fb$var$currentModality = 'keyboard';\n $507fabe10e71c6fb$var$triggerChangeHandlers('keyboard', e);\n }\n}\nfunction $507fabe10e71c6fb$var$handlePointerEvent(e) {\n $507fabe10e71c6fb$var$currentModality = 'pointer';\n if (e.type === 'mousedown' || e.type === 'pointerdown') {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n $507fabe10e71c6fb$var$triggerChangeHandlers('pointer', e);\n }\n}\nfunction $507fabe10e71c6fb$var$handleClickEvent(e) {\n if ((0, $28AnR$isVirtualClick)(e)) {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n $507fabe10e71c6fb$var$currentModality = 'virtual';\n }\n}\nfunction $507fabe10e71c6fb$var$handleFocusEvent(e) {\n // Firefox fires two extra focus events when the user first clicks into an iframe:\n // first on the window, then on the document. We ignore these events so they don't\n // cause keyboard focus rings to appear.\n if (e.target === window || e.target === document || (0, $8a9cb279dc87e130$export$fda7da73ab5d4c48) || !e.isTrusted) return;\n // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.\n // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n if (!$507fabe10e71c6fb$var$hasEventBeforeFocus && !$507fabe10e71c6fb$var$hasBlurredWindowRecently) {\n $507fabe10e71c6fb$var$currentModality = 'virtual';\n $507fabe10e71c6fb$var$triggerChangeHandlers('virtual', e);\n }\n $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\n $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;\n}\nfunction $507fabe10e71c6fb$var$handleWindowBlur() {\n if (0, $8a9cb279dc87e130$export$fda7da73ab5d4c48) return;\n // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n // for example, since a subsequent focus event won't be fired.\n $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\n $507fabe10e71c6fb$var$hasBlurredWindowRecently = true;\n}\n/**\n * Setup global event listeners to control when keyboard focus style should be visible.\n */ function $507fabe10e71c6fb$var$setupGlobalFocusEvents(element) {\n if (typeof window === 'undefined' || typeof document === 'undefined' || $507fabe10e71c6fb$export$d90243b58daecda7.get((0, $28AnR$getOwnerWindow)(element))) return;\n const windowObject = (0, $28AnR$getOwnerWindow)(element);\n const documentObject = (0, $28AnR$getOwnerDocument)(element);\n // Programmatic focus() calls shouldn't affect the current input modality.\n // However, we need to detect other cases when a focus event occurs without\n // a preceding user event (e.g. screen reader focus). Overriding the focus\n // method on HTMLElement.prototype is a bit hacky, but works.\n let focus = windowObject.HTMLElement.prototype.focus;\n windowObject.HTMLElement.prototype.focus = function() {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n focus.apply(this, arguments);\n };\n documentObject.addEventListener('keydown', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.addEventListener('keyup', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.addEventListener('click', $507fabe10e71c6fb$var$handleClickEvent, true);\n // Register focus events on the window so they are sure to happen\n // before React's event listeners (registered on the document).\n windowObject.addEventListener('focus', $507fabe10e71c6fb$var$handleFocusEvent, true);\n windowObject.addEventListener('blur', $507fabe10e71c6fb$var$handleWindowBlur, false);\n if (typeof PointerEvent !== 'undefined') {\n documentObject.addEventListener('pointerdown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('pointermove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('pointerup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n } else if (process.env.NODE_ENV === 'test') {\n documentObject.addEventListener('mousedown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('mousemove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('mouseup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n }\n // Add unmount handler\n windowObject.addEventListener('beforeunload', ()=>{\n $507fabe10e71c6fb$var$tearDownWindowFocusTracking(element);\n }, {\n once: true\n });\n $507fabe10e71c6fb$export$d90243b58daecda7.set(windowObject, {\n focus: focus\n });\n}\nconst $507fabe10e71c6fb$var$tearDownWindowFocusTracking = (element, loadListener)=>{\n const windowObject = (0, $28AnR$getOwnerWindow)(element);\n const documentObject = (0, $28AnR$getOwnerDocument)(element);\n if (loadListener) documentObject.removeEventListener('DOMContentLoaded', loadListener);\n if (!$507fabe10e71c6fb$export$d90243b58daecda7.has(windowObject)) return;\n windowObject.HTMLElement.prototype.focus = $507fabe10e71c6fb$export$d90243b58daecda7.get(windowObject).focus;\n documentObject.removeEventListener('keydown', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.removeEventListener('keyup', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.removeEventListener('click', $507fabe10e71c6fb$var$handleClickEvent, true);\n windowObject.removeEventListener('focus', $507fabe10e71c6fb$var$handleFocusEvent, true);\n windowObject.removeEventListener('blur', $507fabe10e71c6fb$var$handleWindowBlur, false);\n if (typeof PointerEvent !== 'undefined') {\n documentObject.removeEventListener('pointerdown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('pointermove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('pointerup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n } else if (process.env.NODE_ENV === 'test') {\n documentObject.removeEventListener('mousedown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('mousemove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('mouseup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n }\n $507fabe10e71c6fb$export$d90243b58daecda7.delete(windowObject);\n};\nfunction $507fabe10e71c6fb$export$2f1888112f558a7d(element) {\n const documentObject = (0, $28AnR$getOwnerDocument)(element);\n let loadListener;\n if (documentObject.readyState !== 'loading') $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);\n else {\n loadListener = ()=>{\n $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);\n };\n documentObject.addEventListener('DOMContentLoaded', loadListener);\n }\n return ()=>$507fabe10e71c6fb$var$tearDownWindowFocusTracking(element, loadListener);\n}\n// Server-side rendering does not have the document object defined\n// eslint-disable-next-line no-restricted-globals\nif (typeof document !== 'undefined') $507fabe10e71c6fb$export$2f1888112f558a7d();\nfunction $507fabe10e71c6fb$export$b9b3dfddab17db27() {\n return $507fabe10e71c6fb$var$currentModality !== 'pointer';\n}\nfunction $507fabe10e71c6fb$export$630ff653c5ada6a9() {\n return $507fabe10e71c6fb$var$currentModality;\n}\nfunction $507fabe10e71c6fb$export$8397ddfc504fdb9a(modality) {\n $507fabe10e71c6fb$var$currentModality = modality;\n $507fabe10e71c6fb$var$triggerChangeHandlers(modality, null);\n}\nfunction $507fabe10e71c6fb$export$98e20ec92f614cfe() {\n $507fabe10e71c6fb$var$setupGlobalFocusEvents();\n let [modality, setModality] = (0, $28AnR$useState)($507fabe10e71c6fb$var$currentModality);\n (0, $28AnR$useEffect)(()=>{\n let handler = ()=>{\n setModality($507fabe10e71c6fb$var$currentModality);\n };\n $507fabe10e71c6fb$var$changeHandlers.add(handler);\n return ()=>{\n $507fabe10e71c6fb$var$changeHandlers.delete(handler);\n };\n }, []);\n return (0, $28AnR$useIsSSR)() ? null : modality;\n}\nconst $507fabe10e71c6fb$var$nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\n/**\n * If this is attached to text input component, return if the event is a focus event (Tab/Escape keys pressed) so that\n * focus visible style can be properly set.\n */ function $507fabe10e71c6fb$var$isKeyboardFocusEvent(isTextInput, modality, e) {\n let document1 = (0, $28AnR$getOwnerDocument)(e === null || e === void 0 ? void 0 : e.target);\n const IHTMLInputElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLInputElement : HTMLInputElement;\n const IHTMLTextAreaElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLTextAreaElement : HTMLTextAreaElement;\n const IHTMLElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLElement : HTMLElement;\n const IKeyboardEvent = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).KeyboardEvent : KeyboardEvent;\n // For keyboard events that occur on a non-input element that will move focus into input element (aka ArrowLeft going from Datepicker button to the main input group)\n // we need to rely on the user passing isTextInput into here. This way we can skip toggling focus visiblity for said input element\n isTextInput = isTextInput || document1.activeElement instanceof IHTMLInputElement && !$507fabe10e71c6fb$var$nonTextInputTypes.has(document1.activeElement.type) || document1.activeElement instanceof IHTMLTextAreaElement || document1.activeElement instanceof IHTMLElement && document1.activeElement.isContentEditable;\n return !(isTextInput && modality === 'keyboard' && e instanceof IKeyboardEvent && !$507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS[e.key]);\n}\nfunction $507fabe10e71c6fb$export$ffd9e5021c1fb2d6(props = {}) {\n let { isTextInput: isTextInput, autoFocus: autoFocus } = props;\n let [isFocusVisibleState, setFocusVisible] = (0, $28AnR$useState)(autoFocus || $507fabe10e71c6fb$export$b9b3dfddab17db27());\n $507fabe10e71c6fb$export$ec71b4b83ac08ec3((isFocusVisible)=>{\n setFocusVisible(isFocusVisible);\n }, [\n isTextInput\n ], {\n isTextInput: isTextInput\n });\n return {\n isFocusVisible: isFocusVisibleState\n };\n}\nfunction $507fabe10e71c6fb$export$ec71b4b83ac08ec3(fn, deps, opts) {\n $507fabe10e71c6fb$var$setupGlobalFocusEvents();\n (0, $28AnR$useEffect)(()=>{\n let handler = (modality, e)=>{\n // We want to early return for any keyboard events that occur inside text inputs EXCEPT for Tab and Escape\n if (!$507fabe10e71c6fb$var$isKeyboardFocusEvent(!!(opts === null || opts === void 0 ? void 0 : opts.isTextInput), modality, e)) return;\n fn($507fabe10e71c6fb$export$b9b3dfddab17db27());\n };\n $507fabe10e71c6fb$var$changeHandlers.add(handler);\n return ()=>{\n $507fabe10e71c6fb$var$changeHandlers.delete(handler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n\n\nexport {$507fabe10e71c6fb$export$d90243b58daecda7 as hasSetupGlobalListeners, $507fabe10e71c6fb$export$2f1888112f558a7d as addWindowFocusTracking, $507fabe10e71c6fb$export$b9b3dfddab17db27 as isFocusVisible, $507fabe10e71c6fb$export$630ff653c5ada6a9 as getInteractionModality, $507fabe10e71c6fb$export$8397ddfc504fdb9a as setInteractionModality, $507fabe10e71c6fb$export$98e20ec92f614cfe as useInteractionModality, $507fabe10e71c6fb$export$ffd9e5021c1fb2d6 as useFocusVisible, $507fabe10e71c6fb$export$ec71b4b83ac08ec3 as useFocusVisibleListener};\n//# sourceMappingURL=useFocusVisible.module.js.map\n","import {getInteractionModality as $507fabe10e71c6fb$export$630ff653c5ada6a9} from \"./useFocusVisible.mjs\";\nimport {getOwnerDocument as $k50bp$getOwnerDocument, getActiveElement as $k50bp$getActiveElement, runAfterTransition as $k50bp$runAfterTransition, focusWithoutScrolling as $k50bp$focusWithoutScrolling} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $3ad3f6e1647bc98d$export$80f3e147d781571c(element) {\n // If the user is interacting with a virtual cursor, e.g. screen reader, then\n // wait until after any animated transitions that are currently occurring on\n // the page before shifting focus. This avoids issues with VoiceOver on iOS\n // causing the page to scroll when moving focus if the element is transitioning\n // from off the screen.\n const ownerDocument = (0, $k50bp$getOwnerDocument)(element);\n const activeElement = (0, $k50bp$getActiveElement)(ownerDocument);\n if ((0, $507fabe10e71c6fb$export$630ff653c5ada6a9)() === 'virtual') {\n let lastFocusedElement = activeElement;\n (0, $k50bp$runAfterTransition)(()=>{\n // If focus did not move and the element is still in the document, focus it.\n if ((0, $k50bp$getActiveElement)(ownerDocument) === lastFocusedElement && element.isConnected) (0, $k50bp$focusWithoutScrolling)(element);\n });\n } else (0, $k50bp$focusWithoutScrolling)(element);\n}\n\n\nexport {$3ad3f6e1647bc98d$export$80f3e147d781571c as focusSafely};\n//# sourceMappingURL=focusSafely.module.js.map\n","import {useLayoutEffect as $cgawC$useLayoutEffect, getActiveElement as $cgawC$getActiveElement, getOwnerDocument as $cgawC$getOwnerDocument, getEventTarget as $cgawC$getEventTarget, isAndroid as $cgawC$isAndroid, isChrome as $cgawC$isChrome, isTabbable as $cgawC$isTabbable, isFocusable as $cgawC$isFocusable, createShadowTreeWalker as $cgawC$createShadowTreeWalker} from \"@react-aria/utils\";\nimport {getInteractionModality as $cgawC$getInteractionModality, focusSafely as $cgawC$focusSafely} from \"@react-aria/interactions\";\nimport $cgawC$react, {useRef as $cgawC$useRef, useContext as $cgawC$useContext, useMemo as $cgawC$useMemo, useEffect as $cgawC$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $9bf71ea28793e738$var$FocusContext = /*#__PURE__*/ (0, $cgawC$react).createContext(null);\nconst $9bf71ea28793e738$var$RESTORE_FOCUS_EVENT = 'react-aria-focus-scope-restore';\nlet $9bf71ea28793e738$var$activeScope = null;\nfunction $9bf71ea28793e738$export$20e40289641fbbb6(props) {\n let { children: children, contain: contain, restoreFocus: restoreFocus, autoFocus: autoFocus } = props;\n let startRef = (0, $cgawC$useRef)(null);\n let endRef = (0, $cgawC$useRef)(null);\n let scopeRef = (0, $cgawC$useRef)([]);\n let { parentNode: parentNode } = (0, $cgawC$useContext)($9bf71ea28793e738$var$FocusContext) || {};\n // Create a tree node here so we can add children to it even before it is added to the tree.\n let node = (0, $cgawC$useMemo)(()=>new $9bf71ea28793e738$var$TreeNode({\n scopeRef: scopeRef\n }), [\n scopeRef\n ]);\n (0, $cgawC$useLayoutEffect)(()=>{\n // If a new scope mounts outside the active scope, (e.g. DialogContainer launched from a menu),\n // use the active scope as the parent instead of the parent from context. Layout effects run bottom\n // up, so if the parent is not yet added to the tree, don't do this. Only the outer-most FocusScope\n // that is being added should get the activeScope as its parent.\n let parent = parentNode || $9bf71ea28793e738$export$d06fae2ee68b101e.root;\n if ($9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(parent.scopeRef) && $9bf71ea28793e738$var$activeScope && !$9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, parent.scopeRef)) {\n let activeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);\n if (activeNode) parent = activeNode;\n }\n // Add the node to the parent, and to the tree.\n parent.addChild(node);\n $9bf71ea28793e738$export$d06fae2ee68b101e.addNode(node);\n }, [\n node,\n parentNode\n ]);\n (0, $cgawC$useLayoutEffect)(()=>{\n let node = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n if (node) node.contain = !!contain;\n }, [\n contain\n ]);\n (0, $cgawC$useLayoutEffect)(()=>{\n var _startRef_current;\n // Find all rendered nodes between the sentinels and add them to the scope.\n let node = (_startRef_current = startRef.current) === null || _startRef_current === void 0 ? void 0 : _startRef_current.nextSibling;\n let nodes = [];\n let stopPropagation = (e)=>e.stopPropagation();\n while(node && node !== endRef.current){\n nodes.push(node);\n // Stop custom restore focus event from propagating to parent focus scopes.\n node.addEventListener($9bf71ea28793e738$var$RESTORE_FOCUS_EVENT, stopPropagation);\n node = node.nextSibling;\n }\n scopeRef.current = nodes;\n return ()=>{\n for (let node of nodes)node.removeEventListener($9bf71ea28793e738$var$RESTORE_FOCUS_EVENT, stopPropagation);\n };\n }, [\n children\n ]);\n $9bf71ea28793e738$var$useActiveScopeTracker(scopeRef, restoreFocus, contain);\n $9bf71ea28793e738$var$useFocusContainment(scopeRef, contain);\n $9bf71ea28793e738$var$useRestoreFocus(scopeRef, restoreFocus, contain);\n $9bf71ea28793e738$var$useAutoFocus(scopeRef, autoFocus);\n // This needs to be an effect so that activeScope is updated after the FocusScope tree is complete.\n // It cannot be a useLayoutEffect because the parent of this node hasn't been attached in the tree yet.\n (0, $cgawC$useEffect)(()=>{\n const activeElement = (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined));\n let scope = null;\n if ($9bf71ea28793e738$var$isElementInScope(activeElement, scopeRef.current)) {\n // We need to traverse the focusScope tree and find the bottom most scope that\n // contains the active element and set that as the activeScope.\n for (let node of $9bf71ea28793e738$export$d06fae2ee68b101e.traverse())if (node.scopeRef && $9bf71ea28793e738$var$isElementInScope(activeElement, node.scopeRef.current)) scope = node;\n if (scope === $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef)) $9bf71ea28793e738$var$activeScope = scope.scopeRef;\n }\n }, [\n scopeRef\n ]);\n // This layout effect cleanup is so that the tree node is removed synchronously with react before the RAF\n // in useRestoreFocus cleanup runs.\n (0, $cgawC$useLayoutEffect)(()=>{\n return ()=>{\n var _focusScopeTree_getTreeNode_parent, _focusScopeTree_getTreeNode;\n var _focusScopeTree_getTreeNode_parent_scopeRef;\n // Scope may have been re-parented.\n let parentScope = (_focusScopeTree_getTreeNode_parent_scopeRef = (_focusScopeTree_getTreeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef)) === null || _focusScopeTree_getTreeNode === void 0 ? void 0 : (_focusScopeTree_getTreeNode_parent = _focusScopeTree_getTreeNode.parent) === null || _focusScopeTree_getTreeNode_parent === void 0 ? void 0 : _focusScopeTree_getTreeNode_parent.scopeRef) !== null && _focusScopeTree_getTreeNode_parent_scopeRef !== void 0 ? _focusScopeTree_getTreeNode_parent_scopeRef : null;\n if ((scopeRef === $9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope(scopeRef, $9bf71ea28793e738$var$activeScope)) && (!parentScope || $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(parentScope))) $9bf71ea28793e738$var$activeScope = parentScope;\n $9bf71ea28793e738$export$d06fae2ee68b101e.removeTreeNode(scopeRef);\n };\n }, [\n scopeRef\n ]);\n let focusManager = (0, $cgawC$useMemo)(()=>$9bf71ea28793e738$var$createFocusManagerForScope(scopeRef), []);\n let value = (0, $cgawC$useMemo)(()=>({\n focusManager: focusManager,\n parentNode: node\n }), [\n node,\n focusManager\n ]);\n return /*#__PURE__*/ (0, $cgawC$react).createElement($9bf71ea28793e738$var$FocusContext.Provider, {\n value: value\n }, /*#__PURE__*/ (0, $cgawC$react).createElement(\"span\", {\n \"data-focus-scope-start\": true,\n hidden: true,\n ref: startRef\n }), children, /*#__PURE__*/ (0, $cgawC$react).createElement(\"span\", {\n \"data-focus-scope-end\": true,\n hidden: true,\n ref: endRef\n }));\n}\nfunction $9bf71ea28793e738$export$10c5169755ce7bd7() {\n var _useContext;\n return (_useContext = (0, $cgawC$useContext)($9bf71ea28793e738$var$FocusContext)) === null || _useContext === void 0 ? void 0 : _useContext.focusManager;\n}\nfunction $9bf71ea28793e738$var$createFocusManagerForScope(scopeRef) {\n return {\n focusNext (opts = {}) {\n let scope = scopeRef.current;\n let { from: from, tabbable: tabbable, wrap: wrap, accept: accept } = opts;\n var _scope_;\n let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)((_scope_ = scope[0]) !== null && _scope_ !== void 0 ? _scope_ : undefined));\n let sentinel = scope[0].previousElementSibling;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: tabbable,\n accept: accept\n }, scope);\n walker.currentNode = $9bf71ea28793e738$var$isElementInScope(node, scope) ? node : sentinel;\n let nextNode = walker.nextNode();\n if (!nextNode && wrap) {\n walker.currentNode = sentinel;\n nextNode = walker.nextNode();\n }\n if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n return nextNode;\n },\n focusPrevious (opts = {}) {\n let scope = scopeRef.current;\n let { from: from, tabbable: tabbable, wrap: wrap, accept: accept } = opts;\n var _scope_;\n let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)((_scope_ = scope[0]) !== null && _scope_ !== void 0 ? _scope_ : undefined));\n let sentinel = scope[scope.length - 1].nextElementSibling;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: tabbable,\n accept: accept\n }, scope);\n walker.currentNode = $9bf71ea28793e738$var$isElementInScope(node, scope) ? node : sentinel;\n let previousNode = walker.previousNode();\n if (!previousNode && wrap) {\n walker.currentNode = sentinel;\n previousNode = walker.previousNode();\n }\n if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);\n return previousNode;\n },\n focusFirst (opts = {}) {\n let scope = scopeRef.current;\n let { tabbable: tabbable, accept: accept } = opts;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: tabbable,\n accept: accept\n }, scope);\n walker.currentNode = scope[0].previousElementSibling;\n let nextNode = walker.nextNode();\n if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n return nextNode;\n },\n focusLast (opts = {}) {\n let scope = scopeRef.current;\n let { tabbable: tabbable, accept: accept } = opts;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: tabbable,\n accept: accept\n }, scope);\n walker.currentNode = scope[scope.length - 1].nextElementSibling;\n let previousNode = walker.previousNode();\n if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);\n return previousNode;\n }\n };\n}\nfunction $9bf71ea28793e738$var$getScopeRoot(scope) {\n return scope[0].parentElement;\n}\nfunction $9bf71ea28793e738$var$shouldContainFocus(scopeRef) {\n let scope = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);\n while(scope && scope.scopeRef !== scopeRef){\n if (scope.contain) return false;\n scope = scope.parent;\n }\n return true;\n}\nfunction $9bf71ea28793e738$var$isTabbableRadio(element) {\n if (element.checked) return true;\n let radios = [];\n if (!element.form) radios = [\n ...(0, $cgawC$getOwnerDocument)(element).querySelectorAll(`input[type=\"radio\"][name=\"${CSS.escape(element.name)}\"]`)\n ].filter((radio)=>!radio.form);\n else {\n var _element_form_elements, _element_form;\n let radioList = (_element_form = element.form) === null || _element_form === void 0 ? void 0 : (_element_form_elements = _element_form.elements) === null || _element_form_elements === void 0 ? void 0 : _element_form_elements.namedItem(element.name);\n radios = [\n ...radioList !== null && radioList !== void 0 ? radioList : []\n ];\n }\n if (!radios) return false;\n let anyChecked = radios.some((radio)=>radio.checked);\n return !anyChecked;\n}\nfunction $9bf71ea28793e738$var$useFocusContainment(scopeRef, contain) {\n let focusedNode = (0, $cgawC$useRef)(undefined);\n let raf = (0, $cgawC$useRef)(undefined);\n (0, $cgawC$useLayoutEffect)(()=>{\n let scope = scopeRef.current;\n if (!contain) {\n // if contain was changed, then we should cancel any ongoing waits to pull focus back into containment\n if (raf.current) {\n cancelAnimationFrame(raf.current);\n raf.current = undefined;\n }\n return;\n }\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scope ? scope[0] : undefined);\n // Handle the Tab key to contain focus within the scope\n let onKeyDown = (e)=>{\n if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || !$9bf71ea28793e738$var$shouldContainFocus(scopeRef) || e.isComposing) return;\n let focusedElement = (0, $cgawC$getActiveElement)(ownerDocument);\n let scope = scopeRef.current;\n if (!scope || !$9bf71ea28793e738$var$isElementInScope(focusedElement, scope)) return;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: true\n }, scope);\n if (!focusedElement) return;\n walker.currentNode = focusedElement;\n let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n if (!nextElement) {\n walker.currentNode = e.shiftKey ? scope[scope.length - 1].nextElementSibling : scope[0].previousElementSibling;\n nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n }\n e.preventDefault();\n if (nextElement) $9bf71ea28793e738$var$focusElement(nextElement, true);\n };\n let onFocus = (e)=>{\n // If focusing an element in a child scope of the currently active scope, the child becomes active.\n // Moving out of the active scope to an ancestor is not allowed.\n if ((!$9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, scopeRef)) && $9bf71ea28793e738$var$isElementInScope((0, $cgawC$getEventTarget)(e), scopeRef.current)) {\n $9bf71ea28793e738$var$activeScope = scopeRef;\n focusedNode.current = (0, $cgawC$getEventTarget)(e);\n } else if ($9bf71ea28793e738$var$shouldContainFocus(scopeRef) && !$9bf71ea28793e738$var$isElementInChildScope((0, $cgawC$getEventTarget)(e), scopeRef)) {\n // If a focus event occurs outside the active scope (e.g. user tabs from browser location bar),\n // restore focus to the previously focused node or the first tabbable element in the active scope.\n if (focusedNode.current) focusedNode.current.focus();\n else if ($9bf71ea28793e738$var$activeScope && $9bf71ea28793e738$var$activeScope.current) $9bf71ea28793e738$var$focusFirstInScope($9bf71ea28793e738$var$activeScope.current);\n } else if ($9bf71ea28793e738$var$shouldContainFocus(scopeRef)) focusedNode.current = (0, $cgawC$getEventTarget)(e);\n };\n let onBlur = (e)=>{\n // Firefox doesn't shift focus back to the Dialog properly without this\n if (raf.current) cancelAnimationFrame(raf.current);\n raf.current = requestAnimationFrame(()=>{\n // Patches infinite focus coersion loop for Android Talkback where the user isn't able to move the virtual cursor\n // if within a containing focus scope. Bug filed against Chrome: https://issuetracker.google.com/issues/384844019.\n // Note that this means focus can leave focus containing modals due to this, but it is isolated to Chrome Talkback.\n let modality = (0, $cgawC$getInteractionModality)();\n let shouldSkipFocusRestore = (modality === 'virtual' || modality === null) && (0, $cgawC$isAndroid)() && (0, $cgawC$isChrome)();\n // Use document.activeElement instead of e.relatedTarget so we can tell if user clicked into iframe\n let activeElement = (0, $cgawC$getActiveElement)(ownerDocument);\n if (!shouldSkipFocusRestore && activeElement && $9bf71ea28793e738$var$shouldContainFocus(scopeRef) && !$9bf71ea28793e738$var$isElementInChildScope(activeElement, scopeRef)) {\n $9bf71ea28793e738$var$activeScope = scopeRef;\n let target = (0, $cgawC$getEventTarget)(e);\n if (target && target.isConnected) {\n var _focusedNode_current;\n focusedNode.current = target;\n (_focusedNode_current = focusedNode.current) === null || _focusedNode_current === void 0 ? void 0 : _focusedNode_current.focus();\n } else if ($9bf71ea28793e738$var$activeScope.current) $9bf71ea28793e738$var$focusFirstInScope($9bf71ea28793e738$var$activeScope.current);\n }\n });\n };\n ownerDocument.addEventListener('keydown', onKeyDown, false);\n ownerDocument.addEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusout', onBlur, false));\n return ()=>{\n ownerDocument.removeEventListener('keydown', onKeyDown, false);\n ownerDocument.removeEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusout', onBlur, false));\n };\n }, [\n scopeRef,\n contain\n ]);\n // This is a useLayoutEffect so it is guaranteed to run before our async synthetic blur\n (0, $cgawC$useLayoutEffect)(()=>{\n return ()=>{\n if (raf.current) cancelAnimationFrame(raf.current);\n };\n }, [\n raf\n ]);\n}\nfunction $9bf71ea28793e738$var$isElementInAnyScope(element) {\n return $9bf71ea28793e738$var$isElementInChildScope(element);\n}\nfunction $9bf71ea28793e738$var$isElementInScope(element, scope) {\n if (!element) return false;\n if (!scope) return false;\n return scope.some((node)=>node.contains(element));\n}\nfunction $9bf71ea28793e738$var$isElementInChildScope(element, scope = null) {\n // If the element is within a top layer element (e.g. toasts), always allow moving focus there.\n if (element instanceof Element && element.closest('[data-react-aria-top-layer]')) return true;\n // node.contains in isElementInScope covers child scopes that are also DOM children,\n // but does not cover child scopes in portals.\n for (let { scopeRef: s } of $9bf71ea28793e738$export$d06fae2ee68b101e.traverse($9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scope))){\n if (s && $9bf71ea28793e738$var$isElementInScope(element, s.current)) return true;\n }\n return false;\n}\nfunction $9bf71ea28793e738$export$1258395f99bf9cbf(element) {\n return $9bf71ea28793e738$var$isElementInChildScope(element, $9bf71ea28793e738$var$activeScope);\n}\nfunction $9bf71ea28793e738$var$isAncestorScope(ancestor, scope) {\n var _focusScopeTree_getTreeNode;\n let parent = (_focusScopeTree_getTreeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scope)) === null || _focusScopeTree_getTreeNode === void 0 ? void 0 : _focusScopeTree_getTreeNode.parent;\n while(parent){\n if (parent.scopeRef === ancestor) return true;\n parent = parent.parent;\n }\n return false;\n}\nfunction $9bf71ea28793e738$var$focusElement(element, scroll = false) {\n if (element != null && !scroll) try {\n (0, $cgawC$focusSafely)(element);\n } catch {\n // ignore\n }\n else if (element != null) try {\n element.focus();\n } catch {\n // ignore\n }\n}\nfunction $9bf71ea28793e738$var$getFirstInScope(scope, tabbable = true) {\n let sentinel = scope[0].previousElementSibling;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: tabbable\n }, scope);\n walker.currentNode = sentinel;\n let nextNode = walker.nextNode();\n // If the scope does not contain a tabbable element, use the first focusable element.\n if (tabbable && !nextNode) {\n scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: false\n }, scope);\n walker.currentNode = sentinel;\n nextNode = walker.nextNode();\n }\n return nextNode;\n}\nfunction $9bf71ea28793e738$var$focusFirstInScope(scope, tabbable = true) {\n $9bf71ea28793e738$var$focusElement($9bf71ea28793e738$var$getFirstInScope(scope, tabbable));\n}\nfunction $9bf71ea28793e738$var$useAutoFocus(scopeRef, autoFocus) {\n const autoFocusRef = (0, $cgawC$react).useRef(autoFocus);\n (0, $cgawC$useEffect)(()=>{\n if (autoFocusRef.current) {\n $9bf71ea28793e738$var$activeScope = scopeRef;\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined);\n if (!$9bf71ea28793e738$var$isElementInScope((0, $cgawC$getActiveElement)(ownerDocument), $9bf71ea28793e738$var$activeScope.current) && scopeRef.current) $9bf71ea28793e738$var$focusFirstInScope(scopeRef.current);\n }\n autoFocusRef.current = false;\n }, [\n scopeRef\n ]);\n}\nfunction $9bf71ea28793e738$var$useActiveScopeTracker(scopeRef, restore, contain) {\n // tracks the active scope, in case restore and contain are both false.\n // if either are true, this is tracked in useRestoreFocus or useFocusContainment.\n (0, $cgawC$useLayoutEffect)(()=>{\n if (restore || contain) return;\n let scope = scopeRef.current;\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scope ? scope[0] : undefined);\n let onFocus = (e)=>{\n let target = (0, $cgawC$getEventTarget)(e);\n if ($9bf71ea28793e738$var$isElementInScope(target, scopeRef.current)) $9bf71ea28793e738$var$activeScope = scopeRef;\n else if (!$9bf71ea28793e738$var$isElementInAnyScope(target)) $9bf71ea28793e738$var$activeScope = null;\n };\n ownerDocument.addEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n return ()=>{\n ownerDocument.removeEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n };\n }, [\n scopeRef,\n restore,\n contain\n ]);\n}\nfunction $9bf71ea28793e738$var$shouldRestoreFocus(scopeRef) {\n let scope = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);\n while(scope && scope.scopeRef !== scopeRef){\n if (scope.nodeToRestore) return false;\n scope = scope.parent;\n }\n return (scope === null || scope === void 0 ? void 0 : scope.scopeRef) === scopeRef;\n}\nfunction $9bf71ea28793e738$var$useRestoreFocus(scopeRef, restoreFocus, contain) {\n // create a ref during render instead of useLayoutEffect so the active element is saved before a child with autoFocus=true mounts.\n // eslint-disable-next-line no-restricted-globals\n const nodeToRestoreRef = (0, $cgawC$useRef)(typeof document !== 'undefined' ? (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined)) : null);\n // restoring scopes should all track if they are active regardless of contain, but contain already tracks it plus logic to contain the focus\n // restoring-non-containing scopes should only care if they become active so they can perform the restore\n (0, $cgawC$useLayoutEffect)(()=>{\n let scope = scopeRef.current;\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scope ? scope[0] : undefined);\n if (!restoreFocus || contain) return;\n let onFocus = ()=>{\n // If focusing an element in a child scope of the currently active scope, the child becomes active.\n // Moving out of the active scope to an ancestor is not allowed.\n if ((!$9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, scopeRef)) && $9bf71ea28793e738$var$isElementInScope((0, $cgawC$getActiveElement)(ownerDocument), scopeRef.current)) $9bf71ea28793e738$var$activeScope = scopeRef;\n };\n ownerDocument.addEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n return ()=>{\n ownerDocument.removeEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n scopeRef,\n contain\n ]);\n (0, $cgawC$useLayoutEffect)(()=>{\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined);\n if (!restoreFocus) return;\n // Handle the Tab key so that tabbing out of the scope goes to the next element\n // after the node that had focus when the scope mounted. This is important when\n // using portals for overlays, so that focus goes to the expected element when\n // tabbing out of the overlay.\n let onKeyDown = (e)=>{\n if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || !$9bf71ea28793e738$var$shouldContainFocus(scopeRef) || e.isComposing) return;\n let focusedElement = ownerDocument.activeElement;\n if (!$9bf71ea28793e738$var$isElementInChildScope(focusedElement, scopeRef) || !$9bf71ea28793e738$var$shouldRestoreFocus(scopeRef)) return;\n let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n if (!treeNode) return;\n let nodeToRestore = treeNode.nodeToRestore;\n // Create a DOM tree walker that matches all tabbable elements\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(ownerDocument.body, {\n tabbable: true\n });\n // Find the next tabbable element after the currently focused element\n walker.currentNode = focusedElement;\n let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n if (!nodeToRestore || !nodeToRestore.isConnected || nodeToRestore === ownerDocument.body) {\n nodeToRestore = undefined;\n treeNode.nodeToRestore = undefined;\n }\n // If there is no next element, or it is outside the current scope, move focus to the\n // next element after the node to restore to instead.\n if ((!nextElement || !$9bf71ea28793e738$var$isElementInChildScope(nextElement, scopeRef)) && nodeToRestore) {\n walker.currentNode = nodeToRestore;\n // Skip over elements within the scope, in case the scope immediately follows the node to restore.\n do nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n while ($9bf71ea28793e738$var$isElementInChildScope(nextElement, scopeRef));\n e.preventDefault();\n e.stopPropagation();\n if (nextElement) $9bf71ea28793e738$var$focusElement(nextElement, true);\n else // If there is no next element and the nodeToRestore isn't within a FocusScope (i.e. we are leaving the top level focus scope)\n // then move focus to the body.\n // Otherwise restore focus to the nodeToRestore (e.g menu within a popover -> tabbing to close the menu should move focus to menu trigger)\n if (!$9bf71ea28793e738$var$isElementInAnyScope(nodeToRestore)) focusedElement.blur();\n else $9bf71ea28793e738$var$focusElement(nodeToRestore, true);\n }\n };\n if (!contain) ownerDocument.addEventListener('keydown', onKeyDown, true);\n return ()=>{\n if (!contain) ownerDocument.removeEventListener('keydown', onKeyDown, true);\n };\n }, [\n scopeRef,\n restoreFocus,\n contain\n ]);\n // useLayoutEffect instead of useEffect so the active element is saved synchronously instead of asynchronously.\n (0, $cgawC$useLayoutEffect)(()=>{\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined);\n if (!restoreFocus) return;\n let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n if (!treeNode) return;\n var _nodeToRestoreRef_current;\n treeNode.nodeToRestore = (_nodeToRestoreRef_current = nodeToRestoreRef.current) !== null && _nodeToRestoreRef_current !== void 0 ? _nodeToRestoreRef_current : undefined;\n return ()=>{\n let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n if (!treeNode) return;\n let nodeToRestore = treeNode.nodeToRestore;\n // if we already lost focus to the body and this was the active scope, then we should attempt to restore\n let activeElement = (0, $cgawC$getActiveElement)(ownerDocument);\n if (restoreFocus && nodeToRestore && (activeElement && $9bf71ea28793e738$var$isElementInChildScope(activeElement, scopeRef) || activeElement === ownerDocument.body && $9bf71ea28793e738$var$shouldRestoreFocus(scopeRef))) {\n // freeze the focusScopeTree so it persists after the raf, otherwise during unmount nodes are removed from it\n let clonedTree = $9bf71ea28793e738$export$d06fae2ee68b101e.clone();\n requestAnimationFrame(()=>{\n // Only restore focus if we've lost focus to the body, the alternative is that focus has been purposefully moved elsewhere\n if (ownerDocument.activeElement === ownerDocument.body) {\n // look up the tree starting with our scope to find a nodeToRestore still in the DOM\n let treeNode = clonedTree.getTreeNode(scopeRef);\n while(treeNode){\n if (treeNode.nodeToRestore && treeNode.nodeToRestore.isConnected) {\n $9bf71ea28793e738$var$restoreFocusToElement(treeNode.nodeToRestore);\n return;\n }\n treeNode = treeNode.parent;\n }\n // If no nodeToRestore was found, focus the first element in the nearest\n // ancestor scope that is still in the tree.\n treeNode = clonedTree.getTreeNode(scopeRef);\n while(treeNode){\n if (treeNode.scopeRef && treeNode.scopeRef.current && $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(treeNode.scopeRef)) {\n let node = $9bf71ea28793e738$var$getFirstInScope(treeNode.scopeRef.current, true);\n $9bf71ea28793e738$var$restoreFocusToElement(node);\n return;\n }\n treeNode = treeNode.parent;\n }\n }\n });\n }\n };\n }, [\n scopeRef,\n restoreFocus\n ]);\n}\nfunction $9bf71ea28793e738$var$restoreFocusToElement(node) {\n // Dispatch a custom event that parent elements can intercept to customize focus restoration.\n // For example, virtualized collection components reuse DOM elements, so the original element\n // might still exist in the DOM but representing a different item.\n if (node.dispatchEvent(new CustomEvent($9bf71ea28793e738$var$RESTORE_FOCUS_EVENT, {\n bubbles: true,\n cancelable: true\n }))) $9bf71ea28793e738$var$focusElement(node);\n}\nfunction $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, opts, scope) {\n let filter = (opts === null || opts === void 0 ? void 0 : opts.tabbable) ? (0, $cgawC$isTabbable) : (0, $cgawC$isFocusable);\n // Ensure that root is an Element or fall back appropriately\n let rootElement = (root === null || root === void 0 ? void 0 : root.nodeType) === Node.ELEMENT_NODE ? root : null;\n // Determine the document to use\n let doc = (0, $cgawC$getOwnerDocument)(rootElement);\n // Create a TreeWalker, ensuring the root is an Element or Document\n let walker = (0, $cgawC$createShadowTreeWalker)(doc, root || doc, NodeFilter.SHOW_ELEMENT, {\n acceptNode (node) {\n var _opts_from;\n // Skip nodes inside the starting node.\n if (opts === null || opts === void 0 ? void 0 : (_opts_from = opts.from) === null || _opts_from === void 0 ? void 0 : _opts_from.contains(node)) return NodeFilter.FILTER_REJECT;\n if ((opts === null || opts === void 0 ? void 0 : opts.tabbable) && node.tagName === 'INPUT' && node.getAttribute('type') === 'radio') {\n // If the radio is in a form, we can get all the other radios by name\n if (!$9bf71ea28793e738$var$isTabbableRadio(node)) return NodeFilter.FILTER_REJECT;\n // If the radio is in the same group as the current node and none are selected, we can skip it\n if (walker.currentNode.tagName === 'INPUT' && walker.currentNode.type === 'radio' && walker.currentNode.name === node.name) return NodeFilter.FILTER_REJECT;\n }\n if (filter(node) && (!scope || $9bf71ea28793e738$var$isElementInScope(node, scope)) && (!(opts === null || opts === void 0 ? void 0 : opts.accept) || opts.accept(node))) return NodeFilter.FILTER_ACCEPT;\n return NodeFilter.FILTER_SKIP;\n }\n });\n if (opts === null || opts === void 0 ? void 0 : opts.from) walker.currentNode = opts.from;\n return walker;\n}\nfunction $9bf71ea28793e738$export$c5251b9e124bf29(ref, defaultOptions = {}) {\n return {\n focusNext (opts = {}) {\n let root = ref.current;\n if (!root) return null;\n let { from: from, tabbable: tabbable = defaultOptions.tabbable, wrap: wrap = defaultOptions.wrap, accept: accept = defaultOptions.accept } = opts;\n let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(root));\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n tabbable: tabbable,\n accept: accept\n });\n if (root.contains(node)) walker.currentNode = node;\n let nextNode = walker.nextNode();\n if (!nextNode && wrap) {\n walker.currentNode = root;\n nextNode = walker.nextNode();\n }\n if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n return nextNode;\n },\n focusPrevious (opts = defaultOptions) {\n let root = ref.current;\n if (!root) return null;\n let { from: from, tabbable: tabbable = defaultOptions.tabbable, wrap: wrap = defaultOptions.wrap, accept: accept = defaultOptions.accept } = opts;\n let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(root));\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n tabbable: tabbable,\n accept: accept\n });\n if (root.contains(node)) walker.currentNode = node;\n else {\n let next = $9bf71ea28793e738$var$last(walker);\n if (next) $9bf71ea28793e738$var$focusElement(next, true);\n return next !== null && next !== void 0 ? next : null;\n }\n let previousNode = walker.previousNode();\n if (!previousNode && wrap) {\n walker.currentNode = root;\n let lastNode = $9bf71ea28793e738$var$last(walker);\n if (!lastNode) // couldn't wrap\n return null;\n previousNode = lastNode;\n }\n if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);\n return previousNode !== null && previousNode !== void 0 ? previousNode : null;\n },\n focusFirst (opts = defaultOptions) {\n let root = ref.current;\n if (!root) return null;\n let { tabbable: tabbable = defaultOptions.tabbable, accept: accept = defaultOptions.accept } = opts;\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n tabbable: tabbable,\n accept: accept\n });\n let nextNode = walker.nextNode();\n if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n return nextNode;\n },\n focusLast (opts = defaultOptions) {\n let root = ref.current;\n if (!root) return null;\n let { tabbable: tabbable = defaultOptions.tabbable, accept: accept = defaultOptions.accept } = opts;\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n tabbable: tabbable,\n accept: accept\n });\n let next = $9bf71ea28793e738$var$last(walker);\n if (next) $9bf71ea28793e738$var$focusElement(next, true);\n return next !== null && next !== void 0 ? next : null;\n }\n };\n}\nfunction $9bf71ea28793e738$var$last(walker) {\n let next = undefined;\n let last;\n do {\n last = walker.lastChild();\n if (last) next = last;\n }while (last);\n return next;\n}\nclass $9bf71ea28793e738$var$Tree {\n get size() {\n return this.fastMap.size;\n }\n getTreeNode(data) {\n return this.fastMap.get(data);\n }\n addTreeNode(scopeRef, parent, nodeToRestore) {\n let parentNode = this.fastMap.get(parent !== null && parent !== void 0 ? parent : null);\n if (!parentNode) return;\n let node = new $9bf71ea28793e738$var$TreeNode({\n scopeRef: scopeRef\n });\n parentNode.addChild(node);\n node.parent = parentNode;\n this.fastMap.set(scopeRef, node);\n if (nodeToRestore) node.nodeToRestore = nodeToRestore;\n }\n addNode(node) {\n this.fastMap.set(node.scopeRef, node);\n }\n removeTreeNode(scopeRef) {\n // never remove the root\n if (scopeRef === null) return;\n let node = this.fastMap.get(scopeRef);\n if (!node) return;\n let parentNode = node.parent;\n // when we remove a scope, check if any sibling scopes are trying to restore focus to something inside the scope we're removing\n // if we are, then replace the siblings restore with the restore from the scope we're removing\n for (let current of this.traverse())if (current !== node && node.nodeToRestore && current.nodeToRestore && node.scopeRef && node.scopeRef.current && $9bf71ea28793e738$var$isElementInScope(current.nodeToRestore, node.scopeRef.current)) current.nodeToRestore = node.nodeToRestore;\n let children = node.children;\n if (parentNode) {\n parentNode.removeChild(node);\n if (children.size > 0) children.forEach((child)=>parentNode && parentNode.addChild(child));\n }\n this.fastMap.delete(node.scopeRef);\n }\n // Pre Order Depth First\n *traverse(node = this.root) {\n if (node.scopeRef != null) yield node;\n if (node.children.size > 0) for (let child of node.children)yield* this.traverse(child);\n }\n clone() {\n var _node_parent;\n let newTree = new $9bf71ea28793e738$var$Tree();\n var _node_parent_scopeRef;\n for (let node of this.traverse())newTree.addTreeNode(node.scopeRef, (_node_parent_scopeRef = (_node_parent = node.parent) === null || _node_parent === void 0 ? void 0 : _node_parent.scopeRef) !== null && _node_parent_scopeRef !== void 0 ? _node_parent_scopeRef : null, node.nodeToRestore);\n return newTree;\n }\n constructor(){\n this.fastMap = new Map();\n this.root = new $9bf71ea28793e738$var$TreeNode({\n scopeRef: null\n });\n this.fastMap.set(null, this.root);\n }\n}\nclass $9bf71ea28793e738$var$TreeNode {\n addChild(node) {\n this.children.add(node);\n node.parent = this;\n }\n removeChild(node) {\n this.children.delete(node);\n node.parent = undefined;\n }\n constructor(props){\n this.children = new Set();\n this.contain = false;\n this.scopeRef = props.scopeRef;\n }\n}\nlet $9bf71ea28793e738$export$d06fae2ee68b101e = new $9bf71ea28793e738$var$Tree();\n\n\nexport {$9bf71ea28793e738$export$20e40289641fbbb6 as FocusScope, $9bf71ea28793e738$export$d06fae2ee68b101e as focusScopeTree, $9bf71ea28793e738$export$10c5169755ce7bd7 as useFocusManager, $9bf71ea28793e738$export$2d6ec8fc375ceafa as getFocusableTreeWalker, $9bf71ea28793e738$export$1258395f99bf9cbf as isElementInChildOfActiveScope, $9bf71ea28793e738$export$c5251b9e124bf29 as createFocusManager};\n//# sourceMappingURL=FocusScope.module.js.map\n","import { createPortal } from \"react-dom\";\n\ntype PortalProps = {\n children: React.ReactNode;\n node?: HTMLElement | null;\n};\n\nconst Portal = ({ children, node }: PortalProps) => {\n return createPortal(children, node ?? document.body);\n};\n\nexport { Portal };\n","import { ReactNode, RefObject } from \"react\";\r\nimport { useClickAwayWithRef, useKeyListener, usePopover } from \"../hooks\";\r\nimport { AnimatePresence, motion } from \"motion/react\";\r\nimport { FocusScope } from \"@react-aria/focus\";\r\nimport { cn } from \"../utils\";\r\nimport { Portal } from \"./Portal\";\r\n\r\ninterface PopoverCardProps {\r\n children: ReactNode | ((close: VoidFunction) => ReactNode);\r\n customTrigger?: ({\r\n triggerRef,\r\n triggerProps,\r\n toggle,\r\n open,\r\n close,\r\n }: {\r\n triggerRef: RefObject<HTMLButtonElement | null>;\r\n triggerProps: any;\r\n toggle: VoidFunction;\r\n open: boolean;\r\n close: VoidFunction;\r\n }) => React.ReactNode;\r\n triggerContent?: React.ReactNode;\r\n align?: \"start\" | \"center\" | \"end\";\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n offset?: number;\r\n className?: string;\r\n triggerClassName?: string;\r\n popoverClassName?: string;\r\n closeOnEscape?: boolean;\r\n closeOnClickAway?: boolean;\r\n /**\r\n * To point to scroller for dismiss on scroll\r\n */\r\n scrollerId?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n maxHeight?: string | number;\r\n minWidth?: string | number;\r\n maxWidth?: string | number;\r\n}\r\n\r\nconst PopoverCard: React.FC<PopoverCardProps> = ({\r\n children,\r\n customTrigger,\r\n triggerContent,\r\n align = \"start\",\r\n side = \"bottom\",\r\n offset = 8,\r\n className,\r\n triggerClassName,\r\n closeOnEscape = true,\r\n closeOnClickAway = true,\r\n scrollerId,\r\n onOpen,\r\n onClose,\r\n maxHeight = \"400px\",\r\n minWidth = \"200px\",\r\n maxWidth = \"500px\",\r\n}) => {\r\n const {\r\n triggerRef,\r\n triggerProps,\r\n popoverRef,\r\n getPopoverPosition,\r\n open,\r\n toggle,\r\n close,\r\n } = usePopover<HTMLButtonElement, HTMLDivElement>({\r\n align,\r\n side,\r\n offset,\r\n scrollerId,\r\n onOpen: () => {\r\n onOpen?.();\r\n },\r\n onClose: () => {\r\n onClose?.();\r\n },\r\n });\r\n\r\n // Handle escape key\r\n useKeyListener(\r\n {\r\n Escape: (e) => {\r\n if (closeOnEscape) {\r\n e.preventDefault();\r\n close();\r\n triggerRef.current?.focus();\r\n }\r\n },\r\n },\r\n { enabled: open }\r\n );\r\n\r\n // Handle click away\r\n useClickAwayWithRef(popoverRef, (event) => {\r\n if (!closeOnClickAway || !triggerRef.current || !open || !event.target) {\r\n return;\r\n }\r\n\r\n if (triggerRef.current.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n close();\r\n });\r\n\r\n const position = getPopoverPosition();\r\n\r\n return (\r\n <>\r\n {customTrigger ? (\r\n customTrigger({\r\n triggerRef,\r\n triggerProps,\r\n toggle,\r\n open,\r\n close,\r\n })\r\n ) : (\r\n <button\r\n ref={triggerRef}\r\n {...triggerProps}\r\n onClick={toggle}\r\n className={cn(\r\n \"outline-none p-2 rounded-md transition-colors\",\r\n \"hover:bg-base-3 focus-visible:bg-base-3 focus-visible:ring-2 focus-visible:ring-brand\",\r\n triggerClassName\r\n )}\r\n >\r\n {triggerContent}\r\n </button>\r\n )}\r\n\r\n <AnimatePresence>\r\n {open && (\r\n <Portal>\r\n <FocusScope contain restoreFocus autoFocus>\r\n <motion.div\r\n initial={{\r\n opacity: 0,\r\n scale: 0.95,\r\n y: side === \"bottom\" ? -10 : 10,\r\n }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{\r\n opacity: 0,\r\n scale: 0.95,\r\n y: side === \"bottom\" ? -10 : 10,\r\n }}\r\n transition={{\r\n type: \"spring\",\r\n duration: 0.2,\r\n bounce: 0.1,\r\n }}\r\n ref={popoverRef}\r\n style={{\r\n position: \"fixed\",\r\n left: position.x,\r\n top: position.top,\r\n bottom: position.bottom,\r\n maxHeight:\r\n typeof maxHeight === \"number\"\r\n ? `${maxHeight}px`\r\n : maxHeight,\r\n minWidth:\r\n typeof minWidth === \"number\" ? `${minWidth}px` : minWidth,\r\n maxWidth:\r\n typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth,\r\n zIndex: 1000,\r\n }}\r\n className={cn(\r\n \"bg-base-1 dark-theme:bg-base-2\",\r\n \"border border-base-4 rounded-6\",\r\n \"customscrollbar overflow-auto\",\r\n className\r\n )}\r\n >\r\n {typeof children === \"function\" ? children(toggle) : children}\r\n </motion.div>\r\n </FocusScope>\r\n </Portal>\r\n )}\r\n </AnimatePresence>\r\n </>\r\n );\r\n};\r\n\r\n// Optional: Create some preset card components for common use cases\r\ninterface CardHeaderProps {\r\n title: string;\r\n subtitle?: string;\r\n onClose?: () => void;\r\n className?: string;\r\n}\r\n\r\nconst PopoverCardHeader: React.FC<CardHeaderProps> = ({\r\n title,\r\n subtitle,\r\n onClose,\r\n className,\r\n}) => (\r\n <div className={cn(\"p-4 border-b border-base-4\", className)}>\r\n <div className=\"flex items-start justify-between\">\r\n <div>\r\n <h3 className=\"font-semibold text-base-12\">{title}</h3>\r\n {subtitle && <p className=\"text-sm text-base-11 mt-1\">{subtitle}</p>}\r\n </div>\r\n {onClose && (\r\n <button\r\n onClick={onClose}\r\n className=\"ml-4 text-base-11 hover:text-base-12 transition-colors\"\r\n >\r\n ×\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n);\r\n\r\ninterface CardContentProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nconst PopoverCardContent: React.FC<CardContentProps> = ({\r\n children,\r\n className,\r\n}) => <div className={cn(\"p-4\", className)}>{children}</div>;\r\n\r\ninterface CardFooterProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nconst PopoverCardFooter: React.FC<CardFooterProps> = ({\r\n children,\r\n className,\r\n}) => (\r\n <div className={cn(\"p-4 border-t border-base-4\", className)}>{children}</div>\r\n);\r\n\r\nexport {\r\n PopoverCard,\r\n PopoverCardHeader,\r\n PopoverCardContent,\r\n PopoverCardFooter,\r\n};\r\nexport type { PopoverCardProps };\r\n","import React, { useState, useMemo, useRef, ReactNode } from \"react\";\r\nimport { CalendarDays, ChevronLeft, ChevronRight, Clock } from \"lucide-react\";\r\nimport {\r\n format,\r\n startOfMonth,\r\n endOfMonth,\r\n eachDayOfInterval,\r\n isSameMonth,\r\n isSameDay,\r\n addMonths,\r\n subMonths,\r\n Locale,\r\n} from \"date-fns\";\r\nimport { enUS, es } from \"date-fns/locale\";\r\nimport { PopoverCard } from \"./PopoverCard\";\r\nimport { cn } from \"../utils\";\r\nimport { Button } from \"./Button\";\r\n\r\n// Date utility functions\r\n\r\n// const format = (date: Date, formatStr: string): string => {\r\n// const options: Intl.DateTimeFormatOptions = {};\r\n\r\n// if (formatStr === \"MMMM yyyy\") {\r\n// options.month = \"long\";\r\n// options.year = \"numeric\";\r\n// } else if (formatStr === \"EEE\") {\r\n// options.weekday = \"short\";\r\n// } else if (formatStr === \"d\") {\r\n// return date.getDate().toString();\r\n// }\r\n\r\n// return new Intl.DateTimeFormat(\"en-US\", options).format(date);\r\n// };\r\n\r\n// const startOfMonth = (date: Date): Date => {\r\n// return new Date(date.getFullYear(), date.getMonth(), 1);\r\n// };\r\n\r\n// const endOfMonth = (date: Date): Date => {\r\n// return new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n// };\r\n\r\n// const eachDayOfInterval = (interval: { start: Date; end: Date }): Date[] => {\r\n// const days: Date[] = [];\r\n// const current = new Date(interval.start);\r\n\r\n// while (current <= interval.end) {\r\n// days.push(new Date(current));\r\n// current.setDate(current.getDate() + 1);\r\n// }\r\n\r\n// return days;\r\n// };\r\n\r\n// const isSameMonth = (date1: Date, date2: Date): boolean => {\r\n// return (\r\n// date1.getMonth() === date2.getMonth() &&\r\n// date1.getFullYear() === date2.getFullYear()\r\n// );\r\n// };\r\n\r\n// const isSameDay = (date1: Date, date2: Date): boolean => {\r\n// return date1.toDateString() === date2.toDateString();\r\n// };\r\n\r\n// const addMonths = (date: Date, amount: number): Date => {\r\n// const result = new Date(date);\r\n// result.setMonth(result.getMonth() + amount);\r\n// return result;\r\n// };\r\n\r\n// const subMonths = (date: Date, amount: number): Date => {\r\n// return addMonths(date, -amount);\r\n// };\r\n\r\nconst getWeekDayNames = (\r\n locale: Locale,\r\n weekStartsOnMonday: boolean\r\n): string[] => {\r\n const baseDate = new Date(2023, 0, 1); // Start with a Sunday\r\n const weekdays: string[] = [];\r\n\r\n for (let i = 0; i < 7; i++) {\r\n const date = new Date(baseDate);\r\n date.setDate(baseDate.getDate() + i);\r\n weekdays.push(\r\n format(date, \"EEE\", {\r\n locale: locale ?? enUS,\r\n })\r\n );\r\n }\r\n\r\n // Reorder if week starts on Monday\r\n return weekStartsOnMonday ? [...weekdays.slice(1), weekdays[0]] : weekdays;\r\n};\r\n\r\n// Types\r\ninterface CalendarProps {\r\n selectedDate?: Date | null;\r\n onDateSelect?: (date: Date) => void;\r\n disabledDates?: string[]; // ISO string dates to disable\r\n disabledDaysOfWeek?: number[]; // 0 = Sunday, 1 = Monday, ..., 6 = Saturday\r\n minDate?: Date;\r\n maxDate?: Date;\r\n locale?: Locale; // e.g., 'en-US', 'es-ES', 'fr-FR'\r\n weekStartsOnMonday?: boolean; // default false (Sunday first)\r\n className?: string;\r\n}\r\n\r\nconst Calendar: React.FC<CalendarProps> = ({\r\n selectedDate,\r\n onDateSelect,\r\n disabledDates,\r\n disabledDaysOfWeek,\r\n minDate,\r\n maxDate,\r\n locale,\r\n weekStartsOnMonday = true,\r\n className = \"\",\r\n}) => {\r\n const [currentMonth, setCurrentMonth] = useState(selectedDate || new Date());\r\n const [focusedDate, setFocusedDate] = useState<Date | null>(\r\n selectedDate || new Date()\r\n );\r\n const calendarRef = useRef<HTMLDivElement>(null);\r\n\r\n // Convert ISO strings to Date objects for comparison\r\n const disabledDateSet = useMemo(() => {\r\n if (!disabledDates) return new Set();\r\n return new Set(\r\n disabledDates.map((dateStr) => {\r\n const date = new Date(dateStr);\r\n return date.toDateString();\r\n })\r\n );\r\n }, [disabledDates]);\r\n\r\n const disabledDaysSet = useMemo(() => {\r\n return new Set(disabledDaysOfWeek || []);\r\n }, [disabledDaysOfWeek]);\r\n\r\n // Generate calendar days\r\n const calendarDays = useMemo(() => {\r\n const monthStart = startOfMonth(currentMonth);\r\n const monthEnd = endOfMonth(currentMonth);\r\n\r\n const startDate = new Date(monthStart);\r\n const endDate = new Date(monthEnd);\r\n\r\n if (weekStartsOnMonday) {\r\n // Adjust for Monday start (getDay() returns 0 for Sunday, 1 for Monday)\r\n const dayOfWeek = monthStart.getDay();\r\n const daysFromMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;\r\n startDate.setDate(monthStart.getDate() - daysFromMonday);\r\n\r\n const endDayOfWeek = monthEnd.getDay();\r\n const daysToSunday = endDayOfWeek === 0 ? 0 : 7 - endDayOfWeek;\r\n endDate.setDate(monthEnd.getDate() + daysToSunday);\r\n } else {\r\n // Original Sunday start logic\r\n startDate.setDate(monthStart.getDate() - monthStart.getDay());\r\n endDate.setDate(monthEnd.getDate() + (6 - monthEnd.getDay()));\r\n }\r\n\r\n return eachDayOfInterval({ start: startDate, end: endDate });\r\n }, [currentMonth, weekStartsOnMonday]);\r\n\r\n const weekDays = useMemo(\r\n () => getWeekDayNames(locale ?? es, weekStartsOnMonday),\r\n [locale, weekStartsOnMonday]\r\n );\r\n\r\n const isDateEnabled = (date: Date): boolean => {\r\n const dateStr = date.toDateString();\r\n const dayOfWeek = date.getDay(); // 0 = Sunday, 1 = Monday, ..., 6 = Saturday\r\n\r\n // Check if date is in disabled list\r\n if (disabledDateSet.has(dateStr)) return false;\r\n\r\n // Check if day of week is disabled\r\n if (disabledDaysSet.has(dayOfWeek)) return false;\r\n\r\n // Check min/max dates\r\n if (minDate && date < minDate) return false;\r\n if (maxDate && date > maxDate) return false;\r\n\r\n // All dates are enabled by default unless specifically disabled\r\n return true;\r\n };\r\n\r\n const handleDateClick = (date: Date) => {\r\n if (isDateEnabled(date) && onDateSelect) {\r\n onDateSelect(date);\r\n }\r\n setFocusedDate(date);\r\n };\r\n\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n if (!focusedDate) return;\r\n\r\n let newFocusedDate = new Date(focusedDate);\r\n let shouldPreventDefault = true;\r\n let dayOfWeek: number;\r\n let currentDay: number;\r\n\r\n switch (event.key) {\r\n case \"ArrowUp\":\r\n newFocusedDate.setDate(newFocusedDate.getDate() - 7);\r\n break;\r\n case \"ArrowDown\":\r\n newFocusedDate.setDate(newFocusedDate.getDate() + 7);\r\n break;\r\n case \"ArrowLeft\":\r\n newFocusedDate.setDate(newFocusedDate.getDate() - 1);\r\n break;\r\n case \"ArrowRight\":\r\n newFocusedDate.setDate(newFocusedDate.getDate() + 1);\r\n break;\r\n case \"Home\":\r\n // Go to first day of the week (Sunday)\r\n dayOfWeek = newFocusedDate.getDay();\r\n newFocusedDate.setDate(newFocusedDate.getDate() - dayOfWeek);\r\n break;\r\n case \"End\":\r\n // Go to last day of the week (Saturday)\r\n currentDay = newFocusedDate.getDay();\r\n newFocusedDate.setDate(newFocusedDate.getDate() + (6 - currentDay));\r\n break;\r\n case \"PageUp\":\r\n // Previous month\r\n newFocusedDate = event.shiftKey\r\n ? subMonths(newFocusedDate, 12) // Shift+PageUp = previous year\r\n : subMonths(newFocusedDate, 1);\r\n break;\r\n case \"PageDown\":\r\n // Next month\r\n newFocusedDate = event.shiftKey\r\n ? addMonths(newFocusedDate, 12) // Shift+PageDown = next year\r\n : addMonths(newFocusedDate, 1);\r\n break;\r\n case \"Enter\":\r\n case \" \":\r\n if (isDateEnabled(focusedDate) && onDateSelect) {\r\n onDateSelect(focusedDate);\r\n }\r\n break;\r\n default:\r\n shouldPreventDefault = false;\r\n }\r\n\r\n if (shouldPreventDefault) {\r\n event.preventDefault();\r\n\r\n // Update focused date if it changed\r\n if (newFocusedDate.getTime() !== focusedDate.getTime()) {\r\n setFocusedDate(newFocusedDate);\r\n\r\n // Change month if necessary\r\n if (!isSameMonth(newFocusedDate, currentMonth)) {\r\n setCurrentMonth(newFocusedDate);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const navigateMonth = (direction: \"prev\" | \"next\") => {\r\n setCurrentMonth((prev) =>\r\n direction === \"prev\" ? subMonths(prev, 1) : addMonths(prev, 1)\r\n );\r\n };\r\n\r\n return (\r\n <div\r\n ref={calendarRef}\r\n className={cn(\r\n \"dark-theme:bg-base-3 border border-base-5 dark-theme:border-base-4 rounded-6 px-4 pt-3 pb-4 w-full lg:w-80\",\r\n className\r\n )}\r\n onKeyDown={handleKeyDown}\r\n tabIndex={0}\r\n role=\"grid\"\r\n aria-label=\"Calendar\"\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between\">\r\n <Button\r\n onClick={() => navigateMonth(\"prev\")}\r\n size=\"iconSm\"\r\n // className=\"p-1 hover:bg-gray-700 rounded transition-colors\"\r\n aria-label=\"Previous month\"\r\n >\r\n <ChevronLeft size={16} />\r\n </Button>\r\n\r\n <h2 className=\"text-sm font-medium\">\r\n {format(currentMonth, \"MMMM yyyy\")}\r\n </h2>\r\n\r\n <Button\r\n onClick={() => navigateMonth(\"next\")}\r\n size=\"iconSm\"\r\n // className=\"p-1 hover:bg-gray-700 rounded transition-colors\"\r\n aria-label=\"Next month\"\r\n >\r\n <ChevronRight size={16} />\r\n </Button>\r\n </div>\r\n\r\n {/* Week day headers */}\r\n <div className=\"grid grid-cols-7 gap-1 mt-4\" role=\"row\">\r\n {weekDays.map((day) => (\r\n <div\r\n key={day}\r\n className=\"text-xs flex items-center w-8 justify-center text-base-11\"\r\n // className=\"h-8 flex items-center justify-center text-sm text-gray-400 font-medium\"\r\n role=\"columnheader\"\r\n >\r\n {day}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Calendar grid */}\r\n <div className=\"grid grid-cols-7 gap-1 mt-4\" role=\"grid\">\r\n {calendarDays.map((date, index) => {\r\n const isCurrentMonth = isSameMonth(date, currentMonth);\r\n const isSelected = selectedDate\r\n ? isSameDay(date, selectedDate)\r\n : false;\r\n const isFocused = focusedDate && isSameDay(date, focusedDate);\r\n const isEnabled = isDateEnabled(date);\r\n const isToday = isSameDay(date, new Date());\r\n\r\n return (\r\n <button\r\n key={index}\r\n onClick={() => handleDateClick(date)}\r\n disabled={!isEnabled}\r\n tabIndex={isFocused ? 0 : -1}\r\n role=\"gridcell\"\r\n aria-label={`${date.toLocaleDateString(\"en-US\", {\r\n weekday: \"long\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n year: \"numeric\",\r\n })}${isSelected ? \", selected\" : \"\"}${\r\n !isEnabled ? \", disabled\" : \"\"\r\n }`}\r\n aria-selected={isSelected}\r\n aria-disabled={!isEnabled}\r\n className={cn(\r\n \"h-8 w-8 flex items-center outline-none justify-center rounded-6 hover:bg-base-4 text-sm relative\",\r\n !isCurrentMonth\r\n ? \"text-base-9\"\r\n : isSelected\r\n ? \"bg-brand text-brand-text hover:bg-brand\"\r\n : isToday\r\n ? \"text-base-12 ring-1 ring-base-8\"\r\n : \"text-base-12\",\r\n isFocused && \"ring-1 ring-base-6\",\r\n (!isEnabled || !isCurrentMonth) &&\r\n \"pointer-events-none text-base-9\"\r\n )}\r\n >\r\n {format(date, \"d\")}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// Example usage component\r\nconst DatePickerDemo: React.FC = () => {\r\n const [selectedDate, setSelectedDate] = useState<Date | null>(\r\n new Date(2025, 8, 21)\r\n ); // September 21, 2025\r\n\r\n // Example: Disable specific dates (ISO strings from PostgreSQL)\r\n const disabledDates = [\r\n \"2025-09-13T00:00:00Z\", // Friday the 13th\r\n \"2025-09-15T00:00:00Z\", // Specific disabled date\r\n ];\r\n\r\n // Example: Disable all Saturdays and Sundays (weekends)\r\n const disabledDaysOfWeek = [0, 6]; // 0 = Sunday, 6 = Saturday\r\n\r\n return (\r\n <div className=\"p-8 bg-gray-100 min-h-screen\">\r\n <div className=\"max-w-md mx-auto\">\r\n <h1 className=\"text-2xl font-bold mb-6 text-gray-800\">\r\n Calendar Date Picker Demo\r\n </h1>\r\n\r\n <div className=\"mb-6\">\r\n <Calendar\r\n selectedDate={selectedDate}\r\n onDateSelect={setSelectedDate}\r\n disabledDates={disabledDates}\r\n disabledDaysOfWeek={disabledDaysOfWeek}\r\n minDate={new Date(2025, 8, 1)} // September 1, 2025\r\n maxDate={new Date(2025, 11, 31)} // December 31, 2025\r\n />\r\n </div>\r\n\r\n {selectedDate && (\r\n <div className=\"bg-white p-4 rounded-lg shadow\">\r\n <h3 className=\"font-semibold text-gray-800 mb-2\">Selected Date:</h3>\r\n <p className=\"text-gray-600\">\r\n {selectedDate.toLocaleDateString(\"en-US\", {\r\n weekday: \"long\",\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n })}\r\n </p>\r\n <p className=\"text-sm text-gray-500 mt-1\">\r\n ISO: {selectedDate.toISOString()}\r\n </p>\r\n </div>\r\n )}\r\n\r\n <div className=\"mt-6 bg-white p-4 rounded-lg shadow\">\r\n <h3 className=\"font-semibold text-gray-800 mb-2\">\r\n Keyboard Navigation:\r\n </h3>\r\n <div className=\"text-sm text-gray-600 space-y-1\">\r\n <p>\r\n <strong>Arrow Keys:</strong> Navigate between dates\r\n </p>\r\n <p>\r\n <strong>Enter/Space:</strong> Select focused date\r\n </p>\r\n <p>\r\n <strong>Home/End:</strong> Go to start/end of week\r\n </p>\r\n <p>\r\n <strong>Page Up/Down:</strong> Previous/next month\r\n </p>\r\n <p>\r\n <strong>Shift + Page Up/Down:</strong> Previous/next year\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-4 bg-white p-4 rounded-lg shadow\">\r\n <h3 className=\"font-semibold text-gray-800 mb-2\">Features:</h3>\r\n <ul className=\"text-sm text-gray-600 space-y-1\">\r\n <li>✅ All dates enabled by default</li>\r\n <li>✅ Disable specific dates (PostgreSQL ISO strings)</li>\r\n <li>✅ Disable entire days of week (e.g., weekends)</li>\r\n <li>✅ Min/max date constraints</li>\r\n <li>✅ Full keyboard navigation with arrow keys</li>\r\n <li>✅ Focus management and accessibility</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nfunction DatePickerPopover({\r\n customTrigger,\r\n scrollerId,\r\n}: {\r\n customTrigger?: (\r\n toggle: VoidFunction,\r\n triggerRef: React.RefObject<HTMLButtonElement | null>\r\n ) => ReactNode;\r\n /**\r\n * To point scroller id for dismiss on scroll\r\n */\r\n scrollerId?: string;\r\n}) {\r\n const [selectedDate, setSelectedDate] = useState<Date>(new Date());\r\n return (\r\n <PopoverCard\r\n className=\"p-0\"\r\n scrollerId={scrollerId}\r\n customTrigger={({ toggle, triggerRef }) => {\r\n if (customTrigger) {\r\n return customTrigger(toggle, triggerRef);\r\n }\r\n return (\r\n <Button\r\n ref={triggerRef}\r\n onClick={toggle}\r\n color=\"solid\"\r\n className=\"px-3 mt-1 w-full justify-start\"\r\n >\r\n {format(new Date(), \"PP\", { locale: es })}\r\n <span className=\"grow\" />\r\n <CalendarDays size={18} className=\"text-base-11\" />\r\n </Button>\r\n );\r\n }}\r\n >\r\n {(close) => {\r\n return (\r\n <Calendar\r\n selectedDate={selectedDate}\r\n onDateSelect={(date) => {\r\n setSelectedDate(date);\r\n close();\r\n }}\r\n className=\"border-none\"\r\n disabledDaysOfWeek={[0, 6]}\r\n />\r\n );\r\n }}\r\n </PopoverCard>\r\n );\r\n}\r\n\r\nconst TimePicker = () => {\r\n return (\r\n <div>\r\n <p className=\"text-xs font-medium ml-0.5\">Start Time</p>\r\n <Button color=\"solid\" className=\"px-3 mt-1\">\r\n {format(new Date(), \"p\", { locale: es })}\r\n <span className=\"grow\" />\r\n <Clock size={18} className=\"text-base-11\" />\r\n </Button>\r\n </div>\r\n );\r\n};\r\n\r\nconst DateTimePicker = () => {\r\n return (\r\n <div className=\"flex items-center gap-x-4\">\r\n <div className=\"grow\">\r\n <p className=\"text-xs font-medium ml-0.5\">Start Date</p>\r\n <Button color=\"solid\" className=\"px-3 mt-1 w-full justify-start\">\r\n {format(new Date(), \"PP\", { locale: es })}\r\n <span className=\"grow\" />\r\n <CalendarDays size={18} className=\"text-base-11\" />\r\n </Button>\r\n </div>\r\n <div>\r\n <p className=\"text-xs font-medium ml-0.5\">Start Time</p>\r\n <Button color=\"solid\" className=\"px-3 mt-1\">\r\n {format(new Date(), \"p\", { locale: es })}\r\n <span className=\"grow\" />\r\n <Clock size={18} className=\"text-base-11\" />\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport {\r\n Calendar,\r\n DatePickerPopover,\r\n TimePicker,\r\n DateTimePicker,\r\n DatePickerDemo,\r\n};\r\n","import React, { forwardRef } from \"react\";\r\nimport { Check, Minus } from \"lucide-react\";\r\nimport { cn } from \"../utils\";\r\n\r\ninterface CheckboxProps {\r\n checked?: boolean | \"indeterminate\";\r\n onCheckedChange?: (checked: boolean | \"indeterminate\") => void;\r\n disabled?: boolean;\r\n required?: boolean;\r\n name?: string;\r\n value?: string;\r\n id?: string;\r\n className?: string | ((checked: boolean | \"indeterminate\") => string);\r\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nconst colorClasses = {\r\n unchecked: \"bg-base-3 lg:hover:bg-base-4\",\r\n checked: \"bg-brand lg:hover:bg-brand-hover text-brand-text\",\r\n uncheckedDisabled: \"bg-base-3 border-base-4\",\r\n checkedDisabled: \"bg-base-3 border-base-4 text-base-10\",\r\n};\r\n\r\nconst Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\r\n (\r\n {\r\n checked = false,\r\n onCheckedChange,\r\n disabled = false,\r\n required = false,\r\n name,\r\n value,\r\n id,\r\n className = \"\",\r\n size = \"sm\",\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const handleClick = () => {\r\n if (disabled) return;\r\n\r\n if (checked === \"indeterminate\") {\r\n onCheckedChange?.(true);\r\n } else {\r\n onCheckedChange?.(!checked);\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === \" \" || e.key === \"Enter\") {\r\n e.preventDefault();\r\n handleClick();\r\n }\r\n };\r\n\r\n const sizeClasses = {\r\n xs: \"h-3.5 w-3.5\",\r\n sm: \"h-4 w-4\",\r\n md: \"h-5 w-5\",\r\n lg: \"h-6 w-6\",\r\n };\r\n\r\n const iconSizes = {\r\n xs: 24,\r\n sm: 12,\r\n md: 14,\r\n lg: 16,\r\n };\r\n\r\n return (\r\n <>\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n role=\"checkbox\"\r\n aria-checked={checked === \"indeterminate\" ? \"mixed\" : checked}\r\n aria-required={required}\r\n disabled={disabled}\r\n onClick={handleClick}\r\n onKeyDown={handleKeyDown}\r\n className={cn(\r\n // Base styles\r\n \"inline-flex items-center justify-center rounded-2 border border-base-4 transition-all duration-200 ease-in-out\",\r\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-base-5\",\r\n // Size\r\n sizeClasses[size],\r\n // Disabled state\r\n disabled && \"cursor-not-allowed opacity-75\",\r\n !disabled && \"cursor-pointer\",\r\n // Checked states\r\n checked\r\n ? disabled\r\n ? colorClasses.checkedDisabled\r\n : colorClasses.checked\r\n : disabled\r\n ? colorClasses.uncheckedDisabled\r\n : colorClasses.unchecked,\r\n // Custom classes\r\n typeof className === \"function\" ? className(checked) : className\r\n )}\r\n {...props}\r\n >\r\n {checked === true && (\r\n <Check\r\n size={iconSizes[size]}\r\n className=\"stroke-current\"\r\n // strokeWidth={2.5}\r\n />\r\n )}\r\n {checked === \"indeterminate\" && (\r\n <Minus\r\n size={iconSizes[size]}\r\n className=\"stroke-current\"\r\n // strokeWidth={2.5}\r\n />\r\n )}\r\n </button>\r\n\r\n {/* Hidden input for form submission */}\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n value={value}\r\n checked={checked === true}\r\n onChange={() => {}} // Controlled by button\r\n disabled={disabled}\r\n required={required}\r\n id={id}\r\n className=\"sr-only\"\r\n tabIndex={-1}\r\n />\r\n </>\r\n );\r\n }\r\n);\r\n\r\nCheckbox.displayName = \"Checkbox\";\r\n\r\nexport { Checkbox };\r\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n var _a;\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod ?? {},\n enumerable: false,\n });\n (_a = inst._zod).traits ?? (_a.traits = new Set());\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n for (const k in _.prototype) {\n if (!(k in inst))\n Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n }\n inst._zod.constr = _;\n inst._zod.def = def;\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport function defineLazy(object, key, getter) {\n const set = false;\n Object.defineProperty(object, key, {\n get() {\n if (!set) {\n const value = getter();\n object[key] = value;\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport const captureStackTrace = Error.captureStackTrace\n ? Error.captureStackTrace\n : (..._args) => { };\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const newShape = {};\n const currDef = schema._zod.def; //.shape;\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // pick key\n newShape[key] = currDef.shape[key];\n }\n return clone(schema, {\n ...schema._zod.def,\n shape: newShape,\n checks: [],\n });\n}\nexport function omit(schema, mask) {\n const newShape = { ...schema._zod.def.shape };\n const currDef = schema._zod.def; //.shape;\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n return clone(schema, {\n ...schema._zod.def,\n shape: newShape,\n checks: [],\n });\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const def = {\n ...schema._zod.def,\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n checks: [], // delete existing checks\n };\n return clone(schema, def);\n}\nexport function merge(a, b) {\n return clone(a, {\n ...a._zod.def,\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n catchall: b._zod.def.catchall,\n checks: [], // delete existing checks\n });\n}\nexport function partial(Class, schema, mask) {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n return clone(schema, {\n ...schema._zod.def,\n shape,\n checks: [],\n });\n}\nexport function required(Class, schema, mask) {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n return clone(schema, {\n ...schema._zod.def,\n shape,\n // optional: [],\n checks: [],\n });\n}\nexport function aborted(x, startIndex = 0) {\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true)\n return true;\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n Object.defineProperty(inst, \"message\", {\n get() {\n return JSON.stringify(def, util.jsonStringifyReplacer, 2);\n },\n enumerable: true,\n // configurable: false,\n });\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, _mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, _mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(path) {\n const segs = [];\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => a.path.length - b.path.length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";import*as n from\"zod/v4/core\";function t(r,e){try{var o=r()}catch(r){return e(r)}return o&&o.then?o.then(void 0,e):o}function s(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n}function i(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"invalid_union\"===t.code&&t.errors.length>0){var u=t.errors[0][0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"invalid_union\"===t.code&&t.errors.forEach(function(e){return e.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n}function a(o,a,u){if(void 0===u&&(u={}),function(r){return\"_def\"in r&&\"object\"==typeof r._def&&\"typeName\"in r._def}(o))return function(n,i,c){try{return Promise.resolve(t(function(){return Promise.resolve(o[\"sync\"===u.mode?\"parse\":\"parseAsync\"](n,a)).then(function(e){return c.shouldUseNativeValidation&&r({},c),{errors:{},values:u.raw?Object.assign({},n):e}})},function(r){if(function(r){return Array.isArray(null==r?void 0:r.issues)}(r))return{values:{},errors:e(s(r.errors,!c.shouldUseNativeValidation&&\"all\"===c.criteriaMode),c)};throw r}))}catch(r){return Promise.reject(r)}};if(function(r){return\"_zod\"in r&&\"object\"==typeof r._zod}(o))return function(s,c,f){try{return Promise.resolve(t(function(){return Promise.resolve((\"sync\"===u.mode?n.parse:n.parseAsync)(o,s,a)).then(function(e){return f.shouldUseNativeValidation&&r({},f),{errors:{},values:u.raw?Object.assign({},s):e}})},function(r){if(function(r){return r instanceof n.$ZodError}(r))return{values:{},errors:e(i(r.issues,!f.shouldUseNativeValidation&&\"all\"===f.criteriaMode),f)};throw r}))}catch(r){return Promise.reject(r)}};throw new Error(\"Invalid input: not a Zod schema\")}export{a as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n","import React from \"react\";\r\nimport {\r\n FieldValues,\r\n FormProvider,\r\n useForm,\r\n UseFormReturn,\r\n type SubmitHandler,\r\n type FieldErrors,\r\n} from \"react-hook-form\";\r\nimport { cn } from \"../utils\";\r\nimport { z, ZodTypeAny } from \"zod\";\r\nimport { zodResolver } from \"@hookform/resolvers/zod\";\r\n\r\n// Custom type helper\r\n//OLD V\r\n// type SubmitHandler<T extends FieldValues> = (\r\n// data: T,\r\n// form: UseFormReturn<T>\r\n// // dirtyFields: Partial<Readonly<DeepMap<DeepPartial<z.TypeOf<T>>, boolean>>>\r\n// ) => Promise<void> | void;\r\n\r\ntype FormWrapperProps<T extends FieldValues> = {\r\n methods: UseFormReturn<T>;\r\n onSubmit: SubmitHandler<T>;\r\n onError?: (errors: FieldErrors<T>) => void;\r\n children: React.ReactNode;\r\n logErrors?: boolean;\r\n className?: string;\r\n};\r\n\r\n// Helper type to make all properties optional recursively\r\n// type DeepPartial<T> = T extends object\r\n// ? { [P in keyof T]?: DeepPartial<T[P]> }\r\n// : T;\r\n\r\nfunction Form<T extends FieldValues>({\r\n methods,\r\n onSubmit,\r\n onError,\r\n children,\r\n logErrors,\r\n className,\r\n}: FormWrapperProps<T>) {\r\n return (\r\n <FormProvider {...methods}>\r\n <form\r\n className={cn(\r\n \"mt-4 lg:mt-8 grid grid-cols-1 lg:grid-cols-2 gap-4 lg:gap-8 relative\",\r\n className\r\n )}\r\n onSubmit={methods.handleSubmit(\r\n (data, event) => onSubmit(data, event),\r\n (errors) => {\r\n if (logErrors) {\r\n console.log(errors);\r\n }\r\n onError?.(errors);\r\n }\r\n )}\r\n >\r\n {children}\r\n </form>\r\n </FormProvider>\r\n );\r\n}\r\n\r\n/**\r\n * Hook to create react-hook-form methods based on a zod schema and default values.\r\n *\r\n * @param schema Zod schema to validate form data\r\n * @param defaultValues Optional default form values (partial)\r\n * @returns UseFormReturn with typed form methods\r\n */\r\nfunction useMethods<TSchema extends ZodTypeAny>(\r\n schema: TSchema,\r\n defaultValues?: Partial<z.infer<TSchema>>\r\n): UseFormReturn<z.infer<TSchema>> {\r\n return useForm<z.infer<TSchema>>({\r\n resolver: zodResolver(schema),\r\n defaultValues: defaultValues as any,\r\n });\r\n}\r\nexport { Form, useMethods };\r\n","/**\r\n * Props for the base Icon component that provides a consistent SVG wrapper.\r\n */\r\ninterface IconProps extends React.SVGProps<SVGSVGElement> {\r\n /** Width and height of the icon in pixels (default: 24) */\r\n size?: number | string;\r\n /** Stroke width for outlined icons (default: 2) */\r\n strokeWidth?: number;\r\n /** SVG viewBox attribute defining the coordinate system (default: \"0 0 24 24\") */\r\n viewBox?: \"0 0 24 24\" | \"0 0 48 48\" | \"0 0 512 512\";\r\n /** CSS class names for styling */\r\n className?: string;\r\n /** SVG elements (paths, circles, etc.) that define the icon shape */\r\n children?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Base Icon component that provides a consistent SVG wrapper for creating custom icons.\r\n * Handles common SVG properties while allowing full customization through standard SVG props.\r\n *\r\n * @example\r\n * // Creating a reusable icon component\r\n * export const CustomIcon = ({ size, className, ...props }: IndividualIconProps) => {\r\n * return (\r\n * <Icon size={size} className={className} fill=\"currentColor\" {...props}>\r\n * <path d=\"M12 2L2 7v10c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V7l-10-5z\" />\r\n * </Icon>\r\n * );\r\n * };\r\n *\r\n * @example\r\n * // Creating a custom icon\r\n * <Icon size={32} strokeWidth={1.5}>\r\n * <path d=\"M12 2L2 7v10c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V7l-10-5z\" />\r\n * </Icon>\r\n *\r\n * @example\r\n * // Using with custom viewBox for different icon sets\r\n * <Icon viewBox=\"0 0 512 512\" size={48}>\r\n * <circle cx=\"256\" cy=\"256\" r=\"200\" />\r\n * </Icon>\r\n */\r\nexport const Icon: React.FC<IconProps> = ({\r\n children,\r\n size = 24,\r\n strokeWidth = 2,\r\n viewBox = \"0 0 24 24\",\r\n className,\r\n ...props\r\n}) => {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={size}\r\n height={size}\r\n viewBox={viewBox}\r\n className={className}\r\n {...props}\r\n >\r\n {children}\r\n </svg>\r\n );\r\n};\r\n\r\n// Define props for individual icons\r\nexport type IndividualIconProps = Omit<IconProps, \"children\">;\r\n\r\n// just here as example\r\n//ri:home-fill\r\n// export const HomeFill = ({\r\n// size,\r\n// className,\r\n// ...props\r\n// }: IndividualIconProps) => {\r\n// return (\r\n// <Icon size={size} className={className} fill=\"currentColor\" {...props}>\r\n// <path d=\"M21 20a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V9.49a1 1 0 0 1 .386-.79l8-6.223a1 1 0 0 1 1.228 0l8 6.223a1 1 0 0 1 .386.79z\" />\r\n// </Icon>\r\n// );\r\n// };\r\n","import { CheckIcon, DollarSign, Eye, EyeOffIcon } from \"lucide-react\";\r\nimport {\r\n InputHTMLAttributes,\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { cn } from \"../utils\";\r\nimport { nullRead, nullSet, setFocusEnd } from \"../utils\";\r\nimport { Controller, useFormContext } from \"react-hook-form\";\r\n\r\n// Types\r\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\r\n label?: string;\r\n description?: string;\r\n labelPosition?: \"default\" | \"floating\";\r\n color?: \"solid\" | \"outline\";\r\n focusColor?: \"solid\" | \"brand\";\r\n valid?: boolean;\r\n error?: boolean;\r\n errorMessage?: string;\r\n isPrice?: boolean;\r\n prefix?: string;\r\n wrapperClassName?: string;\r\n containerClassName?: string;\r\n}\r\n\r\nconst inputColors = {\r\n solid:\r\n \"bg-base-3 border border-base-4 drop-shadow-sm dark-theme:drop-shadow-none\",\r\n outline: \"border border-base-6\",\r\n};\r\n\r\nconst focusColors = {\r\n brand: \"ring-1 ring-brand\",\r\n solid: \"ring-1 ring-base-6\",\r\n};\r\n\r\n// similar to button size mdsm (text-sm px-3 py-2.5)\r\n// (this is similar to h-10 if need to make some shape)\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n label,\r\n description,\r\n labelPosition = \"default\",\r\n color = \"solid\",\r\n focusColor = \"brand\",\r\n placeholder,\r\n valid,\r\n error,\r\n errorMessage,\r\n isPrice,\r\n prefix,\r\n wrapperClassName,\r\n containerClassName,\r\n className,\r\n type = \"text\",\r\n value,\r\n ...props\r\n },\r\n forwardedRef\r\n ) => {\r\n const innerRef = useRef<HTMLInputElement>(null);\r\n const mounted = useRef(false);\r\n const [showPassword, setShowPassword] = useState(false);\r\n const [isFocused, setIsFocused] = useState(false);\r\n const isPassword = type === \"password\";\r\n const inputType =\r\n isPassword && showPassword ? \"text\" : isPrice ? \"number\" : type;\r\n const hasValue = value !== \"\" && value !== null && value !== undefined;\r\n\r\n // Use the forwarded ref if available, otherwise use innerRef\r\n // const ref = forwardedRef || innerRef;\r\n // // const ref = forwardedRef;\r\n\r\n useEffect(() => {\r\n if (!mounted.current) {\r\n mounted.current = true;\r\n return;\r\n }\r\n\r\n if (innerRef.current) {\r\n setFocusEnd(innerRef.current);\r\n }\r\n }, [showPassword, innerRef]);\r\n\r\n return (\r\n <div className={cn(\"relative\", wrapperClassName)}>\r\n {label && labelPosition === \"default\" && (\r\n <label\r\n className={cn(\"font-medium ml-0.5 text-xs\", error && \"text-red-9\")}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n <div\r\n className={cn(\r\n \"rounded-6 transition cursor-text relative\",\r\n inputColors[color],\r\n {\r\n \"pt-[22px] pb-1.5\": labelPosition === \"floating\",\r\n [focusColors[focusColor]]: !error && isFocused,\r\n \"bg-red-4 text-red-9\": !!error,\r\n \"ring-1 ring-red-9\": !!error && isFocused,\r\n },\r\n containerClassName\r\n )}\r\n >\r\n {label && labelPosition === \"floating\" && (\r\n <label\r\n className={cn(\r\n \"absolute transition-all duration-200 pointer-events-none\",\r\n \"text-sm top-[18px] font-semibold left-3\",\r\n {\r\n \"text-xs top-2.5\": isFocused || hasValue || placeholder,\r\n \"text-red-9\": !!error,\r\n }\r\n )}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n {isPrice && (\r\n <DollarSign\r\n size={16}\r\n className={cn(\r\n \"absolute top-1/2 -translate-y-1/2 left-3\",\r\n error ? \"text-red-9\" : \"text-base-11\"\r\n )}\r\n />\r\n )}\r\n {prefix && (\r\n <p className=\"text-sm text-base-11 absolute top-1/2 -translate-y-1/2 left-3\">\r\n {prefix}\r\n </p>\r\n )}\r\n <input\r\n ref={(e) => {\r\n if (forwardedRef) {\r\n if (typeof forwardedRef === \"function\") {\r\n forwardedRef(e);\r\n } else {\r\n forwardedRef.current = e;\r\n }\r\n }\r\n //@ts-ignore\r\n innerRef.current = e;\r\n }}\r\n type={inputType}\r\n className={cn(\r\n \"w-full bg-transparent focus-visible:outline-none\",\r\n \"placeholder:text-sm text-sm placeholder:text-base-11\",\r\n isPrice || prefix ? \"pl-9\" : \"pl-3\",\r\n {\r\n \"py-2.5\": labelPosition === \"default\",\r\n \"mt-1.5\": labelPosition === \"floating\",\r\n \"pr-10\": valid,\r\n \"text-red-9 placeholder:text-red-9\": !!error,\r\n },\r\n className\r\n )}\r\n value={value}\r\n placeholder={placeholder}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n {...props}\r\n />\r\n </div>\r\n\r\n {valid ? (\r\n <CheckIcon\r\n size={20}\r\n className={`absolute top-1/2 -translate-y-1/2 text-green-500 ${\r\n isPassword ? \"right-10\" : \"right-3\"\r\n }`}\r\n />\r\n ) : null}\r\n\r\n {isPassword && (\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n labelPosition === \"floating\"\r\n ? \"absolute right-3 top-1/2 -translate-y-1/2\"\r\n : \"absolute right-3 top-10\"\r\n )}\r\n onClick={() => {\r\n setShowPassword(!showPassword);\r\n }}\r\n >\r\n {showPassword ? (\r\n <EyeOffIcon\r\n size={20}\r\n className={cn(error ? \"text-red-9\" : \"text-base-11\")}\r\n />\r\n ) : (\r\n <Eye\r\n size={20}\r\n className={cn(error ? \"text-red-9\" : \"text-base-11\")}\r\n />\r\n )}\r\n </button>\r\n )}\r\n {errorMessage ? (\r\n <span role=\"alert\" className=\"text-red-9 text-sm mt-1 ml-0.5\">\r\n {errorMessage}\r\n </span>\r\n ) : description ? (\r\n <p className=\"text-xs text-base-11 mt-1 ml-0.5\">{description}</p>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\n// Add display name for better debugging\r\nInput.displayName = \"Input\";\r\n\r\nexport const FormInput = ({\r\n name,\r\n customRead,\r\n customSet,\r\n withNullSet = true,\r\n ...others\r\n}: {\r\n name: string;\r\n customRead?: (value: string | null) => string;\r\n customSet?: (value: string) => string | number | null | undefined;\r\n withNullSet?: boolean;\r\n} & InputProps) => {\r\n const { control } = useFormContext();\r\n\r\n const readValue = useCallback(\r\n (value: string | null) => {\r\n if (customRead) {\r\n return customRead(value);\r\n } else if (value === null) {\r\n return nullRead(value);\r\n }\r\n return value;\r\n },\r\n [customRead]\r\n );\r\n\r\n const setValue = useCallback(\r\n (value: string) => {\r\n if (customSet) {\r\n if (withNullSet && value === null) {\r\n return nullSet(value);\r\n } else {\r\n return customSet(value);\r\n }\r\n } else if (value === null) {\r\n return nullSet(value);\r\n }\r\n return value;\r\n },\r\n [customSet]\r\n );\r\n\r\n if (!control) {\r\n console.error(`Form control is missing for field: ${name}`);\r\n return <p>Form control missing for field: {name}</p>;\r\n }\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => {\r\n return (\r\n <Input\r\n value={readValue(field.value)}\r\n onChange={(e) => field.onChange(setValue(e.target.value))}\r\n error={!!fieldState.error}\r\n errorMessage={fieldState.error?.message}\r\n // Pass the ref from React Hook Form\r\n ref={field.ref}\r\n {...others}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import {\n createContext,\n memo,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\n//============================\n// #region AliveScope\n//============================\ntype AliveScopeContextType = {\n getPortalElement: (\n id: string,\n children: React.ReactNode,\n className?: string\n ) => HTMLElement;\n dropPortalElement: (id: string) => void;\n};\n\nconst AliveScopeContext = createContext<AliveScopeContextType | null>(null);\n\nconst AliveScopeProvider = ({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: AliveScopeContextType;\n}) => {\n return (\n <AliveScopeContext.Provider value={value}>\n {children}\n </AliveScopeContext.Provider>\n );\n};\n\nconst useAliveScope = () => {\n const context = useContext(AliveScopeContext);\n\n if (!context)\n throw new Error(\"useAliveScope must be wrapped within AliveScopeProvider\");\n\n return context;\n};\n\ntype AliveScopeProps = {\n children?: React.ReactNode;\n};\n\nconst AliveScope: React.FC<AliveScopeProps> = ({ children }) => {\n const [nodes, setNodes] = useState<{\n [id: string]: { children: React.ReactNode; element: HTMLElement };\n }>({});\n\n const onMountCallbacks = useRef<{ [id: string]: ((id: string) => void)[] }>(\n {}\n );\n const onDropCallbacks = useRef<{ [id: string]: ((id: string) => void)[] }>(\n {}\n );\n\n const getPortalElement = (\n id: string,\n children: React.ReactNode,\n className?: string\n ) => {\n if (!nodes[id]) {\n const element = document.createElement(\"div\");\n if (id) {\n element.id = id;\n }\n if (className) {\n element.className = className;\n }\n setNodes((prevNodes) => ({\n ...prevNodes,\n [id]: { children, element },\n }));\n onMountCallbacks.current[id] = [];\n onDropCallbacks.current[id] = [];\n if (onMountCallbacks.current && onMountCallbacks.current[id]) {\n onMountCallbacks.current[id].forEach((callback) => callback(id));\n }\n return element;\n }\n if (onMountCallbacks.current && onMountCallbacks.current[id]) {\n onMountCallbacks.current[id].forEach((callback) => callback(id));\n }\n return nodes[id].element;\n };\n\n const dropPortalElement = (id: string) => {\n setNodes((prevNodes) => {\n const copy = { ...prevNodes };\n delete copy[id];\n return copy;\n });\n //console.log(\"dropped\", id);\n if (onDropCallbacks.current && onDropCallbacks.current[id]) {\n onDropCallbacks.current[id].forEach((callback) => callback(id));\n }\n };\n\n return (\n <AliveScopeProvider\n value={{\n getPortalElement,\n dropPortalElement,\n }}\n >\n {children}\n {Object.entries(nodes).map(([id, { children, element }]) => (\n <Component\n key={id}\n id={id}\n onMountCallbacks={onMountCallbacks}\n onDropCallbacks={onDropCallbacks}\n children={children}\n element={element}\n />\n ))}\n </AliveScopeProvider>\n );\n};\n//============================\n// #endregion AliveScope\n//============================\n\n//============================\n// #region KeepAlive\n//============================\ntype KeepAliveContextType = {\n keepAliveId: string;\n onKeepAliveMount: (\n callback: (id: string) => void,\n options?: { runOnFirstMount?: boolean }\n ) => void;\n onKeepAliveDrop: (callback: (id: string) => void) => void;\n};\n\nexport const KeepAliveContext = createContext<KeepAliveContextType | null>(\n null\n);\n\nexport const KeepAliveProvider = ({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: KeepAliveContextType;\n}) => {\n return (\n <KeepAliveContext.Provider value={value}>\n {children}\n </KeepAliveContext.Provider>\n );\n};\n\nconst Component = memo<{\n id: string;\n onMountCallbacks: React.MutableRefObject<{\n [id: string]: ((id: string) => void)[];\n }>;\n onDropCallbacks: React.MutableRefObject<{\n [id: string]: ((id: string) => void)[];\n }>;\n children: React.ReactNode;\n element: HTMLElement;\n}>(({ id, onMountCallbacks, onDropCallbacks, children, element }) => {\n const onKeepAliveMount = (\n callback: (id: string) => void,\n options: { runOnFirstMount?: boolean } = { runOnFirstMount: false }\n ) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n const runCallback = () => {\n const el = document.getElementById(id);\n if (el) {\n callback(id);\n } else {\n // If element is not found, use MutationObserver to wait for it\n const observer = new MutationObserver((_mutations, obs) => {\n const el = document.getElementById(id);\n if (el) {\n callback(id);\n obs.disconnect(); // Stop observing once element is found\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Cleanup function to disconnect the observer if component unmounts\n return () => observer.disconnect();\n }\n };\n\n if (options?.runOnFirstMount) {\n runCallback();\n }\n\n onMountCallbacks.current[id].push(runCallback);\n return () => {\n onMountCallbacks.current[id] = onMountCallbacks.current[id].filter(\n (cb) => cb !== runCallback\n );\n };\n }, []);\n };\n\n const onKeepAliveDrop = (callback: (id: string) => void) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n onDropCallbacks.current[id].push(callback);\n return () => {\n onDropCallbacks.current[id] = onDropCallbacks.current[id].filter(\n (cb) => cb !== callback\n );\n };\n }, []);\n };\n\n return (\n <KeepAliveProvider\n value={{ keepAliveId: id, onKeepAliveMount, onKeepAliveDrop }}\n >\n {createPortal(children, element, id)}\n </KeepAliveProvider>\n );\n});\n\nconst useKeepAlive = () => {\n const context = useContext(KeepAliveContext);\n\n if (!context)\n throw new Error(\"useKeepAlive must be used within KeepAliveProvider\");\n\n return context;\n};\n\ntype KeepAliveProps = React.HTMLAttributes<HTMLDivElement> & {\n aliveKey: string;\n children: React.ReactNode;\n enabled?: boolean;\n};\n\nconst KeepAlive: React.FC<KeepAliveProps> = ({\n aliveKey,\n children,\n enabled = true,\n ...others\n}) => {\n const keepAliveRef = useRef<HTMLDivElement | null>(null);\n const { getPortalElement } = useAliveScope();\n\n useEffect(() => {\n const element = getPortalElement(aliveKey, children, others.className);\n\n if (enabled) {\n if (keepAliveRef.current) {\n keepAliveRef.current.replaceWith(element);\n }\n }\n\n return () => {\n //TODO\n //callUnmountCallbacks(aliveKey)\n };\n }, [aliveKey, children, enabled, others]);\n\n return (\n <div {...others} ref={keepAliveRef}>\n {/* Added children back for ssr initial rendering */}\n {children}\n </div>\n );\n};\n//============================\n// #endregion KeepAlive\n//============================\n\nexport { AliveScope, KeepAlive, useKeepAlive };\n","import { cn } from \"../utils\";\r\nimport { MouseEventHandler } from \"react\";\r\n\r\nconst List = ({\r\n lightSolid = true,\r\n className,\r\n children,\r\n ...others\r\n}: {\r\n lightSolid?: boolean;\r\n className?: string;\r\n children: React.ReactNode;\r\n others?: any;\r\n}) => {\r\n return (\r\n <div\r\n className={cn(\r\n \"rounded-7 dark-theme:bg-base-3\",\r\n lightSolid\r\n ? \"border-none bg-base-3\"\r\n : \"border border-base-6 dark-theme:border-base-4\",\r\n className\r\n )}\r\n {...others}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nconst ListItem = ({\r\n onClick,\r\n lightSolid = true,\r\n className,\r\n children,\r\n}: {\r\n onClick?: MouseEventHandler<HTMLButtonElement>;\r\n lightSolid?: boolean;\r\n className?: string;\r\n children: React.ReactNode;\r\n}) => {\r\n return (\r\n <button\r\n onClick={onClick}\r\n className={cn(\r\n \"w-full text-start first:rounded-t-7 last:rounded-b-7 border-b dark-theme:border-base-4\",\r\n \"last:border-none px-3 pr-2.5 py-3 dark-theme:bg-base-3 lg:hover:bg-base-4 max-lg:active:bg-base-4\",\r\n \"transition-colors hover:cursor-pointer flex items-center justify-between outline-none lg:focus-visible:ring-2 focus-visible:ring-base-6\",\r\n lightSolid ? \"bg-base-3 border-base-4\" : \"border-base-6\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </button>\r\n );\r\n};\r\n\r\nexport { List, ListItem };\r\n\r\n//usage example\r\n{\r\n /* <p>List Title</p>\r\n<List>\r\n <ListItem>\r\n <p>Something</p>\r\n <p>Else</p>\r\n </ListItem>\r\n</List> */\r\n}\r\n","import { CheckIcon, ChevronDownIcon, XIcon } from \"lucide-react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils\";\r\nimport { Controller, useFormContext } from \"react-hook-form\";\r\nimport { useClickAwayWithRef, usePopover } from \"../hooks\";\r\nimport { AnimatePresence, motion } from \"motion/react\";\r\nimport { Portal } from \"../components\";\r\n\r\ninterface MultiSelectProps<T> {\r\n label: string;\r\n labelPosition?: \"default\" | \"floating\";\r\n options: T[];\r\n selectedValues: T[];\r\n onChange: (values: T[]) => void;\r\n idExtractor: (item: T) => string | number;\r\n labelExtractor: (item: T) => string;\r\n customSetter?: (item: T) => any;\r\n valid?: boolean;\r\n error?: string;\r\n placeholder?: string;\r\n maxSelections?: number;\r\n searchable?: boolean;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const MultiSelect = <T,>({\r\n label,\r\n labelPosition = \"default\",\r\n options,\r\n selectedValues,\r\n onChange,\r\n idExtractor,\r\n labelExtractor,\r\n customSetter,\r\n valid,\r\n error,\r\n placeholder = \"Select options...\",\r\n maxSelections,\r\n searchable = false,\r\n disabled = false,\r\n className,\r\n}: MultiSelectProps<T>) => {\r\n const [searchValue, setSearchValue] = useState(\"\");\r\n const [isFocused, setIsFocused] = useState(false);\r\n const [focusedOptionIndex, setFocusedOptionIndex] = useState(-1);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\r\n\r\n const {\r\n triggerRef,\r\n triggerProps,\r\n popoverRef,\r\n getPopoverPosition,\r\n open,\r\n toggle,\r\n close,\r\n } = usePopover<HTMLDivElement, HTMLDivElement>({\r\n align: \"start\",\r\n side: \"top\",\r\n avoidCollisions: false,\r\n onOpen: () => {\r\n setIsFocused(true);\r\n if (searchable && inputRef.current) {\r\n setTimeout(() => inputRef.current?.focus(), 10);\r\n }\r\n },\r\n onClose: () => {\r\n setIsFocused(false);\r\n setSearchValue(\"\");\r\n setFocusedOptionIndex(-1);\r\n },\r\n });\r\n\r\n // Unique IDs for ARIA attributes\r\n const inputId = useRef(\r\n `multiselect-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n const labelId = useRef(\r\n `label-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n const errorId = useRef(\r\n `error-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n const listboxId = useRef(\r\n `listbox-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n\r\n // Handle crossover between stored IDs and display objects\r\n const getDisplayValues = (): T[] => {\r\n if (!customSetter) return selectedValues;\r\n\r\n // selectedValues contains IDs, find matching objects from options\r\n return selectedValues\r\n .map((storedValue) => {\r\n const matchingOption = options.find(\r\n (option) =>\r\n idExtractor(option) === storedValue ||\r\n idExtractor(option) === idExtractor(storedValue as any)\r\n );\r\n return matchingOption;\r\n })\r\n .filter(Boolean) as T[];\r\n };\r\n\r\n const displayValues = getDisplayValues();\r\n const hasValue = displayValues.length > 0;\r\n\r\n // Filter options based on search\r\n const filteredOptions = searchable\r\n ? options.filter((option) =>\r\n labelExtractor(option).toLowerCase().includes(searchValue.toLowerCase())\r\n )\r\n : options;\r\n\r\n // Update option refs when filtered options change\r\n useEffect(() => {\r\n optionRefs.current = optionRefs.current.slice(0, filteredOptions.length);\r\n }, [filteredOptions.length]);\r\n\r\n const isSelected = (option: T) => {\r\n if (!customSetter) {\r\n return selectedValues.some(\r\n (selected) => idExtractor(selected) === idExtractor(option)\r\n );\r\n }\r\n\r\n // When using customSetter, selectedValues contains IDs\r\n return selectedValues.some(\r\n (storedValue) =>\r\n storedValue === idExtractor(option) ||\r\n idExtractor(storedValue as any) === idExtractor(option)\r\n );\r\n };\r\n\r\n const handleToggleOption = (option: T) => {\r\n if (disabled) return;\r\n\r\n if (isSelected(option)) {\r\n // Remove from selection\r\n let newValues;\r\n if (customSetter) {\r\n // Remove by ID when using customSetter\r\n const optionId = idExtractor(option);\r\n newValues = selectedValues.filter(\r\n (storedValue) =>\r\n storedValue !== optionId &&\r\n idExtractor(storedValue as any) !== optionId\r\n );\r\n } else {\r\n // Remove by object comparison\r\n newValues = selectedValues.filter(\r\n (selected) => idExtractor(selected) !== idExtractor(option)\r\n );\r\n }\r\n onChange(newValues);\r\n announceChange(`Removed ${labelExtractor(option)}`);\r\n } else {\r\n // Add to selection\r\n if (maxSelections && displayValues.length >= maxSelections) {\r\n announceChange(`Maximum of ${maxSelections} selections allowed`);\r\n return;\r\n }\r\n\r\n let newValues;\r\n if (customSetter) {\r\n // Add ID when using customSetter\r\n newValues = [...selectedValues, customSetter(option)];\r\n } else {\r\n // Add full object\r\n newValues = [...selectedValues, option];\r\n }\r\n onChange(newValues);\r\n announceChange(`Added ${labelExtractor(option)}`);\r\n }\r\n };\r\n\r\n const handleRemoveValue = (valueToRemove: T) => {\r\n if (disabled) return;\r\n\r\n let newValues;\r\n if (customSetter) {\r\n // Remove by ID when using customSetter\r\n const valueId = idExtractor(valueToRemove);\r\n newValues = selectedValues.filter(\r\n (storedValue) =>\r\n storedValue !== valueId && idExtractor(storedValue as any) !== valueId\r\n );\r\n } else {\r\n // Remove by object comparison\r\n newValues = selectedValues.filter(\r\n (selected) => idExtractor(selected) !== idExtractor(valueToRemove)\r\n );\r\n }\r\n onChange(newValues);\r\n announceChange(`Removed ${labelExtractor(valueToRemove)}`);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (disabled) return;\r\n\r\n switch (e.key) {\r\n case \"Enter\":\r\n e.preventDefault();\r\n if (!open) {\r\n toggle();\r\n } else if (focusedOptionIndex >= 0) {\r\n handleToggleOption(filteredOptions[focusedOptionIndex]);\r\n }\r\n break;\r\n case \"Escape\":\r\n e.preventDefault();\r\n close();\r\n break;\r\n case \"ArrowDown\":\r\n e.preventDefault();\r\n if (!open) {\r\n toggle();\r\n } else {\r\n const nextIndex =\r\n focusedOptionIndex >= filteredOptions.length - 1\r\n ? 0\r\n : focusedOptionIndex + 1;\r\n setFocusedOptionIndex(nextIndex);\r\n optionRefs.current[nextIndex]?.scrollIntoView({ block: \"nearest\" });\r\n }\r\n break;\r\n case \"ArrowUp\":\r\n e.preventDefault();\r\n if (open) {\r\n const prevIndex =\r\n focusedOptionIndex <= 0\r\n ? filteredOptions.length - 1\r\n : focusedOptionIndex - 1;\r\n setFocusedOptionIndex(prevIndex);\r\n optionRefs.current[prevIndex]?.scrollIntoView({ block: \"nearest\" });\r\n }\r\n break;\r\n case \"Backspace\":\r\n if (searchable && searchValue === \"\" && displayValues.length > 0) {\r\n // Remove last selected value\r\n const lastValue = displayValues[displayValues.length - 1];\r\n handleRemoveValue(lastValue);\r\n }\r\n break;\r\n }\r\n };\r\n\r\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setSearchValue(e.target.value);\r\n setFocusedOptionIndex(-1);\r\n };\r\n\r\n const handleContainerClick = () => {\r\n if (!disabled) {\r\n if (searchable && inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n toggle();\r\n }\r\n };\r\n\r\n const announceChange = (message: string) => {\r\n if (import.meta.env.NODE_ENV !== \"production\") {\r\n console.log(`Accessibility announcement: ${message}`);\r\n }\r\n };\r\n\r\n useClickAwayWithRef(popoverRef, (event) => {\r\n if (!triggerRef.current || !open || !event.target) return;\r\n if (triggerRef.current.contains(event.target as Node)) return;\r\n close();\r\n });\r\n\r\n const position = getPopoverPosition();\r\n\r\n return (\r\n <div className={cn(\"relative\", className)}>\r\n <div className=\"relative\" ref={containerRef}>\r\n {/* {labelPosition === \"default\" && (\r\n <label\r\n id={labelId}\r\n htmlFor={inputId}\r\n className={cn(\r\n \"text-base top-4 font-semibold left-3 absolute transition-all duration-200\",\r\n {\r\n \"text-sm top-2 left-2\": isFocused || hasValue,\r\n \"text-red-9\": !!error,\r\n }\r\n )}\r\n >\r\n {label}{\" \"}\r\n {maxSelections && `(${selectedValues.length}/${maxSelections})`}\r\n </label>\r\n )} */}\r\n {labelPosition === \"default\" && (\r\n <label\r\n className={cn(\r\n \"top-[18px] font-medium ml-0.5 text-xs\",\r\n error && \"text-red-9\"\r\n )}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div\r\n ref={triggerRef}\r\n {...triggerProps}\r\n className={cn(\r\n \"relative rounded-6 px-2 transition cursor-pointer pr-10 min-h-[48px]\",\r\n \"border border-base-4 light-theme:drop-shadow-sm dark-theme:bg-base-3\",\r\n {\r\n \"py-3\": labelPosition === \"default\",\r\n \"pt-5 pb-2\": labelPosition === \"floating\",\r\n \"ring-1 ring-brand\": open || isFocused,\r\n \"text-red-9\": error,\r\n \"ring-2 ring-red-6\": error && (open || isFocused),\r\n \"opacity-60 cursor-not-allowed\": disabled,\r\n }\r\n )}\r\n onClick={handleContainerClick}\r\n role=\"combobox\"\r\n aria-expanded={open}\r\n aria-haspopup=\"listbox\"\r\n aria-owns={listboxId}\r\n aria-labelledby={labelId}\r\n aria-describedby={error ? errorId : undefined}\r\n onKeyDown={handleKeyDown}\r\n tabIndex={disabled ? -1 : 0}\r\n >\r\n {labelPosition === \"floating\" && (\r\n <label\r\n id={labelId}\r\n htmlFor={inputId}\r\n className={cn(\r\n \"absolute transition-all duration-200 pointer-events-none\",\r\n \"text-base top-4 font-semibold left-3\",\r\n {\r\n \"text-sm top-2 left-2\": isFocused || hasValue,\r\n \"text-red-9\": !!error,\r\n }\r\n )}\r\n >\r\n {label}{\" \"}\r\n {maxSelections && `(${selectedValues.length}/${maxSelections})`}\r\n </label>\r\n )}\r\n\r\n <div\r\n className={cn(\"flex flex-wrap gap-2 items-center\", {\r\n \"mt-2.5\": labelPosition === \"floating\",\r\n })}\r\n >\r\n {displayValues.map((value) => (\r\n <div\r\n key={idExtractor(value)}\r\n className={cn(\r\n \"border border-base-4 dark-theme:border-base-5 dark-theme:bg-base-4 rounded-full px-2 py-1 text-sm flex items-center gap-1\",\r\n {\r\n \"bg-red-4 text-red-9\": error,\r\n }\r\n )}\r\n >\r\n <span className=\"line-clamp-1\">{labelExtractor(value)}</span>\r\n {!disabled && (\r\n <button\r\n type=\"button\"\r\n className=\"hover:bg-brand/20 rounded-full p-0.5 transition-colors\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleRemoveValue(value);\r\n }}\r\n aria-label={`Remove ${labelExtractor(value)}`}\r\n >\r\n <XIcon size={12} />\r\n </button>\r\n )}\r\n </div>\r\n ))}\r\n\r\n {searchable && (\r\n <input\r\n ref={inputRef}\r\n id={inputId}\r\n type=\"text\"\r\n className=\"flex-grow min-w-[60px] bg-transparent outline-none placeholder:text-sm\"\r\n value={searchValue}\r\n onChange={handleSearchChange}\r\n onKeyDown={handleKeyDown}\r\n placeholder={hasValue ? \"\" : placeholder}\r\n disabled={disabled}\r\n aria-autocomplete=\"list\"\r\n aria-controls={listboxId}\r\n autoComplete=\"off\"\r\n />\r\n )}\r\n\r\n {!searchable && !hasValue && (\r\n <span className=\"text-secondarytext text-sm flex-grow\">\r\n {placeholder}\r\n </span>\r\n )}\r\n </div>\r\n\r\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2\">\r\n {valid && <CheckIcon size={16} className=\"text-green-600\" />}\r\n <ChevronDownIcon\r\n size={16}\r\n className={cn(\"transition-transform text-base-11\", {\r\n \"rotate-180\": open,\r\n })}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <AnimatePresence>\r\n {open && (\r\n <Portal>\r\n <motion.div\r\n initial={{ opacity: 0, y: -10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ duration: 0.15 }}\r\n ref={popoverRef}\r\n style={{\r\n position: \"fixed\",\r\n left: position.x,\r\n top: position.top,\r\n bottom: position.bottom,\r\n width: containerRef.current?.offsetWidth ?? 200,\r\n }}\r\n className={cn(\r\n \"bg-base-1 dark-theme:bg-base-3 border border-base-4\",\r\n \"rounded-6 shadow-lg max-h-[300px] overflow-y-auto z-50\",\r\n \"customscrollbarnohide\"\r\n )}\r\n role=\"listbox\"\r\n id={listboxId}\r\n aria-labelledby={labelId}\r\n >\r\n {filteredOptions.length === 0 ? (\r\n <div className=\"px-3 py-2 text-sm text-secondarytext\">\r\n {searchValue ? \"No results found\" : \"No options available\"}\r\n </div>\r\n ) : (\r\n filteredOptions.map((option, index) => {\r\n const selected = isSelected(option);\r\n const focused = index === focusedOptionIndex;\r\n\r\n return (\r\n <div\r\n key={idExtractor(option)}\r\n ref={(el) => {\r\n optionRefs.current[index] = el;\r\n }}\r\n className={cn(\r\n \"px-3 py-2 text-sm cursor-pointer flex items-center justify-between\", // gap-x-2\r\n \"first:rounded-t-6 last:rounded-b-6\",\r\n // !selected && \"pl-9\",\r\n {\r\n \"bg-base-3 dark-theme:bg-base-4\": focused,\r\n \"bg-brandfadedbg text-brand\": selected,\r\n }\r\n )}\r\n onClick={() => handleToggleOption(option)}\r\n role=\"option\"\r\n aria-selected={selected}\r\n onMouseEnter={() => setFocusedOptionIndex(index)}\r\n >\r\n <span>{labelExtractor(option)}</span>\r\n {selected && <CheckIcon size={16} />}\r\n </div>\r\n );\r\n })\r\n )}\r\n </motion.div>\r\n </Portal>\r\n )}\r\n </AnimatePresence>\r\n\r\n {error && (\r\n <p\r\n id={errorId}\r\n className=\"text-red-9 text-xs mt-1\"\r\n aria-live=\"assertive\"\r\n >\r\n {error}\r\n </p>\r\n )}\r\n\r\n {/* Visually hidden live region for announcements */}\r\n <div className=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {displayValues.length > 0\r\n ? `Selected: ${displayValues.map(labelExtractor).join(\", \")}`\r\n : \"No selections\"}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\ntype FormMultiSelectProps<T> = Omit<\r\n MultiSelectProps<T>,\r\n \"selectedValues\" | \"onChange\"\r\n> & {\r\n name: string;\r\n};\r\n\r\nexport const FormMultiSelect = <T,>({\r\n name,\r\n ...others\r\n}: FormMultiSelectProps<T>) => {\r\n const { control } = useFormContext();\r\n\r\n if (!control) {\r\n console.error(`Form control is missing for field: ${name}`);\r\n return <p>Form control missing for field: {name}</p>;\r\n }\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => {\r\n return (\r\n <MultiSelect\r\n selectedValues={field.value || []}\r\n onChange={(values) => field.onChange(values)}\r\n error={fieldState.error?.message}\r\n {...others}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import { cn } from \"../utils\";\r\n\r\nconst titleSizes = {\r\n \"2\": \"text-2xl\",\r\n \"4\": \"text-4xl\",\r\n \"5\": \"text-5xl\",\r\n \"6\": \"text-6xl\",\r\n};\r\n\r\nconst PageTitle = ({\r\n title,\r\n description,\r\n size = \"6\",\r\n descriptionClassName,\r\n className,\r\n}: {\r\n title: string;\r\n description?: string;\r\n size?: keyof typeof titleSizes;\r\n descriptionClassName?: string;\r\n className?: string;\r\n}) => {\r\n return (\r\n <div className={cn(\"text-center\", className)}>\r\n <p className={`${titleSizes[size]} font-medium`}>{title}</p>\r\n {description ? (\r\n <p className={cn(\"mt-6 text-base-11\", descriptionClassName)}>\r\n {description}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { PageTitle };\r\n","import { RefObject, forwardRef, useCallback, useEffect, useRef } from \"react\";\r\nimport { Search, X } from \"lucide-react\";\r\nimport { useLargeScreen, useMergedRef } from \"../hooks\";\r\nimport { cn } from \"../utils\";\r\n\r\ninterface SearchInputProps {\r\n placeholder?: string;\r\n value?: string;\r\n exposedRef?: (ref: RefObject<HTMLInputElement | null>) => void;\r\n autoFocus?: (lg: boolean) => boolean;\r\n onClear?: () => void;\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n className?: string;\r\n onMount?: (\r\n ref: RefObject<HTMLInputElement>,\r\n lg: boolean\r\n ) => Promise<void> | void;\r\n error?: string | null;\r\n}\r\n\r\nconst SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\r\n (\r\n {\r\n placeholder = \"Buscar\",\r\n value,\r\n exposedRef,\r\n autoFocus,\r\n onClear,\r\n onChange,\r\n className,\r\n onMount,\r\n error,\r\n },\r\n ref\r\n ) => {\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const lg = useLargeScreen();\r\n const mergedRef = useMergedRef(inputRef, ref);\r\n const mountRef = useCallback(() => exposedRef && exposedRef(inputRef), []);\r\n\r\n useEffect(() => {\r\n const callOnMount = async () => {\r\n if (onMount) {\r\n await onMount(inputRef as RefObject<HTMLInputElement>, lg);\r\n }\r\n };\r\n mountRef();\r\n callOnMount();\r\n }, []);\r\n\r\n return (\r\n <div\r\n // ref={ref}\r\n className={cn(\r\n \"rounded-6 relative flex items-center bg-base-3 border-base-5\",\r\n {\r\n \"dark-theme:bg-red-4 light-theme:border-red-9\": error,\r\n \"dark-theme:bg-base-3\": !error,\r\n },\r\n className\r\n )}\r\n >\r\n <input\r\n ref={mergedRef}\r\n placeholder={placeholder}\r\n value={value}\r\n onChange={onChange}\r\n autoComplete=\"off\"\r\n autoCorrect=\"off\"\r\n type=\"search\"\r\n autoFocus={autoFocus ? autoFocus(lg) : undefined}\r\n className={cn(\r\n \"w-full py-1.5 pl-10 pr-3 bg-transparent outline-none text-base-12 placeholder:text-base-11 [&::-webkit-search-cancel-button]:appearance-none\",\r\n error && \"text-red-9 placeholder:text-red-9\"\r\n )}\r\n />\r\n <Search\r\n size={20}\r\n className={cn(\"absolute left-3 text-base-11 pointer-events-none\", {\r\n \"text-red-9\": error,\r\n })}\r\n />\r\n {onClear && value && value.length > 0 ? (\r\n <button\r\n onClick={() => {\r\n onClear();\r\n inputRef.current?.focus();\r\n }}\r\n className={cn(\r\n \"absolute right-2.5 rounded-full\",\r\n error ? \"text-red-9\" : \"text-base-11\"\r\n )}\r\n >\r\n <X size={20} />\r\n </button>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport { SearchInput };\r\n","import { cn } from \"../utils\";\r\nimport { useMemo, useState } from \"react\";\r\n\r\n//todo\r\n//add animated capabilities ?\r\n//like writting the missing text or something\r\n\r\nconst SeeMoreText = ({\r\n text,\r\n length = 120,\r\n size = \"sm\",\r\n className,\r\n buttonClassName,\r\n}: {\r\n text: string;\r\n length?: number;\r\n size?: \"sm\" | \"md\";\r\n className?: string;\r\n buttonClassName?: string;\r\n}) => {\r\n const [seeMore, setSeeMore] = useState(false);\r\n\r\n const canSeeMore = useMemo(() => text.length > length, [text]);\r\n\r\n const displayText = useMemo(() => {\r\n if (!canSeeMore) return text;\r\n return seeMore ? text : text.slice(0, length).trim() + \"...\";\r\n }, [text, seeMore, canSeeMore]);\r\n\r\n return (\r\n <div>\r\n <p className={cn(\"text-base-12\", size === \"sm\" && \"text-sm\", className)}>\r\n {displayText}\r\n </p>\r\n {canSeeMore ? (\r\n <button\r\n onClick={() => setSeeMore((prev) => !prev)}\r\n className={cn(\"text-xs text-base-11\", buttonClassName)}\r\n >\r\n {seeMore ? \"Ver menos\" : \"Ver más\"}\r\n </button>\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { SeeMoreText };\r\n","import { animate } from \"motion/react\";\r\n\r\n/**\r\n * Gets the scroll progress of an element\r\n */\r\nfunction getElementScrollProgress(el: HTMLElement) {\r\n if (!el) return 0;\r\n if (el.scrollTop === 0) return 0;\r\n return el.scrollTop / (el.scrollHeight - el.clientHeight);\r\n}\r\n\r\nconst scrollByAmount = <T extends HTMLElement = HTMLDivElement>({\r\n el,\r\n direction,\r\n amount = 200,\r\n multiplier = 0.4,\r\n speed = \"normal\",\r\n}: {\r\n el: T;\r\n direction: \"left\" | \"right\" | \"up\" | \"down\";\r\n amount?: number | \"max\";\r\n multiplier?: number;\r\n speed?: \"fast\" | \"normal\" | \"slow\";\r\n}) => {\r\n if (!el) return;\r\n\r\n const isVertical = direction === \"up\" || direction === \"down\";\r\n const startScroll = isVertical ? el.scrollTop : el.scrollLeft;\r\n const maxScroll = isVertical\r\n ? el.scrollHeight - el.clientHeight\r\n : el.scrollWidth - el.clientWidth;\r\n\r\n let scrollAmount: number;\r\n if (amount === \"max\") {\r\n scrollAmount = maxScroll;\r\n } else {\r\n scrollAmount = amount ?? (isVertical ? el.clientHeight : el.clientWidth) * multiplier;\r\n }\r\n\r\n let targetScroll: number;\r\n\r\n if (direction === \"right\" || direction === \"down\") {\r\n targetScroll = Math.min(startScroll + scrollAmount, maxScroll);\r\n } else {\r\n targetScroll = Math.max(startScroll - scrollAmount, 0);\r\n }\r\n\r\n // Don't animate if already at target\r\n if (targetScroll === startScroll) return;\r\n\r\n const speedMap = {\r\n fast: 0.15,\r\n normal: 0.4,\r\n slow: 0.8,\r\n };\r\n\r\n animate(0, 1, {\r\n duration: speedMap[speed],\r\n ease: \"easeOut\",\r\n onUpdate: (progress) => {\r\n if (!el) return;\r\n const scrollTo = startScroll + (targetScroll - startScroll) * progress;\r\n if (isVertical) {\r\n el.scrollTop = scrollTo;\r\n } else {\r\n el.scrollLeft = scrollTo;\r\n }\r\n },\r\n });\r\n};\r\n\r\nexport { getElementScrollProgress, scrollByAmount };\r\n","import { AnimationOptions, Easing, Variants } from \"motion/react\";\n\nconst TRANSITION_EASES: Record<string, Easing> = {\n default: [0.32, 0.72, 0, 1],\n};\n\nconst TRANSITION_DURATIONS = {\n default: 0.3,\n page: 0.54,\n};\n\nconst TRANSITION_DEFAULT: AnimationOptions = {\n ease: [0.32, 0.72, 0, 1],\n duration: 0.3,\n};\n\nconst TRANSITION_PAGE: AnimationOptions = {\n ease: [0.32, 0.72, 0, 1],\n duration: 0.54,\n};\n\n// ✅ Static variants (no window access)\nconst FADE_IN: Variants = {\n initial: { opacity: 0 },\n animate: {\n opacity: 1,\n transition: {\n ease: TRANSITION_EASES.default,\n duration: 0.3,\n },\n },\n exit: {\n opacity: 0,\n transition: {\n ease: [0.32, 0.72, 0, 1],\n duration: 0.3,\n },\n },\n};\n\nconst FADE_UP: Variants = {\n initial: { opacity: 0, y: -20 },\n animate: {\n opacity: 1,\n y: 0,\n transition: {\n ease: TRANSITION_EASES.default,\n duration: 0.3,\n },\n },\n exit: {\n opacity: 0,\n y: -20,\n transition: {\n ease: TRANSITION_EASES.default,\n duration: 0.3,\n },\n },\n};\n\nexport {\n TRANSITION_EASES,\n TRANSITION_DURATIONS,\n TRANSITION_DEFAULT,\n TRANSITION_PAGE,\n FADE_UP,\n FADE_IN,\n};\n","import { ChevronLeft, ChevronRight } from \"lucide-react\";\r\nimport { cn } from \"../utils\";\r\nimport { useState } from \"react\";\r\nimport { useOverflow } from \"../utils\";\r\nimport { AnimatePresence, motion } from \"motion/react\";\r\nimport { FADE_IN, scrollByAmount } from \"../animations\";\r\n\r\nconst segmentedControlStyles = {\r\n rounded: {\r\n 3: \"rounded-3\",\r\n 6: \"rounded-6\",\r\n full: \"rounded-full\",\r\n },\r\n colors: {\r\n solid: \"bg-base-3\",\r\n brand: \"bg-brand text-brand-text\",\r\n contrast: \"bg-base-12 text-base-1\",\r\n },\r\n unselectedColors: {\r\n none: \"\",\r\n solid: \"bg-bg-uiel\",\r\n },\r\n border: {\r\n solid: \"border-base-6 dark-theme:border-base-5\",\r\n subtle: \"border-base-5 dark-theme:border-base-4\",\r\n brand: \"border-brand-border\",\r\n },\r\n widths: {\r\n fit: {\r\n container: \"max-w-fit\",\r\n item: \"w-fit\",\r\n },\r\n full: {\r\n container: \"w-full\",\r\n item: \"grow\",\r\n },\r\n },\r\n};\r\n\r\nconst SegmentedControl = <T,>({\r\n options,\r\n selected,\r\n onChange,\r\n keyExtractor,\r\n labelExtractor,\r\n itemColor,\r\n itemClassName,\r\n color = \"contrast\",\r\n unselectedColor = \"none\",\r\n width = \"fit\",\r\n border = \"solid\",\r\n rounded = 6,\r\n trackScroll = true,\r\n // from,\r\n className,\r\n}: {\r\n options: T[];\r\n selected: T;\r\n onChange: (option: T) => void;\r\n keyExtractor: (option: T) => string | number;\r\n labelExtractor: (option: T) => string;\r\n /**\r\n *\r\n * @param selected\r\n * @description let you override default items colors\r\n * using tailwind classnames based on it's selected status\r\n * @returns classnames string\r\n */\r\n itemColor?: (selected: boolean) => string;\r\n itemClassName?: string;\r\n color?: keyof typeof segmentedControlStyles.colors;\r\n unselectedColor?: keyof typeof segmentedControlStyles.unselectedColors;\r\n width?: keyof typeof segmentedControlStyles.widths;\r\n border?: keyof typeof segmentedControlStyles.border;\r\n rounded?: keyof typeof segmentedControlStyles.rounded;\r\n trackScroll?: boolean;\r\n // from?: string; //only for debug purposes\r\n className?: string;\r\n}) => {\r\n const [indicators, setIndicators] = useState({ left: false, right: false });\r\n // const inView = useActivePage();\r\n\r\n const { ref } = useOverflow<HTMLDivElement>({\r\n onOverflow: (info) => {\r\n // toast.info(`Hey from ${from}`);\r\n setIndicators({ left: info.canScrollLeft, right: info.canScrollRight });\r\n },\r\n // enabled: inView,\r\n trackScroll: trackScroll,\r\n });\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"relative overflow-hidden\",\r\n segmentedControlStyles.widths[width].container,\r\n segmentedControlStyles.rounded[rounded],\r\n className\r\n )}\r\n >\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"flex items-center border overflow-x-scroll scrollbar-hide\",\r\n segmentedControlStyles.rounded[rounded],\r\n segmentedControlStyles.border[border]\r\n )}\r\n >\r\n {options.map((option) => {\r\n const isSelected = keyExtractor(selected) === keyExtractor(option);\r\n return (\r\n <button\r\n key={keyExtractor(option)}\r\n onClick={() => onChange?.(option)}\r\n className={cn(\r\n \"border-r px-3 py-1 last:border-none text-nowrap shrink-0\",\r\n segmentedControlStyles.widths[width].item,\r\n !isSelected && \"lg:hover:bg-overlay-3\",\r\n itemColor\r\n ? itemColor(isSelected)\r\n : isSelected\r\n ? segmentedControlStyles.colors[color]\r\n : segmentedControlStyles.unselectedColors[unselectedColor],\r\n segmentedControlStyles.border[border],\r\n itemClassName\r\n )}\r\n >\r\n {labelExtractor(option)}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n <AnimatePresence>\r\n {indicators.left ? (\r\n <motion.button\r\n key=\"leftarrow\"\r\n variants={FADE_IN}\r\n initial=\"initial\"\r\n animate=\"animate\"\r\n exit=\"exit\"\r\n onClick={() => {\r\n if (!ref.current) return;\r\n scrollByAmount({ el: ref.current, direction: \"left\" });\r\n }}\r\n className=\"absolute shrink-0 left-0 px-1 h-full bg-gradient-to-r from-base-2 top-0\"\r\n >\r\n <ChevronLeft className=\"text-base-13\" />\r\n </motion.button>\r\n ) : null}\r\n {indicators.right ? (\r\n <motion.button\r\n key=\"rightarrow\"\r\n variants={FADE_IN}\r\n initial=\"initial\"\r\n animate=\"animate\"\r\n exit=\"exit\"\r\n onClick={() => {\r\n if (!ref.current) return;\r\n scrollByAmount({ el: ref.current, direction: \"right\" });\r\n }}\r\n className=\"absolute shrink-0 right-0 px-1 h-full bg-gradient-to-l from-base-2 top-0\"\r\n >\r\n <ChevronRight className=\"text-base-13\" />\r\n </motion.button>\r\n ) : null}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n};\r\n\r\nexport { SegmentedControl };\r\n\r\n{\r\n /* <AnimatePresence>\r\n {isSelected ? (\r\n <motion.p\r\n layoutId=\"bottombar\"\r\n className={`absolute inset-0 ${isSelected && colors[color]}`}\r\n />\r\n ) : null}\r\n </AnimatePresence> */\r\n}\r\n","import { cn } from \"../utils\";\r\n\r\nconst Separator = ({ className }: { className?: string }) => {\r\n return <div className={cn(\"w-full h-px bg-base-4\", className)} />;\r\n};\r\n\r\nexport { Separator };\r\n","import { cn } from \"../utils\";\n\ntype SpinnerProps = {\n loading?: boolean;\n wrapperClassName?: string;\n spinnerClassName?: string;\n};\n\nconst Spinner: React.FC<SpinnerProps> = ({\n loading = true,\n wrapperClassName,\n spinnerClassName,\n}) => {\n return (\n <div className={cn(\"flex justify-center\", wrapperClassName)}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n className={cn({ \"animate-spin\": loading }, spinnerClassName)}\n >\n <path\n fill=\"currentColor\"\n d=\"M10 3a7 7 0 0 0-7 7a.5.5 0 0 1-1 0a8 8 0 1 1 8 8a.5.5 0 0 1 0-1a7 7 0 1 0 0-14Z\"\n />\n </svg>\n </div>\n );\n};\n\nexport { Spinner };\n","import { Check, Plus, X } from \"lucide-react\";\r\nimport { Button, Spinner } from \"../components\";\r\nimport { useState } from \"react\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport const FormSubmit = ({\r\n isEditable,\r\n isDeletable = true,\r\n createUpdateLoading,\r\n deleteLoading,\r\n onDelete,\r\n onDeleteConfirm,\r\n addText = \"Añadir\",\r\n updateText = \"Actualizar\",\r\n deleteText = \"Eliminar\",\r\n className,\r\n}: {\r\n isEditable?: boolean;\r\n isDeletable?: boolean;\r\n createUpdateLoading: boolean;\r\n deleteLoading?: boolean;\r\n onDelete?: () => void;\r\n onDeleteConfirm?: boolean;\r\n addText?: string;\r\n updateText?: string;\r\n deleteText?: string;\r\n className?: string;\r\n}) => {\r\n const [confirm, setConfirm] = useState(false);\r\n\r\n return (\r\n <div className={`w-full grid grid-cols-2 gap-4 col-span-full ${className}`}>\r\n {isEditable && isDeletable ? (\r\n <Button\r\n color=\"dangersolid\"\r\n state={\r\n deleteLoading\r\n ? \"loading\"\r\n : createUpdateLoading\r\n ? \"disabled\"\r\n : \"enabled\"\r\n }\r\n onClick={() => {\r\n if (onDeleteConfirm) {\r\n if (!confirm) {\r\n setConfirm(true);\r\n } else {\r\n onDelete?.();\r\n }\r\n } else {\r\n onDelete?.();\r\n }\r\n }}\r\n >\r\n <X size={18} />\r\n {onDeleteConfirm ? (confirm ? \"Confirmar\" : deleteText) : deleteText}\r\n </Button>\r\n ) : null}\r\n <Button\r\n color=\"brand\"\r\n className={cn(isEditable && isDeletable ? \"\" : \"col-span-2\")}\r\n state={\r\n createUpdateLoading\r\n ? \"loading\"\r\n : deleteLoading\r\n ? \"disabled\"\r\n : \"enabled\"\r\n }\r\n type=\"submit\"\r\n >\r\n {createUpdateLoading ? (\r\n <Spinner />\r\n ) : isEditable ? (\r\n <Check size={18} />\r\n ) : (\r\n <Plus size={18} />\r\n )}\r\n {isEditable ? updateText : addText}\r\n </Button>\r\n </div>\r\n );\r\n};\r\n","import {\r\n createContext,\r\n useContext,\r\n useCallback,\r\n useRef,\r\n ReactNode,\r\n useMemo,\r\n useEffect,\r\n useLayoutEffect,\r\n} from \"react\";\r\nimport { motion } from \"motion/react\";\r\nimport { X } from \"lucide-react\";\r\nimport { useLargeScreen } from \"../hooks\";\r\nimport { Portal } from \"./Portal\";\r\nimport { cn } from \"../utils\";\r\nimport { Button } from \"./Button\";\r\nimport {\r\n navigate,\r\n useInitialChangeEvent,\r\n useRoute,\r\n} from \"@mateosuarezdev/react-router\";\r\n\r\n// if wanted to extend from component\r\n\r\n// interface SuperModalProps extends ComponentPropsWithoutRef<'div'> {\r\n// customProp?: string;\r\n// }\r\n// or\r\n// HTMLProps<HTMLDivElement> &\r\n\r\nimport { animate } from \"motion/react\";\r\n\r\ninterface ModalsContextType {\r\n add: (id: string) => void;\r\n remove: (id: string) => void;\r\n getPrevId: () => string | undefined;\r\n animateParentModal: (el: HTMLElement, mode?: \"modal\" | \"sheet\") => void;\r\n restoreParentModal: (el: HTMLElement) => void;\r\n getModals: () => string[];\r\n}\r\n\r\nconst ModalsContext = createContext<ModalsContextType | undefined>(undefined);\r\n\r\ninterface ModalsProviderProps {\r\n children: ReactNode;\r\n debug?: boolean;\r\n}\r\n\r\nexport const ModalsProvider: React.FC<ModalsProviderProps> = ({\r\n children,\r\n debug = false,\r\n}) => {\r\n const modalsRef = useRef<string[]>([]);\r\n\r\n const add = useCallback(\r\n (id: string) => {\r\n modalsRef.current.push(id);\r\n if (debug) {\r\n console.log(\"Modal\", id, \"added\", modalsRef.current);\r\n }\r\n },\r\n [debug]\r\n );\r\n\r\n const remove = useCallback(\r\n (id: string) => {\r\n modalsRef.current = modalsRef.current.filter((modalId) => modalId !== id);\r\n if (debug) {\r\n console.log(\"Modal\", id, \"removed\", modalsRef.current);\r\n }\r\n },\r\n [debug]\r\n );\r\n\r\n const getPrevId = useCallback((): string | undefined => {\r\n const prevId = modalsRef.current[modalsRef.current.length - 2];\r\n if (debug) {\r\n console.log(\"prev modal id\", prevId);\r\n }\r\n return prevId;\r\n }, [debug]);\r\n\r\n const animateParentModal = useCallback(\r\n (el: HTMLElement, mode: \"modal\" | \"sheet\" = \"modal\") => {\r\n animate(\r\n el,\r\n {\r\n y: mode === \"modal\" ? -30 : -50,\r\n scale: 0.9,\r\n },\r\n {\r\n ease: [0.32, 0.72, 0, 1],\r\n duration: 0.3,\r\n }\r\n );\r\n },\r\n []\r\n );\r\n\r\n const restoreParentModal = useCallback((el: HTMLElement) => {\r\n animate(\r\n el,\r\n {\r\n y: 0,\r\n scale: 1,\r\n },\r\n {\r\n ease: [0.32, 0.72, 0, 1],\r\n duration: 0.2,\r\n }\r\n );\r\n }, []);\r\n\r\n const getModals = useCallback(() => {\r\n return modalsRef.current;\r\n }, []);\r\n\r\n const value: ModalsContextType = {\r\n add,\r\n remove,\r\n getPrevId,\r\n animateParentModal,\r\n restoreParentModal,\r\n getModals,\r\n };\r\n\r\n return (\r\n <ModalsContext.Provider value={value}>{children}</ModalsContext.Provider>\r\n );\r\n};\r\n\r\nexport const useModals = (): ModalsContextType => {\r\n const context = useContext(ModalsContext);\r\n if (context === undefined) {\r\n throw new Error(\"useModals must be used within a ModalsProvider\");\r\n }\r\n return context;\r\n};\r\n\r\ntype SuperModalProps = {\r\n // id: string;\r\n title?: string;\r\n description?: string;\r\n showHeader?: boolean;\r\n mode?: \"modal\" | \"sheet\";\r\n /**\r\n * Where to redirect to if the modal\r\n * is loaded as the first page\r\n * with no previous pathname history\r\n * defaults to auto generated prevPath\r\n */\r\n onReplace?: string;\r\n className?: string;\r\n contentClassName?: string;\r\n children: ReactNode;\r\n};\r\n\r\nconst SuperModal = ({\r\n // id,\r\n title,\r\n description,\r\n showHeader = true,\r\n mode,\r\n onReplace,\r\n className,\r\n contentClassName,\r\n children, // ...others\r\n}: SuperModalProps) => {\r\n const initialChangeEvent = useInitialChangeEvent();\r\n const lg = useLargeScreen();\r\n const parentModal = useRef<HTMLElement | null>(null);\r\n const modals = useModals();\r\n\r\n const { id, prevPath } = useRoute();\r\n\r\n const asModal = useMemo(() => mode === \"modal\" || lg, [mode, lg]);\r\n\r\n useEffect(() => {\r\n modals.add(id);\r\n\r\n const prevModalId = modals.getPrevId();\r\n\r\n if (!prevModalId) return;\r\n\r\n parentModal.current = document.getElementById(prevModalId)!;\r\n\r\n if (!parentModal.current) return;\r\n\r\n if (prevModalId) {\r\n modals.animateParentModal(\r\n parentModal.current,\r\n asModal ? \"modal\" : \"sheet\"\r\n );\r\n }\r\n\r\n //TODO\r\n //! cleanups not running on new router system\r\n //! IDK WHY\r\n // return () => {\r\n // console.log(\"Unmounting\");\r\n // modals.remove(id);\r\n // };\r\n return () => {\r\n console.log(\"IS THIS CLEANUP RUNNING?\");\r\n };\r\n //! NOT RUNNING...\r\n }, [lg]);\r\n\r\n // for some reason the useEffect cleanup not always run\r\n // something to do with the router/outlet system?\r\n useLayoutEffect(() => {\r\n return () => modals.remove(id);\r\n }, []);\r\n\r\n return (\r\n <Portal>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{\r\n opacity: 1,\r\n }}\r\n exit={{ opacity: 0 }}\r\n transition={{\r\n ease: [0.32, 0.72, 0, 1],\r\n duration: 0.3,\r\n }}\r\n onClick={() => {\r\n if (!initialChangeEvent) {\r\n navigate.replace(onReplace ?? prevPath);\r\n } else {\r\n navigate.back();\r\n }\r\n }}\r\n className=\"bg-black/40 absolute w-full h-full left-0 top-0 z-[500]\"\r\n />\r\n <motion.div\r\n id={id}\r\n initial={{\r\n scale: asModal ? 0.8 : undefined,\r\n y: asModal ? undefined : window.innerHeight,\r\n }}\r\n animate={{\r\n scale: 1,\r\n y: asModal ? undefined : 0,\r\n }}\r\n exit={{\r\n scale: asModal ? 0.8 : undefined,\r\n opacity: asModal ? 0 : undefined,\r\n y: asModal ? undefined : window.innerHeight,\r\n }}\r\n transition={{\r\n ease: [0.32, 0.72, 0, 1],\r\n duration: 0.3,\r\n }}\r\n style={{\r\n left: \"50%\",\r\n translateX: \"-50%\",\r\n bottom: asModal ? \"50%\" : 0,\r\n translateY: asModal ? \"50%\" : 0,\r\n height: asModal ? \"65%\" : \"95%\",\r\n }}\r\n onAnimationStart={(def) => {\r\n if (\r\n ((def as any)?.scale === 0.8 || (def as any)?.y > 50) &&\r\n parentModal.current\r\n ) {\r\n modals.restoreParentModal(parentModal.current);\r\n }\r\n }}\r\n className={cn(\r\n \"bg-base-1 absolute w-full lg:max-w-[600px] h-full rounded-6 overflow-hidden z-[500] flex flex-col\",\r\n !asModal && \"rounded-b-none\",\r\n className\r\n )}\r\n // {...others}\r\n >\r\n {showHeader && (\r\n <div className=\"flex items-start justify-between p-4 border-b border-base-3\">\r\n <div>\r\n {title && <p className=\"font-medium text-lg\">{title}</p>}\r\n {description && (\r\n <p className=\"text-base-11 text-xs\">{description}</p>\r\n )}\r\n </div>\r\n <Button\r\n size=\"xs\"\r\n onClick={() => {\r\n if (!initialChangeEvent) {\r\n navigate.replace(onReplace ?? prevPath);\r\n } else {\r\n navigate.back();\r\n }\r\n }}\r\n >\r\n <X size={20} />\r\n </Button>\r\n </div>\r\n )}\r\n <div\r\n id={`${id}-content`}\r\n className={cn(\"grow customscrollbar p-4 pb-6\", contentClassName)}\r\n >\r\n {children}\r\n </div>\r\n </motion.div>\r\n </Portal>\r\n );\r\n};\r\n\r\nexport { SuperModal };\r\n","import { cn } from \"../utils\";\r\nimport { useId } from \"react\";\r\n\r\ninterface SwitchProps {\r\n checked: boolean;\r\n onCheckedChange: (checked: boolean) => void;\r\n disabled?: boolean;\r\n name?: string;\r\n required?: boolean;\r\n className?: string;\r\n}\r\n\r\nfunction Switch({\r\n checked,\r\n onCheckedChange,\r\n disabled = false,\r\n name,\r\n required,\r\n className = \"\",\r\n}: SwitchProps) {\r\n const id = useId();\r\n\r\n const handleClick = () => {\r\n if (disabled) return;\r\n onCheckedChange(!checked);\r\n };\r\n\r\n return (\r\n <button\r\n id={id}\r\n type=\"button\"\r\n role=\"switch\"\r\n aria-checked={checked}\r\n aria-required={required}\r\n data-state={checked ? \"checked\" : \"unchecked\"}\r\n disabled={disabled}\r\n onClick={handleClick}\r\n className={cn(\r\n `relative inline-flex h-[28px] w-[48px] items-center rounded-full\r\n transition-colors duration-200 ease-in-out\r\n focus-visible:outline-none focus-visible:ring-1\r\n focus-visible:ring-base-6`,\r\n checked ? \"bg-brand\" : \"bg-base-3\",\r\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\r\n className\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n `inline-block h-6 w-6 transform rounded-full\r\n transition-transform duration-200 ease-in-out\r\n shadow`,\r\n checked\r\n ? \"bg-brand-text translate-x-[22px]\"\r\n : \"bg-base-1 dark-theme:bg-base-12 translate-x-[2px]\"\r\n )}\r\n />\r\n\r\n {/* Hidden input for form submission */}\r\n {name && (\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n checked={checked}\r\n required={required}\r\n disabled={disabled}\r\n onChange={() => {}} // Controlled by Controller\r\n tabIndex={-1}\r\n aria-hidden=\"true\"\r\n className=\"sr-only\"\r\n />\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\nexport { Switch };\r\n","import { CheckIcon } from \"lucide-react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils\";\r\nimport { Controller, useFormContext } from \"react-hook-form\";\r\n\r\ninterface TagsProps {\r\n label: string;\r\n variant?: \"default\" | \"floating\";\r\n color?: \"solid\" | \"translucent\" | \"outline\";\r\n tags: string[];\r\n onChange: (tags: string[]) => void;\r\n valid?: boolean;\r\n error?: string;\r\n placeholder?: string;\r\n maxTags?: number;\r\n validateTag?: (tag: string) => boolean | string;\r\n}\r\n\r\n// Custom Tag Input Component with accessibility\r\nexport const Tags = ({\r\n label,\r\n variant = \"default\",\r\n color = \"solid\",\r\n tags,\r\n onChange,\r\n valid,\r\n error,\r\n placeholder = \"Add a tag...\",\r\n maxTags,\r\n validateTag,\r\n}: TagsProps) => {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const [isFocused, setIsFocused] = useState(false);\r\n const [localError, setLocalError] = useState<string | null>(null);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tagRefs = useRef<(HTMLDivElement | null)[]>([]);\r\n const hasValue = tags.length > 0;\r\n\r\n // Unique IDs for ARIA attributes\r\n const inputId = useRef(\r\n `taginput-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n const labelId = useRef(\r\n `label-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n const errorId = useRef(\r\n `error-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n\r\n // Set up tag refs\r\n useEffect(() => {\r\n tagRefs.current = tagRefs.current.slice(0, tags.length);\r\n }, [tags.length]);\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"Enter\" && inputValue.trim()) {\r\n e.preventDefault(); // Prevent form submission\r\n\r\n const newTag = inputValue.trim();\r\n\r\n // Check if we've reached the maximum number of tags\r\n if (maxTags && tags.length >= maxTags) {\r\n setLocalError(`Maximum of ${maxTags} tags allowed`);\r\n return;\r\n }\r\n\r\n // Check for duplicates\r\n if (tags.includes(newTag)) {\r\n setLocalError(\"Tag already exists\");\r\n return;\r\n }\r\n\r\n // Custom validation if provided\r\n if (validateTag) {\r\n const validationResult = validateTag(newTag);\r\n if (typeof validationResult === \"string\") {\r\n setLocalError(validationResult);\r\n return;\r\n } else if (validationResult === false) {\r\n setLocalError(\"Invalid tag\");\r\n return;\r\n }\r\n }\r\n\r\n // Add the tag\r\n onChange([...tags, newTag]);\r\n setInputValue(\"\");\r\n setLocalError(null);\r\n\r\n // Announce tag added for screen readers\r\n announceChange(`Added tag ${newTag}`);\r\n } else if (e.key === \"Backspace\" && !inputValue && tags.length > 0) {\r\n // Remove the last tag when backspace is pressed and input is empty\r\n const removedTag = tags[tags.length - 1];\r\n onChange(tags.slice(0, -1));\r\n\r\n // Announce tag removed for screen readers\r\n announceChange(`Removed tag ${removedTag}`);\r\n } else if (e.key === \"ArrowLeft\" && inputValue === \"\" && tags.length > 0) {\r\n // Allow navigating to tags with arrow keys when input is empty\r\n if (tagRefs.current[tags.length - 1]) {\r\n tagRefs.current[tags.length - 1]?.focus();\r\n }\r\n }\r\n };\r\n\r\n // Handle keyboard navigation among tags\r\n const handleTagKeyDown = (e: React.KeyboardEvent, tagIndex: number) => {\r\n if (e.key === \"Backspace\" || e.key === \"Delete\") {\r\n e.preventDefault();\r\n const removedTag = tags[tagIndex];\r\n const newTags = [...tags];\r\n newTags.splice(tagIndex, 1);\r\n onChange(newTags);\r\n\r\n // Focus the input after removing\r\n setTimeout(() => {\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n }, 0);\r\n\r\n announceChange(`Removed tag ${removedTag}`);\r\n } else if (e.key === \"ArrowRight\") {\r\n e.preventDefault();\r\n if (tagIndex < tags.length - 1) {\r\n // Move focus to next tag\r\n tagRefs.current[tagIndex + 1]?.focus();\r\n } else {\r\n // Move to input if at last tag\r\n inputRef.current?.focus();\r\n }\r\n } else if (e.key === \"ArrowLeft\") {\r\n e.preventDefault();\r\n if (tagIndex > 0) {\r\n // Move focus to previous tag\r\n tagRefs.current[tagIndex - 1]?.focus();\r\n }\r\n }\r\n };\r\n\r\n const handleRemoveTag = (tagToRemove: string, tagIndex: number) => {\r\n onChange(tags.filter((tag) => tag !== tagToRemove));\r\n\r\n // Focus appropriately after removing\r\n setTimeout(() => {\r\n if (tagIndex < tags.length - 1) {\r\n // If there are tags after, focus the next tag\r\n tagRefs.current[tagIndex]?.focus();\r\n } else if (tagIndex > 0) {\r\n // Otherwise focus the previous tag\r\n tagRefs.current[tagIndex - 1]?.focus();\r\n } else {\r\n // Otherwise focus the input\r\n inputRef.current?.focus();\r\n }\r\n }, 0);\r\n\r\n announceChange(`Removed tag ${tagToRemove}`);\r\n };\r\n\r\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setInputValue(e.target.value);\r\n setLocalError(null);\r\n };\r\n\r\n const handleContainerClick = () => {\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n };\r\n\r\n // todo\r\n // accessibility announcement\r\n const announceChange = (message: string) => {\r\n // This would ideally use a live region, but for simplicity we'll just use console\r\n // In future, we'd have a visually hidden div with aria-live=\"polite\"\r\n console.log(`Accessibility announcement: ${message}`);\r\n };\r\n\r\n return (\r\n <div>\r\n <div className=\"relative\" ref={containerRef}>\r\n {variant === \"default\" ? (\r\n <label\r\n id={labelId}\r\n htmlFor={inputId}\r\n className={cn(\"text-base top-4 font-semibold left-3\", {\r\n \"text-sm top-2 left-2\": isFocused || hasValue || placeholder,\r\n \"text-red-9\": !!error,\r\n })}\r\n >\r\n {label} {maxTags && `(${tags.length}/${maxTags})`}\r\n </label>\r\n ) : null}\r\n <div\r\n className={cn(\"rounded-6 px-2 transition cursor-text pr-10\", {\r\n \"bg-base-3\": color === \"solid\",\r\n \"border border-uielborder focus-visible:border-transparent\":\r\n color === \"outline\",\r\n \"py-3\": variant === \"default\",\r\n \"pt-5 pb-2\": variant === \"floating\",\r\n \"ring-2 ring-branduielborder\": isFocused,\r\n \"text-red-9\": error || localError,\r\n \"ring-2 ring-red-6\": (error || localError) && isFocused,\r\n })}\r\n // ${\r\n // error || localError ? \"border border-red-500\" : \"\"\r\n // }`}\r\n onClick={handleContainerClick}\r\n role=\"group\"\r\n aria-labelledby={labelId}\r\n aria-describedby={error || localError ? errorId : undefined}\r\n >\r\n {variant === \"floating\" ? (\r\n <label\r\n id={labelId}\r\n htmlFor={inputId}\r\n className={cn(\r\n \"absolute transition-all duration-200 pointer-events-none\",\r\n \"text-base top-4 font-semibold left-3\",\r\n {\r\n \"text-sm top-2 left-2\": isFocused || hasValue || placeholder,\r\n \"text-red-9\": !!error,\r\n }\r\n )}\r\n >\r\n {label} {maxTags && `(${tags.length}/${maxTags})`}\r\n </label>\r\n ) : null}\r\n\r\n <div\r\n className={cn(\"flex flex-wrap gap-1 items-center\", {\r\n \"mt-2.5\": variant === \"floating\",\r\n })}\r\n >\r\n {tags.map((tag, index) => (\r\n <div\r\n key={`${tag}-${index}`}\r\n ref={(el) => {\r\n tagRefs.current[index] = el;\r\n }}\r\n className={cn(\r\n \"line-clamp-1 text-brand rounded-full px-2 text-sm flex items-center\",\r\n {\r\n \"bg-brandfadedbg text-brand\": !error && !localError,\r\n \"bg-red-4 text-red-9\": error || localError,\r\n }\r\n )}\r\n tabIndex={0} // Make tags focusable\r\n role=\"button\"\r\n aria-label={`${tag}, press delete or backspace to remove`}\r\n onKeyDown={(e) => handleTagKeyDown(e, index)}\r\n >\r\n {tag}\r\n <button\r\n type=\"button\"\r\n className=\"ml-1 text-brand hover:text-brandhover shrink-0\"\r\n onClick={() => handleRemoveTag(tag, index)}\r\n aria-label={`Remove ${tag} tag`}\r\n >\r\n x\r\n </button>\r\n </div>\r\n ))}\r\n <input\r\n id={inputId}\r\n ref={inputRef}\r\n type=\"text\"\r\n className=\"flex-grow min-w-[60px] bg-transparent outline-none placeholder:text-sm placeholder:text-secondarytext\"\r\n value={inputValue}\r\n onChange={handleInputChange}\r\n onKeyDown={handleKeyDown}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n enterKeyHint=\"enter\"\r\n autoComplete=\"off\"\r\n placeholder={tags.length > 0 ? \"\" : placeholder}\r\n style={{ width: `${Math.max(60, inputValue.length * 8)}px` }}\r\n aria-describedby={error || localError ? errorId : undefined}\r\n aria-invalid={!!(error || localError)}\r\n />\r\n </div>\r\n </div>\r\n\r\n {valid && (\r\n <span className=\"absolute right-3 top-1/2 transform -translate-y-1/2\">\r\n <CheckIcon />\r\n </span>\r\n )}\r\n </div>\r\n\r\n {(error || localError) && (\r\n <p\r\n id={errorId}\r\n className=\"text-red-500 text-xs mt-1\"\r\n aria-live=\"assertive\"\r\n >\r\n {error || localError}\r\n </p>\r\n )}\r\n\r\n {/* {maxTags && !error && !localError && (\r\n <p className=\"text-secondarytext text-xs ml-0.5 mt-1\">\r\n {tags.length} / {maxTags} tags\r\n </p>\r\n )} */}\r\n\r\n {/* Visually hidden live region for announcements */}\r\n <div className=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {tags.length > 0\r\n ? `Current tags: ${tags.join(\", \")}`\r\n : \"No tags added yet\"}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\ntype FormTagsProps = Omit<TagsProps, \"tags\" | \"onChange\"> & {\r\n name: string;\r\n};\r\n\r\nexport const FormTags = ({ name, ...others }: FormTagsProps) => {\r\n const { control } = useFormContext();\r\n\r\n if (!control) {\r\n console.error(`Form control is missing for field: ${name}`);\r\n return <p>Form control missing for field: {name}</p>;\r\n }\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => {\r\n return (\r\n <Tags\r\n tags={field.value}\r\n onChange={(tags) => field.onChange(tags)}\r\n error={fieldState.error?.message}\r\n {...others}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import {\r\n TextareaHTMLAttributes,\r\n forwardRef,\r\n useCallback,\r\n useState,\r\n} from \"react\";\r\nimport { cn } from \"../utils\";\r\nimport { nullRead, nullSet } from \"../utils\";\r\nimport { Controller, useFormContext } from \"react-hook-form\";\r\n\r\n// Types\r\ninterface TextAreaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\r\n label: string;\r\n labelPosition?: \"default\" | \"floating\";\r\n error?: boolean;\r\n focusColor?: \"solid\" | \"brand\";\r\n}\r\n\r\nconst focusColors = {\r\n brand: \"ring-1 ring-brand\",\r\n solid: \"ring-1 ring-base-6\",\r\n};\r\n\r\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\r\n (\r\n {\r\n label,\r\n labelPosition = \"default\",\r\n placeholder,\r\n error,\r\n focusColor = \"brand\",\r\n className,\r\n value,\r\n rows = 3,\r\n ...props\r\n },\r\n forwardedRef\r\n ) => {\r\n const [isFocused, setIsFocused] = useState(false);\r\n const hasValue = value !== \"\" && value !== null && value !== undefined;\r\n\r\n return (\r\n <div className=\"relative\">\r\n {labelPosition === \"default\" ? (\r\n <label\r\n className={cn(\r\n \"top-[18px] font-medium ml-0.5 text-xs\",\r\n error && \"text-red-9\"\r\n )}\r\n >\r\n {label}\r\n </label>\r\n ) : null}\r\n <div\r\n className={cn(labelPosition === \"default\" ? \"p-0\" : \"pt-5 pb-2\", {\r\n \"bg-red-4 text-red-9\": !!error,\r\n })}\r\n >\r\n {labelPosition === \"floating\" && (\r\n <label\r\n className={cn(\r\n \"absolute transition-all duration-200 pointer-events-none\",\r\n \"text-sm top-2.5 font-semibold left-2.5\",\r\n {\r\n \"text-xs top-2.5\": isFocused || hasValue || placeholder,\r\n \"text-red-9\": !!error,\r\n }\r\n )}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n <textarea\r\n ref={forwardedRef}\r\n className={cn(\r\n !error && isFocused && focusColors[focusColor],\r\n \"bg-base-3 border border-base-4 light-theme:drop-shadow-sm rounded-6 w-full focus-visible:outline-none customscrollbarnohide\",\r\n \"placeholder:text-base-11 text-sm\",\r\n \"resize-none\", // Prevent manual resizing since we're auto-resizing\r\n labelPosition === \"default\" ? \"p-3\" : \"mt-1\",\r\n {\r\n // \"pr-10\": valid,\r\n \"text-red-9 placeholder:text-red-9\": !!error,\r\n },\r\n className\r\n )}\r\n value={value}\r\n placeholder={placeholder}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n rows={rows}\r\n {...props}\r\n />\r\n </div>\r\n\r\n {/* {valid && (\r\n <CheckIcon\r\n size={16}\r\n className=\"absolute top-6 right-3 text-green-9\"\r\n />\r\n )} */}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\n// Add display name for better debugging\r\nTextArea.displayName = \"TextArea\";\r\n\r\nexport const FormTextArea = ({\r\n name,\r\n customRead,\r\n customSet,\r\n ...others\r\n}: {\r\n name: string;\r\n customRead?: (value: string | null) => string;\r\n customSet?: (value: string) => string | null | undefined;\r\n} & TextAreaProps) => {\r\n const { control } = useFormContext();\r\n\r\n const readValue = useCallback(\r\n (value: string | null) => {\r\n if (customRead) {\r\n return customRead(value);\r\n } else if (value === null) {\r\n return nullRead(value);\r\n }\r\n return value;\r\n },\r\n [customRead]\r\n );\r\n\r\n const setValue = useCallback(\r\n (value: string) => {\r\n if (customSet) {\r\n return customSet(value);\r\n } else if (value === null) {\r\n return nullSet(value);\r\n }\r\n return value;\r\n },\r\n [customSet]\r\n );\r\n\r\n if (!control) {\r\n console.error(`Form control is missing for field: ${name}`);\r\n return <p>Form control missing for field: {name}</p>;\r\n }\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => {\r\n return (\r\n <div>\r\n <TextArea\r\n value={readValue(field.value)}\r\n onChange={(e) => field.onChange(setValue(e.target.value))}\r\n error={!!fieldState.error}\r\n // Pass the ref from React Hook Form\r\n ref={field.ref}\r\n {...others}\r\n />\r\n {fieldState.error ? (\r\n <span role=\"alert\" className=\"text-red-9 text-sm mt-1 ml-0.5\">\r\n {fieldState.error.message}\r\n </span>\r\n ) : null}\r\n </div>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","/**\r\n * Absolute coordinate positions adjusted for scroll.\r\n */\r\ninterface Coordinates {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\n/**\r\n * Allows start/stop control of the animation\r\n */\r\nexport interface AnimationController<P = unknown> {\r\n /**\r\n * The original animation parent.\r\n */\r\n readonly parent: Element;\r\n /**\r\n * A function that enables future animations.\r\n */\r\n enable: () => void;\r\n /**\r\n * A function that disables future animations.\r\n */\r\n disable: () => void;\r\n /**\r\n * A function that returns true if the animations are currently enabled.\r\n */\r\n isEnabled: () => boolean;\r\n /**\r\n * (Svelte Specific) A function that runs if the parameters are changed.\r\n */\r\n update?: (newParams: P) => void;\r\n /**\r\n * (Svelte Specific) A function that runs when the component is removed from the DOM.\r\n */\r\n destroy?: () => void;\r\n}\r\n\r\n/**\r\n * A set of all the parents currently being observe. This is the only non weak\r\n * registry.\r\n */\r\nconst parents = new Set<Element>();\r\n/**\r\n * Element coordinates that is constantly kept up to date.\r\n */\r\nconst coords = new WeakMap<Element, Coordinates>();\r\n/**\r\n * Siblings of elements that have been removed from the dom.\r\n */\r\nconst siblings = new WeakMap<Element, [prev: Node | null, next: Node | null]>();\r\n/**\r\n * Animations that are currently running.\r\n */\r\nconst animations = new WeakMap<Element, Animation>();\r\n/**\r\n * A map of existing intersection observers used to track element movements.\r\n */\r\nconst intersections = new WeakMap<Element, IntersectionObserver>();\r\n/**\r\n * A map of existing mutation observers used to track element movements.\r\n */\r\nconst mutationObservers = new WeakMap<Element, MutationObserver>();\r\n/**\r\n * Intervals for automatically checking the position of elements occasionally.\r\n */\r\nconst intervals = new WeakMap<Element, NodeJS.Timeout>();\r\n/**\r\n * The configuration options for each group of elements.\r\n */\r\nconst options = new WeakMap<\r\n Element,\r\n AutoAnimateOptions | AutoAnimationPlugin\r\n>();\r\n/**\r\n * Debounce counters by id, used to debounce calls to update positions.\r\n */\r\nconst debounces = new WeakMap<Element, NodeJS.Timeout>();\r\n/**\r\n * All parents that are currently enabled are tracked here.\r\n */\r\nconst enabled = new WeakSet<Element>();\r\n/**\r\n * The document used to calculate transitions.\r\n */\r\nlet root: HTMLElement;\r\n\r\n/**\r\n * The root’s XY scroll positions.\r\n */\r\nlet scrollX = 0;\r\nlet scrollY = 0;\r\n/**\r\n * Used to sign an element as the target.\r\n */\r\nconst TGT = \"__aa_tgt\";\r\n/**\r\n * Used to sign an element as being part of a removal.\r\n */\r\nconst DEL = \"__aa_del\";\r\n/**\r\n * Used to sign an element as being \"new\". When an element is removed from the\r\n * dom, but may cycle back in we can sign it with new to ensure the next time\r\n * it is recognized we consider it new.\r\n */\r\nconst NEW = \"__aa_new\";\r\n\r\n/**\r\n * Callback for handling all mutations.\r\n * @param mutations - A mutation list\r\n */\r\nconst handleMutations: MutationCallback = (mutations) => {\r\n const elements = getElements(mutations);\r\n // If elements is \"false\" that means this mutation that should be ignored.\r\n if (elements) {\r\n elements.forEach((el) => animate(el));\r\n }\r\n};\r\n\r\n/**\r\n *\r\n * @param entries - Elements that have been resized.\r\n */\r\nconst handleResizes: ResizeObserverCallback = (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.target === root) updateAllPos();\r\n if (coords.has(entry.target)) updatePos(entry.target);\r\n });\r\n};\r\n\r\n/**\r\n * Determine if an element is fully outside of the current viewport.\r\n * @param el - Element to test\r\n */\r\nfunction isOffscreen(el: Element): boolean {\r\n const rect = (el as HTMLElement).getBoundingClientRect();\r\n const vw = root?.clientWidth || 0;\r\n const vh = root?.clientHeight || 0;\r\n return rect.bottom < 0 || rect.top > vh || rect.right < 0 || rect.left > vw;\r\n}\r\n\r\n/**\r\n * Observe this elements position.\r\n * @param el - The element to observe the position of.\r\n */\r\nfunction observePosition(el: Element) {\r\n const oldObserver = intersections.get(el);\r\n oldObserver?.disconnect();\r\n let rect = coords.get(el);\r\n let invocations = 0;\r\n const buffer = 5;\r\n if (!rect) {\r\n rect = getCoords(el);\r\n coords.set(el, rect);\r\n }\r\n const { offsetWidth, offsetHeight } = root;\r\n const rootMargins = [\r\n rect.top - buffer,\r\n offsetWidth - (rect.left + buffer + rect.width),\r\n offsetHeight - (rect.top + buffer + rect.height),\r\n rect.left - buffer,\r\n ];\r\n const rootMargin = rootMargins\r\n .map((px) => `${-1 * Math.floor(px)}px`)\r\n .join(\" \");\r\n const observer = new IntersectionObserver(\r\n () => {\r\n ++invocations > 1 && updatePos(el);\r\n },\r\n {\r\n root,\r\n threshold: 1,\r\n rootMargin,\r\n }\r\n );\r\n observer.observe(el);\r\n intersections.set(el, observer);\r\n}\r\n\r\n/**\r\n * Update the exact position of a given element.\r\n * @param el - An element to update the position of.\r\n * @param debounce - Whether or not to debounce the update. After an animation is finished, it should update as soon as possible to prevent flickering on quick toggles.\r\n */\r\nfunction updatePos(el: Element, debounce = true) {\r\n clearTimeout(debounces.get(el));\r\n const optionsOrPlugin = getOptions(el);\r\n const delay = debounce\r\n ? isPlugin(optionsOrPlugin)\r\n ? 500\r\n : optionsOrPlugin.duration\r\n : 0;\r\n debounces.set(\r\n el,\r\n setTimeout(async () => {\r\n const currentAnimation = animations.get(el);\r\n\r\n try {\r\n await currentAnimation?.finished;\r\n\r\n coords.set(el, getCoords(el));\r\n observePosition(el);\r\n } catch {\r\n // ignore errors as the `.finished` promise is rejected when animations were cancelled\r\n }\r\n }, delay)\r\n );\r\n}\r\n\r\n/**\r\n * Updates all positions that are currently being tracked.\r\n */\r\nfunction updateAllPos() {\r\n clearTimeout(debounces.get(root));\r\n debounces.set(\r\n root,\r\n setTimeout(() => {\r\n parents.forEach((parent) =>\r\n forEach(parent, (el) => lowPriority(() => updatePos(el)))\r\n );\r\n }, 100)\r\n );\r\n}\r\n\r\n/**\r\n * Its possible for a quick scroll or other fast events to get past the\r\n * intersection observer, so occasionally we need want \"cold-poll\" for the\r\n * latests and greatest position. We try to do this in the most non-disruptive\r\n * fashion possible. First we only do this ever couple seconds, staggard by a\r\n * random offset.\r\n * @param el - Element\r\n */\r\nfunction poll(el: Element) {\r\n setTimeout(() => {\r\n intervals.set(\r\n el,\r\n setInterval(() => lowPriority(updatePos.bind(null, el)), 2000)\r\n );\r\n }, Math.round(2000 * Math.random()));\r\n}\r\n\r\n/**\r\n * Perform some operation that is non critical at some point.\r\n * @param callback\r\n */\r\nfunction lowPriority(callback: CallableFunction) {\r\n if (typeof requestIdleCallback === \"function\") {\r\n requestIdleCallback(() => callback());\r\n } else {\r\n requestAnimationFrame(() => callback());\r\n }\r\n}\r\n\r\n/**\r\n * The mutation observer responsible for watching each root element.\r\n */\r\n//@ts-ignore\r\nlet mutations: MutationObserver | undefined;\r\n\r\n/**\r\n * A resize observer, responsible for recalculating elements on resize.\r\n */\r\nlet resize: ResizeObserver | undefined;\r\n\r\n/**\r\n * Ensure the browser is supported.\r\n */\r\nconst supportedBrowser =\r\n typeof window !== \"undefined\" && \"ResizeObserver\" in window;\r\n\r\n/**\r\n * If this is in a browser, initialize our Web APIs\r\n */\r\nif (supportedBrowser) {\r\n root = document.documentElement;\r\n mutations = new MutationObserver(handleMutations);\r\n resize = new ResizeObserver(handleResizes);\r\n window.addEventListener(\"scroll\", () => {\r\n scrollY = window.scrollY;\r\n scrollX = window.scrollX;\r\n });\r\n resize.observe(root);\r\n}\r\n/**\r\n * Retrieves all the elements that may have been affected by the last mutation\r\n * including ones that have been removed and are no longer in the DOM.\r\n * @param mutations - A mutation list.\r\n * @returns\r\n */\r\nfunction getElements(mutations: MutationRecord[]): Set<Element> | false {\r\n const observedNodes = mutations.reduce((nodes: Node[], mutation) => {\r\n return [\r\n ...nodes,\r\n ...Array.from(mutation.addedNodes),\r\n ...Array.from(mutation.removedNodes),\r\n ];\r\n }, []);\r\n // Short circuit if _only_ comment nodes are observed\r\n const onlyCommentNodesObserved = observedNodes.every(\r\n (node) => node.nodeName === \"#comment\"\r\n );\r\n\r\n if (onlyCommentNodesObserved) return false;\r\n\r\n return mutations.reduce((elements: Set<Element> | false, mutation) => {\r\n // Short circuit if we find a purposefully deleted node.\r\n if (elements === false) return false;\r\n\r\n if (mutation.target instanceof Element) {\r\n target(mutation.target);\r\n if (!elements.has(mutation.target)) {\r\n elements.add(mutation.target);\r\n for (let i = 0; i < mutation.target.children.length; i++) {\r\n const child = mutation.target.children.item(i);\r\n if (!child) continue;\r\n if (DEL in child) {\r\n return false;\r\n }\r\n target(mutation.target, child);\r\n elements.add(child);\r\n }\r\n }\r\n if (mutation.removedNodes.length) {\r\n for (let i = 0; i < mutation.removedNodes.length; i++) {\r\n const child = mutation.removedNodes[i];\r\n if (DEL in child) {\r\n return false;\r\n }\r\n if (child instanceof Element) {\r\n elements.add(child);\r\n target(mutation.target, child);\r\n siblings.set(child, [\r\n mutation.previousSibling,\r\n mutation.nextSibling,\r\n ]);\r\n }\r\n }\r\n }\r\n }\r\n return elements;\r\n }, new Set<Element>());\r\n}\r\n\r\n/**\r\n * Assign the target to an element.\r\n * @param el - The root element\r\n * @param child\r\n */\r\nfunction target(el: Element, child?: Element) {\r\n if (!child && !(TGT in el)) Object.defineProperty(el, TGT, { value: el });\r\n else if (child && !(TGT in child))\r\n Object.defineProperty(child, TGT, { value: el });\r\n}\r\n\r\n/**\r\n * Determines what kind of change took place on the given element and then\r\n * performs the proper animation based on that.\r\n * @param el - The specific element to animate.\r\n */\r\nfunction animate(el: Element) {\r\n const isMounted = el.isConnected;\r\n const preExisting = coords.has(el);\r\n if (isMounted && siblings.has(el)) siblings.delete(el);\r\n\r\n if (animations.get(el)?.playState !== \"finished\") {\r\n animations.get(el)?.cancel();\r\n }\r\n if (NEW in el) {\r\n add(el);\r\n } else if (preExisting && isMounted) {\r\n remain(el);\r\n } else if (preExisting && !isMounted) {\r\n remove(el);\r\n } else {\r\n add(el);\r\n }\r\n}\r\n\r\n/**\r\n * Removes all non-digits from a string and casts to a number.\r\n * @param str - A string containing a pixel value.\r\n * @returns\r\n */\r\nfunction raw(str: string): number {\r\n return Number(str.replace(/[^0-9.\\-]/g, \"\"));\r\n}\r\n\r\n/**\r\n * Get the scroll offset of elements\r\n * @param el - Element\r\n * @returns\r\n */\r\nfunction getScrollOffset(el: Element) {\r\n let p = el.parentElement;\r\n while (p) {\r\n if (p.scrollLeft || p.scrollTop) {\r\n return { x: p.scrollLeft, y: p.scrollTop };\r\n }\r\n p = p.parentElement;\r\n }\r\n return { x: 0, y: 0 };\r\n}\r\n\r\n/**\r\n * Get the coordinates of elements adjusted for scroll position.\r\n * @param el - Element\r\n * @returns\r\n */\r\nfunction getCoords(el: Element): Coordinates {\r\n const rect = el.getBoundingClientRect();\r\n const { x, y } = getScrollOffset(el);\r\n return {\r\n top: rect.top + y,\r\n left: rect.left + x,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n}\r\n\r\n/**\r\n * Returns the width/height that the element should be transitioned between.\r\n * This takes into account box-sizing.\r\n * @param el - Element being animated\r\n * @param oldCoords - Old set of Coordinates coordinates\r\n * @param newCoords - New set of Coordinates coordinates\r\n * @returns\r\n */\r\nexport function getTransitionSizes(\r\n el: Element,\r\n oldCoords: Coordinates,\r\n newCoords: Coordinates\r\n) {\r\n let widthFrom = oldCoords.width;\r\n let heightFrom = oldCoords.height;\r\n let widthTo = newCoords.width;\r\n let heightTo = newCoords.height;\r\n const styles = getComputedStyle(el);\r\n const sizing = styles.getPropertyValue(\"box-sizing\");\r\n\r\n if (sizing === \"content-box\") {\r\n const paddingY =\r\n raw(styles.paddingTop) +\r\n raw(styles.paddingBottom) +\r\n raw(styles.borderTopWidth) +\r\n raw(styles.borderBottomWidth);\r\n const paddingX =\r\n raw(styles.paddingLeft) +\r\n raw(styles.paddingRight) +\r\n raw(styles.borderRightWidth) +\r\n raw(styles.borderLeftWidth);\r\n widthFrom -= paddingX;\r\n widthTo -= paddingX;\r\n heightFrom -= paddingY;\r\n heightTo -= paddingY;\r\n }\r\n\r\n return [widthFrom, widthTo, heightFrom, heightTo].map(Math.round);\r\n}\r\n\r\n/**\r\n * Retrieves animation options for the current element.\r\n * @param el - Element to retrieve options for.\r\n * @returns\r\n */\r\nfunction getOptions(el: Element): AutoAnimateOptions | AutoAnimationPlugin {\r\n return TGT in el && options.has((el as Element & { __aa_tgt: Element })[TGT])\r\n ? options.get((el as Element & { __aa_tgt: Element })[TGT])!\r\n : { duration: 250, easing: \"ease-in-out\" };\r\n}\r\n\r\n/**\r\n * Returns the target of a given animation (generally the parent).\r\n * @param el - An element to check for a target\r\n * @returns\r\n */\r\nfunction getTarget(el: Element): Element | undefined {\r\n if (TGT in el) return (el as Element & { __aa_tgt: Element })[TGT];\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Checks if animations are enabled or disabled for a given element.\r\n * @param el - Any element\r\n * @returns\r\n */\r\nfunction isEnabled(el: Element): boolean {\r\n const target = getTarget(el);\r\n return target ? enabled.has(target) : false;\r\n}\r\n\r\n/**\r\n * Iterate over the children of a given parent.\r\n * @param parent - A parent element\r\n * @param callback - A callback\r\n */\r\nfunction forEach(\r\n parent: Element,\r\n ...callbacks: Array<(el: Element, isRoot?: boolean) => void>\r\n) {\r\n callbacks.forEach((callback) => callback(parent, options.has(parent)));\r\n for (let i = 0; i < parent.children.length; i++) {\r\n const child = parent.children.item(i);\r\n if (child) {\r\n callbacks.forEach((callback) => callback(child, options.has(child)));\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Always return tuple to provide consistent interface\r\n */\r\nfunction getPluginTuple(\r\n pluginReturn: ReturnType<AutoAnimationPlugin>\r\n): [KeyframeEffect, AutoAnimationPluginOptions] | [KeyframeEffect] {\r\n if (Array.isArray(pluginReturn)) return pluginReturn;\r\n\r\n return [pluginReturn];\r\n}\r\n\r\n/**\r\n * Determine if config is plugin\r\n */\r\nfunction isPlugin(\r\n config: Partial<AutoAnimateOptions> | AutoAnimationPlugin\r\n): config is AutoAnimationPlugin {\r\n return typeof config === \"function\";\r\n}\r\n\r\n/**\r\n * The element in question is remaining in the DOM.\r\n * @param el - Element to flip\r\n * @returns\r\n */\r\nfunction remain(el: Element) {\r\n const oldCoords = coords.get(el);\r\n const newCoords = getCoords(el);\r\n if (!isEnabled(el)) return coords.set(el, newCoords);\r\n if (isOffscreen(el)) {\r\n // When element is offscreen, skip FLIP to avoid broken transforms\r\n coords.set(el, newCoords);\r\n observePosition(el);\r\n return;\r\n }\r\n let animation: Animation;\r\n if (!oldCoords) return;\r\n const pluginOrOptions = getOptions(el);\r\n if (typeof pluginOrOptions !== \"function\") {\r\n let deltaLeft = oldCoords.left - newCoords.left;\r\n let deltaTop = oldCoords.top - newCoords.top;\r\n const deltaRight =\r\n oldCoords.left + oldCoords.width - (newCoords.left + newCoords.width);\r\n const deltaBottom =\r\n oldCoords.top + oldCoords.height - (newCoords.top + newCoords.height);\r\n\r\n // element is probably anchored and doesn't need to be offset\r\n if (deltaBottom == 0) deltaTop = 0;\r\n if (deltaRight == 0) deltaLeft = 0;\r\n\r\n const [widthFrom, widthTo, heightFrom, heightTo] = getTransitionSizes(\r\n el,\r\n oldCoords,\r\n newCoords\r\n );\r\n const start: Record<string, any> = {\r\n transform: `translate(${deltaLeft}px, ${deltaTop}px)`,\r\n };\r\n const end: Record<string, any> = {\r\n transform: `translate(0, 0)`,\r\n };\r\n if (widthFrom !== widthTo) {\r\n start.width = `${widthFrom}px`;\r\n end.width = `${widthTo}px`;\r\n }\r\n if (heightFrom !== heightTo) {\r\n start.height = `${heightFrom}px`;\r\n end.height = `${heightTo}px`;\r\n }\r\n animation = el.animate([start, end], {\r\n duration: (pluginOrOptions as AutoAnimateOptions).duration,\r\n easing: (pluginOrOptions as AutoAnimateOptions).easing,\r\n });\r\n } else {\r\n const [keyframes] = getPluginTuple(\r\n pluginOrOptions(el, \"remain\", oldCoords, newCoords)\r\n );\r\n animation = new Animation(keyframes);\r\n animation.play();\r\n }\r\n animations.set(el, animation);\r\n coords.set(el, newCoords);\r\n animation.addEventListener(\"finish\", updatePos.bind(null, el, false), {\r\n once: true,\r\n });\r\n}\r\n\r\n/**\r\n * Adds the element with a transition.\r\n * @param el - Animates the element being added.\r\n */\r\nfunction add(el: Element) {\r\n if (NEW in el) delete (el as any)[NEW];\r\n const newCoords = getCoords(el);\r\n coords.set(el, newCoords);\r\n const pluginOrOptions = getOptions(el);\r\n if (!isEnabled(el)) return;\r\n if (isOffscreen(el)) {\r\n // Skip entry animation if element is not visible in viewport\r\n observePosition(el);\r\n return;\r\n }\r\n let animation: Animation;\r\n if (typeof pluginOrOptions !== \"function\") {\r\n animation = (el as HTMLElement).animate(\r\n [\r\n { transform: \"scale(.98)\", opacity: 0 },\r\n { transform: \"scale(0.98)\", opacity: 0, offset: 0.5 },\r\n { transform: \"scale(1)\", opacity: 1 },\r\n ],\r\n {\r\n duration: (pluginOrOptions as AutoAnimateOptions).duration * 1.5,\r\n easing: \"ease-in\",\r\n }\r\n );\r\n } else {\r\n const [keyframes] = getPluginTuple(pluginOrOptions(el, \"add\", newCoords));\r\n animation = new Animation(keyframes);\r\n animation.play();\r\n }\r\n animations.set(el, animation);\r\n animation.addEventListener(\"finish\", updatePos.bind(null, el, false), {\r\n once: true,\r\n });\r\n}\r\n\r\n/**\r\n * Clean up after removing an element from the dom.\r\n * @param el - Element being removed\r\n * @param styles - Optional styles that should be removed from the element.\r\n */\r\nfunction cleanUp(el: Element, styles?: Partial<CSSStyleDeclaration>) {\r\n el.remove();\r\n coords.delete(el);\r\n siblings.delete(el);\r\n animations.delete(el);\r\n intersections.get(el)?.disconnect();\r\n setTimeout(() => {\r\n if (DEL in el) delete (el as any)[DEL];\r\n Object.defineProperty(el, NEW, { value: true, configurable: true });\r\n if (styles && el instanceof HTMLElement) {\r\n for (const style in styles) {\r\n (el.style as any)[style as any] = \"\";\r\n }\r\n }\r\n }, 0);\r\n}\r\n\r\n/**\r\n * Animates the removal of an element.\r\n * @param el - Element to remove\r\n */\r\nfunction remove(el: Element) {\r\n if (!siblings.has(el) || !coords.has(el)) return;\r\n\r\n const [prev, next] = siblings.get(el)!;\r\n Object.defineProperty(el, DEL, { value: true, configurable: true });\r\n const finalX = window.scrollX;\r\n const finalY = window.scrollY;\r\n\r\n if (\r\n next &&\r\n (next.parentNode as any) &&\r\n (next.parentNode as any) instanceof Element\r\n ) {\r\n (next.parentNode as Element).insertBefore(el, next);\r\n } else if (prev && (prev.parentNode as any)) {\r\n (prev.parentNode as Element).appendChild(el);\r\n } else {\r\n getTarget(el)?.appendChild(el);\r\n }\r\n if (!isEnabled(el)) return cleanUp(el);\r\n\r\n const [top, left, width, height] = deletePosition(el);\r\n const optionsOrPlugin = getOptions(el);\r\n const oldCoords = coords.get(el)!;\r\n if (finalX !== scrollX || finalY !== scrollY) {\r\n adjustScroll(el, finalX, finalY, optionsOrPlugin);\r\n }\r\n\r\n let animation: Animation;\r\n let styleReset: Partial<CSSStyleDeclaration> = {\r\n position: \"absolute\",\r\n top: `${top}px`,\r\n left: `${left}px`,\r\n width: `${width}px`,\r\n height: `${height}px`,\r\n margin: \"0\",\r\n pointerEvents: \"none\",\r\n transformOrigin: \"center\",\r\n zIndex: \"100\",\r\n };\r\n\r\n if (!isPlugin(optionsOrPlugin)) {\r\n Object.assign((el as HTMLElement).style, styleReset);\r\n animation = (el as HTMLElement).animate(\r\n [\r\n {\r\n transform: \"scale(1)\",\r\n opacity: 1,\r\n },\r\n {\r\n transform: \"scale(.98)\",\r\n opacity: 0,\r\n },\r\n ],\r\n {\r\n duration: (optionsOrPlugin as AutoAnimateOptions).duration,\r\n easing: \"ease-out\",\r\n }\r\n );\r\n } else {\r\n const [keyframes, options] = getPluginTuple(\r\n (optionsOrPlugin as AutoAnimationPlugin)(el, \"remove\", oldCoords)\r\n );\r\n if (\r\n (options as AutoAnimationPluginOptions | undefined)?.styleReset !== false\r\n ) {\r\n styleReset =\r\n (options as AutoAnimationPluginOptions | undefined)?.styleReset ||\r\n styleReset;\r\n Object.assign((el as HTMLElement).style, styleReset);\r\n }\r\n animation = new Animation(keyframes);\r\n animation.play();\r\n }\r\n animations.set(el, animation);\r\n animation.addEventListener(\"finish\", () => cleanUp(el, styleReset), {\r\n once: true,\r\n });\r\n}\r\n\r\n/**\r\n * If the element being removed is at the very bottom of the page, and the\r\n * the page was scrolled into a space being \"made available\" by the element\r\n * that was removed, the page scroll will have jumped up some amount. We need\r\n * to offset the jump by the amount that the page was \"automatically\" scrolled\r\n * up. We can do this by comparing the scroll position before and after the\r\n * element was removed, and then offsetting by that amount.\r\n *\r\n * @param el - The element being deleted\r\n * @param finalX - The final X scroll position\r\n * @param finalY - The final Y scroll position\r\n * @param optionsOrPlugin - The options or plugin\r\n * @returns\r\n */\r\nfunction adjustScroll(\r\n el: Element,\r\n finalX: number,\r\n finalY: number,\r\n optionsOrPlugin: AutoAnimateOptions | AutoAnimationPlugin\r\n) {\r\n const scrollDeltaX = scrollX - finalX;\r\n const scrollDeltaY = scrollY - finalY;\r\n const scrollBefore = document.documentElement.style.scrollBehavior;\r\n const scrollBehavior = getComputedStyle(root).scrollBehavior;\r\n if (scrollBehavior === \"smooth\") {\r\n document.documentElement.style.scrollBehavior = \"auto\";\r\n }\r\n window.scrollTo(window.scrollX + scrollDeltaX, window.scrollY + scrollDeltaY);\r\n if (!(el as any).parentElement) return;\r\n const parent = (el as HTMLElement).parentElement!;\r\n let lastHeight = parent.clientHeight;\r\n let lastWidth = parent.clientWidth;\r\n const startScroll = performance.now();\r\n // Here we use a manual scroll animation to keep the element using the same\r\n // easing and timing as the parent’s scroll animation.\r\n function smoothScroll() {\r\n requestAnimationFrame(() => {\r\n if (!isPlugin(optionsOrPlugin)) {\r\n const deltaY = lastHeight - parent.clientHeight;\r\n const deltaX = lastWidth - parent.clientWidth;\r\n if (\r\n startScroll + (optionsOrPlugin as AutoAnimateOptions).duration >\r\n performance.now()\r\n ) {\r\n window.scrollTo({\r\n left: window.scrollX - (deltaX as number),\r\n top: window.scrollY - (deltaY as number),\r\n });\r\n lastHeight = parent.clientHeight;\r\n lastWidth = parent.clientWidth;\r\n smoothScroll();\r\n } else {\r\n document.documentElement.style.scrollBehavior = scrollBefore;\r\n }\r\n }\r\n });\r\n }\r\n smoothScroll();\r\n}\r\n\r\n/**\r\n * Determines the position of the element being removed.\r\n * @param el - The element being deleted\r\n * @returns\r\n */\r\nfunction deletePosition(\r\n el: Element\r\n): [top: number, left: number, width: number, height: number] {\r\n const oldCoords = coords.get(el)!;\r\n const [width, , height] = getTransitionSizes(el, oldCoords, getCoords(el));\r\n\r\n let offsetParent: Element | null = (el as HTMLElement).parentElement;\r\n while (\r\n offsetParent &&\r\n (getComputedStyle(offsetParent).position === \"static\" ||\r\n offsetParent instanceof HTMLBodyElement)\r\n ) {\r\n offsetParent = (offsetParent as HTMLElement).parentElement;\r\n }\r\n if (!offsetParent) offsetParent = document.body;\r\n const parentStyles = getComputedStyle(offsetParent);\r\n const parentCoords =\r\n !animations.has(el) || animations.get(el)?.playState === \"finished\"\r\n ? getCoords(offsetParent)\r\n : coords.get(offsetParent)!;\r\n\r\n const top =\r\n Math.round(oldCoords.top - parentCoords.top) -\r\n raw(parentStyles.borderTopWidth);\r\n const left =\r\n Math.round(oldCoords.left - parentCoords.left) -\r\n raw(parentStyles.borderLeftWidth);\r\n return [top, left, width, height];\r\n}\r\n\r\nexport interface AutoAnimateOptions {\r\n /**\r\n * The time it takes to run a single sequence of animations in milliseconds.\r\n */\r\n duration: number;\r\n /**\r\n * The type of easing to use.\r\n * Default: ease-in-out\r\n */\r\n easing: \"linear\" | \"ease-in\" | \"ease-out\" | \"ease-in-out\" | ({} & string);\r\n /**\r\n * Ignore a user’s \"reduce motion\" setting and enable animations. It is not\r\n * recommended to use this.\r\n */\r\n disrespectUserMotionPreference?: boolean;\r\n}\r\n\r\n/**\r\n * A custom plugin config object\r\n */\r\nexport interface AutoAnimationPluginOptions {\r\n // provide your own css styles or disable style reset\r\n styleReset: CSSStyleDeclaration | false;\r\n}\r\n\r\n/**\r\n * A custom plugin that determines what the effects to run\r\n */\r\nexport interface AutoAnimationPlugin {\r\n <T extends \"add\" | \"remove\" | \"remain\">(\r\n el: Element,\r\n action: T,\r\n newCoordinates?: T extends \"add\" | \"remain\" | \"remove\"\r\n ? Coordinates\r\n : undefined,\r\n oldCoordinates?: T extends \"remain\" ? Coordinates : undefined\r\n ): KeyframeEffect | [KeyframeEffect, AutoAnimationPluginOptions];\r\n}\r\n\r\n/**\r\n * A function that automatically adds animation effects to itself and its\r\n * immediate children. Specifically it adds effects for adding, moving, and\r\n * removing DOM elements.\r\n * @param el - A parent element to add animations to.\r\n * @param options - An optional object of options.\r\n */\r\nexport default function autoAnimate(\r\n el: HTMLElement,\r\n config: Partial<AutoAnimateOptions> | AutoAnimationPlugin = {}\r\n): AnimationController {\r\n if (supportedBrowser && resize) {\r\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\r\n const isDisabledDueToReduceMotion =\r\n mediaQuery.matches &&\r\n !isPlugin(config) &&\r\n !(config as Partial<AutoAnimateOptions>).disrespectUserMotionPreference;\r\n if (!isDisabledDueToReduceMotion) {\r\n enabled.add(el);\r\n if (getComputedStyle(el).position === \"static\") {\r\n Object.assign(el.style, { position: \"relative\" });\r\n }\r\n forEach(el, updatePos, poll, (element) => resize?.observe(element));\r\n if (isPlugin(config)) {\r\n options.set(el, config as AutoAnimationPlugin);\r\n } else {\r\n options.set(el, {\r\n duration: 250,\r\n easing: \"ease-in-out\",\r\n ...(config as Partial<AutoAnimateOptions>),\r\n });\r\n }\r\n const mo = new MutationObserver(handleMutations);\r\n mo.observe(el, { childList: true });\r\n mutationObservers.set(el, mo);\r\n parents.add(el);\r\n }\r\n }\r\n const controller: AnimationController = Object.freeze({\r\n parent: el,\r\n enable: () => {\r\n enabled.add(el);\r\n },\r\n disable: () => {\r\n enabled.delete(el);\r\n // Cancel any in-flight animations and pending timers for immediate effect\r\n forEach(el, (node) => {\r\n const a = animations.get(node);\r\n try {\r\n a?.cancel();\r\n } catch {}\r\n animations.delete(node);\r\n const d = debounces.get(node);\r\n if (d) clearTimeout(d);\r\n debounces.delete(node);\r\n const i = intervals.get(node);\r\n if (i) clearInterval(i);\r\n intervals.delete(node);\r\n });\r\n },\r\n isEnabled: () => enabled.has(el),\r\n destroy: () => {\r\n enabled.delete(el);\r\n parents.delete(el);\r\n options.delete(el);\r\n const mo = mutationObservers.get(el);\r\n mo?.disconnect();\r\n mutationObservers.delete(el);\r\n forEach(el, (node) => {\r\n // unobserve resize\r\n resize?.unobserve(node);\r\n // cancel animations\r\n const a = animations.get(node);\r\n try {\r\n a?.cancel();\r\n } catch {}\r\n animations.delete(node);\r\n // disconnect observers\r\n const io = intersections.get(node);\r\n io?.disconnect();\r\n intersections.delete(node);\r\n // clear intervals and debounces\r\n const i = intervals.get(node);\r\n if (i) clearInterval(i);\r\n intervals.delete(node);\r\n const d = debounces.get(node);\r\n if (d) clearTimeout(d);\r\n debounces.delete(node);\r\n // clear state\r\n coords.delete(node);\r\n siblings.delete(node);\r\n });\r\n },\r\n });\r\n return controller;\r\n}\r\n\r\n// Also provide a named export for environments expecting it\r\nexport { autoAnimate };\r\n\r\n/**\r\n * The vue directive.\r\n */\r\n// export const vAutoAnimate = {\r\n// mounted: (\r\n// el: HTMLElement,\r\n// binding: {\r\n// value: Partial<AutoAnimateOptions> | AutoAnimationPlugin | undefined;\r\n// }\r\n// ) => {\r\n// const ctl = autoAnimate(el, binding.value || {});\r\n// Object.defineProperty(el, \"__aa_ctl\", { value: ctl, configurable: true });\r\n// },\r\n// unmounted: (el: HTMLElement) => {\r\n// const ctl = (el as any)[\"__aa_ctl\"] as AnimationController | undefined;\r\n// ctl?.destroy?.();\r\n// try {\r\n// delete (el as any)[\"__aa_ctl\"];\r\n// } catch {}\r\n// },\r\n// getSSRProps: () => ({}),\r\n// };\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport { Button, Switch } from \".\";\r\nimport { cn } from \"../utils\";\r\nimport { Plus, X } from \"lucide-react\";\r\nimport autoAnimate from \"../utils/auto-animate\";\r\n\r\nconst days = [\r\n \"Lunes\",\r\n \"Martes\",\r\n \"Miercoles\",\r\n \"Jueves\",\r\n \"Viernes\",\r\n \"Sábado\",\r\n \"Domingo\",\r\n];\r\n\r\nexport const FormWorkingHours = () => {\r\n return <WorkingHours />;\r\n};\r\n\r\nconst WorkingHours = () => {\r\n return (\r\n <div>\r\n {days.map((day) => {\r\n return <Day key={day} day={day} />;\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst Day = ({ day }: { day: string }) => {\r\n const [active, setActive] = useState(false);\r\n const ref = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n autoAnimate(ref.current);\r\n }, []);\r\n return (\r\n <div\r\n key={day}\r\n ref={ref}\r\n className={cn(\"p-2 rounded-xl mt-2\", {\r\n \"border border-uielborder\": active,\r\n \"bg-uielbg border border-transparent\": !active,\r\n })}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <p>{day}</p>\r\n <Switch\r\n className=\"mt-0\"\r\n checked={active}\r\n onCheckedChange={(checked) => setActive(checked)}\r\n />\r\n </div>\r\n {active ? <HourPicker /> : null}\r\n </div>\r\n );\r\n};\r\n\r\nconst HourPicker = () => {\r\n const [hours, setHours] = useState([\r\n { from: \"08:00\", to: \"12:00\" },\r\n { from: \"14:00\", to: \"18:00\" },\r\n ]);\r\n const ref = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n autoAnimate(ref.current);\r\n }, []);\r\n return (\r\n <div ref={ref}>\r\n {hours.map((hour, hourIdx) => (\r\n <div\r\n key={`${hour.from}${hourIdx}`}\r\n className=\"flex items-center justify-between mt-2\"\r\n >\r\n <p className=\"text-sm text-secondarytext\">De</p>\r\n <Button color=\"solid\" className=\"w-24\">\r\n {hour.from}\r\n </Button>\r\n <p className=\"text-sm text-secondarytext mx-1\">a</p>\r\n <Button color=\"solid\" className=\"w-24\">\r\n {hour.to}\r\n </Button>\r\n {/* <p className=\"grow\"></p> */}\r\n {/* <IconButton\r\n icon={vantageIcons.x}\r\n color=\"solid\"\r\n className=\"rounded-lg\"\r\n /> */}\r\n <Button className=\"rounded-full\">\r\n <X className=\"text-secondarytext\" size={20} />\r\n </Button>\r\n {/* De: {hour.from} a {hour.to} */}\r\n </div>\r\n ))}\r\n <Button\r\n onClick={() =>\r\n setHours((prev) => {\r\n return [...prev, { from: \"19:00\", to: \"21:00\" }];\r\n })\r\n }\r\n className=\"w-full mt-4\"\r\n color=\"contrast\"\r\n >\r\n <Plus className=\"stroke-1\" />\r\n Añadir hora\r\n </Button>\r\n </div>\r\n );\r\n};\r\n"],"names":["cn","inputs","twMerge","clsx","throttle","func","limit","lastRan","timeout","args","now","debounce","delay","generateInitials","name","words","setFocusEnd","element","length","removeWhitespaces","text","toTitleCase","str","word","firstChar","restOfWord","nullRead","nullSet","extractDirtyData","data","dirtyFields","staticFields","result","field","key","FocusTrap","container","event","focusableElements","firstFocusable","lastFocusable","checkOverflow","horizontal","vertical","maxScrollLeft","maxScrollTop","useOverflow","onOverflow","trackScroll","withObserver","enabled","deps","ref","useRef","useEffect","initialOverflow","throttledUpdate","info","observer","scrollElement","useOverflowState","overflowInfo","setOverflowInfo","useState","sizes","Avatar","src","size","className","jsx","jsxs","Icon","AvatarsGroup","children","animate","props","f","s","largeAtom","atom","listening","handleResize","useLargeScreen","useAtomValue","useMergedRef","refs","value","useRipple","contrastRipple","lg","ripple","useCallback","button","buttonRect","rippleSize","offsetX","offsetY","rippleWrapper","rippleEl","ripples","usePopover","scrollerId","align","side","offset","collisionPadding","avoidCollisions","closeOnScroll","onOpen","onClose","open","setOpen","popoverDimensions","setPopoverDimensions","triggerRef","popoverRef","triggerRectRef","scrollerRef","triggerId","useId","getPopoverPosition","customRect","rect","popoverWidth","popoverHeight","calculatePopoverPosition","updatePopoverDimensions","handleScroll","toggle","prev","close","triggerRect","viewport","x","y","rightSideX","leftSideX","rightOverflow","leftOverflow","spaceBelow","spaceAbove","spaceRight","spaceLeft","centeredX","top","bottom","useClickAway","callback","handleClickAway","useClickAwayAdvanced","options","events","excludeRefs","handleClick","target","excludeRef","eventName","useClickAwayWithRef","useKeyListener","keyMap","keyMapRef","handleKeyEvent","e","baseStyles","sizeStyles","focusStyles","fontWeightStyles","borderRadiusStyles","colorStyles","stateStyles","Button","forwardRef","color","fontWeight","rounded","state","onClick","withRipple","showFocus","withDisabledDelay","type","others","forwardedRef","disabledDelay","setDisabledDelay","rippleRef","millisecondsInWeek","millisecondsInDay","constructFromSymbol","constructFrom","date","toDate","argument","context","addMonths","amount","_date","dayOfMonth","endOfDesiredMonth","daysInMonth","defaultOptions","getDefaultOptions","startOfWeek","weekStartsOn","day","diff","startOfISOWeek","getISOWeekYear","year","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","getTimezoneOffsetInMilliseconds","utcDate","normalizeDates","dates","normalize","startOfDay","differenceInCalendarDays","laterDate","earlierDate","laterDate_","earlierDate_","laterStartOfDay","earlierStartOfDay","laterTimestamp","earlierTimestamp","startOfISOWeekYear","fourthOfJanuary","isSameDay","dateLeft_","dateRight_","isDate","isValid","endOfMonth","month","normalizeInterval","interval","start","end","eachDayOfInterval","reversed","endTime","step","startOfMonth","startOfYear","date_","formatDistanceLocale","formatDistance","token","count","tokenValue","buildFormatLongFn","width","dateFormats","timeFormats","dateTimeFormats","formatLong","formatRelativeLocale","formatRelative","_baseDate","_options","buildLocalizeFn","valuesArray","defaultWidth","index","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","number","rem100","localize","quarter","buildMatchFn","string","matchPattern","matchResult","matchedString","parsePatterns","findIndex","pattern","findKey","rest","object","predicate","array","buildMatchPatternFn","parseResult","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","enUS","getDayOfYear","getISOWeek","getWeekYear","firstWeekContainsDate","firstWeekOfNextYear","firstWeekOfThisYear","startOfWeekYear","firstWeek","getWeek","addLeadingZeros","targetLength","sign","output","lightFormatters","signedYear","dayPeriodEnumValue","numberOfDigits","milliseconds","fractionalSeconds","dayPeriodEnum","formatters","era","signedWeekYear","weekYear","twoDigitYear","isoWeekYear","week","isoWeek","dayOfYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","hours","_localize","timezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","timestamp","delimiter","absOffset","minutes","dateLongFormatter","timeLongFormatter","dateTimeLongFormatter","datePattern","timePattern","dateTimeFormat","longFormatters","dayOfYearTokenRE","weekYearTokenRE","throwTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","warnOrThrowProtectedError","format","input","_message","message","subject","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","formatStr","locale","defaultLocale","originalDate","parts","substring","firstCharacter","longFormatter","cleanEscapedString","formatterOptions","part","formatter","matched","isSameMonth","subMonths","formatRelativeLocalePlural","es","$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c","$HgANd$react","$431fbd86ca7dc216$export$b204af158042fbac","el","_el_ownerDocument","$431fbd86ca7dc216$export$f21a1ffae260145a","$431fbd86ca7dc216$var$isNode","$431fbd86ca7dc216$export$af51f0f06c0f328a","node","$f4e2df6bd15f8569$var$_shadowDOM","$f4e2df6bd15f8569$export$98658e8c59125e6a","$d4ee10de306f2510$export$4282f70798064fe0","otherNode","$lcSu5$shadowDOM","currentNode","$d4ee10de306f2510$export$cd4e5573fbe2b576","doc","_activeElement_shadowRoot","activeElement","$d4ee10de306f2510$export$e58f029f0fbfdb29","$dfc540311bf7f109$export$63eb3ababa9c55c4","walkers","curNode","currentWalkerCurrentNode","shadowRoot","walker","newNode","nextNode","_this_filter","nodeResult","currentWalker","previousNode","root","whatToShow","filter","$dfc540311bf7f109$export$4d0f8be8b12a7ef6","$bJKXg$shadowDOM","$7215afc6de606d6b$export$de79e2c695e052f3","$7215afc6de606d6b$var$supportsPreventScroll","scrollableElements","$7215afc6de606d6b$var$getScrollableElements","$7215afc6de606d6b$var$restoreScrollPosition","$7215afc6de606d6b$var$supportsPreventScrollCached","parent","rootScrollingElement","scrollTop","scrollLeft","$c87311424ea30a05$var$testUserAgent","re","_window_navigator_userAgentData","brands","brand","$c87311424ea30a05$var$testPlatform","$c87311424ea30a05$var$cached","fn","res","$c87311424ea30a05$export$9ac100e40613ea10","$c87311424ea30a05$export$186c6964ca17d99","$c87311424ea30a05$export$7bef049ce92e4224","$c87311424ea30a05$export$fedb369cb70207f1","$c87311424ea30a05$export$6446a186d09e379e","$c87311424ea30a05$export$a11b0059900ceec8","$bbed8b41f857bcc0$var$transitionsByElement","$bbed8b41f857bcc0$var$transitionCallbacks","$bbed8b41f857bcc0$var$setupGlobalEvents","isTransitionEvent","onTransitionStart","transitions","onTransitionEnd","properties","cb","$bbed8b41f857bcc0$var$cleanupDetachedElements","eventTarget","$bbed8b41f857bcc0$export$24490316f764c430","$6a7db85432448f7f$export$60278871457622de","$7d2416ea0959daaa$var$supportsCheckVisibility","$7d2416ea0959daaa$var$isStyleVisible","windowObject","display","visibility","isVisible","getComputedStyle","computedDisplay","computedVisibility","$7d2416ea0959daaa$var$isAttributeVisible","childElement","$7d2416ea0959daaa$export$e989c0fffaa6b27a","$b4b717babfbb907b$var$focusableElements","$b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR","$b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR","$b4b717babfbb907b$export$4c063cf1350e6fed","$b4b717babfbb907b$var$isInert","$b4b717babfbb907b$export$bebd5a1431fec25d","$8a9cb279dc87e130$export$fda7da73ab5d4c48","$507fabe10e71c6fb$var$currentModality","$507fabe10e71c6fb$var$changeHandlers","$507fabe10e71c6fb$export$d90243b58daecda7","$507fabe10e71c6fb$var$hasEventBeforeFocus","$507fabe10e71c6fb$var$hasBlurredWindowRecently","$507fabe10e71c6fb$var$triggerChangeHandlers","modality","handler","$507fabe10e71c6fb$var$isValidKey","$28AnR$isMac","$507fabe10e71c6fb$var$handleKeyboardEvent","$507fabe10e71c6fb$var$handlePointerEvent","$507fabe10e71c6fb$var$handleClickEvent","$28AnR$isVirtualClick","$507fabe10e71c6fb$var$handleFocusEvent","$507fabe10e71c6fb$var$handleWindowBlur","$507fabe10e71c6fb$var$setupGlobalFocusEvents","$28AnR$getOwnerWindow","documentObject","$28AnR$getOwnerDocument","focus","$507fabe10e71c6fb$var$tearDownWindowFocusTracking","loadListener","$507fabe10e71c6fb$export$2f1888112f558a7d","$507fabe10e71c6fb$export$630ff653c5ada6a9","$3ad3f6e1647bc98d$export$80f3e147d781571c","ownerDocument","$k50bp$getOwnerDocument","$k50bp$getActiveElement","lastFocusedElement","$k50bp$runAfterTransition","$k50bp$focusWithoutScrolling","$9bf71ea28793e738$var$FocusContext","$cgawC$react","$9bf71ea28793e738$var$RESTORE_FOCUS_EVENT","$9bf71ea28793e738$var$activeScope","$9bf71ea28793e738$export$20e40289641fbbb6","contain","restoreFocus","autoFocus","startRef","$cgawC$useRef","endRef","scopeRef","parentNode","$cgawC$useContext","$cgawC$useMemo","$9bf71ea28793e738$var$TreeNode","$cgawC$useLayoutEffect","$9bf71ea28793e738$export$d06fae2ee68b101e","$9bf71ea28793e738$var$isAncestorScope","activeNode","_startRef_current","nodes","stopPropagation","$9bf71ea28793e738$var$useActiveScopeTracker","$9bf71ea28793e738$var$useFocusContainment","$9bf71ea28793e738$var$useRestoreFocus","$9bf71ea28793e738$var$useAutoFocus","$cgawC$useEffect","$cgawC$getActiveElement","$cgawC$getOwnerDocument","scope","$9bf71ea28793e738$var$isElementInScope","_focusScopeTree_getTreeNode_parent","_focusScopeTree_getTreeNode","_focusScopeTree_getTreeNode_parent_scopeRef","parentScope","focusManager","$9bf71ea28793e738$var$createFocusManagerForScope","opts","from","tabbable","wrap","accept","_scope_","sentinel","scopeRoot","$9bf71ea28793e738$var$getScopeRoot","$9bf71ea28793e738$export$2d6ec8fc375ceafa","$9bf71ea28793e738$var$focusElement","$9bf71ea28793e738$var$shouldContainFocus","$9bf71ea28793e738$var$isTabbableRadio","radios","radio","_element_form_elements","_element_form","radioList","focusedNode","raf","onKeyDown","focusedElement","nextElement","onFocus","$cgawC$getEventTarget","$9bf71ea28793e738$var$isElementInChildScope","$9bf71ea28793e738$var$focusFirstInScope","onBlur","$cgawC$getInteractionModality","shouldSkipFocusRestore","$cgawC$isAndroid","$cgawC$isChrome","_focusedNode_current","$9bf71ea28793e738$var$isElementInAnyScope","ancestor","scroll","$cgawC$focusSafely","$9bf71ea28793e738$var$getFirstInScope","autoFocusRef","restore","$9bf71ea28793e738$var$shouldRestoreFocus","nodeToRestoreRef","treeNode","nodeToRestore","_nodeToRestoreRef_current","clonedTree","$9bf71ea28793e738$var$restoreFocusToElement","$cgawC$isTabbable","$cgawC$isFocusable","rootElement","$cgawC$createShadowTreeWalker","_opts_from","$9bf71ea28793e738$var$Tree","current","child","_node_parent","newTree","_node_parent_scopeRef","Portal","createPortal","PopoverCard","customTrigger","triggerContent","triggerClassName","closeOnEscape","closeOnClickAway","maxHeight","minWidth","maxWidth","triggerProps","position","Fragment","AnimatePresence","FocusScope","motion","PopoverCardHeader","title","subtitle","PopoverCardContent","PopoverCardFooter","getWeekDayNames","weekStartsOnMonday","baseDate","weekdays","i","Calendar","selectedDate","onDateSelect","disabledDates","disabledDaysOfWeek","minDate","maxDate","currentMonth","setCurrentMonth","focusedDate","setFocusedDate","calendarRef","disabledDateSet","useMemo","dateStr","disabledDaysSet","calendarDays","monthStart","monthEnd","startDate","endDate","daysFromMonday","endDayOfWeek","daysToSunday","weekDays","isDateEnabled","handleDateClick","handleKeyDown","newFocusedDate","shouldPreventDefault","currentDay","navigateMonth","direction","ChevronLeft","ChevronRight","isCurrentMonth","isSelected","isFocused","isEnabled","isToday","DatePickerDemo","setSelectedDate","DatePickerPopover","CalendarDays","TimePicker","Clock","DateTimePicker","colorClasses","Checkbox","checked","onCheckedChange","disabled","required","id","sizeClasses","iconSizes","Check","Minus","$constructor","initializer","params","init","inst","def","_a","k","_","Parent","Definition","$ZodAsyncError","globalConfig","config","newConfig","jsonStringifyReplacer","captureStackTrace","_args","unwrapMessage","finalizeIssue","iss","ctx","full","util.jsonStringifyReplacer","$ZodError","$ZodRealError","_parse","_Err","schema","_ctx","_params","core.$ZodAsyncError","util.finalizeIssue","core.config","util.captureStackTrace","parse","errors.$ZodRealError","_parseAsync","parseAsync","t","r","o","u","c","a","n","n.parse","n.parseAsync","n.$ZodError","Form","methods","onSubmit","onError","logErrors","FormProvider","errors","useMethods","defaultValues","useForm","zodResolver","strokeWidth","viewBox","inputColors","focusColors","Input","label","description","labelPosition","focusColor","placeholder","valid","error","errorMessage","isPrice","prefix","wrapperClassName","containerClassName","innerRef","mounted","showPassword","setShowPassword","setIsFocused","isPassword","inputType","hasValue","DollarSign","CheckIcon","EyeOffIcon","Eye","FormInput","customRead","customSet","withNullSet","control","useFormContext","readValue","setValue","Controller","fieldState","AliveScopeContext","createContext","AliveScopeProvider","useAliveScope","useContext","AliveScope","setNodes","onMountCallbacks","onDropCallbacks","getPortalElement","prevNodes","dropPortalElement","copy","Component","KeepAliveContext","KeepAliveProvider","memo","onKeepAliveMount","runCallback","_mutations","obs","onKeepAliveDrop","useKeepAlive","KeepAlive","aliveKey","keepAliveRef","List","lightSolid","ListItem","MultiSelect","selectedValues","onChange","idExtractor","labelExtractor","customSetter","maxSelections","searchable","searchValue","setSearchValue","focusedOptionIndex","setFocusedOptionIndex","inputRef","containerRef","optionRefs","inputId","labelId","errorId","listboxId","displayValues","storedValue","option","filteredOptions","selected","handleToggleOption","newValues","optionId","announceChange","handleRemoveValue","valueToRemove","valueId","nextIndex","prevIndex","lastValue","handleSearchChange","handleContainerClick","XIcon","ChevronDownIcon","focused","FormMultiSelect","values","titleSizes","PageTitle","descriptionClassName","SearchInput","exposedRef","onClear","onMount","mergedRef","mountRef","callOnMount","Search","X","SeeMoreText","buttonClassName","seeMore","setSeeMore","canSeeMore","displayText","scrollByAmount","multiplier","speed","isVertical","startScroll","maxScroll","scrollAmount","targetScroll","speedMap","progress","scrollTo","TRANSITION_EASES","FADE_IN","segmentedControlStyles","SegmentedControl","keyExtractor","itemColor","itemClassName","unselectedColor","border","indicators","setIndicators","Separator","Spinner","loading","spinnerClassName","FormSubmit","isEditable","isDeletable","createUpdateLoading","deleteLoading","onDelete","onDeleteConfirm","addText","updateText","deleteText","confirm","setConfirm","Plus","ModalsContext","ModalsProvider","debug","modalsRef","add","remove","modalId","getPrevId","prevId","animateParentModal","mode","restoreParentModal","getModals","useModals","SuperModal","showHeader","onReplace","contentClassName","initialChangeEvent","useInitialChangeEvent","parentModal","modals","prevPath","useRoute","asModal","prevModalId","useLayoutEffect","navigate","Switch","Tags","variant","tags","maxTags","validateTag","inputValue","setInputValue","localError","setLocalError","tagRefs","newTag","validationResult","removedTag","handleTagKeyDown","tagIndex","newTags","handleRemoveTag","tagToRemove","tag","handleInputChange","FormTags","TextArea","rows","FormTextArea","parents","coords","siblings","animations","intersections","mutationObservers","intervals","debounces","scrollX","scrollY","TGT","DEL","NEW","handleMutations","mutations","elements","getElements","handleResizes","entries","entry","updateAllPos","updatePos","isOffscreen","vw","vh","observePosition","invocations","buffer","getCoords","offsetWidth","offsetHeight","rootMargin","px","optionsOrPlugin","getOptions","isPlugin","currentAnimation","forEach","lowPriority","poll","resize","supportedBrowser","mutation","isMounted","preExisting","remain","raw","getScrollOffset","p","getTransitionSizes","oldCoords","newCoords","widthFrom","heightFrom","widthTo","heightTo","styles","paddingY","paddingX","getTarget","callbacks","getPluginTuple","pluginReturn","animation","pluginOrOptions","deltaLeft","deltaTop","deltaRight","keyframes","cleanUp","style","next","finalX","finalY","left","height","deletePosition","adjustScroll","styleReset","scrollDeltaX","scrollDeltaY","scrollBefore","lastHeight","lastWidth","smoothScroll","deltaY","deltaX","offsetParent","parentStyles","parentCoords","autoAnimate","mo","d","days","FormWorkingHours","WorkingHours","Day","active","setActive","HourPicker","setHours","hour","hourIdx"],"mappings":"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","x_google_ignoreList":[6,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,83,84,85,86,87]}
|
|
1
|
+
{"version":3,"file":"index.cjs","sources":["../src/utils/design.ts","../src/utils/forms.ts","../src/utils/focus.ts","../src/utils/overflow.tsx","../src/components/Avatar.tsx","../src/components/AvatarsGroup.tsx","../../../node_modules/@mateosuarezdev/atoms/dist/react.js","../src/hooks/use-large-screen.tsx","../src/hooks/use-merged-ref.tsx","../src/hooks/use-ripple.tsx","../src/hooks/use-popover.tsx","../src/hooks/use-click-away.tsx","../src/hooks/use-key-listener.tsx","../src/components/Button.tsx","../../../node_modules/date-fns/constants.js","../../../node_modules/date-fns/constructFrom.js","../../../node_modules/date-fns/toDate.js","../../../node_modules/date-fns/addMonths.js","../../../node_modules/date-fns/_lib/defaultOptions.js","../../../node_modules/date-fns/startOfWeek.js","../../../node_modules/date-fns/startOfISOWeek.js","../../../node_modules/date-fns/getISOWeekYear.js","../../../node_modules/date-fns/_lib/getTimezoneOffsetInMilliseconds.js","../../../node_modules/date-fns/_lib/normalizeDates.js","../../../node_modules/date-fns/startOfDay.js","../../../node_modules/date-fns/differenceInCalendarDays.js","../../../node_modules/date-fns/startOfISOWeekYear.js","../../../node_modules/date-fns/isSameDay.js","../../../node_modules/date-fns/isDate.js","../../../node_modules/date-fns/isValid.js","../../../node_modules/date-fns/endOfMonth.js","../../../node_modules/date-fns/_lib/normalizeInterval.js","../../../node_modules/date-fns/eachDayOfInterval.js","../../../node_modules/date-fns/startOfMonth.js","../../../node_modules/date-fns/startOfYear.js","../../../node_modules/date-fns/locale/en-US/_lib/formatDistance.js","../../../node_modules/date-fns/locale/_lib/buildFormatLongFn.js","../../../node_modules/date-fns/locale/en-US/_lib/formatLong.js","../../../node_modules/date-fns/locale/en-US/_lib/formatRelative.js","../../../node_modules/date-fns/locale/_lib/buildLocalizeFn.js","../../../node_modules/date-fns/locale/en-US/_lib/localize.js","../../../node_modules/date-fns/locale/_lib/buildMatchFn.js","../../../node_modules/date-fns/locale/_lib/buildMatchPatternFn.js","../../../node_modules/date-fns/locale/en-US/_lib/match.js","../../../node_modules/date-fns/locale/en-US.js","../../../node_modules/date-fns/getDayOfYear.js","../../../node_modules/date-fns/getISOWeek.js","../../../node_modules/date-fns/getWeekYear.js","../../../node_modules/date-fns/startOfWeekYear.js","../../../node_modules/date-fns/getWeek.js","../../../node_modules/date-fns/_lib/addLeadingZeros.js","../../../node_modules/date-fns/_lib/format/lightFormatters.js","../../../node_modules/date-fns/_lib/format/formatters.js","../../../node_modules/date-fns/_lib/format/longFormatters.js","../../../node_modules/date-fns/_lib/protectedTokens.js","../../../node_modules/date-fns/format.js","../../../node_modules/date-fns/isSameMonth.js","../../../node_modules/date-fns/subMonths.js","../../../node_modules/date-fns/locale/es/_lib/formatDistance.js","../../../node_modules/date-fns/locale/es/_lib/formatLong.js","../../../node_modules/date-fns/locale/es/_lib/formatRelative.js","../../../node_modules/date-fns/locale/es/_lib/localize.js","../../../node_modules/date-fns/locale/es/_lib/match.js","../../../node_modules/date-fns/locale/es.js","../../../node_modules/@react-aria/utils/dist/useLayoutEffect.mjs","../../../node_modules/@react-aria/utils/dist/domHelpers.mjs","../../../node_modules/@react-stately/flags/dist/import.mjs","../../../node_modules/@react-aria/utils/dist/DOMFunctions.mjs","../../../node_modules/@react-aria/utils/dist/ShadowTreeWalker.mjs","../../../node_modules/@react-aria/utils/dist/focusWithoutScrolling.mjs","../../../node_modules/@react-aria/utils/dist/platform.mjs","../../../node_modules/@react-aria/utils/dist/runAfterTransition.mjs","../../../node_modules/@react-aria/utils/dist/isVirtualEvent.mjs","../../../node_modules/@react-aria/utils/dist/isElementVisible.mjs","../../../node_modules/@react-aria/utils/dist/isFocusable.mjs","../../../node_modules/@react-aria/interactions/dist/utils.mjs","../../../node_modules/@react-aria/interactions/dist/useFocusVisible.mjs","../../../node_modules/@react-aria/interactions/dist/focusSafely.mjs","../../../node_modules/@react-aria/focus/dist/FocusScope.mjs","../src/components/Portal.tsx","../src/components/PopoverCard.tsx","../src/components/Calendar.tsx","../src/components/Checkbox.tsx","../../../node_modules/zod/v4/core/core.js","../../../node_modules/zod/v4/core/util.js","../../../node_modules/zod/v4/core/errors.js","../../../node_modules/zod/v4/core/parse.js","../../../node_modules/@hookform/resolvers/zod/dist/zod.mjs","../src/components/Form.tsx","../src/components/Icon.tsx","../src/components/Input.tsx","../src/components/KeepAlive.tsx","../src/components/List.tsx","../src/components/MultiSelect.tsx","../src/components/PageTitle.tsx","../src/components/SearchInput.tsx","../src/components/SeeMoreText.tsx","../src/animations/utils/scroll.ts","../src/animations/utils/variants.ts","../src/components/SegmentedControl.tsx","../src/components/Separator.tsx","../src/components/Spinner.tsx","../src/components/Submit.tsx","../src/components/SuperModal.tsx","../src/components/Switch.tsx","../src/components/Tags.tsx","../src/components/TextArea.tsx","../src/utils/auto-animate.ts","../src/components/WorkingHours.tsx"],"sourcesContent":["import { clsx, type ClassValue } from \"clsx\";\r\nimport { twMerge } from \"tailwind-merge\";\r\n\r\n//Custom ClassName\r\nexport type { ClassValue };\r\n\r\n/**Tailwind Merge + Clsx */\r\nexport const cn = (...inputs: ClassValue[]) => twMerge(clsx(inputs));\r\n\r\n/**\r\n * Creates a throttled function that only invokes func at most once per every limit milliseconds.\r\n * The first call executes immediately, subsequent calls are rate-limited, and the last call\r\n * during rapid firing is guaranteed to execute with the most recent arguments.\r\n *\r\n * @param func - The function to throttle\r\n * @param limit - The number of milliseconds to throttle invocations to (default: 100)\r\n * @returns A throttled version of the function\r\n *\r\n * @example\r\n * const handleScroll = throttle(() => {\r\n * console.log('Scrolled!');\r\n * }, 200);\r\n *\r\n * window.addEventListener('scroll', handleScroll);\r\n */\r\nexport function throttle<T extends (...args: any[]) => any>(\r\n func: T,\r\n limit: number = 100\r\n): (...args: Parameters<T>) => void {\r\n let lastRan: number | null = null;\r\n let timeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return function (this: any, ...args: Parameters<T>) {\r\n const now = Date.now();\r\n\r\n if (lastRan === null || now - lastRan >= limit) {\r\n func.apply(this, args);\r\n lastRan = now;\r\n } else {\r\n if (timeout) clearTimeout(timeout);\r\n timeout = setTimeout(() => {\r\n func.apply(this, args);\r\n lastRan = Date.now();\r\n }, limit - (now - lastRan));\r\n }\r\n };\r\n}\r\n\r\n/**\r\n * Creates a debounced function that delays invoking func until after delay milliseconds\r\n * have elapsed since the last time the debounced function was invoked. Each call resets\r\n * the timer, ensuring func only executes after activity has stopped.\r\n *\r\n * @param func - The function to debounce\r\n * @param delay - The number of milliseconds to delay (default: 300)\r\n * @returns A debounced version of the function\r\n *\r\n * @example\r\n * const handleSearch = debounce((query) => {\r\n * fetchResults(query);\r\n * }, 300);\r\n *\r\n * input.addEventListener('input', (e) => handleSearch(e.target.value));\r\n */\r\nexport function debounce<T extends (...args: any[]) => any>(\r\n func: T,\r\n delay: number = 500\r\n): (...args: Parameters<T>) => void {\r\n let timeout: ReturnType<typeof setTimeout> | null = null;\r\n\r\n return function (this: any, ...args: Parameters<T>) {\r\n if (timeout) clearTimeout(timeout);\r\n\r\n timeout = setTimeout(() => {\r\n func.apply(this, args);\r\n timeout = null;\r\n }, delay);\r\n };\r\n}\r\n\r\nexport function generateInitials(name: string) {\r\n if (!name) return \"\";\r\n\r\n // Trim and remove extra spaces\r\n const trimmedName = name.trim().replace(/\\s+/g, \" \");\r\n\r\n // Split by space to get words\r\n const words = trimmedName.split(\" \");\r\n\r\n // If no words (empty string), return empty\r\n if (words.length === 0 || words[0] === \"\") {\r\n return \"\";\r\n }\r\n\r\n // If only one word, return first letter\r\n if (words.length === 1) {\r\n return words[0].charAt(0).toUpperCase();\r\n }\r\n\r\n // If two or more words, return first letter of first two words\r\n return (words[0].charAt(0) + words[1].charAt(0)).toUpperCase();\r\n}\r\n","export function setFocusEnd(element: HTMLInputElement) {\r\n element.focus();\r\n const length = element.value.length;\r\n element.setSelectionRange(length, length);\r\n}\r\n\r\nexport function removeWhitespaces(text: string) {\r\n return text.replace(/\\s/g, \"\");\r\n}\r\n\r\nexport function toTitleCase(str: string) {\r\n // First, convert the entire string to lowercase\r\n const lowerCase = str.toLowerCase();\r\n\r\n // Split the string into an array of words\r\n const words = lowerCase.split(\" \");\r\n\r\n // Capitalize the first letter of each word\r\n const titleCaseWords = words.map((word) => {\r\n if (word.length === 0) return word;\r\n\r\n // Get the first character, which may be a multi-byte character\r\n const firstChar = [...word][0];\r\n // Get the rest of the word\r\n const restOfWord = word.slice(firstChar.length);\r\n\r\n // Return the capitalized first character + the rest of the word\r\n return firstChar.toUpperCase() + restOfWord;\r\n });\r\n\r\n // Join the words back together\r\n return titleCaseWords.join(\" \");\r\n}\r\n\r\n/**\r\n * helper to set an input to empty string\r\n * if the value is null\r\n */\r\nexport function nullRead(e: string | null) {\r\n if (e === null) return \"\";\r\n return e;\r\n}\r\n\r\n/**\r\n * helper to set an input\r\n * back to null if the value is empty\r\n */\r\nexport function nullSet(e: string) {\r\n if (removeWhitespaces(e) === \"\") return null;\r\n return e;\r\n}\r\n\r\n/**\r\n * Extracts only the dirty fields from form data\r\n * @param data The complete form data\r\n * @param dirtyFields The dirtyFields object from form.formState\r\n * @param staticFields An object containing fields to always include (like ID)\r\n * @returns A new object containing only dirty fields and the static fields\r\n */\r\nexport function extractDirtyData<T extends Record<string, any>>(\r\n data: T,\r\n dirtyFields: any,\r\n staticFields: Partial<T> = {} as Partial<T>\r\n): Partial<T> {\r\n // Start with the static fields\r\n const result = { ...staticFields };\r\n\r\n // Add only the dirty fields\r\n Object.keys(dirtyFields).forEach((field) => {\r\n if (dirtyFields[field] === true && field in data) {\r\n const key = field as keyof T;\r\n result[key] = data[key];\r\n }\r\n });\r\n\r\n return result;\r\n}\r\n","//main per page focus trapping should be done\r\n//in the router itself, when setting the current active page\r\n\r\n//then for modals and popovers we can call custom trapWithinScope\r\n//and restore focus inside a classic useEffect\r\n\r\nclass FocusTrap {\r\n private container: HTMLElement | null;\r\n private previouslyFocusedElement: HTMLElement | null;\r\n\r\n constructor() {\r\n this.container = null;\r\n this.previouslyFocusedElement = null;\r\n }\r\n\r\n enable(): void {\r\n if (!this.container) return;\r\n\r\n this.previouslyFocusedElement = document.activeElement as HTMLElement;\r\n this.container.addEventListener(\"keydown\", this.trapFocus.bind(this));\r\n document.addEventListener(\"click\", this.handleClickOutside.bind(this));\r\n }\r\n\r\n disable(): void {\r\n if (!this.container) return;\r\n\r\n this.container.removeEventListener(\"keydown\", this.trapFocus.bind(this));\r\n document.removeEventListener(\"click\", this.handleClickOutside.bind(this));\r\n if (this.previouslyFocusedElement && this.previouslyFocusedElement.focus) {\r\n this.previouslyFocusedElement.focus();\r\n }\r\n }\r\n\r\n setContainer(container: HTMLElement): void {\r\n this.disable();\r\n this.container = container;\r\n this.enable();\r\n }\r\n\r\n private trapFocus(event: KeyboardEvent): void {\r\n const focusableElements = this.container?.querySelectorAll<HTMLElement>(\r\n 'button, [href], input, select, textarea, [tabindex]:not([tabindex=\"-1\"])'\r\n );\r\n\r\n if (!focusableElements) return;\r\n\r\n const firstFocusable = focusableElements[0];\r\n const lastFocusable = focusableElements[focusableElements.length - 1];\r\n\r\n if (event.key === \"Tab\") {\r\n if (event.shiftKey && document.activeElement === firstFocusable) {\r\n event.preventDefault();\r\n lastFocusable.focus();\r\n } else if (!event.shiftKey && document.activeElement === lastFocusable) {\r\n event.preventDefault();\r\n firstFocusable.focus();\r\n }\r\n }\r\n }\r\n\r\n private handleClickOutside(event: MouseEvent): void {\r\n if (this.container && !this.container.contains(event.target as Node)) {\r\n event.preventDefault();\r\n if (\r\n this.previouslyFocusedElement &&\r\n this.previouslyFocusedElement.focus\r\n ) {\r\n this.previouslyFocusedElement.focus();\r\n }\r\n }\r\n }\r\n}\r\n\r\nexport { FocusTrap };\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport { throttle } from \"./design\";\r\n\r\ntype OverflowInfo = {\r\n horizontal: boolean;\r\n vertical: boolean;\r\n scrollWidth: number;\r\n clientWidth: number;\r\n scrollHeight: number;\r\n clientHeight: number;\r\n // These require scroll position tracking\r\n canScrollLeft: boolean;\r\n canScrollRight: boolean;\r\n canScrollUp: boolean;\r\n canScrollDown: boolean;\r\n scrollPercentageX: number;\r\n scrollPercentageY: number;\r\n scrollLeft: number;\r\n scrollTop: number;\r\n};\r\n\r\nconst checkOverflow = (element: HTMLElement): OverflowInfo => {\r\n const horizontal = element.scrollWidth > element.clientWidth;\r\n const vertical = element.scrollHeight > element.clientHeight;\r\n\r\n const maxScrollLeft = Math.max(0, element.scrollWidth - element.clientWidth);\r\n const maxScrollTop = Math.max(0, element.scrollHeight - element.clientHeight);\r\n\r\n return {\r\n horizontal,\r\n vertical,\r\n scrollWidth: element.scrollWidth,\r\n clientWidth: element.clientWidth,\r\n scrollHeight: element.scrollHeight,\r\n clientHeight: element.clientHeight,\r\n scrollLeft: element.scrollLeft,\r\n scrollTop: element.scrollTop,\r\n // Scroll capabilities (require current scroll position)\r\n canScrollLeft: element.scrollLeft > 10,\r\n canScrollRight: element.scrollLeft < maxScrollLeft - 10,\r\n canScrollUp: element.scrollTop > 0,\r\n canScrollDown: element.scrollTop < maxScrollTop,\r\n // Scroll percentages\r\n scrollPercentageX:\r\n horizontal && maxScrollLeft > 0\r\n ? (element.scrollLeft / maxScrollLeft) * 100\r\n : 0,\r\n scrollPercentageY:\r\n vertical && maxScrollTop > 0\r\n ? (element.scrollTop / maxScrollTop) * 100\r\n : 0,\r\n };\r\n};\r\n\r\n// Updated hook that listens to scroll events\r\nconst useOverflow = <T extends HTMLElement>({\r\n onOverflow,\r\n trackScroll = false, // New option to enable scroll tracking\r\n withObserver = false,\r\n enabled = true,\r\n deps = [],\r\n}: {\r\n onOverflow?: (info: OverflowInfo) => void;\r\n trackScroll?: boolean;\r\n withObserver?: boolean;\r\n enabled?: boolean;\r\n deps?: any[];\r\n} = {}) => {\r\n const ref = useRef<T>(null);\r\n\r\n useEffect(() => {\r\n if (!ref.current || !enabled) return;\r\n\r\n let initialOverflow = false;\r\n\r\n const updateOverflow = () => {\r\n // console.log(\"updating overflow\");\r\n if (ref.current) {\r\n const info = checkOverflow(ref.current);\r\n onOverflow?.(info);\r\n }\r\n };\r\n\r\n const throttledUpdate = throttle(updateOverflow);\r\n\r\n // Initial check\r\n // updateOverflow();\r\n const info = checkOverflow(ref.current);\r\n initialOverflow = info.horizontal || info.vertical;\r\n onOverflow?.(info);\r\n\r\n // Listen for resize\r\n window.addEventListener(\"resize\", throttledUpdate);\r\n\r\n // Conditionally use ResizeObserver\r\n // this is for in element content changes\r\n let observer: ResizeObserver | null = null;\r\n if (withObserver) {\r\n observer = new ResizeObserver(throttledUpdate);\r\n if (ref.current) {\r\n observer.observe(ref.current);\r\n }\r\n }\r\n\r\n // Conditionally listen to scroll events\r\n let scrollElement: HTMLElement | null = null;\r\n if (trackScroll && initialOverflow) {\r\n scrollElement = ref.current;\r\n scrollElement.addEventListener(\"scroll\", throttledUpdate);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", throttledUpdate);\r\n if (observer) {\r\n observer.disconnect();\r\n }\r\n if (scrollElement && initialOverflow) {\r\n scrollElement.removeEventListener(\"scroll\", throttledUpdate);\r\n }\r\n };\r\n }, [enabled, ...deps]);\r\n\r\n return { ref };\r\n};\r\n\r\n// Alternative: State-based approach with scroll tracking\r\nconst useOverflowState = <T extends HTMLElement>({\r\n trackScroll = false,\r\n withObserver = false,\r\n enabled = true,\r\n deps = [],\r\n}: {\r\n trackScroll?: boolean;\r\n withObserver?: boolean;\r\n enabled?: boolean;\r\n deps?: any[];\r\n} = {}) => {\r\n const ref = useRef<T>(null);\r\n const [overflowInfo, setOverflowInfo] = useState<OverflowInfo | null>(null);\r\n\r\n useEffect(() => {\r\n if (!ref.current || !enabled) return;\r\n\r\n let initialOverflow = false;\r\n\r\n const updateOverflow = () => {\r\n // console.log(\"updating overflow\");\r\n if (ref.current) {\r\n const info = checkOverflow(ref.current);\r\n setOverflowInfo(info);\r\n }\r\n };\r\n\r\n const throttledUpdate = throttle(updateOverflow);\r\n\r\n // Initial check\r\n // updateOverflow();\r\n const info = checkOverflow(ref.current);\r\n initialOverflow = info.horizontal || info.vertical;\r\n setOverflowInfo(info);\r\n\r\n // Attach resize listener\r\n window.addEventListener(\"resize\", throttledUpdate);\r\n\r\n // Conditionally use ResizeObserver\r\n // this is for in element content changes\r\n let observer: ResizeObserver | null = null;\r\n if (withObserver) {\r\n observer = new ResizeObserver(throttledUpdate);\r\n if (ref.current) {\r\n observer.observe(ref.current);\r\n }\r\n }\r\n\r\n // Conditionally listen to scroll events\r\n let scrollElement: HTMLElement | null = null;\r\n if (trackScroll && initialOverflow) {\r\n scrollElement = ref.current;\r\n scrollElement.addEventListener(\"scroll\", throttledUpdate);\r\n }\r\n\r\n return () => {\r\n window.removeEventListener(\"resize\", throttledUpdate);\r\n if (observer) {\r\n observer.disconnect();\r\n }\r\n if (scrollElement && initialOverflow) {\r\n scrollElement.removeEventListener(\"scroll\", throttledUpdate);\r\n }\r\n };\r\n }, [enabled, ...deps]);\r\n\r\n return { ref, overflowInfo };\r\n};\r\n\r\nexport { checkOverflow, useOverflow, useOverflowState };\r\n","import { Icon } from \".\";\r\nimport { cn } from \"../utils\";\r\nimport { generateInitials } from \"../utils\";\r\n\r\nconst sizes = {\r\n xs: \"w-8 h-8\",\r\n sm: \"w-10 h-10 text-lg\",\r\n md: \"w-14 h-14 text-xl\",\r\n lg: \"h-20 w-20 text-2xl\",\r\n xl: \"h-24 w-24 text-2xl\",\r\n};\r\n\r\nconst Avatar = ({\r\n src,\r\n name,\r\n size = \"md\",\r\n className,\r\n}: {\r\n src?: string;\r\n name?: string;\r\n size?: keyof typeof sizes;\r\n className?: string;\r\n}) => {\r\n if (src) {\r\n return (\r\n <img\r\n alt=\"avatar\"\r\n src={src}\r\n className={cn(\"rounded-full bg-base-3\", sizes[size])}\r\n />\r\n );\r\n }\r\n\r\n if (name) {\r\n return (\r\n <p\r\n className={cn(\r\n \"rounded-full font-medium dark-theme:bg-base-3 border border-base-6 dark-theme:border-base-4 flex items-center justify-center\",\r\n sizes[size],\r\n className\r\n )}\r\n >\r\n {generateInitials(name)}\r\n </p>\r\n );\r\n }\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"rounded-full text-2xl font-medium flex items-center justify-center\",\r\n \"bg-base-2 dark-theme:bg-base-3 border border-base-4\",\r\n \"lg:hover:bg-base-3 max-lg:active:bg-base-4 transition-colors\",\r\n sizes[size],\r\n className\r\n )}\r\n >\r\n <Icon\r\n size={size === \"xs\" ? 16 : size === \"sm\" ? 20 : 24}\r\n fill=\"none\"\r\n stroke=\"currentColor\"\r\n strokeWidth={2}\r\n strokeLinecap=\"round\"\r\n strokeLinejoin=\"round\"\r\n >\r\n <path d=\"M19 21v-2a4 4 0 0 0-4-4H9a4 4 0 0 0-4 4v2\" />\r\n <circle cx=\"12\" cy=\"7\" r=\"4\" />\r\n </Icon>\r\n </div>\r\n );\r\n};\r\n\r\nexport { Avatar };\r\n","import { ComponentPropsWithoutRef } from \"react\";\r\nimport { cn } from \"../utils\";\r\n\r\nfunction AvatarsGroup({\r\n className,\r\n children,\r\n animate = false,\r\n ...props\r\n}: ComponentPropsWithoutRef<\"div\"> & { animate?: boolean }) {\r\n return (\r\n <div\r\n className={cn(\"flex -space-x-3 rtl:space-x-reverse\", className)}\r\n {...props}\r\n >\r\n {children}\r\n </div>\r\n );\r\n}\r\n\r\nexport { AvatarsGroup };\r\n","import { useSyncExternalStore as s, useCallback as o, useRef as i, useEffect as l } from \"react\";\nimport { computed as p, effect as b } from \"./index.js\";\nfunction A(e) {\n const t = s(\n (u) => e.subscribe(u),\n () => e.get(),\n () => e.get()\n ), r = o(\n (u) => {\n e.set(u);\n },\n [e]\n );\n return [t, r];\n}\nfunction f(e) {\n return s(\n (t) => e.subscribe(t),\n () => e.get(),\n () => e.get()\n );\n}\nfunction d(e) {\n return o(\n (t) => {\n e.set(t);\n },\n [e]\n );\n}\nfunction E(e) {\n const t = i(null);\n return t.current || (t.current = p(e)), f(t.current);\n}\nfunction S(e) {\n l(() => b(e), []);\n}\nfunction h(e, ...t) {\n const r = t.length > 0 ? t : Object.keys(e), u = {};\n return r.forEach((c) => {\n const n = e[c];\n n && typeof n == \"object\" && \"get\" in n ? u[c] = f(n) : u[c] = n;\n }), u;\n}\nexport {\n A as useAtom,\n S as useAtomEffect,\n f as useAtomValue,\n E as useComputed,\n d as useSetAtom,\n h as useStore\n};\n//# sourceMappingURL=react.js.map\n","import { throttle } from \"../utils\";\r\nimport { useLayoutEffect } from \"react\";\r\nimport { atom } from \"@mateosuarezdev/atoms\";\r\nimport { useAtomValue } from \"@mateosuarezdev/atoms/react\";\r\n\r\n/**\r\n * Standard breakpoints for responsive design.\r\n */\r\n// export const mediaQueries = {\r\n// sm: 640,\r\n// md: 768,\r\n// lg: 1024,\r\n// xl: 1280,\r\n// \"2xl\": 1536,\r\n// };\r\n\r\n/**\r\n * Observable state tracking whether the screen is larger than the 'lg' breakpoint.\r\n * Default to true on server (assumes desktop), update on client.\r\n */\r\n// const largeObservable = observable(\r\n// typeof window !== \"undefined\" ? window.innerWidth > mediaQueries.lg : true\r\n// );\r\nconst largeAtom = atom(\r\n typeof window !== \"undefined\" ? window.innerWidth > 1024 : true\r\n);\r\n\r\nlet listening = false;\r\n\r\n/**\r\n * Throttled resize handler to update screen size state.\r\n * Only updates the observable when the viewport crosses the large screen threshold.\r\n * Throttled to improve performance by limiting update frequency.\r\n */\r\nconst handleResize = throttle(() => {\r\n largeAtom.set(window.innerWidth > 1024);\r\n});\r\n\r\n// Only set up listeners on client\r\nif (typeof window !== \"undefined\") {\r\n if (listening) {\r\n window.removeEventListener(\"resize\", handleResize);\r\n listening = false;\r\n }\r\n\r\n // Attach resize listener to update state when window is resized\r\n window.addEventListener(\"resize\", handleResize);\r\n listening = true;\r\n}\r\n\r\n/**\r\n * Custom hook that returns whether the current viewport is larger than the 'lg' breakpoint.\r\n *\r\n * @example\r\n * function MyComponent() {\r\n * const lg = useLargeScreen();\r\n *\r\n * return (\r\n * <div>\r\n * {lg\r\n * ? <DesktopLayout />\r\n * : <MobileLayout />\r\n * }\r\n * </div>\r\n * );\r\n * }\r\n *\r\n * @returns {boolean} True if the current viewport width is larger than the 'lg' breakpoint\r\n */\r\nconst useLargeScreen = (): boolean => {\r\n useLayoutEffect(() => {\r\n largeAtom.set(window.innerWidth > 1024);\r\n }, []);\r\n return useAtomValue(largeAtom);\r\n};\r\n\r\nexport { useLargeScreen };\r\n","function useMergedRef<T>(...refs: React.Ref<T>[]): React.RefCallback<T> {\r\n return (value) => {\r\n refs.forEach((ref) => {\r\n if (typeof ref === \"function\") {\r\n ref(value);\r\n } else if (ref != null) {\r\n (ref as React.MutableRefObject<T | null>).current = value;\r\n }\r\n });\r\n };\r\n}\r\n\r\nexport { useMergedRef };\r\n","import { CSSProperties, useCallback, useRef } from \"react\";\r\nimport { useLargeScreen } from \"./use-large-screen\";\r\n\r\n// new ripple uses a wrapper so the parent doesn't need overflow-hidden\r\nconst useRipple = <T extends HTMLElement>(\r\n enabled: boolean = true,\r\n contrastRipple?: boolean\r\n) => {\r\n const lg = useLargeScreen();\r\n const ref = useRef<T>(null);\r\n\r\n const ripple = useCallback(\r\n (event: React.MouseEvent<T>) => {\r\n if (!enabled || lg) return;\r\n\r\n const button = ref.current;\r\n if (!button) return;\r\n\r\n // Get button's position and dimensions\r\n const buttonRect = button.getBoundingClientRect();\r\n const rippleSize = Math.max(buttonRect.width, buttonRect.height);\r\n const offsetX = event.clientX - buttonRect.left - rippleSize / 2;\r\n const offsetY = event.clientY - buttonRect.top - rippleSize / 2;\r\n\r\n // Create the ripple wrapper (this element holds the ripple)\r\n const rippleWrapper = document.createElement(\"span\");\r\n rippleWrapper.classList.add(\"ripple-wrapper\");\r\n\r\n // Create the ripple element (circle)\r\n const rippleEl = document.createElement(\"span\");\r\n rippleEl.classList.add(\"ripple\");\r\n rippleEl.style.backgroundColor = contrastRipple\r\n ? \"var(--ripple-contrast)\"\r\n : \"var(--ripple-main)\";\r\n\r\n // Set the position and size of the ripple\r\n rippleEl.style.width = `${rippleSize}px`;\r\n rippleEl.style.height = `${rippleSize}px`;\r\n rippleEl.style.left = `${offsetX}px`;\r\n rippleEl.style.top = `${offsetY}px`;\r\n\r\n rippleWrapper.appendChild(rippleEl);\r\n\r\n const ripples = button.getElementsByClassName(\"ripple-wrapper\");\r\n if (ripples?.length) {\r\n for (const ripple of ripples) {\r\n ripple.remove();\r\n }\r\n }\r\n\r\n // Append the ripple wrapper to the button\r\n button.appendChild(rippleWrapper);\r\n\r\n // Remove the ripple wrapper after animation\r\n setTimeout(() => {\r\n rippleWrapper.remove();\r\n }, 700); // Match the animation duration\r\n },\r\n [enabled, lg, contrastRipple]\r\n );\r\n\r\n return {\r\n ref,\r\n ripple,\r\n styles: {\r\n position: \"relative\",\r\n } as CSSProperties,\r\n };\r\n};\r\n\r\nexport { useRipple };\r\n\r\n// ios like fade effect\r\n// const useRipple = (enabled = true, contrastRipple?: boolean) => {\r\n// const lg = useLargeScreen();\r\n// const ref = useRef<HTMLElement>(null);\r\n\r\n// const ripple = useCallback(\r\n// (event: React.MouseEvent<HTMLElement>) => {\r\n// if (!enabled || lg) return;\r\n\r\n// const rippleEl = document.createElement(\"span\");\r\n// rippleEl.classList.add(\"simple-ripple\");\r\n// rippleEl.style.backgroundColor = contrastRipple\r\n// ? \"var(--ripple-contrast)\"\r\n// : \"var(--ripple-main)\";\r\n\r\n// const target = ref.current;\r\n// if (!target) return;\r\n\r\n// target.appendChild(rippleEl);\r\n\r\n// // Remove after animation\r\n// setTimeout(() => {\r\n// rippleEl.remove();\r\n// }, 400); // Match animation duration\r\n// },\r\n// [enabled, lg, contrastRipple]\r\n// );\r\n\r\n// return { ref, ripple };\r\n// };\r\n\r\n// export default useRipple;\r\n\r\n// old ripple requires parent with overflow-hidden\r\n// const useRipple = (enabled: boolean = true, contrastRipple?: boolean) => {\r\n// const lg = useLargeScreen();\r\n// const ref = useRef<HTMLElement>(null);\r\n// const ripple = useCallback(\r\n// (event: React.MouseEvent<HTMLElement, MouseEvent>) => {\r\n// if (!lg && enabled) {\r\n// const rippleContainer = event.currentTarget.getBoundingClientRect();\r\n// const circle = document.createElement(\"span\");\r\n// const diameter = Math.max(\r\n// rippleContainer.width,\r\n// rippleContainer.height\r\n// );\r\n// const radius = diameter / 2;\r\n\r\n// circle.style.width = circle.style.height = `${diameter}px`;\r\n// circle.style.left = `${\r\n// event.clientX - (rippleContainer.left + radius)\r\n// }px`;\r\n// circle.style.top = `${\r\n// event.clientY - (rippleContainer.top + radius)\r\n// }px`;\r\n// circle.style.backgroundColor = `${\r\n// contrastRipple ? \"var(--ripple-contrast)\" : \"var(--ripple-main)\"\r\n// }`;\r\n// circle.style.pointerEvents = \"none\";\r\n// circle.classList.add(\"ripple\");\r\n\r\n// const ripples = ref.current?.getElementsByClassName(\"ripple\");\r\n// if (ripples?.length) {\r\n// for (const ripple of ripples) {\r\n// ripple.remove();\r\n// }\r\n// }\r\n\r\n// ref.current?.appendChild(circle);\r\n\r\n// (async () => {\r\n// //await sleep(750);\r\n// setTimeout(\r\n// () => ref.current?.getElementsByClassName(\"ripple\")[0]?.remove(),\r\n// 750\r\n// );\r\n// })();\r\n// }\r\n// },\r\n// [contrastRipple, lg, enabled]\r\n// );\r\n\r\n// return {\r\n// ref: ref,\r\n// ripple: ripple,\r\n// classNames: \"relative overflow-hidden inline-block\",\r\n// };\r\n// };\r\n\r\n// export default useRipple;\r\n","import { useCallback, useEffect, useId, useRef, useState } from \"react\";\r\n\r\ntype UsePopoverProps = {\r\n // routerMode?: \"stack\" | \"outlet\";\r\n scrollerId?: string;\r\n /**\r\n * To point scroller id to route id-content instead of id\r\n */\r\n // useScrollerSuffix?: boolean;\r\n align?: \"start\" | \"center\" | \"end\";\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n offset?: number;\r\n collisionPadding?: number;\r\n avoidCollisions?: boolean;\r\n closeOnScroll?: boolean;\r\n // observeResize?: boolean;\r\n onOpen?: VoidFunction;\r\n onClose?: VoidFunction;\r\n};\r\n\r\n// const hybridUseRoute = (routerMode: \"stack\" | \"outlet\") => {\r\n// if (routerMode === \"stack\") return stackUseRoute();\r\n// return outletUseRoute();\r\n// };\r\n\r\nexport const usePopover = <T extends HTMLElement, P extends HTMLElement>({\r\n // routerMode = \"outlet\",\r\n scrollerId,\r\n // useScrollerSuffix,\r\n align = \"start\",\r\n side = \"bottom\",\r\n offset = 8,\r\n collisionPadding = 8,\r\n avoidCollisions = true,\r\n closeOnScroll = true,\r\n // observeResize = false,\r\n onOpen,\r\n onClose,\r\n}: UsePopoverProps = {}) => {\r\n // const { id } = useRoute();\r\n const [open, setOpen] = useState(false);\r\n const [popoverDimensions, setPopoverDimensions] = useState({\r\n width: 192,\r\n height: 300,\r\n });\r\n const triggerRef = useRef<T>(null);\r\n const popoverRef = useRef<P>(null);\r\n const triggerRectRef = useRef({\r\n left: 0,\r\n right: 0,\r\n top: 0,\r\n bottom: 0,\r\n x: 0,\r\n y: 0,\r\n width: 0,\r\n height: 0,\r\n });\r\n const scrollerRef = useRef<HTMLElement | null>(null);\r\n\r\n // Generate unique IDs for accessibility\r\n const triggerId = useId();\r\n\r\n // Calculate optimal position with collision detection\r\n const getPopoverPosition = useCallback(\r\n (customRect?: DOMRect) => {\r\n const rect = customRect ?? triggerRectRef.current;\r\n if (!rect) return { x: 0, top: 0, bottom: undefined };\r\n\r\n const popoverWidth = popoverDimensions.width;\r\n const popoverHeight = popoverDimensions.height;\r\n\r\n return calculatePopoverPosition({\r\n triggerRect: rect as DOMRect,\r\n popoverWidth,\r\n popoverHeight,\r\n align,\r\n side,\r\n offset: offset,\r\n collisionPadding: collisionPadding,\r\n avoidCollisions: avoidCollisions,\r\n });\r\n },\r\n [triggerRectRef.current, popoverDimensions, align, side]\r\n );\r\n\r\n // const popoverPosition = useMemo(\r\n // (customRect?: DOMRect) => {\r\n // const rect = customRect ?? triggerRectRef.current;\r\n // if (!rect) return { x: 0, top: 0, bottom: undefined };\r\n\r\n // const popoverWidth = popoverDimensions.width;\r\n // const popoverHeight = popoverDimensions.height;\r\n\r\n // // toast.info(`New dimensions, ${popoverWidth} ${popoverHeight}`);\r\n\r\n // const position = calculatePopoverPosition({\r\n // triggerRect: rect as DOMRect,\r\n // popoverWidth,\r\n // popoverHeight,\r\n // align,\r\n // side,\r\n // offset: offset,\r\n // collisionPadding: collisionPadding,\r\n // avoidCollisions: avoidCollisions,\r\n // });\r\n\r\n // return position;\r\n // },\r\n // [triggerRectRef.current, popoverDimensions, align, side]\r\n // );\r\n\r\n useEffect(() => {\r\n if (!open || !scrollerId) return;\r\n\r\n // let scrollerId = id;\r\n\r\n // if (customScrollerId) {\r\n // scrollerId = customScrollerId;\r\n // } else if (routerMode === \"stack\" || useScrollerSuffix) {\r\n // scrollerId = `${id}-content`;\r\n // }\r\n\r\n scrollerRef.current = document.getElementById(scrollerId);\r\n\r\n if (!scrollerRef.current) return;\r\n\r\n // added here to update popoverdimensions\r\n if (open) {\r\n updatePopoverDimensions();\r\n }\r\n\r\n // const handleScroll = throttle(() => setOpen(false), 1000);\r\n const handleScroll = () => {\r\n if (!scrollerRef.current) return;\r\n setOpen(false);\r\n onOpen?.();\r\n scrollerRef.current.removeEventListener(\"scroll\", handleScroll);\r\n };\r\n\r\n if (closeOnScroll) {\r\n scrollerRef.current.addEventListener(\"scroll\", handleScroll, {\r\n passive: true,\r\n });\r\n }\r\n\r\n return () => {\r\n scrollerRef.current &&\r\n scrollerRef.current.removeEventListener(\"scroll\", handleScroll);\r\n };\r\n }, [open, scrollerId]);\r\n\r\n // useEffect(() => {\r\n // if (!observeResize) return;\r\n // if (!popoverRef.current) return;\r\n // const observer = new ResizeObserver(() => {\r\n // updatePopoverDimensions();\r\n // if (triggerRef.current) {\r\n // // const rect = triggerRef.current.getBoundingClientRect();\r\n // // triggerRectRef.current = rect;\r\n // // Recalculate y with new height\r\n // const { x, top, bottom } = getPopoverPosition(\r\n // triggerRectRef.current as DOMRect\r\n // );\r\n // popoverRef.current!.style.left = `${x}px`;\r\n // if (top) {\r\n // popoverRef.current!.style = `${top}px`;\r\n // } else {\r\n // popoverRef.current!.style.removeProperty(\"top\");\r\n // }\r\n // if (bottom) {\r\n // popoverRef.current!.style = `${bottom}px`;\r\n // } else {\r\n // popoverRef.current!.style.removeProperty(\"bottom\");\r\n // }\r\n // }\r\n // });\r\n // observer.observe(popoverRef.current);\r\n // return () => observer.disconnect();\r\n // }, [observeResize, getPopoverPosition]);\r\n\r\n const updatePopoverDimensions = () => {\r\n if (!popoverRef.current) return;\r\n setPopoverDimensions({\r\n width: popoverRef.current.offsetWidth,\r\n height: popoverRef.current.offsetHeight,\r\n });\r\n };\r\n\r\n const toggle = useCallback(() => {\r\n if (!triggerRef.current) return;\r\n const rect = triggerRef.current.getBoundingClientRect();\r\n triggerRectRef.current = {\r\n left: rect.left,\r\n right: rect.right,\r\n top: rect.top,\r\n bottom: rect.bottom,\r\n x: rect.x,\r\n y: rect.y,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n setOpen((prev) => {\r\n if (prev) {\r\n onClose?.();\r\n } else {\r\n onOpen?.();\r\n }\r\n return !prev;\r\n });\r\n }, []);\r\n\r\n const close = useCallback(() => {\r\n setOpen(false);\r\n onClose?.();\r\n }, []);\r\n\r\n return {\r\n triggerRef,\r\n triggerProps: {\r\n id: triggerId,\r\n \"aria-expanded\": open,\r\n \"aria-haspopup\": true,\r\n },\r\n popoverRef,\r\n // popoverPosition,\r\n /**\r\n * Call this sync before rendering the popover\r\n */\r\n getPopoverPosition,\r\n open,\r\n toggle,\r\n close,\r\n };\r\n};\r\n\r\ntype PositionOptions = {\r\n triggerRect: DOMRect;\r\n popoverWidth: number;\r\n popoverHeight: number;\r\n align?: \"start\" | \"center\" | \"end\";\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n offset?: number;\r\n collisionPadding?: number;\r\n avoidCollisions?: boolean;\r\n};\r\n\r\nexport const calculatePopoverPosition = ({\r\n triggerRect,\r\n popoverWidth,\r\n popoverHeight,\r\n align = \"start\",\r\n side = \"bottom\",\r\n offset = 4,\r\n collisionPadding = 8,\r\n avoidCollisions = true,\r\n}: PositionOptions) => {\r\n const viewport = {\r\n width: window.innerWidth,\r\n height: window.innerHeight,\r\n };\r\n\r\n let x = 0;\r\n let y = 0;\r\n\r\n if (avoidCollisions) {\r\n if (side === \"right\") {\r\n // Calculate overflow on both sides\r\n const rightSideX = triggerRect.right + offset;\r\n const leftSideX = triggerRect.left - popoverWidth - offset;\r\n\r\n const rightOverflow = Math.max(\r\n 0,\r\n rightSideX + popoverWidth - (viewport.width - collisionPadding)\r\n );\r\n const leftOverflow = Math.max(0, collisionPadding - leftSideX);\r\n\r\n // Choose the side with less overflow\r\n if (rightOverflow <= leftOverflow) {\r\n // Use right side, but adjust if needed\r\n x = rightSideX;\r\n if (rightOverflow > 0) {\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n } else {\r\n // Use left side, but adjust if needed\r\n x = leftSideX;\r\n if (leftOverflow > 0) {\r\n x = collisionPadding;\r\n }\r\n }\r\n\r\n // Vertical positioning - align with trigger top\r\n y = triggerRect.top;\r\n\r\n // Adjust if would go off bottom\r\n if (y + popoverHeight > viewport.height - collisionPadding) {\r\n y = viewport.height - popoverHeight - collisionPadding;\r\n }\r\n if (y < collisionPadding) {\r\n y = collisionPadding;\r\n }\r\n } else if (side === \"left\") {\r\n // Calculate overflow on both sides\r\n const leftSideX = triggerRect.left - popoverWidth - offset;\r\n const rightSideX = triggerRect.right + offset;\r\n\r\n const leftOverflow = Math.max(0, collisionPadding - leftSideX);\r\n const rightOverflow = Math.max(\r\n 0,\r\n rightSideX + popoverWidth - (viewport.width - collisionPadding)\r\n );\r\n\r\n // Choose the side with less overflow\r\n if (leftOverflow <= rightOverflow) {\r\n // Use left side, but adjust if needed\r\n x = leftSideX;\r\n if (leftOverflow > 0) {\r\n x = collisionPadding;\r\n }\r\n } else {\r\n // Use right side, but adjust if needed\r\n x = rightSideX;\r\n if (rightOverflow > 0) {\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n }\r\n\r\n // Vertical positioning - align with trigger top\r\n y = triggerRect.top;\r\n\r\n // Adjust if would go off bottom\r\n if (y + popoverHeight > viewport.height - collisionPadding) {\r\n y = viewport.height - popoverHeight - collisionPadding;\r\n }\r\n if (y < collisionPadding) {\r\n y = collisionPadding;\r\n }\r\n } else if (side === \"bottom\") {\r\n // Vertical positioning\r\n const spaceBelow = viewport.height - triggerRect.bottom;\r\n const spaceAbove = triggerRect.top;\r\n\r\n if (spaceBelow >= popoverHeight + offset) {\r\n y = triggerRect.bottom + offset;\r\n } else if (spaceAbove >= popoverHeight + offset) {\r\n y = triggerRect.top - popoverHeight - offset;\r\n } else {\r\n // Not enough space either way, prefer bottom but constrain\r\n y = triggerRect.bottom + offset;\r\n y = Math.min(y, viewport.height - popoverHeight - collisionPadding);\r\n }\r\n\r\n // Horizontal positioning with collision detection\r\n const spaceRight = viewport.width - triggerRect.left;\r\n const spaceLeft = triggerRect.right;\r\n\r\n if (align === \"start\") {\r\n x = triggerRect.left;\r\n\r\n // Check right edge collision\r\n if (x + popoverWidth > viewport.width - collisionPadding) {\r\n if (spaceLeft >= popoverWidth) {\r\n // Flip to end alignment\r\n x = triggerRect.right - popoverWidth;\r\n } else {\r\n // Pull back to fit\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n }\r\n } else if (align === \"end\") {\r\n x = triggerRect.right - popoverWidth;\r\n\r\n // Check left edge collision\r\n if (x < collisionPadding) {\r\n if (spaceRight >= popoverWidth) {\r\n // Flip to start alignment\r\n x = triggerRect.left;\r\n } else {\r\n // Push right to fit\r\n x = collisionPadding;\r\n }\r\n }\r\n } else {\r\n // align === \"center\"\r\n const centeredX =\r\n triggerRect.left + triggerRect.width / 2 - popoverWidth / 2;\r\n\r\n if (\r\n centeredX >= collisionPadding &&\r\n centeredX + popoverWidth <= viewport.width - collisionPadding\r\n ) {\r\n x = centeredX;\r\n } else if (centeredX < collisionPadding) {\r\n x = collisionPadding;\r\n } else {\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n }\r\n } else {\r\n // side === \"top\"\r\n // Vertical positioning\r\n const spaceAbove = triggerRect.top;\r\n const spaceBelow = viewport.height - triggerRect.bottom;\r\n\r\n if (spaceAbove >= popoverHeight + offset) {\r\n y = triggerRect.top - popoverHeight - offset;\r\n } else if (spaceBelow >= popoverHeight + offset) {\r\n y = triggerRect.bottom + offset;\r\n } else {\r\n // Not enough space either way, prefer top but constrain\r\n y = triggerRect.top - popoverHeight - offset;\r\n y = Math.max(collisionPadding, y);\r\n }\r\n\r\n // Horizontal positioning (same logic as bottom)\r\n const spaceRight = viewport.width - triggerRect.left;\r\n const spaceLeft = triggerRect.right;\r\n\r\n if (align === \"start\") {\r\n x = triggerRect.left;\r\n\r\n if (x + popoverWidth > viewport.width - collisionPadding) {\r\n if (spaceLeft >= popoverWidth) {\r\n x = triggerRect.right - popoverWidth;\r\n } else {\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n }\r\n } else if (align === \"end\") {\r\n x = triggerRect.right - popoverWidth;\r\n\r\n if (x < collisionPadding) {\r\n if (spaceRight >= popoverWidth) {\r\n x = triggerRect.left;\r\n } else {\r\n x = collisionPadding;\r\n }\r\n }\r\n } else {\r\n // center\r\n const centeredX =\r\n triggerRect.left + triggerRect.width / 2 - popoverWidth / 2;\r\n\r\n if (\r\n centeredX >= collisionPadding &&\r\n centeredX + popoverWidth <= viewport.width - collisionPadding\r\n ) {\r\n x = centeredX;\r\n } else if (centeredX < collisionPadding) {\r\n x = collisionPadding;\r\n } else {\r\n x = viewport.width - popoverWidth - collisionPadding;\r\n }\r\n }\r\n }\r\n\r\n // Final bounds check to ensure nothing goes outside viewport\r\n x = Math.max(\r\n collisionPadding,\r\n Math.min(x, viewport.width - popoverWidth - collisionPadding)\r\n );\r\n y = Math.max(\r\n collisionPadding,\r\n Math.min(y, viewport.height - popoverHeight - collisionPadding)\r\n );\r\n } else {\r\n // Simple positioning without collision detection\r\n if (side === \"right\") {\r\n x = triggerRect.right + offset;\r\n y = triggerRect.top;\r\n } else if (side === \"left\") {\r\n x = triggerRect.left - popoverWidth - offset;\r\n y = triggerRect.top;\r\n } else if (side === \"bottom\") {\r\n y = triggerRect.bottom + offset;\r\n } else {\r\n y = triggerRect.top - popoverHeight - offset;\r\n }\r\n\r\n if (side === \"top\" || side === \"bottom\") {\r\n if (align === \"start\") {\r\n x = triggerRect.left;\r\n } else if (align === \"end\") {\r\n x = triggerRect.right - popoverWidth;\r\n } else {\r\n x = triggerRect.left + triggerRect.width / 2 - popoverWidth / 2;\r\n }\r\n }\r\n }\r\n\r\n let top: number | undefined;\r\n let bottom: number | undefined;\r\n\r\n // If popover's bottom edge is above the trigger top → popover is above\r\n if (y + popoverHeight <= triggerRect.top) {\r\n bottom = window.innerHeight - (y + popoverHeight); // attach to bottom\r\n } else {\r\n // popover is below trigger → attach to top\r\n top = y;\r\n }\r\n\r\n return { x, top, bottom };\r\n};\r\n","import { useEffect, useRef } from \"react\";\r\n\r\n// Basic version\r\nexport function useClickAway<T extends HTMLElement = HTMLElement>(\r\n callback: () => void\r\n) {\r\n const ref = useRef<T>(null);\r\n\r\n useEffect(() => {\r\n const handleClickAway = (event: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(event.target as Node)) {\r\n callback();\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickAway);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickAway);\r\n };\r\n }, [callback]);\r\n\r\n return ref;\r\n}\r\n\r\n// Advanced version with options\r\ninterface UseClickOutsideOptions {\r\n enabled?: boolean;\r\n events?: string[];\r\n excludeRefs?: React.RefObject<HTMLElement>[];\r\n}\r\n\r\nexport function useClickAwayAdvanced<T extends HTMLElement = HTMLElement>(\r\n callback: () => void,\r\n options: UseClickOutsideOptions = {}\r\n) {\r\n const {\r\n enabled = true,\r\n events = [\"mousedown\", \"touchstart\"],\r\n excludeRefs = [],\r\n } = options;\r\n\r\n const ref = useRef<T>(null);\r\n\r\n useEffect(() => {\r\n if (!enabled) return;\r\n\r\n const handleClick = (event: Event) => {\r\n const target = event.target as Node;\r\n\r\n // Check if click is inside the main element\r\n if (ref.current?.contains(target)) {\r\n return;\r\n }\r\n\r\n // Check if click is inside any excluded elements\r\n const isInsideExcluded = excludeRefs.some((excludeRef) =>\r\n excludeRef.current?.contains(target)\r\n );\r\n\r\n if (isInsideExcluded) {\r\n return;\r\n }\r\n\r\n callback();\r\n };\r\n\r\n events.forEach((eventName) => {\r\n document.addEventListener(eventName, handleClick);\r\n });\r\n\r\n return () => {\r\n events.forEach((eventName) => {\r\n document.removeEventListener(eventName, handleClick);\r\n });\r\n };\r\n }, [callback, enabled, events, excludeRefs]);\r\n\r\n return ref;\r\n}\r\n\r\n// Version that accepts external ref\r\nexport function useClickAwayWithRef<T extends HTMLElement | null = HTMLElement>(\r\n ref: React.RefObject<T>,\r\n callback: (event: MouseEvent) => void,\r\n enabled: boolean = true\r\n) {\r\n useEffect(() => {\r\n if (!enabled) return;\r\n\r\n const handleClickAway = (event: MouseEvent) => {\r\n if (ref.current && !ref.current.contains(event.target as Node)) {\r\n callback(event);\r\n }\r\n };\r\n\r\n document.addEventListener(\"mousedown\", handleClickAway);\r\n\r\n return () => {\r\n document.removeEventListener(\"mousedown\", handleClickAway);\r\n };\r\n }, [ref, callback, enabled]);\r\n}\r\n\r\n// usage example\r\n\r\n// Dropdown with separate trigger button\r\n// function Dropdown() {\r\n// const [isOpen, setIsOpen] = useState(false);\r\n// const dropdownRef = useRef(null);\r\n// const triggerRef = useRef(null);\r\n\r\n// const ref = useClickAwayAdvanced(() => setIsOpen(false), {\r\n// enabled: isOpen,\r\n// excludeRefs: [triggerRef], // Don't close when clicking trigger\r\n// events: ['mousedown', 'touchstart'] // Mobile support\r\n// });\r\n\r\n// return (\r\n// <>\r\n// <button ref={triggerRef} onClick={() => setIsOpen(!isOpen)}>\r\n// Toggle\r\n// </button>\r\n// {isOpen && (\r\n// <div ref={ref}>Dropdown content</div>\r\n// )}\r\n// </>\r\n// );\r\n// }\r\n","import { useEffect, useRef } from \"react\";\r\n\r\ntype KeyMapping = {\r\n [key: string]: (event: KeyboardEvent) => void;\r\n};\r\n\r\ntype UseKeyListenerOptions = {\r\n target?: EventTarget | HTMLElement;\r\n event?: \"keydown\" | \"keyup\" | \"keypress\";\r\n enabled?: boolean;\r\n};\r\n\r\n/**\r\n * Custom hook for handling keyboard events in React\r\n *\r\n * @param keyMap - Object mapping keys to callback functions\r\n * @param options - Additional options for event handling\r\n *\r\n * @example\r\n * useKeyListener({\r\n * 'Escape': (e) => {\r\n * e.preventDefault();\r\n * setIsOpen(false);\r\n * },\r\n * 'Tab': (e) => {\r\n * if (document.activeElement === inputRef.current) {\r\n * e.preventDefault();\r\n * // Custom tab handling logic\r\n * }\r\n * }\r\n * });\r\n */\r\nfunction useKeyListener(\r\n keyMap: KeyMapping,\r\n { target = window, event = \"keydown\", enabled }: UseKeyListenerOptions = {}\r\n) {\r\n // Use a ref to keep the latest keyMap without triggering effect\r\n const keyMapRef = useRef<KeyMapping>(keyMap);\r\n\r\n // Update ref when keyMap changes\r\n useEffect(() => {\r\n keyMapRef.current = keyMap;\r\n }, [keyMap]);\r\n\r\n useEffect(() => {\r\n if (!enabled) return;\r\n const handleKeyEvent = (e: KeyboardEvent) => {\r\n const key = e.key;\r\n const callback = keyMapRef.current[key];\r\n\r\n if (callback) {\r\n callback(e);\r\n }\r\n };\r\n\r\n target.addEventListener(event, handleKeyEvent as EventListener);\r\n\r\n return () => {\r\n target.removeEventListener(event, handleKeyEvent as EventListener);\r\n };\r\n }, [target, event, enabled]);\r\n}\r\n\r\nexport { useKeyListener };\r\n","import { forwardRef, useState, ForwardedRef } from \"react\";\r\nimport { cn } from \"../utils\";\r\nimport { useMergedRef, useRipple } from \"../hooks\";\r\n\r\nexport type ButtonProps = React.ButtonHTMLAttributes<HTMLButtonElement> & {\r\n color?: keyof typeof colorStyles;\r\n size?: keyof typeof sizeStyles;\r\n fontWeight?: keyof typeof fontWeightStyles;\r\n rounded?: keyof typeof borderRadiusStyles;\r\n state?: \"enabled\" | \"disabled\" | \"loading\";\r\n onClick?: (e: React.MouseEvent<HTMLButtonElement, MouseEvent>) => void;\r\n className?: string;\r\n withRipple?: boolean;\r\n contrastRipple?: boolean;\r\n showFocus?: \"all\" | \"desktop\" | \"mobile\" | \"none\";\r\n withDisabledDelay?: boolean;\r\n type?: \"button\" | \"submit\" | \"reset\";\r\n children?: React.ReactNode;\r\n};\r\n\r\n// Base button styles that apply to all variants\r\nconst baseStyles =\r\n \"relative shrink-0 select-none transition outline-none duration-200 ease-out focus-visible:ring-border-brand-light flex items-center justify-center cursor-pointer\"; //was pl-1.5 and rounded-lg\r\n\r\nconst sizeStyles = {\r\n xs: \"text-xs px-1 gap-x-0.5 py-1\",\r\n sm: \"text-sm px-2.5 gap-x-1 py-1.5\",\r\n mdsm: \"text-sm px-3 gap-x-1.5 py-2.5\",\r\n md: \"text-base px-4 gap-x-1.5 py-2.5\",\r\n lg: \"text-base px-4 gap-x-1.5 py-3.5\",\r\n picker: \"text-base px-2 py-2 gap-x-1.5\",\r\n iconXs: \"text-xs p-1\",\r\n iconSm: \"text-sm p-2\",\r\n iconMd: \"text-base p-3\",\r\n iconLg: \"text-base p-4\",\r\n};\r\n\r\n// Focus styles based on showFocus prop\r\nconst focusStyles = {\r\n all: \"focus-visible:ring-1\",\r\n desktop: \"lg:focus-visible:ring-1\",\r\n mobile: \"focus-visible:ring-1 lg:focus-ring-0\",\r\n none: \"\",\r\n};\r\n\r\nconst fontWeightStyles = {\r\n light: \"font-light\",\r\n normal: \"font-normal\",\r\n medium: \"font-medium\",\r\n semibold: \"font-semibold\",\r\n bold: \"font-bold\",\r\n};\r\n\r\nconst borderRadiusStyles = {\r\n none: \"rounded-none\",\r\n \"1\": \"rounded-1\",\r\n \"2\": \"rounded-2\",\r\n \"3\": \"rounded-3\",\r\n \"4\": \"rounded-4\",\r\n \"5\": \"rounded-5\",\r\n \"6\": \"rounded-6\",\r\n \"7\": \"rounded-7\",\r\n \"8\": \"rounded-8\",\r\n \"9\": \"rounded-9\",\r\n \"10\": \"rounded-10\",\r\n \"11\": \"rounded-11\",\r\n \"12\": \"rounded-12\",\r\n full: \"rounded-full\",\r\n};\r\n\r\n// Color variant styles\r\nconst colorStyles = {\r\n transparent: \"text-base-12 lg:hover:bg-base-4 focus-visible:ring-base-6\",\r\n transparentinactive: \"text-base-11 lg:hover:bg-base-4\",\r\n brand:\r\n \"bg-brand text-brand-text lg:hover:bg-brand-hover focus-visible:ring-base-6 border border-transparent\",\r\n accent: \"bg-accent text-accent-text lg:hover:bg-accent-hover\",\r\n contrast:\r\n \"bg-base-12 text-base-1 lg:hover:bg-base-11 focus-visible:ring-base-6\",\r\n solid:\r\n \"bg-base-3 dark-theme:bg-base-3 lg:hover:bg-base-4 border border-base-4 focus-visible:ring-base-5\",\r\n solidhybrid:\r\n \"border border-base-5 dark-theme:border-base-4 dark-theme:bg-base-3 lg:hover:bg-base-4 focus-visible:ring-base-6\",\r\n outline: \"border border-base-6 lg:hover:bg-base-3 focus-visible:ring-base-6\",\r\n info: \"bg-blue-3 text-blue-9 lg:hover:bg-blue-4 lg:active:bg-blue-5 focus-visible:ring-blue-9 border border-transparent\",\r\n success:\r\n \"bg-green-4 text-green-9 lg:hover:bg-green-5 lg:active:bg-green-6 focus-visible:ring-green-9 border border-transparent\",\r\n warning:\r\n \"bg-yellow-4 text-yellow-9 lg:hover:bg-yellow-5 lg:active:bg-yellow-6 focus-visible:ring-yellow-9 border border-transparent\",\r\n danger:\r\n \"bg-red-4 text-red-9 lg:hover:bg-red-5 focus-visible:ring-red-9 border border-transparent\",\r\n dangersolid:\r\n \"bg-red-9 text-base-1 dark-theme:text-base-12 lg:hover:bg-red-8 focus-visible:ring-base-6 border border-transparent\",\r\n disabled: \"bg-base-3 text-base-11 border border-transparent\",\r\n};\r\n\r\n// State based styles\r\nconst stateStyles = {\r\n enabled: \"\",\r\n disabled: \"opacity-75\",\r\n loading: \"\",\r\n};\r\n\r\nconst Button = forwardRef(\r\n (\r\n {\r\n color = \"transparent\",\r\n size = \"mdsm\",\r\n fontWeight = \"normal\",\r\n rounded = \"6\",\r\n state = \"enabled\",\r\n onClick,\r\n className,\r\n children,\r\n withRipple = true,\r\n contrastRipple,\r\n showFocus = \"desktop\",\r\n withDisabledDelay = false,\r\n type = \"button\",\r\n ...others\r\n }: ButtonProps,\r\n forwardedRef: ForwardedRef<HTMLButtonElement>\r\n ) => {\r\n const [disabledDelay, setDisabledDelay] = useState(false);\r\n\r\n const handleClick = (\r\n e: React.MouseEvent<HTMLButtonElement, MouseEvent>\r\n ) => {\r\n if (state === \"enabled\") {\r\n if (withDisabledDelay) {\r\n setDisabledDelay(true);\r\n onClick && onClick(e);\r\n setTimeout(() => setDisabledDelay(false), 1000);\r\n } else {\r\n onClick && onClick(e);\r\n }\r\n }\r\n };\r\n\r\n const { ref: rippleRef, ripple } = useRipple(\r\n withRipple,\r\n color === \"contrast\" || contrastRipple\r\n );\r\n\r\n // Merge the ripple ref with forwarded ref\r\n const ref = useMergedRef(rippleRef, forwardedRef);\r\n\r\n return (\r\n <button\r\n ref={ref}\r\n type={type}\r\n disabled={\r\n others.disabled\r\n ? others.disabled\r\n : state === \"disabled\" || state === \"loading\"\r\n }\r\n onMouseDown={ripple}\r\n onClick={(e) => (!disabledDelay ? handleClick(e) : null)}\r\n className={cn(\r\n baseStyles,\r\n sizeStyles[size],\r\n fontWeightStyles[fontWeight],\r\n borderRadiusStyles[rounded],\r\n focusStyles[showFocus],\r\n colorStyles[color],\r\n stateStyles[state],\r\n others.disabled && \"opacity-50\",\r\n className\r\n )}\r\n {...others}\r\n >\r\n {children}\r\n </button>\r\n );\r\n }\r\n);\r\n\r\nButton.displayName = \"Button\";\r\n\r\nexport { Button };\r\n","/**\n * @module constants\n * @summary Useful constants\n * @description\n * Collection of useful date constants.\n *\n * The constants could be imported from `date-fns/constants`:\n *\n * ```ts\n * import { maxTime, minTime } from \"./constants/date-fns/constants\";\n *\n * function isAllowedTime(time) {\n * return time <= maxTime && time >= minTime;\n * }\n * ```\n */\n\n/**\n * @constant\n * @name daysInWeek\n * @summary Days in 1 week.\n */\nexport const daysInWeek = 7;\n\n/**\n * @constant\n * @name daysInYear\n * @summary Days in 1 year.\n *\n * @description\n * How many days in a year.\n *\n * One years equals 365.2425 days according to the formula:\n *\n * > Leap year occurs every 4 years, except for years that are divisible by 100 and not divisible by 400.\n * > 1 mean year = (365+1/4-1/100+1/400) days = 365.2425 days\n */\nexport const daysInYear = 365.2425;\n\n/**\n * @constant\n * @name maxTime\n * @summary Maximum allowed time.\n *\n * @example\n * import { maxTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = 8640000000000001 <= maxTime;\n * //=> false\n *\n * new Date(8640000000000001);\n * //=> Invalid Date\n */\nexport const maxTime = Math.pow(10, 8) * 24 * 60 * 60 * 1000;\n\n/**\n * @constant\n * @name minTime\n * @summary Minimum allowed time.\n *\n * @example\n * import { minTime } from \"./constants/date-fns/constants\";\n *\n * const isValid = -8640000000000001 >= minTime;\n * //=> false\n *\n * new Date(-8640000000000001)\n * //=> Invalid Date\n */\nexport const minTime = -maxTime;\n\n/**\n * @constant\n * @name millisecondsInWeek\n * @summary Milliseconds in 1 week.\n */\nexport const millisecondsInWeek = 604800000;\n\n/**\n * @constant\n * @name millisecondsInDay\n * @summary Milliseconds in 1 day.\n */\nexport const millisecondsInDay = 86400000;\n\n/**\n * @constant\n * @name millisecondsInMinute\n * @summary Milliseconds in 1 minute\n */\nexport const millisecondsInMinute = 60000;\n\n/**\n * @constant\n * @name millisecondsInHour\n * @summary Milliseconds in 1 hour\n */\nexport const millisecondsInHour = 3600000;\n\n/**\n * @constant\n * @name millisecondsInSecond\n * @summary Milliseconds in 1 second\n */\nexport const millisecondsInSecond = 1000;\n\n/**\n * @constant\n * @name minutesInYear\n * @summary Minutes in 1 year.\n */\nexport const minutesInYear = 525600;\n\n/**\n * @constant\n * @name minutesInMonth\n * @summary Minutes in 1 month.\n */\nexport const minutesInMonth = 43200;\n\n/**\n * @constant\n * @name minutesInDay\n * @summary Minutes in 1 day.\n */\nexport const minutesInDay = 1440;\n\n/**\n * @constant\n * @name minutesInHour\n * @summary Minutes in 1 hour.\n */\nexport const minutesInHour = 60;\n\n/**\n * @constant\n * @name monthsInQuarter\n * @summary Months in 1 quarter.\n */\nexport const monthsInQuarter = 3;\n\n/**\n * @constant\n * @name monthsInYear\n * @summary Months in 1 year.\n */\nexport const monthsInYear = 12;\n\n/**\n * @constant\n * @name quartersInYear\n * @summary Quarters in 1 year\n */\nexport const quartersInYear = 4;\n\n/**\n * @constant\n * @name secondsInHour\n * @summary Seconds in 1 hour.\n */\nexport const secondsInHour = 3600;\n\n/**\n * @constant\n * @name secondsInMinute\n * @summary Seconds in 1 minute.\n */\nexport const secondsInMinute = 60;\n\n/**\n * @constant\n * @name secondsInDay\n * @summary Seconds in 1 day.\n */\nexport const secondsInDay = secondsInHour * 24;\n\n/**\n * @constant\n * @name secondsInWeek\n * @summary Seconds in 1 week.\n */\nexport const secondsInWeek = secondsInDay * 7;\n\n/**\n * @constant\n * @name secondsInYear\n * @summary Seconds in 1 year.\n */\nexport const secondsInYear = secondsInDay * daysInYear;\n\n/**\n * @constant\n * @name secondsInMonth\n * @summary Seconds in 1 month\n */\nexport const secondsInMonth = secondsInYear / 12;\n\n/**\n * @constant\n * @name secondsInQuarter\n * @summary Seconds in 1 quarter.\n */\nexport const secondsInQuarter = secondsInMonth * 3;\n\n/**\n * @constant\n * @name constructFromSymbol\n * @summary Symbol enabling Date extensions to inherit properties from the reference date.\n *\n * The symbol is used to enable the `constructFrom` function to construct a date\n * using a reference date and a value. It allows to transfer extra properties\n * from the reference date to the new date. It's useful for extensions like\n * [`TZDate`](https://github.com/date-fns/tz) that accept a time zone as\n * a constructor argument.\n */\nexport const constructFromSymbol = Symbol.for(\"constructDateFrom\");\n","import { constructFromSymbol } from \"./constants.js\";\n\n/**\n * @name constructFrom\n * @category Generic Helpers\n * @summary Constructs a date using the reference date and the value\n *\n * @description\n * The function constructs a new date using the constructor from the reference\n * date and the given value. It helps to build generic functions that accept\n * date extensions.\n *\n * It defaults to `Date` if the passed reference date is a number or a string.\n *\n * Starting from v3.7.0, it allows to construct a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n *\n * @param date - The reference date to take constructor from\n * @param value - The value to create the date\n *\n * @returns Date initialized using the given date and value\n *\n * @example\n * import { constructFrom } from \"./constructFrom/date-fns\";\n *\n * // A function that clones a date preserving the original type\n * function cloneDate<DateType extends Date>(date: DateType): DateType {\n * return constructFrom(\n * date, // Use constructor from the given date\n * date.getTime() // Use the date value to create a new date\n * );\n * }\n */\nexport function constructFrom(date, value) {\n if (typeof date === \"function\") return date(value);\n\n if (date && typeof date === \"object\" && constructFromSymbol in date)\n return date[constructFromSymbol](value);\n\n if (date instanceof Date) return new date.constructor(value);\n\n return new Date(value);\n}\n\n// Fallback for modularized imports:\nexport default constructFrom;\n","import { constructFrom } from \"./constructFrom.js\";\n\n/**\n * @name toDate\n * @category Common Helpers\n * @summary Convert the given argument to an instance of Date.\n *\n * @description\n * Convert the given argument to an instance of Date.\n *\n * If the argument is an instance of Date, the function returns its clone.\n *\n * If the argument is a number, it is treated as a timestamp.\n *\n * If the argument is none of the above, the function returns Invalid Date.\n *\n * Starting from v3.7.0, it clones a date using `[Symbol.for(\"constructDateFrom\")]`\n * enabling to transfer extra properties from the reference date to the new date.\n * It's useful for extensions like [`TZDate`](https://github.com/date-fns/tz)\n * that accept a time zone as a constructor argument.\n *\n * **Note**: *all* Date arguments passed to any *date-fns* function is processed by `toDate`.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param argument - The value to convert\n *\n * @returns The parsed date in the local time zone\n *\n * @example\n * // Clone the date:\n * const result = toDate(new Date(2014, 1, 11, 11, 30, 30))\n * //=> Tue Feb 11 2014 11:30:30\n *\n * @example\n * // Convert the timestamp to date:\n * const result = toDate(1392098430000)\n * //=> Tue Feb 11 2014 11:30:30\n */\nexport function toDate(argument, context) {\n // [TODO] Get rid of `toDate` or `constructFrom`?\n return constructFrom(context || argument, argument);\n}\n\n// Fallback for modularized imports:\nexport default toDate;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link addMonths} function options.\n */\n\n/**\n * @name addMonths\n * @category Month Helpers\n * @summary Add the specified number of months to the given date.\n *\n * @description\n * Add the specified number of months to the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be added.\n * @param options - The options object\n *\n * @returns The new date with the months added\n *\n * @example\n * // Add 5 months to 1 September 2014:\n * const result = addMonths(new Date(2014, 8, 1), 5)\n * //=> Sun Feb 01 2015 00:00:00\n *\n * // Add one month to 30 January 2023:\n * const result = addMonths(new Date(2023, 0, 30), 1)\n * //=> Tue Feb 28 2023 00:00:00\n */\nexport function addMonths(date, amount, options) {\n const _date = toDate(date, options?.in);\n if (isNaN(amount)) return constructFrom(options?.in || date, NaN);\n if (!amount) {\n // If 0 months, no-op to avoid changing times in the hour before end of DST\n return _date;\n }\n const dayOfMonth = _date.getDate();\n\n // The JS Date object supports date math by accepting out-of-bounds values for\n // month, day, etc. For example, new Date(2020, 0, 0) returns 31 Dec 2019 and\n // new Date(2020, 13, 1) returns 1 Feb 2021. This is *almost* the behavior we\n // want except that dates will wrap around the end of a month, meaning that\n // new Date(2020, 13, 31) will return 3 Mar 2021 not 28 Feb 2021 as desired. So\n // we'll default to the end of the desired month by adding 1 to the desired\n // month and using a date of 0 to back up one day to the end of the desired\n // month.\n const endOfDesiredMonth = constructFrom(options?.in || date, _date.getTime());\n endOfDesiredMonth.setMonth(_date.getMonth() + amount + 1, 0);\n const daysInMonth = endOfDesiredMonth.getDate();\n if (dayOfMonth >= daysInMonth) {\n // If we're already at the end of the month, then this is the correct date\n // and we're done.\n return endOfDesiredMonth;\n } else {\n // Otherwise, we now know that setting the original day-of-month value won't\n // cause an overflow, so set the desired day-of-month. Note that we can't\n // just set the date of `endOfDesiredMonth` because that object may have had\n // its time changed in the unusual case where where a DST transition was on\n // the last day of the month and its local time was in the hour skipped or\n // repeated next to a DST transition. So we use `date` instead which is\n // guaranteed to still have the original time.\n _date.setFullYear(\n endOfDesiredMonth.getFullYear(),\n endOfDesiredMonth.getMonth(),\n dayOfMonth,\n );\n return _date;\n }\n}\n\n// Fallback for modularized imports:\nexport default addMonths;\n","let defaultOptions = {};\n\nexport function getDefaultOptions() {\n return defaultOptions;\n}\n\nexport function setDefaultOptions(newOptions) {\n defaultOptions = newOptions;\n}\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfWeek} function options.\n */\n\n/**\n * @name startOfWeek\n * @category Week Helpers\n * @summary Return the start of a week for the given date.\n *\n * @description\n * Return the start of a week for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week\n *\n * @example\n * // The start of a week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Sun Aug 31 2014 00:00:00\n *\n * @example\n * // If the week starts on Monday, the start of the week for 2 September 2014 11:55:00:\n * const result = startOfWeek(new Date(2014, 8, 2, 11, 55, 0), { weekStartsOn: 1 })\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfWeek(date, options) {\n const defaultOptions = getDefaultOptions();\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const _date = toDate(date, options?.in);\n const day = _date.getDay();\n const diff = (day < weekStartsOn ? 7 : 0) + day - weekStartsOn;\n\n _date.setDate(_date.getDate() - diff);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeek;\n","import { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfISOWeek} function options.\n */\n\n/**\n * @name startOfISOWeek\n * @category ISO Week Helpers\n * @summary Return the start of an ISO week for the given date.\n *\n * @description\n * Return the start of an ISO week for the given date.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week\n *\n * @example\n * // The start of an ISO week for 2 September 2014 11:55:00:\n * const result = startOfISOWeek(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfISOWeek(date, options) {\n return startOfWeek(date, { ...options, weekStartsOn: 1 });\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeek;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeekYear} function options.\n */\n\n/**\n * @name getISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Get the ISO week-numbering year of the given date.\n *\n * @description\n * Get the ISO week-numbering year of the given date,\n * which always starts 3 days before the year's first Thursday.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n *\n * @returns The ISO week-numbering year\n *\n * @example\n * // Which ISO-week numbering year is 2 January 2005?\n * const result = getISOWeekYear(new Date(2005, 0, 2))\n * //=> 2004\n */\nexport function getISOWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const fourthOfJanuaryOfNextYear = constructFrom(_date, 0);\n fourthOfJanuaryOfNextYear.setFullYear(year + 1, 0, 4);\n fourthOfJanuaryOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfISOWeek(fourthOfJanuaryOfNextYear);\n\n const fourthOfJanuaryOfThisYear = constructFrom(_date, 0);\n fourthOfJanuaryOfThisYear.setFullYear(year, 0, 4);\n fourthOfJanuaryOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfISOWeek(fourthOfJanuaryOfThisYear);\n\n if (_date.getTime() >= startOfNextYear.getTime()) {\n return year + 1;\n } else if (_date.getTime() >= startOfThisYear.getTime()) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getISOWeekYear;\n","import { toDate } from \"../toDate.js\";\n\n/**\n * Google Chrome as of 67.0.3396.87 introduced timezones with offset that includes seconds.\n * They usually appear for dates that denote time before the timezones were introduced\n * (e.g. for 'Europe/Prague' timezone the offset is GMT+00:57:44 before 1 October 1891\n * and GMT+01:00:00 after that date)\n *\n * Date#getTimezoneOffset returns the offset in minutes and would return 57 for the example above,\n * which would lead to incorrect calculations.\n *\n * This function returns the timezone offset in milliseconds that takes seconds in account.\n */\nexport function getTimezoneOffsetInMilliseconds(date) {\n const _date = toDate(date);\n const utcDate = new Date(\n Date.UTC(\n _date.getFullYear(),\n _date.getMonth(),\n _date.getDate(),\n _date.getHours(),\n _date.getMinutes(),\n _date.getSeconds(),\n _date.getMilliseconds(),\n ),\n );\n utcDate.setUTCFullYear(_date.getFullYear());\n return +date - +utcDate;\n}\n","import { constructFrom } from \"../constructFrom.js\";\n\nexport function normalizeDates(context, ...dates) {\n const normalize = constructFrom.bind(\n null,\n context || dates.find((date) => typeof date === \"object\"),\n );\n return dates.map(normalize);\n}\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfDay} function options.\n */\n\n/**\n * @name startOfDay\n * @category Day Helpers\n * @summary Return the start of a day for the given date.\n *\n * @description\n * Return the start of a day for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a day\n *\n * @example\n * // The start of a day for 2 September 2014 11:55:00:\n * const result = startOfDay(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 02 2014 00:00:00\n */\nexport function startOfDay(date, options) {\n const _date = toDate(date, options?.in);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfDay;\n","import { getTimezoneOffsetInMilliseconds } from \"./_lib/getTimezoneOffsetInMilliseconds.js\";\nimport { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { millisecondsInDay } from \"./constants.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link differenceInCalendarDays} function options.\n */\n\n/**\n * @name differenceInCalendarDays\n * @category Day Helpers\n * @summary Get the number of calendar days between the given dates.\n *\n * @description\n * Get the number of calendar days between the given dates. This means that the times are removed\n * from the dates and then the difference in days is calculated.\n *\n * @param laterDate - The later date\n * @param earlierDate - The earlier date\n * @param options - The options object\n *\n * @returns The number of calendar days\n *\n * @example\n * // How many calendar days are between\n * // 2 July 2011 23:00:00 and 2 July 2012 00:00:00?\n * const result = differenceInCalendarDays(\n * new Date(2012, 6, 2, 0, 0),\n * new Date(2011, 6, 2, 23, 0)\n * )\n * //=> 366\n * // How many calendar days are between\n * // 2 July 2011 23:59:00 and 3 July 2011 00:01:00?\n * const result = differenceInCalendarDays(\n * new Date(2011, 6, 3, 0, 1),\n * new Date(2011, 6, 2, 23, 59)\n * )\n * //=> 1\n */\nexport function differenceInCalendarDays(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n\n const laterStartOfDay = startOfDay(laterDate_);\n const earlierStartOfDay = startOfDay(earlierDate_);\n\n const laterTimestamp =\n +laterStartOfDay - getTimezoneOffsetInMilliseconds(laterStartOfDay);\n const earlierTimestamp =\n +earlierStartOfDay - getTimezoneOffsetInMilliseconds(earlierStartOfDay);\n\n // Round the number of days to the nearest integer because the number of\n // milliseconds in a day is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round((laterTimestamp - earlierTimestamp) / millisecondsInDay);\n}\n\n// Fallback for modularized imports:\nexport default differenceInCalendarDays;\n","import { constructFrom } from \"./constructFrom.js\";\nimport { getISOWeekYear } from \"./getISOWeekYear.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\n\n/**\n * The {@link startOfISOWeekYear} function options.\n */\n\n/**\n * @name startOfISOWeekYear\n * @category ISO Week-Numbering Year Helpers\n * @summary Return the start of an ISO week-numbering year for the given date.\n *\n * @description\n * Return the start of an ISO week-numbering year,\n * which always starts 3 days before the year's first Thursday.\n * The result will be in the local timezone.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of an ISO week-numbering year\n *\n * @example\n * // The start of an ISO week-numbering year for 2 July 2005:\n * const result = startOfISOWeekYear(new Date(2005, 6, 2))\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfISOWeekYear(date, options) {\n const year = getISOWeekYear(date, options);\n const fourthOfJanuary = constructFrom(options?.in || date, 0);\n fourthOfJanuary.setFullYear(year, 0, 4);\n fourthOfJanuary.setHours(0, 0, 0, 0);\n return startOfISOWeek(fourthOfJanuary);\n}\n\n// Fallback for modularized imports:\nexport default startOfISOWeekYear;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\nimport { startOfDay } from \"./startOfDay.js\";\n\n/**\n * The {@link isSameDay} function options.\n */\n\n/**\n * @name isSameDay\n * @category Day Helpers\n * @summary Are the given dates in the same day (and year and month)?\n *\n * @description\n * Are the given dates in the same day (and year and month)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same day (and year and month)\n *\n * @example\n * // Are 4 September 06:00:00 and 4 September 18:00:00 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4, 6, 0), new Date(2014, 8, 4, 18, 0))\n * //=> true\n *\n * @example\n * // Are 4 September and 4 October in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2014, 9, 4))\n * //=> false\n *\n * @example\n * // Are 4 September, 2014 and 4 September, 2015 in the same day?\n * const result = isSameDay(new Date(2014, 8, 4), new Date(2015, 8, 4))\n * //=> false\n */\nexport function isSameDay(laterDate, earlierDate, options) {\n const [dateLeft_, dateRight_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return +startOfDay(dateLeft_) === +startOfDay(dateRight_);\n}\n\n// Fallback for modularized imports:\nexport default isSameDay;\n","/**\n * @name isDate\n * @category Common Helpers\n * @summary Is the given value a date?\n *\n * @description\n * Returns true if the given value is an instance of Date. The function works for dates transferred across iframes.\n *\n * @param value - The value to check\n *\n * @returns True if the given value is a date\n *\n * @example\n * // For a valid date:\n * const result = isDate(new Date())\n * //=> true\n *\n * @example\n * // For an invalid date:\n * const result = isDate(new Date(NaN))\n * //=> true\n *\n * @example\n * // For some value:\n * const result = isDate('2014-02-31')\n * //=> false\n *\n * @example\n * // For an object:\n * const result = isDate({})\n * //=> false\n */\nexport function isDate(value) {\n return (\n value instanceof Date ||\n (typeof value === \"object\" &&\n Object.prototype.toString.call(value) === \"[object Date]\")\n );\n}\n\n// Fallback for modularized imports:\nexport default isDate;\n","import { isDate } from \"./isDate.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * @name isValid\n * @category Common Helpers\n * @summary Is the given date valid?\n *\n * @description\n * Returns false if argument is Invalid Date and true otherwise.\n * Argument is converted to Date using `toDate`. See [toDate](https://date-fns.org/docs/toDate)\n * Invalid Date is a Date, whose time value is NaN.\n *\n * Time value of Date: http://es5.github.io/#x15.9.1.1\n *\n * @param date - The date to check\n *\n * @returns The date is valid\n *\n * @example\n * // For the valid date:\n * const result = isValid(new Date(2014, 1, 31))\n * //=> true\n *\n * @example\n * // For the value, convertible into a date:\n * const result = isValid(1393804800000)\n * //=> true\n *\n * @example\n * // For the invalid date:\n * const result = isValid(new Date(''))\n * //=> false\n */\nexport function isValid(date) {\n return !((!isDate(date) && typeof date !== \"number\") || isNaN(+toDate(date)));\n}\n\n// Fallback for modularized imports:\nexport default isValid;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link endOfMonth} function options.\n */\n\n/**\n * @name endOfMonth\n * @category Month Helpers\n * @summary Return the end of a month for the given date.\n *\n * @description\n * Return the end of a month for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The end of a month\n *\n * @example\n * // The end of a month for 2 September 2014 11:55:00:\n * const result = endOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Tue Sep 30 2014 23:59:59.999\n */\nexport function endOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n const month = _date.getMonth();\n _date.setFullYear(_date.getFullYear(), month + 1, 0);\n _date.setHours(23, 59, 59, 999);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default endOfMonth;\n","import { normalizeDates } from \"./normalizeDates.js\";\n\nexport function normalizeInterval(context, interval) {\n const [start, end] = normalizeDates(context, interval.start, interval.end);\n return { start, end };\n}\n","import { normalizeInterval } from \"./_lib/normalizeInterval.js\";\nimport { constructFrom } from \"./constructFrom.js\";\n\n/**\n * The {@link eachDayOfInterval} function options.\n */\n\n/**\n * The {@link eachDayOfInterval} function result type. It resolves the proper data type.\n * It uses the first argument date object type, starting from the date argument,\n * then the start interval date, and finally the end interval date. If\n * a context function is passed, it uses the context function return type.\n */\n\n/**\n * @name eachDayOfInterval\n * @category Interval Helpers\n * @summary Return the array of dates within the specified time interval.\n *\n * @description\n * Return the array of dates within the specified time interval.\n *\n * @typeParam IntervalType - Interval type.\n * @typeParam Options - Options type.\n *\n * @param interval - The interval.\n * @param options - An object with options.\n *\n * @returns The array with starts of days from the day of the interval start to the day of the interval end\n *\n * @example\n * // Each day between 6 October 2014 and 10 October 2014:\n * const result = eachDayOfInterval({\n * start: new Date(2014, 9, 6),\n * end: new Date(2014, 9, 10)\n * })\n * //=> [\n * // Mon Oct 06 2014 00:00:00,\n * // Tue Oct 07 2014 00:00:00,\n * // Wed Oct 08 2014 00:00:00,\n * // Thu Oct 09 2014 00:00:00,\n * // Fri Oct 10 2014 00:00:00\n * // ]\n */\nexport function eachDayOfInterval(interval, options) {\n const { start, end } = normalizeInterval(options?.in, interval);\n\n let reversed = +start > +end;\n const endTime = reversed ? +start : +end;\n const date = reversed ? end : start;\n date.setHours(0, 0, 0, 0);\n\n let step = options?.step ?? 1;\n if (!step) return [];\n if (step < 0) {\n step = -step;\n reversed = !reversed;\n }\n\n const dates = [];\n\n while (+date <= endTime) {\n dates.push(constructFrom(start, date));\n date.setDate(date.getDate() + step);\n date.setHours(0, 0, 0, 0);\n }\n\n return reversed ? dates.reverse() : dates;\n}\n\n// Fallback for modularized imports:\nexport default eachDayOfInterval;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfMonth} function options.\n */\n\n/**\n * @name startOfMonth\n * @category Month Helpers\n * @summary Return the start of a month for the given date.\n *\n * @description\n * Return the start of a month for the given date. The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments.\n * Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed,\n * or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a month\n *\n * @example\n * // The start of a month for 2 September 2014 11:55:00:\n * const result = startOfMonth(new Date(2014, 8, 2, 11, 55, 0))\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function startOfMonth(date, options) {\n const _date = toDate(date, options?.in);\n _date.setDate(1);\n _date.setHours(0, 0, 0, 0);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfMonth;\n","import { toDate } from \"./toDate.js\";\n\n/**\n * The {@link startOfYear} function options.\n */\n\n/**\n * @name startOfYear\n * @category Year Helpers\n * @summary Return the start of a year for the given date.\n *\n * @description\n * Return the start of a year for the given date.\n * The result will be in the local timezone.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The original date\n * @param options - The options\n *\n * @returns The start of a year\n *\n * @example\n * // The start of a year for 2 September 2014 11:55:00:\n * const result = startOfYear(new Date(2014, 8, 2, 11, 55, 00))\n * //=> Wed Jan 01 2014 00:00:00\n */\nexport function startOfYear(date, options) {\n const date_ = toDate(date, options?.in);\n date_.setFullYear(date_.getFullYear(), 0, 1);\n date_.setHours(0, 0, 0, 0);\n return date_;\n}\n\n// Fallback for modularized imports:\nexport default startOfYear;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"less than a second\",\n other: \"less than {{count}} seconds\",\n },\n\n xSeconds: {\n one: \"1 second\",\n other: \"{{count}} seconds\",\n },\n\n halfAMinute: \"half a minute\",\n\n lessThanXMinutes: {\n one: \"less than a minute\",\n other: \"less than {{count}} minutes\",\n },\n\n xMinutes: {\n one: \"1 minute\",\n other: \"{{count}} minutes\",\n },\n\n aboutXHours: {\n one: \"about 1 hour\",\n other: \"about {{count}} hours\",\n },\n\n xHours: {\n one: \"1 hour\",\n other: \"{{count}} hours\",\n },\n\n xDays: {\n one: \"1 day\",\n other: \"{{count}} days\",\n },\n\n aboutXWeeks: {\n one: \"about 1 week\",\n other: \"about {{count}} weeks\",\n },\n\n xWeeks: {\n one: \"1 week\",\n other: \"{{count}} weeks\",\n },\n\n aboutXMonths: {\n one: \"about 1 month\",\n other: \"about {{count}} months\",\n },\n\n xMonths: {\n one: \"1 month\",\n other: \"{{count}} months\",\n },\n\n aboutXYears: {\n one: \"about 1 year\",\n other: \"about {{count}} years\",\n },\n\n xYears: {\n one: \"1 year\",\n other: \"{{count}} years\",\n },\n\n overXYears: {\n one: \"over 1 year\",\n other: \"over {{count}} years\",\n },\n\n almostXYears: {\n one: \"almost 1 year\",\n other: \"almost {{count}} years\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"in \" + result;\n } else {\n return result + \" ago\";\n }\n }\n\n return result;\n};\n","export function buildFormatLongFn(args) {\n return (options = {}) => {\n // TODO: Remove String()\n const width = options.width ? String(options.width) : args.defaultWidth;\n const format = args.formats[width] || args.formats[args.defaultWidth];\n return format;\n };\n}\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, MMMM do, y\",\n long: \"MMMM do, y\",\n medium: \"MMM d, y\",\n short: \"MM/dd/yyyy\",\n};\n\nconst timeFormats = {\n full: \"h:mm:ss a zzzz\",\n long: \"h:mm:ss a z\",\n medium: \"h:mm:ss a\",\n short: \"h:mm a\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'at' {{time}}\",\n long: \"{{date}} 'at' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'last' eeee 'at' p\",\n yesterday: \"'yesterday at' p\",\n today: \"'today at' p\",\n tomorrow: \"'tomorrow at' p\",\n nextWeek: \"eeee 'at' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, _date, _baseDate, _options) =>\n formatRelativeLocale[token];\n","/**\n * The localize function argument callback which allows to convert raw value to\n * the actual type.\n *\n * @param value - The value to convert\n *\n * @returns The converted value\n */\n\n/**\n * The map of localized values for each width.\n */\n\n/**\n * The index type of the locale unit value. It types conversion of units of\n * values that don't start at 0 (i.e. quarters).\n */\n\n/**\n * Converts the unit value to the tuple of values.\n */\n\n/**\n * The tuple of localized era values. The first element represents BC,\n * the second element represents AD.\n */\n\n/**\n * The tuple of localized quarter values. The first element represents Q1.\n */\n\n/**\n * The tuple of localized day values. The first element represents Sunday.\n */\n\n/**\n * The tuple of localized month values. The first element represents January.\n */\n\nexport function buildLocalizeFn(args) {\n return (value, options) => {\n const context = options?.context ? String(options.context) : \"standalone\";\n\n let valuesArray;\n if (context === \"formatting\" && args.formattingValues) {\n const defaultWidth = args.defaultFormattingWidth || args.defaultWidth;\n const width = options?.width ? String(options.width) : defaultWidth;\n\n valuesArray =\n args.formattingValues[width] || args.formattingValues[defaultWidth];\n } else {\n const defaultWidth = args.defaultWidth;\n const width = options?.width ? String(options.width) : args.defaultWidth;\n\n valuesArray = args.values[width] || args.values[defaultWidth];\n }\n const index = args.argumentCallback ? args.argumentCallback(value) : value;\n\n // @ts-expect-error - For some reason TypeScript just don't want to match it, no matter how hard we try. I challenge you to try to remove it!\n return valuesArray[index];\n };\n}\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"B\", \"A\"],\n abbreviated: [\"BC\", \"AD\"],\n wide: [\"Before Christ\", \"Anno Domini\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"Q1\", \"Q2\", \"Q3\", \"Q4\"],\n wide: [\"1st quarter\", \"2nd quarter\", \"3rd quarter\", \"4th quarter\"],\n};\n\n// Note: in English, the names of days of the week and months are capitalized.\n// If you are making a new locale based on this one, check if the same is true for the language you're working on.\n// Generally, formatted dates should look like they are in the middle of a sentence,\n// e.g. in Spanish language the weekdays and months should be in the lowercase.\nconst monthValues = {\n narrow: [\"J\", \"F\", \"M\", \"A\", \"M\", \"J\", \"J\", \"A\", \"S\", \"O\", \"N\", \"D\"],\n abbreviated: [\n \"Jan\",\n \"Feb\",\n \"Mar\",\n \"Apr\",\n \"May\",\n \"Jun\",\n \"Jul\",\n \"Aug\",\n \"Sep\",\n \"Oct\",\n \"Nov\",\n \"Dec\",\n ],\n\n wide: [\n \"January\",\n \"February\",\n \"March\",\n \"April\",\n \"May\",\n \"June\",\n \"July\",\n \"August\",\n \"September\",\n \"October\",\n \"November\",\n \"December\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"S\", \"M\", \"T\", \"W\", \"T\", \"F\", \"S\"],\n short: [\"Su\", \"Mo\", \"Tu\", \"We\", \"Th\", \"Fr\", \"Sa\"],\n abbreviated: [\"Sun\", \"Mon\", \"Tue\", \"Wed\", \"Thu\", \"Fri\", \"Sat\"],\n wide: [\n \"Sunday\",\n \"Monday\",\n \"Tuesday\",\n \"Wednesday\",\n \"Thursday\",\n \"Friday\",\n \"Saturday\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mi\",\n noon: \"n\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"in the morning\",\n afternoon: \"in the afternoon\",\n evening: \"in the evening\",\n night: \"at night\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n\n // If ordinal numbers depend on context, for example,\n // if they are different for different grammatical genders,\n // use `options.unit`.\n //\n // `unit` can be 'year', 'quarter', 'month', 'week', 'date', 'dayOfYear',\n // 'day', 'hour', 'minute', 'second'.\n\n const rem100 = number % 100;\n if (rem100 > 20 || rem100 < 10) {\n switch (rem100 % 10) {\n case 1:\n return number + \"st\";\n case 2:\n return number + \"nd\";\n case 3:\n return number + \"rd\";\n }\n }\n return number + \"th\";\n};\n\nexport const localize = {\n ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => quarter - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","export function buildMatchFn(args) {\n return (string, options = {}) => {\n const width = options.width;\n\n const matchPattern =\n (width && args.matchPatterns[width]) ||\n args.matchPatterns[args.defaultMatchWidth];\n const matchResult = string.match(matchPattern);\n\n if (!matchResult) {\n return null;\n }\n const matchedString = matchResult[0];\n\n const parsePatterns =\n (width && args.parsePatterns[width]) ||\n args.parsePatterns[args.defaultParseWidth];\n\n const key = Array.isArray(parsePatterns)\n ? findIndex(parsePatterns, (pattern) => pattern.test(matchedString))\n : // [TODO] -- I challenge you to fix the type\n findKey(parsePatterns, (pattern) => pattern.test(matchedString));\n\n let value;\n\n value = args.valueCallback ? args.valueCallback(key) : key;\n value = options.valueCallback\n ? // [TODO] -- I challenge you to fix the type\n options.valueCallback(value)\n : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n\nfunction findKey(object, predicate) {\n for (const key in object) {\n if (\n Object.prototype.hasOwnProperty.call(object, key) &&\n predicate(object[key])\n ) {\n return key;\n }\n }\n return undefined;\n}\n\nfunction findIndex(array, predicate) {\n for (let key = 0; key < array.length; key++) {\n if (predicate(array[key])) {\n return key;\n }\n }\n return undefined;\n}\n","export function buildMatchPatternFn(args) {\n return (string, options = {}) => {\n const matchResult = string.match(args.matchPattern);\n if (!matchResult) return null;\n const matchedString = matchResult[0];\n\n const parseResult = string.match(args.parsePattern);\n if (!parseResult) return null;\n let value = args.valueCallback\n ? args.valueCallback(parseResult[0])\n : parseResult[0];\n\n // [TODO] I challenge you to fix the type\n value = options.valueCallback ? options.valueCallback(value) : value;\n\n const rest = string.slice(matchedString.length);\n\n return { value, rest };\n };\n}\n","import { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\nimport { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(th|st|nd|rd)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(b|a)/i,\n abbreviated: /^(b\\.?\\s?c\\.?|b\\.?\\s?c\\.?\\s?e\\.?|a\\.?\\s?d\\.?|c\\.?\\s?e\\.?)/i,\n wide: /^(before christ|before common era|anno domini|common era)/i,\n};\nconst parseEraPatterns = {\n any: [/^b/i, /^(a|c)/i],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^q[1234]/i,\n wide: /^[1234](th|st|nd|rd)? quarter/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[jfmasond]/i,\n abbreviated: /^(jan|feb|mar|apr|may|jun|jul|aug|sep|oct|nov|dec)/i,\n wide: /^(january|february|march|april|may|june|july|august|september|october|november|december)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^j/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^ja/i,\n /^f/i,\n /^mar/i,\n /^ap/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^au/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[smtwf]/i,\n short: /^(su|mo|tu|we|th|fr|sa)/i,\n abbreviated: /^(sun|mon|tue|wed|thu|fri|sat)/i,\n wide: /^(sunday|monday|tuesday|wednesday|thursday|friday|saturday)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^s/i, /^m/i, /^t/i, /^w/i, /^t/i, /^f/i, /^s/i],\n any: [/^su/i, /^m/i, /^tu/i, /^w/i, /^th/i, /^f/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mi|n|(in the|at) (morning|afternoon|evening|night))/i,\n any: /^([ap]\\.?\\s?m\\.?|midnight|noon|(in the|at) (morning|afternoon|evening|night))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mi/i,\n noon: /^no/i,\n morning: /morning/i,\n afternoon: /afternoon/i,\n evening: /evening/i,\n night: /night/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: (value) => parseInt(value, 10),\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./en-US/_lib/formatDistance.js\";\nimport { formatLong } from \"./en-US/_lib/formatLong.js\";\nimport { formatRelative } from \"./en-US/_lib/formatRelative.js\";\nimport { localize } from \"./en-US/_lib/localize.js\";\nimport { match } from \"./en-US/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary English locale (United States).\n * @language English\n * @iso-639-2 eng\n * @author Sasha Koss [@kossnocorp](https://github.com/kossnocorp)\n * @author Lesha Koss [@leshakoss](https://github.com/leshakoss)\n */\nexport const enUS = {\n code: \"en-US\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 0 /* Sunday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default enUS;\n","import { differenceInCalendarDays } from \"./differenceInCalendarDays.js\";\nimport { startOfYear } from \"./startOfYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getDayOfYear} function options.\n */\n\n/**\n * @name getDayOfYear\n * @category Day Helpers\n * @summary Get the day of the year of the given date.\n *\n * @description\n * Get the day of the year of the given date.\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The day of year\n *\n * @example\n * // Which day of the year is 2 July 2014?\n * const result = getDayOfYear(new Date(2014, 6, 2))\n * //=> 183\n */\nexport function getDayOfYear(date, options) {\n const _date = toDate(date, options?.in);\n const diff = differenceInCalendarDays(_date, startOfYear(_date));\n const dayOfYear = diff + 1;\n return dayOfYear;\n}\n\n// Fallback for modularized imports:\nexport default getDayOfYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfISOWeek } from \"./startOfISOWeek.js\";\nimport { startOfISOWeekYear } from \"./startOfISOWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getISOWeek} function options.\n */\n\n/**\n * @name getISOWeek\n * @category ISO Week Helpers\n * @summary Get the ISO week of the given date.\n *\n * @description\n * Get the ISO week of the given date.\n *\n * ISO week-numbering year: http://en.wikipedia.org/wiki/ISO_week_date\n *\n * @param date - The given date\n * @param options - The options\n *\n * @returns The ISO week\n *\n * @example\n * // Which week of the ISO-week numbering year is 2 January 2005?\n * const result = getISOWeek(new Date(2005, 0, 2))\n * //=> 53\n */\nexport function getISOWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfISOWeek(_date) - +startOfISOWeekYear(_date);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getISOWeek;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeekYear} function options.\n */\n\n/**\n * @name getWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Get the local week-numbering year of the given date.\n *\n * @description\n * Get the local week-numbering year of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options.\n *\n * @returns The local week-numbering year\n *\n * @example\n * // Which week numbering year is 26 December 2004 with the default settings?\n * const result = getWeekYear(new Date(2004, 11, 26))\n * //=> 2005\n *\n * @example\n * // Which week numbering year is 26 December 2004 if week starts on Saturday?\n * const result = getWeekYear(new Date(2004, 11, 26), { weekStartsOn: 6 })\n * //=> 2004\n *\n * @example\n * // Which week numbering year is 26 December 2004 if the first week contains 4 January?\n * const result = getWeekYear(new Date(2004, 11, 26), { firstWeekContainsDate: 4 })\n * //=> 2004\n */\nexport function getWeekYear(date, options) {\n const _date = toDate(date, options?.in);\n const year = _date.getFullYear();\n\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const firstWeekOfNextYear = constructFrom(options?.in || date, 0);\n firstWeekOfNextYear.setFullYear(year + 1, 0, firstWeekContainsDate);\n firstWeekOfNextYear.setHours(0, 0, 0, 0);\n const startOfNextYear = startOfWeek(firstWeekOfNextYear, options);\n\n const firstWeekOfThisYear = constructFrom(options?.in || date, 0);\n firstWeekOfThisYear.setFullYear(year, 0, firstWeekContainsDate);\n firstWeekOfThisYear.setHours(0, 0, 0, 0);\n const startOfThisYear = startOfWeek(firstWeekOfThisYear, options);\n\n if (+_date >= +startOfNextYear) {\n return year + 1;\n } else if (+_date >= +startOfThisYear) {\n return year;\n } else {\n return year - 1;\n }\n}\n\n// Fallback for modularized imports:\nexport default getWeekYear;\n","import { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { constructFrom } from \"./constructFrom.js\";\nimport { getWeekYear } from \"./getWeekYear.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\n\n/**\n * The {@link startOfWeekYear} function options.\n */\n\n/**\n * @name startOfWeekYear\n * @category Week-Numbering Year Helpers\n * @summary Return the start of a local week-numbering year for the given date.\n *\n * @description\n * Return the start of a local week-numbering year.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type.\n *\n * @param date - The original date\n * @param options - An object with options\n *\n * @returns The start of a week-numbering year\n *\n * @example\n * // The start of an a week-numbering year for 2 July 2005 with default settings:\n * const result = startOfWeekYear(new Date(2005, 6, 2))\n * //=> Sun Dec 26 2004 00:00:00\n *\n * @example\n * // The start of a week-numbering year for 2 July 2005\n * // if Monday is the first day of week\n * // and 4 January is always in the first week of the year:\n * const result = startOfWeekYear(new Date(2005, 6, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> Mon Jan 03 2005 00:00:00\n */\nexport function startOfWeekYear(date, options) {\n const defaultOptions = getDefaultOptions();\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const year = getWeekYear(date, options);\n const firstWeek = constructFrom(options?.in || date, 0);\n firstWeek.setFullYear(year, 0, firstWeekContainsDate);\n firstWeek.setHours(0, 0, 0, 0);\n const _date = startOfWeek(firstWeek, options);\n return _date;\n}\n\n// Fallback for modularized imports:\nexport default startOfWeekYear;\n","import { millisecondsInWeek } from \"./constants.js\";\nimport { startOfWeek } from \"./startOfWeek.js\";\nimport { startOfWeekYear } from \"./startOfWeekYear.js\";\nimport { toDate } from \"./toDate.js\";\n\n/**\n * The {@link getWeek} function options.\n */\n\n/**\n * @name getWeek\n * @category Week Helpers\n * @summary Get the local week index of the given date.\n *\n * @description\n * Get the local week index of the given date.\n * The exact calculation depends on the values of\n * `options.weekStartsOn` (which is the index of the first day of the week)\n * and `options.firstWeekContainsDate` (which is the day of January, which is always in\n * the first week of the week-numbering year)\n *\n * Week numbering: https://en.wikipedia.org/wiki/Week#The_ISO_week_date_system\n *\n * @param date - The given date\n * @param options - An object with options\n *\n * @returns The week\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005 with default options?\n * const result = getWeek(new Date(2005, 0, 2))\n * //=> 2\n *\n * @example\n * // Which week of the local week numbering year is 2 January 2005,\n * // if Monday is the first day of the week,\n * // and the first week of the year always contains 4 January?\n * const result = getWeek(new Date(2005, 0, 2), {\n * weekStartsOn: 1,\n * firstWeekContainsDate: 4\n * })\n * //=> 53\n */\nexport function getWeek(date, options) {\n const _date = toDate(date, options?.in);\n const diff = +startOfWeek(_date, options) - +startOfWeekYear(_date, options);\n\n // Round the number of weeks to the nearest integer because the number of\n // milliseconds in a week is not constant (e.g. it's different in the week of\n // the daylight saving time clock shift).\n return Math.round(diff / millisecondsInWeek) + 1;\n}\n\n// Fallback for modularized imports:\nexport default getWeek;\n","export function addLeadingZeros(number, targetLength) {\n const sign = number < 0 ? \"-\" : \"\";\n const output = Math.abs(number).toString().padStart(targetLength, \"0\");\n return sign + output;\n}\n","import { addLeadingZeros } from \"../addLeadingZeros.js\";\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | |\n * | d | Day of month | D | |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | m | Minute | M | Month |\n * | s | Second | S | Fraction of second |\n * | y | Year (abs) | Y | |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n */\n\nexport const lightFormatters = {\n // Year\n y(date, token) {\n // From http://www.unicode.org/reports/tr35/tr35-31/tr35-dates.html#Date_Format_tokens\n // | Year | y | yy | yyy | yyyy | yyyyy |\n // |----------|-------|----|-------|-------|-------|\n // | AD 1 | 1 | 01 | 001 | 0001 | 00001 |\n // | AD 12 | 12 | 12 | 012 | 0012 | 00012 |\n // | AD 123 | 123 | 23 | 123 | 0123 | 00123 |\n // | AD 1234 | 1234 | 34 | 1234 | 1234 | 01234 |\n // | AD 12345 | 12345 | 45 | 12345 | 12345 | 12345 |\n\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return addLeadingZeros(token === \"yy\" ? year % 100 : year, token.length);\n },\n\n // Month\n M(date, token) {\n const month = date.getMonth();\n return token === \"M\" ? String(month + 1) : addLeadingZeros(month + 1, 2);\n },\n\n // Day of the month\n d(date, token) {\n return addLeadingZeros(date.getDate(), token.length);\n },\n\n // AM or PM\n a(date, token) {\n const dayPeriodEnumValue = date.getHours() / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return dayPeriodEnumValue.toUpperCase();\n case \"aaa\":\n return dayPeriodEnumValue;\n case \"aaaaa\":\n return dayPeriodEnumValue[0];\n case \"aaaa\":\n default:\n return dayPeriodEnumValue === \"am\" ? \"a.m.\" : \"p.m.\";\n }\n },\n\n // Hour [1-12]\n h(date, token) {\n return addLeadingZeros(date.getHours() % 12 || 12, token.length);\n },\n\n // Hour [0-23]\n H(date, token) {\n return addLeadingZeros(date.getHours(), token.length);\n },\n\n // Minute\n m(date, token) {\n return addLeadingZeros(date.getMinutes(), token.length);\n },\n\n // Second\n s(date, token) {\n return addLeadingZeros(date.getSeconds(), token.length);\n },\n\n // Fraction of second\n S(date, token) {\n const numberOfDigits = token.length;\n const milliseconds = date.getMilliseconds();\n const fractionalSeconds = Math.trunc(\n milliseconds * Math.pow(10, numberOfDigits - 3),\n );\n return addLeadingZeros(fractionalSeconds, token.length);\n },\n};\n","import { getDayOfYear } from \"../../getDayOfYear.js\";\nimport { getISOWeek } from \"../../getISOWeek.js\";\nimport { getISOWeekYear } from \"../../getISOWeekYear.js\";\nimport { getWeek } from \"../../getWeek.js\";\nimport { getWeekYear } from \"../../getWeekYear.js\";\n\nimport { addLeadingZeros } from \"../addLeadingZeros.js\";\nimport { lightFormatters } from \"./lightFormatters.js\";\n\nconst dayPeriodEnum = {\n am: \"am\",\n pm: \"pm\",\n midnight: \"midnight\",\n noon: \"noon\",\n morning: \"morning\",\n afternoon: \"afternoon\",\n evening: \"evening\",\n night: \"night\",\n};\n\n/*\n * | | Unit | | Unit |\n * |-----|--------------------------------|-----|--------------------------------|\n * | a | AM, PM | A* | Milliseconds in day |\n * | b | AM, PM, noon, midnight | B | Flexible day period |\n * | c | Stand-alone local day of week | C* | Localized hour w/ day period |\n * | d | Day of month | D | Day of year |\n * | e | Local day of week | E | Day of week |\n * | f | | F* | Day of week in month |\n * | g* | Modified Julian day | G | Era |\n * | h | Hour [1-12] | H | Hour [0-23] |\n * | i! | ISO day of week | I! | ISO week of year |\n * | j* | Localized hour w/ day period | J* | Localized hour w/o day period |\n * | k | Hour [1-24] | K | Hour [0-11] |\n * | l* | (deprecated) | L | Stand-alone month |\n * | m | Minute | M | Month |\n * | n | | N | |\n * | o! | Ordinal number modifier | O | Timezone (GMT) |\n * | p! | Long localized time | P! | Long localized date |\n * | q | Stand-alone quarter | Q | Quarter |\n * | r* | Related Gregorian year | R! | ISO week-numbering year |\n * | s | Second | S | Fraction of second |\n * | t! | Seconds timestamp | T! | Milliseconds timestamp |\n * | u | Extended year | U* | Cyclic year |\n * | v* | Timezone (generic non-locat.) | V* | Timezone (location) |\n * | w | Local week of year | W* | Week of month |\n * | x | Timezone (ISO-8601 w/o Z) | X | Timezone (ISO-8601) |\n * | y | Year (abs) | Y | Local week-numbering year |\n * | z | Timezone (specific non-locat.) | Z* | Timezone (aliases) |\n *\n * Letters marked by * are not implemented but reserved by Unicode standard.\n *\n * Letters marked by ! are non-standard, but implemented by date-fns:\n * - `o` modifies the previous token to turn it into an ordinal (see `format` docs)\n * - `i` is ISO day of week. For `i` and `ii` is returns numeric ISO week days,\n * i.e. 7 for Sunday, 1 for Monday, etc.\n * - `I` is ISO week of year, as opposed to `w` which is local week of year.\n * - `R` is ISO week-numbering year, as opposed to `Y` which is local week-numbering year.\n * `R` is supposed to be used in conjunction with `I` and `i`\n * for universal ISO week-numbering date, whereas\n * `Y` is supposed to be used in conjunction with `w` and `e`\n * for week-numbering date specific to the locale.\n * - `P` is long localized date format\n * - `p` is long localized time format\n */\n\nexport const formatters = {\n // Era\n G: function (date, token, localize) {\n const era = date.getFullYear() > 0 ? 1 : 0;\n switch (token) {\n // AD, BC\n case \"G\":\n case \"GG\":\n case \"GGG\":\n return localize.era(era, { width: \"abbreviated\" });\n // A, B\n case \"GGGGG\":\n return localize.era(era, { width: \"narrow\" });\n // Anno Domini, Before Christ\n case \"GGGG\":\n default:\n return localize.era(era, { width: \"wide\" });\n }\n },\n\n // Year\n y: function (date, token, localize) {\n // Ordinal number\n if (token === \"yo\") {\n const signedYear = date.getFullYear();\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const year = signedYear > 0 ? signedYear : 1 - signedYear;\n return localize.ordinalNumber(year, { unit: \"year\" });\n }\n\n return lightFormatters.y(date, token);\n },\n\n // Local week-numbering year\n Y: function (date, token, localize, options) {\n const signedWeekYear = getWeekYear(date, options);\n // Returns 1 for 1 BC (which is year 0 in JavaScript)\n const weekYear = signedWeekYear > 0 ? signedWeekYear : 1 - signedWeekYear;\n\n // Two digit year\n if (token === \"YY\") {\n const twoDigitYear = weekYear % 100;\n return addLeadingZeros(twoDigitYear, 2);\n }\n\n // Ordinal number\n if (token === \"Yo\") {\n return localize.ordinalNumber(weekYear, { unit: \"year\" });\n }\n\n // Padding\n return addLeadingZeros(weekYear, token.length);\n },\n\n // ISO week-numbering year\n R: function (date, token) {\n const isoWeekYear = getISOWeekYear(date);\n\n // Padding\n return addLeadingZeros(isoWeekYear, token.length);\n },\n\n // Extended year. This is a single number designating the year of this calendar system.\n // The main difference between `y` and `u` localizers are B.C. years:\n // | Year | `y` | `u` |\n // |------|-----|-----|\n // | AC 1 | 1 | 1 |\n // | BC 1 | 1 | 0 |\n // | BC 2 | 2 | -1 |\n // Also `yy` always returns the last two digits of a year,\n // while `uu` pads single digit years to 2 characters and returns other years unchanged.\n u: function (date, token) {\n const year = date.getFullYear();\n return addLeadingZeros(year, token.length);\n },\n\n // Quarter\n Q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"Q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"QQ\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"Qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"QQQ\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"QQQQQ\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"QQQQ\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone quarter\n q: function (date, token, localize) {\n const quarter = Math.ceil((date.getMonth() + 1) / 3);\n switch (token) {\n // 1, 2, 3, 4\n case \"q\":\n return String(quarter);\n // 01, 02, 03, 04\n case \"qq\":\n return addLeadingZeros(quarter, 2);\n // 1st, 2nd, 3rd, 4th\n case \"qo\":\n return localize.ordinalNumber(quarter, { unit: \"quarter\" });\n // Q1, Q2, Q3, Q4\n case \"qqq\":\n return localize.quarter(quarter, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // 1, 2, 3, 4 (narrow quarter; could be not numerical)\n case \"qqqqq\":\n return localize.quarter(quarter, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // 1st quarter, 2nd quarter, ...\n case \"qqqq\":\n default:\n return localize.quarter(quarter, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // Month\n M: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n case \"M\":\n case \"MM\":\n return lightFormatters.M(date, token);\n // 1st, 2nd, ..., 12th\n case \"Mo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"MMM\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // J, F, ..., D\n case \"MMMMM\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // January, February, ..., December\n case \"MMMM\":\n default:\n return localize.month(month, { width: \"wide\", context: \"formatting\" });\n }\n },\n\n // Stand-alone month\n L: function (date, token, localize) {\n const month = date.getMonth();\n switch (token) {\n // 1, 2, ..., 12\n case \"L\":\n return String(month + 1);\n // 01, 02, ..., 12\n case \"LL\":\n return addLeadingZeros(month + 1, 2);\n // 1st, 2nd, ..., 12th\n case \"Lo\":\n return localize.ordinalNumber(month + 1, { unit: \"month\" });\n // Jan, Feb, ..., Dec\n case \"LLL\":\n return localize.month(month, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // J, F, ..., D\n case \"LLLLL\":\n return localize.month(month, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // January, February, ..., December\n case \"LLLL\":\n default:\n return localize.month(month, { width: \"wide\", context: \"standalone\" });\n }\n },\n\n // Local week of year\n w: function (date, token, localize, options) {\n const week = getWeek(date, options);\n\n if (token === \"wo\") {\n return localize.ordinalNumber(week, { unit: \"week\" });\n }\n\n return addLeadingZeros(week, token.length);\n },\n\n // ISO week of year\n I: function (date, token, localize) {\n const isoWeek = getISOWeek(date);\n\n if (token === \"Io\") {\n return localize.ordinalNumber(isoWeek, { unit: \"week\" });\n }\n\n return addLeadingZeros(isoWeek, token.length);\n },\n\n // Day of the month\n d: function (date, token, localize) {\n if (token === \"do\") {\n return localize.ordinalNumber(date.getDate(), { unit: \"date\" });\n }\n\n return lightFormatters.d(date, token);\n },\n\n // Day of year\n D: function (date, token, localize) {\n const dayOfYear = getDayOfYear(date);\n\n if (token === \"Do\") {\n return localize.ordinalNumber(dayOfYear, { unit: \"dayOfYear\" });\n }\n\n return addLeadingZeros(dayOfYear, token.length);\n },\n\n // Day of week\n E: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n switch (token) {\n // Tue\n case \"E\":\n case \"EE\":\n case \"EEE\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"EEEEE\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"EEEEEE\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"EEEE\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Local day of week\n e: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (Nth day of week with current locale or weekStartsOn)\n case \"e\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"ee\":\n return addLeadingZeros(localDayOfWeek, 2);\n // 1st, 2nd, ..., 7th\n case \"eo\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"eee\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"eeeee\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"eeeeee\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"eeee\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Stand-alone local day of week\n c: function (date, token, localize, options) {\n const dayOfWeek = date.getDay();\n const localDayOfWeek = (dayOfWeek - options.weekStartsOn + 8) % 7 || 7;\n switch (token) {\n // Numerical value (same as in `e`)\n case \"c\":\n return String(localDayOfWeek);\n // Padded numerical value\n case \"cc\":\n return addLeadingZeros(localDayOfWeek, token.length);\n // 1st, 2nd, ..., 7th\n case \"co\":\n return localize.ordinalNumber(localDayOfWeek, { unit: \"day\" });\n case \"ccc\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"standalone\",\n });\n // T\n case \"ccccc\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"standalone\",\n });\n // Tu\n case \"cccccc\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"standalone\",\n });\n // Tuesday\n case \"cccc\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"standalone\",\n });\n }\n },\n\n // ISO day of week\n i: function (date, token, localize) {\n const dayOfWeek = date.getDay();\n const isoDayOfWeek = dayOfWeek === 0 ? 7 : dayOfWeek;\n switch (token) {\n // 2\n case \"i\":\n return String(isoDayOfWeek);\n // 02\n case \"ii\":\n return addLeadingZeros(isoDayOfWeek, token.length);\n // 2nd\n case \"io\":\n return localize.ordinalNumber(isoDayOfWeek, { unit: \"day\" });\n // Tue\n case \"iii\":\n return localize.day(dayOfWeek, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n // T\n case \"iiiii\":\n return localize.day(dayOfWeek, {\n width: \"narrow\",\n context: \"formatting\",\n });\n // Tu\n case \"iiiiii\":\n return localize.day(dayOfWeek, {\n width: \"short\",\n context: \"formatting\",\n });\n // Tuesday\n case \"iiii\":\n default:\n return localize.day(dayOfWeek, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM or PM\n a: function (date, token, localize) {\n const hours = date.getHours();\n const dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n\n switch (token) {\n case \"a\":\n case \"aa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"aaa\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"aaaaa\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"aaaa\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // AM, PM, midnight, noon\n b: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours === 12) {\n dayPeriodEnumValue = dayPeriodEnum.noon;\n } else if (hours === 0) {\n dayPeriodEnumValue = dayPeriodEnum.midnight;\n } else {\n dayPeriodEnumValue = hours / 12 >= 1 ? \"pm\" : \"am\";\n }\n\n switch (token) {\n case \"b\":\n case \"bb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"bbb\":\n return localize\n .dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n })\n .toLowerCase();\n case \"bbbbb\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"bbbb\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // in the morning, in the afternoon, in the evening, at night\n B: function (date, token, localize) {\n const hours = date.getHours();\n let dayPeriodEnumValue;\n if (hours >= 17) {\n dayPeriodEnumValue = dayPeriodEnum.evening;\n } else if (hours >= 12) {\n dayPeriodEnumValue = dayPeriodEnum.afternoon;\n } else if (hours >= 4) {\n dayPeriodEnumValue = dayPeriodEnum.morning;\n } else {\n dayPeriodEnumValue = dayPeriodEnum.night;\n }\n\n switch (token) {\n case \"B\":\n case \"BB\":\n case \"BBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"abbreviated\",\n context: \"formatting\",\n });\n case \"BBBBB\":\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"narrow\",\n context: \"formatting\",\n });\n case \"BBBB\":\n default:\n return localize.dayPeriod(dayPeriodEnumValue, {\n width: \"wide\",\n context: \"formatting\",\n });\n }\n },\n\n // Hour [1-12]\n h: function (date, token, localize) {\n if (token === \"ho\") {\n let hours = date.getHours() % 12;\n if (hours === 0) hours = 12;\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return lightFormatters.h(date, token);\n },\n\n // Hour [0-23]\n H: function (date, token, localize) {\n if (token === \"Ho\") {\n return localize.ordinalNumber(date.getHours(), { unit: \"hour\" });\n }\n\n return lightFormatters.H(date, token);\n },\n\n // Hour [0-11]\n K: function (date, token, localize) {\n const hours = date.getHours() % 12;\n\n if (token === \"Ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Hour [1-24]\n k: function (date, token, localize) {\n let hours = date.getHours();\n if (hours === 0) hours = 24;\n\n if (token === \"ko\") {\n return localize.ordinalNumber(hours, { unit: \"hour\" });\n }\n\n return addLeadingZeros(hours, token.length);\n },\n\n // Minute\n m: function (date, token, localize) {\n if (token === \"mo\") {\n return localize.ordinalNumber(date.getMinutes(), { unit: \"minute\" });\n }\n\n return lightFormatters.m(date, token);\n },\n\n // Second\n s: function (date, token, localize) {\n if (token === \"so\") {\n return localize.ordinalNumber(date.getSeconds(), { unit: \"second\" });\n }\n\n return lightFormatters.s(date, token);\n },\n\n // Fraction of second\n S: function (date, token) {\n return lightFormatters.S(date, token);\n },\n\n // Timezone (ISO-8601. If offset is 0, output is always `'Z'`)\n X: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n if (timezoneOffset === 0) {\n return \"Z\";\n }\n\n switch (token) {\n // Hours and optional minutes\n case \"X\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XX`\n case \"XXXX\":\n case \"XX\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `XXX`\n case \"XXXXX\":\n case \"XXX\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (ISO-8601. If offset is 0, output is `'+00:00'` or equivalent)\n x: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Hours and optional minutes\n case \"x\":\n return formatTimezoneWithOptionalMinutes(timezoneOffset);\n\n // Hours, minutes and optional seconds without `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xx`\n case \"xxxx\":\n case \"xx\": // Hours and minutes without `:` delimiter\n return formatTimezone(timezoneOffset);\n\n // Hours, minutes and optional seconds with `:` delimiter\n // Note: neither ISO-8601 nor JavaScript supports seconds in timezone offsets\n // so this token always has the same output as `xxx`\n case \"xxxxx\":\n case \"xxx\": // Hours and minutes with `:` delimiter\n default:\n return formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (GMT)\n O: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"O\":\n case \"OO\":\n case \"OOO\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"OOOO\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Timezone (specific non-location)\n z: function (date, token, _localize) {\n const timezoneOffset = date.getTimezoneOffset();\n\n switch (token) {\n // Short\n case \"z\":\n case \"zz\":\n case \"zzz\":\n return \"GMT\" + formatTimezoneShort(timezoneOffset, \":\");\n // Long\n case \"zzzz\":\n default:\n return \"GMT\" + formatTimezone(timezoneOffset, \":\");\n }\n },\n\n // Seconds timestamp\n t: function (date, token, _localize) {\n const timestamp = Math.trunc(+date / 1000);\n return addLeadingZeros(timestamp, token.length);\n },\n\n // Milliseconds timestamp\n T: function (date, token, _localize) {\n return addLeadingZeros(+date, token.length);\n },\n};\n\nfunction formatTimezoneShort(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = Math.trunc(absOffset / 60);\n const minutes = absOffset % 60;\n if (minutes === 0) {\n return sign + String(hours);\n }\n return sign + String(hours) + delimiter + addLeadingZeros(minutes, 2);\n}\n\nfunction formatTimezoneWithOptionalMinutes(offset, delimiter) {\n if (offset % 60 === 0) {\n const sign = offset > 0 ? \"-\" : \"+\";\n return sign + addLeadingZeros(Math.abs(offset) / 60, 2);\n }\n return formatTimezone(offset, delimiter);\n}\n\nfunction formatTimezone(offset, delimiter = \"\") {\n const sign = offset > 0 ? \"-\" : \"+\";\n const absOffset = Math.abs(offset);\n const hours = addLeadingZeros(Math.trunc(absOffset / 60), 2);\n const minutes = addLeadingZeros(absOffset % 60, 2);\n return sign + hours + delimiter + minutes;\n}\n","const dateLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"P\":\n return formatLong.date({ width: \"short\" });\n case \"PP\":\n return formatLong.date({ width: \"medium\" });\n case \"PPP\":\n return formatLong.date({ width: \"long\" });\n case \"PPPP\":\n default:\n return formatLong.date({ width: \"full\" });\n }\n};\n\nconst timeLongFormatter = (pattern, formatLong) => {\n switch (pattern) {\n case \"p\":\n return formatLong.time({ width: \"short\" });\n case \"pp\":\n return formatLong.time({ width: \"medium\" });\n case \"ppp\":\n return formatLong.time({ width: \"long\" });\n case \"pppp\":\n default:\n return formatLong.time({ width: \"full\" });\n }\n};\n\nconst dateTimeLongFormatter = (pattern, formatLong) => {\n const matchResult = pattern.match(/(P+)(p+)?/) || [];\n const datePattern = matchResult[1];\n const timePattern = matchResult[2];\n\n if (!timePattern) {\n return dateLongFormatter(pattern, formatLong);\n }\n\n let dateTimeFormat;\n\n switch (datePattern) {\n case \"P\":\n dateTimeFormat = formatLong.dateTime({ width: \"short\" });\n break;\n case \"PP\":\n dateTimeFormat = formatLong.dateTime({ width: \"medium\" });\n break;\n case \"PPP\":\n dateTimeFormat = formatLong.dateTime({ width: \"long\" });\n break;\n case \"PPPP\":\n default:\n dateTimeFormat = formatLong.dateTime({ width: \"full\" });\n break;\n }\n\n return dateTimeFormat\n .replace(\"{{date}}\", dateLongFormatter(datePattern, formatLong))\n .replace(\"{{time}}\", timeLongFormatter(timePattern, formatLong));\n};\n\nexport const longFormatters = {\n p: timeLongFormatter,\n P: dateTimeLongFormatter,\n};\n","const dayOfYearTokenRE = /^D+$/;\nconst weekYearTokenRE = /^Y+$/;\n\nconst throwTokens = [\"D\", \"DD\", \"YY\", \"YYYY\"];\n\nexport function isProtectedDayOfYearToken(token) {\n return dayOfYearTokenRE.test(token);\n}\n\nexport function isProtectedWeekYearToken(token) {\n return weekYearTokenRE.test(token);\n}\n\nexport function warnOrThrowProtectedError(token, format, input) {\n const _message = message(token, format, input);\n console.warn(_message);\n if (throwTokens.includes(token)) throw new RangeError(_message);\n}\n\nfunction message(token, format, input) {\n const subject = token[0] === \"Y\" ? \"years\" : \"days of the month\";\n return `Use \\`${token.toLowerCase()}\\` instead of \\`${token}\\` (in \\`${format}\\`) for formatting ${subject} to the input \\`${input}\\`; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md`;\n}\n","import { defaultLocale } from \"./_lib/defaultLocale.js\";\nimport { getDefaultOptions } from \"./_lib/defaultOptions.js\";\nimport { formatters } from \"./_lib/format/formatters.js\";\nimport { longFormatters } from \"./_lib/format/longFormatters.js\";\nimport {\n isProtectedDayOfYearToken,\n isProtectedWeekYearToken,\n warnOrThrowProtectedError,\n} from \"./_lib/protectedTokens.js\";\nimport { isValid } from \"./isValid.js\";\nimport { toDate } from \"./toDate.js\";\n\n// Rexports of internal for libraries to use.\n// See: https://github.com/date-fns/date-fns/issues/3638#issuecomment-1877082874\nexport { formatters, longFormatters };\n\n// This RegExp consists of three parts separated by `|`:\n// - [yYQqMLwIdDecihHKkms]o matches any available ordinal number token\n// (one of the certain letters followed by `o`)\n// - (\\w)\\1* matches any sequences of the same letter\n// - '' matches two quote characters in a row\n// - '(''|[^'])+('|$) matches anything surrounded by two quote characters ('),\n// except a single quote symbol, which ends the sequence.\n// Two quote characters do not end the sequence.\n// If there is no matching single quote\n// then the sequence will continue until the end of the string.\n// - . matches any single character unmatched by previous parts of the RegExps\nconst formattingTokensRegExp =\n /[yYQqMLwIdDecihHKkms]o|(\\w)\\1*|''|'(''|[^'])+('|$)|./g;\n\n// This RegExp catches symbols escaped by quotes, and also\n// sequences of symbols P, p, and the combinations like `PPPPPPPppppp`\nconst longFormattingTokensRegExp = /P+p+|P+|p+|''|'(''|[^'])+('|$)|./g;\n\nconst escapedStringRegExp = /^'([^]*?)'?$/;\nconst doubleQuoteRegExp = /''/g;\nconst unescapedLatinCharacterRegExp = /[a-zA-Z]/;\n\nexport { format as formatDate };\n\n/**\n * The {@link format} function options.\n */\n\n/**\n * @name format\n * @alias formatDate\n * @category Common Helpers\n * @summary Format the date.\n *\n * @description\n * Return the formatted date string in the given format. The result may vary by locale.\n *\n * > ⚠️ Please note that the `format` tokens differ from Moment.js and other libraries.\n * > See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * The characters wrapped between two single quotes characters (') are escaped.\n * Two single quotes in a row, whether inside or outside a quoted sequence, represent a 'real' single quote.\n * (see the last example)\n *\n * Format of the string is based on Unicode Technical Standard #35:\n * https://www.unicode.org/reports/tr35/tr35-dates.html#Date_Field_Symbol_Table\n * with a few additions (see note 7 below the table).\n *\n * Accepted patterns:\n * | Unit | Pattern | Result examples | Notes |\n * |---------------------------------|---------|-----------------------------------|-------|\n * | Era | G..GGG | AD, BC | |\n * | | GGGG | Anno Domini, Before Christ | 2 |\n * | | GGGGG | A, B | |\n * | Calendar year | y | 44, 1, 1900, 2017 | 5 |\n * | | yo | 44th, 1st, 0th, 17th | 5,7 |\n * | | yy | 44, 01, 00, 17 | 5 |\n * | | yyy | 044, 001, 1900, 2017 | 5 |\n * | | yyyy | 0044, 0001, 1900, 2017 | 5 |\n * | | yyyyy | ... | 3,5 |\n * | Local week-numbering year | Y | 44, 1, 1900, 2017 | 5 |\n * | | Yo | 44th, 1st, 1900th, 2017th | 5,7 |\n * | | YY | 44, 01, 00, 17 | 5,8 |\n * | | YYY | 044, 001, 1900, 2017 | 5 |\n * | | YYYY | 0044, 0001, 1900, 2017 | 5,8 |\n * | | YYYYY | ... | 3,5 |\n * | ISO week-numbering year | R | -43, 0, 1, 1900, 2017 | 5,7 |\n * | | RR | -43, 00, 01, 1900, 2017 | 5,7 |\n * | | RRR | -043, 000, 001, 1900, 2017 | 5,7 |\n * | | RRRR | -0043, 0000, 0001, 1900, 2017 | 5,7 |\n * | | RRRRR | ... | 3,5,7 |\n * | Extended year | u | -43, 0, 1, 1900, 2017 | 5 |\n * | | uu | -43, 01, 1900, 2017 | 5 |\n * | | uuu | -043, 001, 1900, 2017 | 5 |\n * | | uuuu | -0043, 0001, 1900, 2017 | 5 |\n * | | uuuuu | ... | 3,5 |\n * | Quarter (formatting) | Q | 1, 2, 3, 4 | |\n * | | Qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | QQ | 01, 02, 03, 04 | |\n * | | QQQ | Q1, Q2, Q3, Q4 | |\n * | | QQQQ | 1st quarter, 2nd quarter, ... | 2 |\n * | | QQQQQ | 1, 2, 3, 4 | 4 |\n * | Quarter (stand-alone) | q | 1, 2, 3, 4 | |\n * | | qo | 1st, 2nd, 3rd, 4th | 7 |\n * | | qq | 01, 02, 03, 04 | |\n * | | qqq | Q1, Q2, Q3, Q4 | |\n * | | qqqq | 1st quarter, 2nd quarter, ... | 2 |\n * | | qqqqq | 1, 2, 3, 4 | 4 |\n * | Month (formatting) | M | 1, 2, ..., 12 | |\n * | | Mo | 1st, 2nd, ..., 12th | 7 |\n * | | MM | 01, 02, ..., 12 | |\n * | | MMM | Jan, Feb, ..., Dec | |\n * | | MMMM | January, February, ..., December | 2 |\n * | | MMMMM | J, F, ..., D | |\n * | Month (stand-alone) | L | 1, 2, ..., 12 | |\n * | | Lo | 1st, 2nd, ..., 12th | 7 |\n * | | LL | 01, 02, ..., 12 | |\n * | | LLL | Jan, Feb, ..., Dec | |\n * | | LLLL | January, February, ..., December | 2 |\n * | | LLLLL | J, F, ..., D | |\n * | Local week of year | w | 1, 2, ..., 53 | |\n * | | wo | 1st, 2nd, ..., 53th | 7 |\n * | | ww | 01, 02, ..., 53 | |\n * | ISO week of year | I | 1, 2, ..., 53 | 7 |\n * | | Io | 1st, 2nd, ..., 53th | 7 |\n * | | II | 01, 02, ..., 53 | 7 |\n * | Day of month | d | 1, 2, ..., 31 | |\n * | | do | 1st, 2nd, ..., 31st | 7 |\n * | | dd | 01, 02, ..., 31 | |\n * | Day of year | D | 1, 2, ..., 365, 366 | 9 |\n * | | Do | 1st, 2nd, ..., 365th, 366th | 7 |\n * | | DD | 01, 02, ..., 365, 366 | 9 |\n * | | DDD | 001, 002, ..., 365, 366 | |\n * | | DDDD | ... | 3 |\n * | Day of week (formatting) | E..EEE | Mon, Tue, Wed, ..., Sun | |\n * | | EEEE | Monday, Tuesday, ..., Sunday | 2 |\n * | | EEEEE | M, T, W, T, F, S, S | |\n * | | EEEEEE | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | ISO day of week (formatting) | i | 1, 2, 3, ..., 7 | 7 |\n * | | io | 1st, 2nd, ..., 7th | 7 |\n * | | ii | 01, 02, ..., 07 | 7 |\n * | | iii | Mon, Tue, Wed, ..., Sun | 7 |\n * | | iiii | Monday, Tuesday, ..., Sunday | 2,7 |\n * | | iiiii | M, T, W, T, F, S, S | 7 |\n * | | iiiiii | Mo, Tu, We, Th, Fr, Sa, Su | 7 |\n * | Local day of week (formatting) | e | 2, 3, 4, ..., 1 | |\n * | | eo | 2nd, 3rd, ..., 1st | 7 |\n * | | ee | 02, 03, ..., 01 | |\n * | | eee | Mon, Tue, Wed, ..., Sun | |\n * | | eeee | Monday, Tuesday, ..., Sunday | 2 |\n * | | eeeee | M, T, W, T, F, S, S | |\n * | | eeeeee | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | Local day of week (stand-alone) | c | 2, 3, 4, ..., 1 | |\n * | | co | 2nd, 3rd, ..., 1st | 7 |\n * | | cc | 02, 03, ..., 01 | |\n * | | ccc | Mon, Tue, Wed, ..., Sun | |\n * | | cccc | Monday, Tuesday, ..., Sunday | 2 |\n * | | ccccc | M, T, W, T, F, S, S | |\n * | | cccccc | Mo, Tu, We, Th, Fr, Sa, Su | |\n * | AM, PM | a..aa | AM, PM | |\n * | | aaa | am, pm | |\n * | | aaaa | a.m., p.m. | 2 |\n * | | aaaaa | a, p | |\n * | AM, PM, noon, midnight | b..bb | AM, PM, noon, midnight | |\n * | | bbb | am, pm, noon, midnight | |\n * | | bbbb | a.m., p.m., noon, midnight | 2 |\n * | | bbbbb | a, p, n, mi | |\n * | Flexible day period | B..BBB | at night, in the morning, ... | |\n * | | BBBB | at night, in the morning, ... | 2 |\n * | | BBBBB | at night, in the morning, ... | |\n * | Hour [1-12] | h | 1, 2, ..., 11, 12 | |\n * | | ho | 1st, 2nd, ..., 11th, 12th | 7 |\n * | | hh | 01, 02, ..., 11, 12 | |\n * | Hour [0-23] | H | 0, 1, 2, ..., 23 | |\n * | | Ho | 0th, 1st, 2nd, ..., 23rd | 7 |\n * | | HH | 00, 01, 02, ..., 23 | |\n * | Hour [0-11] | K | 1, 2, ..., 11, 0 | |\n * | | Ko | 1st, 2nd, ..., 11th, 0th | 7 |\n * | | KK | 01, 02, ..., 11, 00 | |\n * | Hour [1-24] | k | 24, 1, 2, ..., 23 | |\n * | | ko | 24th, 1st, 2nd, ..., 23rd | 7 |\n * | | kk | 24, 01, 02, ..., 23 | |\n * | Minute | m | 0, 1, ..., 59 | |\n * | | mo | 0th, 1st, ..., 59th | 7 |\n * | | mm | 00, 01, ..., 59 | |\n * | Second | s | 0, 1, ..., 59 | |\n * | | so | 0th, 1st, ..., 59th | 7 |\n * | | ss | 00, 01, ..., 59 | |\n * | Fraction of second | S | 0, 1, ..., 9 | |\n * | | SS | 00, 01, ..., 99 | |\n * | | SSS | 000, 001, ..., 999 | |\n * | | SSSS | ... | 3 |\n * | Timezone (ISO-8601 w/ Z) | X | -08, +0530, Z | |\n * | | XX | -0800, +0530, Z | |\n * | | XXX | -08:00, +05:30, Z | |\n * | | XXXX | -0800, +0530, Z, +123456 | 2 |\n * | | XXXXX | -08:00, +05:30, Z, +12:34:56 | |\n * | Timezone (ISO-8601 w/o Z) | x | -08, +0530, +00 | |\n * | | xx | -0800, +0530, +0000 | |\n * | | xxx | -08:00, +05:30, +00:00 | 2 |\n * | | xxxx | -0800, +0530, +0000, +123456 | |\n * | | xxxxx | -08:00, +05:30, +00:00, +12:34:56 | |\n * | Timezone (GMT) | O...OOO | GMT-8, GMT+5:30, GMT+0 | |\n * | | OOOO | GMT-08:00, GMT+05:30, GMT+00:00 | 2 |\n * | Timezone (specific non-locat.) | z...zzz | GMT-8, GMT+5:30, GMT+0 | 6 |\n * | | zzzz | GMT-08:00, GMT+05:30, GMT+00:00 | 2,6 |\n * | Seconds timestamp | t | 512969520 | 7 |\n * | | tt | ... | 3,7 |\n * | Milliseconds timestamp | T | 512969520900 | 7 |\n * | | TT | ... | 3,7 |\n * | Long localized date | P | 04/29/1453 | 7 |\n * | | PP | Apr 29, 1453 | 7 |\n * | | PPP | April 29th, 1453 | 7 |\n * | | PPPP | Friday, April 29th, 1453 | 2,7 |\n * | Long localized time | p | 12:00 AM | 7 |\n * | | pp | 12:00:00 AM | 7 |\n * | | ppp | 12:00:00 AM GMT+2 | 7 |\n * | | pppp | 12:00:00 AM GMT+02:00 | 2,7 |\n * | Combination of date and time | Pp | 04/29/1453, 12:00 AM | 7 |\n * | | PPpp | Apr 29, 1453, 12:00:00 AM | 7 |\n * | | PPPppp | April 29th, 1453 at ... | 7 |\n * | | PPPPpppp| Friday, April 29th, 1453 at ... | 2,7 |\n * Notes:\n * 1. \"Formatting\" units (e.g. formatting quarter) in the default en-US locale\n * are the same as \"stand-alone\" units, but are different in some languages.\n * \"Formatting\" units are declined according to the rules of the language\n * in the context of a date. \"Stand-alone\" units are always nominative singular:\n *\n * `format(new Date(2017, 10, 6), 'do LLLL', {locale: cs}) //=> '6. listopad'`\n *\n * `format(new Date(2017, 10, 6), 'do MMMM', {locale: cs}) //=> '6. listopadu'`\n *\n * 2. Any sequence of the identical letters is a pattern, unless it is escaped by\n * the single quote characters (see below).\n * If the sequence is longer than listed in table (e.g. `EEEEEEEEEEE`)\n * the output will be the same as default pattern for this unit, usually\n * the longest one (in case of ISO weekdays, `EEEE`). Default patterns for units\n * are marked with \"2\" in the last column of the table.\n *\n * `format(new Date(2017, 10, 6), 'MMM') //=> 'Nov'`\n *\n * `format(new Date(2017, 10, 6), 'MMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMM') //=> 'N'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMM') //=> 'November'`\n *\n * `format(new Date(2017, 10, 6), 'MMMMMMM') //=> 'November'`\n *\n * 3. Some patterns could be unlimited length (such as `yyyyyyyy`).\n * The output will be padded with zeros to match the length of the pattern.\n *\n * `format(new Date(2017, 10, 6), 'yyyyyyyy') //=> '00002017'`\n *\n * 4. `QQQQQ` and `qqqqq` could be not strictly numerical in some locales.\n * These tokens represent the shortest form of the quarter.\n *\n * 5. The main difference between `y` and `u` patterns are B.C. years:\n *\n * | Year | `y` | `u` |\n * |------|-----|-----|\n * | AC 1 | 1 | 1 |\n * | BC 1 | 1 | 0 |\n * | BC 2 | 2 | -1 |\n *\n * Also `yy` always returns the last two digits of a year,\n * while `uu` pads single digit years to 2 characters and returns other years unchanged:\n *\n * | Year | `yy` | `uu` |\n * |------|------|------|\n * | 1 | 01 | 01 |\n * | 14 | 14 | 14 |\n * | 376 | 76 | 376 |\n * | 1453 | 53 | 1453 |\n *\n * The same difference is true for local and ISO week-numbering years (`Y` and `R`),\n * except local week-numbering years are dependent on `options.weekStartsOn`\n * and `options.firstWeekContainsDate` (compare [getISOWeekYear](https://date-fns.org/docs/getISOWeekYear)\n * and [getWeekYear](https://date-fns.org/docs/getWeekYear)).\n *\n * 6. Specific non-location timezones are currently unavailable in `date-fns`,\n * so right now these tokens fall back to GMT timezones.\n *\n * 7. These patterns are not in the Unicode Technical Standard #35:\n * - `i`: ISO day of week\n * - `I`: ISO week of year\n * - `R`: ISO week-numbering year\n * - `t`: seconds timestamp\n * - `T`: milliseconds timestamp\n * - `o`: ordinal number modifier\n * - `P`: long localized date\n * - `p`: long localized time\n *\n * 8. `YY` and `YYYY` tokens represent week-numbering years but they are often confused with years.\n * You should enable `options.useAdditionalWeekYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * 9. `D` and `DD` tokens represent days of the year but they are often confused with days of the month.\n * You should enable `options.useAdditionalDayOfYearTokens` to use them. See: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n *\n * @param date - The original date\n * @param format - The string of tokens\n * @param options - An object with options\n *\n * @returns The formatted date string\n *\n * @throws `date` must not be Invalid Date\n * @throws `options.locale` must contain `localize` property\n * @throws `options.locale` must contain `formatLong` property\n * @throws use `yyyy` instead of `YYYY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `yy` instead of `YY` for formatting years using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `d` instead of `D` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws use `dd` instead of `DD` for formatting days of the month using [format provided] to the input [input provided]; see: https://github.com/date-fns/date-fns/blob/master/docs/unicodeTokens.md\n * @throws format string contains an unescaped latin alphabet character\n *\n * @example\n * // Represent 11 February 2014 in middle-endian format:\n * const result = format(new Date(2014, 1, 11), 'MM/dd/yyyy')\n * //=> '02/11/2014'\n *\n * @example\n * // Represent 2 July 2014 in Esperanto:\n * import { eoLocale } from 'date-fns/locale/eo'\n * const result = format(new Date(2014, 6, 2), \"do 'de' MMMM yyyy\", {\n * locale: eoLocale\n * })\n * //=> '2-a de julio 2014'\n *\n * @example\n * // Escape string by single quote characters:\n * const result = format(new Date(2014, 6, 2, 15), \"h 'o''clock'\")\n * //=> \"3 o'clock\"\n */\nexport function format(date, formatStr, options) {\n const defaultOptions = getDefaultOptions();\n const locale = options?.locale ?? defaultOptions.locale ?? defaultLocale;\n\n const firstWeekContainsDate =\n options?.firstWeekContainsDate ??\n options?.locale?.options?.firstWeekContainsDate ??\n defaultOptions.firstWeekContainsDate ??\n defaultOptions.locale?.options?.firstWeekContainsDate ??\n 1;\n\n const weekStartsOn =\n options?.weekStartsOn ??\n options?.locale?.options?.weekStartsOn ??\n defaultOptions.weekStartsOn ??\n defaultOptions.locale?.options?.weekStartsOn ??\n 0;\n\n const originalDate = toDate(date, options?.in);\n\n if (!isValid(originalDate)) {\n throw new RangeError(\"Invalid time value\");\n }\n\n let parts = formatStr\n .match(longFormattingTokensRegExp)\n .map((substring) => {\n const firstCharacter = substring[0];\n if (firstCharacter === \"p\" || firstCharacter === \"P\") {\n const longFormatter = longFormatters[firstCharacter];\n return longFormatter(substring, locale.formatLong);\n }\n return substring;\n })\n .join(\"\")\n .match(formattingTokensRegExp)\n .map((substring) => {\n // Replace two single quote characters with one single quote character\n if (substring === \"''\") {\n return { isToken: false, value: \"'\" };\n }\n\n const firstCharacter = substring[0];\n if (firstCharacter === \"'\") {\n return { isToken: false, value: cleanEscapedString(substring) };\n }\n\n if (formatters[firstCharacter]) {\n return { isToken: true, value: substring };\n }\n\n if (firstCharacter.match(unescapedLatinCharacterRegExp)) {\n throw new RangeError(\n \"Format string contains an unescaped latin alphabet character `\" +\n firstCharacter +\n \"`\",\n );\n }\n\n return { isToken: false, value: substring };\n });\n\n // invoke localize preprocessor (only for french locales at the moment)\n if (locale.localize.preprocessor) {\n parts = locale.localize.preprocessor(originalDate, parts);\n }\n\n const formatterOptions = {\n firstWeekContainsDate,\n weekStartsOn,\n locale,\n };\n\n return parts\n .map((part) => {\n if (!part.isToken) return part.value;\n\n const token = part.value;\n\n if (\n (!options?.useAdditionalWeekYearTokens &&\n isProtectedWeekYearToken(token)) ||\n (!options?.useAdditionalDayOfYearTokens &&\n isProtectedDayOfYearToken(token))\n ) {\n warnOrThrowProtectedError(token, formatStr, String(date));\n }\n\n const formatter = formatters[token[0]];\n return formatter(originalDate, token, locale.localize, formatterOptions);\n })\n .join(\"\");\n}\n\nfunction cleanEscapedString(input) {\n const matched = input.match(escapedStringRegExp);\n\n if (!matched) {\n return input;\n }\n\n return matched[1].replace(doubleQuoteRegExp, \"'\");\n}\n\n// Fallback for modularized imports:\nexport default format;\n","import { normalizeDates } from \"./_lib/normalizeDates.js\";\n\n/**\n * The {@link isSameMonth} function options.\n */\n\n/**\n * @name isSameMonth\n * @category Month Helpers\n * @summary Are the given dates in the same month (and year)?\n *\n * @description\n * Are the given dates in the same month (and year)?\n *\n * @param laterDate - The first date to check\n * @param earlierDate - The second date to check\n * @param options - An object with options\n *\n * @returns The dates are in the same month (and year)\n *\n * @example\n * // Are 2 September 2014 and 25 September 2014 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2014, 8, 25))\n * //=> true\n *\n * @example\n * // Are 2 September 2014 and 25 September 2015 in the same month?\n * const result = isSameMonth(new Date(2014, 8, 2), new Date(2015, 8, 25))\n * //=> false\n */\nexport function isSameMonth(laterDate, earlierDate, options) {\n const [laterDate_, earlierDate_] = normalizeDates(\n options?.in,\n laterDate,\n earlierDate,\n );\n return (\n laterDate_.getFullYear() === earlierDate_.getFullYear() &&\n laterDate_.getMonth() === earlierDate_.getMonth()\n );\n}\n\n// Fallback for modularized imports:\nexport default isSameMonth;\n","import { addMonths } from \"./addMonths.js\";\n\n/**\n * The subMonths function options.\n */\n\n/**\n * @name subMonths\n * @category Month Helpers\n * @summary Subtract the specified number of months from the given date.\n *\n * @description\n * Subtract the specified number of months from the given date.\n *\n * @typeParam DateType - The `Date` type, the function operates on. Gets inferred from passed arguments. Allows to use extensions like [`UTCDate`](https://github.com/date-fns/utc).\n * @typeParam ResultDate - The result `Date` type, it is the type returned from the context function if it is passed, or inferred from the arguments.\n *\n * @param date - The date to be changed\n * @param amount - The amount of months to be subtracted.\n * @param options - An object with options\n *\n * @returns The new date with the months subtracted\n *\n * @example\n * // Subtract 5 months from 1 February 2015:\n * const result = subMonths(new Date(2015, 1, 1), 5)\n * //=> Mon Sep 01 2014 00:00:00\n */\nexport function subMonths(date, amount, options) {\n return addMonths(date, -amount, options);\n}\n\n// Fallback for modularized imports:\nexport default subMonths;\n","const formatDistanceLocale = {\n lessThanXSeconds: {\n one: \"menos de un segundo\",\n other: \"menos de {{count}} segundos\",\n },\n\n xSeconds: {\n one: \"1 segundo\",\n other: \"{{count}} segundos\",\n },\n\n halfAMinute: \"medio minuto\",\n\n lessThanXMinutes: {\n one: \"menos de un minuto\",\n other: \"menos de {{count}} minutos\",\n },\n\n xMinutes: {\n one: \"1 minuto\",\n other: \"{{count}} minutos\",\n },\n\n aboutXHours: {\n one: \"alrededor de 1 hora\",\n other: \"alrededor de {{count}} horas\",\n },\n\n xHours: {\n one: \"1 hora\",\n other: \"{{count}} horas\",\n },\n\n xDays: {\n one: \"1 día\",\n other: \"{{count}} días\",\n },\n\n aboutXWeeks: {\n one: \"alrededor de 1 semana\",\n other: \"alrededor de {{count}} semanas\",\n },\n\n xWeeks: {\n one: \"1 semana\",\n other: \"{{count}} semanas\",\n },\n\n aboutXMonths: {\n one: \"alrededor de 1 mes\",\n other: \"alrededor de {{count}} meses\",\n },\n\n xMonths: {\n one: \"1 mes\",\n other: \"{{count}} meses\",\n },\n\n aboutXYears: {\n one: \"alrededor de 1 año\",\n other: \"alrededor de {{count}} años\",\n },\n\n xYears: {\n one: \"1 año\",\n other: \"{{count}} años\",\n },\n\n overXYears: {\n one: \"más de 1 año\",\n other: \"más de {{count}} años\",\n },\n\n almostXYears: {\n one: \"casi 1 año\",\n other: \"casi {{count}} años\",\n },\n};\n\nexport const formatDistance = (token, count, options) => {\n let result;\n\n const tokenValue = formatDistanceLocale[token];\n if (typeof tokenValue === \"string\") {\n result = tokenValue;\n } else if (count === 1) {\n result = tokenValue.one;\n } else {\n result = tokenValue.other.replace(\"{{count}}\", count.toString());\n }\n\n if (options?.addSuffix) {\n if (options.comparison && options.comparison > 0) {\n return \"en \" + result;\n } else {\n return \"hace \" + result;\n }\n }\n\n return result;\n};\n","import { buildFormatLongFn } from \"../../_lib/buildFormatLongFn.js\";\n\nconst dateFormats = {\n full: \"EEEE, d 'de' MMMM 'de' y\",\n long: \"d 'de' MMMM 'de' y\",\n medium: \"d MMM y\",\n short: \"dd/MM/y\",\n};\n\nconst timeFormats = {\n full: \"HH:mm:ss zzzz\",\n long: \"HH:mm:ss z\",\n medium: \"HH:mm:ss\",\n short: \"HH:mm\",\n};\n\nconst dateTimeFormats = {\n full: \"{{date}} 'a las' {{time}}\",\n long: \"{{date}} 'a las' {{time}}\",\n medium: \"{{date}}, {{time}}\",\n short: \"{{date}}, {{time}}\",\n};\n\nexport const formatLong = {\n date: buildFormatLongFn({\n formats: dateFormats,\n defaultWidth: \"full\",\n }),\n\n time: buildFormatLongFn({\n formats: timeFormats,\n defaultWidth: \"full\",\n }),\n\n dateTime: buildFormatLongFn({\n formats: dateTimeFormats,\n defaultWidth: \"full\",\n }),\n};\n","const formatRelativeLocale = {\n lastWeek: \"'el' eeee 'pasado a la' p\",\n yesterday: \"'ayer a la' p\",\n today: \"'hoy a la' p\",\n tomorrow: \"'mañana a la' p\",\n nextWeek: \"eeee 'a la' p\",\n other: \"P\",\n};\n\nconst formatRelativeLocalePlural = {\n lastWeek: \"'el' eeee 'pasado a las' p\",\n yesterday: \"'ayer a las' p\",\n today: \"'hoy a las' p\",\n tomorrow: \"'mañana a las' p\",\n nextWeek: \"eeee 'a las' p\",\n other: \"P\",\n};\n\nexport const formatRelative = (token, date, _baseDate, _options) => {\n if (date.getHours() !== 1) {\n return formatRelativeLocalePlural[token];\n } else {\n return formatRelativeLocale[token];\n }\n};\n","import { buildLocalizeFn } from \"../../_lib/buildLocalizeFn.js\";\n\nconst eraValues = {\n narrow: [\"AC\", \"DC\"],\n abbreviated: [\"AC\", \"DC\"],\n wide: [\"antes de cristo\", \"después de cristo\"],\n};\n\nconst quarterValues = {\n narrow: [\"1\", \"2\", \"3\", \"4\"],\n abbreviated: [\"T1\", \"T2\", \"T3\", \"T4\"],\n wide: [\"1º trimestre\", \"2º trimestre\", \"3º trimestre\", \"4º trimestre\"],\n};\n\nconst monthValues = {\n narrow: [\"e\", \"f\", \"m\", \"a\", \"m\", \"j\", \"j\", \"a\", \"s\", \"o\", \"n\", \"d\"],\n abbreviated: [\n \"ene\",\n \"feb\",\n \"mar\",\n \"abr\",\n \"may\",\n \"jun\",\n \"jul\",\n \"ago\",\n \"sep\",\n \"oct\",\n \"nov\",\n \"dic\",\n ],\n\n wide: [\n \"enero\",\n \"febrero\",\n \"marzo\",\n \"abril\",\n \"mayo\",\n \"junio\",\n \"julio\",\n \"agosto\",\n \"septiembre\",\n \"octubre\",\n \"noviembre\",\n \"diciembre\",\n ],\n};\n\nconst dayValues = {\n narrow: [\"d\", \"l\", \"m\", \"m\", \"j\", \"v\", \"s\"],\n short: [\"do\", \"lu\", \"ma\", \"mi\", \"ju\", \"vi\", \"sá\"],\n abbreviated: [\"dom\", \"lun\", \"mar\", \"mié\", \"jue\", \"vie\", \"sáb\"],\n wide: [\n \"domingo\",\n \"lunes\",\n \"martes\",\n \"miércoles\",\n \"jueves\",\n \"viernes\",\n \"sábado\",\n ],\n};\n\nconst dayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mn\",\n noon: \"md\",\n morning: \"mañana\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noche\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"medianoche\",\n noon: \"mediodia\",\n morning: \"mañana\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noche\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"medianoche\",\n noon: \"mediodia\",\n morning: \"mañana\",\n afternoon: \"tarde\",\n evening: \"tarde\",\n night: \"noche\",\n },\n};\n\nconst formattingDayPeriodValues = {\n narrow: {\n am: \"a\",\n pm: \"p\",\n midnight: \"mn\",\n noon: \"md\",\n morning: \"de la mañana\",\n afternoon: \"de la tarde\",\n evening: \"de la tarde\",\n night: \"de la noche\",\n },\n abbreviated: {\n am: \"AM\",\n pm: \"PM\",\n midnight: \"medianoche\",\n noon: \"mediodia\",\n morning: \"de la mañana\",\n afternoon: \"de la tarde\",\n evening: \"de la tarde\",\n night: \"de la noche\",\n },\n wide: {\n am: \"a.m.\",\n pm: \"p.m.\",\n midnight: \"medianoche\",\n noon: \"mediodia\",\n morning: \"de la mañana\",\n afternoon: \"de la tarde\",\n evening: \"de la tarde\",\n night: \"de la noche\",\n },\n};\n\nconst ordinalNumber = (dirtyNumber, _options) => {\n const number = Number(dirtyNumber);\n return number + \"º\";\n};\n\nexport const localize = {\n ordinalNumber: ordinalNumber,\n\n era: buildLocalizeFn({\n values: eraValues,\n defaultWidth: \"wide\",\n }),\n\n quarter: buildLocalizeFn({\n values: quarterValues,\n defaultWidth: \"wide\",\n argumentCallback: (quarter) => Number(quarter) - 1,\n }),\n\n month: buildLocalizeFn({\n values: monthValues,\n defaultWidth: \"wide\",\n }),\n\n day: buildLocalizeFn({\n values: dayValues,\n defaultWidth: \"wide\",\n }),\n\n dayPeriod: buildLocalizeFn({\n values: dayPeriodValues,\n defaultWidth: \"wide\",\n formattingValues: formattingDayPeriodValues,\n defaultFormattingWidth: \"wide\",\n }),\n};\n","import { buildMatchPatternFn } from \"../../_lib/buildMatchPatternFn.js\";\nimport { buildMatchFn } from \"../../_lib/buildMatchFn.js\";\n\nconst matchOrdinalNumberPattern = /^(\\d+)(º)?/i;\nconst parseOrdinalNumberPattern = /\\d+/i;\n\nconst matchEraPatterns = {\n narrow: /^(ac|dc|a|d)/i,\n abbreviated: /^(a\\.?\\s?c\\.?|a\\.?\\s?e\\.?\\s?c\\.?|d\\.?\\s?c\\.?|e\\.?\\s?c\\.?)/i,\n wide: /^(antes de cristo|antes de la era com[uú]n|despu[eé]s de cristo|era com[uú]n)/i,\n};\nconst parseEraPatterns = {\n any: [/^ac/i, /^dc/i],\n wide: [\n /^(antes de cristo|antes de la era com[uú]n)/i,\n /^(despu[eé]s de cristo|era com[uú]n)/i,\n ],\n};\n\nconst matchQuarterPatterns = {\n narrow: /^[1234]/i,\n abbreviated: /^T[1234]/i,\n wide: /^[1234](º)? trimestre/i,\n};\nconst parseQuarterPatterns = {\n any: [/1/i, /2/i, /3/i, /4/i],\n};\n\nconst matchMonthPatterns = {\n narrow: /^[efmajsond]/i,\n abbreviated: /^(ene|feb|mar|abr|may|jun|jul|ago|sep|oct|nov|dic)/i,\n wide: /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n};\nconst parseMonthPatterns = {\n narrow: [\n /^e/i,\n /^f/i,\n /^m/i,\n /^a/i,\n /^m/i,\n /^j/i,\n /^j/i,\n /^a/i,\n /^s/i,\n /^o/i,\n /^n/i,\n /^d/i,\n ],\n\n any: [\n /^en/i,\n /^feb/i,\n /^mar/i,\n /^abr/i,\n /^may/i,\n /^jun/i,\n /^jul/i,\n /^ago/i,\n /^sep/i,\n /^oct/i,\n /^nov/i,\n /^dic/i,\n ],\n};\n\nconst matchDayPatterns = {\n narrow: /^[dlmjvs]/i,\n short: /^(do|lu|ma|mi|ju|vi|s[áa])/i,\n abbreviated: /^(dom|lun|mar|mi[ée]|jue|vie|s[áa]b)/i,\n wide: /^(domingo|lunes|martes|mi[ée]rcoles|jueves|viernes|s[áa]bado)/i,\n};\nconst parseDayPatterns = {\n narrow: [/^d/i, /^l/i, /^m/i, /^m/i, /^j/i, /^v/i, /^s/i],\n any: [/^do/i, /^lu/i, /^ma/i, /^mi/i, /^ju/i, /^vi/i, /^sa/i],\n};\n\nconst matchDayPeriodPatterns = {\n narrow: /^(a|p|mn|md|(de la|a las) (mañana|tarde|noche))/i,\n any: /^([ap]\\.?\\s?m\\.?|medianoche|mediodia|(de la|a las) (mañana|tarde|noche))/i,\n};\nconst parseDayPeriodPatterns = {\n any: {\n am: /^a/i,\n pm: /^p/i,\n midnight: /^mn/i,\n noon: /^md/i,\n morning: /mañana/i,\n afternoon: /tarde/i,\n evening: /tarde/i,\n night: /noche/i,\n },\n};\n\nexport const match = {\n ordinalNumber: buildMatchPatternFn({\n matchPattern: matchOrdinalNumberPattern,\n parsePattern: parseOrdinalNumberPattern,\n valueCallback: function (value) {\n return parseInt(value, 10);\n },\n }),\n\n era: buildMatchFn({\n matchPatterns: matchEraPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseEraPatterns,\n defaultParseWidth: \"any\",\n }),\n\n quarter: buildMatchFn({\n matchPatterns: matchQuarterPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseQuarterPatterns,\n defaultParseWidth: \"any\",\n valueCallback: (index) => index + 1,\n }),\n\n month: buildMatchFn({\n matchPatterns: matchMonthPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseMonthPatterns,\n defaultParseWidth: \"any\",\n }),\n\n day: buildMatchFn({\n matchPatterns: matchDayPatterns,\n defaultMatchWidth: \"wide\",\n parsePatterns: parseDayPatterns,\n defaultParseWidth: \"any\",\n }),\n\n dayPeriod: buildMatchFn({\n matchPatterns: matchDayPeriodPatterns,\n defaultMatchWidth: \"any\",\n parsePatterns: parseDayPeriodPatterns,\n defaultParseWidth: \"any\",\n }),\n};\n","import { formatDistance } from \"./es/_lib/formatDistance.js\";\nimport { formatLong } from \"./es/_lib/formatLong.js\";\nimport { formatRelative } from \"./es/_lib/formatRelative.js\";\nimport { localize } from \"./es/_lib/localize.js\";\nimport { match } from \"./es/_lib/match.js\";\n\n/**\n * @category Locales\n * @summary Spanish locale.\n * @language Spanish\n * @iso-639-2 spa\n * @author Juan Angosto [@juanangosto](https://github.com/juanangosto)\n * @author Guillermo Grau [@guigrpa](https://github.com/guigrpa)\n * @author Fernando Agüero [@fjaguero](https://github.com/fjaguero)\n * @author Gastón Haro [@harogaston](https://github.com/harogaston)\n * @author Yago Carballo [@YagoCarballo](https://github.com/YagoCarballo)\n */\nexport const es = {\n code: \"es\",\n formatDistance: formatDistance,\n formatLong: formatLong,\n formatRelative: formatRelative,\n localize: localize,\n match: match,\n options: {\n weekStartsOn: 1 /* Monday */,\n firstWeekContainsDate: 1,\n },\n};\n\n// Fallback for modularized imports:\nexport default es;\n","import $HgANd$react from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $f0a04ccd8dbdd83b$export$e5c5a5f917a5871c = typeof document !== 'undefined' ? (0, $HgANd$react).useLayoutEffect : ()=>{};\n\n\nexport {$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c as useLayoutEffect};\n//# sourceMappingURL=useLayoutEffect.module.js.map\n","const $431fbd86ca7dc216$export$b204af158042fbac = (el)=>{\n var _el_ownerDocument;\n return (_el_ownerDocument = el === null || el === void 0 ? void 0 : el.ownerDocument) !== null && _el_ownerDocument !== void 0 ? _el_ownerDocument : document;\n};\nconst $431fbd86ca7dc216$export$f21a1ffae260145a = (el)=>{\n if (el && 'window' in el && el.window === el) return el;\n const doc = $431fbd86ca7dc216$export$b204af158042fbac(el);\n return doc.defaultView || window;\n};\n/**\n * Type guard that checks if a value is a Node. Verifies the presence and type of the nodeType property.\n */ function $431fbd86ca7dc216$var$isNode(value) {\n return value !== null && typeof value === 'object' && 'nodeType' in value && typeof value.nodeType === 'number';\n}\nfunction $431fbd86ca7dc216$export$af51f0f06c0f328a(node) {\n return $431fbd86ca7dc216$var$isNode(node) && node.nodeType === Node.DOCUMENT_FRAGMENT_NODE && 'host' in node;\n}\n\n\nexport {$431fbd86ca7dc216$export$b204af158042fbac as getOwnerDocument, $431fbd86ca7dc216$export$f21a1ffae260145a as getOwnerWindow, $431fbd86ca7dc216$export$af51f0f06c0f328a as isShadowRoot};\n//# sourceMappingURL=domHelpers.module.js.map\n","/*\n * Copyright 2023 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ let $f4e2df6bd15f8569$var$_tableNestedRows = false;\nlet $f4e2df6bd15f8569$var$_shadowDOM = false;\nfunction $f4e2df6bd15f8569$export$d9d8a0f82de49530() {\n $f4e2df6bd15f8569$var$_tableNestedRows = true;\n}\nfunction $f4e2df6bd15f8569$export$1b00cb14a96194e6() {\n return $f4e2df6bd15f8569$var$_tableNestedRows;\n}\nfunction $f4e2df6bd15f8569$export$12b151d9882e9985() {\n $f4e2df6bd15f8569$var$_shadowDOM = true;\n}\nfunction $f4e2df6bd15f8569$export$98658e8c59125e6a() {\n return $f4e2df6bd15f8569$var$_shadowDOM;\n}\n\n\nexport {$f4e2df6bd15f8569$export$d9d8a0f82de49530 as enableTableNestedRows, $f4e2df6bd15f8569$export$1b00cb14a96194e6 as tableNestedRows, $f4e2df6bd15f8569$export$12b151d9882e9985 as enableShadowDOM, $f4e2df6bd15f8569$export$98658e8c59125e6a as shadowDOM};\n//# sourceMappingURL=module.js.map\n","import {isShadowRoot as $431fbd86ca7dc216$export$af51f0f06c0f328a} from \"./domHelpers.mjs\";\nimport {shadowDOM as $lcSu5$shadowDOM} from \"@react-stately/flags\";\n\n// Source: https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/DOMFunctions.ts#L16\n\n\nfunction $d4ee10de306f2510$export$4282f70798064fe0(node, otherNode) {\n if (!(0, $lcSu5$shadowDOM)()) return otherNode && node ? node.contains(otherNode) : false;\n if (!node || !otherNode) return false;\n let currentNode = otherNode;\n while(currentNode !== null){\n if (currentNode === node) return true;\n if (currentNode.tagName === 'SLOT' && currentNode.assignedSlot) // Element is slotted\n currentNode = currentNode.assignedSlot.parentNode;\n else if ((0, $431fbd86ca7dc216$export$af51f0f06c0f328a)(currentNode)) // Element is in shadow root\n currentNode = currentNode.host;\n else currentNode = currentNode.parentNode;\n }\n return false;\n}\nconst $d4ee10de306f2510$export$cd4e5573fbe2b576 = (doc = document)=>{\n var _activeElement_shadowRoot;\n if (!(0, $lcSu5$shadowDOM)()) return doc.activeElement;\n let activeElement = doc.activeElement;\n while(activeElement && 'shadowRoot' in activeElement && ((_activeElement_shadowRoot = activeElement.shadowRoot) === null || _activeElement_shadowRoot === void 0 ? void 0 : _activeElement_shadowRoot.activeElement))activeElement = activeElement.shadowRoot.activeElement;\n return activeElement;\n};\nfunction $d4ee10de306f2510$export$e58f029f0fbfdb29(event) {\n if ((0, $lcSu5$shadowDOM)() && event.target.shadowRoot) {\n if (event.composedPath) return event.composedPath()[0];\n }\n return event.target;\n}\n\n\nexport {$d4ee10de306f2510$export$4282f70798064fe0 as nodeContains, $d4ee10de306f2510$export$cd4e5573fbe2b576 as getActiveElement, $d4ee10de306f2510$export$e58f029f0fbfdb29 as getEventTarget};\n//# sourceMappingURL=DOMFunctions.module.js.map\n","import {nodeContains as $d4ee10de306f2510$export$4282f70798064fe0} from \"./DOMFunctions.mjs\";\nimport {shadowDOM as $bJKXg$shadowDOM} from \"@react-stately/flags\";\n\n// https://github.com/microsoft/tabster/blob/a89fc5d7e332d48f68d03b1ca6e344489d1c3898/src/Shadowdomize/ShadowTreeWalker.ts\n\n\nclass $dfc540311bf7f109$export$63eb3ababa9c55c4 {\n get currentNode() {\n return this._currentNode;\n }\n set currentNode(node) {\n if (!(0, $d4ee10de306f2510$export$4282f70798064fe0)(this.root, node)) throw new Error('Cannot set currentNode to a node that is not contained by the root node.');\n const walkers = [];\n let curNode = node;\n let currentWalkerCurrentNode = node;\n this._currentNode = node;\n while(curNode && curNode !== this.root)if (curNode.nodeType === Node.DOCUMENT_FRAGMENT_NODE) {\n const shadowRoot = curNode;\n const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n acceptNode: this._acceptNode\n });\n walkers.push(walker);\n walker.currentNode = currentWalkerCurrentNode;\n this._currentSetFor.add(walker);\n curNode = currentWalkerCurrentNode = shadowRoot.host;\n } else curNode = curNode.parentNode;\n const walker = this._doc.createTreeWalker(this.root, this.whatToShow, {\n acceptNode: this._acceptNode\n });\n walkers.push(walker);\n walker.currentNode = currentWalkerCurrentNode;\n this._currentSetFor.add(walker);\n this._walkerStack = walkers;\n }\n get doc() {\n return this._doc;\n }\n firstChild() {\n let currentNode = this.currentNode;\n let newNode = this.nextNode();\n if (!(0, $d4ee10de306f2510$export$4282f70798064fe0)(currentNode, newNode)) {\n this.currentNode = currentNode;\n return null;\n }\n if (newNode) this.currentNode = newNode;\n return newNode;\n }\n lastChild() {\n let walker = this._walkerStack[0];\n let newNode = walker.lastChild();\n if (newNode) this.currentNode = newNode;\n return newNode;\n }\n nextNode() {\n const nextNode = this._walkerStack[0].nextNode();\n if (nextNode) {\n const shadowRoot = nextNode.shadowRoot;\n if (shadowRoot) {\n var _this_filter;\n let nodeResult;\n if (typeof this.filter === 'function') nodeResult = this.filter(nextNode);\n else if ((_this_filter = this.filter) === null || _this_filter === void 0 ? void 0 : _this_filter.acceptNode) nodeResult = this.filter.acceptNode(nextNode);\n if (nodeResult === NodeFilter.FILTER_ACCEPT) {\n this.currentNode = nextNode;\n return nextNode;\n }\n // _acceptNode should have added new walker for this shadow,\n // go in recursively.\n let newNode = this.nextNode();\n if (newNode) this.currentNode = newNode;\n return newNode;\n }\n if (nextNode) this.currentNode = nextNode;\n return nextNode;\n } else {\n if (this._walkerStack.length > 1) {\n this._walkerStack.shift();\n let newNode = this.nextNode();\n if (newNode) this.currentNode = newNode;\n return newNode;\n } else return null;\n }\n }\n previousNode() {\n const currentWalker = this._walkerStack[0];\n if (currentWalker.currentNode === currentWalker.root) {\n if (this._currentSetFor.has(currentWalker)) {\n this._currentSetFor.delete(currentWalker);\n if (this._walkerStack.length > 1) {\n this._walkerStack.shift();\n let newNode = this.previousNode();\n if (newNode) this.currentNode = newNode;\n return newNode;\n } else return null;\n }\n return null;\n }\n const previousNode = currentWalker.previousNode();\n if (previousNode) {\n const shadowRoot = previousNode.shadowRoot;\n if (shadowRoot) {\n var _this_filter;\n let nodeResult;\n if (typeof this.filter === 'function') nodeResult = this.filter(previousNode);\n else if ((_this_filter = this.filter) === null || _this_filter === void 0 ? void 0 : _this_filter.acceptNode) nodeResult = this.filter.acceptNode(previousNode);\n if (nodeResult === NodeFilter.FILTER_ACCEPT) {\n if (previousNode) this.currentNode = previousNode;\n return previousNode;\n }\n // _acceptNode should have added new walker for this shadow,\n // go in recursively.\n let newNode = this.lastChild();\n if (newNode) this.currentNode = newNode;\n return newNode;\n }\n if (previousNode) this.currentNode = previousNode;\n return previousNode;\n } else {\n if (this._walkerStack.length > 1) {\n this._walkerStack.shift();\n let newNode = this.previousNode();\n if (newNode) this.currentNode = newNode;\n return newNode;\n } else return null;\n }\n }\n /**\n * @deprecated\n */ nextSibling() {\n // if (__DEV__) {\n // throw new Error(\"Method not implemented.\");\n // }\n return null;\n }\n /**\n * @deprecated\n */ previousSibling() {\n // if (__DEV__) {\n // throw new Error(\"Method not implemented.\");\n // }\n return null;\n }\n /**\n * @deprecated\n */ parentNode() {\n // if (__DEV__) {\n // throw new Error(\"Method not implemented.\");\n // }\n return null;\n }\n constructor(doc, root, whatToShow, filter){\n this._walkerStack = [];\n this._currentSetFor = new Set();\n this._acceptNode = (node)=>{\n if (node.nodeType === Node.ELEMENT_NODE) {\n const shadowRoot = node.shadowRoot;\n if (shadowRoot) {\n const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n acceptNode: this._acceptNode\n });\n this._walkerStack.unshift(walker);\n return NodeFilter.FILTER_ACCEPT;\n } else {\n var _this_filter;\n if (typeof this.filter === 'function') return this.filter(node);\n else if ((_this_filter = this.filter) === null || _this_filter === void 0 ? void 0 : _this_filter.acceptNode) return this.filter.acceptNode(node);\n else if (this.filter === null) return NodeFilter.FILTER_ACCEPT;\n }\n }\n return NodeFilter.FILTER_SKIP;\n };\n this._doc = doc;\n this.root = root;\n this.filter = filter !== null && filter !== void 0 ? filter : null;\n this.whatToShow = whatToShow !== null && whatToShow !== void 0 ? whatToShow : NodeFilter.SHOW_ALL;\n this._currentNode = root;\n this._walkerStack.unshift(doc.createTreeWalker(root, whatToShow, this._acceptNode));\n const shadowRoot = root.shadowRoot;\n if (shadowRoot) {\n const walker = this._doc.createTreeWalker(shadowRoot, this.whatToShow, {\n acceptNode: this._acceptNode\n });\n this._walkerStack.unshift(walker);\n }\n }\n}\nfunction $dfc540311bf7f109$export$4d0f8be8b12a7ef6(doc, root, whatToShow, filter) {\n if ((0, $bJKXg$shadowDOM)()) return new $dfc540311bf7f109$export$63eb3ababa9c55c4(doc, root, whatToShow, filter);\n return doc.createTreeWalker(root, whatToShow, filter);\n}\n\n\nexport {$dfc540311bf7f109$export$63eb3ababa9c55c4 as ShadowTreeWalker, $dfc540311bf7f109$export$4d0f8be8b12a7ef6 as createShadowTreeWalker};\n//# sourceMappingURL=ShadowTreeWalker.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $7215afc6de606d6b$export$de79e2c695e052f3(element) {\n if ($7215afc6de606d6b$var$supportsPreventScroll()) element.focus({\n preventScroll: true\n });\n else {\n let scrollableElements = $7215afc6de606d6b$var$getScrollableElements(element);\n element.focus();\n $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements);\n }\n}\nlet $7215afc6de606d6b$var$supportsPreventScrollCached = null;\nfunction $7215afc6de606d6b$var$supportsPreventScroll() {\n if ($7215afc6de606d6b$var$supportsPreventScrollCached == null) {\n $7215afc6de606d6b$var$supportsPreventScrollCached = false;\n try {\n let focusElem = document.createElement('div');\n focusElem.focus({\n get preventScroll () {\n $7215afc6de606d6b$var$supportsPreventScrollCached = true;\n return true;\n }\n });\n } catch {\n // Ignore\n }\n }\n return $7215afc6de606d6b$var$supportsPreventScrollCached;\n}\nfunction $7215afc6de606d6b$var$getScrollableElements(element) {\n let parent = element.parentNode;\n let scrollableElements = [];\n let rootScrollingElement = document.scrollingElement || document.documentElement;\n while(parent instanceof HTMLElement && parent !== rootScrollingElement){\n if (parent.offsetHeight < parent.scrollHeight || parent.offsetWidth < parent.scrollWidth) scrollableElements.push({\n element: parent,\n scrollTop: parent.scrollTop,\n scrollLeft: parent.scrollLeft\n });\n parent = parent.parentNode;\n }\n if (rootScrollingElement instanceof HTMLElement) scrollableElements.push({\n element: rootScrollingElement,\n scrollTop: rootScrollingElement.scrollTop,\n scrollLeft: rootScrollingElement.scrollLeft\n });\n return scrollableElements;\n}\nfunction $7215afc6de606d6b$var$restoreScrollPosition(scrollableElements) {\n for (let { element: element, scrollTop: scrollTop, scrollLeft: scrollLeft } of scrollableElements){\n element.scrollTop = scrollTop;\n element.scrollLeft = scrollLeft;\n }\n}\n\n\nexport {$7215afc6de606d6b$export$de79e2c695e052f3 as focusWithoutScrolling};\n//# sourceMappingURL=focusWithoutScrolling.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ function $c87311424ea30a05$var$testUserAgent(re) {\n var _window_navigator_userAgentData;\n if (typeof window === 'undefined' || window.navigator == null) return false;\n let brands = (_window_navigator_userAgentData = window.navigator['userAgentData']) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.brands;\n return Array.isArray(brands) && brands.some((brand)=>re.test(brand.brand)) || re.test(window.navigator.userAgent);\n}\nfunction $c87311424ea30a05$var$testPlatform(re) {\n var _window_navigator_userAgentData;\n return typeof window !== 'undefined' && window.navigator != null ? re.test(((_window_navigator_userAgentData = window.navigator['userAgentData']) === null || _window_navigator_userAgentData === void 0 ? void 0 : _window_navigator_userAgentData.platform) || window.navigator.platform) : false;\n}\nfunction $c87311424ea30a05$var$cached(fn) {\n if (process.env.NODE_ENV === 'test') return fn;\n let res = null;\n return ()=>{\n if (res == null) res = fn();\n return res;\n };\n}\nconst $c87311424ea30a05$export$9ac100e40613ea10 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testPlatform(/^Mac/i);\n});\nconst $c87311424ea30a05$export$186c6964ca17d99 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testPlatform(/^iPhone/i);\n});\nconst $c87311424ea30a05$export$7bef049ce92e4224 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testPlatform(/^iPad/i) || // iPadOS 13 lies and says it's a Mac, but we can distinguish by detecting touch support.\n $c87311424ea30a05$export$9ac100e40613ea10() && navigator.maxTouchPoints > 1;\n});\nconst $c87311424ea30a05$export$fedb369cb70207f1 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$export$186c6964ca17d99() || $c87311424ea30a05$export$7bef049ce92e4224();\n});\nconst $c87311424ea30a05$export$e1865c3bedcd822b = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$export$9ac100e40613ea10() || $c87311424ea30a05$export$fedb369cb70207f1();\n});\nconst $c87311424ea30a05$export$78551043582a6a98 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/AppleWebKit/i) && !$c87311424ea30a05$export$6446a186d09e379e();\n});\nconst $c87311424ea30a05$export$6446a186d09e379e = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/Chrome/i);\n});\nconst $c87311424ea30a05$export$a11b0059900ceec8 = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/Android/i);\n});\nconst $c87311424ea30a05$export$b7d78993b74f766d = $c87311424ea30a05$var$cached(function() {\n return $c87311424ea30a05$var$testUserAgent(/Firefox/i);\n});\n\n\nexport {$c87311424ea30a05$export$9ac100e40613ea10 as isMac, $c87311424ea30a05$export$186c6964ca17d99 as isIPhone, $c87311424ea30a05$export$7bef049ce92e4224 as isIPad, $c87311424ea30a05$export$fedb369cb70207f1 as isIOS, $c87311424ea30a05$export$e1865c3bedcd822b as isAppleDevice, $c87311424ea30a05$export$78551043582a6a98 as isWebKit, $c87311424ea30a05$export$6446a186d09e379e as isChrome, $c87311424ea30a05$export$a11b0059900ceec8 as isAndroid, $c87311424ea30a05$export$b7d78993b74f766d as isFirefox};\n//# sourceMappingURL=platform.module.js.map\n","/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // We store a global list of elements that are currently transitioning,\n// mapped to a set of CSS properties that are transitioning for that element.\n// This is necessary rather than a simple count of transitions because of browser\n// bugs, e.g. Chrome sometimes fires both transitionend and transitioncancel rather\n// than one or the other. So we need to track what's actually transitioning so that\n// we can ignore these duplicate events.\nlet $bbed8b41f857bcc0$var$transitionsByElement = new Map();\n// A list of callbacks to call once there are no transitioning elements.\nlet $bbed8b41f857bcc0$var$transitionCallbacks = new Set();\nfunction $bbed8b41f857bcc0$var$setupGlobalEvents() {\n if (typeof window === 'undefined') return;\n function isTransitionEvent(event) {\n return 'propertyName' in event;\n }\n let onTransitionStart = (e)=>{\n if (!isTransitionEvent(e) || !e.target) return;\n // Add the transitioning property to the list for this element.\n let transitions = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);\n if (!transitions) {\n transitions = new Set();\n $bbed8b41f857bcc0$var$transitionsByElement.set(e.target, transitions);\n // The transitioncancel event must be registered on the element itself, rather than as a global\n // event. This enables us to handle when the node is deleted from the document while it is transitioning.\n // In that case, the cancel event would have nowhere to bubble to so we need to handle it directly.\n e.target.addEventListener('transitioncancel', onTransitionEnd, {\n once: true\n });\n }\n transitions.add(e.propertyName);\n };\n let onTransitionEnd = (e)=>{\n if (!isTransitionEvent(e) || !e.target) return;\n // Remove property from list of transitioning properties.\n let properties = $bbed8b41f857bcc0$var$transitionsByElement.get(e.target);\n if (!properties) return;\n properties.delete(e.propertyName);\n // If empty, remove transitioncancel event, and remove the element from the list of transitioning elements.\n if (properties.size === 0) {\n e.target.removeEventListener('transitioncancel', onTransitionEnd);\n $bbed8b41f857bcc0$var$transitionsByElement.delete(e.target);\n }\n // If no transitioning elements, call all of the queued callbacks.\n if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) {\n for (let cb of $bbed8b41f857bcc0$var$transitionCallbacks)cb();\n $bbed8b41f857bcc0$var$transitionCallbacks.clear();\n }\n };\n document.body.addEventListener('transitionrun', onTransitionStart);\n document.body.addEventListener('transitionend', onTransitionEnd);\n}\nif (typeof document !== 'undefined') {\n if (document.readyState !== 'loading') $bbed8b41f857bcc0$var$setupGlobalEvents();\n else document.addEventListener('DOMContentLoaded', $bbed8b41f857bcc0$var$setupGlobalEvents);\n}\n/**\n * Cleans up any elements that are no longer in the document.\n * This is necessary because we can't rely on transitionend events to fire\n * for elements that are removed from the document while transitioning.\n */ function $bbed8b41f857bcc0$var$cleanupDetachedElements() {\n for (const [eventTarget] of $bbed8b41f857bcc0$var$transitionsByElement)// Similar to `eventTarget instanceof Element && !eventTarget.isConnected`, but avoids\n // the explicit instanceof check, since it may be different in different contexts.\n if ('isConnected' in eventTarget && !eventTarget.isConnected) $bbed8b41f857bcc0$var$transitionsByElement.delete(eventTarget);\n}\nfunction $bbed8b41f857bcc0$export$24490316f764c430(fn) {\n // Wait one frame to see if an animation starts, e.g. a transition on mount.\n requestAnimationFrame(()=>{\n $bbed8b41f857bcc0$var$cleanupDetachedElements();\n // If no transitions are running, call the function immediately.\n // Otherwise, add it to a list of callbacks to run at the end of the animation.\n if ($bbed8b41f857bcc0$var$transitionsByElement.size === 0) fn();\n else $bbed8b41f857bcc0$var$transitionCallbacks.add(fn);\n });\n}\n\n\nexport {$bbed8b41f857bcc0$export$24490316f764c430 as runAfterTransition};\n//# sourceMappingURL=runAfterTransition.module.js.map\n","import {isAndroid as $c87311424ea30a05$export$a11b0059900ceec8} from \"./platform.mjs\";\n\n/*\n * Copyright 2022 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nfunction $6a7db85432448f7f$export$60278871457622de(event) {\n // JAWS/NVDA with Firefox.\n if (event.pointerType === '' && event.isTrusted) return true;\n // Android TalkBack's detail value varies depending on the event listener providing the event so we have specific logic here instead\n // If pointerType is defined, event is from a click listener. For events from mousedown listener, detail === 0 is a sufficient check\n // to detect TalkBack virtual clicks.\n if ((0, $c87311424ea30a05$export$a11b0059900ceec8)() && event.pointerType) return event.type === 'click' && event.buttons === 1;\n return event.detail === 0 && !event.pointerType;\n}\nfunction $6a7db85432448f7f$export$29bf1b5f2c56cf63(event) {\n // If the pointer size is zero, then we assume it's from a screen reader.\n // Android TalkBack double tap will sometimes return a event with width and height of 1\n // and pointerType === 'mouse' so we need to check for a specific combination of event attributes.\n // Cannot use \"event.pressure === 0\" as the sole check due to Safari pointer events always returning pressure === 0\n // instead of .5, see https://bugs.webkit.org/show_bug.cgi?id=206216. event.pointerType === 'mouse' is to distingush\n // Talkback double tap from Windows Firefox touch screen press\n return !(0, $c87311424ea30a05$export$a11b0059900ceec8)() && event.width === 0 && event.height === 0 || event.width === 1 && event.height === 1 && event.pressure === 0 && event.detail === 0 && event.pointerType === 'mouse';\n}\n\n\nexport {$6a7db85432448f7f$export$60278871457622de as isVirtualClick, $6a7db85432448f7f$export$29bf1b5f2c56cf63 as isVirtualPointerEvent};\n//# sourceMappingURL=isVirtualEvent.module.js.map\n","import {getOwnerWindow as $431fbd86ca7dc216$export$f21a1ffae260145a} from \"./domHelpers.mjs\";\n\n/*\n * Copyright 2021 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $7d2416ea0959daaa$var$supportsCheckVisibility = typeof Element !== 'undefined' && 'checkVisibility' in Element.prototype;\nfunction $7d2416ea0959daaa$var$isStyleVisible(element) {\n const windowObject = (0, $431fbd86ca7dc216$export$f21a1ffae260145a)(element);\n if (!(element instanceof windowObject.HTMLElement) && !(element instanceof windowObject.SVGElement)) return false;\n let { display: display, visibility: visibility } = element.style;\n let isVisible = display !== 'none' && visibility !== 'hidden' && visibility !== 'collapse';\n if (isVisible) {\n const { getComputedStyle: getComputedStyle } = element.ownerDocument.defaultView;\n let { display: computedDisplay, visibility: computedVisibility } = getComputedStyle(element);\n isVisible = computedDisplay !== 'none' && computedVisibility !== 'hidden' && computedVisibility !== 'collapse';\n }\n return isVisible;\n}\nfunction $7d2416ea0959daaa$var$isAttributeVisible(element, childElement) {\n return !element.hasAttribute('hidden') && // Ignore HiddenSelect when tree walking.\n !element.hasAttribute('data-react-aria-prevent-focus') && (element.nodeName === 'DETAILS' && childElement && childElement.nodeName !== 'SUMMARY' ? element.hasAttribute('open') : true);\n}\nfunction $7d2416ea0959daaa$export$e989c0fffaa6b27a(element, childElement) {\n if ($7d2416ea0959daaa$var$supportsCheckVisibility) return element.checkVisibility({\n visibilityProperty: true\n }) && !element.closest('[data-react-aria-prevent-focus]');\n return element.nodeName !== '#comment' && $7d2416ea0959daaa$var$isStyleVisible(element) && $7d2416ea0959daaa$var$isAttributeVisible(element, childElement) && (!element.parentElement || $7d2416ea0959daaa$export$e989c0fffaa6b27a(element.parentElement, element));\n}\n\n\nexport {$7d2416ea0959daaa$export$e989c0fffaa6b27a as isElementVisible};\n//# sourceMappingURL=isElementVisible.module.js.map\n","import {isElementVisible as $7d2416ea0959daaa$export$e989c0fffaa6b27a} from \"./isElementVisible.mjs\";\n\n/*\n * Copyright 2025 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \nconst $b4b717babfbb907b$var$focusableElements = [\n 'input:not([disabled]):not([type=hidden])',\n 'select:not([disabled])',\n 'textarea:not([disabled])',\n 'button:not([disabled])',\n 'a[href]',\n 'area[href]',\n 'summary',\n 'iframe',\n 'object',\n 'embed',\n 'audio[controls]',\n 'video[controls]',\n '[contenteditable]:not([contenteditable^=\"false\"])',\n 'permission'\n];\nconst $b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR = $b4b717babfbb907b$var$focusableElements.join(':not([hidden]),') + ',[tabindex]:not([disabled]):not([hidden])';\n$b4b717babfbb907b$var$focusableElements.push('[tabindex]:not([tabindex=\"-1\"]):not([disabled])');\nconst $b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR = $b4b717babfbb907b$var$focusableElements.join(':not([hidden]):not([tabindex=\"-1\"]),');\nfunction $b4b717babfbb907b$export$4c063cf1350e6fed(element) {\n return element.matches($b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR) && (0, $7d2416ea0959daaa$export$e989c0fffaa6b27a)(element) && !$b4b717babfbb907b$var$isInert(element);\n}\nfunction $b4b717babfbb907b$export$bebd5a1431fec25d(element) {\n return element.matches($b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR) && (0, $7d2416ea0959daaa$export$e989c0fffaa6b27a)(element) && !$b4b717babfbb907b$var$isInert(element);\n}\nfunction $b4b717babfbb907b$var$isInert(element) {\n let node = element;\n while(node != null){\n if (node instanceof node.ownerDocument.defaultView.HTMLElement && node.inert) return true;\n node = node.parentElement;\n }\n return false;\n}\n\n\nexport {$b4b717babfbb907b$export$4c063cf1350e6fed as isFocusable, $b4b717babfbb907b$export$bebd5a1431fec25d as isTabbable};\n//# sourceMappingURL=isFocusable.module.js.map\n","import {useLayoutEffect as $6dfIe$useLayoutEffect, useEffectEvent as $6dfIe$useEffectEvent, isFocusable as $6dfIe$isFocusable, getOwnerWindow as $6dfIe$getOwnerWindow, focusWithoutScrolling as $6dfIe$focusWithoutScrolling} from \"@react-aria/utils\";\nimport {useRef as $6dfIe$useRef, useCallback as $6dfIe$useCallback} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $8a9cb279dc87e130$export$525bc4921d56d4a(nativeEvent) {\n let event = nativeEvent;\n event.nativeEvent = nativeEvent;\n event.isDefaultPrevented = ()=>event.defaultPrevented;\n // cancelBubble is technically deprecated in the spec, but still supported in all browsers.\n event.isPropagationStopped = ()=>event.cancelBubble;\n event.persist = ()=>{};\n return event;\n}\nfunction $8a9cb279dc87e130$export$c2b7abe5d61ec696(event, target) {\n Object.defineProperty(event, 'target', {\n value: target\n });\n Object.defineProperty(event, 'currentTarget', {\n value: target\n });\n}\nfunction $8a9cb279dc87e130$export$715c682d09d639cc(onBlur) {\n let stateRef = (0, $6dfIe$useRef)({\n isFocused: false,\n observer: null\n });\n // Clean up MutationObserver on unmount. See below.\n (0, $6dfIe$useLayoutEffect)(()=>{\n const state = stateRef.current;\n return ()=>{\n if (state.observer) {\n state.observer.disconnect();\n state.observer = null;\n }\n };\n }, []);\n let dispatchBlur = (0, $6dfIe$useEffectEvent)((e)=>{\n onBlur === null || onBlur === void 0 ? void 0 : onBlur(e);\n });\n // This function is called during a React onFocus event.\n return (0, $6dfIe$useCallback)((e)=>{\n // React does not fire onBlur when an element is disabled. https://github.com/facebook/react/issues/9142\n // Most browsers fire a native focusout event in this case, except for Firefox. In that case, we use a\n // MutationObserver to watch for the disabled attribute, and dispatch these events ourselves.\n // For browsers that do, focusout fires before the MutationObserver, so onBlur should not fire twice.\n if (e.target instanceof HTMLButtonElement || e.target instanceof HTMLInputElement || e.target instanceof HTMLTextAreaElement || e.target instanceof HTMLSelectElement) {\n stateRef.current.isFocused = true;\n let target = e.target;\n let onBlurHandler = (e)=>{\n stateRef.current.isFocused = false;\n if (target.disabled) {\n // For backward compatibility, dispatch a (fake) React synthetic event.\n let event = $8a9cb279dc87e130$export$525bc4921d56d4a(e);\n dispatchBlur(event);\n }\n // We no longer need the MutationObserver once the target is blurred.\n if (stateRef.current.observer) {\n stateRef.current.observer.disconnect();\n stateRef.current.observer = null;\n }\n };\n target.addEventListener('focusout', onBlurHandler, {\n once: true\n });\n stateRef.current.observer = new MutationObserver(()=>{\n if (stateRef.current.isFocused && target.disabled) {\n var _stateRef_current_observer;\n (_stateRef_current_observer = stateRef.current.observer) === null || _stateRef_current_observer === void 0 ? void 0 : _stateRef_current_observer.disconnect();\n let relatedTargetEl = target === document.activeElement ? null : document.activeElement;\n target.dispatchEvent(new FocusEvent('blur', {\n relatedTarget: relatedTargetEl\n }));\n target.dispatchEvent(new FocusEvent('focusout', {\n bubbles: true,\n relatedTarget: relatedTargetEl\n }));\n }\n });\n stateRef.current.observer.observe(target, {\n attributes: true,\n attributeFilter: [\n 'disabled'\n ]\n });\n }\n }, [\n dispatchBlur\n ]);\n}\nlet $8a9cb279dc87e130$export$fda7da73ab5d4c48 = false;\nfunction $8a9cb279dc87e130$export$cabe61c495ee3649(target) {\n // The browser will focus the nearest focusable ancestor of our target.\n while(target && !(0, $6dfIe$isFocusable)(target))target = target.parentElement;\n let window = (0, $6dfIe$getOwnerWindow)(target);\n let activeElement = window.document.activeElement;\n if (!activeElement || activeElement === target) return;\n $8a9cb279dc87e130$export$fda7da73ab5d4c48 = true;\n let isRefocusing = false;\n let onBlur = (e)=>{\n if (e.target === activeElement || isRefocusing) e.stopImmediatePropagation();\n };\n let onFocusOut = (e)=>{\n if (e.target === activeElement || isRefocusing) {\n e.stopImmediatePropagation();\n // If there was no focusable ancestor, we don't expect a focus event.\n // Re-focus the original active element here.\n if (!target && !isRefocusing) {\n isRefocusing = true;\n (0, $6dfIe$focusWithoutScrolling)(activeElement);\n cleanup();\n }\n }\n };\n let onFocus = (e)=>{\n if (e.target === target || isRefocusing) e.stopImmediatePropagation();\n };\n let onFocusIn = (e)=>{\n if (e.target === target || isRefocusing) {\n e.stopImmediatePropagation();\n if (!isRefocusing) {\n isRefocusing = true;\n (0, $6dfIe$focusWithoutScrolling)(activeElement);\n cleanup();\n }\n }\n };\n window.addEventListener('blur', onBlur, true);\n window.addEventListener('focusout', onFocusOut, true);\n window.addEventListener('focusin', onFocusIn, true);\n window.addEventListener('focus', onFocus, true);\n let cleanup = ()=>{\n cancelAnimationFrame(raf);\n window.removeEventListener('blur', onBlur, true);\n window.removeEventListener('focusout', onFocusOut, true);\n window.removeEventListener('focusin', onFocusIn, true);\n window.removeEventListener('focus', onFocus, true);\n $8a9cb279dc87e130$export$fda7da73ab5d4c48 = false;\n isRefocusing = false;\n };\n let raf = requestAnimationFrame(cleanup);\n return cleanup;\n}\n\n\nexport {$8a9cb279dc87e130$export$525bc4921d56d4a as createSyntheticEvent, $8a9cb279dc87e130$export$c2b7abe5d61ec696 as setEventTarget, $8a9cb279dc87e130$export$715c682d09d639cc as useSyntheticBlurEvent, $8a9cb279dc87e130$export$fda7da73ab5d4c48 as ignoreFocusEvent, $8a9cb279dc87e130$export$cabe61c495ee3649 as preventFocus};\n//# sourceMappingURL=utils.module.js.map\n","import {ignoreFocusEvent as $8a9cb279dc87e130$export$fda7da73ab5d4c48} from \"./utils.mjs\";\nimport {isMac as $28AnR$isMac, isVirtualClick as $28AnR$isVirtualClick, getOwnerWindow as $28AnR$getOwnerWindow, getOwnerDocument as $28AnR$getOwnerDocument} from \"@react-aria/utils\";\nimport {useState as $28AnR$useState, useEffect as $28AnR$useEffect} from \"react\";\nimport {useIsSSR as $28AnR$useIsSSR} from \"@react-aria/ssr\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ // Portions of the code in this file are based on code from react.\n// Original licensing for the following can be found in the\n// NOTICE file in the root directory of this source tree.\n// See https://github.com/facebook/react/tree/cc7c1aece46a6b69b41958d731e0fd27c94bfc6c/packages/react-interactions\n\n\n\n\nlet $507fabe10e71c6fb$var$currentModality = null;\nlet $507fabe10e71c6fb$var$changeHandlers = new Set();\nlet $507fabe10e71c6fb$export$d90243b58daecda7 = new Map(); // We use a map here to support setting event listeners across multiple document objects.\nlet $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\nlet $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;\n// Only Tab or Esc keys will make focus visible on text input elements\nconst $507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS = {\n Tab: true,\n Escape: true\n};\nfunction $507fabe10e71c6fb$var$triggerChangeHandlers(modality, e) {\n for (let handler of $507fabe10e71c6fb$var$changeHandlers)handler(modality, e);\n}\n/**\n * Helper function to determine if a KeyboardEvent is unmodified and could make keyboard focus styles visible.\n */ function $507fabe10e71c6fb$var$isValidKey(e) {\n // Control and Shift keys trigger when navigating back to the tab with keyboard.\n return !(e.metaKey || !(0, $28AnR$isMac)() && e.altKey || e.ctrlKey || e.key === 'Control' || e.key === 'Shift' || e.key === 'Meta');\n}\nfunction $507fabe10e71c6fb$var$handleKeyboardEvent(e) {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n if ($507fabe10e71c6fb$var$isValidKey(e)) {\n $507fabe10e71c6fb$var$currentModality = 'keyboard';\n $507fabe10e71c6fb$var$triggerChangeHandlers('keyboard', e);\n }\n}\nfunction $507fabe10e71c6fb$var$handlePointerEvent(e) {\n $507fabe10e71c6fb$var$currentModality = 'pointer';\n if (e.type === 'mousedown' || e.type === 'pointerdown') {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n $507fabe10e71c6fb$var$triggerChangeHandlers('pointer', e);\n }\n}\nfunction $507fabe10e71c6fb$var$handleClickEvent(e) {\n if ((0, $28AnR$isVirtualClick)(e)) {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n $507fabe10e71c6fb$var$currentModality = 'virtual';\n }\n}\nfunction $507fabe10e71c6fb$var$handleFocusEvent(e) {\n // Firefox fires two extra focus events when the user first clicks into an iframe:\n // first on the window, then on the document. We ignore these events so they don't\n // cause keyboard focus rings to appear.\n if (e.target === window || e.target === document || (0, $8a9cb279dc87e130$export$fda7da73ab5d4c48) || !e.isTrusted) return;\n // If a focus event occurs without a preceding keyboard or pointer event, switch to virtual modality.\n // This occurs, for example, when navigating a form with the next/previous buttons on iOS.\n if (!$507fabe10e71c6fb$var$hasEventBeforeFocus && !$507fabe10e71c6fb$var$hasBlurredWindowRecently) {\n $507fabe10e71c6fb$var$currentModality = 'virtual';\n $507fabe10e71c6fb$var$triggerChangeHandlers('virtual', e);\n }\n $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\n $507fabe10e71c6fb$var$hasBlurredWindowRecently = false;\n}\nfunction $507fabe10e71c6fb$var$handleWindowBlur() {\n if (0, $8a9cb279dc87e130$export$fda7da73ab5d4c48) return;\n // When the window is blurred, reset state. This is necessary when tabbing out of the window,\n // for example, since a subsequent focus event won't be fired.\n $507fabe10e71c6fb$var$hasEventBeforeFocus = false;\n $507fabe10e71c6fb$var$hasBlurredWindowRecently = true;\n}\n/**\n * Setup global event listeners to control when keyboard focus style should be visible.\n */ function $507fabe10e71c6fb$var$setupGlobalFocusEvents(element) {\n if (typeof window === 'undefined' || typeof document === 'undefined' || $507fabe10e71c6fb$export$d90243b58daecda7.get((0, $28AnR$getOwnerWindow)(element))) return;\n const windowObject = (0, $28AnR$getOwnerWindow)(element);\n const documentObject = (0, $28AnR$getOwnerDocument)(element);\n // Programmatic focus() calls shouldn't affect the current input modality.\n // However, we need to detect other cases when a focus event occurs without\n // a preceding user event (e.g. screen reader focus). Overriding the focus\n // method on HTMLElement.prototype is a bit hacky, but works.\n let focus = windowObject.HTMLElement.prototype.focus;\n windowObject.HTMLElement.prototype.focus = function() {\n $507fabe10e71c6fb$var$hasEventBeforeFocus = true;\n focus.apply(this, arguments);\n };\n documentObject.addEventListener('keydown', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.addEventListener('keyup', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.addEventListener('click', $507fabe10e71c6fb$var$handleClickEvent, true);\n // Register focus events on the window so they are sure to happen\n // before React's event listeners (registered on the document).\n windowObject.addEventListener('focus', $507fabe10e71c6fb$var$handleFocusEvent, true);\n windowObject.addEventListener('blur', $507fabe10e71c6fb$var$handleWindowBlur, false);\n if (typeof PointerEvent !== 'undefined') {\n documentObject.addEventListener('pointerdown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('pointermove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('pointerup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n } else if (process.env.NODE_ENV === 'test') {\n documentObject.addEventListener('mousedown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('mousemove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.addEventListener('mouseup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n }\n // Add unmount handler\n windowObject.addEventListener('beforeunload', ()=>{\n $507fabe10e71c6fb$var$tearDownWindowFocusTracking(element);\n }, {\n once: true\n });\n $507fabe10e71c6fb$export$d90243b58daecda7.set(windowObject, {\n focus: focus\n });\n}\nconst $507fabe10e71c6fb$var$tearDownWindowFocusTracking = (element, loadListener)=>{\n const windowObject = (0, $28AnR$getOwnerWindow)(element);\n const documentObject = (0, $28AnR$getOwnerDocument)(element);\n if (loadListener) documentObject.removeEventListener('DOMContentLoaded', loadListener);\n if (!$507fabe10e71c6fb$export$d90243b58daecda7.has(windowObject)) return;\n windowObject.HTMLElement.prototype.focus = $507fabe10e71c6fb$export$d90243b58daecda7.get(windowObject).focus;\n documentObject.removeEventListener('keydown', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.removeEventListener('keyup', $507fabe10e71c6fb$var$handleKeyboardEvent, true);\n documentObject.removeEventListener('click', $507fabe10e71c6fb$var$handleClickEvent, true);\n windowObject.removeEventListener('focus', $507fabe10e71c6fb$var$handleFocusEvent, true);\n windowObject.removeEventListener('blur', $507fabe10e71c6fb$var$handleWindowBlur, false);\n if (typeof PointerEvent !== 'undefined') {\n documentObject.removeEventListener('pointerdown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('pointermove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('pointerup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n } else if (process.env.NODE_ENV === 'test') {\n documentObject.removeEventListener('mousedown', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('mousemove', $507fabe10e71c6fb$var$handlePointerEvent, true);\n documentObject.removeEventListener('mouseup', $507fabe10e71c6fb$var$handlePointerEvent, true);\n }\n $507fabe10e71c6fb$export$d90243b58daecda7.delete(windowObject);\n};\nfunction $507fabe10e71c6fb$export$2f1888112f558a7d(element) {\n const documentObject = (0, $28AnR$getOwnerDocument)(element);\n let loadListener;\n if (documentObject.readyState !== 'loading') $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);\n else {\n loadListener = ()=>{\n $507fabe10e71c6fb$var$setupGlobalFocusEvents(element);\n };\n documentObject.addEventListener('DOMContentLoaded', loadListener);\n }\n return ()=>$507fabe10e71c6fb$var$tearDownWindowFocusTracking(element, loadListener);\n}\n// Server-side rendering does not have the document object defined\n// eslint-disable-next-line no-restricted-globals\nif (typeof document !== 'undefined') $507fabe10e71c6fb$export$2f1888112f558a7d();\nfunction $507fabe10e71c6fb$export$b9b3dfddab17db27() {\n return $507fabe10e71c6fb$var$currentModality !== 'pointer';\n}\nfunction $507fabe10e71c6fb$export$630ff653c5ada6a9() {\n return $507fabe10e71c6fb$var$currentModality;\n}\nfunction $507fabe10e71c6fb$export$8397ddfc504fdb9a(modality) {\n $507fabe10e71c6fb$var$currentModality = modality;\n $507fabe10e71c6fb$var$triggerChangeHandlers(modality, null);\n}\nfunction $507fabe10e71c6fb$export$98e20ec92f614cfe() {\n $507fabe10e71c6fb$var$setupGlobalFocusEvents();\n let [modality, setModality] = (0, $28AnR$useState)($507fabe10e71c6fb$var$currentModality);\n (0, $28AnR$useEffect)(()=>{\n let handler = ()=>{\n setModality($507fabe10e71c6fb$var$currentModality);\n };\n $507fabe10e71c6fb$var$changeHandlers.add(handler);\n return ()=>{\n $507fabe10e71c6fb$var$changeHandlers.delete(handler);\n };\n }, []);\n return (0, $28AnR$useIsSSR)() ? null : modality;\n}\nconst $507fabe10e71c6fb$var$nonTextInputTypes = new Set([\n 'checkbox',\n 'radio',\n 'range',\n 'color',\n 'file',\n 'image',\n 'button',\n 'submit',\n 'reset'\n]);\n/**\n * If this is attached to text input component, return if the event is a focus event (Tab/Escape keys pressed) so that\n * focus visible style can be properly set.\n */ function $507fabe10e71c6fb$var$isKeyboardFocusEvent(isTextInput, modality, e) {\n let document1 = (0, $28AnR$getOwnerDocument)(e === null || e === void 0 ? void 0 : e.target);\n const IHTMLInputElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLInputElement : HTMLInputElement;\n const IHTMLTextAreaElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLTextAreaElement : HTMLTextAreaElement;\n const IHTMLElement = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).HTMLElement : HTMLElement;\n const IKeyboardEvent = typeof window !== 'undefined' ? (0, $28AnR$getOwnerWindow)(e === null || e === void 0 ? void 0 : e.target).KeyboardEvent : KeyboardEvent;\n // For keyboard events that occur on a non-input element that will move focus into input element (aka ArrowLeft going from Datepicker button to the main input group)\n // we need to rely on the user passing isTextInput into here. This way we can skip toggling focus visiblity for said input element\n isTextInput = isTextInput || document1.activeElement instanceof IHTMLInputElement && !$507fabe10e71c6fb$var$nonTextInputTypes.has(document1.activeElement.type) || document1.activeElement instanceof IHTMLTextAreaElement || document1.activeElement instanceof IHTMLElement && document1.activeElement.isContentEditable;\n return !(isTextInput && modality === 'keyboard' && e instanceof IKeyboardEvent && !$507fabe10e71c6fb$var$FOCUS_VISIBLE_INPUT_KEYS[e.key]);\n}\nfunction $507fabe10e71c6fb$export$ffd9e5021c1fb2d6(props = {}) {\n let { isTextInput: isTextInput, autoFocus: autoFocus } = props;\n let [isFocusVisibleState, setFocusVisible] = (0, $28AnR$useState)(autoFocus || $507fabe10e71c6fb$export$b9b3dfddab17db27());\n $507fabe10e71c6fb$export$ec71b4b83ac08ec3((isFocusVisible)=>{\n setFocusVisible(isFocusVisible);\n }, [\n isTextInput\n ], {\n isTextInput: isTextInput\n });\n return {\n isFocusVisible: isFocusVisibleState\n };\n}\nfunction $507fabe10e71c6fb$export$ec71b4b83ac08ec3(fn, deps, opts) {\n $507fabe10e71c6fb$var$setupGlobalFocusEvents();\n (0, $28AnR$useEffect)(()=>{\n let handler = (modality, e)=>{\n // We want to early return for any keyboard events that occur inside text inputs EXCEPT for Tab and Escape\n if (!$507fabe10e71c6fb$var$isKeyboardFocusEvent(!!(opts === null || opts === void 0 ? void 0 : opts.isTextInput), modality, e)) return;\n fn($507fabe10e71c6fb$export$b9b3dfddab17db27());\n };\n $507fabe10e71c6fb$var$changeHandlers.add(handler);\n return ()=>{\n $507fabe10e71c6fb$var$changeHandlers.delete(handler);\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, deps);\n}\n\n\nexport {$507fabe10e71c6fb$export$d90243b58daecda7 as hasSetupGlobalListeners, $507fabe10e71c6fb$export$2f1888112f558a7d as addWindowFocusTracking, $507fabe10e71c6fb$export$b9b3dfddab17db27 as isFocusVisible, $507fabe10e71c6fb$export$630ff653c5ada6a9 as getInteractionModality, $507fabe10e71c6fb$export$8397ddfc504fdb9a as setInteractionModality, $507fabe10e71c6fb$export$98e20ec92f614cfe as useInteractionModality, $507fabe10e71c6fb$export$ffd9e5021c1fb2d6 as useFocusVisible, $507fabe10e71c6fb$export$ec71b4b83ac08ec3 as useFocusVisibleListener};\n//# sourceMappingURL=useFocusVisible.module.js.map\n","import {getInteractionModality as $507fabe10e71c6fb$export$630ff653c5ada6a9} from \"./useFocusVisible.mjs\";\nimport {getOwnerDocument as $k50bp$getOwnerDocument, getActiveElement as $k50bp$getActiveElement, runAfterTransition as $k50bp$runAfterTransition, focusWithoutScrolling as $k50bp$focusWithoutScrolling} from \"@react-aria/utils\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the 'License');\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an 'AS IS' BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\nfunction $3ad3f6e1647bc98d$export$80f3e147d781571c(element) {\n // If the user is interacting with a virtual cursor, e.g. screen reader, then\n // wait until after any animated transitions that are currently occurring on\n // the page before shifting focus. This avoids issues with VoiceOver on iOS\n // causing the page to scroll when moving focus if the element is transitioning\n // from off the screen.\n const ownerDocument = (0, $k50bp$getOwnerDocument)(element);\n const activeElement = (0, $k50bp$getActiveElement)(ownerDocument);\n if ((0, $507fabe10e71c6fb$export$630ff653c5ada6a9)() === 'virtual') {\n let lastFocusedElement = activeElement;\n (0, $k50bp$runAfterTransition)(()=>{\n // If focus did not move and the element is still in the document, focus it.\n if ((0, $k50bp$getActiveElement)(ownerDocument) === lastFocusedElement && element.isConnected) (0, $k50bp$focusWithoutScrolling)(element);\n });\n } else (0, $k50bp$focusWithoutScrolling)(element);\n}\n\n\nexport {$3ad3f6e1647bc98d$export$80f3e147d781571c as focusSafely};\n//# sourceMappingURL=focusSafely.module.js.map\n","import {useLayoutEffect as $cgawC$useLayoutEffect, getActiveElement as $cgawC$getActiveElement, getOwnerDocument as $cgawC$getOwnerDocument, getEventTarget as $cgawC$getEventTarget, isAndroid as $cgawC$isAndroid, isChrome as $cgawC$isChrome, isTabbable as $cgawC$isTabbable, isFocusable as $cgawC$isFocusable, createShadowTreeWalker as $cgawC$createShadowTreeWalker} from \"@react-aria/utils\";\nimport {getInteractionModality as $cgawC$getInteractionModality, focusSafely as $cgawC$focusSafely} from \"@react-aria/interactions\";\nimport $cgawC$react, {useRef as $cgawC$useRef, useContext as $cgawC$useContext, useMemo as $cgawC$useMemo, useEffect as $cgawC$useEffect} from \"react\";\n\n/*\n * Copyright 2020 Adobe. All rights reserved.\n * This file is licensed to you under the Apache License, Version 2.0 (the \"License\");\n * you may not use this file except in compliance with the License. You may obtain a copy\n * of the License at http://www.apache.org/licenses/LICENSE-2.0\n *\n * Unless required by applicable law or agreed to in writing, software distributed under\n * the License is distributed on an \"AS IS\" BASIS, WITHOUT WARRANTIES OR REPRESENTATIONS\n * OF ANY KIND, either express or implied. See the License for the specific language\n * governing permissions and limitations under the License.\n */ \n\n\nconst $9bf71ea28793e738$var$FocusContext = /*#__PURE__*/ (0, $cgawC$react).createContext(null);\nconst $9bf71ea28793e738$var$RESTORE_FOCUS_EVENT = 'react-aria-focus-scope-restore';\nlet $9bf71ea28793e738$var$activeScope = null;\nfunction $9bf71ea28793e738$export$20e40289641fbbb6(props) {\n let { children: children, contain: contain, restoreFocus: restoreFocus, autoFocus: autoFocus } = props;\n let startRef = (0, $cgawC$useRef)(null);\n let endRef = (0, $cgawC$useRef)(null);\n let scopeRef = (0, $cgawC$useRef)([]);\n let { parentNode: parentNode } = (0, $cgawC$useContext)($9bf71ea28793e738$var$FocusContext) || {};\n // Create a tree node here so we can add children to it even before it is added to the tree.\n let node = (0, $cgawC$useMemo)(()=>new $9bf71ea28793e738$var$TreeNode({\n scopeRef: scopeRef\n }), [\n scopeRef\n ]);\n (0, $cgawC$useLayoutEffect)(()=>{\n // If a new scope mounts outside the active scope, (e.g. DialogContainer launched from a menu),\n // use the active scope as the parent instead of the parent from context. Layout effects run bottom\n // up, so if the parent is not yet added to the tree, don't do this. Only the outer-most FocusScope\n // that is being added should get the activeScope as its parent.\n let parent = parentNode || $9bf71ea28793e738$export$d06fae2ee68b101e.root;\n if ($9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(parent.scopeRef) && $9bf71ea28793e738$var$activeScope && !$9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, parent.scopeRef)) {\n let activeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);\n if (activeNode) parent = activeNode;\n }\n // Add the node to the parent, and to the tree.\n parent.addChild(node);\n $9bf71ea28793e738$export$d06fae2ee68b101e.addNode(node);\n }, [\n node,\n parentNode\n ]);\n (0, $cgawC$useLayoutEffect)(()=>{\n let node = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n if (node) node.contain = !!contain;\n }, [\n contain\n ]);\n (0, $cgawC$useLayoutEffect)(()=>{\n var _startRef_current;\n // Find all rendered nodes between the sentinels and add them to the scope.\n let node = (_startRef_current = startRef.current) === null || _startRef_current === void 0 ? void 0 : _startRef_current.nextSibling;\n let nodes = [];\n let stopPropagation = (e)=>e.stopPropagation();\n while(node && node !== endRef.current){\n nodes.push(node);\n // Stop custom restore focus event from propagating to parent focus scopes.\n node.addEventListener($9bf71ea28793e738$var$RESTORE_FOCUS_EVENT, stopPropagation);\n node = node.nextSibling;\n }\n scopeRef.current = nodes;\n return ()=>{\n for (let node of nodes)node.removeEventListener($9bf71ea28793e738$var$RESTORE_FOCUS_EVENT, stopPropagation);\n };\n }, [\n children\n ]);\n $9bf71ea28793e738$var$useActiveScopeTracker(scopeRef, restoreFocus, contain);\n $9bf71ea28793e738$var$useFocusContainment(scopeRef, contain);\n $9bf71ea28793e738$var$useRestoreFocus(scopeRef, restoreFocus, contain);\n $9bf71ea28793e738$var$useAutoFocus(scopeRef, autoFocus);\n // This needs to be an effect so that activeScope is updated after the FocusScope tree is complete.\n // It cannot be a useLayoutEffect because the parent of this node hasn't been attached in the tree yet.\n (0, $cgawC$useEffect)(()=>{\n const activeElement = (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined));\n let scope = null;\n if ($9bf71ea28793e738$var$isElementInScope(activeElement, scopeRef.current)) {\n // We need to traverse the focusScope tree and find the bottom most scope that\n // contains the active element and set that as the activeScope.\n for (let node of $9bf71ea28793e738$export$d06fae2ee68b101e.traverse())if (node.scopeRef && $9bf71ea28793e738$var$isElementInScope(activeElement, node.scopeRef.current)) scope = node;\n if (scope === $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef)) $9bf71ea28793e738$var$activeScope = scope.scopeRef;\n }\n }, [\n scopeRef\n ]);\n // This layout effect cleanup is so that the tree node is removed synchronously with react before the RAF\n // in useRestoreFocus cleanup runs.\n (0, $cgawC$useLayoutEffect)(()=>{\n return ()=>{\n var _focusScopeTree_getTreeNode_parent, _focusScopeTree_getTreeNode;\n var _focusScopeTree_getTreeNode_parent_scopeRef;\n // Scope may have been re-parented.\n let parentScope = (_focusScopeTree_getTreeNode_parent_scopeRef = (_focusScopeTree_getTreeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef)) === null || _focusScopeTree_getTreeNode === void 0 ? void 0 : (_focusScopeTree_getTreeNode_parent = _focusScopeTree_getTreeNode.parent) === null || _focusScopeTree_getTreeNode_parent === void 0 ? void 0 : _focusScopeTree_getTreeNode_parent.scopeRef) !== null && _focusScopeTree_getTreeNode_parent_scopeRef !== void 0 ? _focusScopeTree_getTreeNode_parent_scopeRef : null;\n if ((scopeRef === $9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope(scopeRef, $9bf71ea28793e738$var$activeScope)) && (!parentScope || $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(parentScope))) $9bf71ea28793e738$var$activeScope = parentScope;\n $9bf71ea28793e738$export$d06fae2ee68b101e.removeTreeNode(scopeRef);\n };\n }, [\n scopeRef\n ]);\n let focusManager = (0, $cgawC$useMemo)(()=>$9bf71ea28793e738$var$createFocusManagerForScope(scopeRef), []);\n let value = (0, $cgawC$useMemo)(()=>({\n focusManager: focusManager,\n parentNode: node\n }), [\n node,\n focusManager\n ]);\n return /*#__PURE__*/ (0, $cgawC$react).createElement($9bf71ea28793e738$var$FocusContext.Provider, {\n value: value\n }, /*#__PURE__*/ (0, $cgawC$react).createElement(\"span\", {\n \"data-focus-scope-start\": true,\n hidden: true,\n ref: startRef\n }), children, /*#__PURE__*/ (0, $cgawC$react).createElement(\"span\", {\n \"data-focus-scope-end\": true,\n hidden: true,\n ref: endRef\n }));\n}\nfunction $9bf71ea28793e738$export$10c5169755ce7bd7() {\n var _useContext;\n return (_useContext = (0, $cgawC$useContext)($9bf71ea28793e738$var$FocusContext)) === null || _useContext === void 0 ? void 0 : _useContext.focusManager;\n}\nfunction $9bf71ea28793e738$var$createFocusManagerForScope(scopeRef) {\n return {\n focusNext (opts = {}) {\n let scope = scopeRef.current;\n let { from: from, tabbable: tabbable, wrap: wrap, accept: accept } = opts;\n var _scope_;\n let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)((_scope_ = scope[0]) !== null && _scope_ !== void 0 ? _scope_ : undefined));\n let sentinel = scope[0].previousElementSibling;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: tabbable,\n accept: accept\n }, scope);\n walker.currentNode = $9bf71ea28793e738$var$isElementInScope(node, scope) ? node : sentinel;\n let nextNode = walker.nextNode();\n if (!nextNode && wrap) {\n walker.currentNode = sentinel;\n nextNode = walker.nextNode();\n }\n if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n return nextNode;\n },\n focusPrevious (opts = {}) {\n let scope = scopeRef.current;\n let { from: from, tabbable: tabbable, wrap: wrap, accept: accept } = opts;\n var _scope_;\n let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)((_scope_ = scope[0]) !== null && _scope_ !== void 0 ? _scope_ : undefined));\n let sentinel = scope[scope.length - 1].nextElementSibling;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: tabbable,\n accept: accept\n }, scope);\n walker.currentNode = $9bf71ea28793e738$var$isElementInScope(node, scope) ? node : sentinel;\n let previousNode = walker.previousNode();\n if (!previousNode && wrap) {\n walker.currentNode = sentinel;\n previousNode = walker.previousNode();\n }\n if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);\n return previousNode;\n },\n focusFirst (opts = {}) {\n let scope = scopeRef.current;\n let { tabbable: tabbable, accept: accept } = opts;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: tabbable,\n accept: accept\n }, scope);\n walker.currentNode = scope[0].previousElementSibling;\n let nextNode = walker.nextNode();\n if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n return nextNode;\n },\n focusLast (opts = {}) {\n let scope = scopeRef.current;\n let { tabbable: tabbable, accept: accept } = opts;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: tabbable,\n accept: accept\n }, scope);\n walker.currentNode = scope[scope.length - 1].nextElementSibling;\n let previousNode = walker.previousNode();\n if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);\n return previousNode;\n }\n };\n}\nfunction $9bf71ea28793e738$var$getScopeRoot(scope) {\n return scope[0].parentElement;\n}\nfunction $9bf71ea28793e738$var$shouldContainFocus(scopeRef) {\n let scope = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);\n while(scope && scope.scopeRef !== scopeRef){\n if (scope.contain) return false;\n scope = scope.parent;\n }\n return true;\n}\nfunction $9bf71ea28793e738$var$isTabbableRadio(element) {\n if (element.checked) return true;\n let radios = [];\n if (!element.form) radios = [\n ...(0, $cgawC$getOwnerDocument)(element).querySelectorAll(`input[type=\"radio\"][name=\"${CSS.escape(element.name)}\"]`)\n ].filter((radio)=>!radio.form);\n else {\n var _element_form_elements, _element_form;\n let radioList = (_element_form = element.form) === null || _element_form === void 0 ? void 0 : (_element_form_elements = _element_form.elements) === null || _element_form_elements === void 0 ? void 0 : _element_form_elements.namedItem(element.name);\n radios = [\n ...radioList !== null && radioList !== void 0 ? radioList : []\n ];\n }\n if (!radios) return false;\n let anyChecked = radios.some((radio)=>radio.checked);\n return !anyChecked;\n}\nfunction $9bf71ea28793e738$var$useFocusContainment(scopeRef, contain) {\n let focusedNode = (0, $cgawC$useRef)(undefined);\n let raf = (0, $cgawC$useRef)(undefined);\n (0, $cgawC$useLayoutEffect)(()=>{\n let scope = scopeRef.current;\n if (!contain) {\n // if contain was changed, then we should cancel any ongoing waits to pull focus back into containment\n if (raf.current) {\n cancelAnimationFrame(raf.current);\n raf.current = undefined;\n }\n return;\n }\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scope ? scope[0] : undefined);\n // Handle the Tab key to contain focus within the scope\n let onKeyDown = (e)=>{\n if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || !$9bf71ea28793e738$var$shouldContainFocus(scopeRef) || e.isComposing) return;\n let focusedElement = (0, $cgawC$getActiveElement)(ownerDocument);\n let scope = scopeRef.current;\n if (!scope || !$9bf71ea28793e738$var$isElementInScope(focusedElement, scope)) return;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: true\n }, scope);\n if (!focusedElement) return;\n walker.currentNode = focusedElement;\n let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n if (!nextElement) {\n walker.currentNode = e.shiftKey ? scope[scope.length - 1].nextElementSibling : scope[0].previousElementSibling;\n nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n }\n e.preventDefault();\n if (nextElement) $9bf71ea28793e738$var$focusElement(nextElement, true);\n };\n let onFocus = (e)=>{\n // If focusing an element in a child scope of the currently active scope, the child becomes active.\n // Moving out of the active scope to an ancestor is not allowed.\n if ((!$9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, scopeRef)) && $9bf71ea28793e738$var$isElementInScope((0, $cgawC$getEventTarget)(e), scopeRef.current)) {\n $9bf71ea28793e738$var$activeScope = scopeRef;\n focusedNode.current = (0, $cgawC$getEventTarget)(e);\n } else if ($9bf71ea28793e738$var$shouldContainFocus(scopeRef) && !$9bf71ea28793e738$var$isElementInChildScope((0, $cgawC$getEventTarget)(e), scopeRef)) {\n // If a focus event occurs outside the active scope (e.g. user tabs from browser location bar),\n // restore focus to the previously focused node or the first tabbable element in the active scope.\n if (focusedNode.current) focusedNode.current.focus();\n else if ($9bf71ea28793e738$var$activeScope && $9bf71ea28793e738$var$activeScope.current) $9bf71ea28793e738$var$focusFirstInScope($9bf71ea28793e738$var$activeScope.current);\n } else if ($9bf71ea28793e738$var$shouldContainFocus(scopeRef)) focusedNode.current = (0, $cgawC$getEventTarget)(e);\n };\n let onBlur = (e)=>{\n // Firefox doesn't shift focus back to the Dialog properly without this\n if (raf.current) cancelAnimationFrame(raf.current);\n raf.current = requestAnimationFrame(()=>{\n // Patches infinite focus coersion loop for Android Talkback where the user isn't able to move the virtual cursor\n // if within a containing focus scope. Bug filed against Chrome: https://issuetracker.google.com/issues/384844019.\n // Note that this means focus can leave focus containing modals due to this, but it is isolated to Chrome Talkback.\n let modality = (0, $cgawC$getInteractionModality)();\n let shouldSkipFocusRestore = (modality === 'virtual' || modality === null) && (0, $cgawC$isAndroid)() && (0, $cgawC$isChrome)();\n // Use document.activeElement instead of e.relatedTarget so we can tell if user clicked into iframe\n let activeElement = (0, $cgawC$getActiveElement)(ownerDocument);\n if (!shouldSkipFocusRestore && activeElement && $9bf71ea28793e738$var$shouldContainFocus(scopeRef) && !$9bf71ea28793e738$var$isElementInChildScope(activeElement, scopeRef)) {\n $9bf71ea28793e738$var$activeScope = scopeRef;\n let target = (0, $cgawC$getEventTarget)(e);\n if (target && target.isConnected) {\n var _focusedNode_current;\n focusedNode.current = target;\n (_focusedNode_current = focusedNode.current) === null || _focusedNode_current === void 0 ? void 0 : _focusedNode_current.focus();\n } else if ($9bf71ea28793e738$var$activeScope.current) $9bf71ea28793e738$var$focusFirstInScope($9bf71ea28793e738$var$activeScope.current);\n }\n });\n };\n ownerDocument.addEventListener('keydown', onKeyDown, false);\n ownerDocument.addEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusout', onBlur, false));\n return ()=>{\n ownerDocument.removeEventListener('keydown', onKeyDown, false);\n ownerDocument.removeEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusout', onBlur, false));\n };\n }, [\n scopeRef,\n contain\n ]);\n // This is a useLayoutEffect so it is guaranteed to run before our async synthetic blur\n (0, $cgawC$useLayoutEffect)(()=>{\n return ()=>{\n if (raf.current) cancelAnimationFrame(raf.current);\n };\n }, [\n raf\n ]);\n}\nfunction $9bf71ea28793e738$var$isElementInAnyScope(element) {\n return $9bf71ea28793e738$var$isElementInChildScope(element);\n}\nfunction $9bf71ea28793e738$var$isElementInScope(element, scope) {\n if (!element) return false;\n if (!scope) return false;\n return scope.some((node)=>node.contains(element));\n}\nfunction $9bf71ea28793e738$var$isElementInChildScope(element, scope = null) {\n // If the element is within a top layer element (e.g. toasts), always allow moving focus there.\n if (element instanceof Element && element.closest('[data-react-aria-top-layer]')) return true;\n // node.contains in isElementInScope covers child scopes that are also DOM children,\n // but does not cover child scopes in portals.\n for (let { scopeRef: s } of $9bf71ea28793e738$export$d06fae2ee68b101e.traverse($9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scope))){\n if (s && $9bf71ea28793e738$var$isElementInScope(element, s.current)) return true;\n }\n return false;\n}\nfunction $9bf71ea28793e738$export$1258395f99bf9cbf(element) {\n return $9bf71ea28793e738$var$isElementInChildScope(element, $9bf71ea28793e738$var$activeScope);\n}\nfunction $9bf71ea28793e738$var$isAncestorScope(ancestor, scope) {\n var _focusScopeTree_getTreeNode;\n let parent = (_focusScopeTree_getTreeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scope)) === null || _focusScopeTree_getTreeNode === void 0 ? void 0 : _focusScopeTree_getTreeNode.parent;\n while(parent){\n if (parent.scopeRef === ancestor) return true;\n parent = parent.parent;\n }\n return false;\n}\nfunction $9bf71ea28793e738$var$focusElement(element, scroll = false) {\n if (element != null && !scroll) try {\n (0, $cgawC$focusSafely)(element);\n } catch {\n // ignore\n }\n else if (element != null) try {\n element.focus();\n } catch {\n // ignore\n }\n}\nfunction $9bf71ea28793e738$var$getFirstInScope(scope, tabbable = true) {\n let sentinel = scope[0].previousElementSibling;\n let scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: tabbable\n }, scope);\n walker.currentNode = sentinel;\n let nextNode = walker.nextNode();\n // If the scope does not contain a tabbable element, use the first focusable element.\n if (tabbable && !nextNode) {\n scopeRoot = $9bf71ea28793e738$var$getScopeRoot(scope);\n walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(scopeRoot, {\n tabbable: false\n }, scope);\n walker.currentNode = sentinel;\n nextNode = walker.nextNode();\n }\n return nextNode;\n}\nfunction $9bf71ea28793e738$var$focusFirstInScope(scope, tabbable = true) {\n $9bf71ea28793e738$var$focusElement($9bf71ea28793e738$var$getFirstInScope(scope, tabbable));\n}\nfunction $9bf71ea28793e738$var$useAutoFocus(scopeRef, autoFocus) {\n const autoFocusRef = (0, $cgawC$react).useRef(autoFocus);\n (0, $cgawC$useEffect)(()=>{\n if (autoFocusRef.current) {\n $9bf71ea28793e738$var$activeScope = scopeRef;\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined);\n if (!$9bf71ea28793e738$var$isElementInScope((0, $cgawC$getActiveElement)(ownerDocument), $9bf71ea28793e738$var$activeScope.current) && scopeRef.current) $9bf71ea28793e738$var$focusFirstInScope(scopeRef.current);\n }\n autoFocusRef.current = false;\n }, [\n scopeRef\n ]);\n}\nfunction $9bf71ea28793e738$var$useActiveScopeTracker(scopeRef, restore, contain) {\n // tracks the active scope, in case restore and contain are both false.\n // if either are true, this is tracked in useRestoreFocus or useFocusContainment.\n (0, $cgawC$useLayoutEffect)(()=>{\n if (restore || contain) return;\n let scope = scopeRef.current;\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scope ? scope[0] : undefined);\n let onFocus = (e)=>{\n let target = (0, $cgawC$getEventTarget)(e);\n if ($9bf71ea28793e738$var$isElementInScope(target, scopeRef.current)) $9bf71ea28793e738$var$activeScope = scopeRef;\n else if (!$9bf71ea28793e738$var$isElementInAnyScope(target)) $9bf71ea28793e738$var$activeScope = null;\n };\n ownerDocument.addEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n return ()=>{\n ownerDocument.removeEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n };\n }, [\n scopeRef,\n restore,\n contain\n ]);\n}\nfunction $9bf71ea28793e738$var$shouldRestoreFocus(scopeRef) {\n let scope = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode($9bf71ea28793e738$var$activeScope);\n while(scope && scope.scopeRef !== scopeRef){\n if (scope.nodeToRestore) return false;\n scope = scope.parent;\n }\n return (scope === null || scope === void 0 ? void 0 : scope.scopeRef) === scopeRef;\n}\nfunction $9bf71ea28793e738$var$useRestoreFocus(scopeRef, restoreFocus, contain) {\n // create a ref during render instead of useLayoutEffect so the active element is saved before a child with autoFocus=true mounts.\n // eslint-disable-next-line no-restricted-globals\n const nodeToRestoreRef = (0, $cgawC$useRef)(typeof document !== 'undefined' ? (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined)) : null);\n // restoring scopes should all track if they are active regardless of contain, but contain already tracks it plus logic to contain the focus\n // restoring-non-containing scopes should only care if they become active so they can perform the restore\n (0, $cgawC$useLayoutEffect)(()=>{\n let scope = scopeRef.current;\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scope ? scope[0] : undefined);\n if (!restoreFocus || contain) return;\n let onFocus = ()=>{\n // If focusing an element in a child scope of the currently active scope, the child becomes active.\n // Moving out of the active scope to an ancestor is not allowed.\n if ((!$9bf71ea28793e738$var$activeScope || $9bf71ea28793e738$var$isAncestorScope($9bf71ea28793e738$var$activeScope, scopeRef)) && $9bf71ea28793e738$var$isElementInScope((0, $cgawC$getActiveElement)(ownerDocument), scopeRef.current)) $9bf71ea28793e738$var$activeScope = scopeRef;\n };\n ownerDocument.addEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.addEventListener('focusin', onFocus, false));\n return ()=>{\n ownerDocument.removeEventListener('focusin', onFocus, false);\n scope === null || scope === void 0 ? void 0 : scope.forEach((element)=>element.removeEventListener('focusin', onFocus, false));\n };\n // eslint-disable-next-line react-hooks/exhaustive-deps\n }, [\n scopeRef,\n contain\n ]);\n (0, $cgawC$useLayoutEffect)(()=>{\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined);\n if (!restoreFocus) return;\n // Handle the Tab key so that tabbing out of the scope goes to the next element\n // after the node that had focus when the scope mounted. This is important when\n // using portals for overlays, so that focus goes to the expected element when\n // tabbing out of the overlay.\n let onKeyDown = (e)=>{\n if (e.key !== 'Tab' || e.altKey || e.ctrlKey || e.metaKey || !$9bf71ea28793e738$var$shouldContainFocus(scopeRef) || e.isComposing) return;\n let focusedElement = ownerDocument.activeElement;\n if (!$9bf71ea28793e738$var$isElementInChildScope(focusedElement, scopeRef) || !$9bf71ea28793e738$var$shouldRestoreFocus(scopeRef)) return;\n let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n if (!treeNode) return;\n let nodeToRestore = treeNode.nodeToRestore;\n // Create a DOM tree walker that matches all tabbable elements\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(ownerDocument.body, {\n tabbable: true\n });\n // Find the next tabbable element after the currently focused element\n walker.currentNode = focusedElement;\n let nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n if (!nodeToRestore || !nodeToRestore.isConnected || nodeToRestore === ownerDocument.body) {\n nodeToRestore = undefined;\n treeNode.nodeToRestore = undefined;\n }\n // If there is no next element, or it is outside the current scope, move focus to the\n // next element after the node to restore to instead.\n if ((!nextElement || !$9bf71ea28793e738$var$isElementInChildScope(nextElement, scopeRef)) && nodeToRestore) {\n walker.currentNode = nodeToRestore;\n // Skip over elements within the scope, in case the scope immediately follows the node to restore.\n do nextElement = e.shiftKey ? walker.previousNode() : walker.nextNode();\n while ($9bf71ea28793e738$var$isElementInChildScope(nextElement, scopeRef));\n e.preventDefault();\n e.stopPropagation();\n if (nextElement) $9bf71ea28793e738$var$focusElement(nextElement, true);\n else // If there is no next element and the nodeToRestore isn't within a FocusScope (i.e. we are leaving the top level focus scope)\n // then move focus to the body.\n // Otherwise restore focus to the nodeToRestore (e.g menu within a popover -> tabbing to close the menu should move focus to menu trigger)\n if (!$9bf71ea28793e738$var$isElementInAnyScope(nodeToRestore)) focusedElement.blur();\n else $9bf71ea28793e738$var$focusElement(nodeToRestore, true);\n }\n };\n if (!contain) ownerDocument.addEventListener('keydown', onKeyDown, true);\n return ()=>{\n if (!contain) ownerDocument.removeEventListener('keydown', onKeyDown, true);\n };\n }, [\n scopeRef,\n restoreFocus,\n contain\n ]);\n // useLayoutEffect instead of useEffect so the active element is saved synchronously instead of asynchronously.\n (0, $cgawC$useLayoutEffect)(()=>{\n const ownerDocument = (0, $cgawC$getOwnerDocument)(scopeRef.current ? scopeRef.current[0] : undefined);\n if (!restoreFocus) return;\n let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n if (!treeNode) return;\n var _nodeToRestoreRef_current;\n treeNode.nodeToRestore = (_nodeToRestoreRef_current = nodeToRestoreRef.current) !== null && _nodeToRestoreRef_current !== void 0 ? _nodeToRestoreRef_current : undefined;\n return ()=>{\n let treeNode = $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(scopeRef);\n if (!treeNode) return;\n let nodeToRestore = treeNode.nodeToRestore;\n // if we already lost focus to the body and this was the active scope, then we should attempt to restore\n let activeElement = (0, $cgawC$getActiveElement)(ownerDocument);\n if (restoreFocus && nodeToRestore && (activeElement && $9bf71ea28793e738$var$isElementInChildScope(activeElement, scopeRef) || activeElement === ownerDocument.body && $9bf71ea28793e738$var$shouldRestoreFocus(scopeRef))) {\n // freeze the focusScopeTree so it persists after the raf, otherwise during unmount nodes are removed from it\n let clonedTree = $9bf71ea28793e738$export$d06fae2ee68b101e.clone();\n requestAnimationFrame(()=>{\n // Only restore focus if we've lost focus to the body, the alternative is that focus has been purposefully moved elsewhere\n if (ownerDocument.activeElement === ownerDocument.body) {\n // look up the tree starting with our scope to find a nodeToRestore still in the DOM\n let treeNode = clonedTree.getTreeNode(scopeRef);\n while(treeNode){\n if (treeNode.nodeToRestore && treeNode.nodeToRestore.isConnected) {\n $9bf71ea28793e738$var$restoreFocusToElement(treeNode.nodeToRestore);\n return;\n }\n treeNode = treeNode.parent;\n }\n // If no nodeToRestore was found, focus the first element in the nearest\n // ancestor scope that is still in the tree.\n treeNode = clonedTree.getTreeNode(scopeRef);\n while(treeNode){\n if (treeNode.scopeRef && treeNode.scopeRef.current && $9bf71ea28793e738$export$d06fae2ee68b101e.getTreeNode(treeNode.scopeRef)) {\n let node = $9bf71ea28793e738$var$getFirstInScope(treeNode.scopeRef.current, true);\n $9bf71ea28793e738$var$restoreFocusToElement(node);\n return;\n }\n treeNode = treeNode.parent;\n }\n }\n });\n }\n };\n }, [\n scopeRef,\n restoreFocus\n ]);\n}\nfunction $9bf71ea28793e738$var$restoreFocusToElement(node) {\n // Dispatch a custom event that parent elements can intercept to customize focus restoration.\n // For example, virtualized collection components reuse DOM elements, so the original element\n // might still exist in the DOM but representing a different item.\n if (node.dispatchEvent(new CustomEvent($9bf71ea28793e738$var$RESTORE_FOCUS_EVENT, {\n bubbles: true,\n cancelable: true\n }))) $9bf71ea28793e738$var$focusElement(node);\n}\nfunction $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, opts, scope) {\n let filter = (opts === null || opts === void 0 ? void 0 : opts.tabbable) ? (0, $cgawC$isTabbable) : (0, $cgawC$isFocusable);\n // Ensure that root is an Element or fall back appropriately\n let rootElement = (root === null || root === void 0 ? void 0 : root.nodeType) === Node.ELEMENT_NODE ? root : null;\n // Determine the document to use\n let doc = (0, $cgawC$getOwnerDocument)(rootElement);\n // Create a TreeWalker, ensuring the root is an Element or Document\n let walker = (0, $cgawC$createShadowTreeWalker)(doc, root || doc, NodeFilter.SHOW_ELEMENT, {\n acceptNode (node) {\n var _opts_from;\n // Skip nodes inside the starting node.\n if (opts === null || opts === void 0 ? void 0 : (_opts_from = opts.from) === null || _opts_from === void 0 ? void 0 : _opts_from.contains(node)) return NodeFilter.FILTER_REJECT;\n if ((opts === null || opts === void 0 ? void 0 : opts.tabbable) && node.tagName === 'INPUT' && node.getAttribute('type') === 'radio') {\n // If the radio is in a form, we can get all the other radios by name\n if (!$9bf71ea28793e738$var$isTabbableRadio(node)) return NodeFilter.FILTER_REJECT;\n // If the radio is in the same group as the current node and none are selected, we can skip it\n if (walker.currentNode.tagName === 'INPUT' && walker.currentNode.type === 'radio' && walker.currentNode.name === node.name) return NodeFilter.FILTER_REJECT;\n }\n if (filter(node) && (!scope || $9bf71ea28793e738$var$isElementInScope(node, scope)) && (!(opts === null || opts === void 0 ? void 0 : opts.accept) || opts.accept(node))) return NodeFilter.FILTER_ACCEPT;\n return NodeFilter.FILTER_SKIP;\n }\n });\n if (opts === null || opts === void 0 ? void 0 : opts.from) walker.currentNode = opts.from;\n return walker;\n}\nfunction $9bf71ea28793e738$export$c5251b9e124bf29(ref, defaultOptions = {}) {\n return {\n focusNext (opts = {}) {\n let root = ref.current;\n if (!root) return null;\n let { from: from, tabbable: tabbable = defaultOptions.tabbable, wrap: wrap = defaultOptions.wrap, accept: accept = defaultOptions.accept } = opts;\n let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(root));\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n tabbable: tabbable,\n accept: accept\n });\n if (root.contains(node)) walker.currentNode = node;\n let nextNode = walker.nextNode();\n if (!nextNode && wrap) {\n walker.currentNode = root;\n nextNode = walker.nextNode();\n }\n if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n return nextNode;\n },\n focusPrevious (opts = defaultOptions) {\n let root = ref.current;\n if (!root) return null;\n let { from: from, tabbable: tabbable = defaultOptions.tabbable, wrap: wrap = defaultOptions.wrap, accept: accept = defaultOptions.accept } = opts;\n let node = from || (0, $cgawC$getActiveElement)((0, $cgawC$getOwnerDocument)(root));\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n tabbable: tabbable,\n accept: accept\n });\n if (root.contains(node)) walker.currentNode = node;\n else {\n let next = $9bf71ea28793e738$var$last(walker);\n if (next) $9bf71ea28793e738$var$focusElement(next, true);\n return next !== null && next !== void 0 ? next : null;\n }\n let previousNode = walker.previousNode();\n if (!previousNode && wrap) {\n walker.currentNode = root;\n let lastNode = $9bf71ea28793e738$var$last(walker);\n if (!lastNode) // couldn't wrap\n return null;\n previousNode = lastNode;\n }\n if (previousNode) $9bf71ea28793e738$var$focusElement(previousNode, true);\n return previousNode !== null && previousNode !== void 0 ? previousNode : null;\n },\n focusFirst (opts = defaultOptions) {\n let root = ref.current;\n if (!root) return null;\n let { tabbable: tabbable = defaultOptions.tabbable, accept: accept = defaultOptions.accept } = opts;\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n tabbable: tabbable,\n accept: accept\n });\n let nextNode = walker.nextNode();\n if (nextNode) $9bf71ea28793e738$var$focusElement(nextNode, true);\n return nextNode;\n },\n focusLast (opts = defaultOptions) {\n let root = ref.current;\n if (!root) return null;\n let { tabbable: tabbable = defaultOptions.tabbable, accept: accept = defaultOptions.accept } = opts;\n let walker = $9bf71ea28793e738$export$2d6ec8fc375ceafa(root, {\n tabbable: tabbable,\n accept: accept\n });\n let next = $9bf71ea28793e738$var$last(walker);\n if (next) $9bf71ea28793e738$var$focusElement(next, true);\n return next !== null && next !== void 0 ? next : null;\n }\n };\n}\nfunction $9bf71ea28793e738$var$last(walker) {\n let next = undefined;\n let last;\n do {\n last = walker.lastChild();\n if (last) next = last;\n }while (last);\n return next;\n}\nclass $9bf71ea28793e738$var$Tree {\n get size() {\n return this.fastMap.size;\n }\n getTreeNode(data) {\n return this.fastMap.get(data);\n }\n addTreeNode(scopeRef, parent, nodeToRestore) {\n let parentNode = this.fastMap.get(parent !== null && parent !== void 0 ? parent : null);\n if (!parentNode) return;\n let node = new $9bf71ea28793e738$var$TreeNode({\n scopeRef: scopeRef\n });\n parentNode.addChild(node);\n node.parent = parentNode;\n this.fastMap.set(scopeRef, node);\n if (nodeToRestore) node.nodeToRestore = nodeToRestore;\n }\n addNode(node) {\n this.fastMap.set(node.scopeRef, node);\n }\n removeTreeNode(scopeRef) {\n // never remove the root\n if (scopeRef === null) return;\n let node = this.fastMap.get(scopeRef);\n if (!node) return;\n let parentNode = node.parent;\n // when we remove a scope, check if any sibling scopes are trying to restore focus to something inside the scope we're removing\n // if we are, then replace the siblings restore with the restore from the scope we're removing\n for (let current of this.traverse())if (current !== node && node.nodeToRestore && current.nodeToRestore && node.scopeRef && node.scopeRef.current && $9bf71ea28793e738$var$isElementInScope(current.nodeToRestore, node.scopeRef.current)) current.nodeToRestore = node.nodeToRestore;\n let children = node.children;\n if (parentNode) {\n parentNode.removeChild(node);\n if (children.size > 0) children.forEach((child)=>parentNode && parentNode.addChild(child));\n }\n this.fastMap.delete(node.scopeRef);\n }\n // Pre Order Depth First\n *traverse(node = this.root) {\n if (node.scopeRef != null) yield node;\n if (node.children.size > 0) for (let child of node.children)yield* this.traverse(child);\n }\n clone() {\n var _node_parent;\n let newTree = new $9bf71ea28793e738$var$Tree();\n var _node_parent_scopeRef;\n for (let node of this.traverse())newTree.addTreeNode(node.scopeRef, (_node_parent_scopeRef = (_node_parent = node.parent) === null || _node_parent === void 0 ? void 0 : _node_parent.scopeRef) !== null && _node_parent_scopeRef !== void 0 ? _node_parent_scopeRef : null, node.nodeToRestore);\n return newTree;\n }\n constructor(){\n this.fastMap = new Map();\n this.root = new $9bf71ea28793e738$var$TreeNode({\n scopeRef: null\n });\n this.fastMap.set(null, this.root);\n }\n}\nclass $9bf71ea28793e738$var$TreeNode {\n addChild(node) {\n this.children.add(node);\n node.parent = this;\n }\n removeChild(node) {\n this.children.delete(node);\n node.parent = undefined;\n }\n constructor(props){\n this.children = new Set();\n this.contain = false;\n this.scopeRef = props.scopeRef;\n }\n}\nlet $9bf71ea28793e738$export$d06fae2ee68b101e = new $9bf71ea28793e738$var$Tree();\n\n\nexport {$9bf71ea28793e738$export$20e40289641fbbb6 as FocusScope, $9bf71ea28793e738$export$d06fae2ee68b101e as focusScopeTree, $9bf71ea28793e738$export$10c5169755ce7bd7 as useFocusManager, $9bf71ea28793e738$export$2d6ec8fc375ceafa as getFocusableTreeWalker, $9bf71ea28793e738$export$1258395f99bf9cbf as isElementInChildOfActiveScope, $9bf71ea28793e738$export$c5251b9e124bf29 as createFocusManager};\n//# sourceMappingURL=FocusScope.module.js.map\n","import { createPortal } from \"react-dom\";\n\ntype PortalProps = {\n children: React.ReactNode;\n node?: HTMLElement | null;\n};\n\nconst Portal = ({ children, node }: PortalProps) => {\n return createPortal(children, node ?? document.body);\n};\n\nexport { Portal };\n","import { ReactNode, RefObject } from \"react\";\r\nimport { useClickAwayWithRef, useKeyListener, usePopover } from \"../hooks\";\r\nimport { AnimatePresence, motion } from \"motion/react\";\r\nimport { FocusScope } from \"@react-aria/focus\";\r\nimport { cn } from \"../utils\";\r\nimport { Portal } from \"./Portal\";\r\n\r\ninterface PopoverCardProps {\r\n children: ReactNode | ((close: VoidFunction) => ReactNode);\r\n customTrigger?: ({\r\n triggerRef,\r\n triggerProps,\r\n toggle,\r\n open,\r\n close,\r\n }: {\r\n triggerRef: RefObject<HTMLButtonElement | null>;\r\n triggerProps: any;\r\n toggle: VoidFunction;\r\n open: boolean;\r\n close: VoidFunction;\r\n }) => React.ReactNode;\r\n triggerContent?: React.ReactNode;\r\n align?: \"start\" | \"center\" | \"end\";\r\n side?: \"top\" | \"bottom\" | \"left\" | \"right\";\r\n offset?: number;\r\n className?: string;\r\n triggerClassName?: string;\r\n popoverClassName?: string;\r\n closeOnEscape?: boolean;\r\n closeOnClickAway?: boolean;\r\n /**\r\n * To point to scroller for dismiss on scroll\r\n */\r\n scrollerId?: string;\r\n onOpen?: () => void;\r\n onClose?: () => void;\r\n maxHeight?: string | number;\r\n minWidth?: string | number;\r\n maxWidth?: string | number;\r\n}\r\n\r\nconst PopoverCard: React.FC<PopoverCardProps> = ({\r\n children,\r\n customTrigger,\r\n triggerContent,\r\n align = \"start\",\r\n side = \"bottom\",\r\n offset = 8,\r\n className,\r\n triggerClassName,\r\n closeOnEscape = true,\r\n closeOnClickAway = true,\r\n scrollerId,\r\n onOpen,\r\n onClose,\r\n maxHeight = \"400px\",\r\n minWidth = \"200px\",\r\n maxWidth = \"500px\",\r\n}) => {\r\n const {\r\n triggerRef,\r\n triggerProps,\r\n popoverRef,\r\n getPopoverPosition,\r\n open,\r\n toggle,\r\n close,\r\n } = usePopover<HTMLButtonElement, HTMLDivElement>({\r\n align,\r\n side,\r\n offset,\r\n scrollerId,\r\n onOpen: () => {\r\n onOpen?.();\r\n },\r\n onClose: () => {\r\n onClose?.();\r\n },\r\n });\r\n\r\n // Handle escape key\r\n useKeyListener(\r\n {\r\n Escape: (e) => {\r\n if (closeOnEscape) {\r\n e.preventDefault();\r\n close();\r\n triggerRef.current?.focus();\r\n }\r\n },\r\n },\r\n { enabled: open }\r\n );\r\n\r\n // Handle click away\r\n useClickAwayWithRef(popoverRef, (event) => {\r\n if (!closeOnClickAway || !triggerRef.current || !open || !event.target) {\r\n return;\r\n }\r\n\r\n if (triggerRef.current.contains(event.target as Node)) {\r\n return;\r\n }\r\n\r\n close();\r\n });\r\n\r\n const position = getPopoverPosition();\r\n\r\n return (\r\n <>\r\n {customTrigger ? (\r\n customTrigger({\r\n triggerRef,\r\n triggerProps,\r\n toggle,\r\n open,\r\n close,\r\n })\r\n ) : (\r\n <button\r\n ref={triggerRef}\r\n {...triggerProps}\r\n onClick={toggle}\r\n className={cn(\r\n \"outline-none p-2 rounded-md transition-colors\",\r\n \"hover:bg-base-3 focus-visible:bg-base-3 focus-visible:ring-2 focus-visible:ring-brand\",\r\n triggerClassName\r\n )}\r\n >\r\n {triggerContent}\r\n </button>\r\n )}\r\n\r\n <AnimatePresence>\r\n {open && (\r\n <Portal>\r\n <FocusScope contain restoreFocus autoFocus>\r\n <motion.div\r\n initial={{\r\n opacity: 0,\r\n scale: 0.95,\r\n y: side === \"bottom\" ? -10 : 10,\r\n }}\r\n animate={{ opacity: 1, scale: 1, y: 0 }}\r\n exit={{\r\n opacity: 0,\r\n scale: 0.95,\r\n y: side === \"bottom\" ? -10 : 10,\r\n }}\r\n transition={{\r\n type: \"spring\",\r\n duration: 0.2,\r\n bounce: 0.1,\r\n }}\r\n ref={popoverRef}\r\n style={{\r\n position: \"fixed\",\r\n left: position.x,\r\n top: position.top,\r\n bottom: position.bottom,\r\n maxHeight:\r\n typeof maxHeight === \"number\"\r\n ? `${maxHeight}px`\r\n : maxHeight,\r\n minWidth:\r\n typeof minWidth === \"number\" ? `${minWidth}px` : minWidth,\r\n maxWidth:\r\n typeof maxWidth === \"number\" ? `${maxWidth}px` : maxWidth,\r\n zIndex: 1000,\r\n }}\r\n className={cn(\r\n \"bg-base-1 dark-theme:bg-base-2\",\r\n \"border border-base-4 rounded-6\",\r\n \"customscrollbar overflow-auto\",\r\n className\r\n )}\r\n >\r\n {typeof children === \"function\" ? children(toggle) : children}\r\n </motion.div>\r\n </FocusScope>\r\n </Portal>\r\n )}\r\n </AnimatePresence>\r\n </>\r\n );\r\n};\r\n\r\n// Optional: Create some preset card components for common use cases\r\ninterface CardHeaderProps {\r\n title: string;\r\n subtitle?: string;\r\n onClose?: () => void;\r\n className?: string;\r\n}\r\n\r\nconst PopoverCardHeader: React.FC<CardHeaderProps> = ({\r\n title,\r\n subtitle,\r\n onClose,\r\n className,\r\n}) => (\r\n <div className={cn(\"p-4 border-b border-base-4\", className)}>\r\n <div className=\"flex items-start justify-between\">\r\n <div>\r\n <h3 className=\"font-semibold text-base-12\">{title}</h3>\r\n {subtitle && <p className=\"text-sm text-base-11 mt-1\">{subtitle}</p>}\r\n </div>\r\n {onClose && (\r\n <button\r\n onClick={onClose}\r\n className=\"ml-4 text-base-11 hover:text-base-12 transition-colors\"\r\n >\r\n ×\r\n </button>\r\n )}\r\n </div>\r\n </div>\r\n);\r\n\r\ninterface CardContentProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nconst PopoverCardContent: React.FC<CardContentProps> = ({\r\n children,\r\n className,\r\n}) => <div className={cn(\"p-4\", className)}>{children}</div>;\r\n\r\ninterface CardFooterProps {\r\n children: React.ReactNode;\r\n className?: string;\r\n}\r\n\r\nconst PopoverCardFooter: React.FC<CardFooterProps> = ({\r\n children,\r\n className,\r\n}) => (\r\n <div className={cn(\"p-4 border-t border-base-4\", className)}>{children}</div>\r\n);\r\n\r\nexport {\r\n PopoverCard,\r\n PopoverCardHeader,\r\n PopoverCardContent,\r\n PopoverCardFooter,\r\n};\r\nexport type { PopoverCardProps };\r\n","import React, { useState, useMemo, useRef, ReactNode } from \"react\";\r\nimport { CalendarDays, ChevronLeft, ChevronRight, Clock } from \"lucide-react\";\r\nimport {\r\n format,\r\n startOfMonth,\r\n endOfMonth,\r\n eachDayOfInterval,\r\n isSameMonth,\r\n isSameDay,\r\n addMonths,\r\n subMonths,\r\n Locale,\r\n} from \"date-fns\";\r\nimport { enUS, es } from \"date-fns/locale\";\r\nimport { PopoverCard } from \"./PopoverCard\";\r\nimport { cn } from \"../utils\";\r\nimport { Button } from \"./Button\";\r\n\r\n// Date utility functions\r\n\r\n// const format = (date: Date, formatStr: string): string => {\r\n// const options: Intl.DateTimeFormatOptions = {};\r\n\r\n// if (formatStr === \"MMMM yyyy\") {\r\n// options.month = \"long\";\r\n// options.year = \"numeric\";\r\n// } else if (formatStr === \"EEE\") {\r\n// options.weekday = \"short\";\r\n// } else if (formatStr === \"d\") {\r\n// return date.getDate().toString();\r\n// }\r\n\r\n// return new Intl.DateTimeFormat(\"en-US\", options).format(date);\r\n// };\r\n\r\n// const startOfMonth = (date: Date): Date => {\r\n// return new Date(date.getFullYear(), date.getMonth(), 1);\r\n// };\r\n\r\n// const endOfMonth = (date: Date): Date => {\r\n// return new Date(date.getFullYear(), date.getMonth() + 1, 0);\r\n// };\r\n\r\n// const eachDayOfInterval = (interval: { start: Date; end: Date }): Date[] => {\r\n// const days: Date[] = [];\r\n// const current = new Date(interval.start);\r\n\r\n// while (current <= interval.end) {\r\n// days.push(new Date(current));\r\n// current.setDate(current.getDate() + 1);\r\n// }\r\n\r\n// return days;\r\n// };\r\n\r\n// const isSameMonth = (date1: Date, date2: Date): boolean => {\r\n// return (\r\n// date1.getMonth() === date2.getMonth() &&\r\n// date1.getFullYear() === date2.getFullYear()\r\n// );\r\n// };\r\n\r\n// const isSameDay = (date1: Date, date2: Date): boolean => {\r\n// return date1.toDateString() === date2.toDateString();\r\n// };\r\n\r\n// const addMonths = (date: Date, amount: number): Date => {\r\n// const result = new Date(date);\r\n// result.setMonth(result.getMonth() + amount);\r\n// return result;\r\n// };\r\n\r\n// const subMonths = (date: Date, amount: number): Date => {\r\n// return addMonths(date, -amount);\r\n// };\r\n\r\nconst getWeekDayNames = (\r\n locale: Locale,\r\n weekStartsOnMonday: boolean\r\n): string[] => {\r\n const baseDate = new Date(2023, 0, 1); // Start with a Sunday\r\n const weekdays: string[] = [];\r\n\r\n for (let i = 0; i < 7; i++) {\r\n const date = new Date(baseDate);\r\n date.setDate(baseDate.getDate() + i);\r\n weekdays.push(\r\n format(date, \"EEE\", {\r\n locale: locale ?? enUS,\r\n })\r\n );\r\n }\r\n\r\n // Reorder if week starts on Monday\r\n return weekStartsOnMonday ? [...weekdays.slice(1), weekdays[0]] : weekdays;\r\n};\r\n\r\n// Types\r\ninterface CalendarProps {\r\n selectedDate?: Date | null;\r\n onDateSelect?: (date: Date) => void;\r\n disabledDates?: string[]; // ISO string dates to disable\r\n disabledDaysOfWeek?: number[]; // 0 = Sunday, 1 = Monday, ..., 6 = Saturday\r\n minDate?: Date;\r\n maxDate?: Date;\r\n locale?: Locale; // e.g., 'en-US', 'es-ES', 'fr-FR'\r\n weekStartsOnMonday?: boolean; // default false (Sunday first)\r\n className?: string;\r\n}\r\n\r\nconst Calendar: React.FC<CalendarProps> = ({\r\n selectedDate,\r\n onDateSelect,\r\n disabledDates,\r\n disabledDaysOfWeek,\r\n minDate,\r\n maxDate,\r\n locale,\r\n weekStartsOnMonday = true,\r\n className = \"\",\r\n}) => {\r\n const [currentMonth, setCurrentMonth] = useState(selectedDate || new Date());\r\n const [focusedDate, setFocusedDate] = useState<Date | null>(\r\n selectedDate || new Date()\r\n );\r\n const calendarRef = useRef<HTMLDivElement>(null);\r\n\r\n // Convert ISO strings to Date objects for comparison\r\n const disabledDateSet = useMemo(() => {\r\n if (!disabledDates) return new Set();\r\n return new Set(\r\n disabledDates.map((dateStr) => {\r\n const date = new Date(dateStr);\r\n return date.toDateString();\r\n })\r\n );\r\n }, [disabledDates]);\r\n\r\n const disabledDaysSet = useMemo(() => {\r\n return new Set(disabledDaysOfWeek || []);\r\n }, [disabledDaysOfWeek]);\r\n\r\n // Generate calendar days\r\n const calendarDays = useMemo(() => {\r\n const monthStart = startOfMonth(currentMonth);\r\n const monthEnd = endOfMonth(currentMonth);\r\n\r\n const startDate = new Date(monthStart);\r\n const endDate = new Date(monthEnd);\r\n\r\n if (weekStartsOnMonday) {\r\n // Adjust for Monday start (getDay() returns 0 for Sunday, 1 for Monday)\r\n const dayOfWeek = monthStart.getDay();\r\n const daysFromMonday = dayOfWeek === 0 ? 6 : dayOfWeek - 1;\r\n startDate.setDate(monthStart.getDate() - daysFromMonday);\r\n\r\n const endDayOfWeek = monthEnd.getDay();\r\n const daysToSunday = endDayOfWeek === 0 ? 0 : 7 - endDayOfWeek;\r\n endDate.setDate(monthEnd.getDate() + daysToSunday);\r\n } else {\r\n // Original Sunday start logic\r\n startDate.setDate(monthStart.getDate() - monthStart.getDay());\r\n endDate.setDate(monthEnd.getDate() + (6 - monthEnd.getDay()));\r\n }\r\n\r\n return eachDayOfInterval({ start: startDate, end: endDate });\r\n }, [currentMonth, weekStartsOnMonday]);\r\n\r\n const weekDays = useMemo(\r\n () => getWeekDayNames(locale ?? es, weekStartsOnMonday),\r\n [locale, weekStartsOnMonday]\r\n );\r\n\r\n const isDateEnabled = (date: Date): boolean => {\r\n const dateStr = date.toDateString();\r\n const dayOfWeek = date.getDay(); // 0 = Sunday, 1 = Monday, ..., 6 = Saturday\r\n\r\n // Check if date is in disabled list\r\n if (disabledDateSet.has(dateStr)) return false;\r\n\r\n // Check if day of week is disabled\r\n if (disabledDaysSet.has(dayOfWeek)) return false;\r\n\r\n // Check min/max dates\r\n if (minDate && date < minDate) return false;\r\n if (maxDate && date > maxDate) return false;\r\n\r\n // All dates are enabled by default unless specifically disabled\r\n return true;\r\n };\r\n\r\n const handleDateClick = (date: Date) => {\r\n if (isDateEnabled(date) && onDateSelect) {\r\n onDateSelect(date);\r\n }\r\n setFocusedDate(date);\r\n };\r\n\r\n const handleKeyDown = (event: React.KeyboardEvent) => {\r\n if (!focusedDate) return;\r\n\r\n let newFocusedDate = new Date(focusedDate);\r\n let shouldPreventDefault = true;\r\n let dayOfWeek: number;\r\n let currentDay: number;\r\n\r\n switch (event.key) {\r\n case \"ArrowUp\":\r\n newFocusedDate.setDate(newFocusedDate.getDate() - 7);\r\n break;\r\n case \"ArrowDown\":\r\n newFocusedDate.setDate(newFocusedDate.getDate() + 7);\r\n break;\r\n case \"ArrowLeft\":\r\n newFocusedDate.setDate(newFocusedDate.getDate() - 1);\r\n break;\r\n case \"ArrowRight\":\r\n newFocusedDate.setDate(newFocusedDate.getDate() + 1);\r\n break;\r\n case \"Home\":\r\n // Go to first day of the week (Sunday)\r\n dayOfWeek = newFocusedDate.getDay();\r\n newFocusedDate.setDate(newFocusedDate.getDate() - dayOfWeek);\r\n break;\r\n case \"End\":\r\n // Go to last day of the week (Saturday)\r\n currentDay = newFocusedDate.getDay();\r\n newFocusedDate.setDate(newFocusedDate.getDate() + (6 - currentDay));\r\n break;\r\n case \"PageUp\":\r\n // Previous month\r\n newFocusedDate = event.shiftKey\r\n ? subMonths(newFocusedDate, 12) // Shift+PageUp = previous year\r\n : subMonths(newFocusedDate, 1);\r\n break;\r\n case \"PageDown\":\r\n // Next month\r\n newFocusedDate = event.shiftKey\r\n ? addMonths(newFocusedDate, 12) // Shift+PageDown = next year\r\n : addMonths(newFocusedDate, 1);\r\n break;\r\n case \"Enter\":\r\n case \" \":\r\n if (isDateEnabled(focusedDate) && onDateSelect) {\r\n onDateSelect(focusedDate);\r\n }\r\n break;\r\n default:\r\n shouldPreventDefault = false;\r\n }\r\n\r\n if (shouldPreventDefault) {\r\n event.preventDefault();\r\n\r\n // Update focused date if it changed\r\n if (newFocusedDate.getTime() !== focusedDate.getTime()) {\r\n setFocusedDate(newFocusedDate);\r\n\r\n // Change month if necessary\r\n if (!isSameMonth(newFocusedDate, currentMonth)) {\r\n setCurrentMonth(newFocusedDate);\r\n }\r\n }\r\n }\r\n };\r\n\r\n const navigateMonth = (direction: \"prev\" | \"next\") => {\r\n setCurrentMonth((prev) =>\r\n direction === \"prev\" ? subMonths(prev, 1) : addMonths(prev, 1)\r\n );\r\n };\r\n\r\n return (\r\n <div\r\n ref={calendarRef}\r\n className={cn(\r\n \"dark-theme:bg-base-3 border border-base-5 dark-theme:border-base-4 rounded-6 px-4 pt-3 pb-4 w-full lg:w-80\",\r\n className\r\n )}\r\n onKeyDown={handleKeyDown}\r\n tabIndex={0}\r\n role=\"grid\"\r\n aria-label=\"Calendar\"\r\n >\r\n {/* Header */}\r\n <div className=\"flex items-center justify-between\">\r\n <Button\r\n onClick={() => navigateMonth(\"prev\")}\r\n size=\"iconSm\"\r\n // className=\"p-1 hover:bg-gray-700 rounded transition-colors\"\r\n aria-label=\"Previous month\"\r\n >\r\n <ChevronLeft size={16} />\r\n </Button>\r\n\r\n <h2 className=\"text-sm font-medium\">\r\n {format(currentMonth, \"MMMM yyyy\")}\r\n </h2>\r\n\r\n <Button\r\n onClick={() => navigateMonth(\"next\")}\r\n size=\"iconSm\"\r\n // className=\"p-1 hover:bg-gray-700 rounded transition-colors\"\r\n aria-label=\"Next month\"\r\n >\r\n <ChevronRight size={16} />\r\n </Button>\r\n </div>\r\n\r\n {/* Week day headers */}\r\n <div className=\"grid grid-cols-7 gap-1 mt-4\" role=\"row\">\r\n {weekDays.map((day) => (\r\n <div\r\n key={day}\r\n className=\"text-xs flex items-center w-8 justify-center text-base-11\"\r\n // className=\"h-8 flex items-center justify-center text-sm text-gray-400 font-medium\"\r\n role=\"columnheader\"\r\n >\r\n {day}\r\n </div>\r\n ))}\r\n </div>\r\n\r\n {/* Calendar grid */}\r\n <div className=\"grid grid-cols-7 gap-1 mt-4\" role=\"grid\">\r\n {calendarDays.map((date, index) => {\r\n const isCurrentMonth = isSameMonth(date, currentMonth);\r\n const isSelected = selectedDate\r\n ? isSameDay(date, selectedDate)\r\n : false;\r\n const isFocused = focusedDate && isSameDay(date, focusedDate);\r\n const isEnabled = isDateEnabled(date);\r\n const isToday = isSameDay(date, new Date());\r\n\r\n return (\r\n <button\r\n key={index}\r\n onClick={() => handleDateClick(date)}\r\n disabled={!isEnabled}\r\n tabIndex={isFocused ? 0 : -1}\r\n role=\"gridcell\"\r\n aria-label={`${date.toLocaleDateString(\"en-US\", {\r\n weekday: \"long\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n year: \"numeric\",\r\n })}${isSelected ? \", selected\" : \"\"}${\r\n !isEnabled ? \", disabled\" : \"\"\r\n }`}\r\n aria-selected={isSelected}\r\n aria-disabled={!isEnabled}\r\n className={cn(\r\n \"h-8 w-8 flex items-center outline-none justify-center rounded-6 hover:bg-base-4 text-sm relative\",\r\n !isCurrentMonth\r\n ? \"text-base-9\"\r\n : isSelected\r\n ? \"bg-brand text-brand-text hover:bg-brand\"\r\n : isToday\r\n ? \"text-base-12 ring-1 ring-base-8\"\r\n : \"text-base-12\",\r\n isFocused && \"ring-1 ring-base-6\",\r\n (!isEnabled || !isCurrentMonth) &&\r\n \"pointer-events-none text-base-9\"\r\n )}\r\n >\r\n {format(date, \"d\")}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\n// Example usage component\r\nconst DatePickerDemo: React.FC = () => {\r\n const [selectedDate, setSelectedDate] = useState<Date | null>(\r\n new Date(2025, 8, 21)\r\n ); // September 21, 2025\r\n\r\n // Example: Disable specific dates (ISO strings from PostgreSQL)\r\n const disabledDates = [\r\n \"2025-09-13T00:00:00Z\", // Friday the 13th\r\n \"2025-09-15T00:00:00Z\", // Specific disabled date\r\n ];\r\n\r\n // Example: Disable all Saturdays and Sundays (weekends)\r\n const disabledDaysOfWeek = [0, 6]; // 0 = Sunday, 6 = Saturday\r\n\r\n return (\r\n <div className=\"p-8 bg-gray-100 min-h-screen\">\r\n <div className=\"max-w-md mx-auto\">\r\n <h1 className=\"text-2xl font-bold mb-6 text-gray-800\">\r\n Calendar Date Picker Demo\r\n </h1>\r\n\r\n <div className=\"mb-6\">\r\n <Calendar\r\n selectedDate={selectedDate}\r\n onDateSelect={setSelectedDate}\r\n disabledDates={disabledDates}\r\n disabledDaysOfWeek={disabledDaysOfWeek}\r\n minDate={new Date(2025, 8, 1)} // September 1, 2025\r\n maxDate={new Date(2025, 11, 31)} // December 31, 2025\r\n />\r\n </div>\r\n\r\n {selectedDate && (\r\n <div className=\"bg-white p-4 rounded-lg shadow\">\r\n <h3 className=\"font-semibold text-gray-800 mb-2\">Selected Date:</h3>\r\n <p className=\"text-gray-600\">\r\n {selectedDate.toLocaleDateString(\"en-US\", {\r\n weekday: \"long\",\r\n year: \"numeric\",\r\n month: \"long\",\r\n day: \"numeric\",\r\n })}\r\n </p>\r\n <p className=\"text-sm text-gray-500 mt-1\">\r\n ISO: {selectedDate.toISOString()}\r\n </p>\r\n </div>\r\n )}\r\n\r\n <div className=\"mt-6 bg-white p-4 rounded-lg shadow\">\r\n <h3 className=\"font-semibold text-gray-800 mb-2\">\r\n Keyboard Navigation:\r\n </h3>\r\n <div className=\"text-sm text-gray-600 space-y-1\">\r\n <p>\r\n <strong>Arrow Keys:</strong> Navigate between dates\r\n </p>\r\n <p>\r\n <strong>Enter/Space:</strong> Select focused date\r\n </p>\r\n <p>\r\n <strong>Home/End:</strong> Go to start/end of week\r\n </p>\r\n <p>\r\n <strong>Page Up/Down:</strong> Previous/next month\r\n </p>\r\n <p>\r\n <strong>Shift + Page Up/Down:</strong> Previous/next year\r\n </p>\r\n </div>\r\n </div>\r\n\r\n <div className=\"mt-4 bg-white p-4 rounded-lg shadow\">\r\n <h3 className=\"font-semibold text-gray-800 mb-2\">Features:</h3>\r\n <ul className=\"text-sm text-gray-600 space-y-1\">\r\n <li>✅ All dates enabled by default</li>\r\n <li>✅ Disable specific dates (PostgreSQL ISO strings)</li>\r\n <li>✅ Disable entire days of week (e.g., weekends)</li>\r\n <li>✅ Min/max date constraints</li>\r\n <li>✅ Full keyboard navigation with arrow keys</li>\r\n <li>✅ Focus management and accessibility</li>\r\n </ul>\r\n </div>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nfunction DatePickerPopover({\r\n customTrigger,\r\n scrollerId,\r\n}: {\r\n customTrigger?: (\r\n toggle: VoidFunction,\r\n triggerRef: React.RefObject<HTMLButtonElement | null>\r\n ) => ReactNode;\r\n /**\r\n * To point scroller id for dismiss on scroll\r\n */\r\n scrollerId?: string;\r\n}) {\r\n const [selectedDate, setSelectedDate] = useState<Date>(new Date());\r\n return (\r\n <PopoverCard\r\n className=\"p-0\"\r\n scrollerId={scrollerId}\r\n customTrigger={({ toggle, triggerRef }) => {\r\n if (customTrigger) {\r\n return customTrigger(toggle, triggerRef);\r\n }\r\n return (\r\n <Button\r\n ref={triggerRef}\r\n onClick={toggle}\r\n color=\"solid\"\r\n className=\"px-3 mt-1 w-full justify-start\"\r\n >\r\n {format(new Date(), \"PP\", { locale: es })}\r\n <span className=\"grow\" />\r\n <CalendarDays size={18} className=\"text-base-11\" />\r\n </Button>\r\n );\r\n }}\r\n >\r\n {(close) => {\r\n return (\r\n <Calendar\r\n selectedDate={selectedDate}\r\n onDateSelect={(date) => {\r\n setSelectedDate(date);\r\n close();\r\n }}\r\n className=\"border-none\"\r\n disabledDaysOfWeek={[0, 6]}\r\n />\r\n );\r\n }}\r\n </PopoverCard>\r\n );\r\n}\r\n\r\nconst TimePicker = () => {\r\n return (\r\n <div>\r\n <p className=\"text-xs font-medium ml-0.5\">Start Time</p>\r\n <Button color=\"solid\" className=\"px-3 mt-1\">\r\n {format(new Date(), \"p\", { locale: es })}\r\n <span className=\"grow\" />\r\n <Clock size={18} className=\"text-base-11\" />\r\n </Button>\r\n </div>\r\n );\r\n};\r\n\r\nconst DateTimePicker = () => {\r\n return (\r\n <div className=\"flex items-center gap-x-4\">\r\n <div className=\"grow\">\r\n <p className=\"text-xs font-medium ml-0.5\">Start Date</p>\r\n <Button color=\"solid\" className=\"px-3 mt-1 w-full justify-start\">\r\n {format(new Date(), \"PP\", { locale: es })}\r\n <span className=\"grow\" />\r\n <CalendarDays size={18} className=\"text-base-11\" />\r\n </Button>\r\n </div>\r\n <div>\r\n <p className=\"text-xs font-medium ml-0.5\">Start Time</p>\r\n <Button color=\"solid\" className=\"px-3 mt-1\">\r\n {format(new Date(), \"p\", { locale: es })}\r\n <span className=\"grow\" />\r\n <Clock size={18} className=\"text-base-11\" />\r\n </Button>\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\nexport {\r\n Calendar,\r\n DatePickerPopover,\r\n TimePicker,\r\n DateTimePicker,\r\n DatePickerDemo,\r\n};\r\n","import React, { forwardRef } from \"react\";\r\nimport { Check, Minus } from \"lucide-react\";\r\nimport { cn } from \"../utils\";\r\n\r\ninterface CheckboxProps {\r\n checked?: boolean | \"indeterminate\";\r\n onCheckedChange?: (checked: boolean | \"indeterminate\") => void;\r\n disabled?: boolean;\r\n required?: boolean;\r\n name?: string;\r\n value?: string;\r\n id?: string;\r\n className?: string | ((checked: boolean | \"indeterminate\") => string);\r\n size?: \"xs\" | \"sm\" | \"md\" | \"lg\";\r\n}\r\n\r\nconst colorClasses = {\r\n unchecked: \"bg-base-3 lg:hover:bg-base-4\",\r\n checked: \"bg-brand lg:hover:bg-brand-hover text-brand-text\",\r\n uncheckedDisabled: \"bg-base-3 border-base-4\",\r\n checkedDisabled: \"bg-base-3 border-base-4 text-base-10\",\r\n};\r\n\r\nconst Checkbox = forwardRef<HTMLButtonElement, CheckboxProps>(\r\n (\r\n {\r\n checked = false,\r\n onCheckedChange,\r\n disabled = false,\r\n required = false,\r\n name,\r\n value,\r\n id,\r\n className = \"\",\r\n size = \"sm\",\r\n ...props\r\n },\r\n ref\r\n ) => {\r\n const handleClick = () => {\r\n if (disabled) return;\r\n\r\n if (checked === \"indeterminate\") {\r\n onCheckedChange?.(true);\r\n } else {\r\n onCheckedChange?.(!checked);\r\n }\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (e.key === \" \" || e.key === \"Enter\") {\r\n e.preventDefault();\r\n handleClick();\r\n }\r\n };\r\n\r\n const sizeClasses = {\r\n xs: \"h-3.5 w-3.5\",\r\n sm: \"h-4 w-4\",\r\n md: \"h-5 w-5\",\r\n lg: \"h-6 w-6\",\r\n };\r\n\r\n const iconSizes = {\r\n xs: 24,\r\n sm: 12,\r\n md: 14,\r\n lg: 16,\r\n };\r\n\r\n return (\r\n <>\r\n <button\r\n ref={ref}\r\n type=\"button\"\r\n role=\"checkbox\"\r\n aria-checked={checked === \"indeterminate\" ? \"mixed\" : checked}\r\n aria-required={required}\r\n disabled={disabled}\r\n onClick={handleClick}\r\n onKeyDown={handleKeyDown}\r\n className={cn(\r\n // Base styles\r\n \"inline-flex items-center justify-center rounded-2 border border-base-4 transition-all duration-200 ease-in-out\",\r\n \"focus-visible:outline-none focus-visible:ring-2 focus-visible:ring-base-5\",\r\n // Size\r\n sizeClasses[size],\r\n // Disabled state\r\n disabled && \"cursor-not-allowed opacity-75\",\r\n !disabled && \"cursor-pointer\",\r\n // Checked states\r\n checked\r\n ? disabled\r\n ? colorClasses.checkedDisabled\r\n : colorClasses.checked\r\n : disabled\r\n ? colorClasses.uncheckedDisabled\r\n : colorClasses.unchecked,\r\n // Custom classes\r\n typeof className === \"function\" ? className(checked) : className\r\n )}\r\n {...props}\r\n >\r\n {checked === true && (\r\n <Check\r\n size={iconSizes[size]}\r\n className=\"stroke-current\"\r\n // strokeWidth={2.5}\r\n />\r\n )}\r\n {checked === \"indeterminate\" && (\r\n <Minus\r\n size={iconSizes[size]}\r\n className=\"stroke-current\"\r\n // strokeWidth={2.5}\r\n />\r\n )}\r\n </button>\r\n\r\n {/* Hidden input for form submission */}\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n value={value}\r\n checked={checked === true}\r\n onChange={() => {}} // Controlled by button\r\n disabled={disabled}\r\n required={required}\r\n id={id}\r\n className=\"sr-only\"\r\n tabIndex={-1}\r\n />\r\n </>\r\n );\r\n }\r\n);\r\n\r\nCheckbox.displayName = \"Checkbox\";\r\n\r\nexport { Checkbox };\r\n","/** A special constant with type `never` */\nexport const NEVER = Object.freeze({\n status: \"aborted\",\n});\nexport /*@__NO_SIDE_EFFECTS__*/ function $constructor(name, initializer, params) {\n function init(inst, def) {\n var _a;\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod ?? {},\n enumerable: false,\n });\n (_a = inst._zod).traits ?? (_a.traits = new Set());\n inst._zod.traits.add(name);\n initializer(inst, def);\n // support prototype modifications\n for (const k in _.prototype) {\n if (!(k in inst))\n Object.defineProperty(inst, k, { value: _.prototype[k].bind(inst) });\n }\n inst._zod.constr = _;\n inst._zod.def = def;\n }\n // doesn't work if Parent has a constructor with arguments\n const Parent = params?.Parent ?? Object;\n class Definition extends Parent {\n }\n Object.defineProperty(Definition, \"name\", { value: name });\n function _(def) {\n var _a;\n const inst = params?.Parent ? new Definition() : this;\n init(inst, def);\n (_a = inst._zod).deferred ?? (_a.deferred = []);\n for (const fn of inst._zod.deferred) {\n fn();\n }\n return inst;\n }\n Object.defineProperty(_, \"init\", { value: init });\n Object.defineProperty(_, Symbol.hasInstance, {\n value: (inst) => {\n if (params?.Parent && inst instanceof params.Parent)\n return true;\n return inst?._zod?.traits?.has(name);\n },\n });\n Object.defineProperty(_, \"name\", { value: name });\n return _;\n}\n////////////////////////////// UTILITIES ///////////////////////////////////////\nexport const $brand = Symbol(\"zod_brand\");\nexport class $ZodAsyncError extends Error {\n constructor() {\n super(`Encountered Promise during synchronous parse. Use .parseAsync() instead.`);\n }\n}\nexport const globalConfig = {};\nexport function config(newConfig) {\n if (newConfig)\n Object.assign(globalConfig, newConfig);\n return globalConfig;\n}\n","// functions\nexport function assertEqual(val) {\n return val;\n}\nexport function assertNotEqual(val) {\n return val;\n}\nexport function assertIs(_arg) { }\nexport function assertNever(_x) {\n throw new Error();\n}\nexport function assert(_) { }\nexport function getEnumValues(entries) {\n const numericValues = Object.values(entries).filter((v) => typeof v === \"number\");\n const values = Object.entries(entries)\n .filter(([k, _]) => numericValues.indexOf(+k) === -1)\n .map(([_, v]) => v);\n return values;\n}\nexport function joinValues(array, separator = \"|\") {\n return array.map((val) => stringifyPrimitive(val)).join(separator);\n}\nexport function jsonStringifyReplacer(_, value) {\n if (typeof value === \"bigint\")\n return value.toString();\n return value;\n}\nexport function cached(getter) {\n const set = false;\n return {\n get value() {\n if (!set) {\n const value = getter();\n Object.defineProperty(this, \"value\", { value });\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n };\n}\nexport function nullish(input) {\n return input === null || input === undefined;\n}\nexport function cleanRegex(source) {\n const start = source.startsWith(\"^\") ? 1 : 0;\n const end = source.endsWith(\"$\") ? source.length - 1 : source.length;\n return source.slice(start, end);\n}\nexport function floatSafeRemainder(val, step) {\n const valDecCount = (val.toString().split(\".\")[1] || \"\").length;\n const stepDecCount = (step.toString().split(\".\")[1] || \"\").length;\n const decCount = valDecCount > stepDecCount ? valDecCount : stepDecCount;\n const valInt = Number.parseInt(val.toFixed(decCount).replace(\".\", \"\"));\n const stepInt = Number.parseInt(step.toFixed(decCount).replace(\".\", \"\"));\n return (valInt % stepInt) / 10 ** decCount;\n}\nexport function defineLazy(object, key, getter) {\n const set = false;\n Object.defineProperty(object, key, {\n get() {\n if (!set) {\n const value = getter();\n object[key] = value;\n return value;\n }\n throw new Error(\"cached value already set\");\n },\n set(v) {\n Object.defineProperty(object, key, {\n value: v,\n // configurable: true,\n });\n // object[key] = v;\n },\n configurable: true,\n });\n}\nexport function assignProp(target, prop, value) {\n Object.defineProperty(target, prop, {\n value,\n writable: true,\n enumerable: true,\n configurable: true,\n });\n}\nexport function getElementAtPath(obj, path) {\n if (!path)\n return obj;\n return path.reduce((acc, key) => acc?.[key], obj);\n}\nexport function promiseAllObject(promisesObj) {\n const keys = Object.keys(promisesObj);\n const promises = keys.map((key) => promisesObj[key]);\n return Promise.all(promises).then((results) => {\n const resolvedObj = {};\n for (let i = 0; i < keys.length; i++) {\n resolvedObj[keys[i]] = results[i];\n }\n return resolvedObj;\n });\n}\nexport function randomString(length = 10) {\n const chars = \"abcdefghijklmnopqrstuvwxyz\";\n let str = \"\";\n for (let i = 0; i < length; i++) {\n str += chars[Math.floor(Math.random() * chars.length)];\n }\n return str;\n}\nexport function esc(str) {\n return JSON.stringify(str);\n}\nexport const captureStackTrace = Error.captureStackTrace\n ? Error.captureStackTrace\n : (..._args) => { };\nexport function isObject(data) {\n return typeof data === \"object\" && data !== null && !Array.isArray(data);\n}\nexport const allowsEval = cached(() => {\n if (typeof navigator !== \"undefined\" && navigator?.userAgent?.includes(\"Cloudflare\")) {\n return false;\n }\n try {\n const F = Function;\n new F(\"\");\n return true;\n }\n catch (_) {\n return false;\n }\n});\nexport function isPlainObject(o) {\n if (isObject(o) === false)\n return false;\n // modified constructor\n const ctor = o.constructor;\n if (ctor === undefined)\n return true;\n // modified prototype\n const prot = ctor.prototype;\n if (isObject(prot) === false)\n return false;\n // ctor doesn't have static `isPrototypeOf`\n if (Object.prototype.hasOwnProperty.call(prot, \"isPrototypeOf\") === false) {\n return false;\n }\n return true;\n}\nexport function numKeys(data) {\n let keyCount = 0;\n for (const key in data) {\n if (Object.prototype.hasOwnProperty.call(data, key)) {\n keyCount++;\n }\n }\n return keyCount;\n}\nexport const getParsedType = (data) => {\n const t = typeof data;\n switch (t) {\n case \"undefined\":\n return \"undefined\";\n case \"string\":\n return \"string\";\n case \"number\":\n return Number.isNaN(data) ? \"nan\" : \"number\";\n case \"boolean\":\n return \"boolean\";\n case \"function\":\n return \"function\";\n case \"bigint\":\n return \"bigint\";\n case \"symbol\":\n return \"symbol\";\n case \"object\":\n if (Array.isArray(data)) {\n return \"array\";\n }\n if (data === null) {\n return \"null\";\n }\n if (data.then && typeof data.then === \"function\" && data.catch && typeof data.catch === \"function\") {\n return \"promise\";\n }\n if (typeof Map !== \"undefined\" && data instanceof Map) {\n return \"map\";\n }\n if (typeof Set !== \"undefined\" && data instanceof Set) {\n return \"set\";\n }\n if (typeof Date !== \"undefined\" && data instanceof Date) {\n return \"date\";\n }\n if (typeof File !== \"undefined\" && data instanceof File) {\n return \"file\";\n }\n return \"object\";\n default:\n throw new Error(`Unknown data type: ${t}`);\n }\n};\nexport const propertyKeyTypes = new Set([\"string\", \"number\", \"symbol\"]);\nexport const primitiveTypes = new Set([\"string\", \"number\", \"bigint\", \"boolean\", \"symbol\", \"undefined\"]);\nexport function escapeRegex(str) {\n return str.replace(/[.*+?^${}()|[\\]\\\\]/g, \"\\\\$&\");\n}\n// zod-specific utils\nexport function clone(inst, def, params) {\n const cl = new inst._zod.constr(def ?? inst._zod.def);\n if (!def || params?.parent)\n cl._zod.parent = inst;\n return cl;\n}\nexport function normalizeParams(_params) {\n const params = _params;\n if (!params)\n return {};\n if (typeof params === \"string\")\n return { error: () => params };\n if (params?.message !== undefined) {\n if (params?.error !== undefined)\n throw new Error(\"Cannot specify both `message` and `error` params\");\n params.error = params.message;\n }\n delete params.message;\n if (typeof params.error === \"string\")\n return { ...params, error: () => params.error };\n return params;\n}\nexport function createTransparentProxy(getter) {\n let target;\n return new Proxy({}, {\n get(_, prop, receiver) {\n target ?? (target = getter());\n return Reflect.get(target, prop, receiver);\n },\n set(_, prop, value, receiver) {\n target ?? (target = getter());\n return Reflect.set(target, prop, value, receiver);\n },\n has(_, prop) {\n target ?? (target = getter());\n return Reflect.has(target, prop);\n },\n deleteProperty(_, prop) {\n target ?? (target = getter());\n return Reflect.deleteProperty(target, prop);\n },\n ownKeys(_) {\n target ?? (target = getter());\n return Reflect.ownKeys(target);\n },\n getOwnPropertyDescriptor(_, prop) {\n target ?? (target = getter());\n return Reflect.getOwnPropertyDescriptor(target, prop);\n },\n defineProperty(_, prop, descriptor) {\n target ?? (target = getter());\n return Reflect.defineProperty(target, prop, descriptor);\n },\n });\n}\nexport function stringifyPrimitive(value) {\n if (typeof value === \"bigint\")\n return value.toString() + \"n\";\n if (typeof value === \"string\")\n return `\"${value}\"`;\n return `${value}`;\n}\nexport function optionalKeys(shape) {\n return Object.keys(shape).filter((k) => {\n return shape[k]._zod.optin === \"optional\" && shape[k]._zod.optout === \"optional\";\n });\n}\nexport const NUMBER_FORMAT_RANGES = {\n safeint: [Number.MIN_SAFE_INTEGER, Number.MAX_SAFE_INTEGER],\n int32: [-2147483648, 2147483647],\n uint32: [0, 4294967295],\n float32: [-3.4028234663852886e38, 3.4028234663852886e38],\n float64: [-Number.MAX_VALUE, Number.MAX_VALUE],\n};\nexport const BIGINT_FORMAT_RANGES = {\n int64: [/* @__PURE__*/ BigInt(\"-9223372036854775808\"), /* @__PURE__*/ BigInt(\"9223372036854775807\")],\n uint64: [/* @__PURE__*/ BigInt(0), /* @__PURE__*/ BigInt(\"18446744073709551615\")],\n};\nexport function pick(schema, mask) {\n const newShape = {};\n const currDef = schema._zod.def; //.shape;\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // pick key\n newShape[key] = currDef.shape[key];\n }\n return clone(schema, {\n ...schema._zod.def,\n shape: newShape,\n checks: [],\n });\n}\nexport function omit(schema, mask) {\n const newShape = { ...schema._zod.def.shape };\n const currDef = schema._zod.def; //.shape;\n for (const key in mask) {\n if (!(key in currDef.shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n delete newShape[key];\n }\n return clone(schema, {\n ...schema._zod.def,\n shape: newShape,\n checks: [],\n });\n}\nexport function extend(schema, shape) {\n if (!isPlainObject(shape)) {\n throw new Error(\"Invalid input to extend: expected a plain object\");\n }\n const def = {\n ...schema._zod.def,\n get shape() {\n const _shape = { ...schema._zod.def.shape, ...shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n checks: [], // delete existing checks\n };\n return clone(schema, def);\n}\nexport function merge(a, b) {\n return clone(a, {\n ...a._zod.def,\n get shape() {\n const _shape = { ...a._zod.def.shape, ...b._zod.def.shape };\n assignProp(this, \"shape\", _shape); // self-caching\n return _shape;\n },\n catchall: b._zod.def.catchall,\n checks: [], // delete existing checks\n });\n}\nexport function partial(Class, schema, mask) {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in oldShape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n else {\n for (const key in oldShape) {\n // if (oldShape[key]!._zod.optin === \"optional\") continue;\n shape[key] = Class\n ? new Class({\n type: \"optional\",\n innerType: oldShape[key],\n })\n : oldShape[key];\n }\n }\n return clone(schema, {\n ...schema._zod.def,\n shape,\n checks: [],\n });\n}\nexport function required(Class, schema, mask) {\n const oldShape = schema._zod.def.shape;\n const shape = { ...oldShape };\n if (mask) {\n for (const key in mask) {\n if (!(key in shape)) {\n throw new Error(`Unrecognized key: \"${key}\"`);\n }\n if (!mask[key])\n continue;\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n else {\n for (const key in oldShape) {\n // overwrite with non-optional\n shape[key] = new Class({\n type: \"nonoptional\",\n innerType: oldShape[key],\n });\n }\n }\n return clone(schema, {\n ...schema._zod.def,\n shape,\n // optional: [],\n checks: [],\n });\n}\nexport function aborted(x, startIndex = 0) {\n for (let i = startIndex; i < x.issues.length; i++) {\n if (x.issues[i]?.continue !== true)\n return true;\n }\n return false;\n}\nexport function prefixIssues(path, issues) {\n return issues.map((iss) => {\n var _a;\n (_a = iss).path ?? (_a.path = []);\n iss.path.unshift(path);\n return iss;\n });\n}\nexport function unwrapMessage(message) {\n return typeof message === \"string\" ? message : message?.message;\n}\nexport function finalizeIssue(iss, ctx, config) {\n const full = { ...iss, path: iss.path ?? [] };\n // for backwards compatibility\n if (!iss.message) {\n const message = unwrapMessage(iss.inst?._zod.def?.error?.(iss)) ??\n unwrapMessage(ctx?.error?.(iss)) ??\n unwrapMessage(config.customError?.(iss)) ??\n unwrapMessage(config.localeError?.(iss)) ??\n \"Invalid input\";\n full.message = message;\n }\n // delete (full as any).def;\n delete full.inst;\n delete full.continue;\n if (!ctx?.reportInput) {\n delete full.input;\n }\n return full;\n}\nexport function getSizableOrigin(input) {\n if (input instanceof Set)\n return \"set\";\n if (input instanceof Map)\n return \"map\";\n if (input instanceof File)\n return \"file\";\n return \"unknown\";\n}\nexport function getLengthableOrigin(input) {\n if (Array.isArray(input))\n return \"array\";\n if (typeof input === \"string\")\n return \"string\";\n return \"unknown\";\n}\nexport function issue(...args) {\n const [iss, input, inst] = args;\n if (typeof iss === \"string\") {\n return {\n message: iss,\n code: \"custom\",\n input,\n inst,\n };\n }\n return { ...iss };\n}\nexport function cleanEnum(obj) {\n return Object.entries(obj)\n .filter(([k, _]) => {\n // return true if NaN, meaning it's not a number, thus a string key\n return Number.isNaN(Number.parseInt(k, 10));\n })\n .map((el) => el[1]);\n}\n// instanceof\nexport class Class {\n constructor(..._args) { }\n}\n","import { $constructor } from \"./core.js\";\nimport * as util from \"./util.js\";\nconst initializer = (inst, def) => {\n inst.name = \"$ZodError\";\n Object.defineProperty(inst, \"_zod\", {\n value: inst._zod,\n enumerable: false,\n });\n Object.defineProperty(inst, \"issues\", {\n value: def,\n enumerable: false,\n });\n Object.defineProperty(inst, \"message\", {\n get() {\n return JSON.stringify(def, util.jsonStringifyReplacer, 2);\n },\n enumerable: true,\n // configurable: false,\n });\n Object.defineProperty(inst, \"toString\", {\n value: () => inst.message,\n enumerable: false,\n });\n};\nexport const $ZodError = $constructor(\"$ZodError\", initializer);\nexport const $ZodRealError = $constructor(\"$ZodError\", initializer, { Parent: Error });\nexport function flattenError(error, mapper = (issue) => issue.message) {\n const fieldErrors = {};\n const formErrors = [];\n for (const sub of error.issues) {\n if (sub.path.length > 0) {\n fieldErrors[sub.path[0]] = fieldErrors[sub.path[0]] || [];\n fieldErrors[sub.path[0]].push(mapper(sub));\n }\n else {\n formErrors.push(mapper(sub));\n }\n }\n return { formErrors, fieldErrors };\n}\nexport function formatError(error, _mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const fieldErrors = { _errors: [] };\n const processError = (error) => {\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n issue.errors.map((issues) => processError({ issues }));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues });\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues });\n }\n else if (issue.path.length === 0) {\n fieldErrors._errors.push(mapper(issue));\n }\n else {\n let curr = fieldErrors;\n let i = 0;\n while (i < issue.path.length) {\n const el = issue.path[i];\n const terminal = i === issue.path.length - 1;\n if (!terminal) {\n curr[el] = curr[el] || { _errors: [] };\n }\n else {\n curr[el] = curr[el] || { _errors: [] };\n curr[el]._errors.push(mapper(issue));\n }\n curr = curr[el];\n i++;\n }\n }\n }\n };\n processError(error);\n return fieldErrors;\n}\nexport function treeifyError(error, _mapper) {\n const mapper = _mapper ||\n function (issue) {\n return issue.message;\n };\n const result = { errors: [] };\n const processError = (error, path = []) => {\n var _a, _b;\n for (const issue of error.issues) {\n if (issue.code === \"invalid_union\" && issue.errors.length) {\n // regular union error\n issue.errors.map((issues) => processError({ issues }, issue.path));\n }\n else if (issue.code === \"invalid_key\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else if (issue.code === \"invalid_element\") {\n processError({ issues: issue.issues }, issue.path);\n }\n else {\n const fullpath = [...path, ...issue.path];\n if (fullpath.length === 0) {\n result.errors.push(mapper(issue));\n continue;\n }\n let curr = result;\n let i = 0;\n while (i < fullpath.length) {\n const el = fullpath[i];\n const terminal = i === fullpath.length - 1;\n if (typeof el === \"string\") {\n curr.properties ?? (curr.properties = {});\n (_a = curr.properties)[el] ?? (_a[el] = { errors: [] });\n curr = curr.properties[el];\n }\n else {\n curr.items ?? (curr.items = []);\n (_b = curr.items)[el] ?? (_b[el] = { errors: [] });\n curr = curr.items[el];\n }\n if (terminal) {\n curr.errors.push(mapper(issue));\n }\n i++;\n }\n }\n }\n };\n processError(error);\n return result;\n}\n/** Format a ZodError as a human-readable string in the following form.\n *\n * From\n *\n * ```ts\n * ZodError {\n * issues: [\n * {\n * expected: 'string',\n * code: 'invalid_type',\n * path: [ 'username' ],\n * message: 'Invalid input: expected string'\n * },\n * {\n * expected: 'number',\n * code: 'invalid_type',\n * path: [ 'favoriteNumbers', 1 ],\n * message: 'Invalid input: expected number'\n * }\n * ];\n * }\n * ```\n *\n * to\n *\n * ```\n * username\n * ✖ Expected number, received string at \"username\n * favoriteNumbers[0]\n * ✖ Invalid input: expected number\n * ```\n */\nexport function toDotPath(path) {\n const segs = [];\n for (const seg of path) {\n if (typeof seg === \"number\")\n segs.push(`[${seg}]`);\n else if (typeof seg === \"symbol\")\n segs.push(`[${JSON.stringify(String(seg))}]`);\n else if (/[^\\w$]/.test(seg))\n segs.push(`[${JSON.stringify(seg)}]`);\n else {\n if (segs.length)\n segs.push(\".\");\n segs.push(seg);\n }\n }\n return segs.join(\"\");\n}\nexport function prettifyError(error) {\n const lines = [];\n // sort by path length\n const issues = [...error.issues].sort((a, b) => a.path.length - b.path.length);\n // Process each issue\n for (const issue of issues) {\n lines.push(`✖ ${issue.message}`);\n if (issue.path?.length)\n lines.push(` → at ${toDotPath(issue.path)}`);\n }\n // Convert Map to formatted string\n return lines.join(\"\\n\");\n}\n","import * as core from \"./core.js\";\nimport * as errors from \"./errors.js\";\nimport * as util from \"./util.js\";\nexport const _parse = (_Err) => (schema, value, _ctx, _params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: false }) : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n if (result.issues.length) {\n const e = new (_params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, _params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parse = /* @__PURE__*/ _parse(errors.$ZodRealError);\nexport const _parseAsync = (_Err) => async (schema, value, _ctx, params) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n if (result.issues.length) {\n const e = new (params?.Err ?? _Err)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config())));\n util.captureStackTrace(e, params?.callee);\n throw e;\n }\n return result.value;\n};\nexport const parseAsync = /* @__PURE__*/ _parseAsync(errors.$ZodRealError);\nexport const _safeParse = (_Err) => (schema, value, _ctx) => {\n const ctx = _ctx ? { ..._ctx, async: false } : { async: false };\n const result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise) {\n throw new core.$ZodAsyncError();\n }\n return result.issues.length\n ? {\n success: false,\n error: new (_Err ?? errors.$ZodError)(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParse = /* @__PURE__*/ _safeParse(errors.$ZodRealError);\nexport const _safeParseAsync = (_Err) => async (schema, value, _ctx) => {\n const ctx = _ctx ? Object.assign(_ctx, { async: true }) : { async: true };\n let result = schema._zod.run({ value, issues: [] }, ctx);\n if (result instanceof Promise)\n result = await result;\n return result.issues.length\n ? {\n success: false,\n error: new _Err(result.issues.map((iss) => util.finalizeIssue(iss, ctx, core.config()))),\n }\n : { success: true, data: result.value };\n};\nexport const safeParseAsync = /* @__PURE__*/ _safeParseAsync(errors.$ZodRealError);\n","import{validateFieldsNatively as r,toNestErrors as e}from\"@hookform/resolvers\";import{appendErrors as o}from\"react-hook-form\";import*as n from\"zod/v4/core\";function t(r,e){try{var o=r()}catch(r){return e(r)}return o&&o.then?o.then(void 0,e):o}function s(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"unionErrors\"in t){var u=t.unionErrors[0].errors[0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"unionErrors\"in t&&t.unionErrors.forEach(function(e){return e.errors.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n}function i(r,e){for(var n={};r.length;){var t=r[0],s=t.code,i=t.message,a=t.path.join(\".\");if(!n[a])if(\"invalid_union\"===t.code&&t.errors.length>0){var u=t.errors[0][0];n[a]={message:u.message,type:u.code}}else n[a]={message:i,type:s};if(\"invalid_union\"===t.code&&t.errors.forEach(function(e){return e.forEach(function(e){return r.push(e)})}),e){var c=n[a].types,f=c&&c[t.code];n[a]=o(a,e,n,s,f?[].concat(f,t.message):t.message)}r.shift()}return n}function a(o,a,u){if(void 0===u&&(u={}),function(r){return\"_def\"in r&&\"object\"==typeof r._def&&\"typeName\"in r._def}(o))return function(n,i,c){try{return Promise.resolve(t(function(){return Promise.resolve(o[\"sync\"===u.mode?\"parse\":\"parseAsync\"](n,a)).then(function(e){return c.shouldUseNativeValidation&&r({},c),{errors:{},values:u.raw?Object.assign({},n):e}})},function(r){if(function(r){return Array.isArray(null==r?void 0:r.issues)}(r))return{values:{},errors:e(s(r.errors,!c.shouldUseNativeValidation&&\"all\"===c.criteriaMode),c)};throw r}))}catch(r){return Promise.reject(r)}};if(function(r){return\"_zod\"in r&&\"object\"==typeof r._zod}(o))return function(s,c,f){try{return Promise.resolve(t(function(){return Promise.resolve((\"sync\"===u.mode?n.parse:n.parseAsync)(o,s,a)).then(function(e){return f.shouldUseNativeValidation&&r({},f),{errors:{},values:u.raw?Object.assign({},s):e}})},function(r){if(function(r){return r instanceof n.$ZodError}(r))return{values:{},errors:e(i(r.issues,!f.shouldUseNativeValidation&&\"all\"===f.criteriaMode),f)};throw r}))}catch(r){return Promise.reject(r)}};throw new Error(\"Invalid input: not a Zod schema\")}export{a as zodResolver};\n//# sourceMappingURL=zod.module.js.map\n","import React from \"react\";\r\nimport {\r\n FieldValues,\r\n FormProvider,\r\n useForm,\r\n UseFormReturn,\r\n type SubmitHandler,\r\n type FieldErrors,\r\n} from \"react-hook-form\";\r\nimport { cn } from \"../utils\";\r\nimport { z, ZodTypeAny } from \"zod\";\r\nimport { zodResolver } from \"@hookform/resolvers/zod\";\r\n\r\n// Custom type helper\r\n//OLD V\r\n// type SubmitHandler<T extends FieldValues> = (\r\n// data: T,\r\n// form: UseFormReturn<T>\r\n// // dirtyFields: Partial<Readonly<DeepMap<DeepPartial<z.TypeOf<T>>, boolean>>>\r\n// ) => Promise<void> | void;\r\n\r\ntype FormWrapperProps<T extends FieldValues> = {\r\n methods: UseFormReturn<T>;\r\n onSubmit: SubmitHandler<T>;\r\n onError?: (errors: FieldErrors<T>) => void;\r\n children: React.ReactNode;\r\n logErrors?: boolean;\r\n className?: string;\r\n};\r\n\r\n// Helper type to make all properties optional recursively\r\n// type DeepPartial<T> = T extends object\r\n// ? { [P in keyof T]?: DeepPartial<T[P]> }\r\n// : T;\r\n\r\nfunction Form<T extends FieldValues>({\r\n methods,\r\n onSubmit,\r\n onError,\r\n children,\r\n logErrors,\r\n className,\r\n}: FormWrapperProps<T>) {\r\n return (\r\n <FormProvider {...methods}>\r\n <form\r\n className={cn(\r\n \"mt-4 lg:mt-8 grid grid-cols-1 lg:grid-cols-2 gap-4 lg:gap-8 relative\",\r\n className\r\n )}\r\n onSubmit={methods.handleSubmit(\r\n (data, event) => onSubmit(data, event),\r\n (errors) => {\r\n if (logErrors) {\r\n console.log(errors);\r\n }\r\n onError?.(errors);\r\n }\r\n )}\r\n >\r\n {children}\r\n </form>\r\n </FormProvider>\r\n );\r\n}\r\n\r\n/**\r\n * Hook to create react-hook-form methods based on a zod schema and default values.\r\n *\r\n * @param schema Zod schema to validate form data\r\n * @param defaultValues Optional default form values (partial)\r\n * @returns UseFormReturn with typed form methods\r\n */\r\nfunction useMethods<TSchema extends ZodTypeAny>(\r\n schema: TSchema,\r\n defaultValues?: Partial<z.infer<TSchema>>\r\n): UseFormReturn<z.infer<TSchema>> {\r\n return useForm<z.infer<TSchema>>({\r\n resolver: zodResolver(schema),\r\n defaultValues: defaultValues as any,\r\n });\r\n}\r\nexport { Form, useMethods };\r\n","/**\r\n * Props for the base Icon component that provides a consistent SVG wrapper.\r\n */\r\ninterface IconProps extends React.SVGProps<SVGSVGElement> {\r\n /** Width and height of the icon in pixels (default: 24) */\r\n size?: number | string;\r\n /** Stroke width for outlined icons (default: 2) */\r\n strokeWidth?: number;\r\n /** SVG viewBox attribute defining the coordinate system (default: \"0 0 24 24\") */\r\n viewBox?: \"0 0 24 24\" | \"0 0 48 48\" | \"0 0 512 512\";\r\n /** CSS class names for styling */\r\n className?: string;\r\n /** SVG elements (paths, circles, etc.) that define the icon shape */\r\n children?: React.ReactNode;\r\n}\r\n\r\n/**\r\n * Base Icon component that provides a consistent SVG wrapper for creating custom icons.\r\n * Handles common SVG properties while allowing full customization through standard SVG props.\r\n *\r\n * @example\r\n * // Creating a reusable icon component\r\n * export const CustomIcon = ({ size, className, ...props }: IndividualIconProps) => {\r\n * return (\r\n * <Icon size={size} className={className} fill=\"currentColor\" {...props}>\r\n * <path d=\"M12 2L2 7v10c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V7l-10-5z\" />\r\n * </Icon>\r\n * );\r\n * };\r\n *\r\n * @example\r\n * // Creating a custom icon\r\n * <Icon size={32} strokeWidth={1.5}>\r\n * <path d=\"M12 2L2 7v10c0 5.55 3.84 10.74 9 12 5.16-1.26 9-6.45 9-12V7l-10-5z\" />\r\n * </Icon>\r\n *\r\n * @example\r\n * // Using with custom viewBox for different icon sets\r\n * <Icon viewBox=\"0 0 512 512\" size={48}>\r\n * <circle cx=\"256\" cy=\"256\" r=\"200\" />\r\n * </Icon>\r\n */\r\nexport const Icon: React.FC<IconProps> = ({\r\n children,\r\n size = 24,\r\n strokeWidth = 2,\r\n viewBox = \"0 0 24 24\",\r\n className,\r\n ...props\r\n}) => {\r\n return (\r\n <svg\r\n xmlns=\"http://www.w3.org/2000/svg\"\r\n width={size}\r\n height={size}\r\n viewBox={viewBox}\r\n className={className}\r\n {...props}\r\n >\r\n {children}\r\n </svg>\r\n );\r\n};\r\n\r\n// Define props for individual icons\r\nexport type IndividualIconProps = Omit<IconProps, \"children\">;\r\n\r\n// just here as example\r\n//ri:home-fill\r\n// export const HomeFill = ({\r\n// size,\r\n// className,\r\n// ...props\r\n// }: IndividualIconProps) => {\r\n// return (\r\n// <Icon size={size} className={className} fill=\"currentColor\" {...props}>\r\n// <path d=\"M21 20a1 1 0 0 1-1 1H4a1 1 0 0 1-1-1V9.49a1 1 0 0 1 .386-.79l8-6.223a1 1 0 0 1 1.228 0l8 6.223a1 1 0 0 1 .386.79z\" />\r\n// </Icon>\r\n// );\r\n// };\r\n","import { CheckIcon, DollarSign, Eye, EyeOffIcon } from \"lucide-react\";\r\nimport {\r\n InputHTMLAttributes,\r\n forwardRef,\r\n useCallback,\r\n useEffect,\r\n useRef,\r\n useState,\r\n} from \"react\";\r\nimport { cn } from \"../utils\";\r\nimport { nullRead, nullSet, setFocusEnd } from \"../utils\";\r\nimport { Controller, useFormContext } from \"react-hook-form\";\r\n\r\n// Types\r\nexport interface InputProps extends InputHTMLAttributes<HTMLInputElement> {\r\n label?: string;\r\n description?: string;\r\n labelPosition?: \"default\" | \"floating\";\r\n color?: \"solid\" | \"outline\";\r\n focusColor?: \"solid\" | \"brand\";\r\n valid?: boolean;\r\n error?: boolean;\r\n errorMessage?: string;\r\n isPrice?: boolean;\r\n prefix?: string;\r\n wrapperClassName?: string;\r\n containerClassName?: string;\r\n}\r\n\r\nconst inputColors = {\r\n solid:\r\n \"bg-base-3 border border-base-4 drop-shadow-sm dark-theme:drop-shadow-none\",\r\n outline: \"border border-base-6\",\r\n};\r\n\r\nconst focusColors = {\r\n brand: \"ring-1 ring-brand\",\r\n solid: \"ring-1 ring-base-6\",\r\n};\r\n\r\n// similar to button size mdsm (text-sm px-3 py-2.5)\r\n// (this is similar to h-10 if need to make some shape)\r\nexport const Input = forwardRef<HTMLInputElement, InputProps>(\r\n (\r\n {\r\n label,\r\n description,\r\n labelPosition = \"default\",\r\n color = \"solid\",\r\n focusColor = \"brand\",\r\n placeholder,\r\n valid,\r\n error,\r\n errorMessage,\r\n isPrice,\r\n prefix,\r\n wrapperClassName,\r\n containerClassName,\r\n className,\r\n type = \"text\",\r\n value,\r\n ...props\r\n },\r\n forwardedRef\r\n ) => {\r\n const innerRef = useRef<HTMLInputElement>(null);\r\n const mounted = useRef(false);\r\n const [showPassword, setShowPassword] = useState(false);\r\n const [isFocused, setIsFocused] = useState(false);\r\n const isPassword = type === \"password\";\r\n const inputType =\r\n isPassword && showPassword ? \"text\" : isPrice ? \"number\" : type;\r\n const hasValue = value !== \"\" && value !== null && value !== undefined;\r\n\r\n // Use the forwarded ref if available, otherwise use innerRef\r\n // const ref = forwardedRef || innerRef;\r\n // // const ref = forwardedRef;\r\n\r\n useEffect(() => {\r\n if (!mounted.current) {\r\n mounted.current = true;\r\n return;\r\n }\r\n\r\n if (innerRef.current) {\r\n setFocusEnd(innerRef.current);\r\n }\r\n }, [showPassword, innerRef]);\r\n\r\n return (\r\n <div className={cn(\"relative\", wrapperClassName)}>\r\n {label && labelPosition === \"default\" && (\r\n <label\r\n className={cn(\"font-medium ml-0.5 text-xs\", error && \"text-red-9\")}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n <div\r\n className={cn(\r\n \"rounded-6 transition cursor-text relative\",\r\n inputColors[color],\r\n {\r\n \"pt-[22px] pb-1.5\": labelPosition === \"floating\",\r\n [focusColors[focusColor]]: !error && isFocused,\r\n \"bg-red-4 text-red-9\": !!error,\r\n \"ring-1 ring-red-9\": !!error && isFocused,\r\n },\r\n containerClassName\r\n )}\r\n >\r\n {label && labelPosition === \"floating\" && (\r\n <label\r\n className={cn(\r\n \"absolute transition-all duration-200 pointer-events-none\",\r\n \"text-sm top-[18px] font-semibold left-3\",\r\n {\r\n \"text-xs top-2.5\": isFocused || hasValue || placeholder,\r\n \"text-red-9\": !!error,\r\n }\r\n )}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n {isPrice && (\r\n <DollarSign\r\n size={16}\r\n className={cn(\r\n \"absolute top-1/2 -translate-y-1/2 left-3\",\r\n error ? \"text-red-9\" : \"text-base-11\"\r\n )}\r\n />\r\n )}\r\n {prefix && (\r\n <p className=\"text-sm text-base-11 absolute top-1/2 -translate-y-1/2 left-3\">\r\n {prefix}\r\n </p>\r\n )}\r\n <input\r\n ref={(e) => {\r\n if (forwardedRef) {\r\n if (typeof forwardedRef === \"function\") {\r\n forwardedRef(e);\r\n } else {\r\n forwardedRef.current = e;\r\n }\r\n }\r\n //@ts-ignore\r\n innerRef.current = e;\r\n }}\r\n type={inputType}\r\n className={cn(\r\n \"w-full bg-transparent focus-visible:outline-none\",\r\n \"placeholder:text-sm text-sm placeholder:text-base-11\",\r\n isPrice || prefix ? \"pl-9\" : \"pl-3\",\r\n {\r\n \"py-2.5\": labelPosition === \"default\",\r\n \"mt-1.5\": labelPosition === \"floating\",\r\n \"pr-10\": valid,\r\n \"text-red-9 placeholder:text-red-9\": !!error,\r\n },\r\n className\r\n )}\r\n value={value}\r\n placeholder={placeholder}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n {...props}\r\n />\r\n </div>\r\n\r\n {valid ? (\r\n <CheckIcon\r\n size={20}\r\n className={`absolute top-1/2 -translate-y-1/2 text-green-500 ${\r\n isPassword ? \"right-10\" : \"right-3\"\r\n }`}\r\n />\r\n ) : null}\r\n\r\n {isPassword && (\r\n <button\r\n type=\"button\"\r\n className={cn(\r\n labelPosition === \"floating\"\r\n ? \"absolute right-3 top-1/2 -translate-y-1/2\"\r\n : \"absolute right-3 top-10\"\r\n )}\r\n onClick={() => {\r\n setShowPassword(!showPassword);\r\n }}\r\n >\r\n {showPassword ? (\r\n <EyeOffIcon\r\n size={20}\r\n className={cn(error ? \"text-red-9\" : \"text-base-11\")}\r\n />\r\n ) : (\r\n <Eye\r\n size={20}\r\n className={cn(error ? \"text-red-9\" : \"text-base-11\")}\r\n />\r\n )}\r\n </button>\r\n )}\r\n {errorMessage ? (\r\n <span role=\"alert\" className=\"text-red-9 text-sm mt-1 ml-0.5\">\r\n {errorMessage}\r\n </span>\r\n ) : description ? (\r\n <p className=\"text-xs text-base-11 mt-1 ml-0.5\">{description}</p>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\n// Add display name for better debugging\r\nInput.displayName = \"Input\";\r\n\r\nexport const FormInput = ({\r\n name,\r\n customRead,\r\n customSet,\r\n withNullSet = true,\r\n ...others\r\n}: {\r\n name: string;\r\n customRead?: (value: string | null) => string;\r\n customSet?: (value: string) => string | number | null | undefined;\r\n withNullSet?: boolean;\r\n} & InputProps) => {\r\n const { control } = useFormContext();\r\n\r\n const readValue = useCallback(\r\n (value: string | null) => {\r\n if (customRead) {\r\n return customRead(value);\r\n } else if (value === null) {\r\n return nullRead(value);\r\n }\r\n return value;\r\n },\r\n [customRead]\r\n );\r\n\r\n const setValue = useCallback(\r\n (value: string) => {\r\n if (customSet) {\r\n if (withNullSet && value === null) {\r\n return nullSet(value);\r\n } else {\r\n return customSet(value);\r\n }\r\n } else if (value === null) {\r\n return nullSet(value);\r\n }\r\n return value;\r\n },\r\n [customSet]\r\n );\r\n\r\n if (!control) {\r\n console.error(`Form control is missing for field: ${name}`);\r\n return <p>Form control missing for field: {name}</p>;\r\n }\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => {\r\n return (\r\n <Input\r\n value={readValue(field.value)}\r\n onChange={(e) => field.onChange(setValue(e.target.value))}\r\n error={!!fieldState.error}\r\n errorMessage={fieldState.error?.message}\r\n // Pass the ref from React Hook Form\r\n ref={field.ref}\r\n {...others}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import {\n createContext,\n memo,\n useContext,\n useEffect,\n useRef,\n useState,\n} from \"react\";\nimport { createPortal } from \"react-dom\";\n\n//============================\n// #region AliveScope\n//============================\ntype AliveScopeContextType = {\n getPortalElement: (\n id: string,\n children: React.ReactNode,\n className?: string\n ) => HTMLElement;\n dropPortalElement: (id: string) => void;\n};\n\nconst AliveScopeContext = createContext<AliveScopeContextType | null>(null);\n\nconst AliveScopeProvider = ({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: AliveScopeContextType;\n}) => {\n return (\n <AliveScopeContext.Provider value={value}>\n {children}\n </AliveScopeContext.Provider>\n );\n};\n\nconst useAliveScope = () => {\n const context = useContext(AliveScopeContext);\n\n if (!context)\n throw new Error(\"useAliveScope must be wrapped within AliveScopeProvider\");\n\n return context;\n};\n\ntype AliveScopeProps = {\n children?: React.ReactNode;\n};\n\nconst AliveScope: React.FC<AliveScopeProps> = ({ children }) => {\n const [nodes, setNodes] = useState<{\n [id: string]: { children: React.ReactNode; element: HTMLElement };\n }>({});\n\n const onMountCallbacks = useRef<{ [id: string]: ((id: string) => void)[] }>(\n {}\n );\n const onDropCallbacks = useRef<{ [id: string]: ((id: string) => void)[] }>(\n {}\n );\n\n const getPortalElement = (\n id: string,\n children: React.ReactNode,\n className?: string\n ) => {\n if (!nodes[id]) {\n const element = document.createElement(\"div\");\n if (id) {\n element.id = id;\n }\n if (className) {\n element.className = className;\n }\n setNodes((prevNodes) => ({\n ...prevNodes,\n [id]: { children, element },\n }));\n onMountCallbacks.current[id] = [];\n onDropCallbacks.current[id] = [];\n if (onMountCallbacks.current && onMountCallbacks.current[id]) {\n onMountCallbacks.current[id].forEach((callback) => callback(id));\n }\n return element;\n }\n if (onMountCallbacks.current && onMountCallbacks.current[id]) {\n onMountCallbacks.current[id].forEach((callback) => callback(id));\n }\n return nodes[id].element;\n };\n\n const dropPortalElement = (id: string) => {\n setNodes((prevNodes) => {\n const copy = { ...prevNodes };\n delete copy[id];\n return copy;\n });\n //console.log(\"dropped\", id);\n if (onDropCallbacks.current && onDropCallbacks.current[id]) {\n onDropCallbacks.current[id].forEach((callback) => callback(id));\n }\n };\n\n return (\n <AliveScopeProvider\n value={{\n getPortalElement,\n dropPortalElement,\n }}\n >\n {children}\n {Object.entries(nodes).map(([id, { children, element }]) => (\n <Component\n key={id}\n id={id}\n onMountCallbacks={onMountCallbacks}\n onDropCallbacks={onDropCallbacks}\n children={children}\n element={element}\n />\n ))}\n </AliveScopeProvider>\n );\n};\n//============================\n// #endregion AliveScope\n//============================\n\n//============================\n// #region KeepAlive\n//============================\ntype KeepAliveContextType = {\n keepAliveId: string;\n onKeepAliveMount: (\n callback: (id: string) => void,\n options?: { runOnFirstMount?: boolean }\n ) => void;\n onKeepAliveDrop: (callback: (id: string) => void) => void;\n};\n\nexport const KeepAliveContext = createContext<KeepAliveContextType | null>(\n null\n);\n\nexport const KeepAliveProvider = ({\n children,\n value,\n}: {\n children: React.ReactNode;\n value: KeepAliveContextType;\n}) => {\n return (\n <KeepAliveContext.Provider value={value}>\n {children}\n </KeepAliveContext.Provider>\n );\n};\n\nconst Component = memo<{\n id: string;\n onMountCallbacks: React.MutableRefObject<{\n [id: string]: ((id: string) => void)[];\n }>;\n onDropCallbacks: React.MutableRefObject<{\n [id: string]: ((id: string) => void)[];\n }>;\n children: React.ReactNode;\n element: HTMLElement;\n}>(({ id, onMountCallbacks, onDropCallbacks, children, element }) => {\n const onKeepAliveMount = (\n callback: (id: string) => void,\n options: { runOnFirstMount?: boolean } = { runOnFirstMount: false }\n ) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n const runCallback = () => {\n const el = document.getElementById(id);\n if (el) {\n callback(id);\n } else {\n // If element is not found, use MutationObserver to wait for it\n const observer = new MutationObserver((_mutations, obs) => {\n const el = document.getElementById(id);\n if (el) {\n callback(id);\n obs.disconnect(); // Stop observing once element is found\n }\n });\n\n observer.observe(document.body, {\n childList: true,\n subtree: true,\n });\n\n // Cleanup function to disconnect the observer if component unmounts\n return () => observer.disconnect();\n }\n };\n\n if (options?.runOnFirstMount) {\n runCallback();\n }\n\n onMountCallbacks.current[id].push(runCallback);\n return () => {\n onMountCallbacks.current[id] = onMountCallbacks.current[id].filter(\n (cb) => cb !== runCallback\n );\n };\n }, []);\n };\n\n const onKeepAliveDrop = (callback: (id: string) => void) => {\n // eslint-disable-next-line react-hooks/rules-of-hooks\n useEffect(() => {\n onDropCallbacks.current[id].push(callback);\n return () => {\n onDropCallbacks.current[id] = onDropCallbacks.current[id].filter(\n (cb) => cb !== callback\n );\n };\n }, []);\n };\n\n return (\n <KeepAliveProvider\n value={{ keepAliveId: id, onKeepAliveMount, onKeepAliveDrop }}\n >\n {createPortal(children, element, id)}\n </KeepAliveProvider>\n );\n});\n\nconst useKeepAlive = () => {\n const context = useContext(KeepAliveContext);\n\n if (!context)\n throw new Error(\"useKeepAlive must be used within KeepAliveProvider\");\n\n return context;\n};\n\ntype KeepAliveProps = React.HTMLAttributes<HTMLDivElement> & {\n aliveKey: string;\n children: React.ReactNode;\n enabled?: boolean;\n};\n\nconst KeepAlive: React.FC<KeepAliveProps> = ({\n aliveKey,\n children,\n enabled = true,\n ...others\n}) => {\n const keepAliveRef = useRef<HTMLDivElement | null>(null);\n const { getPortalElement } = useAliveScope();\n\n useEffect(() => {\n const element = getPortalElement(aliveKey, children, others.className);\n\n if (enabled) {\n if (keepAliveRef.current) {\n keepAliveRef.current.replaceWith(element);\n }\n }\n\n return () => {\n //TODO\n //callUnmountCallbacks(aliveKey)\n };\n }, [aliveKey, children, enabled, others]);\n\n return (\n <div {...others} ref={keepAliveRef}>\n {/* Added children back for ssr initial rendering */}\n {children}\n </div>\n );\n};\n//============================\n// #endregion KeepAlive\n//============================\n\nexport { AliveScope, KeepAlive, useKeepAlive };\n","import { cn } from \"../utils\";\r\nimport { MouseEventHandler } from \"react\";\r\n\r\nconst List = ({\r\n lightSolid = true,\r\n className,\r\n children,\r\n ...others\r\n}: {\r\n lightSolid?: boolean;\r\n className?: string;\r\n children: React.ReactNode;\r\n others?: any;\r\n}) => {\r\n return (\r\n <div\r\n className={cn(\r\n \"rounded-7 dark-theme:bg-base-3\",\r\n lightSolid\r\n ? \"border-none bg-base-3\"\r\n : \"border border-base-6 dark-theme:border-base-4\",\r\n className\r\n )}\r\n {...others}\r\n >\r\n {children}\r\n </div>\r\n );\r\n};\r\n\r\nconst ListItem = ({\r\n onClick,\r\n lightSolid = true,\r\n className,\r\n children,\r\n}: {\r\n onClick?: MouseEventHandler<HTMLButtonElement>;\r\n lightSolid?: boolean;\r\n className?: string;\r\n children: React.ReactNode;\r\n}) => {\r\n return (\r\n <button\r\n onClick={onClick}\r\n className={cn(\r\n \"w-full text-start first:rounded-t-7 last:rounded-b-7 border-b dark-theme:border-base-4\",\r\n \"last:border-none px-3 pr-2.5 py-3 dark-theme:bg-base-3 lg:hover:bg-base-4 max-lg:active:bg-base-4\",\r\n \"transition-colors hover:cursor-pointer flex items-center justify-between outline-none lg:focus-visible:ring-2 focus-visible:ring-base-6\",\r\n lightSolid ? \"bg-base-3 border-base-4\" : \"border-base-6\",\r\n className\r\n )}\r\n >\r\n {children}\r\n </button>\r\n );\r\n};\r\n\r\nexport { List, ListItem };\r\n\r\n//usage example\r\n{\r\n /* <p>List Title</p>\r\n<List>\r\n <ListItem>\r\n <p>Something</p>\r\n <p>Else</p>\r\n </ListItem>\r\n</List> */\r\n}\r\n","import { CheckIcon, ChevronDownIcon, XIcon } from \"lucide-react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils\";\r\nimport { Controller, useFormContext } from \"react-hook-form\";\r\nimport { useClickAwayWithRef, usePopover } from \"../hooks\";\r\nimport { AnimatePresence, motion } from \"motion/react\";\r\nimport { Portal } from \"../components\";\r\n\r\ninterface MultiSelectProps<T> {\r\n label: string;\r\n labelPosition?: \"default\" | \"floating\";\r\n options: T[];\r\n selectedValues: T[];\r\n onChange: (values: T[]) => void;\r\n idExtractor: (item: T) => string | number;\r\n labelExtractor: (item: T) => string;\r\n customSetter?: (item: T) => any;\r\n valid?: boolean;\r\n error?: string;\r\n placeholder?: string;\r\n maxSelections?: number;\r\n searchable?: boolean;\r\n disabled?: boolean;\r\n className?: string;\r\n}\r\n\r\nexport const MultiSelect = <T,>({\r\n label,\r\n labelPosition = \"default\",\r\n options,\r\n selectedValues,\r\n onChange,\r\n idExtractor,\r\n labelExtractor,\r\n customSetter,\r\n valid,\r\n error,\r\n placeholder = \"Select options...\",\r\n maxSelections,\r\n searchable = false,\r\n disabled = false,\r\n className,\r\n}: MultiSelectProps<T>) => {\r\n const [searchValue, setSearchValue] = useState(\"\");\r\n const [isFocused, setIsFocused] = useState(false);\r\n const [focusedOptionIndex, setFocusedOptionIndex] = useState(-1);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const optionRefs = useRef<(HTMLDivElement | null)[]>([]);\r\n\r\n const {\r\n triggerRef,\r\n triggerProps,\r\n popoverRef,\r\n getPopoverPosition,\r\n open,\r\n toggle,\r\n close,\r\n } = usePopover<HTMLDivElement, HTMLDivElement>({\r\n align: \"start\",\r\n side: \"top\",\r\n avoidCollisions: false,\r\n onOpen: () => {\r\n setIsFocused(true);\r\n if (searchable && inputRef.current) {\r\n setTimeout(() => inputRef.current?.focus(), 10);\r\n }\r\n },\r\n onClose: () => {\r\n setIsFocused(false);\r\n setSearchValue(\"\");\r\n setFocusedOptionIndex(-1);\r\n },\r\n });\r\n\r\n // Unique IDs for ARIA attributes\r\n const inputId = useRef(\r\n `multiselect-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n const labelId = useRef(\r\n `label-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n const errorId = useRef(\r\n `error-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n const listboxId = useRef(\r\n `listbox-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n\r\n // Handle crossover between stored IDs and display objects\r\n const getDisplayValues = (): T[] => {\r\n if (!customSetter) return selectedValues;\r\n\r\n // selectedValues contains IDs, find matching objects from options\r\n return selectedValues\r\n .map((storedValue) => {\r\n const matchingOption = options.find(\r\n (option) =>\r\n idExtractor(option) === storedValue ||\r\n idExtractor(option) === idExtractor(storedValue as any)\r\n );\r\n return matchingOption;\r\n })\r\n .filter(Boolean) as T[];\r\n };\r\n\r\n const displayValues = getDisplayValues();\r\n const hasValue = displayValues.length > 0;\r\n\r\n // Filter options based on search\r\n const filteredOptions = searchable\r\n ? options.filter((option) =>\r\n labelExtractor(option).toLowerCase().includes(searchValue.toLowerCase())\r\n )\r\n : options;\r\n\r\n // Update option refs when filtered options change\r\n useEffect(() => {\r\n optionRefs.current = optionRefs.current.slice(0, filteredOptions.length);\r\n }, [filteredOptions.length]);\r\n\r\n const isSelected = (option: T) => {\r\n if (!customSetter) {\r\n return selectedValues.some(\r\n (selected) => idExtractor(selected) === idExtractor(option)\r\n );\r\n }\r\n\r\n // When using customSetter, selectedValues contains IDs\r\n return selectedValues.some(\r\n (storedValue) =>\r\n storedValue === idExtractor(option) ||\r\n idExtractor(storedValue as any) === idExtractor(option)\r\n );\r\n };\r\n\r\n const handleToggleOption = (option: T) => {\r\n if (disabled) return;\r\n\r\n if (isSelected(option)) {\r\n // Remove from selection\r\n let newValues;\r\n if (customSetter) {\r\n // Remove by ID when using customSetter\r\n const optionId = idExtractor(option);\r\n newValues = selectedValues.filter(\r\n (storedValue) =>\r\n storedValue !== optionId &&\r\n idExtractor(storedValue as any) !== optionId\r\n );\r\n } else {\r\n // Remove by object comparison\r\n newValues = selectedValues.filter(\r\n (selected) => idExtractor(selected) !== idExtractor(option)\r\n );\r\n }\r\n onChange(newValues);\r\n announceChange(`Removed ${labelExtractor(option)}`);\r\n } else {\r\n // Add to selection\r\n if (maxSelections && displayValues.length >= maxSelections) {\r\n announceChange(`Maximum of ${maxSelections} selections allowed`);\r\n return;\r\n }\r\n\r\n let newValues;\r\n if (customSetter) {\r\n // Add ID when using customSetter\r\n newValues = [...selectedValues, customSetter(option)];\r\n } else {\r\n // Add full object\r\n newValues = [...selectedValues, option];\r\n }\r\n onChange(newValues);\r\n announceChange(`Added ${labelExtractor(option)}`);\r\n }\r\n };\r\n\r\n const handleRemoveValue = (valueToRemove: T) => {\r\n if (disabled) return;\r\n\r\n let newValues;\r\n if (customSetter) {\r\n // Remove by ID when using customSetter\r\n const valueId = idExtractor(valueToRemove);\r\n newValues = selectedValues.filter(\r\n (storedValue) =>\r\n storedValue !== valueId && idExtractor(storedValue as any) !== valueId\r\n );\r\n } else {\r\n // Remove by object comparison\r\n newValues = selectedValues.filter(\r\n (selected) => idExtractor(selected) !== idExtractor(valueToRemove)\r\n );\r\n }\r\n onChange(newValues);\r\n announceChange(`Removed ${labelExtractor(valueToRemove)}`);\r\n };\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent) => {\r\n if (disabled) return;\r\n\r\n switch (e.key) {\r\n case \"Enter\":\r\n e.preventDefault();\r\n if (!open) {\r\n toggle();\r\n } else if (focusedOptionIndex >= 0) {\r\n handleToggleOption(filteredOptions[focusedOptionIndex]);\r\n }\r\n break;\r\n case \"Escape\":\r\n e.preventDefault();\r\n close();\r\n break;\r\n case \"ArrowDown\":\r\n e.preventDefault();\r\n if (!open) {\r\n toggle();\r\n } else {\r\n const nextIndex =\r\n focusedOptionIndex >= filteredOptions.length - 1\r\n ? 0\r\n : focusedOptionIndex + 1;\r\n setFocusedOptionIndex(nextIndex);\r\n optionRefs.current[nextIndex]?.scrollIntoView({ block: \"nearest\" });\r\n }\r\n break;\r\n case \"ArrowUp\":\r\n e.preventDefault();\r\n if (open) {\r\n const prevIndex =\r\n focusedOptionIndex <= 0\r\n ? filteredOptions.length - 1\r\n : focusedOptionIndex - 1;\r\n setFocusedOptionIndex(prevIndex);\r\n optionRefs.current[prevIndex]?.scrollIntoView({ block: \"nearest\" });\r\n }\r\n break;\r\n case \"Backspace\":\r\n if (searchable && searchValue === \"\" && displayValues.length > 0) {\r\n // Remove last selected value\r\n const lastValue = displayValues[displayValues.length - 1];\r\n handleRemoveValue(lastValue);\r\n }\r\n break;\r\n }\r\n };\r\n\r\n const handleSearchChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setSearchValue(e.target.value);\r\n setFocusedOptionIndex(-1);\r\n };\r\n\r\n const handleContainerClick = () => {\r\n if (!disabled) {\r\n if (searchable && inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n toggle();\r\n }\r\n };\r\n\r\n const announceChange = (message: string) => {\r\n if (import.meta.env.NODE_ENV !== \"production\") {\r\n console.log(`Accessibility announcement: ${message}`);\r\n }\r\n };\r\n\r\n useClickAwayWithRef(popoverRef, (event) => {\r\n if (!triggerRef.current || !open || !event.target) return;\r\n if (triggerRef.current.contains(event.target as Node)) return;\r\n close();\r\n });\r\n\r\n const position = getPopoverPosition();\r\n\r\n return (\r\n <div className={cn(\"relative\", className)}>\r\n <div className=\"relative\" ref={containerRef}>\r\n {/* {labelPosition === \"default\" && (\r\n <label\r\n id={labelId}\r\n htmlFor={inputId}\r\n className={cn(\r\n \"text-base top-4 font-semibold left-3 absolute transition-all duration-200\",\r\n {\r\n \"text-sm top-2 left-2\": isFocused || hasValue,\r\n \"text-red-9\": !!error,\r\n }\r\n )}\r\n >\r\n {label}{\" \"}\r\n {maxSelections && `(${selectedValues.length}/${maxSelections})`}\r\n </label>\r\n )} */}\r\n {labelPosition === \"default\" && (\r\n <label\r\n className={cn(\r\n \"top-[18px] font-medium ml-0.5 text-xs\",\r\n error && \"text-red-9\"\r\n )}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n\r\n <div\r\n ref={triggerRef}\r\n {...triggerProps}\r\n className={cn(\r\n \"relative rounded-6 px-2 transition cursor-pointer pr-10 min-h-[48px]\",\r\n \"border border-base-4 light-theme:drop-shadow-sm dark-theme:bg-base-3\",\r\n {\r\n \"py-3\": labelPosition === \"default\",\r\n \"pt-5 pb-2\": labelPosition === \"floating\",\r\n \"ring-1 ring-brand\": open || isFocused,\r\n \"text-red-9\": error,\r\n \"ring-2 ring-red-6\": error && (open || isFocused),\r\n \"opacity-60 cursor-not-allowed\": disabled,\r\n }\r\n )}\r\n onClick={handleContainerClick}\r\n role=\"combobox\"\r\n aria-expanded={open}\r\n aria-haspopup=\"listbox\"\r\n aria-owns={listboxId}\r\n aria-labelledby={labelId}\r\n aria-describedby={error ? errorId : undefined}\r\n onKeyDown={handleKeyDown}\r\n tabIndex={disabled ? -1 : 0}\r\n >\r\n {labelPosition === \"floating\" && (\r\n <label\r\n id={labelId}\r\n htmlFor={inputId}\r\n className={cn(\r\n \"absolute transition-all duration-200 pointer-events-none\",\r\n \"text-base top-4 font-semibold left-3\",\r\n {\r\n \"text-sm top-2 left-2\": isFocused || hasValue,\r\n \"text-red-9\": !!error,\r\n }\r\n )}\r\n >\r\n {label}{\" \"}\r\n {maxSelections && `(${selectedValues.length}/${maxSelections})`}\r\n </label>\r\n )}\r\n\r\n <div\r\n className={cn(\"flex flex-wrap gap-2 items-center\", {\r\n \"mt-2.5\": labelPosition === \"floating\",\r\n })}\r\n >\r\n {displayValues.map((value) => (\r\n <div\r\n key={idExtractor(value)}\r\n className={cn(\r\n \"border border-base-4 dark-theme:border-base-5 dark-theme:bg-base-4 rounded-full px-2 py-1 text-sm flex items-center gap-1\",\r\n {\r\n \"bg-red-4 text-red-9\": error,\r\n }\r\n )}\r\n >\r\n <span className=\"line-clamp-1\">{labelExtractor(value)}</span>\r\n {!disabled && (\r\n <button\r\n type=\"button\"\r\n className=\"hover:bg-brand/20 rounded-full p-0.5 transition-colors\"\r\n onClick={(e) => {\r\n e.stopPropagation();\r\n handleRemoveValue(value);\r\n }}\r\n aria-label={`Remove ${labelExtractor(value)}`}\r\n >\r\n <XIcon size={12} />\r\n </button>\r\n )}\r\n </div>\r\n ))}\r\n\r\n {searchable && (\r\n <input\r\n ref={inputRef}\r\n id={inputId}\r\n type=\"text\"\r\n className=\"flex-grow min-w-[60px] bg-transparent outline-none placeholder:text-sm\"\r\n value={searchValue}\r\n onChange={handleSearchChange}\r\n onKeyDown={handleKeyDown}\r\n placeholder={hasValue ? \"\" : placeholder}\r\n disabled={disabled}\r\n aria-autocomplete=\"list\"\r\n aria-controls={listboxId}\r\n autoComplete=\"off\"\r\n />\r\n )}\r\n\r\n {!searchable && !hasValue && (\r\n <span className=\"text-secondarytext text-sm flex-grow\">\r\n {placeholder}\r\n </span>\r\n )}\r\n </div>\r\n\r\n <div className=\"absolute right-3 top-1/2 -translate-y-1/2 flex items-center gap-2\">\r\n {valid && <CheckIcon size={16} className=\"text-green-600\" />}\r\n <ChevronDownIcon\r\n size={16}\r\n className={cn(\"transition-transform text-base-11\", {\r\n \"rotate-180\": open,\r\n })}\r\n />\r\n </div>\r\n </div>\r\n </div>\r\n\r\n <AnimatePresence>\r\n {open && (\r\n <Portal>\r\n <motion.div\r\n initial={{ opacity: 0, y: -10 }}\r\n animate={{ opacity: 1, y: 0 }}\r\n exit={{ opacity: 0, y: -10 }}\r\n transition={{ duration: 0.15 }}\r\n ref={popoverRef}\r\n style={{\r\n position: \"fixed\",\r\n left: position.x,\r\n top: position.top,\r\n bottom: position.bottom,\r\n width: containerRef.current?.offsetWidth ?? 200,\r\n }}\r\n className={cn(\r\n \"bg-base-1 dark-theme:bg-base-3 border border-base-4\",\r\n \"rounded-6 shadow-lg max-h-[300px] overflow-y-auto z-50\",\r\n \"customscrollbarnohide\"\r\n )}\r\n role=\"listbox\"\r\n id={listboxId}\r\n aria-labelledby={labelId}\r\n >\r\n {filteredOptions.length === 0 ? (\r\n <div className=\"px-3 py-2 text-sm text-secondarytext\">\r\n {searchValue ? \"No results found\" : \"No options available\"}\r\n </div>\r\n ) : (\r\n filteredOptions.map((option, index) => {\r\n const selected = isSelected(option);\r\n const focused = index === focusedOptionIndex;\r\n\r\n return (\r\n <div\r\n key={idExtractor(option)}\r\n ref={(el) => {\r\n optionRefs.current[index] = el;\r\n }}\r\n className={cn(\r\n \"px-3 py-2 text-sm cursor-pointer flex items-center justify-between\", // gap-x-2\r\n \"first:rounded-t-6 last:rounded-b-6\",\r\n // !selected && \"pl-9\",\r\n {\r\n \"bg-base-3 dark-theme:bg-base-4\": focused,\r\n \"bg-brandfadedbg text-brand\": selected,\r\n }\r\n )}\r\n onClick={() => handleToggleOption(option)}\r\n role=\"option\"\r\n aria-selected={selected}\r\n onMouseEnter={() => setFocusedOptionIndex(index)}\r\n >\r\n <span>{labelExtractor(option)}</span>\r\n {selected && <CheckIcon size={16} />}\r\n </div>\r\n );\r\n })\r\n )}\r\n </motion.div>\r\n </Portal>\r\n )}\r\n </AnimatePresence>\r\n\r\n {error && (\r\n <p\r\n id={errorId}\r\n className=\"text-red-9 text-xs mt-1\"\r\n aria-live=\"assertive\"\r\n >\r\n {error}\r\n </p>\r\n )}\r\n\r\n {/* Visually hidden live region for announcements */}\r\n <div className=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {displayValues.length > 0\r\n ? `Selected: ${displayValues.map(labelExtractor).join(\", \")}`\r\n : \"No selections\"}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\ntype FormMultiSelectProps<T> = Omit<\r\n MultiSelectProps<T>,\r\n \"selectedValues\" | \"onChange\"\r\n> & {\r\n name: string;\r\n};\r\n\r\nexport const FormMultiSelect = <T,>({\r\n name,\r\n ...others\r\n}: FormMultiSelectProps<T>) => {\r\n const { control } = useFormContext();\r\n\r\n if (!control) {\r\n console.error(`Form control is missing for field: ${name}`);\r\n return <p>Form control missing for field: {name}</p>;\r\n }\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => {\r\n return (\r\n <MultiSelect\r\n selectedValues={field.value || []}\r\n onChange={(values) => field.onChange(values)}\r\n error={fieldState.error?.message}\r\n {...others}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import { cn } from \"../utils\";\r\n\r\nconst titleSizes = {\r\n \"2\": \"text-2xl\",\r\n \"4\": \"text-4xl\",\r\n \"5\": \"text-5xl\",\r\n \"6\": \"text-6xl\",\r\n};\r\n\r\nconst PageTitle = ({\r\n title,\r\n description,\r\n size = \"6\",\r\n descriptionClassName,\r\n className,\r\n}: {\r\n title: string;\r\n description?: string;\r\n size?: keyof typeof titleSizes;\r\n descriptionClassName?: string;\r\n className?: string;\r\n}) => {\r\n return (\r\n <div className={cn(\"text-center\", className)}>\r\n <p className={`${titleSizes[size]} font-medium`}>{title}</p>\r\n {description ? (\r\n <p className={cn(\"mt-6 text-base-11\", descriptionClassName)}>\r\n {description}\r\n </p>\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { PageTitle };\r\n","import { RefObject, forwardRef, useCallback, useEffect, useRef } from \"react\";\r\nimport { Search, X } from \"lucide-react\";\r\nimport { useLargeScreen, useMergedRef } from \"../hooks\";\r\nimport { cn } from \"../utils\";\r\n\r\ninterface SearchInputProps {\r\n placeholder?: string;\r\n value?: string;\r\n exposedRef?: (ref: RefObject<HTMLInputElement | null>) => void;\r\n autoFocus?: (lg: boolean) => boolean;\r\n onClear?: () => void;\r\n onChange?: (e: React.ChangeEvent<HTMLInputElement>) => void;\r\n className?: string;\r\n onMount?: (\r\n ref: RefObject<HTMLInputElement>,\r\n lg: boolean\r\n ) => Promise<void> | void;\r\n error?: string | null;\r\n}\r\n\r\nconst SearchInput = forwardRef<HTMLInputElement, SearchInputProps>(\r\n (\r\n {\r\n placeholder = \"Buscar\",\r\n value,\r\n exposedRef,\r\n autoFocus,\r\n onClear,\r\n onChange,\r\n className,\r\n onMount,\r\n error,\r\n },\r\n ref\r\n ) => {\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const lg = useLargeScreen();\r\n const mergedRef = useMergedRef(inputRef, ref);\r\n const mountRef = useCallback(() => exposedRef && exposedRef(inputRef), []);\r\n\r\n useEffect(() => {\r\n const callOnMount = async () => {\r\n if (onMount) {\r\n await onMount(inputRef as RefObject<HTMLInputElement>, lg);\r\n }\r\n };\r\n mountRef();\r\n callOnMount();\r\n }, []);\r\n\r\n return (\r\n <div\r\n // ref={ref}\r\n className={cn(\r\n \"rounded-6 relative flex items-center bg-base-3 border-base-5\",\r\n {\r\n \"dark-theme:bg-red-4 light-theme:border-red-9\": error,\r\n \"dark-theme:bg-base-3\": !error,\r\n },\r\n className\r\n )}\r\n >\r\n <input\r\n ref={mergedRef}\r\n placeholder={placeholder}\r\n value={value}\r\n onChange={onChange}\r\n autoComplete=\"off\"\r\n autoCorrect=\"off\"\r\n type=\"search\"\r\n autoFocus={autoFocus ? autoFocus(lg) : undefined}\r\n className={cn(\r\n \"w-full py-1.5 pl-10 pr-3 bg-transparent outline-none text-base-12 placeholder:text-base-11 [&::-webkit-search-cancel-button]:appearance-none\",\r\n error && \"text-red-9 placeholder:text-red-9\"\r\n )}\r\n />\r\n <Search\r\n size={20}\r\n className={cn(\"absolute left-3 text-base-11 pointer-events-none\", {\r\n \"text-red-9\": error,\r\n })}\r\n />\r\n {onClear && value && value.length > 0 ? (\r\n <button\r\n onClick={() => {\r\n onClear();\r\n inputRef.current?.focus();\r\n }}\r\n className={cn(\r\n \"absolute right-2.5 rounded-full\",\r\n error ? \"text-red-9\" : \"text-base-11\"\r\n )}\r\n >\r\n <X size={20} />\r\n </button>\r\n ) : null}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\nexport { SearchInput };\r\n","import { cn } from \"../utils\";\r\nimport { useMemo, useState } from \"react\";\r\n\r\n//todo\r\n//add animated capabilities ?\r\n//like writting the missing text or something\r\n\r\nconst SeeMoreText = ({\r\n text,\r\n length = 120,\r\n size = \"sm\",\r\n className,\r\n buttonClassName,\r\n}: {\r\n text: string;\r\n length?: number;\r\n size?: \"sm\" | \"md\";\r\n className?: string;\r\n buttonClassName?: string;\r\n}) => {\r\n const [seeMore, setSeeMore] = useState(false);\r\n\r\n const canSeeMore = useMemo(() => text.length > length, [text]);\r\n\r\n const displayText = useMemo(() => {\r\n if (!canSeeMore) return text;\r\n return seeMore ? text : text.slice(0, length).trim() + \"...\";\r\n }, [text, seeMore, canSeeMore]);\r\n\r\n return (\r\n <div>\r\n <p className={cn(\"text-base-12\", size === \"sm\" && \"text-sm\", className)}>\r\n {displayText}\r\n </p>\r\n {canSeeMore ? (\r\n <button\r\n onClick={() => setSeeMore((prev) => !prev)}\r\n className={cn(\"text-xs text-base-11\", buttonClassName)}\r\n >\r\n {seeMore ? \"Ver menos\" : \"Ver más\"}\r\n </button>\r\n ) : null}\r\n </div>\r\n );\r\n};\r\n\r\nexport { SeeMoreText };\r\n","import { animate } from \"motion/react\";\r\n\r\n/**\r\n * Gets the scroll progress of an element\r\n */\r\nfunction getElementScrollProgress(el: HTMLElement) {\r\n if (!el) return 0;\r\n if (el.scrollTop === 0) return 0;\r\n return el.scrollTop / (el.scrollHeight - el.clientHeight);\r\n}\r\n\r\nconst scrollByAmount = <T extends HTMLElement = HTMLDivElement>({\r\n el,\r\n direction,\r\n amount = 200,\r\n multiplier = 0.4,\r\n speed = \"normal\",\r\n}: {\r\n el: T;\r\n direction: \"left\" | \"right\" | \"up\" | \"down\";\r\n amount?: number | \"max\";\r\n multiplier?: number;\r\n speed?: \"fast\" | \"normal\" | \"slow\";\r\n}) => {\r\n if (!el) return;\r\n\r\n const isVertical = direction === \"up\" || direction === \"down\";\r\n const startScroll = isVertical ? el.scrollTop : el.scrollLeft;\r\n const maxScroll = isVertical\r\n ? el.scrollHeight - el.clientHeight\r\n : el.scrollWidth - el.clientWidth;\r\n\r\n let scrollAmount: number;\r\n if (amount === \"max\") {\r\n scrollAmount = maxScroll;\r\n } else {\r\n scrollAmount = amount ?? (isVertical ? el.clientHeight : el.clientWidth) * multiplier;\r\n }\r\n\r\n let targetScroll: number;\r\n\r\n if (direction === \"right\" || direction === \"down\") {\r\n targetScroll = Math.min(startScroll + scrollAmount, maxScroll);\r\n } else {\r\n targetScroll = Math.max(startScroll - scrollAmount, 0);\r\n }\r\n\r\n // Don't animate if already at target\r\n if (targetScroll === startScroll) return;\r\n\r\n const speedMap = {\r\n fast: 0.15,\r\n normal: 0.4,\r\n slow: 0.8,\r\n };\r\n\r\n animate(0, 1, {\r\n duration: speedMap[speed],\r\n ease: \"easeOut\",\r\n onUpdate: (progress) => {\r\n if (!el) return;\r\n const scrollTo = startScroll + (targetScroll - startScroll) * progress;\r\n if (isVertical) {\r\n el.scrollTop = scrollTo;\r\n } else {\r\n el.scrollLeft = scrollTo;\r\n }\r\n },\r\n });\r\n};\r\n\r\nexport { getElementScrollProgress, scrollByAmount };\r\n","import { AnimationOptions, Easing, Variants } from \"motion/react\";\n\nconst TRANSITION_EASES: Record<string, Easing> = {\n default: [0.32, 0.72, 0, 1],\n};\n\nconst TRANSITION_DURATIONS = {\n default: 0.3,\n page: 0.54,\n};\n\nconst TRANSITION_DEFAULT: AnimationOptions = {\n ease: [0.32, 0.72, 0, 1],\n duration: 0.3,\n};\n\nconst TRANSITION_PAGE: AnimationOptions = {\n ease: [0.32, 0.72, 0, 1],\n duration: 0.54,\n};\n\n// ✅ Static variants (no window access)\nconst FADE_IN: Variants = {\n initial: { opacity: 0 },\n animate: {\n opacity: 1,\n transition: {\n ease: TRANSITION_EASES.default,\n duration: 0.3,\n },\n },\n exit: {\n opacity: 0,\n transition: {\n ease: [0.32, 0.72, 0, 1],\n duration: 0.3,\n },\n },\n};\n\nconst FADE_UP: Variants = {\n initial: { opacity: 0, y: -20 },\n animate: {\n opacity: 1,\n y: 0,\n transition: {\n ease: TRANSITION_EASES.default,\n duration: 0.3,\n },\n },\n exit: {\n opacity: 0,\n y: -20,\n transition: {\n ease: TRANSITION_EASES.default,\n duration: 0.3,\n },\n },\n};\n\nexport {\n TRANSITION_EASES,\n TRANSITION_DURATIONS,\n TRANSITION_DEFAULT,\n TRANSITION_PAGE,\n FADE_UP,\n FADE_IN,\n};\n","import { ChevronLeft, ChevronRight } from \"lucide-react\";\r\nimport { cn } from \"../utils\";\r\nimport { useState } from \"react\";\r\nimport { useOverflow } from \"../utils\";\r\nimport { AnimatePresence, motion } from \"motion/react\";\r\nimport { FADE_IN, scrollByAmount } from \"../animations\";\r\n\r\nconst segmentedControlStyles = {\r\n rounded: {\r\n 3: \"rounded-3\",\r\n 6: \"rounded-6\",\r\n full: \"rounded-full\",\r\n },\r\n colors: {\r\n solid: \"bg-base-3\",\r\n brand: \"bg-brand text-brand-text\",\r\n contrast: \"bg-base-12 text-base-1\",\r\n },\r\n unselectedColors: {\r\n none: \"\",\r\n solid: \"bg-bg-uiel\",\r\n },\r\n border: {\r\n solid: \"border-base-6 dark-theme:border-base-5\",\r\n subtle: \"border-base-5 dark-theme:border-base-4\",\r\n brand: \"border-brand-border\",\r\n },\r\n widths: {\r\n fit: {\r\n container: \"max-w-fit\",\r\n item: \"w-fit\",\r\n },\r\n full: {\r\n container: \"w-full\",\r\n item: \"grow\",\r\n },\r\n },\r\n};\r\n\r\nconst SegmentedControl = <T,>({\r\n options,\r\n selected,\r\n onChange,\r\n keyExtractor,\r\n labelExtractor,\r\n itemColor,\r\n itemClassName,\r\n color = \"contrast\",\r\n unselectedColor = \"none\",\r\n width = \"fit\",\r\n border = \"solid\",\r\n rounded = 6,\r\n trackScroll = true,\r\n // from,\r\n className,\r\n}: {\r\n options: T[];\r\n selected: T;\r\n onChange: (option: T) => void;\r\n keyExtractor: (option: T) => string | number;\r\n labelExtractor: (option: T) => string;\r\n /**\r\n *\r\n * @param selected\r\n * @description let you override default items colors\r\n * using tailwind classnames based on it's selected status\r\n * @returns classnames string\r\n */\r\n itemColor?: (selected: boolean) => string;\r\n itemClassName?: string;\r\n color?: keyof typeof segmentedControlStyles.colors;\r\n unselectedColor?: keyof typeof segmentedControlStyles.unselectedColors;\r\n width?: keyof typeof segmentedControlStyles.widths;\r\n border?: keyof typeof segmentedControlStyles.border;\r\n rounded?: keyof typeof segmentedControlStyles.rounded;\r\n trackScroll?: boolean;\r\n // from?: string; //only for debug purposes\r\n className?: string;\r\n}) => {\r\n const [indicators, setIndicators] = useState({ left: false, right: false });\r\n // const inView = useActivePage();\r\n\r\n const { ref } = useOverflow<HTMLDivElement>({\r\n onOverflow: (info) => {\r\n // toast.info(`Hey from ${from}`);\r\n setIndicators({ left: info.canScrollLeft, right: info.canScrollRight });\r\n },\r\n // enabled: inView,\r\n trackScroll: trackScroll,\r\n });\r\n\r\n return (\r\n <div\r\n className={cn(\r\n \"relative overflow-hidden\",\r\n segmentedControlStyles.widths[width].container,\r\n segmentedControlStyles.rounded[rounded],\r\n className\r\n )}\r\n >\r\n <div\r\n ref={ref}\r\n className={cn(\r\n \"flex items-center border overflow-x-scroll scrollbar-hide\",\r\n segmentedControlStyles.rounded[rounded],\r\n segmentedControlStyles.border[border]\r\n )}\r\n >\r\n {options.map((option) => {\r\n const isSelected = keyExtractor(selected) === keyExtractor(option);\r\n return (\r\n <button\r\n key={keyExtractor(option)}\r\n onClick={() => onChange?.(option)}\r\n className={cn(\r\n \"border-r px-3 py-1 last:border-none text-nowrap shrink-0\",\r\n segmentedControlStyles.widths[width].item,\r\n !isSelected && \"lg:hover:bg-overlay-3\",\r\n itemColor\r\n ? itemColor(isSelected)\r\n : isSelected\r\n ? segmentedControlStyles.colors[color]\r\n : segmentedControlStyles.unselectedColors[unselectedColor],\r\n segmentedControlStyles.border[border],\r\n itemClassName\r\n )}\r\n >\r\n {labelExtractor(option)}\r\n </button>\r\n );\r\n })}\r\n </div>\r\n <AnimatePresence>\r\n {indicators.left ? (\r\n <motion.button\r\n key=\"leftarrow\"\r\n variants={FADE_IN}\r\n initial=\"initial\"\r\n animate=\"animate\"\r\n exit=\"exit\"\r\n onClick={() => {\r\n if (!ref.current) return;\r\n scrollByAmount({ el: ref.current, direction: \"left\" });\r\n }}\r\n className=\"absolute shrink-0 left-0 px-1 h-full bg-gradient-to-r from-base-2 top-0\"\r\n >\r\n <ChevronLeft className=\"text-base-13\" />\r\n </motion.button>\r\n ) : null}\r\n {indicators.right ? (\r\n <motion.button\r\n key=\"rightarrow\"\r\n variants={FADE_IN}\r\n initial=\"initial\"\r\n animate=\"animate\"\r\n exit=\"exit\"\r\n onClick={() => {\r\n if (!ref.current) return;\r\n scrollByAmount({ el: ref.current, direction: \"right\" });\r\n }}\r\n className=\"absolute shrink-0 right-0 px-1 h-full bg-gradient-to-l from-base-2 top-0\"\r\n >\r\n <ChevronRight className=\"text-base-13\" />\r\n </motion.button>\r\n ) : null}\r\n </AnimatePresence>\r\n </div>\r\n );\r\n};\r\n\r\nexport { SegmentedControl };\r\n\r\n{\r\n /* <AnimatePresence>\r\n {isSelected ? (\r\n <motion.p\r\n layoutId=\"bottombar\"\r\n className={`absolute inset-0 ${isSelected && colors[color]}`}\r\n />\r\n ) : null}\r\n </AnimatePresence> */\r\n}\r\n","import { cn } from \"../utils\";\r\n\r\nconst Separator = ({ className }: { className?: string }) => {\r\n return <div className={cn(\"w-full h-px bg-base-4\", className)} />;\r\n};\r\n\r\nexport { Separator };\r\n","import { cn } from \"../utils\";\n\ntype SpinnerProps = {\n loading?: boolean;\n wrapperClassName?: string;\n spinnerClassName?: string;\n};\n\nconst Spinner: React.FC<SpinnerProps> = ({\n loading = true,\n wrapperClassName,\n spinnerClassName,\n}) => {\n return (\n <div className={cn(\"flex justify-center\", wrapperClassName)}>\n <svg\n xmlns=\"http://www.w3.org/2000/svg\"\n width=\"20\"\n height=\"20\"\n viewBox=\"0 0 20 20\"\n className={cn({ \"animate-spin\": loading }, spinnerClassName)}\n >\n <path\n fill=\"currentColor\"\n d=\"M10 3a7 7 0 0 0-7 7a.5.5 0 0 1-1 0a8 8 0 1 1 8 8a.5.5 0 0 1 0-1a7 7 0 1 0 0-14Z\"\n />\n </svg>\n </div>\n );\n};\n\nexport { Spinner };\n","import { Check, Plus, X } from \"lucide-react\";\r\nimport { Button, Spinner } from \"../components\";\r\nimport { useState } from \"react\";\r\nimport { cn } from \"../utils\";\r\n\r\nexport const FormSubmit = ({\r\n isEditable,\r\n isDeletable = true,\r\n createUpdateLoading,\r\n deleteLoading,\r\n onDelete,\r\n onDeleteConfirm,\r\n addText = \"Añadir\",\r\n updateText = \"Actualizar\",\r\n deleteText = \"Eliminar\",\r\n className,\r\n}: {\r\n isEditable?: boolean;\r\n isDeletable?: boolean;\r\n createUpdateLoading: boolean;\r\n deleteLoading?: boolean;\r\n onDelete?: () => void;\r\n onDeleteConfirm?: boolean;\r\n addText?: string;\r\n updateText?: string;\r\n deleteText?: string;\r\n className?: string;\r\n}) => {\r\n const [confirm, setConfirm] = useState(false);\r\n\r\n return (\r\n <div className={`w-full grid grid-cols-2 gap-4 col-span-full ${className}`}>\r\n {isEditable && isDeletable ? (\r\n <Button\r\n color=\"dangersolid\"\r\n state={\r\n deleteLoading\r\n ? \"loading\"\r\n : createUpdateLoading\r\n ? \"disabled\"\r\n : \"enabled\"\r\n }\r\n onClick={() => {\r\n if (onDeleteConfirm) {\r\n if (!confirm) {\r\n setConfirm(true);\r\n } else {\r\n onDelete?.();\r\n }\r\n } else {\r\n onDelete?.();\r\n }\r\n }}\r\n >\r\n <X size={18} />\r\n {onDeleteConfirm ? (confirm ? \"Confirmar\" : deleteText) : deleteText}\r\n </Button>\r\n ) : null}\r\n <Button\r\n color=\"brand\"\r\n className={cn(isEditable && isDeletable ? \"\" : \"col-span-2\")}\r\n state={\r\n createUpdateLoading\r\n ? \"loading\"\r\n : deleteLoading\r\n ? \"disabled\"\r\n : \"enabled\"\r\n }\r\n type=\"submit\"\r\n >\r\n {createUpdateLoading ? (\r\n <Spinner />\r\n ) : isEditable ? (\r\n <Check size={18} />\r\n ) : (\r\n <Plus size={18} />\r\n )}\r\n {isEditable ? updateText : addText}\r\n </Button>\r\n </div>\r\n );\r\n};\r\n","import {\r\n createContext,\r\n useContext,\r\n useCallback,\r\n useRef,\r\n ReactNode,\r\n useMemo,\r\n useEffect,\r\n useLayoutEffect,\r\n} from \"react\";\r\nimport { motion } from \"motion/react\";\r\nimport { X } from \"lucide-react\";\r\nimport { useLargeScreen } from \"../hooks\";\r\nimport { Portal } from \"./Portal\";\r\nimport { cn } from \"../utils\";\r\nimport { Button } from \"./Button\";\r\nimport {\r\n navigate,\r\n useInitialChangeEvent,\r\n useRoute,\r\n} from \"@mateosuarezdev/react-router\";\r\n\r\n// if wanted to extend from component\r\n\r\n// interface SuperModalProps extends ComponentPropsWithoutRef<'div'> {\r\n// customProp?: string;\r\n// }\r\n// or\r\n// HTMLProps<HTMLDivElement> &\r\n\r\nimport { animate } from \"motion/react\";\r\n\r\ninterface ModalsContextType {\r\n add: (id: string) => void;\r\n remove: (id: string) => void;\r\n getPrevId: () => string | undefined;\r\n animateParentModal: (el: HTMLElement, mode?: \"modal\" | \"sheet\") => void;\r\n restoreParentModal: (el: HTMLElement) => void;\r\n getModals: () => string[];\r\n}\r\n\r\nconst ModalsContext = createContext<ModalsContextType | undefined>(undefined);\r\n\r\ninterface ModalsProviderProps {\r\n children: ReactNode;\r\n debug?: boolean;\r\n}\r\n\r\nexport const ModalsProvider: React.FC<ModalsProviderProps> = ({\r\n children,\r\n debug = false,\r\n}) => {\r\n const modalsRef = useRef<string[]>([]);\r\n\r\n const add = useCallback(\r\n (id: string) => {\r\n modalsRef.current.push(id);\r\n if (debug) {\r\n console.log(\"Modal\", id, \"added\", modalsRef.current);\r\n }\r\n },\r\n [debug]\r\n );\r\n\r\n const remove = useCallback(\r\n (id: string) => {\r\n modalsRef.current = modalsRef.current.filter((modalId) => modalId !== id);\r\n if (debug) {\r\n console.log(\"Modal\", id, \"removed\", modalsRef.current);\r\n }\r\n },\r\n [debug]\r\n );\r\n\r\n const getPrevId = useCallback((): string | undefined => {\r\n const prevId = modalsRef.current[modalsRef.current.length - 2];\r\n if (debug) {\r\n console.log(\"prev modal id\", prevId);\r\n }\r\n return prevId;\r\n }, [debug]);\r\n\r\n const animateParentModal = useCallback(\r\n (el: HTMLElement, mode: \"modal\" | \"sheet\" = \"modal\") => {\r\n animate(\r\n el,\r\n {\r\n y: mode === \"modal\" ? -30 : -50,\r\n scale: 0.9,\r\n },\r\n {\r\n ease: [0.32, 0.72, 0, 1],\r\n duration: 0.3,\r\n }\r\n );\r\n },\r\n []\r\n );\r\n\r\n const restoreParentModal = useCallback((el: HTMLElement) => {\r\n animate(\r\n el,\r\n {\r\n y: 0,\r\n scale: 1,\r\n },\r\n {\r\n ease: [0.32, 0.72, 0, 1],\r\n duration: 0.2,\r\n }\r\n );\r\n }, []);\r\n\r\n const getModals = useCallback(() => {\r\n return modalsRef.current;\r\n }, []);\r\n\r\n const value: ModalsContextType = {\r\n add,\r\n remove,\r\n getPrevId,\r\n animateParentModal,\r\n restoreParentModal,\r\n getModals,\r\n };\r\n\r\n return (\r\n <ModalsContext.Provider value={value}>{children}</ModalsContext.Provider>\r\n );\r\n};\r\n\r\nexport const useModals = (): ModalsContextType => {\r\n const context = useContext(ModalsContext);\r\n if (context === undefined) {\r\n throw new Error(\"useModals must be used within a ModalsProvider\");\r\n }\r\n return context;\r\n};\r\n\r\ntype SuperModalProps = {\r\n // id: string;\r\n title?: string;\r\n description?: string;\r\n showHeader?: boolean;\r\n mode?: \"modal\" | \"sheet\";\r\n /**\r\n * Where to redirect to if the modal\r\n * is loaded as the first page\r\n * with no previous pathname history\r\n * defaults to auto generated prevPath\r\n */\r\n onReplace?: string;\r\n className?: string;\r\n contentClassName?: string;\r\n children: ReactNode;\r\n};\r\n\r\nconst SuperModal = ({\r\n // id,\r\n title,\r\n description,\r\n showHeader = true,\r\n mode,\r\n onReplace,\r\n className,\r\n contentClassName,\r\n children, // ...others\r\n}: SuperModalProps) => {\r\n const initialChangeEvent = useInitialChangeEvent();\r\n const lg = useLargeScreen();\r\n const parentModal = useRef<HTMLElement | null>(null);\r\n const modals = useModals();\r\n\r\n const { id, prevPath } = useRoute();\r\n\r\n const asModal = useMemo(() => mode === \"modal\" || lg, [mode, lg]);\r\n\r\n useEffect(() => {\r\n modals.add(id);\r\n\r\n const prevModalId = modals.getPrevId();\r\n\r\n if (!prevModalId) return;\r\n\r\n parentModal.current = document.getElementById(prevModalId)!;\r\n\r\n if (!parentModal.current) return;\r\n\r\n if (prevModalId) {\r\n modals.animateParentModal(\r\n parentModal.current,\r\n asModal ? \"modal\" : \"sheet\"\r\n );\r\n }\r\n\r\n //TODO\r\n //! cleanups not running on new router system\r\n //! IDK WHY\r\n // return () => {\r\n // console.log(\"Unmounting\");\r\n // modals.remove(id);\r\n // };\r\n return () => {\r\n console.log(\"IS THIS CLEANUP RUNNING?\");\r\n };\r\n //! NOT RUNNING...\r\n }, [lg]);\r\n\r\n // for some reason the useEffect cleanup not always run\r\n // something to do with the router/outlet system?\r\n useLayoutEffect(() => {\r\n return () => modals.remove(id);\r\n }, []);\r\n\r\n return (\r\n <Portal>\r\n <motion.div\r\n initial={{ opacity: 0 }}\r\n animate={{\r\n opacity: 1,\r\n }}\r\n exit={{ opacity: 0 }}\r\n transition={{\r\n ease: [0.32, 0.72, 0, 1],\r\n duration: 0.3,\r\n }}\r\n onClick={() => {\r\n if (!initialChangeEvent) {\r\n navigate.replace(onReplace ?? prevPath);\r\n } else {\r\n navigate.back();\r\n }\r\n }}\r\n className=\"bg-black/40 absolute w-full h-full left-0 top-0 z-[500]\"\r\n />\r\n <motion.div\r\n id={id}\r\n initial={{\r\n scale: asModal ? 0.8 : undefined,\r\n y: asModal ? undefined : window.innerHeight,\r\n }}\r\n animate={{\r\n scale: 1,\r\n y: asModal ? undefined : 0,\r\n }}\r\n exit={{\r\n scale: asModal ? 0.8 : undefined,\r\n opacity: asModal ? 0 : undefined,\r\n y: asModal ? undefined : window.innerHeight,\r\n }}\r\n transition={{\r\n ease: [0.32, 0.72, 0, 1],\r\n duration: 0.3,\r\n }}\r\n style={{\r\n left: \"50%\",\r\n translateX: \"-50%\",\r\n bottom: asModal ? \"50%\" : 0,\r\n translateY: asModal ? \"50%\" : 0,\r\n height: asModal ? \"65%\" : \"95%\",\r\n }}\r\n onAnimationStart={(def) => {\r\n if (\r\n ((def as any)?.scale === 0.8 || (def as any)?.y > 50) &&\r\n parentModal.current\r\n ) {\r\n modals.restoreParentModal(parentModal.current);\r\n }\r\n }}\r\n className={cn(\r\n \"bg-base-1 absolute w-full lg:max-w-[600px] h-full rounded-6 overflow-hidden z-[500] flex flex-col\",\r\n !asModal && \"rounded-b-none\",\r\n className\r\n )}\r\n // {...others}\r\n >\r\n {showHeader && (\r\n <div className=\"flex items-start justify-between p-4 border-b border-base-3\">\r\n <div>\r\n {title && <p className=\"font-medium text-lg\">{title}</p>}\r\n {description && (\r\n <p className=\"text-base-11 text-xs\">{description}</p>\r\n )}\r\n </div>\r\n <Button\r\n size=\"xs\"\r\n onClick={() => {\r\n if (!initialChangeEvent) {\r\n navigate.replace(onReplace ?? prevPath);\r\n } else {\r\n navigate.back();\r\n }\r\n }}\r\n >\r\n <X size={20} />\r\n </Button>\r\n </div>\r\n )}\r\n <div\r\n id={`${id}-content`}\r\n className={cn(\"grow customscrollbar p-4 pb-6\", contentClassName)}\r\n >\r\n {children}\r\n </div>\r\n </motion.div>\r\n </Portal>\r\n );\r\n};\r\n\r\nexport { SuperModal };\r\n","import { cn } from \"../utils\";\r\nimport { useId } from \"react\";\r\n\r\ninterface SwitchProps {\r\n checked: boolean;\r\n onCheckedChange: (checked: boolean) => void;\r\n disabled?: boolean;\r\n name?: string;\r\n required?: boolean;\r\n className?: string;\r\n}\r\n\r\nfunction Switch({\r\n checked,\r\n onCheckedChange,\r\n disabled = false,\r\n name,\r\n required,\r\n className = \"\",\r\n}: SwitchProps) {\r\n const id = useId();\r\n\r\n const handleClick = () => {\r\n if (disabled) return;\r\n onCheckedChange(!checked);\r\n };\r\n\r\n return (\r\n <button\r\n id={id}\r\n type=\"button\"\r\n role=\"switch\"\r\n aria-checked={checked}\r\n aria-required={required}\r\n data-state={checked ? \"checked\" : \"unchecked\"}\r\n disabled={disabled}\r\n onClick={handleClick}\r\n className={cn(\r\n `relative inline-flex h-[28px] w-[48px] items-center rounded-full\r\n transition-colors duration-200 ease-in-out\r\n focus-visible:outline-none focus-visible:ring-1\r\n focus-visible:ring-base-6`,\r\n checked ? \"bg-brand\" : \"bg-base-3\",\r\n disabled ? \"opacity-50 cursor-not-allowed\" : \"cursor-pointer\",\r\n className\r\n )}\r\n >\r\n <span\r\n className={cn(\r\n `inline-block h-6 w-6 transform rounded-full\r\n transition-transform duration-200 ease-in-out\r\n shadow`,\r\n checked\r\n ? \"bg-brand-text translate-x-[22px]\"\r\n : \"bg-base-1 dark-theme:bg-base-12 translate-x-[2px]\"\r\n )}\r\n />\r\n\r\n {/* Hidden input for form submission */}\r\n {name && (\r\n <input\r\n type=\"checkbox\"\r\n name={name}\r\n checked={checked}\r\n required={required}\r\n disabled={disabled}\r\n onChange={() => {}} // Controlled by Controller\r\n tabIndex={-1}\r\n aria-hidden=\"true\"\r\n className=\"sr-only\"\r\n />\r\n )}\r\n </button>\r\n );\r\n}\r\n\r\nexport { Switch };\r\n","import { CheckIcon } from \"lucide-react\";\r\nimport { useEffect, useRef, useState } from \"react\";\r\nimport { cn } from \"../utils\";\r\nimport { Controller, useFormContext } from \"react-hook-form\";\r\n\r\ninterface TagsProps {\r\n label: string;\r\n variant?: \"default\" | \"floating\";\r\n color?: \"solid\" | \"translucent\" | \"outline\";\r\n tags: string[];\r\n onChange: (tags: string[]) => void;\r\n valid?: boolean;\r\n error?: string;\r\n placeholder?: string;\r\n maxTags?: number;\r\n validateTag?: (tag: string) => boolean | string;\r\n}\r\n\r\n// Custom Tag Input Component with accessibility\r\nexport const Tags = ({\r\n label,\r\n variant = \"default\",\r\n color = \"solid\",\r\n tags,\r\n onChange,\r\n valid,\r\n error,\r\n placeholder = \"Add a tag...\",\r\n maxTags,\r\n validateTag,\r\n}: TagsProps) => {\r\n const [inputValue, setInputValue] = useState(\"\");\r\n const [isFocused, setIsFocused] = useState(false);\r\n const [localError, setLocalError] = useState<string | null>(null);\r\n const inputRef = useRef<HTMLInputElement>(null);\r\n const containerRef = useRef<HTMLDivElement>(null);\r\n const tagRefs = useRef<(HTMLDivElement | null)[]>([]);\r\n const hasValue = tags.length > 0;\r\n\r\n // Unique IDs for ARIA attributes\r\n const inputId = useRef(\r\n `taginput-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n const labelId = useRef(\r\n `label-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n const errorId = useRef(\r\n `error-${Math.random().toString(36).substr(2, 9)}`\r\n ).current;\r\n\r\n // Set up tag refs\r\n useEffect(() => {\r\n tagRefs.current = tagRefs.current.slice(0, tags.length);\r\n }, [tags.length]);\r\n\r\n const handleKeyDown = (e: React.KeyboardEvent<HTMLInputElement>) => {\r\n if (e.key === \"Enter\" && inputValue.trim()) {\r\n e.preventDefault(); // Prevent form submission\r\n\r\n const newTag = inputValue.trim();\r\n\r\n // Check if we've reached the maximum number of tags\r\n if (maxTags && tags.length >= maxTags) {\r\n setLocalError(`Maximum of ${maxTags} tags allowed`);\r\n return;\r\n }\r\n\r\n // Check for duplicates\r\n if (tags.includes(newTag)) {\r\n setLocalError(\"Tag already exists\");\r\n return;\r\n }\r\n\r\n // Custom validation if provided\r\n if (validateTag) {\r\n const validationResult = validateTag(newTag);\r\n if (typeof validationResult === \"string\") {\r\n setLocalError(validationResult);\r\n return;\r\n } else if (validationResult === false) {\r\n setLocalError(\"Invalid tag\");\r\n return;\r\n }\r\n }\r\n\r\n // Add the tag\r\n onChange([...tags, newTag]);\r\n setInputValue(\"\");\r\n setLocalError(null);\r\n\r\n // Announce tag added for screen readers\r\n announceChange(`Added tag ${newTag}`);\r\n } else if (e.key === \"Backspace\" && !inputValue && tags.length > 0) {\r\n // Remove the last tag when backspace is pressed and input is empty\r\n const removedTag = tags[tags.length - 1];\r\n onChange(tags.slice(0, -1));\r\n\r\n // Announce tag removed for screen readers\r\n announceChange(`Removed tag ${removedTag}`);\r\n } else if (e.key === \"ArrowLeft\" && inputValue === \"\" && tags.length > 0) {\r\n // Allow navigating to tags with arrow keys when input is empty\r\n if (tagRefs.current[tags.length - 1]) {\r\n tagRefs.current[tags.length - 1]?.focus();\r\n }\r\n }\r\n };\r\n\r\n // Handle keyboard navigation among tags\r\n const handleTagKeyDown = (e: React.KeyboardEvent, tagIndex: number) => {\r\n if (e.key === \"Backspace\" || e.key === \"Delete\") {\r\n e.preventDefault();\r\n const removedTag = tags[tagIndex];\r\n const newTags = [...tags];\r\n newTags.splice(tagIndex, 1);\r\n onChange(newTags);\r\n\r\n // Focus the input after removing\r\n setTimeout(() => {\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n }, 0);\r\n\r\n announceChange(`Removed tag ${removedTag}`);\r\n } else if (e.key === \"ArrowRight\") {\r\n e.preventDefault();\r\n if (tagIndex < tags.length - 1) {\r\n // Move focus to next tag\r\n tagRefs.current[tagIndex + 1]?.focus();\r\n } else {\r\n // Move to input if at last tag\r\n inputRef.current?.focus();\r\n }\r\n } else if (e.key === \"ArrowLeft\") {\r\n e.preventDefault();\r\n if (tagIndex > 0) {\r\n // Move focus to previous tag\r\n tagRefs.current[tagIndex - 1]?.focus();\r\n }\r\n }\r\n };\r\n\r\n const handleRemoveTag = (tagToRemove: string, tagIndex: number) => {\r\n onChange(tags.filter((tag) => tag !== tagToRemove));\r\n\r\n // Focus appropriately after removing\r\n setTimeout(() => {\r\n if (tagIndex < tags.length - 1) {\r\n // If there are tags after, focus the next tag\r\n tagRefs.current[tagIndex]?.focus();\r\n } else if (tagIndex > 0) {\r\n // Otherwise focus the previous tag\r\n tagRefs.current[tagIndex - 1]?.focus();\r\n } else {\r\n // Otherwise focus the input\r\n inputRef.current?.focus();\r\n }\r\n }, 0);\r\n\r\n announceChange(`Removed tag ${tagToRemove}`);\r\n };\r\n\r\n const handleInputChange = (e: React.ChangeEvent<HTMLInputElement>) => {\r\n setInputValue(e.target.value);\r\n setLocalError(null);\r\n };\r\n\r\n const handleContainerClick = () => {\r\n if (inputRef.current) {\r\n inputRef.current.focus();\r\n }\r\n };\r\n\r\n // todo\r\n // accessibility announcement\r\n const announceChange = (message: string) => {\r\n // This would ideally use a live region, but for simplicity we'll just use console\r\n // In future, we'd have a visually hidden div with aria-live=\"polite\"\r\n console.log(`Accessibility announcement: ${message}`);\r\n };\r\n\r\n return (\r\n <div>\r\n <div className=\"relative\" ref={containerRef}>\r\n {variant === \"default\" ? (\r\n <label\r\n id={labelId}\r\n htmlFor={inputId}\r\n className={cn(\"text-base top-4 font-semibold left-3\", {\r\n \"text-sm top-2 left-2\": isFocused || hasValue || placeholder,\r\n \"text-red-9\": !!error,\r\n })}\r\n >\r\n {label} {maxTags && `(${tags.length}/${maxTags})`}\r\n </label>\r\n ) : null}\r\n <div\r\n className={cn(\"rounded-6 px-2 transition cursor-text pr-10\", {\r\n \"bg-base-3\": color === \"solid\",\r\n \"border border-uielborder focus-visible:border-transparent\":\r\n color === \"outline\",\r\n \"py-3\": variant === \"default\",\r\n \"pt-5 pb-2\": variant === \"floating\",\r\n \"ring-2 ring-branduielborder\": isFocused,\r\n \"text-red-9\": error || localError,\r\n \"ring-2 ring-red-6\": (error || localError) && isFocused,\r\n })}\r\n // ${\r\n // error || localError ? \"border border-red-500\" : \"\"\r\n // }`}\r\n onClick={handleContainerClick}\r\n role=\"group\"\r\n aria-labelledby={labelId}\r\n aria-describedby={error || localError ? errorId : undefined}\r\n >\r\n {variant === \"floating\" ? (\r\n <label\r\n id={labelId}\r\n htmlFor={inputId}\r\n className={cn(\r\n \"absolute transition-all duration-200 pointer-events-none\",\r\n \"text-base top-4 font-semibold left-3\",\r\n {\r\n \"text-sm top-2 left-2\": isFocused || hasValue || placeholder,\r\n \"text-red-9\": !!error,\r\n }\r\n )}\r\n >\r\n {label} {maxTags && `(${tags.length}/${maxTags})`}\r\n </label>\r\n ) : null}\r\n\r\n <div\r\n className={cn(\"flex flex-wrap gap-1 items-center\", {\r\n \"mt-2.5\": variant === \"floating\",\r\n })}\r\n >\r\n {tags.map((tag, index) => (\r\n <div\r\n key={`${tag}-${index}`}\r\n ref={(el) => {\r\n tagRefs.current[index] = el;\r\n }}\r\n className={cn(\r\n \"line-clamp-1 text-brand rounded-full px-2 text-sm flex items-center\",\r\n {\r\n \"bg-brandfadedbg text-brand\": !error && !localError,\r\n \"bg-red-4 text-red-9\": error || localError,\r\n }\r\n )}\r\n tabIndex={0} // Make tags focusable\r\n role=\"button\"\r\n aria-label={`${tag}, press delete or backspace to remove`}\r\n onKeyDown={(e) => handleTagKeyDown(e, index)}\r\n >\r\n {tag}\r\n <button\r\n type=\"button\"\r\n className=\"ml-1 text-brand hover:text-brandhover shrink-0\"\r\n onClick={() => handleRemoveTag(tag, index)}\r\n aria-label={`Remove ${tag} tag`}\r\n >\r\n x\r\n </button>\r\n </div>\r\n ))}\r\n <input\r\n id={inputId}\r\n ref={inputRef}\r\n type=\"text\"\r\n className=\"flex-grow min-w-[60px] bg-transparent outline-none placeholder:text-sm placeholder:text-secondarytext\"\r\n value={inputValue}\r\n onChange={handleInputChange}\r\n onKeyDown={handleKeyDown}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n enterKeyHint=\"enter\"\r\n autoComplete=\"off\"\r\n placeholder={tags.length > 0 ? \"\" : placeholder}\r\n style={{ width: `${Math.max(60, inputValue.length * 8)}px` }}\r\n aria-describedby={error || localError ? errorId : undefined}\r\n aria-invalid={!!(error || localError)}\r\n />\r\n </div>\r\n </div>\r\n\r\n {valid && (\r\n <span className=\"absolute right-3 top-1/2 transform -translate-y-1/2\">\r\n <CheckIcon />\r\n </span>\r\n )}\r\n </div>\r\n\r\n {(error || localError) && (\r\n <p\r\n id={errorId}\r\n className=\"text-red-500 text-xs mt-1\"\r\n aria-live=\"assertive\"\r\n >\r\n {error || localError}\r\n </p>\r\n )}\r\n\r\n {/* {maxTags && !error && !localError && (\r\n <p className=\"text-secondarytext text-xs ml-0.5 mt-1\">\r\n {tags.length} / {maxTags} tags\r\n </p>\r\n )} */}\r\n\r\n {/* Visually hidden live region for announcements */}\r\n <div className=\"sr-only\" aria-live=\"polite\" aria-atomic=\"true\">\r\n {tags.length > 0\r\n ? `Current tags: ${tags.join(\", \")}`\r\n : \"No tags added yet\"}\r\n </div>\r\n </div>\r\n );\r\n};\r\n\r\ntype FormTagsProps = Omit<TagsProps, \"tags\" | \"onChange\"> & {\r\n name: string;\r\n};\r\n\r\nexport const FormTags = ({ name, ...others }: FormTagsProps) => {\r\n const { control } = useFormContext();\r\n\r\n if (!control) {\r\n console.error(`Form control is missing for field: ${name}`);\r\n return <p>Form control missing for field: {name}</p>;\r\n }\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => {\r\n return (\r\n <Tags\r\n tags={field.value}\r\n onChange={(tags) => field.onChange(tags)}\r\n error={fieldState.error?.message}\r\n {...others}\r\n />\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","import {\r\n TextareaHTMLAttributes,\r\n forwardRef,\r\n useCallback,\r\n useState,\r\n} from \"react\";\r\nimport { cn } from \"../utils\";\r\nimport { nullRead, nullSet } from \"../utils\";\r\nimport { Controller, useFormContext } from \"react-hook-form\";\r\n\r\n// Types\r\ninterface TextAreaProps extends TextareaHTMLAttributes<HTMLTextAreaElement> {\r\n label: string;\r\n labelPosition?: \"default\" | \"floating\";\r\n error?: boolean;\r\n focusColor?: \"solid\" | \"brand\";\r\n}\r\n\r\nconst focusColors = {\r\n brand: \"ring-1 ring-brand\",\r\n solid: \"ring-1 ring-base-6\",\r\n};\r\n\r\nexport const TextArea = forwardRef<HTMLTextAreaElement, TextAreaProps>(\r\n (\r\n {\r\n label,\r\n labelPosition = \"default\",\r\n placeholder,\r\n error,\r\n focusColor = \"brand\",\r\n className,\r\n value,\r\n rows = 3,\r\n ...props\r\n },\r\n forwardedRef\r\n ) => {\r\n const [isFocused, setIsFocused] = useState(false);\r\n const hasValue = value !== \"\" && value !== null && value !== undefined;\r\n\r\n return (\r\n <div className=\"relative\">\r\n {labelPosition === \"default\" ? (\r\n <label\r\n className={cn(\r\n \"top-[18px] font-medium ml-0.5 text-xs\",\r\n error && \"text-red-9\"\r\n )}\r\n >\r\n {label}\r\n </label>\r\n ) : null}\r\n <div\r\n className={cn(labelPosition === \"default\" ? \"p-0\" : \"pt-5 pb-2\", {\r\n \"bg-red-4 text-red-9\": !!error,\r\n })}\r\n >\r\n {labelPosition === \"floating\" && (\r\n <label\r\n className={cn(\r\n \"absolute transition-all duration-200 pointer-events-none\",\r\n \"text-sm top-2.5 font-semibold left-2.5\",\r\n {\r\n \"text-xs top-2.5\": isFocused || hasValue || placeholder,\r\n \"text-red-9\": !!error,\r\n }\r\n )}\r\n >\r\n {label}\r\n </label>\r\n )}\r\n <textarea\r\n ref={forwardedRef}\r\n className={cn(\r\n !error && isFocused && focusColors[focusColor],\r\n \"bg-base-3 border border-base-4 light-theme:drop-shadow-sm rounded-6 w-full focus-visible:outline-none customscrollbarnohide\",\r\n \"placeholder:text-base-11 text-sm\",\r\n \"resize-none\", // Prevent manual resizing since we're auto-resizing\r\n labelPosition === \"default\" ? \"p-3\" : \"mt-1\",\r\n {\r\n // \"pr-10\": valid,\r\n \"text-red-9 placeholder:text-red-9\": !!error,\r\n },\r\n className\r\n )}\r\n value={value}\r\n placeholder={placeholder}\r\n onFocus={() => setIsFocused(true)}\r\n onBlur={() => setIsFocused(false)}\r\n rows={rows}\r\n {...props}\r\n />\r\n </div>\r\n\r\n {/* {valid && (\r\n <CheckIcon\r\n size={16}\r\n className=\"absolute top-6 right-3 text-green-9\"\r\n />\r\n )} */}\r\n </div>\r\n );\r\n }\r\n);\r\n\r\n// Add display name for better debugging\r\nTextArea.displayName = \"TextArea\";\r\n\r\nexport const FormTextArea = ({\r\n name,\r\n customRead,\r\n customSet,\r\n ...others\r\n}: {\r\n name: string;\r\n customRead?: (value: string | null) => string;\r\n customSet?: (value: string) => string | null | undefined;\r\n} & TextAreaProps) => {\r\n const { control } = useFormContext();\r\n\r\n const readValue = useCallback(\r\n (value: string | null) => {\r\n if (customRead) {\r\n return customRead(value);\r\n } else if (value === null) {\r\n return nullRead(value);\r\n }\r\n return value;\r\n },\r\n [customRead]\r\n );\r\n\r\n const setValue = useCallback(\r\n (value: string) => {\r\n if (customSet) {\r\n return customSet(value);\r\n } else if (value === null) {\r\n return nullSet(value);\r\n }\r\n return value;\r\n },\r\n [customSet]\r\n );\r\n\r\n if (!control) {\r\n console.error(`Form control is missing for field: ${name}`);\r\n return <p>Form control missing for field: {name}</p>;\r\n }\r\n\r\n return (\r\n <Controller\r\n name={name}\r\n control={control}\r\n render={({ field, fieldState }) => {\r\n return (\r\n <div>\r\n <TextArea\r\n value={readValue(field.value)}\r\n onChange={(e) => field.onChange(setValue(e.target.value))}\r\n error={!!fieldState.error}\r\n // Pass the ref from React Hook Form\r\n ref={field.ref}\r\n {...others}\r\n />\r\n {fieldState.error ? (\r\n <span role=\"alert\" className=\"text-red-9 text-sm mt-1 ml-0.5\">\r\n {fieldState.error.message}\r\n </span>\r\n ) : null}\r\n </div>\r\n );\r\n }}\r\n />\r\n );\r\n};\r\n","/**\r\n * Absolute coordinate positions adjusted for scroll.\r\n */\r\ninterface Coordinates {\r\n top: number;\r\n left: number;\r\n width: number;\r\n height: number;\r\n}\r\n\r\n/**\r\n * Allows start/stop control of the animation\r\n */\r\nexport interface AnimationController<P = unknown> {\r\n /**\r\n * The original animation parent.\r\n */\r\n readonly parent: Element;\r\n /**\r\n * A function that enables future animations.\r\n */\r\n enable: () => void;\r\n /**\r\n * A function that disables future animations.\r\n */\r\n disable: () => void;\r\n /**\r\n * A function that returns true if the animations are currently enabled.\r\n */\r\n isEnabled: () => boolean;\r\n /**\r\n * (Svelte Specific) A function that runs if the parameters are changed.\r\n */\r\n update?: (newParams: P) => void;\r\n /**\r\n * (Svelte Specific) A function that runs when the component is removed from the DOM.\r\n */\r\n destroy?: () => void;\r\n}\r\n\r\n/**\r\n * A set of all the parents currently being observe. This is the only non weak\r\n * registry.\r\n */\r\nconst parents = new Set<Element>();\r\n/**\r\n * Element coordinates that is constantly kept up to date.\r\n */\r\nconst coords = new WeakMap<Element, Coordinates>();\r\n/**\r\n * Siblings of elements that have been removed from the dom.\r\n */\r\nconst siblings = new WeakMap<Element, [prev: Node | null, next: Node | null]>();\r\n/**\r\n * Animations that are currently running.\r\n */\r\nconst animations = new WeakMap<Element, Animation>();\r\n/**\r\n * A map of existing intersection observers used to track element movements.\r\n */\r\nconst intersections = new WeakMap<Element, IntersectionObserver>();\r\n/**\r\n * A map of existing mutation observers used to track element movements.\r\n */\r\nconst mutationObservers = new WeakMap<Element, MutationObserver>();\r\n/**\r\n * Intervals for automatically checking the position of elements occasionally.\r\n */\r\nconst intervals = new WeakMap<Element, NodeJS.Timeout>();\r\n/**\r\n * The configuration options for each group of elements.\r\n */\r\nconst options = new WeakMap<\r\n Element,\r\n AutoAnimateOptions | AutoAnimationPlugin\r\n>();\r\n/**\r\n * Debounce counters by id, used to debounce calls to update positions.\r\n */\r\nconst debounces = new WeakMap<Element, NodeJS.Timeout>();\r\n/**\r\n * All parents that are currently enabled are tracked here.\r\n */\r\nconst enabled = new WeakSet<Element>();\r\n/**\r\n * The document used to calculate transitions.\r\n */\r\nlet root: HTMLElement;\r\n\r\n/**\r\n * The root’s XY scroll positions.\r\n */\r\nlet scrollX = 0;\r\nlet scrollY = 0;\r\n/**\r\n * Used to sign an element as the target.\r\n */\r\nconst TGT = \"__aa_tgt\";\r\n/**\r\n * Used to sign an element as being part of a removal.\r\n */\r\nconst DEL = \"__aa_del\";\r\n/**\r\n * Used to sign an element as being \"new\". When an element is removed from the\r\n * dom, but may cycle back in we can sign it with new to ensure the next time\r\n * it is recognized we consider it new.\r\n */\r\nconst NEW = \"__aa_new\";\r\n\r\n/**\r\n * Callback for handling all mutations.\r\n * @param mutations - A mutation list\r\n */\r\nconst handleMutations: MutationCallback = (mutations) => {\r\n const elements = getElements(mutations);\r\n // If elements is \"false\" that means this mutation that should be ignored.\r\n if (elements) {\r\n elements.forEach((el) => animate(el));\r\n }\r\n};\r\n\r\n/**\r\n *\r\n * @param entries - Elements that have been resized.\r\n */\r\nconst handleResizes: ResizeObserverCallback = (entries) => {\r\n entries.forEach((entry) => {\r\n if (entry.target === root) updateAllPos();\r\n if (coords.has(entry.target)) updatePos(entry.target);\r\n });\r\n};\r\n\r\n/**\r\n * Determine if an element is fully outside of the current viewport.\r\n * @param el - Element to test\r\n */\r\nfunction isOffscreen(el: Element): boolean {\r\n const rect = (el as HTMLElement).getBoundingClientRect();\r\n const vw = root?.clientWidth || 0;\r\n const vh = root?.clientHeight || 0;\r\n return rect.bottom < 0 || rect.top > vh || rect.right < 0 || rect.left > vw;\r\n}\r\n\r\n/**\r\n * Observe this elements position.\r\n * @param el - The element to observe the position of.\r\n */\r\nfunction observePosition(el: Element) {\r\n const oldObserver = intersections.get(el);\r\n oldObserver?.disconnect();\r\n let rect = coords.get(el);\r\n let invocations = 0;\r\n const buffer = 5;\r\n if (!rect) {\r\n rect = getCoords(el);\r\n coords.set(el, rect);\r\n }\r\n const { offsetWidth, offsetHeight } = root;\r\n const rootMargins = [\r\n rect.top - buffer,\r\n offsetWidth - (rect.left + buffer + rect.width),\r\n offsetHeight - (rect.top + buffer + rect.height),\r\n rect.left - buffer,\r\n ];\r\n const rootMargin = rootMargins\r\n .map((px) => `${-1 * Math.floor(px)}px`)\r\n .join(\" \");\r\n const observer = new IntersectionObserver(\r\n () => {\r\n ++invocations > 1 && updatePos(el);\r\n },\r\n {\r\n root,\r\n threshold: 1,\r\n rootMargin,\r\n }\r\n );\r\n observer.observe(el);\r\n intersections.set(el, observer);\r\n}\r\n\r\n/**\r\n * Update the exact position of a given element.\r\n * @param el - An element to update the position of.\r\n * @param debounce - Whether or not to debounce the update. After an animation is finished, it should update as soon as possible to prevent flickering on quick toggles.\r\n */\r\nfunction updatePos(el: Element, debounce = true) {\r\n clearTimeout(debounces.get(el));\r\n const optionsOrPlugin = getOptions(el);\r\n const delay = debounce\r\n ? isPlugin(optionsOrPlugin)\r\n ? 500\r\n : optionsOrPlugin.duration\r\n : 0;\r\n debounces.set(\r\n el,\r\n setTimeout(async () => {\r\n const currentAnimation = animations.get(el);\r\n\r\n try {\r\n await currentAnimation?.finished;\r\n\r\n coords.set(el, getCoords(el));\r\n observePosition(el);\r\n } catch {\r\n // ignore errors as the `.finished` promise is rejected when animations were cancelled\r\n }\r\n }, delay)\r\n );\r\n}\r\n\r\n/**\r\n * Updates all positions that are currently being tracked.\r\n */\r\nfunction updateAllPos() {\r\n clearTimeout(debounces.get(root));\r\n debounces.set(\r\n root,\r\n setTimeout(() => {\r\n parents.forEach((parent) =>\r\n forEach(parent, (el) => lowPriority(() => updatePos(el)))\r\n );\r\n }, 100)\r\n );\r\n}\r\n\r\n/**\r\n * Its possible for a quick scroll or other fast events to get past the\r\n * intersection observer, so occasionally we need want \"cold-poll\" for the\r\n * latests and greatest position. We try to do this in the most non-disruptive\r\n * fashion possible. First we only do this ever couple seconds, staggard by a\r\n * random offset.\r\n * @param el - Element\r\n */\r\nfunction poll(el: Element) {\r\n setTimeout(() => {\r\n intervals.set(\r\n el,\r\n setInterval(() => lowPriority(updatePos.bind(null, el)), 2000)\r\n );\r\n }, Math.round(2000 * Math.random()));\r\n}\r\n\r\n/**\r\n * Perform some operation that is non critical at some point.\r\n * @param callback\r\n */\r\nfunction lowPriority(callback: CallableFunction) {\r\n if (typeof requestIdleCallback === \"function\") {\r\n requestIdleCallback(() => callback());\r\n } else {\r\n requestAnimationFrame(() => callback());\r\n }\r\n}\r\n\r\n/**\r\n * The mutation observer responsible for watching each root element.\r\n */\r\n//@ts-ignore\r\nlet mutations: MutationObserver | undefined;\r\n\r\n/**\r\n * A resize observer, responsible for recalculating elements on resize.\r\n */\r\nlet resize: ResizeObserver | undefined;\r\n\r\n/**\r\n * Ensure the browser is supported.\r\n */\r\nconst supportedBrowser =\r\n typeof window !== \"undefined\" && \"ResizeObserver\" in window;\r\n\r\n/**\r\n * If this is in a browser, initialize our Web APIs\r\n */\r\nif (supportedBrowser) {\r\n root = document.documentElement;\r\n mutations = new MutationObserver(handleMutations);\r\n resize = new ResizeObserver(handleResizes);\r\n window.addEventListener(\"scroll\", () => {\r\n scrollY = window.scrollY;\r\n scrollX = window.scrollX;\r\n });\r\n resize.observe(root);\r\n}\r\n/**\r\n * Retrieves all the elements that may have been affected by the last mutation\r\n * including ones that have been removed and are no longer in the DOM.\r\n * @param mutations - A mutation list.\r\n * @returns\r\n */\r\nfunction getElements(mutations: MutationRecord[]): Set<Element> | false {\r\n const observedNodes = mutations.reduce((nodes: Node[], mutation) => {\r\n return [\r\n ...nodes,\r\n ...Array.from(mutation.addedNodes),\r\n ...Array.from(mutation.removedNodes),\r\n ];\r\n }, []);\r\n // Short circuit if _only_ comment nodes are observed\r\n const onlyCommentNodesObserved = observedNodes.every(\r\n (node) => node.nodeName === \"#comment\"\r\n );\r\n\r\n if (onlyCommentNodesObserved) return false;\r\n\r\n return mutations.reduce((elements: Set<Element> | false, mutation) => {\r\n // Short circuit if we find a purposefully deleted node.\r\n if (elements === false) return false;\r\n\r\n if (mutation.target instanceof Element) {\r\n target(mutation.target);\r\n if (!elements.has(mutation.target)) {\r\n elements.add(mutation.target);\r\n for (let i = 0; i < mutation.target.children.length; i++) {\r\n const child = mutation.target.children.item(i);\r\n if (!child) continue;\r\n if (DEL in child) {\r\n return false;\r\n }\r\n target(mutation.target, child);\r\n elements.add(child);\r\n }\r\n }\r\n if (mutation.removedNodes.length) {\r\n for (let i = 0; i < mutation.removedNodes.length; i++) {\r\n const child = mutation.removedNodes[i];\r\n if (DEL in child) {\r\n return false;\r\n }\r\n if (child instanceof Element) {\r\n elements.add(child);\r\n target(mutation.target, child);\r\n siblings.set(child, [\r\n mutation.previousSibling,\r\n mutation.nextSibling,\r\n ]);\r\n }\r\n }\r\n }\r\n }\r\n return elements;\r\n }, new Set<Element>());\r\n}\r\n\r\n/**\r\n * Assign the target to an element.\r\n * @param el - The root element\r\n * @param child\r\n */\r\nfunction target(el: Element, child?: Element) {\r\n if (!child && !(TGT in el)) Object.defineProperty(el, TGT, { value: el });\r\n else if (child && !(TGT in child))\r\n Object.defineProperty(child, TGT, { value: el });\r\n}\r\n\r\n/**\r\n * Determines what kind of change took place on the given element and then\r\n * performs the proper animation based on that.\r\n * @param el - The specific element to animate.\r\n */\r\nfunction animate(el: Element) {\r\n const isMounted = el.isConnected;\r\n const preExisting = coords.has(el);\r\n if (isMounted && siblings.has(el)) siblings.delete(el);\r\n\r\n if (animations.get(el)?.playState !== \"finished\") {\r\n animations.get(el)?.cancel();\r\n }\r\n if (NEW in el) {\r\n add(el);\r\n } else if (preExisting && isMounted) {\r\n remain(el);\r\n } else if (preExisting && !isMounted) {\r\n remove(el);\r\n } else {\r\n add(el);\r\n }\r\n}\r\n\r\n/**\r\n * Removes all non-digits from a string and casts to a number.\r\n * @param str - A string containing a pixel value.\r\n * @returns\r\n */\r\nfunction raw(str: string): number {\r\n return Number(str.replace(/[^0-9.\\-]/g, \"\"));\r\n}\r\n\r\n/**\r\n * Get the scroll offset of elements\r\n * @param el - Element\r\n * @returns\r\n */\r\nfunction getScrollOffset(el: Element) {\r\n let p = el.parentElement;\r\n while (p) {\r\n if (p.scrollLeft || p.scrollTop) {\r\n return { x: p.scrollLeft, y: p.scrollTop };\r\n }\r\n p = p.parentElement;\r\n }\r\n return { x: 0, y: 0 };\r\n}\r\n\r\n/**\r\n * Get the coordinates of elements adjusted for scroll position.\r\n * @param el - Element\r\n * @returns\r\n */\r\nfunction getCoords(el: Element): Coordinates {\r\n const rect = el.getBoundingClientRect();\r\n const { x, y } = getScrollOffset(el);\r\n return {\r\n top: rect.top + y,\r\n left: rect.left + x,\r\n width: rect.width,\r\n height: rect.height,\r\n };\r\n}\r\n\r\n/**\r\n * Returns the width/height that the element should be transitioned between.\r\n * This takes into account box-sizing.\r\n * @param el - Element being animated\r\n * @param oldCoords - Old set of Coordinates coordinates\r\n * @param newCoords - New set of Coordinates coordinates\r\n * @returns\r\n */\r\nexport function getTransitionSizes(\r\n el: Element,\r\n oldCoords: Coordinates,\r\n newCoords: Coordinates\r\n) {\r\n let widthFrom = oldCoords.width;\r\n let heightFrom = oldCoords.height;\r\n let widthTo = newCoords.width;\r\n let heightTo = newCoords.height;\r\n const styles = getComputedStyle(el);\r\n const sizing = styles.getPropertyValue(\"box-sizing\");\r\n\r\n if (sizing === \"content-box\") {\r\n const paddingY =\r\n raw(styles.paddingTop) +\r\n raw(styles.paddingBottom) +\r\n raw(styles.borderTopWidth) +\r\n raw(styles.borderBottomWidth);\r\n const paddingX =\r\n raw(styles.paddingLeft) +\r\n raw(styles.paddingRight) +\r\n raw(styles.borderRightWidth) +\r\n raw(styles.borderLeftWidth);\r\n widthFrom -= paddingX;\r\n widthTo -= paddingX;\r\n heightFrom -= paddingY;\r\n heightTo -= paddingY;\r\n }\r\n\r\n return [widthFrom, widthTo, heightFrom, heightTo].map(Math.round);\r\n}\r\n\r\n/**\r\n * Retrieves animation options for the current element.\r\n * @param el - Element to retrieve options for.\r\n * @returns\r\n */\r\nfunction getOptions(el: Element): AutoAnimateOptions | AutoAnimationPlugin {\r\n return TGT in el && options.has((el as Element & { __aa_tgt: Element })[TGT])\r\n ? options.get((el as Element & { __aa_tgt: Element })[TGT])!\r\n : { duration: 250, easing: \"ease-in-out\" };\r\n}\r\n\r\n/**\r\n * Returns the target of a given animation (generally the parent).\r\n * @param el - An element to check for a target\r\n * @returns\r\n */\r\nfunction getTarget(el: Element): Element | undefined {\r\n if (TGT in el) return (el as Element & { __aa_tgt: Element })[TGT];\r\n return undefined;\r\n}\r\n\r\n/**\r\n * Checks if animations are enabled or disabled for a given element.\r\n * @param el - Any element\r\n * @returns\r\n */\r\nfunction isEnabled(el: Element): boolean {\r\n const target = getTarget(el);\r\n return target ? enabled.has(target) : false;\r\n}\r\n\r\n/**\r\n * Iterate over the children of a given parent.\r\n * @param parent - A parent element\r\n * @param callback - A callback\r\n */\r\nfunction forEach(\r\n parent: Element,\r\n ...callbacks: Array<(el: Element, isRoot?: boolean) => void>\r\n) {\r\n callbacks.forEach((callback) => callback(parent, options.has(parent)));\r\n for (let i = 0; i < parent.children.length; i++) {\r\n const child = parent.children.item(i);\r\n if (child) {\r\n callbacks.forEach((callback) => callback(child, options.has(child)));\r\n }\r\n }\r\n}\r\n\r\n/**\r\n * Always return tuple to provide consistent interface\r\n */\r\nfunction getPluginTuple(\r\n pluginReturn: ReturnType<AutoAnimationPlugin>\r\n): [KeyframeEffect, AutoAnimationPluginOptions] | [KeyframeEffect] {\r\n if (Array.isArray(pluginReturn)) return pluginReturn;\r\n\r\n return [pluginReturn];\r\n}\r\n\r\n/**\r\n * Determine if config is plugin\r\n */\r\nfunction isPlugin(\r\n config: Partial<AutoAnimateOptions> | AutoAnimationPlugin\r\n): config is AutoAnimationPlugin {\r\n return typeof config === \"function\";\r\n}\r\n\r\n/**\r\n * The element in question is remaining in the DOM.\r\n * @param el - Element to flip\r\n * @returns\r\n */\r\nfunction remain(el: Element) {\r\n const oldCoords = coords.get(el);\r\n const newCoords = getCoords(el);\r\n if (!isEnabled(el)) return coords.set(el, newCoords);\r\n if (isOffscreen(el)) {\r\n // When element is offscreen, skip FLIP to avoid broken transforms\r\n coords.set(el, newCoords);\r\n observePosition(el);\r\n return;\r\n }\r\n let animation: Animation;\r\n if (!oldCoords) return;\r\n const pluginOrOptions = getOptions(el);\r\n if (typeof pluginOrOptions !== \"function\") {\r\n let deltaLeft = oldCoords.left - newCoords.left;\r\n let deltaTop = oldCoords.top - newCoords.top;\r\n const deltaRight =\r\n oldCoords.left + oldCoords.width - (newCoords.left + newCoords.width);\r\n const deltaBottom =\r\n oldCoords.top + oldCoords.height - (newCoords.top + newCoords.height);\r\n\r\n // element is probably anchored and doesn't need to be offset\r\n if (deltaBottom == 0) deltaTop = 0;\r\n if (deltaRight == 0) deltaLeft = 0;\r\n\r\n const [widthFrom, widthTo, heightFrom, heightTo] = getTransitionSizes(\r\n el,\r\n oldCoords,\r\n newCoords\r\n );\r\n const start: Record<string, any> = {\r\n transform: `translate(${deltaLeft}px, ${deltaTop}px)`,\r\n };\r\n const end: Record<string, any> = {\r\n transform: `translate(0, 0)`,\r\n };\r\n if (widthFrom !== widthTo) {\r\n start.width = `${widthFrom}px`;\r\n end.width = `${widthTo}px`;\r\n }\r\n if (heightFrom !== heightTo) {\r\n start.height = `${heightFrom}px`;\r\n end.height = `${heightTo}px`;\r\n }\r\n animation = el.animate([start, end], {\r\n duration: (pluginOrOptions as AutoAnimateOptions).duration,\r\n easing: (pluginOrOptions as AutoAnimateOptions).easing,\r\n });\r\n } else {\r\n const [keyframes] = getPluginTuple(\r\n pluginOrOptions(el, \"remain\", oldCoords, newCoords)\r\n );\r\n animation = new Animation(keyframes);\r\n animation.play();\r\n }\r\n animations.set(el, animation);\r\n coords.set(el, newCoords);\r\n animation.addEventListener(\"finish\", updatePos.bind(null, el, false), {\r\n once: true,\r\n });\r\n}\r\n\r\n/**\r\n * Adds the element with a transition.\r\n * @param el - Animates the element being added.\r\n */\r\nfunction add(el: Element) {\r\n if (NEW in el) delete (el as any)[NEW];\r\n const newCoords = getCoords(el);\r\n coords.set(el, newCoords);\r\n const pluginOrOptions = getOptions(el);\r\n if (!isEnabled(el)) return;\r\n if (isOffscreen(el)) {\r\n // Skip entry animation if element is not visible in viewport\r\n observePosition(el);\r\n return;\r\n }\r\n let animation: Animation;\r\n if (typeof pluginOrOptions !== \"function\") {\r\n animation = (el as HTMLElement).animate(\r\n [\r\n { transform: \"scale(.98)\", opacity: 0 },\r\n { transform: \"scale(0.98)\", opacity: 0, offset: 0.5 },\r\n { transform: \"scale(1)\", opacity: 1 },\r\n ],\r\n {\r\n duration: (pluginOrOptions as AutoAnimateOptions).duration * 1.5,\r\n easing: \"ease-in\",\r\n }\r\n );\r\n } else {\r\n const [keyframes] = getPluginTuple(pluginOrOptions(el, \"add\", newCoords));\r\n animation = new Animation(keyframes);\r\n animation.play();\r\n }\r\n animations.set(el, animation);\r\n animation.addEventListener(\"finish\", updatePos.bind(null, el, false), {\r\n once: true,\r\n });\r\n}\r\n\r\n/**\r\n * Clean up after removing an element from the dom.\r\n * @param el - Element being removed\r\n * @param styles - Optional styles that should be removed from the element.\r\n */\r\nfunction cleanUp(el: Element, styles?: Partial<CSSStyleDeclaration>) {\r\n el.remove();\r\n coords.delete(el);\r\n siblings.delete(el);\r\n animations.delete(el);\r\n intersections.get(el)?.disconnect();\r\n setTimeout(() => {\r\n if (DEL in el) delete (el as any)[DEL];\r\n Object.defineProperty(el, NEW, { value: true, configurable: true });\r\n if (styles && el instanceof HTMLElement) {\r\n for (const style in styles) {\r\n (el.style as any)[style as any] = \"\";\r\n }\r\n }\r\n }, 0);\r\n}\r\n\r\n/**\r\n * Animates the removal of an element.\r\n * @param el - Element to remove\r\n */\r\nfunction remove(el: Element) {\r\n if (!siblings.has(el) || !coords.has(el)) return;\r\n\r\n const [prev, next] = siblings.get(el)!;\r\n Object.defineProperty(el, DEL, { value: true, configurable: true });\r\n const finalX = window.scrollX;\r\n const finalY = window.scrollY;\r\n\r\n if (\r\n next &&\r\n (next.parentNode as any) &&\r\n (next.parentNode as any) instanceof Element\r\n ) {\r\n (next.parentNode as Element).insertBefore(el, next);\r\n } else if (prev && (prev.parentNode as any)) {\r\n (prev.parentNode as Element).appendChild(el);\r\n } else {\r\n getTarget(el)?.appendChild(el);\r\n }\r\n if (!isEnabled(el)) return cleanUp(el);\r\n\r\n const [top, left, width, height] = deletePosition(el);\r\n const optionsOrPlugin = getOptions(el);\r\n const oldCoords = coords.get(el)!;\r\n if (finalX !== scrollX || finalY !== scrollY) {\r\n adjustScroll(el, finalX, finalY, optionsOrPlugin);\r\n }\r\n\r\n let animation: Animation;\r\n let styleReset: Partial<CSSStyleDeclaration> = {\r\n position: \"absolute\",\r\n top: `${top}px`,\r\n left: `${left}px`,\r\n width: `${width}px`,\r\n height: `${height}px`,\r\n margin: \"0\",\r\n pointerEvents: \"none\",\r\n transformOrigin: \"center\",\r\n zIndex: \"100\",\r\n };\r\n\r\n if (!isPlugin(optionsOrPlugin)) {\r\n Object.assign((el as HTMLElement).style, styleReset);\r\n animation = (el as HTMLElement).animate(\r\n [\r\n {\r\n transform: \"scale(1)\",\r\n opacity: 1,\r\n },\r\n {\r\n transform: \"scale(.98)\",\r\n opacity: 0,\r\n },\r\n ],\r\n {\r\n duration: (optionsOrPlugin as AutoAnimateOptions).duration,\r\n easing: \"ease-out\",\r\n }\r\n );\r\n } else {\r\n const [keyframes, options] = getPluginTuple(\r\n (optionsOrPlugin as AutoAnimationPlugin)(el, \"remove\", oldCoords)\r\n );\r\n if (\r\n (options as AutoAnimationPluginOptions | undefined)?.styleReset !== false\r\n ) {\r\n styleReset =\r\n (options as AutoAnimationPluginOptions | undefined)?.styleReset ||\r\n styleReset;\r\n Object.assign((el as HTMLElement).style, styleReset);\r\n }\r\n animation = new Animation(keyframes);\r\n animation.play();\r\n }\r\n animations.set(el, animation);\r\n animation.addEventListener(\"finish\", () => cleanUp(el, styleReset), {\r\n once: true,\r\n });\r\n}\r\n\r\n/**\r\n * If the element being removed is at the very bottom of the page, and the\r\n * the page was scrolled into a space being \"made available\" by the element\r\n * that was removed, the page scroll will have jumped up some amount. We need\r\n * to offset the jump by the amount that the page was \"automatically\" scrolled\r\n * up. We can do this by comparing the scroll position before and after the\r\n * element was removed, and then offsetting by that amount.\r\n *\r\n * @param el - The element being deleted\r\n * @param finalX - The final X scroll position\r\n * @param finalY - The final Y scroll position\r\n * @param optionsOrPlugin - The options or plugin\r\n * @returns\r\n */\r\nfunction adjustScroll(\r\n el: Element,\r\n finalX: number,\r\n finalY: number,\r\n optionsOrPlugin: AutoAnimateOptions | AutoAnimationPlugin\r\n) {\r\n const scrollDeltaX = scrollX - finalX;\r\n const scrollDeltaY = scrollY - finalY;\r\n const scrollBefore = document.documentElement.style.scrollBehavior;\r\n const scrollBehavior = getComputedStyle(root).scrollBehavior;\r\n if (scrollBehavior === \"smooth\") {\r\n document.documentElement.style.scrollBehavior = \"auto\";\r\n }\r\n window.scrollTo(window.scrollX + scrollDeltaX, window.scrollY + scrollDeltaY);\r\n if (!(el as any).parentElement) return;\r\n const parent = (el as HTMLElement).parentElement!;\r\n let lastHeight = parent.clientHeight;\r\n let lastWidth = parent.clientWidth;\r\n const startScroll = performance.now();\r\n // Here we use a manual scroll animation to keep the element using the same\r\n // easing and timing as the parent’s scroll animation.\r\n function smoothScroll() {\r\n requestAnimationFrame(() => {\r\n if (!isPlugin(optionsOrPlugin)) {\r\n const deltaY = lastHeight - parent.clientHeight;\r\n const deltaX = lastWidth - parent.clientWidth;\r\n if (\r\n startScroll + (optionsOrPlugin as AutoAnimateOptions).duration >\r\n performance.now()\r\n ) {\r\n window.scrollTo({\r\n left: window.scrollX - (deltaX as number),\r\n top: window.scrollY - (deltaY as number),\r\n });\r\n lastHeight = parent.clientHeight;\r\n lastWidth = parent.clientWidth;\r\n smoothScroll();\r\n } else {\r\n document.documentElement.style.scrollBehavior = scrollBefore;\r\n }\r\n }\r\n });\r\n }\r\n smoothScroll();\r\n}\r\n\r\n/**\r\n * Determines the position of the element being removed.\r\n * @param el - The element being deleted\r\n * @returns\r\n */\r\nfunction deletePosition(\r\n el: Element\r\n): [top: number, left: number, width: number, height: number] {\r\n const oldCoords = coords.get(el)!;\r\n const [width, , height] = getTransitionSizes(el, oldCoords, getCoords(el));\r\n\r\n let offsetParent: Element | null = (el as HTMLElement).parentElement;\r\n while (\r\n offsetParent &&\r\n (getComputedStyle(offsetParent).position === \"static\" ||\r\n offsetParent instanceof HTMLBodyElement)\r\n ) {\r\n offsetParent = (offsetParent as HTMLElement).parentElement;\r\n }\r\n if (!offsetParent) offsetParent = document.body;\r\n const parentStyles = getComputedStyle(offsetParent);\r\n const parentCoords =\r\n !animations.has(el) || animations.get(el)?.playState === \"finished\"\r\n ? getCoords(offsetParent)\r\n : coords.get(offsetParent)!;\r\n\r\n const top =\r\n Math.round(oldCoords.top - parentCoords.top) -\r\n raw(parentStyles.borderTopWidth);\r\n const left =\r\n Math.round(oldCoords.left - parentCoords.left) -\r\n raw(parentStyles.borderLeftWidth);\r\n return [top, left, width, height];\r\n}\r\n\r\nexport interface AutoAnimateOptions {\r\n /**\r\n * The time it takes to run a single sequence of animations in milliseconds.\r\n */\r\n duration: number;\r\n /**\r\n * The type of easing to use.\r\n * Default: ease-in-out\r\n */\r\n easing: \"linear\" | \"ease-in\" | \"ease-out\" | \"ease-in-out\" | ({} & string);\r\n /**\r\n * Ignore a user’s \"reduce motion\" setting and enable animations. It is not\r\n * recommended to use this.\r\n */\r\n disrespectUserMotionPreference?: boolean;\r\n}\r\n\r\n/**\r\n * A custom plugin config object\r\n */\r\nexport interface AutoAnimationPluginOptions {\r\n // provide your own css styles or disable style reset\r\n styleReset: CSSStyleDeclaration | false;\r\n}\r\n\r\n/**\r\n * A custom plugin that determines what the effects to run\r\n */\r\nexport interface AutoAnimationPlugin {\r\n <T extends \"add\" | \"remove\" | \"remain\">(\r\n el: Element,\r\n action: T,\r\n newCoordinates?: T extends \"add\" | \"remain\" | \"remove\"\r\n ? Coordinates\r\n : undefined,\r\n oldCoordinates?: T extends \"remain\" ? Coordinates : undefined\r\n ): KeyframeEffect | [KeyframeEffect, AutoAnimationPluginOptions];\r\n}\r\n\r\n/**\r\n * A function that automatically adds animation effects to itself and its\r\n * immediate children. Specifically it adds effects for adding, moving, and\r\n * removing DOM elements.\r\n * @param el - A parent element to add animations to.\r\n * @param options - An optional object of options.\r\n */\r\nexport default function autoAnimate(\r\n el: HTMLElement,\r\n config: Partial<AutoAnimateOptions> | AutoAnimationPlugin = {}\r\n): AnimationController {\r\n if (supportedBrowser && resize) {\r\n const mediaQuery = window.matchMedia(\"(prefers-reduced-motion: reduce)\");\r\n const isDisabledDueToReduceMotion =\r\n mediaQuery.matches &&\r\n !isPlugin(config) &&\r\n !(config as Partial<AutoAnimateOptions>).disrespectUserMotionPreference;\r\n if (!isDisabledDueToReduceMotion) {\r\n enabled.add(el);\r\n if (getComputedStyle(el).position === \"static\") {\r\n Object.assign(el.style, { position: \"relative\" });\r\n }\r\n forEach(el, updatePos, poll, (element) => resize?.observe(element));\r\n if (isPlugin(config)) {\r\n options.set(el, config as AutoAnimationPlugin);\r\n } else {\r\n options.set(el, {\r\n duration: 250,\r\n easing: \"ease-in-out\",\r\n ...(config as Partial<AutoAnimateOptions>),\r\n });\r\n }\r\n const mo = new MutationObserver(handleMutations);\r\n mo.observe(el, { childList: true });\r\n mutationObservers.set(el, mo);\r\n parents.add(el);\r\n }\r\n }\r\n const controller: AnimationController = Object.freeze({\r\n parent: el,\r\n enable: () => {\r\n enabled.add(el);\r\n },\r\n disable: () => {\r\n enabled.delete(el);\r\n // Cancel any in-flight animations and pending timers for immediate effect\r\n forEach(el, (node) => {\r\n const a = animations.get(node);\r\n try {\r\n a?.cancel();\r\n } catch {}\r\n animations.delete(node);\r\n const d = debounces.get(node);\r\n if (d) clearTimeout(d);\r\n debounces.delete(node);\r\n const i = intervals.get(node);\r\n if (i) clearInterval(i);\r\n intervals.delete(node);\r\n });\r\n },\r\n isEnabled: () => enabled.has(el),\r\n destroy: () => {\r\n enabled.delete(el);\r\n parents.delete(el);\r\n options.delete(el);\r\n const mo = mutationObservers.get(el);\r\n mo?.disconnect();\r\n mutationObservers.delete(el);\r\n forEach(el, (node) => {\r\n // unobserve resize\r\n resize?.unobserve(node);\r\n // cancel animations\r\n const a = animations.get(node);\r\n try {\r\n a?.cancel();\r\n } catch {}\r\n animations.delete(node);\r\n // disconnect observers\r\n const io = intersections.get(node);\r\n io?.disconnect();\r\n intersections.delete(node);\r\n // clear intervals and debounces\r\n const i = intervals.get(node);\r\n if (i) clearInterval(i);\r\n intervals.delete(node);\r\n const d = debounces.get(node);\r\n if (d) clearTimeout(d);\r\n debounces.delete(node);\r\n // clear state\r\n coords.delete(node);\r\n siblings.delete(node);\r\n });\r\n },\r\n });\r\n return controller;\r\n}\r\n\r\n// Also provide a named export for environments expecting it\r\nexport { autoAnimate };\r\n\r\n/**\r\n * The vue directive.\r\n */\r\n// export const vAutoAnimate = {\r\n// mounted: (\r\n// el: HTMLElement,\r\n// binding: {\r\n// value: Partial<AutoAnimateOptions> | AutoAnimationPlugin | undefined;\r\n// }\r\n// ) => {\r\n// const ctl = autoAnimate(el, binding.value || {});\r\n// Object.defineProperty(el, \"__aa_ctl\", { value: ctl, configurable: true });\r\n// },\r\n// unmounted: (el: HTMLElement) => {\r\n// const ctl = (el as any)[\"__aa_ctl\"] as AnimationController | undefined;\r\n// ctl?.destroy?.();\r\n// try {\r\n// delete (el as any)[\"__aa_ctl\"];\r\n// } catch {}\r\n// },\r\n// getSSRProps: () => ({}),\r\n// };\r\n","import { useEffect, useRef, useState } from \"react\";\r\nimport { Button, Switch } from \".\";\r\nimport { cn } from \"../utils\";\r\nimport { Plus, X } from \"lucide-react\";\r\nimport autoAnimate from \"../utils/auto-animate\";\r\n\r\nconst days = [\r\n \"Lunes\",\r\n \"Martes\",\r\n \"Miercoles\",\r\n \"Jueves\",\r\n \"Viernes\",\r\n \"Sábado\",\r\n \"Domingo\",\r\n];\r\n\r\nexport const FormWorkingHours = () => {\r\n return <WorkingHours />;\r\n};\r\n\r\nconst WorkingHours = () => {\r\n return (\r\n <div>\r\n {days.map((day) => {\r\n return <Day key={day} day={day} />;\r\n })}\r\n </div>\r\n );\r\n};\r\n\r\nconst Day = ({ day }: { day: string }) => {\r\n const [active, setActive] = useState(false);\r\n const ref = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n autoAnimate(ref.current);\r\n }, []);\r\n return (\r\n <div\r\n key={day}\r\n ref={ref}\r\n className={cn(\"p-2 rounded-xl mt-2\", {\r\n \"border border-uielborder\": active,\r\n \"bg-uielbg border border-transparent\": !active,\r\n })}\r\n >\r\n <div className=\"flex items-center justify-between\">\r\n <p>{day}</p>\r\n <Switch\r\n className=\"mt-0\"\r\n checked={active}\r\n onCheckedChange={(checked) => setActive(checked)}\r\n />\r\n </div>\r\n {active ? <HourPicker /> : null}\r\n </div>\r\n );\r\n};\r\n\r\nconst HourPicker = () => {\r\n const [hours, setHours] = useState([\r\n { from: \"08:00\", to: \"12:00\" },\r\n { from: \"14:00\", to: \"18:00\" },\r\n ]);\r\n const ref = useRef<HTMLDivElement>(null);\r\n useEffect(() => {\r\n if (!ref.current) return;\r\n autoAnimate(ref.current);\r\n }, []);\r\n return (\r\n <div ref={ref}>\r\n {hours.map((hour, hourIdx) => (\r\n <div\r\n key={`${hour.from}${hourIdx}`}\r\n className=\"flex items-center justify-between mt-2\"\r\n >\r\n <p className=\"text-sm text-secondarytext\">De</p>\r\n <Button color=\"solid\" className=\"w-24\">\r\n {hour.from}\r\n </Button>\r\n <p className=\"text-sm text-secondarytext mx-1\">a</p>\r\n <Button color=\"solid\" className=\"w-24\">\r\n {hour.to}\r\n </Button>\r\n {/* <p className=\"grow\"></p> */}\r\n {/* <IconButton\r\n icon={vantageIcons.x}\r\n color=\"solid\"\r\n className=\"rounded-lg\"\r\n /> */}\r\n <Button className=\"rounded-full\">\r\n <X className=\"text-secondarytext\" size={20} />\r\n </Button>\r\n {/* De: {hour.from} a {hour.to} */}\r\n </div>\r\n ))}\r\n <Button\r\n onClick={() =>\r\n setHours((prev) => {\r\n return [...prev, { from: \"19:00\", to: \"21:00\" }];\r\n })\r\n }\r\n className=\"w-full mt-4\"\r\n color=\"contrast\"\r\n >\r\n <Plus className=\"stroke-1\" />\r\n Añadir hora\r\n </Button>\r\n </div>\r\n );\r\n};\r\n"],"names":["cn","inputs","twMerge","clsx","throttle","func","limit","lastRan","timeout","args","now","debounce","delay","generateInitials","name","words","setFocusEnd","element","length","removeWhitespaces","text","toTitleCase","str","word","firstChar","restOfWord","nullRead","nullSet","extractDirtyData","data","dirtyFields","staticFields","result","field","key","FocusTrap","container","event","focusableElements","firstFocusable","lastFocusable","checkOverflow","horizontal","vertical","maxScrollLeft","maxScrollTop","useOverflow","onOverflow","trackScroll","withObserver","enabled","deps","ref","useRef","useEffect","initialOverflow","throttledUpdate","info","observer","scrollElement","useOverflowState","overflowInfo","setOverflowInfo","useState","sizes","Avatar","src","size","className","jsx","jsxs","Icon","AvatarsGroup","children","animate","props","f","s","largeAtom","atom","listening","handleResize","useLargeScreen","useLayoutEffect","useAtomValue","useMergedRef","refs","value","useRipple","contrastRipple","lg","ripple","useCallback","button","buttonRect","rippleSize","offsetX","offsetY","rippleWrapper","rippleEl","ripples","usePopover","scrollerId","align","side","offset","collisionPadding","avoidCollisions","closeOnScroll","onOpen","onClose","open","setOpen","popoverDimensions","setPopoverDimensions","triggerRef","popoverRef","triggerRectRef","scrollerRef","triggerId","useId","getPopoverPosition","customRect","rect","popoverWidth","popoverHeight","calculatePopoverPosition","updatePopoverDimensions","handleScroll","toggle","prev","close","triggerRect","viewport","x","y","rightSideX","leftSideX","rightOverflow","leftOverflow","spaceBelow","spaceAbove","spaceRight","spaceLeft","centeredX","top","bottom","useClickAway","callback","handleClickAway","useClickAwayAdvanced","options","events","excludeRefs","handleClick","target","excludeRef","eventName","useClickAwayWithRef","useKeyListener","keyMap","keyMapRef","handleKeyEvent","e","baseStyles","sizeStyles","focusStyles","fontWeightStyles","borderRadiusStyles","colorStyles","stateStyles","Button","forwardRef","color","fontWeight","rounded","state","onClick","withRipple","showFocus","withDisabledDelay","type","others","forwardedRef","disabledDelay","setDisabledDelay","rippleRef","millisecondsInWeek","millisecondsInDay","constructFromSymbol","constructFrom","date","toDate","argument","context","addMonths","amount","_date","dayOfMonth","endOfDesiredMonth","daysInMonth","defaultOptions","getDefaultOptions","startOfWeek","weekStartsOn","day","diff","startOfISOWeek","getISOWeekYear","year","fourthOfJanuaryOfNextYear","startOfNextYear","fourthOfJanuaryOfThisYear","startOfThisYear","getTimezoneOffsetInMilliseconds","utcDate","normalizeDates","dates","normalize","startOfDay","differenceInCalendarDays","laterDate","earlierDate","laterDate_","earlierDate_","laterStartOfDay","earlierStartOfDay","laterTimestamp","earlierTimestamp","startOfISOWeekYear","fourthOfJanuary","isSameDay","dateLeft_","dateRight_","isDate","isValid","endOfMonth","month","normalizeInterval","interval","start","end","eachDayOfInterval","reversed","endTime","step","startOfMonth","startOfYear","date_","formatDistanceLocale","formatDistance","token","count","tokenValue","buildFormatLongFn","width","dateFormats","timeFormats","dateTimeFormats","formatLong","formatRelativeLocale","formatRelative","_baseDate","_options","buildLocalizeFn","valuesArray","defaultWidth","index","eraValues","quarterValues","monthValues","dayValues","dayPeriodValues","formattingDayPeriodValues","ordinalNumber","dirtyNumber","number","rem100","localize","quarter","buildMatchFn","string","matchPattern","matchResult","matchedString","parsePatterns","findIndex","pattern","findKey","rest","object","predicate","array","buildMatchPatternFn","parseResult","matchOrdinalNumberPattern","parseOrdinalNumberPattern","matchEraPatterns","parseEraPatterns","matchQuarterPatterns","parseQuarterPatterns","matchMonthPatterns","parseMonthPatterns","matchDayPatterns","parseDayPatterns","matchDayPeriodPatterns","parseDayPeriodPatterns","match","enUS","getDayOfYear","getISOWeek","getWeekYear","firstWeekContainsDate","firstWeekOfNextYear","firstWeekOfThisYear","startOfWeekYear","firstWeek","getWeek","addLeadingZeros","targetLength","sign","output","lightFormatters","signedYear","dayPeriodEnumValue","numberOfDigits","milliseconds","fractionalSeconds","dayPeriodEnum","formatters","era","signedWeekYear","weekYear","twoDigitYear","isoWeekYear","week","isoWeek","dayOfYear","dayOfWeek","localDayOfWeek","isoDayOfWeek","hours","_localize","timezoneOffset","formatTimezoneWithOptionalMinutes","formatTimezone","formatTimezoneShort","timestamp","delimiter","absOffset","minutes","dateLongFormatter","timeLongFormatter","dateTimeLongFormatter","datePattern","timePattern","dateTimeFormat","longFormatters","dayOfYearTokenRE","weekYearTokenRE","throwTokens","isProtectedDayOfYearToken","isProtectedWeekYearToken","warnOrThrowProtectedError","format","input","_message","message","subject","formattingTokensRegExp","longFormattingTokensRegExp","escapedStringRegExp","doubleQuoteRegExp","unescapedLatinCharacterRegExp","formatStr","locale","defaultLocale","originalDate","parts","substring","firstCharacter","longFormatter","cleanEscapedString","formatterOptions","part","formatter","matched","isSameMonth","subMonths","formatRelativeLocalePlural","es","$f0a04ccd8dbdd83b$export$e5c5a5f917a5871c","$HgANd$react","$431fbd86ca7dc216$export$b204af158042fbac","el","_el_ownerDocument","$431fbd86ca7dc216$export$f21a1ffae260145a","$431fbd86ca7dc216$var$isNode","$431fbd86ca7dc216$export$af51f0f06c0f328a","node","$f4e2df6bd15f8569$var$_shadowDOM","$f4e2df6bd15f8569$export$98658e8c59125e6a","$d4ee10de306f2510$export$4282f70798064fe0","otherNode","$lcSu5$shadowDOM","currentNode","$d4ee10de306f2510$export$cd4e5573fbe2b576","doc","_activeElement_shadowRoot","activeElement","$d4ee10de306f2510$export$e58f029f0fbfdb29","$dfc540311bf7f109$export$63eb3ababa9c55c4","walkers","curNode","currentWalkerCurrentNode","shadowRoot","walker","newNode","nextNode","_this_filter","nodeResult","currentWalker","previousNode","root","whatToShow","filter","$dfc540311bf7f109$export$4d0f8be8b12a7ef6","$bJKXg$shadowDOM","$7215afc6de606d6b$export$de79e2c695e052f3","$7215afc6de606d6b$var$supportsPreventScroll","scrollableElements","$7215afc6de606d6b$var$getScrollableElements","$7215afc6de606d6b$var$restoreScrollPosition","$7215afc6de606d6b$var$supportsPreventScrollCached","parent","rootScrollingElement","scrollTop","scrollLeft","$c87311424ea30a05$var$testUserAgent","re","_window_navigator_userAgentData","brands","brand","$c87311424ea30a05$var$testPlatform","$c87311424ea30a05$var$cached","fn","res","$c87311424ea30a05$export$9ac100e40613ea10","$c87311424ea30a05$export$186c6964ca17d99","$c87311424ea30a05$export$7bef049ce92e4224","$c87311424ea30a05$export$fedb369cb70207f1","$c87311424ea30a05$export$6446a186d09e379e","$c87311424ea30a05$export$a11b0059900ceec8","$bbed8b41f857bcc0$var$transitionsByElement","$bbed8b41f857bcc0$var$transitionCallbacks","$bbed8b41f857bcc0$var$setupGlobalEvents","isTransitionEvent","onTransitionStart","transitions","onTransitionEnd","properties","cb","$bbed8b41f857bcc0$var$cleanupDetachedElements","eventTarget","$bbed8b41f857bcc0$export$24490316f764c430","$6a7db85432448f7f$export$60278871457622de","$7d2416ea0959daaa$var$supportsCheckVisibility","$7d2416ea0959daaa$var$isStyleVisible","windowObject","display","visibility","isVisible","getComputedStyle","computedDisplay","computedVisibility","$7d2416ea0959daaa$var$isAttributeVisible","childElement","$7d2416ea0959daaa$export$e989c0fffaa6b27a","$b4b717babfbb907b$var$focusableElements","$b4b717babfbb907b$var$FOCUSABLE_ELEMENT_SELECTOR","$b4b717babfbb907b$var$TABBABLE_ELEMENT_SELECTOR","$b4b717babfbb907b$export$4c063cf1350e6fed","$b4b717babfbb907b$var$isInert","$b4b717babfbb907b$export$bebd5a1431fec25d","$8a9cb279dc87e130$export$fda7da73ab5d4c48","$507fabe10e71c6fb$var$currentModality","$507fabe10e71c6fb$var$changeHandlers","$507fabe10e71c6fb$export$d90243b58daecda7","$507fabe10e71c6fb$var$hasEventBeforeFocus","$507fabe10e71c6fb$var$hasBlurredWindowRecently","$507fabe10e71c6fb$var$triggerChangeHandlers","modality","handler","$507fabe10e71c6fb$var$isValidKey","$28AnR$isMac","$507fabe10e71c6fb$var$handleKeyboardEvent","$507fabe10e71c6fb$var$handlePointerEvent","$507fabe10e71c6fb$var$handleClickEvent","$28AnR$isVirtualClick","$507fabe10e71c6fb$var$handleFocusEvent","$507fabe10e71c6fb$var$handleWindowBlur","$507fabe10e71c6fb$var$setupGlobalFocusEvents","$28AnR$getOwnerWindow","documentObject","$28AnR$getOwnerDocument","focus","$507fabe10e71c6fb$var$tearDownWindowFocusTracking","loadListener","$507fabe10e71c6fb$export$2f1888112f558a7d","$507fabe10e71c6fb$export$630ff653c5ada6a9","$3ad3f6e1647bc98d$export$80f3e147d781571c","ownerDocument","$k50bp$getOwnerDocument","$k50bp$getActiveElement","lastFocusedElement","$k50bp$runAfterTransition","$k50bp$focusWithoutScrolling","$9bf71ea28793e738$var$FocusContext","$cgawC$react","$9bf71ea28793e738$var$RESTORE_FOCUS_EVENT","$9bf71ea28793e738$var$activeScope","$9bf71ea28793e738$export$20e40289641fbbb6","contain","restoreFocus","autoFocus","startRef","$cgawC$useRef","endRef","scopeRef","parentNode","$cgawC$useContext","$cgawC$useMemo","$9bf71ea28793e738$var$TreeNode","$cgawC$useLayoutEffect","$9bf71ea28793e738$export$d06fae2ee68b101e","$9bf71ea28793e738$var$isAncestorScope","activeNode","_startRef_current","nodes","stopPropagation","$9bf71ea28793e738$var$useActiveScopeTracker","$9bf71ea28793e738$var$useFocusContainment","$9bf71ea28793e738$var$useRestoreFocus","$9bf71ea28793e738$var$useAutoFocus","$cgawC$useEffect","$cgawC$getActiveElement","$cgawC$getOwnerDocument","scope","$9bf71ea28793e738$var$isElementInScope","_focusScopeTree_getTreeNode_parent","_focusScopeTree_getTreeNode","_focusScopeTree_getTreeNode_parent_scopeRef","parentScope","focusManager","$9bf71ea28793e738$var$createFocusManagerForScope","opts","from","tabbable","wrap","accept","_scope_","sentinel","scopeRoot","$9bf71ea28793e738$var$getScopeRoot","$9bf71ea28793e738$export$2d6ec8fc375ceafa","$9bf71ea28793e738$var$focusElement","$9bf71ea28793e738$var$shouldContainFocus","$9bf71ea28793e738$var$isTabbableRadio","radios","radio","_element_form_elements","_element_form","radioList","focusedNode","raf","onKeyDown","focusedElement","nextElement","onFocus","$cgawC$getEventTarget","$9bf71ea28793e738$var$isElementInChildScope","$9bf71ea28793e738$var$focusFirstInScope","onBlur","$cgawC$getInteractionModality","shouldSkipFocusRestore","$cgawC$isAndroid","$cgawC$isChrome","_focusedNode_current","$9bf71ea28793e738$var$isElementInAnyScope","ancestor","scroll","$cgawC$focusSafely","$9bf71ea28793e738$var$getFirstInScope","autoFocusRef","restore","$9bf71ea28793e738$var$shouldRestoreFocus","nodeToRestoreRef","treeNode","nodeToRestore","_nodeToRestoreRef_current","clonedTree","$9bf71ea28793e738$var$restoreFocusToElement","$cgawC$isTabbable","$cgawC$isFocusable","rootElement","$cgawC$createShadowTreeWalker","_opts_from","$9bf71ea28793e738$var$Tree","current","child","_node_parent","newTree","_node_parent_scopeRef","Portal","createPortal","PopoverCard","customTrigger","triggerContent","triggerClassName","closeOnEscape","closeOnClickAway","maxHeight","minWidth","maxWidth","triggerProps","position","Fragment","AnimatePresence","FocusScope","motion","PopoverCardHeader","title","subtitle","PopoverCardContent","PopoverCardFooter","getWeekDayNames","weekStartsOnMonday","baseDate","weekdays","i","Calendar","selectedDate","onDateSelect","disabledDates","disabledDaysOfWeek","minDate","maxDate","currentMonth","setCurrentMonth","focusedDate","setFocusedDate","calendarRef","disabledDateSet","useMemo","dateStr","disabledDaysSet","calendarDays","monthStart","monthEnd","startDate","endDate","daysFromMonday","endDayOfWeek","daysToSunday","weekDays","isDateEnabled","handleDateClick","handleKeyDown","newFocusedDate","shouldPreventDefault","currentDay","navigateMonth","direction","ChevronLeft","ChevronRight","isCurrentMonth","isSelected","isFocused","isEnabled","isToday","DatePickerDemo","setSelectedDate","DatePickerPopover","CalendarDays","TimePicker","Clock","DateTimePicker","colorClasses","Checkbox","checked","onCheckedChange","disabled","required","id","sizeClasses","iconSizes","Check","Minus","$constructor","initializer","params","init","inst","def","_a","k","_","Parent","Definition","$ZodAsyncError","globalConfig","config","newConfig","jsonStringifyReplacer","captureStackTrace","_args","unwrapMessage","finalizeIssue","iss","ctx","full","util.jsonStringifyReplacer","$ZodError","$ZodRealError","_parse","_Err","schema","_ctx","_params","core.$ZodAsyncError","util.finalizeIssue","core.config","util.captureStackTrace","parse","errors.$ZodRealError","_parseAsync","parseAsync","t","r","o","u","c","a","n","n.parse","n.parseAsync","n.$ZodError","Form","methods","onSubmit","onError","logErrors","FormProvider","errors","useMethods","defaultValues","useForm","zodResolver","strokeWidth","viewBox","inputColors","focusColors","Input","label","description","labelPosition","focusColor","placeholder","valid","error","errorMessage","isPrice","prefix","wrapperClassName","containerClassName","innerRef","mounted","showPassword","setShowPassword","setIsFocused","isPassword","inputType","hasValue","DollarSign","CheckIcon","EyeOffIcon","Eye","FormInput","customRead","customSet","withNullSet","control","useFormContext","readValue","setValue","Controller","fieldState","AliveScopeContext","createContext","AliveScopeProvider","useAliveScope","useContext","AliveScope","setNodes","onMountCallbacks","onDropCallbacks","getPortalElement","prevNodes","dropPortalElement","copy","Component","KeepAliveContext","KeepAliveProvider","memo","onKeepAliveMount","runCallback","_mutations","obs","onKeepAliveDrop","useKeepAlive","KeepAlive","aliveKey","keepAliveRef","List","lightSolid","ListItem","MultiSelect","selectedValues","onChange","idExtractor","labelExtractor","customSetter","maxSelections","searchable","searchValue","setSearchValue","focusedOptionIndex","setFocusedOptionIndex","inputRef","containerRef","optionRefs","inputId","labelId","errorId","listboxId","displayValues","storedValue","option","filteredOptions","selected","handleToggleOption","newValues","optionId","announceChange","handleRemoveValue","valueToRemove","valueId","nextIndex","prevIndex","lastValue","handleSearchChange","handleContainerClick","XIcon","ChevronDownIcon","focused","FormMultiSelect","values","titleSizes","PageTitle","descriptionClassName","SearchInput","exposedRef","onClear","onMount","mergedRef","mountRef","callOnMount","Search","X","SeeMoreText","buttonClassName","seeMore","setSeeMore","canSeeMore","displayText","scrollByAmount","multiplier","speed","isVertical","startScroll","maxScroll","scrollAmount","targetScroll","speedMap","progress","scrollTo","TRANSITION_EASES","FADE_IN","segmentedControlStyles","SegmentedControl","keyExtractor","itemColor","itemClassName","unselectedColor","border","indicators","setIndicators","Separator","Spinner","loading","spinnerClassName","FormSubmit","isEditable","isDeletable","createUpdateLoading","deleteLoading","onDelete","onDeleteConfirm","addText","updateText","deleteText","confirm","setConfirm","Plus","ModalsContext","ModalsProvider","debug","modalsRef","add","remove","modalId","getPrevId","prevId","animateParentModal","mode","restoreParentModal","getModals","useModals","SuperModal","showHeader","onReplace","contentClassName","initialChangeEvent","useInitialChangeEvent","parentModal","modals","prevPath","useRoute","asModal","prevModalId","navigate","Switch","Tags","variant","tags","maxTags","validateTag","inputValue","setInputValue","localError","setLocalError","tagRefs","newTag","validationResult","removedTag","handleTagKeyDown","tagIndex","newTags","handleRemoveTag","tagToRemove","tag","handleInputChange","FormTags","TextArea","rows","FormTextArea","parents","coords","siblings","animations","intersections","mutationObservers","intervals","debounces","scrollX","scrollY","TGT","DEL","NEW","handleMutations","mutations","elements","getElements","handleResizes","entries","entry","updateAllPos","updatePos","isOffscreen","vw","vh","observePosition","invocations","buffer","getCoords","offsetWidth","offsetHeight","rootMargin","px","optionsOrPlugin","getOptions","isPlugin","currentAnimation","forEach","lowPriority","poll","resize","supportedBrowser","mutation","isMounted","preExisting","remain","raw","getScrollOffset","p","getTransitionSizes","oldCoords","newCoords","widthFrom","heightFrom","widthTo","heightTo","styles","paddingY","paddingX","getTarget","callbacks","getPluginTuple","pluginReturn","animation","pluginOrOptions","deltaLeft","deltaTop","deltaRight","keyframes","cleanUp","style","next","finalX","finalY","left","height","deletePosition","adjustScroll","styleReset","scrollDeltaX","scrollDeltaY","scrollBefore","lastHeight","lastWidth","smoothScroll","deltaY","deltaX","offsetParent","parentStyles","parentCoords","autoAnimate","mo","d","days","FormWorkingHours","WorkingHours","Day","active","setActive","HourPicker","setHours","hour","hourIdx"],"mappings":"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","x_google_ignoreList":[6,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54,55,56,57,58,59,60,61,62,63,64,65,66,67,68,69,70,71,72,73,74,75,76,77,78,83,84,85,86,87]}
|