@fdls/file-viewer 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1 @@
1
+ {"version":3,"sources":["../src/features/file-viewer/primitives/as-child.ts","../src/features/file-viewer/components/icons/icon.tsx","../src/features/file-viewer/components/icons/X.tsx","../src/features/file-viewer/components/icons/Download.tsx","../src/features/file-viewer/components/icons/Printer.tsx","../src/features/file-viewer/components/icons/Maximize2.tsx","../src/features/file-viewer/components/icons/LoaderCircle.tsx","../src/features/file-viewer/components/icons/ChevronLeft.tsx","../src/features/file-viewer/components/icons/ChevronRight.tsx","../src/features/file-viewer/components/icons/ZoomIn.tsx","../src/features/file-viewer/components/icons/ZoomOut.tsx","../src/features/file-viewer/components/icons/Scan.tsx","../src/features/file-viewer/components/icons/index.ts","../src/features/file-viewer/utils/deep-partial.ts","../src/features/file-viewer/utils/merge-slot-props.ts","../src/features/file-viewer/config.ts","../src/features/file-viewer/primitives/compute-tooltip-placement.ts","../src/features/file-viewer/primitives/tooltip.tsx","../src/features/file-viewer/components/FileViewerTooltip.tsx","../src/features/file-viewer/translations.ts","../src/features/file-viewer/utils/resolve-options.ts","../src/features/file-viewer/primitives/scroll-area-math.ts","../src/features/file-viewer/primitives/scroll-area.tsx","../src/features/file-viewer/pdf-viewer.css","../src/features/file-viewer/components/ViewerToolbar.tsx","../src/features/file-viewer/hooks/useAutoHide.ts","../src/features/file-viewer/PdfViewer.tsx","../src/features/file-viewer/utils/zoom-utils.ts","../src/features/file-viewer/utils/image-viewport-clamp.ts","../src/features/file-viewer/ImageViewer.tsx","../src/features/file-viewer/hooks/useFocusTrap.ts","../src/features/file-viewer/primitives/dialog.tsx","../src/features/file-viewer/FileViewer.tsx","../src/features/file-viewer/utils/file-actions.ts","../src/features/file-viewer/index.ts","../src/features/file-viewer/configure-pdf-worker.ts"],"names":["jsx","jsxs","useContext","useRef","useEffect","useId","createPortal","createContext","assignRef","mergeRefs","useState","useCallback","forwardRef","props","Fragment","isValidElement"],"mappings":"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","file":"index.js","sourcesContent":["import {\n cloneElement,\n isValidElement,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react'\n\nfunction assignRef<T>(ref: Ref<T> | undefined, value: T): void {\n if (typeof ref === 'function') {\n ref(value)\n return\n }\n if (ref && typeof ref === 'object') {\n ;(ref as React.MutableRefObject<T>).current = value\n }\n}\n\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>): (value: T) => void {\n return (value: T) => {\n refs.forEach((ref) => assignRef(ref, value))\n }\n}\n\nexport function renderAsChild(\n asChild: boolean | undefined,\n child: ReactNode,\n props: Record<string, unknown>,\n): ReactNode {\n if (!asChild) {\n return child\n }\n\n if (!isValidElement(child)) {\n return child\n }\n\n const element = child as ReactElement<{\n className?: string\n style?: React.CSSProperties\n onClick?: (event: MouseEvent) => void\n ref?: Ref<HTMLElement>\n }>\n\n const mergedClassName = [props.className, element.props.className]\n .filter(Boolean)\n .join(' ')\n\n const mergedStyle = {\n ...(props.style as React.CSSProperties | undefined),\n ...element.props.style,\n }\n\n const propsOnClick = props.onClick as ((event: MouseEvent) => void) | undefined\n const propsRef = props.ref as Ref<HTMLElement> | undefined\n\n return cloneElement(element, {\n ...props,\n ...element.props,\n className: mergedClassName || undefined,\n style: Object.keys(mergedStyle).length > 0 ? mergedStyle : undefined,\n ref: mergeRefs(propsRef, element.props.ref),\n onClick: (event: MouseEvent) => {\n propsOnClick?.(event)\n element.props.onClick?.(event)\n },\n })\n}\n","import type { ReactNode, SVGProps } from 'react'\n\nexport type IconProps = SVGProps<SVGSVGElement>\n\nconst ICON_DEFAULTS = {\n xmlns: 'http://www.w3.org/2000/svg',\n width: 24,\n height: 24,\n viewBox: '0 0 24 24',\n fill: 'none',\n stroke: 'currentColor',\n strokeWidth: 2,\n strokeLinecap: 'round' as const,\n strokeLinejoin: 'round' as const,\n}\n\nexport function IconBase({ children, ...props }: IconProps & { children: ReactNode }) {\n return <svg {...ICON_DEFAULTS} {...props}>{children}</svg>\n}\n","import { IconBase, type IconProps } from './icon'\n\nexport function X(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M18 6 6 18\" />\n <path d=\"m6 6 12 12\" />\n </IconBase>\n )\n}\n","import { IconBase, type IconProps } from './icon'\n\nexport function Download(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M21 15v4a2 2 0 0 1-2 2H5a2 2 0 0 1-2-2v-4\" />\n <polyline points=\"7 10 12 15 17 10\" />\n <line x1=\"12\" x2=\"12\" y1=\"15\" y2=\"3\" />\n </IconBase>\n )\n}\n","import { IconBase, type IconProps } from './icon'\n\nexport function Printer(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M6 18H4a2 2 0 0 1-2-2v-5a2 2 0 0 1 2-2h16a2 2 0 0 1 2 2v5a2 2 0 0 1-2 2h-2\" />\n <path d=\"M6 9V3a1 1 0 0 1 1-1h10a1 1 0 0 1 1 1v6\" />\n <rect x=\"6\" y=\"14\" width=\"12\" height=\"8\" rx=\"1\" />\n </IconBase>\n )\n}\n","import { IconBase, type IconProps } from './icon'\n\nexport function Maximize2(props: IconProps) {\n return (\n <IconBase {...props}>\n <polyline points=\"15 3 21 3 21 9\" />\n <polyline points=\"9 21 3 21 3 15\" />\n <line x1=\"21\" x2=\"14\" y1=\"3\" y2=\"10\" />\n <line x1=\"3\" x2=\"10\" y1=\"21\" y2=\"14\" />\n </IconBase>\n )\n}\n","import { IconBase, type IconProps } from './icon'\n\nexport function LoaderCircle(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M21 12a9 9 0 1 1-6.219-8.56\" />\n </IconBase>\n )\n}\n","import { IconBase, type IconProps } from './icon'\n\nexport function ChevronLeft(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m15 18-6-6 6-6\" />\n </IconBase>\n )\n}\n","import { IconBase, type IconProps } from './icon'\n\nexport function ChevronRight(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"m9 18 6-6-6-6\" />\n </IconBase>\n )\n}\n","import { IconBase, type IconProps } from './icon'\n\nexport function ZoomIn(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" x2=\"16.65\" y1=\"21\" y2=\"16.65\" />\n <line x1=\"11\" x2=\"11\" y1=\"8\" y2=\"14\" />\n <line x1=\"8\" x2=\"14\" y1=\"11\" y2=\"11\" />\n </IconBase>\n )\n}\n","import { IconBase, type IconProps } from './icon'\n\nexport function ZoomOut(props: IconProps) {\n return (\n <IconBase {...props}>\n <circle cx=\"11\" cy=\"11\" r=\"8\" />\n <line x1=\"21\" x2=\"16.65\" y1=\"21\" y2=\"16.65\" />\n <line x1=\"8\" x2=\"14\" y1=\"11\" y2=\"11\" />\n </IconBase>\n )\n}\n","import { IconBase, type IconProps } from './icon'\n\nexport function Scan(props: IconProps) {\n return (\n <IconBase {...props}>\n <path d=\"M3 7V5a2 2 0 0 1 2-2h2\" />\n <path d=\"M17 3h2a2 2 0 0 1 2 2v2\" />\n <path d=\"M21 17v2a2 2 0 0 1-2 2h-2\" />\n <path d=\"M7 21H5a2 2 0 0 1-2-2v-2\" />\n </IconBase>\n )\n}\n","export { X } from './X'\nexport { Download } from './Download'\nexport { Printer } from './Printer'\nexport { Maximize2 } from './Maximize2'\nexport { LoaderCircle } from './LoaderCircle'\nexport { ChevronLeft } from './ChevronLeft'\nexport { ChevronRight } from './ChevronRight'\nexport { ZoomIn } from './ZoomIn'\nexport { ZoomOut } from './ZoomOut'\nexport { Scan } from './Scan'\nexport { FileText } from './FileText'\nexport { FileImage } from './FileImage'\nexport { FileQuestion } from './FileQuestion'\n","export type DeepPartial<T> = T extends (...args: never[]) => unknown\n ? T\n : T extends object\n ? { [K in keyof T]?: DeepPartial<T[K]> }\n : T\n\nexport function deepMergePartial<T extends object>(\n base: T,\n patch: DeepPartial<T> | undefined,\n): T {\n if (!patch) {\n return { ...base }\n }\n\n const result = { ...base }\n const patchRecord = patch as Record<string, unknown>\n const resultRecord = result as Record<string, unknown>\n const baseRecord = base as Record<string, unknown>\n\n for (const key of Object.keys(patchRecord)) {\n const patchValue = patchRecord[key]\n if (patchValue === undefined) {\n continue\n }\n\n const baseValue = baseRecord[key]\n\n if (\n typeof patchValue === 'object' &&\n patchValue !== null &&\n !Array.isArray(patchValue) &&\n typeof baseValue === 'object' &&\n baseValue !== null &&\n !Array.isArray(baseValue)\n ) {\n resultRecord[key] = deepMergePartial(\n baseValue as object,\n patchValue as DeepPartial<object>,\n )\n continue\n }\n\n resultRecord[key] = patchValue\n }\n\n return result\n}\n","import type { CSSProperties } from 'react'\n\nexport function mergeClassNames(\n ...classNames: (string | undefined)[]\n): string {\n return classNames.filter(Boolean).join(' ')\n}\n\nexport function mergeStyles(\n ...styles: (CSSProperties | undefined)[]\n): CSSProperties {\n return Object.assign({}, ...styles.filter(Boolean))\n}\n\nexport function mergeSlotClassNames<T extends Record<string, string | undefined>>(\n ...layers: (Partial<T> | undefined)[]\n): Partial<T> {\n const result: Partial<T> = {}\n for (const layer of layers) {\n if (!layer) continue\n for (const key of Object.keys(layer) as (keyof T)[]) {\n const value = layer[key]\n if (value !== undefined) {\n result[key] = mergeClassNames(result[key], value) as T[keyof T]\n }\n }\n }\n return result\n}\n\nexport function mergeSlotStyles<T extends Record<string, CSSProperties | undefined>>(\n ...layers: (Partial<T> | undefined)[]\n): Partial<T> {\n const result: Partial<T> = {}\n for (const layer of layers) {\n if (!layer) continue\n for (const key of Object.keys(layer) as (keyof T)[]) {\n const value = layer[key]\n if (value !== undefined) {\n result[key] = mergeStyles(result[key], value) as T[keyof T]\n }\n }\n }\n return result\n}\n","import type {\n FileViewerTooltipClassNames,\n FileViewerTooltipStyles,\n ImageViewerClassNames,\n ImageViewerStyles,\n PdfViewerClassNames,\n PdfViewerStyles,\n FileViewerClassNames,\n FileViewerDialogClassNames,\n FileViewerDialogStyles,\n FileViewerStyles,\n ViewerToolbarClassNames,\n ViewerToolbarStyles,\n} from './customization-types'\nimport type { ImageViewerProps } from './ImageViewer'\nimport type { PdfViewerProps } from './PdfViewer'\nimport type {\n FileViewerTranslations,\n ViewerLanguage,\n} from './translations'\nimport type { DeepPartial } from './utils/deep-partial'\nimport { deepMergePartial } from './utils/deep-partial'\nimport {\n mergeSlotClassNames,\n mergeSlotStyles,\n} from './utils/merge-slot-props'\n\nexport interface FileViewerDefaults {\n language?: ViewerLanguage\n\n fileViewer?: {\n mode?: 'modal' | 'inline'\n hideCloseButton?: boolean\n showOpenInModalButton?: boolean\n dialogClassNames?: FileViewerDialogClassNames\n dialogStyles?: FileViewerDialogStyles\n classNames?: FileViewerClassNames\n styles?: FileViewerStyles\n pdfViewerProps?: Omit<PdfViewerProps, 'url' | 'language'>\n }\n\n pdfViewer?: Omit<PdfViewerProps, 'url' | 'language'>\n imageViewer?: Omit<ImageViewerProps, 'url' | 'name' | 'language'>\n\n toolbar?: {\n classNames?: ViewerToolbarClassNames\n styles?: ViewerToolbarStyles\n }\n\n tooltip?: {\n delayDuration?: number\n skipDelayDuration?: number\n classNames?: FileViewerTooltipClassNames\n styles?: FileViewerTooltipStyles\n }\n\n autoHide?: {\n proximityThreshold?: number\n timeout?: number\n }\n\n translations?: DeepPartial<Record<ViewerLanguage, FileViewerTranslations>>\n}\n\nlet globalDefaults: FileViewerDefaults = {}\n\nfunction mergePdfViewerLayer(\n current: Omit<PdfViewerProps, 'url' | 'language'> | undefined,\n partial: Omit<PdfViewerProps, 'url' | 'language'> | undefined,\n): Omit<PdfViewerProps, 'url' | 'language'> | undefined {\n if (!partial) {\n return current\n }\n\n return {\n ...current,\n ...partial,\n classNames: mergeSlotClassNames<PdfViewerClassNames>(\n current?.classNames,\n partial.classNames,\n ),\n styles: mergeSlotStyles<PdfViewerStyles>(current?.styles, partial.styles),\n }\n}\n\nfunction mergeFileViewerDefaults(\n current: FileViewerDefaults['fileViewer'],\n partial: NonNullable<FileViewerDefaults['fileViewer']>,\n): FileViewerDefaults['fileViewer'] {\n return {\n ...current,\n ...partial,\n dialogClassNames: mergeSlotClassNames(\n current?.dialogClassNames,\n partial.dialogClassNames,\n ),\n dialogStyles: mergeSlotStyles(current?.dialogStyles, partial.dialogStyles),\n classNames: mergeSlotClassNames(current?.classNames, partial.classNames),\n styles: mergeSlotStyles(current?.styles, partial.styles),\n pdfViewerProps: mergePdfViewerLayer(current?.pdfViewerProps, partial.pdfViewerProps),\n }\n}\n\nfunction mergeImageViewerDefaults(\n current: FileViewerDefaults['imageViewer'],\n partial: NonNullable<FileViewerDefaults['imageViewer']>,\n): FileViewerDefaults['imageViewer'] {\n return {\n ...current,\n ...partial,\n classNames: mergeSlotClassNames<ImageViewerClassNames>(\n current?.classNames,\n partial.classNames,\n ),\n styles: mergeSlotStyles<ImageViewerStyles>(current?.styles, partial.styles),\n }\n}\n\nfunction mergeToolbarDefaults(\n current: FileViewerDefaults['toolbar'],\n partial: NonNullable<FileViewerDefaults['toolbar']>,\n): FileViewerDefaults['toolbar'] {\n return {\n ...current,\n ...partial,\n classNames: mergeSlotClassNames(current?.classNames, partial.classNames),\n styles: mergeSlotStyles(current?.styles, partial.styles),\n }\n}\n\nfunction mergeTooltipDefaults(\n current: FileViewerDefaults['tooltip'],\n partial: NonNullable<FileViewerDefaults['tooltip']>,\n): FileViewerDefaults['tooltip'] {\n return {\n ...current,\n ...partial,\n classNames: mergeSlotClassNames(current?.classNames, partial.classNames),\n styles: mergeSlotStyles(current?.styles, partial.styles),\n }\n}\n\nfunction mergeTranslationDefaults(\n current: FileViewerDefaults['translations'],\n partial: NonNullable<FileViewerDefaults['translations']>,\n): FileViewerDefaults['translations'] {\n const next: NonNullable<FileViewerDefaults['translations']> = {\n ...current,\n }\n\n for (const language of Object.keys(partial) as ViewerLanguage[]) {\n const patch = partial[language]\n if (!patch) {\n continue\n }\n next[language] = deepMergePartial(\n (next[language] ?? {}) as FileViewerTranslations,\n patch,\n )\n }\n\n return next\n}\n\nexport function setFileViewerDefaults(partial: DeepPartial<FileViewerDefaults>): void {\n const next: FileViewerDefaults = { ...globalDefaults }\n\n if (partial.language !== undefined) {\n next.language = partial.language\n }\n\n if (partial.fileViewer) {\n next.fileViewer = mergeFileViewerDefaults(\n next.fileViewer,\n partial.fileViewer as NonNullable<FileViewerDefaults['fileViewer']>,\n )\n }\n\n if (partial.pdfViewer) {\n next.pdfViewer = mergePdfViewerLayer(\n next.pdfViewer,\n partial.pdfViewer as NonNullable<FileViewerDefaults['pdfViewer']>,\n )\n }\n\n if (partial.imageViewer) {\n next.imageViewer = mergeImageViewerDefaults(\n next.imageViewer,\n partial.imageViewer as NonNullable<FileViewerDefaults['imageViewer']>,\n )\n }\n\n if (partial.toolbar) {\n next.toolbar = mergeToolbarDefaults(\n next.toolbar,\n partial.toolbar as NonNullable<FileViewerDefaults['toolbar']>,\n )\n }\n\n if (partial.tooltip) {\n next.tooltip = mergeTooltipDefaults(\n next.tooltip,\n partial.tooltip as NonNullable<FileViewerDefaults['tooltip']>,\n )\n }\n\n if (partial.autoHide) {\n next.autoHide = { ...next.autoHide, ...partial.autoHide }\n }\n\n if (partial.translations) {\n next.translations = mergeTranslationDefaults(\n next.translations,\n partial.translations,\n )\n }\n\n globalDefaults = next\n}\n\nexport function getFileViewerDefaults(): Readonly<FileViewerDefaults> {\n return globalDefaults\n}\n\nexport function resetFileViewerDefaults(): void {\n globalDefaults = {}\n}\n\nexport function resolvePdfViewerProps(\n instance: Omit<PdfViewerProps, 'url' | 'language'> = {},\n): Omit<PdfViewerProps, 'url' | 'language'> {\n const defaults = getFileViewerDefaults()\n const merged =\n mergePdfViewerLayer(\n mergePdfViewerLayer(defaults.pdfViewer, defaults.fileViewer?.pdfViewerProps),\n instance,\n ) ?? {}\n\n const legacyClassNames: Partial<PdfViewerClassNames> = {\n ...(instance.className || merged.className\n ? { root: instance.className ?? merged.className }\n : {}),\n ...(instance.pageClassName || merged.pageClassName\n ? { page: instance.pageClassName ?? merged.pageClassName }\n : {}),\n ...(instance.paginationClassName || merged.paginationClassName\n ? {\n pagination:\n instance.paginationClassName ?? merged.paginationClassName,\n }\n : {}),\n }\n\n return {\n ...merged,\n classNames: mergeSlotClassNames<PdfViewerClassNames>(\n merged.classNames,\n legacyClassNames,\n ),\n }\n}\n\nexport function resolveImageViewerProps(\n instance: Omit<ImageViewerProps, 'url' | 'name' | 'language'> = {},\n): Omit<ImageViewerProps, 'url' | 'name' | 'language'> {\n const defaults = getFileViewerDefaults()\n const merged = mergeImageViewerDefaults(defaults.imageViewer, instance) ?? {}\n\n return merged\n}\n\nexport type { DeepPartial }\n","export type TooltipSide = 'top' | 'bottom'\n\nexport type TooltipPlacement = {\n top: number\n left: number\n side: TooltipSide\n}\n\ntype ComputeTooltipPlacementInput = {\n triggerRect: DOMRect\n contentWidth: number\n contentHeight: number\n preferredSide: TooltipSide\n sideOffset: number\n padding?: number\n viewportWidth?: number\n viewportHeight?: number\n}\n\ntype ResolveSideInput = ComputeTooltipPlacementInput & {\n padding: number\n viewportHeight: number\n}\n\nfunction resolveSide({\n preferredSide,\n triggerRect,\n contentHeight,\n sideOffset,\n padding,\n viewportHeight,\n}: ResolveSideInput): TooltipSide {\n const spaceAbove = triggerRect.top - padding\n const spaceBelow = viewportHeight - triggerRect.bottom - padding\n const needed = contentHeight + sideOffset\n\n if (preferredSide === 'top') {\n if (spaceAbove >= needed) return 'top'\n if (spaceBelow >= needed) return 'bottom'\n return spaceBelow > spaceAbove ? 'bottom' : 'top'\n }\n\n if (spaceBelow >= needed) return 'bottom'\n if (spaceAbove >= needed) return 'top'\n return spaceAbove > spaceBelow ? 'top' : 'bottom'\n}\n\nexport function computeTooltipPlacement(\n input: ComputeTooltipPlacementInput,\n): TooltipPlacement {\n const padding = input.padding ?? 8\n const viewportWidth = input.viewportWidth ?? window.innerWidth\n const viewportHeight = input.viewportHeight ?? window.innerHeight\n\n const side = resolveSide({\n ...input,\n padding,\n viewportHeight,\n viewportWidth,\n })\n\n const top =\n side === 'top'\n ? input.triggerRect.top - input.sideOffset - input.contentHeight\n : input.triggerRect.bottom + input.sideOffset\n\n let left =\n input.triggerRect.left +\n input.triggerRect.width / 2 -\n input.contentWidth / 2\n\n const maxLeft = viewportWidth - padding - input.contentWidth\n if (left < padding) {\n left = padding\n } else if (left > maxLeft) {\n left = Math.max(padding, maxLeft)\n }\n\n let clampedTop = top\n const maxTop = viewportHeight - padding - input.contentHeight\n if (clampedTop < padding) {\n clampedTop = padding\n } else if (clampedTop > maxTop) {\n clampedTop = Math.max(padding, maxTop)\n }\n\n return { top: clampedTop, left, side }\n}\n","import {\n createContext,\n useCallback,\n useContext,\n useEffect,\n useId,\n useLayoutEffect,\n useRef,\n useState,\n type CSSProperties,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { renderAsChild } from './as-child'\nimport {\n computeTooltipPlacement,\n type TooltipPlacement,\n type TooltipSide,\n} from './compute-tooltip-placement'\n\ntype TooltipGroupContextValue = {\n delayDuration: number\n skipDelayDuration: number\n closeDelayDuration: number\n getOpenDelay: () => number\n onTooltipOpened: () => void\n closeActiveTooltip: () => void\n requestExclusiveOpen: (closeCallback: () => void) => void\n releaseExclusiveOpen: (closeCallback: () => void) => void\n}\n\nconst TooltipGroupContext = createContext<TooltipGroupContextValue | null>(null)\n\nfunction useTooltipGroup() {\n const context = useContext(TooltipGroupContext)\n if (!context) {\n throw new Error('Tooltip components must be used within TooltipProvider')\n }\n return context\n}\n\n/** Closes the currently open tooltip in this provider (no-op if none). */\nexport function useCloseActiveTooltip(): () => void {\n const context = useContext(TooltipGroupContext)\n return context?.closeActiveTooltip ?? (() => undefined)\n}\n\nconst DEFAULT_CLOSE_DELAY_MS = 0\n\nexport function TooltipProvider({\n children,\n delayDuration = 300,\n skipDelayDuration = 500,\n closeDelayDuration = DEFAULT_CLOSE_DELAY_MS,\n}: {\n children: ReactNode\n delayDuration?: number\n skipDelayDuration?: number\n /** Delay before hiding after pointer leaves (default: 0). */\n closeDelayDuration?: number\n}) {\n const isOpenDelayedRef = useRef(true)\n const skipDelayTimerRef = useRef<number | null>(null)\n const activeCloseRef = useRef<(() => void) | null>(null)\n\n const onTooltipOpened = useCallback(() => {\n if (skipDelayTimerRef.current !== null) {\n window.clearTimeout(skipDelayTimerRef.current)\n }\n\n isOpenDelayedRef.current = false\n skipDelayTimerRef.current = window.setTimeout(() => {\n isOpenDelayedRef.current = true\n skipDelayTimerRef.current = null\n }, skipDelayDuration)\n }, [skipDelayDuration])\n\n const getOpenDelay = useCallback(\n () => (isOpenDelayedRef.current ? delayDuration : 0),\n [delayDuration],\n )\n\n const requestExclusiveOpen = useCallback((closeCallback: () => void) => {\n activeCloseRef.current?.()\n activeCloseRef.current = closeCallback\n }, [])\n\n const releaseExclusiveOpen = useCallback((closeCallback: () => void) => {\n if (activeCloseRef.current === closeCallback) {\n activeCloseRef.current = null\n }\n }, [])\n\n const closeActiveTooltip = useCallback(() => {\n activeCloseRef.current?.()\n activeCloseRef.current = null\n }, [])\n\n useEffect(\n () => () => {\n if (skipDelayTimerRef.current !== null) {\n window.clearTimeout(skipDelayTimerRef.current)\n }\n },\n [],\n )\n\n useEffect(() => {\n const handleDismiss = () => closeActiveTooltip()\n\n const handlePointerOut = (event: PointerEvent) => {\n if (event.pointerType !== 'mouse') return\n const related = event.relatedTarget\n if (related instanceof Node && document.documentElement.contains(related)) {\n return\n }\n closeActiveTooltip()\n }\n\n window.addEventListener('blur', handleDismiss)\n window.addEventListener('scroll', handleDismiss, true)\n document.documentElement.addEventListener('pointerout', handlePointerOut)\n\n return () => {\n window.removeEventListener('blur', handleDismiss)\n window.removeEventListener('scroll', handleDismiss, true)\n document.documentElement.removeEventListener('pointerout', handlePointerOut)\n }\n }, [closeActiveTooltip])\n\n return (\n <TooltipGroupContext.Provider\n value={{\n delayDuration,\n skipDelayDuration,\n closeDelayDuration,\n getOpenDelay,\n onTooltipOpened,\n closeActiveTooltip,\n requestExclusiveOpen,\n releaseExclusiveOpen,\n }}\n >\n {children}\n </TooltipGroupContext.Provider>\n )\n}\n\ntype TooltipRootContextValue = {\n open: boolean\n triggerRef: React.RefObject<HTMLElement | null>\n contentId: string\n scheduleOpen: () => void\n scheduleClose: () => void\n openImmediately: () => void\n}\n\nconst TooltipRootContext = createContext<TooltipRootContextValue | null>(null)\n\nfunction useTooltipRoot() {\n const context = useContext(TooltipRootContext)\n if (!context) {\n throw new Error('Tooltip components must be used within TooltipRoot')\n }\n return context\n}\n\nexport function TooltipRoot({ children }: { children: ReactNode }) {\n const group = useTooltipGroup()\n const [open, setOpen] = useState(false)\n const triggerRef = useRef<HTMLElement | null>(null)\n const contentId = useId()\n const openTimerRef = useRef<number | null>(null)\n const closeTimerRef = useRef<number | null>(null)\n\n const closeTooltip = useCallback(() => {\n setOpen(false)\n group.releaseExclusiveOpen(closeTooltip)\n }, [group])\n\n const clearTimers = useCallback(() => {\n if (openTimerRef.current !== null) {\n window.clearTimeout(openTimerRef.current)\n openTimerRef.current = null\n }\n if (closeTimerRef.current !== null) {\n window.clearTimeout(closeTimerRef.current)\n closeTimerRef.current = null\n }\n }, [])\n\n const openImmediately = useCallback(() => {\n clearTimers()\n group.requestExclusiveOpen(closeTooltip)\n setOpen(true)\n group.onTooltipOpened()\n }, [clearTimers, closeTooltip, group])\n\n const scheduleOpen = useCallback(() => {\n clearTimers()\n const delay = group.getOpenDelay()\n\n openTimerRef.current = window.setTimeout(() => {\n openImmediately()\n openTimerRef.current = null\n }, delay)\n }, [clearTimers, group, openImmediately])\n\n const scheduleClose = useCallback(() => {\n clearTimers()\n closeTimerRef.current = window.setTimeout(() => {\n closeTooltip()\n closeTimerRef.current = null\n }, group.closeDelayDuration)\n }, [clearTimers, closeTooltip, group.closeDelayDuration])\n\n useEffect(() => {\n return () => {\n clearTimers()\n group.releaseExclusiveOpen(closeTooltip)\n }\n }, [clearTimers, closeTooltip, group])\n\n return (\n <TooltipRootContext.Provider\n value={{\n open,\n triggerRef,\n contentId,\n scheduleOpen,\n scheduleClose,\n openImmediately,\n }}\n >\n {children}\n </TooltipRootContext.Provider>\n )\n}\n\nexport function TooltipTrigger({\n asChild,\n children,\n}: {\n asChild?: boolean\n children: ReactElement\n}) {\n const {\n open,\n triggerRef,\n scheduleOpen,\n scheduleClose,\n openImmediately,\n contentId,\n } = useTooltipRoot()\n\n const triggerProps = {\n ref: (node: HTMLElement | null) => {\n triggerRef.current = node\n },\n 'aria-describedby': open ? contentId : undefined,\n onMouseEnter: () => scheduleOpen(),\n onMouseLeave: () => scheduleClose(),\n onFocus: () => openImmediately(),\n onBlur: () => scheduleClose(),\n }\n\n if (asChild) {\n return renderAsChild(true, children, triggerProps)\n }\n\n return <span {...triggerProps}>{children}</span>\n}\n\nexport function TooltipPortal({ children }: { children: ReactNode }) {\n const { open } = useTooltipRoot()\n if (!open || typeof document === 'undefined') return null\n return createPortal(children, document.body)\n}\n\nconst TOOLTIP_CONTENT_BASE =\n 'pointer-events-none fixed z-[200] w-max max-w-xs transition-opacity duration-200'\n\nexport function TooltipContent({\n children,\n side: preferredSide = 'top',\n sideOffset = 6,\n className,\n style,\n}: {\n children: ReactNode\n side?: TooltipSide\n sideOffset?: number\n className?: string\n style?: CSSProperties\n}) {\n const { open, triggerRef, contentId } = useTooltipRoot()\n const contentRef = useRef<HTMLDivElement>(null)\n const [placement, setPlacement] = useState<TooltipPlacement | null>(null)\n\n useLayoutEffect(() => {\n if (!open) {\n setPlacement(null)\n return\n }\n\n const updatePlacement = () => {\n const trigger = triggerRef.current\n const content = contentRef.current\n if (!trigger || !content) return\n\n const triggerRect = trigger.getBoundingClientRect()\n const { width, height } = content.getBoundingClientRect()\n if (width === 0 || height === 0) {\n requestAnimationFrame(updatePlacement)\n return\n }\n\n setPlacement(\n computeTooltipPlacement({\n triggerRect,\n contentWidth: width,\n contentHeight: height,\n preferredSide,\n sideOffset,\n }),\n )\n }\n\n updatePlacement()\n window.addEventListener('scroll', updatePlacement, true)\n window.addEventListener('resize', updatePlacement)\n return () => {\n window.removeEventListener('scroll', updatePlacement, true)\n window.removeEventListener('resize', updatePlacement)\n }\n }, [open, preferredSide, sideOffset, triggerRef])\n\n if (!open) return null\n\n const isPositioned = placement !== null\n\n return (\n <div\n ref={contentRef}\n id={contentId}\n role=\"tooltip\"\n className={[TOOLTIP_CONTENT_BASE, className].filter(Boolean).join(' ')}\n style={{\n top: placement?.top ?? -9999,\n left: placement?.left ?? -9999,\n visibility: isPositioned ? 'visible' : 'hidden',\n opacity: isPositioned ? 1 : 0,\n ...style,\n }}\n >\n {children}\n </div>\n )\n}\n","import type { ReactElement, ReactNode } from 'react'\nimport type {\n FileViewerTooltipClassNames,\n FileViewerTooltipStyles,\n} from '../customization-types'\nimport { getFileViewerDefaults } from '../config'\nimport {\n TooltipProvider,\n TooltipRoot,\n TooltipTrigger,\n TooltipPortal,\n TooltipContent,\n useCloseActiveTooltip,\n} from '../primitives/tooltip'\nimport { renderAsChild } from '../primitives/as-child'\nimport { mergeClassNames, mergeStyles } from '../utils/merge-slot-props'\n\nconst FILE_VIEWER_TOOLTIP_CONTENT_DEFAULT =\n 'select-none rounded-md border border-neutral-700/50 bg-neutral-900/75 px-2 py-1.5 text-xs text-white/90 shadow-lg backdrop-blur-sm'\n\nexport function FileViewerTooltipProvider({\n children,\n}: {\n children: ReactNode\n}) {\n const tooltipDefaults = getFileViewerDefaults().tooltip\n\n return (\n <TooltipProvider\n delayDuration={tooltipDefaults?.delayDuration ?? 300}\n skipDelayDuration={tooltipDefaults?.skipDelayDuration ?? 500}\n >\n {children}\n </TooltipProvider>\n )\n}\n\nfunction TooltipDisabledTarget({ children }: { children: ReactElement }) {\n const closeActiveTooltip = useCloseActiveTooltip()\n\n return renderAsChild(true, children, {\n className: 'pointer-events-auto',\n onMouseEnter: () => closeActiveTooltip(),\n onFocus: () => closeActiveTooltip(),\n })\n}\n\nexport function FileViewerTooltip({\n content,\n children,\n disabled = false,\n classNames,\n styles,\n}: {\n content: string\n children: ReactElement\n disabled?: boolean\n classNames?: FileViewerTooltipClassNames\n styles?: FileViewerTooltipStyles\n}) {\n if (disabled) {\n return <TooltipDisabledTarget>{children}</TooltipDisabledTarget>\n }\n\n const tooltipDefaults = getFileViewerDefaults().tooltip\n\n return (\n <TooltipRoot>\n <TooltipTrigger asChild>{children}</TooltipTrigger>\n <TooltipPortal>\n <TooltipContent\n side=\"top\"\n sideOffset={6}\n className={mergeClassNames(\n FILE_VIEWER_TOOLTIP_CONTENT_DEFAULT,\n tooltipDefaults?.classNames?.content,\n classNames?.content,\n )}\n style={mergeStyles(\n tooltipDefaults?.styles?.content,\n styles?.content,\n )}\n >\n {content}\n </TooltipContent>\n </TooltipPortal>\n </TooltipRoot>\n )\n}\n","import { getFileViewerDefaults } from './config'\n\n/** Plain string, or a function that receives structured values for formatting. */\nexport type FormattableMessage<P extends Record<string, unknown>> =\n | string\n | ((params: P) => string)\n\nexport type UnsupportedFileTypeParams = { extension: string }\n\nexport type PdfPageInputAriaLabelParams = { value: string }\n\nexport type ViewerLanguage = 'english' | 'portuguese'\n\nexport interface FileViewerShellTranslations {\n closeAriaLabel: string\n printAriaLabel: string\n printTooltip: string\n downloadAriaLabel: string\n downloadTooltip: string\n downloadInProgressAriaLabel: string\n downloadInProgressTooltip: string\n openInModalAriaLabel: string\n openInModalTooltip: string\n unsupportedFileType: FormattableMessage<UnsupportedFileTypeParams>\n}\n\nexport interface ImageViewerTranslations {\n zoomOutAriaLabel: string\n fitScreenAriaLabel: string\n zoomInAriaLabel: string\n zoomOutTooltip: string\n fitScreenTooltip: string\n zoomInTooltip: string\n}\n\nexport interface PdfViewerTranslations {\n pageLabel: string\n pageInputAriaLabel: FormattableMessage<PdfPageInputAriaLabelParams>\n previousPageAriaLabel: string\n nextPageAriaLabel: string\n previousPageTooltip: string\n nextPageTooltip: string\n zoomOutAriaLabel: string\n fitWidthAriaLabel: string\n zoomInAriaLabel: string\n zoomOutTooltip: string\n fitWidthTooltip: string\n zoomInTooltip: string\n}\n\nexport interface FileViewerTranslations {\n fileViewer: FileViewerShellTranslations\n imageViewer: ImageViewerTranslations\n pdfViewer: PdfViewerTranslations\n}\n\nexport type DeepPartialFileViewerTranslations = {\n fileViewer?: Partial<FileViewerShellTranslations>\n imageViewer?: Partial<ImageViewerTranslations>\n pdfViewer?: Partial<PdfViewerTranslations>\n}\n\nexport const fileViewerTranslationsByLanguage: Record<\n ViewerLanguage,\n FileViewerTranslations\n> = {\n english: {\n fileViewer: {\n closeAriaLabel: 'Close',\n printAriaLabel: 'Print',\n printTooltip: 'Print',\n downloadAriaLabel: 'Download',\n downloadTooltip: 'Download',\n downloadInProgressAriaLabel: 'Downloading…',\n downloadInProgressTooltip: 'Downloading…',\n openInModalAriaLabel: 'Open in full screen',\n openInModalTooltip: 'Open in full screen',\n unsupportedFileType: ({ extension }) =>\n `No preview is available for file type \"${extension}\".`,\n },\n imageViewer: {\n zoomOutAriaLabel: 'Zoom out',\n fitScreenAriaLabel: 'Fit image',\n zoomInAriaLabel: 'Zoom in',\n zoomOutTooltip: 'Zoom out',\n fitScreenTooltip: 'Fit image',\n zoomInTooltip: 'Zoom in',\n },\n pdfViewer: {\n pageLabel: 'Page',\n pageInputAriaLabel: ({ value }) => `Page ${value}`,\n previousPageAriaLabel: 'Previous page',\n nextPageAriaLabel: 'Next page',\n previousPageTooltip: 'Previous page',\n nextPageTooltip: 'Next page',\n zoomOutAriaLabel: 'Zoom out',\n fitWidthAriaLabel: 'Fit width',\n zoomInAriaLabel: 'Zoom in',\n zoomOutTooltip: 'Zoom out',\n fitWidthTooltip: 'Fit width',\n zoomInTooltip: 'Zoom in',\n },\n },\n portuguese: {\n fileViewer: {\n closeAriaLabel: 'Fechar',\n printAriaLabel: 'Imprimir',\n printTooltip: 'Imprimir',\n downloadAriaLabel: 'Transferir',\n downloadTooltip: 'Transferir',\n downloadInProgressAriaLabel: 'A transferir…',\n downloadInProgressTooltip: 'A transferir…',\n openInModalAriaLabel: 'Visualizar em tela cheia',\n openInModalTooltip: 'Visualizar em tela cheia',\n unsupportedFileType: ({ extension }) =>\n `Ainda não existem visualizações para arquivos do tipo \"${extension}\".`,\n },\n imageViewer: {\n zoomOutAriaLabel: 'Diminuir zoom',\n fitScreenAriaLabel: 'Ajustar imagem',\n zoomInAriaLabel: 'Aumentar zoom',\n zoomOutTooltip: 'Diminuir zoom',\n fitScreenTooltip: 'Ajustar imagem',\n zoomInTooltip: 'Aumentar zoom',\n },\n pdfViewer: {\n pageLabel: 'Página',\n pageInputAriaLabel: ({ value }) => `Página ${value}`,\n previousPageAriaLabel: 'Página anterior',\n nextPageAriaLabel: 'Próxima página',\n previousPageTooltip: 'Página anterior',\n nextPageTooltip: 'Próxima página',\n zoomOutAriaLabel: 'Diminuir zoom',\n fitWidthAriaLabel: 'Ajustar à largura',\n zoomInAriaLabel: 'Aumentar zoom',\n zoomOutTooltip: 'Diminuir zoom',\n fitWidthTooltip: 'Ajustar à largura',\n zoomInTooltip: 'Aumentar zoom',\n },\n },\n}\n\n/** English defaults (same object as `fileViewerTranslationsByLanguage.english`). */\nexport const defaultFileViewerTranslations: FileViewerTranslations =\n fileViewerTranslationsByLanguage.english\n\nexport function applyTranslationOverlay(\n builtIn: FileViewerTranslations,\n overlay: DeepPartialFileViewerTranslations | undefined,\n): FileViewerTranslations {\n if (!overlay) return builtIn\n\n return {\n fileViewer: { ...builtIn.fileViewer, ...overlay.fileViewer },\n imageViewer: { ...builtIn.imageViewer, ...overlay.imageViewer },\n pdfViewer: { ...builtIn.pdfViewer, ...overlay.pdfViewer },\n } as FileViewerTranslations\n}\n\nexport function getFileViewerTranslations(\n language: ViewerLanguage,\n): FileViewerTranslations {\n const builtIn = fileViewerTranslationsByLanguage[language]\n const overlay = getFileViewerDefaults().translations?.[language]\n\n if (!overlay) {\n return builtIn\n }\n\n return applyTranslationOverlay(\n builtIn,\n overlay as DeepPartialFileViewerTranslations,\n )\n}\n\nexport function resolveFormattedMessage<P extends Record<string, unknown>>(\n message: FormattableMessage<P>,\n params: P,\n): string {\n return typeof message === 'function' ? message(params) : message\n}\n","export function resolveOption<T>(\n instance: T | undefined,\n global: T | undefined,\n builtIn: T,\n): T {\n if (instance !== undefined) {\n return instance\n }\n if (global !== undefined) {\n return global\n }\n return builtIn\n}\n\nexport function resolveHideCloseButton(\n instance: boolean | undefined,\n global: boolean | undefined,\n mode: 'inline' | 'modal',\n): boolean {\n if (instance !== undefined) {\n return instance\n }\n if (global !== undefined) {\n return global\n }\n return mode === 'inline'\n}\n","export type ScrollAreaSizes = {\n content: number\n viewport: number\n scrollbar: {\n size: number\n paddingStart: number\n paddingEnd: number\n }\n}\n\nexport function getThumbRatio(viewportSize: number, contentSize: number): number {\n const ratio = viewportSize / contentSize\n return Number.isNaN(ratio) ? 0 : ratio\n}\n\nexport function getThumbSize(sizes: ScrollAreaSizes): number {\n const ratio = getThumbRatio(sizes.viewport, sizes.content)\n const scrollbarPadding =\n sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd\n const thumbSize = (sizes.scrollbar.size - scrollbarPadding) * ratio\n return Math.max(thumbSize, 18)\n}\n\nexport function hasScrollAreaThumb(sizes: ScrollAreaSizes): boolean {\n if (sizes.viewport <= 0 || sizes.content <= 0 || sizes.scrollbar.size <= 0) {\n return false\n }\n return sizes.content > sizes.viewport + 1\n}\n\nfunction clamp(value: number, [min, max]: [number, number]): number {\n return Math.min(Math.max(value, min), max)\n}\n\nfunction linearScale(\n input: readonly [number, number],\n output: readonly [number, number],\n): (value: number) => number {\n return (value: number) => {\n if (input[0] === input[1] || output[0] === output[1]) return output[0]\n const ratio = (output[1] - output[0]) / (input[1] - input[0])\n return output[0] + ratio * (value - input[0])\n }\n}\n\nexport function getThumbOffsetFromScroll(\n scrollPos: number,\n sizes: ScrollAreaSizes,\n): number {\n const thumbSizePx = getThumbSize(sizes)\n const scrollbarPadding =\n sizes.scrollbar.paddingStart + sizes.scrollbar.paddingEnd\n const scrollbarTrack = sizes.scrollbar.size - scrollbarPadding\n const maxScrollPos = sizes.content - sizes.viewport\n const maxThumbPos = scrollbarTrack - thumbSizePx\n const scrollWithoutMomentum = clamp(scrollPos, [0, maxScrollPos])\n const interpolate = linearScale([0, maxScrollPos], [0, maxThumbPos])\n return interpolate(scrollWithoutMomentum)\n}\n\nexport function getScrollPositionFromPointer(\n pointerPos: number,\n pointerOffset: number,\n sizes: ScrollAreaSizes,\n): number {\n const thumbSizePx = getThumbSize(sizes)\n const thumbCenter = thumbSizePx / 2\n const offset = pointerOffset || thumbCenter\n const thumbOffsetFromEnd = thumbSizePx - offset\n const minPointerPos = sizes.scrollbar.paddingStart + offset\n const maxPointerPos =\n sizes.scrollbar.size - sizes.scrollbar.paddingEnd - thumbOffsetFromEnd\n const maxScrollPos = sizes.content - sizes.viewport\n const interpolate = linearScale([minPointerPos, maxPointerPos], [0, maxScrollPos])\n return interpolate(pointerPos)\n}\n","import {\n createContext,\n forwardRef,\n useCallback,\n useContext,\n useEffect,\n useRef,\n useState,\n type CSSProperties,\n type HTMLAttributes,\n type PointerEvent,\n type ReactElement,\n type ReactNode,\n type Ref,\n} from 'react'\nimport { mergeClassNames } from '../utils/merge-slot-props'\nimport {\n getScrollPositionFromPointer,\n getThumbOffsetFromScroll,\n getThumbSize,\n hasScrollAreaThumb,\n type ScrollAreaSizes,\n} from './scroll-area-math'\n\nconst EMPTY_SIZES: ScrollAreaSizes = {\n content: 0,\n viewport: 0,\n scrollbar: { size: 0, paddingStart: 0, paddingEnd: 0 },\n}\n\ntype ScrollAreaContextValue = {\n viewportRef: React.RefObject<HTMLDivElement | null>\n cornerWidth: number\n cornerHeight: number\n setCornerWidth: (width: number) => void\n setCornerHeight: (height: number) => void\n}\n\nconst ScrollAreaContext = createContext<ScrollAreaContextValue | null>(null)\n\nfunction useScrollAreaContext(component: string): ScrollAreaContextValue {\n const context = useContext(ScrollAreaContext)\n if (!context) {\n throw new Error(`${component} must be used within ScrollAreaRoot`)\n }\n return context\n}\n\nfunction assignRef<T>(ref: Ref<T> | undefined, value: T): void {\n if (typeof ref === 'function') {\n ref(value)\n return\n }\n if (ref && typeof ref === 'object') {\n ;(ref as React.MutableRefObject<T>).current = value\n }\n}\n\nfunction mergeRefs<T>(...refs: Array<Ref<T> | undefined>): (value: T) => void {\n return (value: T) => {\n refs.forEach((ref) => assignRef(ref, value))\n }\n}\n\nfunction readScrollbarPadding(track: HTMLElement) {\n const computed = getComputedStyle(track)\n return {\n paddingStart: Number.parseInt(computed.paddingTop, 10) || 0,\n paddingEnd: Number.parseInt(computed.paddingBottom, 10) || 0,\n paddingLeft: Number.parseInt(computed.paddingLeft, 10) || 0,\n paddingRight: Number.parseInt(computed.paddingRight, 10) || 0,\n }\n}\n\ntype ScrollAreaRootProps = HTMLAttributes<HTMLDivElement>\n\nexport function ScrollAreaRoot({\n className,\n style,\n children,\n ...rest\n}: ScrollAreaRootProps & { children: ReactNode }) {\n const viewportRef = useRef<HTMLDivElement | null>(null)\n const [cornerWidth, setCornerWidth] = useState(0)\n const [cornerHeight, setCornerHeight] = useState(0)\n\n return (\n <ScrollAreaContext.Provider\n value={{\n viewportRef,\n cornerWidth,\n cornerHeight,\n setCornerWidth,\n setCornerHeight,\n }}\n >\n <div\n className={className}\n style={{\n position: 'relative',\n overflow: 'hidden',\n ['--scroll-area-corner-width' as string]: `${cornerWidth}px`,\n ['--scroll-area-corner-height' as string]: `${cornerHeight}px`,\n ...style,\n }}\n {...rest}\n >\n {children}\n </div>\n </ScrollAreaContext.Provider>\n )\n}\n\ntype ScrollAreaViewportProps = HTMLAttributes<HTMLDivElement>\n\nexport const ScrollAreaViewport = forwardRef<HTMLDivElement, ScrollAreaViewportProps>(\n ({ className, children, onScroll, ...rest }, forwardedRef) => {\n const { viewportRef } = useScrollAreaContext('ScrollAreaViewport')\n\n return (\n <div\n ref={mergeRefs(forwardedRef, viewportRef)}\n onScroll={onScroll}\n className={mergeClassNames(\n 'size-full overflow-x-scroll overflow-y-scroll pdf-scroll-viewport',\n className,\n )}\n {...rest}\n >\n <div\n className=\"scroll-area-viewport-inner\"\n style={{ minWidth: '100%', display: 'table' }}\n >\n {children}\n </div>\n </div>\n )\n },\n)\nScrollAreaViewport.displayName = 'ScrollAreaViewport'\n\ntype ScrollAreaScrollbarProps = HTMLAttributes<HTMLDivElement> & {\n orientation: 'vertical' | 'horizontal'\n children: ReactElement\n}\n\nexport function ScrollAreaScrollbar({\n orientation,\n className,\n style,\n children,\n ...rest\n}: ScrollAreaScrollbarProps) {\n const context = useScrollAreaContext('ScrollAreaScrollbar')\n const trackRef = useRef<HTMLDivElement>(null)\n const thumbRef = useRef<HTMLDivElement>(null)\n const pointerOffsetRef = useRef(0)\n const [sizes, setSizes] = useState<ScrollAreaSizes>(EMPTY_SIZES)\n\n const isVertical = orientation === 'vertical'\n const showThumb = hasScrollAreaThumb(sizes)\n\n const updateSizes = useCallback(() => {\n const viewport = context.viewportRef.current\n const track = trackRef.current\n if (!viewport || !track) return\n\n const padding = readScrollbarPadding(track)\n\n if (isVertical) {\n setSizes({\n content: viewport.scrollHeight,\n viewport: viewport.offsetHeight,\n scrollbar: {\n size: track.clientHeight,\n paddingStart: padding.paddingStart,\n paddingEnd: padding.paddingEnd,\n },\n })\n context.setCornerWidth(track.offsetWidth)\n return\n }\n\n setSizes({\n content: viewport.scrollWidth,\n viewport: viewport.offsetWidth,\n scrollbar: {\n size: track.clientWidth,\n paddingStart: padding.paddingLeft,\n paddingEnd: padding.paddingRight,\n },\n })\n context.setCornerHeight(track.offsetHeight)\n }, [context, isVertical])\n\n const updateThumbPosition = useCallback(() => {\n const viewport = context.viewportRef.current\n const thumb = thumbRef.current\n if (!viewport || !thumb || !showThumb) return\n\n const scrollPos = isVertical ? viewport.scrollTop : viewport.scrollLeft\n const offset = getThumbOffsetFromScroll(scrollPos, sizes)\n\n thumb.style.transform = isVertical\n ? `translate3d(0, ${offset}px, 0)`\n : `translate3d(${offset}px, 0, 0)`\n }, [context.viewportRef, isVertical, showThumb, sizes])\n\n useEffect(() => {\n const viewport = context.viewportRef.current\n const track = trackRef.current\n if (!viewport || !track) return\n\n const runUpdate = () => {\n requestAnimationFrame(updateSizes)\n }\n\n runUpdate()\n\n const resizeObserver = new ResizeObserver(runUpdate)\n resizeObserver.observe(viewport)\n resizeObserver.observe(track)\n\n const contentRoot = viewport.firstElementChild\n if (contentRoot) {\n resizeObserver.observe(contentRoot)\n }\n\n const mutationObserver = new MutationObserver(runUpdate)\n mutationObserver.observe(viewport, {\n childList: true,\n subtree: true,\n attributes: true,\n })\n\n return () => {\n resizeObserver.disconnect()\n mutationObserver.disconnect()\n }\n }, [context.viewportRef, updateSizes])\n\n useEffect(() => {\n updateThumbPosition()\n }, [sizes, updateThumbPosition])\n\n useEffect(() => {\n const viewport = context.viewportRef.current\n if (!viewport) return\n\n let frame = 0\n const handleScroll = () => {\n if (frame) cancelAnimationFrame(frame)\n frame = requestAnimationFrame(() => {\n updateThumbPosition()\n frame = 0\n })\n }\n\n viewport.addEventListener('scroll', handleScroll, { passive: true })\n return () => {\n viewport.removeEventListener('scroll', handleScroll)\n if (frame) cancelAnimationFrame(frame)\n }\n }, [context.viewportRef, updateThumbPosition])\n\n const getPointerOnTrack = useCallback(\n (clientX: number, clientY: number) => {\n const track = trackRef.current\n if (!track) return 0\n\n const rect = track.getBoundingClientRect()\n return isVertical ? clientY - rect.top : clientX - rect.left\n },\n [isVertical],\n )\n\n const setScrollFromPointer = useCallback(\n (pointerPos: number) => {\n const viewport = context.viewportRef.current\n if (!viewport) return\n\n const scrollPos = getScrollPositionFromPointer(\n pointerPos,\n pointerOffsetRef.current,\n sizes,\n )\n\n if (isVertical) {\n viewport.scrollTop = scrollPos\n } else {\n viewport.scrollLeft = scrollPos\n }\n },\n [context.viewportRef, isVertical, sizes],\n )\n\n const handleTrackPointerDown = (event: PointerEvent<HTMLDivElement>) => {\n if (event.button !== 0) return\n\n const track = trackRef.current\n if (!track) return\n\n if (event.target === track) {\n pointerOffsetRef.current = 0\n }\n\n event.currentTarget.setPointerCapture(event.pointerId)\n setScrollFromPointer(getPointerOnTrack(event.clientX, event.clientY))\n }\n\n const handleTrackPointerMove = (event: PointerEvent<HTMLDivElement>) => {\n if (!event.currentTarget.hasPointerCapture(event.pointerId)) {\n return\n }\n\n setScrollFromPointer(getPointerOnTrack(event.clientX, event.clientY))\n }\n\n const handleTrackPointerUp = (event: PointerEvent<HTMLDivElement>) => {\n if (event.currentTarget.hasPointerCapture(event.pointerId)) {\n event.currentTarget.releasePointerCapture(event.pointerId)\n }\n pointerOffsetRef.current = 0\n }\n\n const thumbProps = children.props as HTMLAttributes<HTMLDivElement>\n const thumbClassName = thumbProps.className\n const thumbStyleProp = thumbProps.style\n const {\n className: _ignoredClassName,\n style: _ignoredStyle,\n ...thumbRest\n } = thumbProps\n\n const thumbSizePx = getThumbSize(sizes)\n\n const thumbDimensionStyle: CSSProperties = isVertical\n ? { height: thumbSizePx, width: '100%' }\n : { width: thumbSizePx, height: '100%' }\n\n const trackStyle: CSSProperties = isVertical\n ? {\n position: 'absolute',\n top: 0,\n right: 0,\n bottom: 'var(--scroll-area-corner-height)',\n }\n : {\n position: 'absolute',\n bottom: 0,\n left: 0,\n right: 'var(--scroll-area-corner-width)',\n }\n\n return (\n <div\n ref={trackRef}\n data-orientation={orientation}\n className={className}\n style={{ ...trackStyle, ...style }}\n onPointerDown={handleTrackPointerDown}\n onPointerMove={handleTrackPointerMove}\n onPointerUp={handleTrackPointerUp}\n onPointerCancel={handleTrackPointerUp}\n {...rest}\n >\n {showThumb ? (\n <div\n ref={thumbRef}\n data-state=\"visible\"\n className={thumbClassName}\n style={{\n flex: 'none',\n ...thumbDimensionStyle,\n ...thumbStyleProp,\n }}\n onPointerDownCapture={(event: PointerEvent<HTMLDivElement>) => {\n thumbProps.onPointerDownCapture?.(event)\n const thumbRect = event.currentTarget.getBoundingClientRect()\n pointerOffsetRef.current = isVertical\n ? event.clientY - thumbRect.top\n : event.clientX - thumbRect.left\n }}\n {...thumbRest}\n />\n ) : null}\n </div>\n )\n}\n\ntype ScrollAreaThumbProps = HTMLAttributes<HTMLDivElement>\n\nexport function ScrollAreaThumb({ className, style, ...rest }: ScrollAreaThumbProps) {\n return (\n <div\n data-state=\"hidden\"\n className={className}\n style={style}\n {...rest}\n />\n )\n}\n\ntype ScrollAreaCornerProps = HTMLAttributes<HTMLDivElement>\n\nexport function ScrollAreaCorner({ className, style, ...rest }: ScrollAreaCornerProps) {\n const { cornerWidth, cornerHeight } = useScrollAreaContext('ScrollAreaCorner')\n\n if (!cornerWidth || !cornerHeight) {\n return null\n }\n\n return (\n <div\n className={className}\n style={{\n position: 'absolute',\n right: 0,\n bottom: 0,\n width: cornerWidth,\n height: cornerHeight,\n ...style,\n }}\n {...rest}\n />\n )\n}\n","/**\n * PDF viewer overrides (selection + layout sync).\n * Requires react-pdf TextLayer.css to be loaded first.\n */\n\n/* Mozilla-style selection: highlight only, no visible glyph fill */\n.pdf-viewer .textLayer ::-moz-selection {\n background: rgba(0, 0, 255, 0.25);\n background: color-mix(in srgb, AccentColor, transparent 75%);\n color: transparent;\n}\n\n.pdf-viewer .textLayer ::selection {\n background: rgba(0, 0, 255, 0.25);\n background: color-mix(in srgb, AccentColor, transparent 75%);\n color: transparent;\n -webkit-text-fill-color: transparent;\n}\n\n.pdf-viewer .textLayer br::-moz-selection,\n.pdf-viewer .textLayer br::selection {\n background: transparent;\n}\n\n/* Hide misaligned text layer while canvas size catches up (canvas stays visible, scaled via layout) */\n.pdf-viewer [data-layout-syncing='true'] .textLayer {\n opacity: 0;\n pointer-events: none;\n}\n\n/* Keep canvas visible and proportionally scaled while layout catches up */\n.pdf-viewer [data-layout-syncing='true'] canvas {\n object-fit: contain;\n}\n\n/* Hide native scrollbars; custom ScrollAreaScrollbar is used instead */\n.pdf-viewer .pdf-scroll-viewport {\n scrollbar-width: none;\n}\n\n.pdf-viewer .pdf-scroll-viewport::-webkit-scrollbar {\n display: none;\n}\n","import { forwardRef, type ButtonHTMLAttributes, type CSSProperties, type ReactNode } from 'react'\nimport type {\n ViewerToolbarClassNames,\n ViewerToolbarStyles,\n} from '../customization-types'\nimport { getFileViewerDefaults } from '../config'\nimport { mergeClassNames, mergeStyles } from '../utils/merge-slot-props'\n\nconst VIEWER_TOOLBAR_DEFAULT =\n 'absolute bottom-4 left-1/2 z-10 flex h-[3.25rem] -translate-x-1/2 items-center gap-2 rounded-full border border-neutral-700/50 bg-neutral-900/60 px-4 text-white/90 shadow-lg backdrop-blur-sm transition-opacity duration-300'\n\nconst VIEWER_TOOLBAR_DIVIDER_DEFAULT = 'mx-1 h-full w-px bg-white/20'\n\nconst VIEWER_TOOLBAR_ICON_BUTTON_DEFAULT =\n 'cursor-pointer rounded-full p-2 text-white/70 transition-colors hover:bg-white/10 hover:text-white disabled:pointer-events-none disabled:cursor-not-allowed disabled:opacity-40 disabled:hover:bg-transparent disabled:hover:text-white/40'\n\nexport interface ViewerToolbarCustomization {\n classNames?: ViewerToolbarClassNames\n styles?: ViewerToolbarStyles\n}\n\nexport interface ViewerFloatingToolbarProps extends ViewerToolbarCustomization {\n children: ReactNode\n className?: string\n style?: CSSProperties\n}\n\nexport const ViewerFloatingToolbar = forwardRef<\n HTMLDivElement,\n ViewerFloatingToolbarProps\n>(({ children, className = '', style, classNames, styles }, ref) => {\n const globalToolbar = getFileViewerDefaults().toolbar\n\n return (\n <div\n ref={ref}\n className={mergeClassNames(\n VIEWER_TOOLBAR_DEFAULT,\n globalToolbar?.classNames?.toolbar,\n classNames?.toolbar,\n className,\n )}\n style={mergeStyles(globalToolbar?.styles?.toolbar, styles?.toolbar, style)}\n >\n {children}\n </div>\n )\n})\nViewerFloatingToolbar.displayName = 'ViewerFloatingToolbar'\n\nexport function ViewerToolbarDivider({\n className = '',\n style,\n classNames,\n styles,\n}: {\n className?: string\n style?: CSSProperties\n} & ViewerToolbarCustomization) {\n const globalToolbar = getFileViewerDefaults().toolbar\n\n return (\n <div\n className={mergeClassNames(\n VIEWER_TOOLBAR_DIVIDER_DEFAULT,\n globalToolbar?.classNames?.divider,\n classNames?.divider,\n className,\n )}\n style={mergeStyles(globalToolbar?.styles?.divider, styles?.divider, style)}\n aria-hidden\n />\n )\n}\n\nexport function ViewerToolbarIconButton({\n className = '',\n style,\n classNames,\n styles,\n ...rest\n}: ButtonHTMLAttributes<HTMLButtonElement> & ViewerToolbarCustomization) {\n const globalToolbar = getFileViewerDefaults().toolbar\n\n return (\n <button\n type=\"button\"\n className={mergeClassNames(\n VIEWER_TOOLBAR_ICON_BUTTON_DEFAULT,\n globalToolbar?.classNames?.iconButton,\n classNames?.iconButton,\n className,\n )}\n style={mergeStyles(\n globalToolbar?.styles?.iconButton,\n styles?.iconButton,\n style,\n )}\n {...rest}\n />\n )\n}\n","import { useState, useEffect, useRef, RefObject } from 'react'\n\n/**\n * Calculates the shortest distance between a point (x, y) and a DOM element's bounding box.\n * Returns 0 if the point is inside the element.\n */\nexport function getDistanceToElement(x: number, y: number, element: Element): number {\n const rect = element.getBoundingClientRect()\n const dx = Math.max(rect.left - x, 0, x - rect.right)\n const dy = Math.max(rect.top - y, 0, y - rect.bottom)\n return Math.sqrt(dx * dx + dy * dy)\n}\n\ninterface UseAutoHideOptions {\n /** Distance in pixels to consider the cursor \"near\" the target */\n proximityThreshold?: number\n /** Time in milliseconds to wait before hiding the target */\n timeout?: number\n /** Any state changes that should force the target to become visible briefly */\n activityDeps?: unknown[]\n}\n\nexport function useAutoHide(\n targetRef: RefObject<HTMLElement | null>,\n containerRef: RefObject<HTMLElement | null>,\n options: UseAutoHideOptions = {}\n) {\n const { proximityThreshold = 160, timeout = 3000, activityDeps = [] } = options\n const [isVisible, setIsVisible] = useState(true)\n const timerRef = useRef<number | null>(null)\n const isNearRef = useRef<boolean>(false)\n\n // Function to start the hide timer\n const startTimer = () => {\n if (timerRef.current !== null) {\n window.clearTimeout(timerRef.current)\n }\n timerRef.current = window.setTimeout(() => {\n setIsVisible(false)\n timerRef.current = null\n }, timeout)\n }\n\n // Effect to handle activity dependencies (e.g. page change)\n useEffect(() => {\n setIsVisible(true)\n // Only start the fade-out timer if the mouse isn't currently hovering near it\n if (!isNearRef.current) {\n startTimer()\n }\n return () => {\n if (timerRef.current !== null) {\n window.clearTimeout(timerRef.current)\n timerRef.current = null\n }\n }\n // eslint-disable-next-deps\n }, activityDeps)\n\n // Effect to handle mouse movement inside the container\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n const handleMouseMove = (e: MouseEvent) => {\n if (!targetRef.current) return\n\n const distance = getDistanceToElement(e.clientX, e.clientY, targetRef.current)\n const isNear = distance <= proximityThreshold\n \n if (isNear) {\n setIsVisible(true)\n if (timerRef.current !== null) {\n window.clearTimeout(timerRef.current)\n timerRef.current = null\n }\n } else {\n // If we just moved away from the element, start the timer\n if (isNearRef.current) {\n startTimer()\n }\n }\n \n isNearRef.current = isNear\n }\n\n const handleMouseLeave = () => {\n isNearRef.current = false\n startTimer()\n }\n\n container.addEventListener('mousemove', handleMouseMove)\n container.addEventListener('mouseleave', handleMouseLeave)\n\n return () => {\n container.removeEventListener('mousemove', handleMouseMove)\n container.removeEventListener('mouseleave', handleMouseLeave)\n }\n }, [proximityThreshold, timeout, targetRef, containerRef])\n\n return isVisible\n}\n","'use client'\n\nimport {\n ChevronLeft,\n ChevronRight,\n Scan,\n ZoomIn,\n ZoomOut,\n} from './components/icons'\nimport {\n ScrollAreaCorner,\n ScrollAreaRoot,\n ScrollAreaScrollbar,\n ScrollAreaThumb,\n ScrollAreaViewport,\n} from './primitives/scroll-area'\nimport {\n ReactNode,\n useCallback,\n useEffect,\n useMemo,\n useRef,\n useState,\n} from 'react'\nimport { Document, Page } from 'react-pdf'\nimport './pdf-viewer.css'\nimport {\n FileViewerTooltip,\n FileViewerTooltipProvider,\n} from './components/FileViewerTooltip'\nimport {\n ViewerFloatingToolbar,\n ViewerToolbarDivider,\n ViewerToolbarIconButton,\n} from './components/ViewerToolbar'\nimport { useAutoHide } from './hooks/useAutoHide'\nimport { getFileViewerDefaults, resolvePdfViewerProps } from './config'\nimport type { PdfViewerClassNames, PdfViewerStyles } from './customization-types'\nimport {\n getFileViewerTranslations,\n resolveFormattedMessage,\n type ViewerLanguage,\n} from './translations'\nimport { resolveOption } from './utils/resolve-options'\nimport { mergeClassNames } from './utils/merge-slot-props'\n\nexport type { PdfViewerClassNames, PdfViewerStyles } from './customization-types'\n\nconst PDF_VIEWER_ROOT_DEFAULT =\n 'pdf-viewer flex flex-col items-center gap-4 w-full h-full max-h-full overflow-hidden relative'\n\nconst PDF_SCROLL_AREA_DEFAULT = 'size-full min-h-0 min-w-0'\n\nconst PDF_SCROLL_VIEWPORT_DEFAULT =\n 'w-full h-full rounded-[inherit] [&>div]:min-h-full'\n\nconst PDF_SCROLLBAR_VERTICAL_DEFAULT =\n 'flex flex-col touch-none select-none transition-colors w-4 border-l border-l-transparent p-0.5 hover:bg-black/10 z-20'\n\nconst PDF_SCROLLBAR_HORIZONTAL_DEFAULT =\n 'flex flex-col touch-none select-none transition-colors h-4 border-t border-t-transparent p-0.5 hover:bg-black/10 z-20'\n\nconst PDF_SCROLLBAR_THUMB_DEFAULT =\n 'relative shrink-0 rounded-full bg-neutral-500/50 hover:bg-neutral-500/80'\n\nconst PDF_PAGE_DEFAULT =\n 'relative flex shrink-0 items-center justify-center overflow-hidden m-auto'\n\nconst PDF_PAGE_INNER_DEFAULT =\n 'relative flex h-full w-full items-center justify-center overflow-hidden bg-white shadow-lg'\n\nconst PDF_PAGE_INPUT_DEFAULT =\n 'w-10 bg-transparent text-center focus:outline-none transition-colors'\n\nexport type PdfViewMode = 'single' | 'continuous'\n\nexport interface PaginationRenderProps {\n pageNumber: number\n numPages: number\n previousPage: () => void\n nextPage: () => void\n goToPage: (page: number) => void\n isFirstPage: boolean\n isLastPage: boolean\n viewMode: PdfViewMode\n}\n\nexport interface PdfViewerProps {\n url: string\n\n // View mode\n viewMode?: PdfViewMode // default: 'continuous'\n\n // Resize: debounced size used for <Page width=…> (canvas); instant size drives CSS scale while resizing\n debounceDelay?: number // default: 300ms\n /** Debounce before re-rendering canvas at new resolution after zoom (default: 500ms). */\n zoomDebounceDelay?: number\n\n // Rendering\n renderTextLayer?: boolean // default: true\n renderAnnotationLayer?: boolean // default: true\n renderLoading?: ReactNode\n\n // Lazy loading (continuous mode)\n preloadAhead?: number // default: 1\n\n // Callbacks\n onLoadSuccess?: (numPages: number) => void\n onLoadError?: (error: Error) => void\n onPageChange?: (page: number) => void\n\n // Pagination\n defaultPage?: number\n renderPagination?: ((props: PaginationRenderProps) => ReactNode) | null\n\n paginationClassName?: string\n\n language?: ViewerLanguage\n\n // Styling\n className?: string\n pageClassName?: string\n classNames?: PdfViewerClassNames\n styles?: PdfViewerStyles\n}\n\nexport default function PdfViewer(props: PdfViewerProps) {\n const { url, language: languageProp, ...instanceProps } = props\n const resolved = resolvePdfViewerProps(instanceProps)\n\n const viewMode = resolved.viewMode ?? 'continuous'\n const debounceDelay = resolved.debounceDelay ?? 300\n const zoomDebounceDelay = resolved.zoomDebounceDelay ?? 500\n const renderTextLayer = resolved.renderTextLayer ?? true\n const renderAnnotationLayer = resolved.renderAnnotationLayer ?? true\n const renderLoading = resolved.renderLoading ?? null\n const preloadAhead = resolved.preloadAhead ?? 1\n const onLoadSuccess = resolved.onLoadSuccess\n const onLoadError = resolved.onLoadError\n const onPageChange = resolved.onPageChange\n const defaultPage = resolved.defaultPage ?? 1\n const renderPagination = resolved.renderPagination\n const paginationClassName = resolved.paginationClassName\n const className = resolved.className\n const pageClassName = resolved.pageClassName\n const classNames = resolved.classNames\n const styles = resolved.styles\n\n const language = resolveOption(\n languageProp,\n getFileViewerDefaults().language,\n 'english',\n )\n\n const pdfT = getFileViewerTranslations(language).pdfViewer\n\n const autoHideDefaults = getFileViewerDefaults().autoHide\n\n const pdfClassName = (\n key: keyof PdfViewerClassNames,\n builtIn: string,\n extra?: string,\n ) =>\n mergeClassNames(\n builtIn,\n classNames?.[key],\n key === 'root' ? className : undefined,\n key === 'page' ? pageClassName : undefined,\n key === 'pagination' ? paginationClassName : undefined,\n extra,\n )\n\n const pdfStyle = (key: keyof PdfViewerStyles) => styles?.[key]\n\n const [numPages, setNumPages] = useState<number>(0)\n const [pageNumber, setPageNumber] = useState<number>(defaultPage)\n const [visibleRange, setVisibleRange] = useState({ start: defaultPage, end: defaultPage })\n const [inputPage, setInputPage] = useState<string>(String(defaultPage))\n const containerRef = useRef<HTMLDivElement>(null)\n const toolbarRef = useRef<HTMLDivElement>(null)\n const pageRefs = useRef<Map<number, HTMLDivElement>>(new Map())\n\n const [instantSize, setInstantSize] = useState({ width: 0, height: 0 })\n const [renderedSize, setRenderedSize] = useState({ width: 0, height: 0 })\n const [pageOriginalSize, setPageOriginalSize] = useState({\n width: 0,\n height: 0,\n })\n\n const renderedHeights = useRef<Map<number, number>>(new Map())\n\n // --- Zoom State ---\n const [instantZoom, setInstantZoom] = useState(1)\n const [renderedZoom, setRenderedZoom] = useState(1)\n\n const isToolbarVisible = useAutoHide(toolbarRef, containerRef, {\n proximityThreshold: autoHideDefaults?.proximityThreshold,\n timeout: autoHideDefaults?.timeout,\n activityDeps: [pageNumber, instantZoom],\n })\n\n // Keep track of whether the user has interacted with zoom yet. \n // If not, we don't apply CSS transitions to avoid initial layout jank from placeholders.\n const [hasZoomed, setHasZoomed] = useState(false)\n\n // Reset zoom and clear cached heights when URL or view mode changes\n useEffect(() => {\n setInstantZoom(1)\n setRenderedZoom(1)\n setHasZoomed(false)\n renderedHeights.current.clear()\n }, [url, viewMode])\n\n useEffect(() => {\n if (instantZoom === renderedZoom) return\n const timerId = window.setTimeout(() => {\n setRenderedZoom(instantZoom)\n renderedHeights.current.clear()\n }, zoomDebounceDelay)\n return () => window.clearTimeout(timerId)\n }, [instantZoom, renderedZoom, zoomDebounceDelay])\n\n // While the user navigates to a specific page via input/Enter/blur, freeze the displayed\n // input value at the target page so it doesn't tick through every page crossed during the scroll.\n const pendingInputPageRef = useRef<number | null>(null)\n const pendingInputPageTimerRef = useRef<number | null>(null)\n\n // Sync input with page number (skips while a programmatic navigation is in flight)\n useEffect(() => {\n const pending = pendingInputPageRef.current\n if (pending !== null) {\n if (pageNumber === pending) {\n pendingInputPageRef.current = null\n if (pendingInputPageTimerRef.current !== null) {\n window.clearTimeout(pendingInputPageTimerRef.current)\n pendingInputPageTimerRef.current = null\n }\n setInputPage(String(pageNumber))\n }\n return\n }\n setInputPage(String(pageNumber))\n }, [pageNumber])\n\n // --- Size Tracking ---\n useEffect(() => {\n const updateSize = () => {\n if (containerRef.current) {\n const newSize = {\n width: Math.trunc(containerRef.current.clientWidth),\n height: Math.trunc(containerRef.current.clientHeight),\n }\n setInstantSize((prev) => {\n if (prev.width === newSize.width && prev.height === newSize.height) return prev\n return newSize\n })\n setRenderedSize((prev) =>\n prev.width === 0 && newSize.width > 0 ? newSize : prev,\n )\n }\n }\n\n const observer = new ResizeObserver(() => updateSize())\n if (containerRef.current) observer.observe(containerRef.current)\n updateSize()\n\n return () => observer.disconnect()\n }, [])\n\n useEffect(() => {\n if (instantSize.width === 0) return\n const timerId = window.setTimeout(() => {\n setRenderedSize(instantSize)\n }, debounceDelay)\n return () => window.clearTimeout(timerId)\n }, [instantSize, debounceDelay])\n\n // --- Dimension Calculation ---\n const calculateDimensions = useCallback(\n (container: { width: number; height: number }) => {\n if (!container.width || !container.height) {\n return {\n width: container.width ? Math.trunc(container.width) : undefined,\n height: container.height ? Math.trunc(container.height) : undefined,\n }\n }\n\n let remToPx = 16\n if (typeof document !== 'undefined') {\n remToPx =\n parseFloat(getComputedStyle(document.documentElement).fontSize) ||\n 16\n }\n\n const width = Math.trunc(Math.min(container.width, remToPx * 50))\n\n // Before the first page reports its size, use an approximation so <Page> can mount\n // and unlock aspect ratio (avoids height=undefined → nothing rendered).\n if (!pageOriginalSize.width || !pageOriginalSize.height) {\n return {\n width,\n height: Math.trunc(width * 1.414), // Approximate A4 ratio\n }\n }\n\n const pageRatio = pageOriginalSize.width / pageOriginalSize.height\n return { width, height: Math.trunc(width / pageRatio) }\n },\n [pageOriginalSize],\n )\n\n const instantDimensions = useMemo(\n () => calculateDimensions(instantSize),\n [calculateDimensions, instantSize],\n )\n\n const renderedDimensions = useMemo(\n () => calculateDimensions(renderedSize),\n [calculateDimensions, renderedSize],\n )\n\n const zoomedRenderedDimensions = useMemo(() => {\n return {\n width: renderedDimensions.width\n ? Math.trunc(renderedDimensions.width * renderedZoom)\n : undefined,\n height: renderedDimensions.height\n ? Math.trunc(renderedDimensions.height * renderedZoom)\n : undefined,\n }\n }, [renderedDimensions, renderedZoom])\n\n const zoomedInstantDimensions = useMemo(() => {\n return {\n width: instantDimensions.width\n ? Math.trunc(instantDimensions.width * instantZoom)\n : undefined,\n height: instantDimensions.height\n ? Math.trunc(instantDimensions.height * instantZoom)\n : undefined,\n }\n }, [instantDimensions, instantZoom])\n\n /** CSS scale from debounced canvas layout → current viewport (uniform, object-contain style). */\n const layoutScale = useMemo(() => {\n const renderedWidth = zoomedRenderedDimensions.width\n const renderedHeight = zoomedRenderedDimensions.height\n const instantWidth = zoomedInstantDimensions.width\n const instantHeight = zoomedInstantDimensions.height\n if (!renderedWidth || !instantWidth || !instantHeight) {\n return 1\n }\n if (!renderedHeight) {\n return Number((instantWidth / renderedWidth).toFixed(4))\n }\n return Number(\n Math.min(\n instantWidth / renderedWidth,\n instantHeight / renderedHeight,\n ).toFixed(4),\n )\n }, [zoomedInstantDimensions, zoomedRenderedDimensions])\n\n const isLayoutSyncing = useMemo(() => {\n if (instantZoom !== renderedZoom) return true\n if (\n instantSize.width !== renderedSize.width ||\n instantSize.height !== renderedSize.height\n ) {\n return true\n }\n return Math.abs(layoutScale - 1) > 0.001\n }, [\n instantZoom,\n renderedZoom,\n instantSize,\n renderedSize,\n layoutScale,\n ])\n\n // --- PDF Callbacks ---\n const handleDocumentLoadSuccess = ({\n numPages: loadedNumPages,\n }: {\n numPages: number\n }) => {\n setNumPages(loadedNumPages)\n onLoadSuccess?.(loadedNumPages)\n }\n\n const handleDocumentLoadError = (error: Error) => {\n console.error(error)\n onLoadError?.(error)\n }\n\n const handlePageLoadSuccess = (\n pageIndex: number,\n page: { width: number; height: number },\n ) => {\n // Only use the first page's natural aspect ratio for global dimension scaling placeholders\n if (pageIndex === 1) {\n setPageOriginalSize({\n width: Math.trunc(page.width),\n height: Math.trunc(page.height),\n })\n }\n\n // Store exact height for this specific page when it unmounts into a placeholder\n renderedHeights.current.set(pageIndex, Math.trunc(page.height))\n }\n\n // --- Page Navigation & Lazy Loading ---\n // Note: input sync is handled by the dedicated useEffect (which respects the navigation lock).\n const setPage = useCallback(\n (newPage: number) => {\n setPageNumber(newPage)\n onPageChange?.(newPage)\n },\n [onPageChange],\n )\n\n const previousPage = useCallback(() => {\n if (pendingInputPageRef.current !== null) return\n\n const p = Math.max(pageNumber - 1, 1)\n if (viewMode === 'continuous') {\n setTimeout(() => {\n pageRefs.current\n .get(p)\n ?.scrollIntoView({ behavior: 'smooth' as ScrollBehavior, block: 'start' })\n }, 10)\n } else {\n setPage(p)\n }\n }, [pageNumber, viewMode, setPage])\n\n const nextPage = useCallback(() => {\n if (pendingInputPageRef.current !== null) return\n\n const p = Math.min(pageNumber + 1, numPages || 1)\n if (viewMode === 'continuous') {\n setTimeout(() => {\n pageRefs.current\n .get(p)\n ?.scrollIntoView({ behavior: 'smooth' as ScrollBehavior, block: 'start' })\n }, 10)\n } else {\n setPage(p)\n }\n }, [pageNumber, numPages, viewMode, setPage])\n\n const goToPage = useCallback(\n (p: number) => {\n const validPage = Math.max(1, Math.min(p, numPages || 1))\n if (viewMode === 'continuous') {\n // Lock the input value at the target page while the scroll is in progress,\n // so the displayed number doesn't tick through intermediate pages.\n pendingInputPageRef.current = validPage\n setInputPage(String(validPage))\n if (pendingInputPageTimerRef.current !== null) {\n window.clearTimeout(pendingInputPageTimerRef.current)\n }\n // Safety fallback: if the user interrupts the scroll, release the lock after 750ms\n pendingInputPageTimerRef.current = window.setTimeout(() => {\n pendingInputPageRef.current = null\n pendingInputPageTimerRef.current = null\n setInputPage(String(pageNumberRef.current))\n }, 750)\n // Small timeout to allow React to render the placeholder/page before scrolling\n setTimeout(() => {\n pageRefs.current.get(validPage)?.scrollIntoView({ behavior: 'smooth' as ScrollBehavior, block: 'start' })\n }, 10)\n } else {\n setPage(validPage)\n }\n },\n [numPages, viewMode, setPage],\n )\n\n // --- Continuous Mode Observer ---\n // Stable ref to the current page so the observer effect doesn't reset on every page change\n // (which would lose the accumulated ratio map and cause flicker).\n const pageNumberRef = useRef(pageNumber)\n useEffect(() => {\n pageNumberRef.current = pageNumber\n }, [pageNumber])\n\n const CONTINUOUS_PAGE_GAP_PX = 16\n const isPreservingScrollRef = useRef(false)\n\n const updateVisiblePagesFromScroll = useCallback(() => {\n const container = containerRef.current\n if (\n !container ||\n viewMode !== 'continuous' ||\n numPages <= 0 ||\n isPreservingScrollRef.current\n ) {\n return\n }\n\n const scrollTop = container.scrollTop\n const viewBottom = scrollTop + container.clientHeight\n const defaultPageHeight = zoomedRenderedDimensions.height ?? 0\n\n let offset = 0\n let minVisible = Number.POSITIVE_INFINITY\n let maxVisible = 0\n\n for (let page = 1; page <= numPages; page++) {\n const renderedPageHeight =\n renderedHeights.current.get(page) ?? defaultPageHeight\n const slotHeight = Math.trunc(renderedPageHeight * layoutScale)\n const pageTop = offset\n const pageBottom = offset + slotHeight\n\n if (pageBottom > scrollTop && pageTop < viewBottom) {\n minVisible = Math.min(minVisible, page)\n maxVisible = Math.max(maxVisible, page)\n }\n\n offset = pageBottom + CONTINUOUS_PAGE_GAP_PX\n }\n\n if (minVisible === Number.POSITIVE_INFINITY) return\n\n setVisibleRange((prev) =>\n prev.start !== minVisible || prev.end !== maxVisible\n ? { start: minVisible, end: maxVisible }\n : prev,\n )\n }, [\n viewMode,\n numPages,\n layoutScale,\n zoomedRenderedDimensions.height,\n ])\n\n useEffect(() => {\n if (viewMode !== 'continuous' || !numPages || !containerRef.current) return\n\n const container = containerRef.current\n const handleScroll = () => {\n requestAnimationFrame(updateVisiblePagesFromScroll)\n }\n\n container.addEventListener('scroll', handleScroll, { passive: true })\n updateVisiblePagesFromScroll()\n\n return () => container.removeEventListener('scroll', handleScroll)\n }, [numPages, viewMode, updateVisiblePagesFromScroll])\n\n useEffect(() => {\n if (instantZoom === renderedZoom) {\n updateVisiblePagesFromScroll()\n }\n }, [instantZoom, renderedZoom, updateVisiblePagesFromScroll])\n\n useEffect(() => {\n if (viewMode !== 'continuous' || !numPages || !containerRef.current) return\n\n // IntersectionObserver callbacks only contain entries whose threshold crossed in this tick,\n // not all observed targets. We track the latest ratio per page in a Map and always pick the\n // current global maximum to avoid flicker (e.g. 3 → 4 → 3 → 4 during a single scroll).\n const ratios = new Map<number, number>()\n\n const observer = new IntersectionObserver(\n (entries) => {\n for (const entry of entries) {\n const pStr = entry.target.getAttribute('data-page-number')\n if (!pStr) continue\n const p = parseInt(pStr, 10)\n if (!Number.isFinite(p)) continue\n ratios.set(p, entry.intersectionRatio)\n }\n\n let bestPage = 0\n let bestRatio = 0\n let minVisible = Infinity\n let maxVisible = -Infinity\n\n ratios.forEach((ratio, page) => {\n if (ratio > 0) {\n minVisible = Math.min(minVisible, page)\n maxVisible = Math.max(maxVisible, page)\n }\n\n if (ratio > bestRatio) {\n bestRatio = ratio\n bestPage = page\n }\n })\n\n if (bestPage > 0 && bestRatio > 0 && bestPage !== pageNumberRef.current) {\n setPage(bestPage)\n }\n\n if (minVisible !== Infinity && maxVisible !== -Infinity) {\n setVisibleRange((prev) => {\n if (prev.start !== minVisible || prev.end !== maxVisible) {\n return { start: minVisible, end: maxVisible }\n }\n return prev\n })\n }\n },\n {\n root: containerRef.current,\n threshold: [0, 0.1, 0.25, 0.5, 0.75, 1],\n },\n )\n\n const currentRefs = pageRefs.current\n currentRefs.forEach((ref) => {\n if (ref) observer.observe(ref)\n })\n\n return () => observer.disconnect()\n }, [numPages, viewMode, setPage])\n\n // --- Zoom Actions ---\n const scrollRatioRef = useRef({ x: 0, y: 0 })\n const zoomAnimFrameRef = useRef<number | null>(null)\n\n useEffect(() => {\n return () => {\n if (zoomAnimFrameRef.current !== null) {\n cancelAnimationFrame(zoomAnimFrameRef.current)\n }\n }\n }, [])\n\n const preserveScrollPosition = useCallback(() => {\n const container = containerRef.current\n if (!container) return\n\n isPreservingScrollRef.current = true\n\n // Calculate the center point of the current viewport relative to the total scrollable content\n const centerY = container.scrollTop + container.clientHeight / 2\n const ratioY = container.scrollHeight > 0 ? centerY / container.scrollHeight : 0\n\n const centerX = container.scrollLeft + container.clientWidth / 2\n const ratioX = container.scrollWidth > 0 ? centerX / container.scrollWidth : 0\n\n scrollRatioRef.current = { x: ratioX, y: ratioY }\n\n if (zoomAnimFrameRef.current !== null) {\n cancelAnimationFrame(zoomAnimFrameRef.current)\n }\n\n const startTime = performance.now()\n const duration = 250 // slightly longer than CSS transition (200ms) to ensure it catches the end\n\n const step = (time: number) => {\n const currentContainer = containerRef.current\n if (!currentContainer) return\n\n // Find the new center point based on the updated scrollHeight/Width\n const newCenterY = currentContainer.scrollHeight * scrollRatioRef.current.y\n const newCenterX = currentContainer.scrollWidth * scrollRatioRef.current.x\n\n // Adjust scrollTop/Left so that the new center point is in the middle of the viewport\n currentContainer.scrollTop = newCenterY - currentContainer.clientHeight / 2\n currentContainer.scrollLeft = newCenterX - currentContainer.clientWidth / 2\n\n if (time - startTime < duration) {\n zoomAnimFrameRef.current = requestAnimationFrame(step)\n } else {\n zoomAnimFrameRef.current = null\n isPreservingScrollRef.current = false\n }\n }\n\n zoomAnimFrameRef.current = requestAnimationFrame(step)\n }, [])\n\n const handleZoomIn = useCallback(() => {\n setHasZoomed(true)\n preserveScrollPosition()\n setInstantZoom((prev) => Math.min(prev * 1.3, 4))\n }, [preserveScrollPosition])\n\n const handleZoomOut = useCallback(() => {\n setHasZoomed(true)\n preserveScrollPosition()\n setInstantZoom((prev) => Math.max(prev / 1.3, 0.5))\n }, [preserveScrollPosition])\n\n const handleZoomReset = useCallback(() => {\n setHasZoomed(true)\n preserveScrollPosition()\n setInstantZoom(1)\n }, [preserveScrollPosition])\n\n const zoomOutDisabled = instantZoom <= 0.501\n const zoomInDisabled = instantZoom >= 3.99\n const fitDisabled = Math.abs(instantZoom - 1) < 0.01\n\n // --- Render Pagination ---\n const renderPaginationElement = () => {\n if (renderPagination === null || numPages <= 1) return null\n\n const props: PaginationRenderProps = {\n pageNumber,\n numPages,\n previousPage,\n nextPage,\n goToPage,\n isFirstPage: pageNumber <= 1,\n isLastPage: pageNumber >= numPages,\n viewMode,\n }\n\n if (renderPagination) {\n return renderPagination(props)\n }\n\n // Default pagination\n const paginationBody = (\n <>\n <div className=\"bg-black/20 rounded px-1 flex items-center justify-center\">\n <input\n type=\"text\"\n inputMode=\"numeric\"\n value={inputPage}\n onChange={(event) => setInputPage(event.target.value)}\n onKeyDown={(event) => {\n if (event.key === 'Enter') {\n const p = parseInt(inputPage, 10)\n if (!isNaN(p)) goToPage(p)\n } else if (event.key === 'ArrowUp') {\n event.preventDefault()\n const p = parseInt(inputPage, 10)\n if (!isNaN(p)) {\n setInputPage(String(Math.min(p + 1, numPages)))\n }\n } else if (event.key === 'ArrowDown') {\n event.preventDefault()\n const p = parseInt(inputPage, 10)\n if (!isNaN(p)) {\n setInputPage(String(Math.max(p - 1, 1)))\n }\n }\n }}\n onBlur={() => {\n const p = parseInt(inputPage, 10)\n if (!isNaN(p)) goToPage(p)\n else setInputPage(String(pageNumber))\n }}\n className={pdfClassName('pageInput', PDF_PAGE_INPUT_DEFAULT)}\n style={pdfStyle('pageInput')}\n aria-label={resolveFormattedMessage(pdfT.pageInputAriaLabel, {\n value: inputPage,\n })}\n />\n </div>\n <span className=\"opacity-60 mx-1\">/</span>\n <span>{numPages}</span>\n </>\n )\n\n return (\n <ViewerFloatingToolbar\n ref={toolbarRef}\n className={mergeClassNames(\n pdfClassName('pagination', ''),\n isToolbarVisible\n ? 'opacity-100 pointer-events-auto'\n : 'opacity-0 pointer-events-none',\n )}\n style={pdfStyle('pagination')}\n >\n <FileViewerTooltip\n content={pdfT.previousPageTooltip}\n disabled={props.isFirstPage}\n >\n <ViewerToolbarIconButton\n disabled={props.isFirstPage}\n onClick={previousPage}\n aria-label={pdfT.previousPageAriaLabel}\n >\n <ChevronLeft className=\"h-5 w-5\" aria-hidden />\n </ViewerToolbarIconButton>\n </FileViewerTooltip>\n\n {paginationBody}\n\n <FileViewerTooltip\n content={pdfT.nextPageTooltip}\n disabled={props.isLastPage}\n >\n <ViewerToolbarIconButton\n disabled={props.isLastPage}\n onClick={nextPage}\n aria-label={pdfT.nextPageAriaLabel}\n >\n <ChevronRight className=\"h-5 w-5\" aria-hidden />\n </ViewerToolbarIconButton>\n </FileViewerTooltip>\n\n <ViewerToolbarDivider />\n\n <FileViewerTooltip\n content={pdfT.zoomOutTooltip}\n disabled={zoomOutDisabled}\n >\n <ViewerToolbarIconButton\n disabled={zoomOutDisabled}\n onClick={handleZoomOut}\n aria-label={pdfT.zoomOutAriaLabel}\n >\n <ZoomOut className=\"h-5 w-5\" />\n </ViewerToolbarIconButton>\n </FileViewerTooltip>\n\n <FileViewerTooltip\n content={pdfT.fitWidthTooltip}\n disabled={fitDisabled}\n >\n <ViewerToolbarIconButton\n disabled={fitDisabled}\n onClick={handleZoomReset}\n aria-label={pdfT.fitWidthAriaLabel}\n >\n <Scan className=\"h-5 w-5\" />\n </ViewerToolbarIconButton>\n </FileViewerTooltip>\n\n <FileViewerTooltip\n content={pdfT.zoomInTooltip}\n disabled={zoomInDisabled}\n >\n <ViewerToolbarIconButton\n disabled={zoomInDisabled}\n onClick={handleZoomIn}\n aria-label={pdfT.zoomInAriaLabel}\n >\n <ZoomIn className=\"h-5 w-5\" />\n </ViewerToolbarIconButton>\n </FileViewerTooltip>\n </ViewerFloatingToolbar>\n )\n }\n\n const pageTransitionClass =\n hasZoomed && pageOriginalSize.width\n ? 'transition-[width,height] duration-200 ease-out'\n : ''\n\n return (\n <FileViewerTooltipProvider>\n <div\n className={pdfClassName('root', PDF_VIEWER_ROOT_DEFAULT)}\n style={pdfStyle('root')}\n >\n <ScrollAreaRoot\n className={pdfClassName('scrollArea', PDF_SCROLL_AREA_DEFAULT)}\n style={pdfStyle('scrollArea')}\n >\n <ScrollAreaViewport\n ref={containerRef}\n className={pdfClassName(\n 'scrollViewport',\n `${PDF_SCROLL_VIEWPORT_DEFAULT} pdf-scroll-viewport`,\n )}\n style={pdfStyle('scrollViewport')}\n >\n <div className=\"flex min-h-full min-w-full flex-col\">\n <Document\n file={url}\n onLoadSuccess={handleDocumentLoadSuccess}\n onLoadError={handleDocumentLoadError}\n loading={renderLoading}\n className=\"flex w-full flex-col gap-4\"\n >\n {viewMode === 'single' &&\n zoomedRenderedDimensions.width &&\n zoomedInstantDimensions.width &&\n zoomedInstantDimensions.height ? (\n <div\n data-layout-syncing={isLayoutSyncing ? 'true' : undefined}\n className={pdfClassName(\n 'page',\n PDF_PAGE_DEFAULT,\n pageTransitionClass,\n )}\n style={{\n width: zoomedInstantDimensions.width,\n height: zoomedInstantDimensions.height,\n ...pdfStyle('page'),\n }}\n >\n <div\n className={pdfClassName('pageInner', PDF_PAGE_INNER_DEFAULT)}\n style={pdfStyle('pageInner')}\n >\n <Page\n pageNumber={pageNumber}\n onLoadSuccess={(page) =>\n handlePageLoadSuccess(pageNumber, page)\n }\n renderTextLayer={renderTextLayer}\n renderAnnotationLayer={renderAnnotationLayer}\n className=\"flex h-full w-full shrink flex-1 items-center justify-center !bg-transparent [&_canvas]:!h-full [&_canvas]:!w-full\"\n renderMode=\"canvas\"\n width={zoomedRenderedDimensions.width}\n loading={null}\n />\n </div>\n </div>\n ) : null}\n\n {viewMode === 'continuous' &&\n numPages > 0 &&\n zoomedRenderedDimensions.width &&\n zoomedRenderedDimensions.height &&\n zoomedInstantDimensions.width &&\n Array.from(new Array(numPages), (_, index) => {\n const p = index + 1\n\n // Mount the heavy <Page> component if it's visible, plus the buffer ahead/behind\n const isInWindow =\n p >= visibleRange.start - preloadAhead &&\n p <= visibleRange.end + preloadAhead\n\n const renderedPageHeight =\n renderedHeights.current.get(p) ??\n zoomedRenderedDimensions.height ??\n 0\n\n const slotWidth = zoomedInstantDimensions.width\n ? Math.trunc(zoomedInstantDimensions.width)\n : undefined\n const slotHeight = Math.trunc(renderedPageHeight * layoutScale)\n\n const placeholderStyle =\n !isInWindow && slotHeight\n ? {\n width: slotWidth,\n height: slotHeight,\n backgroundColor: '#80808040',\n }\n : {\n width: slotWidth,\n height: slotHeight,\n }\n\n return (\n <div\n key={`page_${p}`}\n data-layout-syncing={isLayoutSyncing ? 'true' : undefined}\n data-page-number={p}\n ref={(el) => {\n if (el) pageRefs.current.set(p, el)\n else pageRefs.current.delete(p)\n }}\n className={pdfClassName(\n 'page',\n PDF_PAGE_DEFAULT,\n pageTransitionClass,\n )}\n style={{ ...placeholderStyle, ...pdfStyle('page') }}\n >\n {isInWindow ? (\n <div\n className={pdfClassName(\n 'pageInner',\n PDF_PAGE_INNER_DEFAULT,\n )}\n style={pdfStyle('pageInner')}\n >\n <Page\n pageNumber={p}\n onLoadSuccess={(page) =>\n handlePageLoadSuccess(p, page)\n }\n renderTextLayer={renderTextLayer}\n renderAnnotationLayer={renderAnnotationLayer}\n className=\"flex h-full w-full shrink flex-1 items-center justify-center !bg-transparent [&_canvas]:!h-full [&_canvas]:!w-full\"\n renderMode=\"canvas\"\n width={zoomedRenderedDimensions.width}\n loading={null}\n />\n </div>\n ) : null}\n </div>\n )\n })}\n </Document>\n </div>\n </ScrollAreaViewport>\n <ScrollAreaScrollbar\n orientation=\"vertical\"\n className={pdfClassName('scrollbar', PDF_SCROLLBAR_VERTICAL_DEFAULT)}\n style={pdfStyle('scrollbar')}\n >\n <ScrollAreaThumb\n className={pdfClassName('scrollbarThumb', PDF_SCROLLBAR_THUMB_DEFAULT)}\n style={pdfStyle('scrollbarThumb')}\n />\n </ScrollAreaScrollbar>\n <ScrollAreaScrollbar\n orientation=\"horizontal\"\n className={pdfClassName(\n 'scrollbar',\n PDF_SCROLLBAR_HORIZONTAL_DEFAULT,\n )}\n style={pdfStyle('scrollbar')}\n >\n <ScrollAreaThumb\n className={pdfClassName('scrollbarThumb', PDF_SCROLLBAR_THUMB_DEFAULT)}\n style={pdfStyle('scrollbarThumb')}\n />\n </ScrollAreaScrollbar>\n <ScrollAreaCorner className=\"bg-transparent\" />\n </ScrollAreaRoot>\n\n {renderPaginationElement()}\n </div>\n </FileViewerTooltipProvider>\n )\n}\n","export interface ZoomParams {\n scale: number\n positionX: number\n positionY: number\n deltaY: number\n clientX: number\n clientY: number\n wrapperComponent: HTMLDivElement | null\n minScale?: number\n maxScale?: number\n zoomFactor?: number\n}\n\nexport function calculateMultiplicativeZoom({\n scale,\n positionX,\n positionY,\n deltaY,\n clientX,\n clientY,\n wrapperComponent,\n minScale = 0.2,\n maxScale = 8,\n zoomFactor = 0.15,\n}: ZoomParams) {\n const isZoomIn = deltaY < 0\n const factor = isZoomIn ? 1 + zoomFactor : 1 / (1 + zoomFactor)\n\n const newScale = Math.max(minScale, Math.min(scale * factor, maxScale))\n\n if (newScale === scale || !wrapperComponent) {\n return { newX: positionX, newY: positionY, newScale: scale }\n }\n\n const rect = wrapperComponent.getBoundingClientRect()\n const mx = clientX - rect.left\n const my = clientY - rect.top\n\n const ratio = newScale / scale\n const newX = mx - (mx - positionX) * ratio\n const newY = my - (my - positionY) * ratio\n\n return { newX, newY, newScale }\n}\n","/**\n * Viewport clamping aligned with react-zoom-pan-pinch bounds (MIT).\n * Used after programmatic wheel zoom so the image stays reachable without centering.\n */\n\nexport type ImagePanBounds = {\n minPositionX: number\n maxPositionX: number\n minPositionY: number\n maxPositionY: number\n}\n\ntype ComponentsSizes = {\n wrapperWidth: number\n wrapperHeight: number\n newContentWidth: number\n newDiffWidth: number\n newContentHeight: number\n newDiffHeight: number\n}\n\nfunction roundNumber(num: number, decimal: number): number {\n return Number(num.toFixed(decimal))\n}\n\nfunction getComponentsSizes(\n wrapperComponent: HTMLDivElement,\n contentComponent: HTMLDivElement,\n newScale: number,\n): ComponentsSizes {\n const wrapperWidth = wrapperComponent.offsetWidth\n const wrapperHeight = wrapperComponent.offsetHeight\n const contentWidth = contentComponent.offsetWidth\n const contentHeight = contentComponent.offsetHeight\n const newContentWidth = contentWidth * newScale\n const newContentHeight = contentHeight * newScale\n const newDiffWidth = wrapperWidth - newContentWidth\n const newDiffHeight = wrapperHeight - newContentHeight\n return {\n wrapperWidth,\n wrapperHeight,\n newContentWidth,\n newDiffWidth,\n newContentHeight,\n newDiffHeight,\n }\n}\n\nfunction getBoundsFromSizes(\n wrapperWidth: number,\n newContentWidth: number,\n diffWidth: number,\n wrapperHeight: number,\n newContentHeight: number,\n diffHeight: number,\n centerZoomedOut: boolean,\n): ImagePanBounds {\n const scaleWidthFactor =\n wrapperWidth > newContentWidth ? diffWidth * (centerZoomedOut ? 0.5 : 1) : 0\n const scaleHeightFactor =\n wrapperHeight > newContentHeight ? diffHeight * (centerZoomedOut ? 0.5 : 1) : 0\n const minPositionX = wrapperWidth - newContentWidth - scaleWidthFactor\n const maxPositionX = scaleWidthFactor\n const minPositionY = wrapperHeight - newContentHeight - scaleHeightFactor\n const maxPositionY = scaleHeightFactor\n return {\n minPositionX,\n maxPositionX,\n minPositionY,\n maxPositionY,\n }\n}\n\nfunction boundLimiter(\n value: number,\n minBound: number,\n maxBound: number,\n isActive: boolean,\n): number {\n if (!isActive) return roundNumber(value, 2)\n if (value < minBound) return roundNumber(minBound, 2)\n if (value > maxBound) return roundNumber(maxBound, 2)\n return roundNumber(value, 2)\n}\n\nfunction getMouseBoundedPosition(\n positionX: number,\n positionY: number,\n bounds: ImagePanBounds,\n limitToBounds: boolean,\n paddingValueX: number,\n paddingValueY: number,\n wrapperComponent: HTMLDivElement | null,\n): { x: number; y: number } {\n const { minPositionX, minPositionY, maxPositionX, maxPositionY } = bounds\n const paddingX = wrapperComponent ? paddingValueX : 0\n const paddingY = wrapperComponent ? paddingValueY : 0\n const x = boundLimiter(\n positionX,\n minPositionX - paddingX,\n maxPositionX + paddingX,\n limitToBounds,\n )\n const y = boundLimiter(\n positionY,\n minPositionY - paddingY,\n maxPositionY + paddingY,\n limitToBounds,\n )\n return { x, y }\n}\n\nexport type ImageClampSetup = {\n centerZoomedOut: boolean\n disablePadding: boolean\n minPositionX: number | null\n maxPositionX: number | null\n minPositionY: number | null\n maxPositionY: number | null\n limitToBounds: boolean\n}\n\n/**\n * Clamps pan (x, y) to the same bounds the library uses for panning, without changing scale.\n */\nexport function clampPanToImageBounds(\n wrapperComponent: HTMLDivElement,\n contentComponent: HTMLDivElement,\n scale: number,\n positionX: number,\n positionY: number,\n setup: ImageClampSetup,\n): { positionX: number; positionY: number } {\n const {\n wrapperWidth,\n wrapperHeight,\n newContentWidth,\n newContentHeight,\n newDiffWidth,\n newDiffHeight,\n } = getComponentsSizes(wrapperComponent, contentComponent, scale)\n\n const bounds = getBoundsFromSizes(\n wrapperWidth,\n newContentWidth,\n newDiffWidth,\n wrapperHeight,\n newContentHeight,\n newDiffHeight,\n Boolean(setup.centerZoomedOut),\n )\n\n const contentFitsCompletely =\n wrapperWidth >= newContentWidth && wrapperHeight >= newContentHeight\n if (setup.disablePadding && contentFitsCompletely && !setup.centerZoomedOut) {\n bounds.minPositionX = 0\n bounds.maxPositionX = 0\n bounds.minPositionY = 0\n bounds.maxPositionY = 0\n }\n\n const {\n minPositionX: propMinX,\n maxPositionX: propMaxX,\n minPositionY: propMinY,\n maxPositionY: propMaxY,\n } = setup\n\n if (propMinX != null) {\n bounds.minPositionX = wrapperWidth * (1 - scale) + propMinX * scale\n }\n if (propMaxX != null) {\n bounds.maxPositionX = propMaxX * scale\n }\n if (propMinY != null) {\n bounds.minPositionY = wrapperHeight * (1 - scale) + propMinY * scale\n }\n if (propMaxY != null) {\n bounds.maxPositionY = propMaxY * scale\n }\n\n const { x, y } = getMouseBoundedPosition(\n positionX,\n positionY,\n bounds,\n setup.limitToBounds,\n 0,\n 0,\n wrapperComponent,\n )\n return { positionX: x, positionY: y }\n}\n","'use client'\n\nimport {\n TransformWrapper,\n TransformComponent,\n ReactZoomPanPinchContentRef,\n type ReactZoomPanPinchRef,\n} from 'react-zoom-pan-pinch'\nimport { ZoomIn, ZoomOut, Scan, LoaderCircle } from './components/icons'\nimport { useState, useRef, useEffect, useCallback } from 'react'\nimport {\n ViewerFloatingToolbar,\n ViewerToolbarDivider,\n ViewerToolbarIconButton,\n} from './components/ViewerToolbar'\nimport { getFileViewerDefaults, resolveImageViewerProps } from './config'\nimport type {\n ImageViewerClassNames,\n ImageViewerStyles,\n} from './customization-types'\nimport { useAutoHide } from './hooks/useAutoHide'\nimport {\n FileViewerTooltip,\n FileViewerTooltipProvider,\n} from './components/FileViewerTooltip'\nimport { calculateMultiplicativeZoom } from './utils/zoom-utils'\nimport { clampPanToImageBounds } from './utils/image-viewport-clamp'\nimport { getFileViewerTranslations, type ViewerLanguage } from './translations'\nimport { mergeClassNames } from './utils/merge-slot-props'\nimport { resolveOption } from './utils/resolve-options'\n\nexport type { ImageViewerClassNames, ImageViewerStyles } from './customization-types'\n\nconst IMAGE_ROOT_DEFAULT =\n 'relative flex size-full items-center justify-center overflow-hidden'\n\nconst IMAGE_LOADER_OVERLAY_DEFAULT =\n 'absolute inset-0 z-30 flex items-center justify-center bg-neutral-950/40'\n\nconst IMAGE_LOADER_ICON_DEFAULT = 'size-10 animate-spin text-white'\n\nconst IMAGE_IMG_DEFAULT = 'max-h-[calc(100dvh-10rem)] max-w-full shadow'\n\nconst SCALE_EPSILON = 0.012\nconst FIT_AT_ONE_EPSILON = 0.018\nconst WHEEL_VIEWPORT_CLAMP_DEBOUNCE_MS = 500\nconst WHEEL_CLAMP_ANIMATION_MS = 320\n\nexport interface ImageViewerProps {\n url: string\n name: string\n language?: ViewerLanguage\n classNames?: ImageViewerClassNames\n styles?: ImageViewerStyles\n}\n\nexport default function ImageViewer({\n url,\n name,\n language: languageProp,\n classNames: classNamesProp,\n styles: stylesProp,\n}: ImageViewerProps) {\n const resolved = resolveImageViewerProps({\n classNames: classNamesProp,\n styles: stylesProp,\n })\n const classNames = resolved.classNames\n const styles = resolved.styles\n\n const language = resolveOption(\n languageProp,\n getFileViewerDefaults().language,\n 'english',\n )\n\n const imageT = getFileViewerTranslations(language).imageViewer\n const autoHideDefaults = getFileViewerDefaults().autoHide\n\n const imageClassName = (\n key: keyof ImageViewerClassNames,\n builtIn: string,\n extra?: string,\n ) => mergeClassNames(builtIn, classNames?.[key], extra)\n\n const imageStyle = (key: keyof ImageViewerStyles) => styles?.[key]\n const [maxZoom, setMaxZoom] = useState(16)\n const [isPanning, setIsPanning] = useState(false)\n const [hasImageLoaded, setHasImageLoaded] = useState(false)\n const [viewport, setViewport] = useState({\n scale: 1,\n positionX: 0,\n positionY: 0,\n })\n const minZoom = 0.5\n const scaleRef = useRef<HTMLSpanElement>(null)\n const transformRef = useRef<ReactZoomPanPinchContentRef>(null)\n const containerRef = useRef<HTMLDivElement>(null)\n const toolbarRef = useRef<HTMLDivElement>(null)\n const wheelClampTimerRef = useRef<number | null>(null)\n const libraryChangeUnsubscribeRef = useRef<(() => void) | null>(null)\n\n const isToolbarVisible = useAutoHide(toolbarRef, containerRef, {\n proximityThreshold: autoHideDefaults?.proximityThreshold,\n timeout: autoHideDefaults?.timeout,\n activityDeps: [viewport.scale],\n })\n\n const updateScaleText = useCallback((scale: number) => {\n if (scaleRef.current) {\n scaleRef.current.innerText = `${Math.round(scale * 100)}%`\n }\n }, [])\n\n const syncViewportFromLibrary = useCallback(\n (libraryRef: ReactZoomPanPinchRef) => {\n const { scale, positionX, positionY } = libraryRef.instance.state\n setViewport({ scale, positionX, positionY })\n updateScaleText(scale)\n },\n [updateScaleText],\n )\n\n const handleLibraryInit = useCallback(\n (libraryRef: ReactZoomPanPinchRef) => {\n libraryChangeUnsubscribeRef.current?.()\n libraryChangeUnsubscribeRef.current = null\n syncViewportFromLibrary(libraryRef)\n libraryChangeUnsubscribeRef.current = libraryRef.instance.onChange(\n (nextRef) => {\n syncViewportFromLibrary(nextRef)\n },\n )\n },\n [syncViewportFromLibrary],\n )\n\n const scheduleWheelViewportClamp = useCallback(() => {\n if (wheelClampTimerRef.current !== null) {\n clearTimeout(wheelClampTimerRef.current)\n }\n wheelClampTimerRef.current = window.setTimeout(() => {\n wheelClampTimerRef.current = null\n const ref = transformRef.current\n if (!ref) return\n const { instance } = ref\n const { scale, positionX, positionY } = instance.state\n const wrapper = instance.wrapperComponent\n const content = instance.contentComponent\n if (!wrapper || !content) return\n\n const setup = instance.setup\n const clamped = clampPanToImageBounds(\n wrapper,\n content,\n scale,\n positionX,\n positionY,\n {\n centerZoomedOut: Boolean(setup.centerZoomedOut),\n disablePadding: Boolean(setup.disablePadding),\n minPositionX: setup.minPositionX ?? null,\n maxPositionX: setup.maxPositionX ?? null,\n minPositionY: setup.minPositionY ?? null,\n maxPositionY: setup.maxPositionY ?? null,\n limitToBounds: Boolean(setup.limitToBounds),\n },\n )\n\n if (\n Math.abs(clamped.positionX - positionX) > 0.01 ||\n Math.abs(clamped.positionY - positionY) > 0.01\n ) {\n ref.setTransform(\n clamped.positionX,\n clamped.positionY,\n scale,\n WHEEL_CLAMP_ANIMATION_MS,\n 'easeOut',\n )\n }\n }, WHEEL_VIEWPORT_CLAMP_DEBOUNCE_MS)\n }, [])\n\n useEffect(() => {\n return () => {\n if (wheelClampTimerRef.current !== null) {\n clearTimeout(wheelClampTimerRef.current)\n }\n libraryChangeUnsubscribeRef.current?.()\n libraryChangeUnsubscribeRef.current = null\n }\n }, [])\n\n useEffect(() => {\n setHasImageLoaded(false)\n }, [url])\n\n const handleImageLoad = (event: React.SyntheticEvent<HTMLImageElement>) => {\n const img = event.currentTarget\n const naturalWidth = img.naturalWidth\n const currentWidth = img.clientWidth\n\n if (naturalWidth && currentWidth) {\n const nativeScale = naturalWidth / currentWidth\n // Floor 4x (400%), ceiling 16x (1600%), or 2x native resolution\n const calculatedMax = Math.max(4, Math.min(16, nativeScale * 2))\n setMaxZoom(calculatedMax)\n }\n setHasImageLoaded(true)\n }\n\n const handleImageError = () => {\n setHasImageLoaded(true)\n }\n\n const applyWheelZoom = useCallback(\n (event: WheelEvent) => {\n if (!hasImageLoaded) return\n const ref = transformRef.current\n if (!ref) return\n\n event.preventDefault()\n event.stopPropagation()\n\n const { scale, positionX, positionY } = ref.state\n\n const { newX, newY, newScale } = calculateMultiplicativeZoom({\n scale,\n positionX,\n positionY,\n deltaY: event.deltaY,\n clientX: event.clientX,\n clientY: event.clientY,\n wrapperComponent: ref.instance.wrapperComponent,\n minScale: minZoom,\n maxScale: maxZoom,\n })\n\n if (newScale !== scale) {\n ref.setTransform(newX, newY, newScale, 0)\n scheduleWheelViewportClamp()\n }\n },\n [hasImageLoaded, maxZoom, scheduleWheelViewportClamp],\n )\n\n useEffect(() => {\n const container = containerRef.current\n if (!container) return\n\n const handleWheel = (event: WheelEvent) => {\n if (!container.contains(event.target as Node)) return\n applyWheelZoom(event)\n }\n\n container.addEventListener('wheel', handleWheel, { passive: false })\n return () => container.removeEventListener('wheel', handleWheel)\n }, [applyWheelZoom, hasImageLoaded])\n\n const zoomOutDisabled = viewport.scale <= minZoom + SCALE_EPSILON\n const zoomInDisabled = viewport.scale >= maxZoom - SCALE_EPSILON\n const nearDefaultPan =\n Math.abs(viewport.positionX) < 12 && Math.abs(viewport.positionY) < 12\n const fitDisabled =\n Math.abs(viewport.scale - 1) < FIT_AT_ONE_EPSILON && nearDefaultPan\n\n const wrapperCursorClass = isPanning ? 'cursor-move' : ''\n\n return (\n <FileViewerTooltipProvider>\n <div\n ref={containerRef}\n className={imageClassName('root', IMAGE_ROOT_DEFAULT)}\n style={imageStyle('root')}\n >\n {!hasImageLoaded ? (\n <div\n className={imageClassName('loader', IMAGE_LOADER_OVERLAY_DEFAULT)}\n style={imageStyle('loader')}\n aria-busy\n aria-live=\"polite\"\n >\n <LoaderCircle className={IMAGE_LOADER_ICON_DEFAULT} aria-hidden />\n </div>\n ) : null}\n\n <TransformWrapper\n key={url}\n ref={transformRef}\n initialScale={1}\n minScale={minZoom}\n maxScale={maxZoom}\n centerOnInit\n limitToBounds\n wheel={{ disabled: true }}\n onInit={handleLibraryInit}\n onPanningStart={() => setIsPanning(true)}\n onPanningStop={() => setIsPanning(false)}\n >\n {({ zoomIn, zoomOut, resetTransform }) => (\n <>\n <TransformComponent\n wrapperClass={`!size-full ${wrapperCursorClass}`}\n contentClass=\"!size-full flex items-center justify-center\"\n >\n <img\n src={url}\n alt={name}\n onLoad={handleImageLoad}\n onError={handleImageError}\n className={imageClassName('image', IMAGE_IMG_DEFAULT)}\n style={imageStyle('image')}\n />\n </TransformComponent>\n\n <ViewerFloatingToolbar\n ref={toolbarRef}\n className={mergeClassNames(\n imageClassName('toolbar', ''),\n isToolbarVisible\n ? 'opacity-100 pointer-events-auto'\n : 'opacity-0 pointer-events-none',\n )}\n style={imageStyle('toolbar')}\n >\n <span\n ref={scaleRef}\n className=\"w-12 text-center text-sm font-medium text-white/90\"\n >\n 100%\n </span>\n\n <ViewerToolbarDivider />\n\n <FileViewerTooltip\n content={imageT.zoomOutTooltip}\n disabled={zoomOutDisabled}\n >\n <ViewerToolbarIconButton\n disabled={zoomOutDisabled}\n onClick={() => zoomOut()}\n aria-label={imageT.zoomOutAriaLabel}\n >\n <ZoomOut className=\"size-5\" />\n </ViewerToolbarIconButton>\n </FileViewerTooltip>\n\n <FileViewerTooltip\n content={imageT.fitScreenTooltip}\n disabled={fitDisabled}\n >\n <ViewerToolbarIconButton\n disabled={fitDisabled}\n onClick={() => {\n resetTransform()\n updateScaleText(1)\n }}\n aria-label={imageT.fitScreenAriaLabel}\n >\n <Scan className=\"size-5\" />\n </ViewerToolbarIconButton>\n </FileViewerTooltip>\n\n <FileViewerTooltip\n content={imageT.zoomInTooltip}\n disabled={zoomInDisabled}\n >\n <ViewerToolbarIconButton\n disabled={zoomInDisabled}\n onClick={() => zoomIn()}\n aria-label={imageT.zoomInAriaLabel}\n >\n <ZoomIn className=\"size-5\" />\n </ViewerToolbarIconButton>\n </FileViewerTooltip>\n </ViewerFloatingToolbar>\n </>\n )}\n </TransformWrapper>\n </div>\n </FileViewerTooltipProvider>\n )\n}\n","import { useEffect, type RefObject } from 'react'\n\nconst FOCUSABLE_SELECTOR =\n 'a[href], button:not([disabled]), textarea:not([disabled]), input:not([disabled]), select:not([disabled]), [tabindex]:not([tabindex=\"-1\"])'\n\nexport function useFocusTrap(\n containerRef: RefObject<HTMLElement | null>,\n active: boolean,\n) {\n useEffect(() => {\n if (!active) return\n\n const container = containerRef.current\n if (!container) return\n\n const focusable = container.querySelectorAll<HTMLElement>(FOCUSABLE_SELECTOR)\n const first = focusable[0]\n const last = focusable[focusable.length - 1]\n\n first?.focus()\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key !== 'Tab' || focusable.length === 0) return\n\n if (event.shiftKey) {\n if (document.activeElement === first) {\n event.preventDefault()\n last?.focus()\n }\n return\n }\n\n if (document.activeElement === last) {\n event.preventDefault()\n first?.focus()\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n return () => document.removeEventListener('keydown', handleKeyDown)\n }, [active, containerRef])\n}\n","import {\n createContext,\n isValidElement,\n useContext,\n useEffect,\n useId,\n useRef,\n type HTMLAttributes,\n type MouseEvent,\n type ReactElement,\n type ReactNode,\n} from 'react'\nimport { createPortal } from 'react-dom'\nimport { useFocusTrap } from '../hooks/useFocusTrap'\nimport { renderAsChild } from './as-child'\n\ntype DialogContextValue = {\n open: boolean\n onOpenChange: (open: boolean) => void\n titleId: string\n}\n\nconst DialogContext = createContext<DialogContextValue | null>(null)\n\nfunction useDialogContext(component: string): DialogContextValue {\n const context = useContext(DialogContext)\n if (!context) {\n throw new Error(`${component} must be used within Dialog.Root`)\n }\n return context\n}\n\nexport function Root({\n open,\n onOpenChange,\n children,\n}: {\n open: boolean\n onOpenChange: (open: boolean) => void\n children: ReactNode\n}) {\n const titleId = useId()\n\n return (\n <DialogContext.Provider value={{ open, onOpenChange, titleId }}>\n {children}\n </DialogContext.Provider>\n )\n}\n\nexport function Portal({ children }: { children: ReactNode }) {\n const { open } = useDialogContext('Dialog.Portal')\n\n if (!open || typeof document === 'undefined') {\n return null\n }\n\n return createPortal(children, document.body)\n}\n\ntype DialogContentProps = HTMLAttributes<HTMLDivElement> & {\n children: ReactNode\n}\n\nexport function Content({\n children,\n className,\n style,\n 'aria-describedby': ariaDescribedBy,\n ...rest\n}: DialogContentProps) {\n const { open, onOpenChange, titleId } = useDialogContext('Dialog.Content')\n const contentRef = useRef<HTMLDivElement>(null)\n\n useFocusTrap(contentRef, open)\n\n useEffect(() => {\n if (!open) {\n return\n }\n\n const previousOverflow = document.body.style.overflow\n document.body.style.overflow = 'hidden'\n\n return () => {\n document.body.style.overflow = previousOverflow\n }\n }, [open])\n\n useEffect(() => {\n if (!open) {\n return\n }\n\n const handleKeyDown = (event: KeyboardEvent) => {\n if (event.key === 'Escape') {\n onOpenChange(false)\n }\n }\n\n document.addEventListener('keydown', handleKeyDown)\n\n return () => {\n document.removeEventListener('keydown', handleKeyDown)\n }\n }, [open, onOpenChange])\n\n if (!open) {\n return null\n }\n\n return (\n <div\n ref={contentRef}\n role=\"dialog\"\n aria-modal=\"true\"\n aria-labelledby={titleId}\n aria-describedby={ariaDescribedBy}\n data-visible={open ? 'true' : 'false'}\n className={className}\n style={style}\n {...rest}\n >\n {children}\n </div>\n )\n}\n\ntype DialogCloseChildProps = {\n onClick?: (event: MouseEvent<HTMLElement>) => void\n}\n\nexport function Close({\n asChild,\n children,\n}: {\n asChild?: boolean\n children: ReactElement<DialogCloseChildProps>\n}) {\n const { onOpenChange } = useDialogContext('Dialog.Close')\n\n const handleClick = (event: MouseEvent<HTMLElement>) => {\n children.props.onClick?.(event)\n onOpenChange(false)\n }\n\n if (asChild) {\n return renderAsChild(true, children, { onClick: handleClick })\n }\n\n return (\n <button type=\"button\" onClick={handleClick}>\n {children}\n </button>\n )\n}\n\nexport function Title({\n asChild,\n children,\n}: {\n asChild?: boolean\n children: ReactElement | ReactNode\n}) {\n const { titleId } = useDialogContext('Dialog.Title')\n\n if (asChild && isValidElement(children)) {\n return renderAsChild(true, children, { id: titleId })\n }\n\n return <p id={titleId}>{children}</p>\n}\n","'use client'\n\nimport * as Dialog from './primitives/dialog'\nimport {\n Download,\n LoaderCircle,\n Maximize2,\n Printer,\n X,\n} from './components/icons'\nimport { ReactNode, Suspense, useEffect, useRef, useState, lazy } from 'react'\nimport { useReactToPrint } from 'react-to-print'\nimport {\n FileViewerTooltip,\n FileViewerTooltipProvider,\n} from './components/FileViewerTooltip'\nimport {\n getFileViewerDefaults,\n resolveImageViewerProps,\n resolvePdfViewerProps,\n} from './config'\nimport type {\n FileViewerClassNames,\n FileViewerDialogClassNames,\n FileViewerDialogStyles,\n FileViewerStyles,\n} from './customization-types'\nimport type { PdfViewerProps } from './PdfViewer'\nimport {\n getFileViewerTranslations,\n resolveFormattedMessage,\n type ViewerLanguage,\n} from './translations'\nimport { downloadFileFromUrl, printPdfFromUrl } from './utils/file-actions'\nimport { resolveHideCloseButton, resolveOption } from './utils/resolve-options'\nimport { mergeClassNames, mergeStyles } from './utils/merge-slot-props'\n\nconst LazyPdfViewer = lazy(() => import('./PdfViewer'))\nconst LazyImageViewer = lazy(() => import('./ImageViewer'))\n\nexport type {\n FileViewerClassNames,\n FileViewerDialogClassNames,\n FileViewerDialogStyles,\n FileViewerStyles,\n} from './customization-types'\n\nconst FILE_VIEWER_DIALOG_BACKDROP_DEFAULT =\n 'fixed inset-0 z-[100] cursor-default border-0 bg-black/80 p-0 data-[visible=true]:animate-in data-[visible=false]:animate-out data-[visible=false]:fade-out-0 data-[visible=true]:fade-in-0'\n\nconst FILE_VIEWER_DIALOG_CONTENT_DEFAULT =\n 'fixed inset-0 z-[101] flex h-full w-full min-h-0 cursor-default flex-col border-none bg-transparent p-0 shadow-none outline-none pointer-events-none duration-200 data-[visible=true]:animate-in data-[visible=false]:animate-out data-[visible=false]:fade-out-0 data-[visible=true]:fade-in-0 focus:outline-none'\n\nconst FILE_VIEWER_DIALOG_PANEL_DEFAULT =\n 'pointer-events-auto flex h-full w-full min-h-0 flex-col overflow-hidden rounded-none border-0 bg-neutral-800/95 shadow-none'\n\nconst FILE_VIEWER_ROOT_DEFAULT =\n 'flex min-h-0 flex-1 flex-col overflow-hidden'\n\nconst FILE_VIEWER_HEADER_DEFAULT =\n 'flex w-full shrink-0 justify-between gap-2 rounded-t-lg p-4 font-medium text-white'\n\nconst FILE_VIEWER_HEADER_TITLE_WRAP_DEFAULT = 'flex items-center gap-2'\n\nconst FILE_VIEWER_CLOSE_BUTTON_DEFAULT =\n 'cursor-pointer rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus-visible:opacity-100 focus-visible:ring-1 focus-visible:ring-white focus-visible:ring-offset-0 disabled:pointer-events-none'\n\nconst FILE_VIEWER_TITLE_MODAL_DEFAULT = 'truncate'\n\nconst FILE_VIEWER_TITLE_INLINE_DEFAULT = 'truncate font-semibold'\n\nconst FILE_VIEWER_HEADER_ACTIONS_DEFAULT = 'flex gap-3'\n\nconst FILE_VIEWER_ACTION_BUTTON_DEFAULT =\n 'cursor-pointer rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus-visible:opacity-100 focus-visible:ring-1 focus-visible:ring-white focus-visible:ring-offset-0'\n\nconst FILE_VIEWER_ACTION_BUTTON_DOWNLOAD_DEFAULT =\n 'cursor-pointer rounded-sm opacity-70 transition-opacity hover:opacity-100 focus:outline-none focus-visible:opacity-100 focus-visible:ring-1 focus-visible:ring-white focus-visible:ring-offset-0 disabled:pointer-events-none disabled:opacity-50'\n\nconst FILE_VIEWER_VIEWER_DEFAULT =\n 'flex min-h-0 w-full flex-1 items-center justify-center overflow-hidden text-white'\n\nconst FILE_VIEWER_LOADER_DEFAULT = 'size-10 animate-spin'\n\nfunction mergeFileViewerSlotClassName(\n builtIn: string,\n globalValue: string | undefined,\n instanceValue: string | undefined,\n): string {\n return mergeClassNames(builtIn, globalValue, instanceValue)\n}\n\nexport interface FileViewerProps {\n /**\n * The display mode for the file viewer.\n * - `inline`: fits to its parent container (default)\n * - `modal`: renders as a full-screen fixed dialog overlay\n */\n mode?: 'modal' | 'inline'\n open: boolean\n onOpenChange: (open: boolean) => void\n name: string\n extension: string\n url?: string\n isLoading?: boolean\n /** Optional; defaults to built-in download of `url` as `name`. */\n onDownload?: () => void\n pdfViewerProps?: Omit<PdfViewerProps, 'url' | 'language'>\n renderUnsupported?: ReactNode\n language?: ViewerLanguage\n /**\n * When omitted: hidden in `inline` mode, visible in `modal` mode.\n * Instance prop overrides global defaults from `setFileViewerDefaults`.\n */\n hideCloseButton?: boolean\n /**\n * In `inline` mode, shows a control to open the same file in a full-screen modal.\n * Defaults to `true`. Set to `false` to hide the button.\n */\n showOpenInModalButton?: boolean\n /** When set, called instead of the built-in modal preview. */\n onOpenInModal?: () => void\n classNames?: FileViewerClassNames\n styles?: FileViewerStyles\n /** Extra classes per layer; appended to package defaults (use `!` utilities to override when needed). */\n dialogClassNames?: FileViewerDialogClassNames\n dialogStyles?: FileViewerDialogStyles\n}\n\nexport function FileViewer({\n mode: modeProp,\n open,\n onOpenChange,\n name,\n extension,\n url,\n isLoading,\n onDownload,\n pdfViewerProps,\n renderUnsupported,\n language: languageProp,\n hideCloseButton: hideCloseButtonProp,\n showOpenInModalButton: showOpenInModalButtonProp,\n onOpenInModal,\n classNames,\n styles,\n dialogClassNames,\n dialogStyles,\n}: FileViewerProps) {\n const globalFileViewer = getFileViewerDefaults().fileViewer\n const mode = resolveOption(modeProp, globalFileViewer?.mode, 'inline')\n const language = resolveOption(\n languageProp,\n getFileViewerDefaults().language,\n 'english',\n )\n const contentRef = useRef<HTMLDivElement>(null)\n const printImage = useReactToPrint({ contentRef })\n\n const t = getFileViewerTranslations(language)\n\n const ext = extension.toLowerCase()\n const isPdf = ext === 'pdf'\n const isImage = ['jpg', 'png', 'jpeg'].includes(ext)\n const supportedForPreview = isPdf || isImage\n\n const [isMounted, setIsMounted] = useState(false)\n const [isDownloading, setIsDownloading] = useState(false)\n const [isModalPreviewOpen, setIsModalPreviewOpen] = useState(false)\n\n const showOpenInModalButton =\n mode === 'inline' &&\n resolveOption(\n showOpenInModalButtonProp,\n globalFileViewer?.showOpenInModalButton,\n true,\n )\n\n const mergedPdfViewerProps = resolvePdfViewerProps(pdfViewerProps)\n\n const mergedImageViewerProps = resolveImageViewerProps()\n\n useEffect(() => {\n setIsMounted(true)\n }, [])\n\n useEffect(() => {\n setIsDownloading(false)\n }, [open, url])\n\n useEffect(() => {\n if (!open) {\n setIsModalPreviewOpen(false)\n }\n }, [open])\n\n const slotClassName = (\n key: keyof FileViewerClassNames,\n builtIn: string,\n ): string =>\n mergeFileViewerSlotClassName(\n builtIn,\n globalFileViewer?.classNames?.[key],\n classNames?.[key],\n )\n\n const slotStyle = (key: keyof FileViewerStyles) =>\n mergeStyles(globalFileViewer?.styles?.[key], styles?.[key])\n\n const backdropClasses = mergeFileViewerSlotClassName(\n FILE_VIEWER_DIALOG_BACKDROP_DEFAULT,\n globalFileViewer?.dialogClassNames?.backdrop,\n dialogClassNames?.backdrop,\n )\n const contentClasses = mergeFileViewerSlotClassName(\n FILE_VIEWER_DIALOG_CONTENT_DEFAULT,\n globalFileViewer?.dialogClassNames?.content,\n dialogClassNames?.content,\n )\n const panelClasses = mergeFileViewerSlotClassName(\n FILE_VIEWER_DIALOG_PANEL_DEFAULT,\n globalFileViewer?.dialogClassNames?.panel,\n dialogClassNames?.panel,\n )\n\n const backdropStyle = mergeStyles(\n globalFileViewer?.dialogStyles?.backdrop,\n dialogStyles?.backdrop,\n )\n const contentStyle = mergeStyles(\n globalFileViewer?.dialogStyles?.content,\n dialogStyles?.content,\n )\n const panelStyle = mergeStyles(\n globalFileViewer?.dialogStyles?.panel,\n dialogStyles?.panel,\n )\n\n const renderPdf = () => {\n if (!isMounted) return null\n\n return (\n <Suspense\n fallback={\n <LoaderCircle\n className={slotClassName('loader', 'animate-spin size-10 text-white')}\n style={slotStyle('loader')}\n />\n }\n >\n <LazyPdfViewer url={url!} {...mergedPdfViewerProps} language={language} />\n </Suspense>\n )\n }\n\n const renderImage = () => {\n if (!isMounted) return null\n\n return (\n <Suspense\n fallback={\n <LoaderCircle\n className={slotClassName('loader', 'animate-spin size-10 text-white')}\n style={slotStyle('loader')}\n />\n }\n >\n <LazyImageViewer\n url={url!}\n name={name}\n language={language}\n {...mergedImageViewerProps}\n />\n </Suspense>\n )\n }\n\n const handlePrint = () => {\n if (!url) return\n if (isPdf) {\n printPdfFromUrl(url)\n } else {\n printImage()\n }\n }\n\n const handleDownload = async () => {\n if (!url || isDownloading) return\n setIsDownloading(true)\n try {\n if (onDownload) {\n await Promise.resolve(onDownload())\n } else {\n await downloadFileFromUrl(url, name)\n }\n } finally {\n setIsDownloading(false)\n }\n }\n\n const handleOpenInModal = () => {\n if (onOpenInModal) {\n onOpenInModal()\n return\n }\n setIsModalPreviewOpen(true)\n }\n\n const renderCloseButton = (activeMode: 'inline' | 'modal') => {\n const hideClose = resolveHideCloseButton(\n hideCloseButtonProp,\n globalFileViewer?.hideCloseButton,\n activeMode,\n )\n\n if (hideClose) {\n return null\n }\n\n if (activeMode === 'modal') {\n return (\n <Dialog.Close asChild>\n <button\n type=\"button\"\n aria-label={t.fileViewer.closeAriaLabel}\n className={slotClassName('closeButton', FILE_VIEWER_CLOSE_BUTTON_DEFAULT)}\n style={slotStyle('closeButton')}\n >\n <X className=\"size-7\" aria-hidden />\n </button>\n </Dialog.Close>\n )\n }\n\n return (\n <button\n type=\"button\"\n onClick={() => onOpenChange(false)}\n aria-label={t.fileViewer.closeAriaLabel}\n className={slotClassName('closeButton', FILE_VIEWER_CLOSE_BUTTON_DEFAULT)}\n style={slotStyle('closeButton')}\n >\n <X className=\"size-7\" aria-hidden />\n </button>\n )\n }\n\n const renderPanelContent = (activeMode: 'inline' | 'modal') => {\n const closeButton = renderCloseButton(activeMode)\n\n return (\n <div\n className={slotClassName('root', FILE_VIEWER_ROOT_DEFAULT)}\n style={slotStyle('root')}\n >\n <div\n className={slotClassName('header', FILE_VIEWER_HEADER_DEFAULT)}\n style={slotStyle('header')}\n >\n <span className={FILE_VIEWER_HEADER_TITLE_WRAP_DEFAULT}>\n {closeButton}\n {activeMode === 'modal' ? (\n <Dialog.Title asChild>\n <p\n className={slotClassName(\n 'headerTitle',\n FILE_VIEWER_TITLE_MODAL_DEFAULT,\n )}\n style={slotStyle('headerTitle')}\n >\n {name}\n </p>\n </Dialog.Title>\n ) : (\n <p\n className={slotClassName(\n 'headerTitle',\n FILE_VIEWER_TITLE_INLINE_DEFAULT,\n )}\n style={slotStyle('headerTitle')}\n >\n {name}\n </p>\n )}\n </span>\n\n {url && !isLoading && supportedForPreview ? (\n <span\n className={slotClassName(\n 'headerActions',\n FILE_VIEWER_HEADER_ACTIONS_DEFAULT,\n )}\n style={slotStyle('headerActions')}\n >\n {showOpenInModalButton && activeMode === 'inline' ? (\n <FileViewerTooltip content={t.fileViewer.openInModalTooltip}>\n <button\n type=\"button\"\n onClick={handleOpenInModal}\n className={slotClassName(\n 'openInModalButton',\n FILE_VIEWER_ACTION_BUTTON_DEFAULT,\n )}\n style={slotStyle('openInModalButton')}\n aria-label={t.fileViewer.openInModalAriaLabel}\n >\n <Maximize2 className=\"size-6\" aria-hidden />\n </button>\n </FileViewerTooltip>\n ) : null}\n <FileViewerTooltip content={t.fileViewer.printTooltip}>\n <button\n type=\"button\"\n onClick={handlePrint}\n className={slotClassName(\n 'printButton',\n FILE_VIEWER_ACTION_BUTTON_DEFAULT,\n )}\n style={slotStyle('printButton')}\n aria-label={t.fileViewer.printAriaLabel}\n >\n <Printer className=\"size-6\" aria-hidden />\n </button>\n </FileViewerTooltip>\n <FileViewerTooltip\n content={\n isDownloading\n ? t.fileViewer.downloadInProgressTooltip\n : t.fileViewer.downloadTooltip\n }\n >\n <button\n type=\"button\"\n disabled={isDownloading}\n onClick={() => {\n void handleDownload()\n }}\n className={slotClassName(\n 'downloadButton',\n FILE_VIEWER_ACTION_BUTTON_DOWNLOAD_DEFAULT,\n )}\n style={slotStyle('downloadButton')}\n aria-busy={isDownloading}\n aria-label={\n isDownloading\n ? t.fileViewer.downloadInProgressAriaLabel\n : t.fileViewer.downloadAriaLabel\n }\n >\n {isDownloading ? (\n <LoaderCircle className=\"size-6 animate-spin\" aria-hidden />\n ) : (\n <Download className=\"size-6\" aria-hidden />\n )}\n </button>\n </FileViewerTooltip>\n </span>\n ) : null}\n </div>\n <div\n className={slotClassName('viewer', FILE_VIEWER_VIEWER_DEFAULT)}\n style={slotStyle('viewer')}\n >\n {!url || isLoading ? (\n <LoaderCircle\n className={slotClassName('loader', FILE_VIEWER_LOADER_DEFAULT)}\n style={slotStyle('loader')}\n />\n ) : isImage ? (\n renderImage()\n ) : isPdf ? (\n renderPdf()\n ) : (\n renderUnsupported || (\n <p\n className={slotClassName('unsupported', '')}\n style={slotStyle('unsupported')}\n >\n {resolveFormattedMessage(t.fileViewer.unsupportedFileType, {\n extension,\n })}\n </p>\n )\n )}\n </div>\n </div>\n )\n }\n\n const renderModalShell = (\n modalOpen: boolean,\n onModalOpenChange: (nextOpen: boolean) => void,\n content: ReactNode,\n ) => (\n <Dialog.Root open={modalOpen} onOpenChange={onModalOpenChange}>\n <Dialog.Portal>\n <Dialog.Close asChild>\n <button\n type=\"button\"\n tabIndex={-1}\n data-visible={modalOpen}\n className={backdropClasses}\n style={backdropStyle}\n aria-hidden\n />\n </Dialog.Close>\n <Dialog.Content\n aria-describedby={undefined}\n className={contentClasses}\n style={contentStyle}\n >\n <div\n className={panelClasses}\n style={panelStyle}\n onClick={(event) => event.stopPropagation()}\n >\n {content}\n </div>\n </Dialog.Content>\n </Dialog.Portal>\n </Dialog.Root>\n )\n\n const printOnlyNode =\n isImage && url ? (\n <div className=\"hidden\">\n <div ref={contentRef}>\n <img src={url} className=\"max-h-[105dvh]\" alt={name} />\n </div>\n </div>\n ) : null\n\n if (mode === 'inline') {\n if (!open) return null\n return (\n <FileViewerTooltipProvider>\n <div className={panelClasses} style={panelStyle}>\n {renderPanelContent('inline')}\n </div>\n {isModalPreviewOpen\n ? renderModalShell(\n isModalPreviewOpen,\n setIsModalPreviewOpen,\n renderPanelContent('modal'),\n )\n : null}\n {printOnlyNode}\n </FileViewerTooltipProvider>\n )\n }\n\n return (\n <FileViewerTooltipProvider>\n {renderModalShell(open, onOpenChange, renderPanelContent('modal'))}\n {printOnlyNode}\n </FileViewerTooltipProvider>\n )\n}\n","/** Opens the browser print dialog for a PDF URL without navigating the current tab. */\nexport function printPdfFromUrl(url: string): void {\n const iframe = document.createElement('iframe')\n iframe.setAttribute(\n 'style',\n 'position:fixed;right:0;bottom:0;width:0;height:0;border:0;visibility:hidden',\n )\n iframe.setAttribute('aria-hidden', 'true')\n iframe.src = url\n\n const removeIframe = () => {\n iframe.remove()\n }\n\n const onLoad = () => {\n try {\n iframe.contentWindow?.focus()\n iframe.contentWindow?.print()\n } finally {\n window.setTimeout(removeIframe, 500)\n }\n }\n\n iframe.addEventListener('load', onLoad, { once: true })\n iframe.addEventListener('error', removeIframe, { once: true })\n document.body.appendChild(iframe)\n}\n\nexport async function downloadFileFromUrl(\n url: string,\n filename: string,\n): Promise<void> {\n try {\n const response = await fetch(url)\n const blob = await response.blob()\n const objectUrl = URL.createObjectURL(blob)\n const anchor = document.createElement('a')\n anchor.href = objectUrl\n anchor.download = filename\n anchor.rel = 'noopener'\n document.body.appendChild(anchor)\n anchor.click()\n anchor.remove()\n window.setTimeout(() => URL.revokeObjectURL(objectUrl), 2000)\n } catch {\n const anchor = document.createElement('a')\n anchor.href = url\n anchor.download = filename\n anchor.target = '_blank'\n anchor.rel = 'noopener noreferrer'\n document.body.appendChild(anchor)\n anchor.click()\n anchor.remove()\n }\n}\n","export { FileViewer } from './FileViewer'\nexport type {\n FileViewerClassNames,\n FileViewerDialogClassNames,\n FileViewerDialogStyles,\n FileViewerProps,\n FileViewerStyles,\n} from './FileViewer'\nexport { default as PdfViewer } from './PdfViewer'\nexport type {\n PdfViewerClassNames,\n PdfViewerProps,\n PdfViewerStyles,\n PdfViewMode,\n PaginationRenderProps,\n} from './PdfViewer'\nexport { default as ImageViewer } from './ImageViewer'\nexport type {\n ImageViewerClassNames,\n ImageViewerProps,\n ImageViewerStyles,\n} from './ImageViewer'\nexport {\n FileViewerTooltip,\n FileViewerTooltipProvider,\n} from './components/FileViewerTooltip'\nexport type {\n FileViewerTooltipClassNames,\n FileViewerTooltipStyles,\n} from './customization-types'\nexport type {\n ViewerToolbarClassNames,\n ViewerToolbarStyles,\n} from './customization-types'\nexport {\n configureFileViewerPdfWorker,\n getFileViewerPdfWorkerCdnUrl,\n getFileViewerPdfWorkerSrc,\n isFileViewerPdfWorkerConfigured,\n} from './configure-pdf-worker'\nexport type { ConfigureFileViewerPdfWorkerOptions } from './configure-pdf-worker'\nexport {\n getFileViewerDefaults,\n resetFileViewerDefaults,\n resolveImageViewerProps,\n resolvePdfViewerProps,\n setFileViewerDefaults,\n} from './config'\nexport type { DeepPartial, FileViewerDefaults } from './config'\nexport type { SlotStyle } from './customization-types'\nexport {\n defaultFileViewerTranslations,\n fileViewerTranslationsByLanguage,\n getFileViewerTranslations,\n resolveFormattedMessage,\n} from './translations'\nexport type {\n FileViewerShellTranslations,\n FileViewerTranslations,\n FormattableMessage,\n ImageViewerTranslations,\n PdfPageInputAriaLabelParams,\n PdfViewerTranslations,\n UnsupportedFileTypeParams,\n ViewerLanguage,\n} from './translations'\n","import { pdfjs } from 'react-pdf'\n\nexport type ConfigureFileViewerPdfWorkerOptions = {\n /**\n * URL to `pdf.worker.min.mjs`.\n *\n * Prefer `getFileViewerPdfWorkerSrc()` (same version as react-pdf’s API).\n *\n * If you use `new URL('pdfjs-dist/build/pdf.worker.min.mjs', import.meta.url)`,\n * pin `pdfjs-dist` to the same version as react-pdf (see `pdfjs.version`), or\n * npm may hoist a newer `pdfjs-dist` and the worker will not match the API.\n */\n workerSrc?: string\n}\n\nlet configuredWorkerSrc: string | undefined\n\n/**\n * Worker URL for the **same** pdfjs version react-pdf uses (`pdfjs.version`).\n * Use this as `workerSrc` to avoid API/worker mismatches (e.g. 4.8.69 vs 4.10.x).\n */\nexport function getFileViewerPdfWorkerSrc(): string {\n return `https://unpkg.com/pdfjs-dist@${pdfjs.version}/build/pdf.worker.min.mjs`\n}\n\n/** @deprecated Use `getFileViewerPdfWorkerSrc` */\nexport const getFileViewerPdfWorkerCdnUrl = getFileViewerPdfWorkerSrc\n\n/** Whether `configureFileViewerPdfWorker` has been called. */\nexport function isFileViewerPdfWorkerConfigured(): boolean {\n return configuredWorkerSrc !== undefined\n}\n\n/**\n * Configures the PDF.js worker used by `FileViewer` / `PdfViewer`.\n *\n * Call once in your app entry **before** rendering PDFs.\n *\n * Default (`workerSrc` omitted): `getFileViewerPdfWorkerSrc()` (unpkg, needs network).\n */\nexport function configureFileViewerPdfWorker(\n options: ConfigureFileViewerPdfWorkerOptions = {},\n): void {\n const workerSrc = options.workerSrc ?? getFileViewerPdfWorkerSrc()\n pdfjs.GlobalWorkerOptions.workerSrc = workerSrc\n configuredWorkerSrc = workerSrc\n}\n"]}