{"version":3,"file":"inertiaui-modal.umd.cjs","names":[],"sources":["../src/config.ts","../src/cache.ts","../src/helpers.ts","../src/ModalRoot.tsx","../src/ModalRenderer.tsx","../src/useModal.ts","../src/Deferred.tsx","../src/HeadlessModal.tsx","../../node_modules/.pnpm/clsx@2.1.1/node_modules/clsx/dist/clsx.mjs","../src/CloseButton.tsx","../src/constants.ts","../src/ModalContent.tsx","../src/SlideoverContent.tsx","../src/Modal.tsx","../src/ModalLink.tsx","../src/WhenVisible.tsx","../src/inertiauiModal.ts"],"sourcesContent":["export interface ModalTypeConfig {\n    closeButton: boolean\n    closeExplicitly: boolean\n    closeOnClickOutside: boolean\n    maxWidth: string\n    paddingClasses: string\n    panelClasses: string\n    position: string\n}\n\nexport interface ModalConfig {\n    type: 'modal' | 'slideover'\n    navigate: boolean\n    useNativeDialog: boolean\n    appElement: string | null\n    modal: ModalTypeConfig\n    slideover: ModalTypeConfig\n}\n\nconst defaultConfig: ModalConfig = {\n    type: 'modal',\n    navigate: false,\n    useNativeDialog: true,\n    appElement: '#app',\n    modal: {\n        closeButton: true,\n        closeExplicitly: false,\n        closeOnClickOutside: true,\n        maxWidth: '2xl',\n        paddingClasses: 'p-4 sm:p-6',\n        panelClasses: 'bg-white rounded',\n        position: 'center',\n    },\n    slideover: {\n        closeButton: true,\n        closeExplicitly: false,\n        closeOnClickOutside: true,\n        maxWidth: 'md',\n        paddingClasses: 'p-4 sm:p-6',\n        panelClasses: 'bg-white min-h-screen',\n        position: 'right',\n    },\n}\n\nclass Config {\n    private config: ModalConfig\n\n    constructor() {\n        this.config = {} as ModalConfig\n        this.reset()\n    }\n\n    reset(): void {\n        this.config = JSON.parse(JSON.stringify(defaultConfig))\n    }\n\n    put(key: string | Partial<ModalConfig>, value?: unknown): void {\n        if (typeof key === 'object') {\n            this.config = {\n                type: key.type ?? defaultConfig.type,\n                navigate: key.navigate ?? defaultConfig.navigate,\n                useNativeDialog: key.useNativeDialog ?? defaultConfig.useNativeDialog,\n                appElement: key.appElement !== undefined ? key.appElement : defaultConfig.appElement,\n                modal: { ...defaultConfig.modal, ...key.modal },\n                slideover: { ...defaultConfig.slideover, ...key.slideover },\n            }\n            return\n        }\n        const keys = key.split('.')\n        let current: Record<string, unknown> = this.config as unknown as Record<string, unknown>\n        for (let i = 0; i < keys.length - 1; i++) {\n            current = (current[keys[i]] = current[keys[i]] || {}) as Record<string, unknown>\n        }\n        current[keys[keys.length - 1]] = value\n    }\n\n    get(key?: string): unknown {\n        if (typeof key === 'undefined') {\n            return this.config\n        }\n        const keys = key.split('.')\n        let current: unknown = this.config\n        for (const k of keys) {\n            if (current === null || current === undefined || typeof current !== 'object') {\n                return null\n            }\n            current = (current as Record<string, unknown>)[k]\n        }\n        return current === undefined ? null : current\n    }\n}\n\nconst configInstance = new Config()\n\nexport const resetConfig = (): void => configInstance.reset()\nexport const putConfig = (key: string | Partial<ModalConfig>, value?: unknown): void => configInstance.put(key, value)\nexport const getConfig = (key?: string): unknown => configInstance.get(key)\nexport const getConfigByType = (isSlideover: boolean, key: string): unknown => configInstance.get(isSlideover ? `slideover.${key}` : `modal.${key}`)\n","interface CacheEntry<T> {\n    response: T\n    expiresAt: number\n}\n\nexport class ResponseCache<T> {\n    private cache = new Map<string, CacheEntry<T>>()\n    private timers = new Map<string, ReturnType<typeof setTimeout>>()\n    private inFlight = new Map<string, Promise<T>>()\n\n    static key(method: string, url: string, data: unknown): string {\n        return `${method}:${url}:${JSON.stringify(data)}`\n    }\n\n    get(key: string): T | null {\n        const cached = this.cache.get(key)\n\n        if (!cached) {\n            return null\n        }\n\n        if (Date.now() > cached.expiresAt) {\n            this.delete(key)\n            return null\n        }\n\n        return cached.response\n    }\n\n    set(key: string, response: T, cacheFor: number): void {\n        this.delete(key)\n\n        this.cache.set(key, {\n            response,\n            expiresAt: Date.now() + cacheFor,\n        })\n\n        if (cacheFor > 0) {\n            this.timers.set(\n                key,\n                setTimeout(() => this.delete(key), cacheFor),\n            )\n        }\n    }\n\n    delete(key: string): void {\n        this.cache.delete(key)\n\n        const timer = this.timers.get(key)\n        if (timer) {\n            clearTimeout(timer)\n            this.timers.delete(key)\n        }\n    }\n\n    getInFlight(key: string): Promise<T> | undefined {\n        return this.inFlight.get(key)\n    }\n\n    setInFlight(key: string, promise: Promise<T>): void {\n        this.inFlight.set(key, promise)\n    }\n\n    deleteInFlight(key: string): void {\n        this.inFlight.delete(key)\n    }\n}\n","// Re-export helper utilities from vanilla\nexport { sameUrlPath, except, only, rejectNullValues, kebabCase, isStandardDomEvent } from '@inertiaui/vanilla'\nexport function parseResponseData(data: unknown): unknown {\n    return typeof data === 'string' ? JSON.parse(data) : data\n}\nimport { generateId as vanillaGenerateId } from '@inertiaui/vanilla'\n\n// Wrap generateId with custom callback support for testing\nlet generateIdUsingCallback: (() => string) | null = null\n\nexport function generateIdUsing(callback: (() => string) | null): void {\n    generateIdUsingCallback = callback\n}\n\nexport function generateId(prefix = 'inertiaui_'): string {\n    if (generateIdUsingCallback) {\n        return generateIdUsingCallback()\n    }\n    return vanillaGenerateId(prefix)\n}\n","import { mergeDataIntoQueryString, type RequestPayload, type HttpResponse, type HttpRequestConfig } from '@inertiajs/core'\nimport { router, usePage, progress, http } from '@inertiajs/react'\nimport { createElement, useEffect, useLayoutEffect, useState, useRef, useReducer, ReactNode, ComponentType } from 'react'\nimport { createContext, useContext } from 'react'\n\nimport { ResponseCache } from './cache'\nimport { getConfig } from './config'\nimport { except, kebabCase, generateId, sameUrlPath, parseResponseData } from './helpers'\nimport ModalRenderer from './ModalRenderer'\nimport type {\n    Modal,\n    ModalConfig,\n    ModalResponseData,\n    ModalStackContextValue,\n    VisitOptions,\n    ReloadOptions,\n    EventCallback,\n    HttpMethod,\n    PageProps,\n    ModalRootProps,\n    LocalModal,\n    PrefetchOptions,\n} from './types'\n\nconst ModalStackContext = createContext<ModalStackContextValue | null>(null)\nModalStackContext.displayName = 'ModalStackContext'\n\nlet baseUrl: string | null = null\nlet currentPageVersion: string | null = null\n\n// Track the URL we're closing to (prevents navigate handler from re-setting baseUrl)\n// Only suppresses if navigate event URL matches this URL\nlet closingToBaseUrlTarget: string | null = null\n\n// Prefetch cache (#146)\nconst prefetchCache = new ResponseCache<HttpResponse>()\n\nexport function prefetch(href: string, options: PrefetchOptions = {}): Promise<void> {\n    if (href.startsWith('#')) {\n        return Promise.resolve()\n    }\n\n    const method = options.method ?? 'get'\n    const data = options.data ?? ({} as RequestPayload)\n    const headers = options.headers ?? {}\n    const queryStringArrayFormat = options.queryStringArrayFormat ?? 'brackets'\n    const cacheFor = options.cacheFor ?? 30000\n\n    const [url, mergedData] = mergeDataIntoQueryString(method, href || '', data, queryStringArrayFormat)\n\n    const cacheKey = ResponseCache.key(method, url, mergedData)\n\n    // Check if already cached\n    if (prefetchCache.get(cacheKey)) {\n        return Promise.resolve()\n    }\n\n    // Check if already in flight\n    const inFlight = prefetchCache.getInFlight(cacheKey)\n    if (inFlight) {\n        return inFlight.then(() => {})\n    }\n\n    options.onPrefetching?.()\n\n    const requestHeaders: Record<string, string> = {\n        ...headers,\n        Accept: 'text/html, application/xhtml+xml',\n        'X-Requested-With': 'XMLHttpRequest',\n        'X-Inertia': 'true',\n        'X-Inertia-Version': currentPageVersion ?? '',\n        'X-InertiaUI-Modal': generateId(),\n        'X-InertiaUI-Modal-Base-Url': baseUrl ?? '',\n    }\n\n    const request = http\n        .getClient()\n        .request({\n            url,\n            method,\n            data: mergedData,\n            headers: requestHeaders,\n        })\n        .then((response) => {\n            prefetchCache.set(cacheKey, response, cacheFor)\n            options.onPrefetched?.()\n            return response\n        })\n        .finally(() => {\n            prefetchCache.deleteInFlight(cacheKey)\n        })\n\n    prefetchCache.setInFlight(cacheKey, request)\n\n    return request.then(() => {})\n}\n\ninterface ModalStackProviderProps {\n    children: ReactNode\n}\n\nexport const ModalStackProvider = ({ children }: ModalStackProviderProps) => {\n    // Use ref for synchronous access to stack, state only for triggering re-renders\n    const stackRef = useRef<Modal[]>([])\n    const [, forceUpdate] = useReducer((x) => x + 1, 0)\n    const [localModals, setLocalModals] = useState<Record<string, LocalModal>>({})\n\n    const updateStack = (withStack: (prevStack: Modal[]) => Modal[]) => {\n        const newStack = withStack([...stackRef.current])\n\n        const isOnTopOfStack = (modalId: string) => {\n            if (newStack.length < 2) {\n                return true\n            }\n\n            return (\n                newStack\n                    .map((modal) => ({ id: modal.id, shouldRender: modal.shouldRender }))\n                    .reverse()\n                    .find((modal) => modal.shouldRender)?.id === modalId\n            )\n        }\n\n        newStack.forEach((modal, index) => {\n            newStack[index].onTopOfStack = isOnTopOfStack(modal.id)\n            newStack[index].getParentModal = () => {\n                if (index < 1) {\n                    // This is the first modal in the stack\n                    return null\n                }\n\n                // Find the first open modal before this one\n                return (\n                    stackRef.current\n                        .slice(0, index)\n                        .reverse()\n                        .find((m) => m.isOpen) ?? null\n                )\n            }\n            newStack[index].getChildModal = () => {\n                if (index === stackRef.current.length - 1) {\n                    // This is the last modal in the stack\n                    return null\n                }\n\n                // Find the first open modal after this one\n                return stackRef.current.slice(index + 1).find((m) => m.isOpen) ?? null\n            }\n        })\n\n        stackRef.current = newStack\n        forceUpdate()\n    }\n\n    class ModalClass implements Modal {\n        id: string\n        isOpen: boolean\n        shouldRender: boolean\n        listeners: Record<string, EventCallback[]>\n        component: ComponentType | null\n        props: Record<string, unknown>\n        response: ModalResponseData\n        config: ModalConfig\n        onCloseCallback: (() => void) | null\n        afterLeaveCallback: (() => void) | null\n        index: number\n        onTopOfStack: boolean\n        name?: string\n        getParentModal: () => Modal | null\n        getChildModal: () => Modal | null\n\n        constructor(\n            component: ComponentType | null,\n            response: ModalResponseData,\n            config?: ModalConfig | null,\n            onClose?: (() => void) | null,\n            afterLeave?: (() => void) | null,\n        ) {\n            this.id = response.id ?? generateId()\n            this.isOpen = false\n            this.shouldRender = false\n            this.listeners = {}\n\n            this.component = component\n            this.props = response.props ?? {}\n            this.response = response\n            this.config = config ?? {}\n            this.onCloseCallback = onClose ?? null\n            this.afterLeaveCallback = afterLeave ?? null\n\n            this.index = -1 // Will be set when added to the stack\n            this.getParentModal = () => null // Will be set in push()\n            this.getChildModal = () => null // Will be set in push()\n            this.onTopOfStack = true // Will be updated in push()\n        }\n\n        show = () => {\n            updateStack((prevStack) =>\n                prevStack.map((modal) => {\n                    if (modal.id === this.id && !modal.isOpen) {\n                        modal.isOpen = true\n                        modal.shouldRender = true\n                    }\n                    return modal\n                }),\n            )\n        }\n\n        setOpen = (open: boolean) => {\n            if (open) {\n                this.show()\n            } else {\n                this.close()\n            }\n        }\n\n        close = () => {\n            updateStack((currentStack) => {\n                let modalClosed = false\n\n                const newStack = currentStack.map((modal) => {\n                    if (modal.id === this.id && modal.isOpen) {\n                        Object.keys(modal.listeners).forEach((event) => {\n                            modal.off(event)\n                        })\n\n                        modal.isOpen = false\n                        modal.onCloseCallback?.()\n                        modalClosed = true\n                    }\n                    return modal\n                })\n\n                return modalClosed ? newStack : currentStack\n            })\n        }\n\n        afterLeave = () => {\n            if (this.isOpen) {\n                return\n            }\n\n            updateStack((prevStack) => {\n                const updatedStack = prevStack.map((modal) => {\n                    if (modal.id === this.id && !modal.isOpen) {\n                        modal.shouldRender = false\n                        modal.afterLeaveCallback?.()\n                        modal.afterLeaveCallback = null\n                    }\n                    return modal\n                })\n\n                if (this.index === 0) {\n                    // Update browser URL back to base when all modals are closed\n                    // Clear baseUrl BEFORE router.push to prevent the navigate event\n                    // from setting it back (race condition with props callback)\n                    const savedBaseUrl = baseUrl\n                    baseUrl = null\n\n                    // Set target URL to prevent navigate handler from re-setting baseUrl\n                    // Only suppresses navigate events to this specific URL\n                    closingToBaseUrlTarget = savedBaseUrl\n\n                    // Only call router.push() when the URL actually changed (navigate mode).\n                    // In non-navigate mode (default), the URL never changes and _inertiaui_modal\n                    // is never in page props, so router.push() would be a no-op that triggers\n                    // an unnecessary full component re-render in Inertia v3.\n                    if (savedBaseUrl && typeof window !== 'undefined' && !sameUrlPath(savedBaseUrl, window.location.href)) {\n                        router.push({\n                            url: savedBaseUrl,\n                            preserveScroll: true,\n                            preserveState: true,\n                            // Clear _inertiaui_modal prop to prevent modal from reopening\n                            props: (currentProps: Record<string, unknown>) => {\n                                // eslint-disable-next-line @typescript-eslint/no-unused-vars\n                                const { _inertiaui_modal, ...rest } = currentProps\n                                return { ...rest, _inertiaui_modal: undefined }\n                            },\n                        })\n                    }\n                    return []\n                }\n\n                return updatedStack\n            })\n        }\n\n        on = (event: string, callback: EventCallback) => {\n            event = kebabCase(event)\n            this.listeners[event] = this.listeners[event] ?? []\n            this.listeners[event].push(callback)\n        }\n\n        off = (event: string, callback?: EventCallback) => {\n            event = kebabCase(event)\n            if (callback) {\n                this.listeners[event] = this.listeners[event]?.filter((cb) => cb !== callback) ?? []\n            } else {\n                delete this.listeners[event]\n            }\n        }\n\n        emit = (event: string, ...args: unknown[]) => {\n            this.listeners[kebabCase(event)]?.forEach((callback) => callback(...args))\n        }\n\n        registerEventListenersFromProps = (props: Record<string, unknown>) => {\n            const unsubscribers: (() => void)[] = []\n\n            Object.keys(props)\n                .filter((key) => key.startsWith('on'))\n                .forEach((key) => {\n                    // e.g. onRefreshKey -> refresh-key\n                    const eventName = kebabCase(key).replace(/^on-/, '')\n                    const callback = props[key] as EventCallback\n                    this.on(eventName, callback)\n                    unsubscribers.push(() => this.off(eventName, callback))\n                })\n\n            return () => unsubscribers.forEach((unsub) => unsub())\n        }\n\n        reload = (options: ReloadOptions = {}) => {\n            let keys = Object.keys(this.response.props)\n\n            if (options.only) {\n                keys = options.only\n            }\n\n            if (options.except) {\n                keys = except(keys, options.except) as string[]\n            }\n\n            if (!this.response?.url) {\n                return\n            }\n\n            const method = options.method ?? 'get'\n            const data = options.data ?? {}\n\n            options.onStart?.()\n\n            http.getClient()\n                .request({\n                    url: this.response.url,\n                    method,\n                    data: method === 'get' ? undefined : data,\n                    params: method === 'get' ? data : undefined,\n                    headers: {\n                        ...options.headers,\n                        Accept: 'text/html, application/xhtml+xml',\n                        'X-Inertia': 'true',\n                        'X-Inertia-Partial-Component': this.response.component,\n                        'X-Inertia-Version': this.response.version ?? '',\n                        'X-Inertia-Partial-Data': keys.join(','),\n                        'X-InertiaUI-Modal': generateId(),\n                        'X-InertiaUI-Modal-Base-Url': baseUrl ?? '',\n                    },\n                })\n                .then((response) => {\n                    this.updateProps((parseResponseData(response.data) as ModalResponseData).props)\n\n                    options.onSuccess?.(response)\n                })\n                .catch((error) => {\n                    options.onError?.(error)\n                })\n                .finally(() => {\n                    options.onFinish?.()\n                })\n        }\n\n        updateProps = (props: Record<string, unknown>) => {\n            Object.assign(this.props, props)\n            updateStack((prevStack) => prevStack) // Trigger re-render\n        }\n    }\n\n    const isValidModalResponse = (data: unknown): data is ModalResponseData => {\n        return typeof data === 'object' && data !== null && 'component' in data && typeof (data as ModalResponseData).component === 'string'\n    }\n\n    const pushFromResponseData = (\n        responseData: ModalResponseData,\n        config: ModalConfig = {},\n        onClose: (() => void) | null = null,\n        onAfterLeave: (() => void) | null = null,\n    ): Promise<Modal> => {\n        if (!isValidModalResponse(responseData)) {\n            return Promise.reject(\n                new Error(\n                    'Invalid modal response. This usually happens when the server returns a redirect (e.g., due to session expiration). ' +\n                        'Check if the user is still authenticated.',\n                ),\n            )\n        }\n\n        return router\n            .resolveComponent(responseData.component)\n            .then((component) => push(component as ComponentType, responseData, config, onClose, onAfterLeave))\n    }\n\n    const loadDeferredProps = (modal: Modal) => {\n        const deferred = modal.response?.meta?.deferredProps\n\n        if (!deferred) {\n            return\n        }\n\n        Object.keys(deferred).forEach((key) => {\n            modal.reload({ only: deferred[key] })\n        })\n    }\n\n    const push = (\n        component: ComponentType | null,\n        response: ModalResponseData,\n        config?: ModalConfig | null,\n        onClose?: (() => void) | null,\n        afterLeave?: (() => void) | null,\n    ): Modal => {\n        const newModal = new ModalClass(component, response, config, onClose, afterLeave)\n        newModal.index = stackRef.current.length\n\n        updateStack((prevStack) => [...prevStack, newModal])\n        loadDeferredProps(newModal)\n\n        newModal.show()\n\n        return newModal\n    }\n\n    function pushLocalModal(\n        name: string,\n        config?: ModalConfig | null,\n        onClose?: (() => void) | null,\n        afterLeave?: (() => void) | null,\n        props?: Record<string, unknown> | null,\n    ): Modal {\n        if (!localModals[name]) {\n            throw new Error(`The local modal \"${name}\" has not been registered.`)\n        }\n\n        const responseData = { props: props ?? {} } as ModalResponseData\n        const modal = push(null, responseData, config, onClose, afterLeave)\n        modal.name = name\n        localModals[name].callback(modal)\n        return modal\n    }\n\n    const visitModal = (url: string, options: VisitOptions = {}): Promise<Modal> =>\n        visit(\n            url,\n            options.method ?? 'get',\n            options.data ?? ({} as RequestPayload),\n            options.headers ?? {},\n            options.config ?? {},\n            options.onClose ?? null,\n            options.onAfterLeave ?? null,\n            options.queryStringArrayFormat ?? 'brackets',\n            options.navigate ?? (getConfig('navigate') as boolean),\n            options.onStart ?? null,\n            options.onSuccess ?? null,\n            options.onError ?? null,\n            options.props ?? null,\n        ).then((modal) => {\n            const listeners = options.listeners ?? {}\n\n            Object.keys(listeners).forEach((event) => {\n                // e.g. refreshKey -> refresh-key\n                const eventName = kebabCase(event)\n                modal.on(eventName, listeners[event])\n            })\n\n            return modal\n        })\n\n    const updateBrowserUrl = (url: string | undefined, useBrowserHistory: boolean, modalData?: ModalResponseData): void => {\n        if (!url || !useBrowserHistory || typeof window === 'undefined') {\n            return\n        }\n\n        router.push({\n            url,\n            preserveScroll: true,\n            preserveState: true,\n            // Store modal data in page props for history navigation\n            props: modalData\n                ? (currentProps: Record<string, unknown>) => ({\n                      ...currentProps,\n                      _inertiaui_modal: {\n                          ...modalData,\n                          baseUrl,\n                      },\n                  })\n                : undefined,\n        })\n    }\n\n    const visit = (\n        href: string,\n        method: HttpMethod,\n        payload: RequestPayload = {},\n        headers: Record<string, string> = {},\n        config: ModalConfig = {},\n        onClose: (() => void) | null = null,\n        onAfterLeave: (() => void) | null = null,\n        queryStringArrayFormat: 'brackets' | 'indices' = 'brackets',\n        useBrowserHistory = false,\n        onStart: (() => void) | null = null,\n        onSuccess: ((response?: HttpResponse) => void) | null = null,\n        onError: ((...args: unknown[]) => void) | null = null,\n        props: Record<string, unknown> | null = null,\n    ): Promise<Modal> => {\n        const modalId = generateId()\n\n        return new Promise((resolve, reject) => {\n            if (href.startsWith('#')) {\n                resolve(pushLocalModal(href.substring(1), config, onClose, onAfterLeave, props))\n                return\n            }\n\n            const [url, data] = mergeDataIntoQueryString(method, href || '', payload, queryStringArrayFormat)\n\n            // Check for cached prefetch response (#146)\n            const cachedResponse = prefetchCache.get(ResponseCache.key(method, url, data))\n            if (cachedResponse) {\n                const cachedData = parseResponseData(cachedResponse.data) as ModalResponseData\n                onSuccess?.(cachedResponse)\n                pushFromResponseData(cachedData, config, onClose, onAfterLeave)\n                    .then((modal) => {\n                        updateBrowserUrl(cachedData.url, useBrowserHistory, cachedData)\n                        resolve(modal)\n                    })\n                    .catch(reject)\n                return\n            }\n\n            if (stackRef.current.length === 0) {\n                baseUrl = typeof window !== 'undefined' ? window.location.href : ''\n            }\n\n            const requestHeaders: Record<string, string> = {\n                ...headers,\n                Accept: 'text/html, application/xhtml+xml',\n                'X-Requested-With': 'XMLHttpRequest',\n                'X-Inertia': 'true',\n                'X-Inertia-Version': currentPageVersion ?? '',\n                'X-InertiaUI-Modal': modalId,\n                'X-InertiaUI-Modal-Base-Url': baseUrl ?? '',\n            }\n\n            onStart?.()\n\n            progress?.start()\n\n            http.getClient()\n                .request({\n                    url,\n                    method,\n                    data,\n                    headers: requestHeaders,\n                })\n                .then((response) => {\n                    const responseData = parseResponseData(response.data) as ModalResponseData\n                    onSuccess?.(response)\n                    pushFromResponseData(responseData, config, onClose, onAfterLeave)\n                        .then((modal) => {\n                            updateBrowserUrl(responseData.url, useBrowserHistory, responseData)\n                            resolve(modal)\n                        })\n                        .catch(reject)\n                })\n                .catch((...args: unknown[]) => {\n                    onError?.(...args)\n                    reject(args[0])\n                })\n                .finally(() => {\n                    progress?.finish()\n                })\n        })\n    }\n\n    const registerLocalModal = (name: string, callback: (modal: Modal) => void) => {\n        setLocalModals((prevLocalModals) => ({\n            ...prevLocalModals,\n            [name]: { name, callback },\n        }))\n    }\n\n    const removeLocalModal = (name: string) => {\n        setLocalModals((prevLocalModals) => {\n            const newLocalModals = { ...prevLocalModals }\n            delete newLocalModals[name]\n            return newLocalModals\n        })\n    }\n\n    // Create value object with getter for stack to ensure we always get current ref value\n    const value: ModalStackContextValue = {\n        get stack() {\n            return stackRef.current\n        },\n        localModals,\n        push,\n        pushFromResponseData,\n        length: () => stackRef.current.length,\n        closeAll: (force = false) => {\n            if (force) {\n                // Force close: immediately remove all modals without transition\n                updateStack(() => [])\n            } else {\n                // Normal close: trigger leave transition for each modal\n                ;[...stackRef.current].reverse().forEach((modal) => modal.close())\n            }\n        },\n        reset: () => updateStack(() => []),\n        visit,\n        visitModal,\n        registerLocalModal,\n        removeLocalModal,\n    }\n\n    return <ModalStackContext.Provider value={value}>{children}</ModalStackContext.Provider>\n}\n\nexport const useModalStack = (): ModalStackContextValue => {\n    const context = useContext(ModalStackContext)\n    if (context === null) {\n        throw new Error('useModalStack must be used within a ModalStackProvider')\n    }\n    return context\n}\n\nexport const modalPropNames = ['closeButton', 'closeExplicitly', 'closeOnClickOutside', 'maxWidth', 'paddingClasses', 'panelClasses', 'position', 'slideover']\n\nexport const initFromPageProps = (pageProps: PageProps) => {\n    if (pageProps.initialPage) {\n        currentPageVersion = pageProps.initialPage.version ?? null\n    }\n}\n\ninterface RenderInertiaAppProps {\n    Component: ComponentType & { layout?: ((page: ReactNode) => ReactNode) | ComponentType[] }\n    props: Record<string, unknown>\n    key: string\n}\n\nexport const renderApp = (App: ComponentType<{ children: (props: RenderInertiaAppProps) => ReactNode }>, pageProps: PageProps) => {\n    initFromPageProps(pageProps)\n\n    const renderInertiaApp = ({ Component, props, key }: RenderInertiaAppProps) => {\n        const renderComponent = () => {\n            const child = createElement(Component, { key, ...props })\n\n            if (typeof Component.layout === 'function') {\n                return Component.layout(child)\n            }\n\n            if (Array.isArray(Component.layout)) {\n                return Component.layout\n                    .slice()\n                    .reverse()\n                    .reduce((acc, Layout) => createElement(Layout as ComponentType<Record<string, unknown>>, props, acc), child as ReactNode)\n            }\n\n            return child\n        }\n\n        return (\n            <>\n                {renderComponent()}\n                <ModalRoot />\n            </>\n        )\n    }\n\n    return (\n        <ModalStackProvider>\n            <App {...(pageProps as Record<string, unknown>)}>{renderInertiaApp}</App>\n        </ModalStackProvider>\n    )\n}\n\ninterface InertiaUIModalPageProps {\n    _inertiaui_modal?: ModalResponseData & { baseUrl: string }\n    [key: string]: unknown\n}\n\nexport const ModalRoot = ({ children }: ModalRootProps) => {\n    const context = useContext(ModalStackContext)\n    const $page = usePage<InertiaUIModalPageProps>()\n    const pendingModalKeysRef = useRef(new Set<string>())\n\n    // Keep module-level pageVersion in sync for use by prefetch/visit functions.\n    // Set during render (not useEffect) because prefetch() needs it synchronously on mount.\n    currentPageVersion = $page.version ?? null\n\n    // Generate a unique key for deduplication (handles case when modal has no id)\n    const getModalKey = (modalData: ModalResponseData) => modalData.id || `${modalData.component}:${modalData.url}`\n\n    const isNavigatingRef = useRef(false)\n\n    // Use a ref so the interceptor always reads the latest page props\n    const pageRef = useRef($page)\n    pageRef.current = $page\n\n    // Register interceptor in useLayoutEffect (fires during commit, before microtasks).\n    // Inertia 3 loads deferred props during page.set() microtasks which fire after commit\n    // but before useEffect — useLayoutEffect ensures the interceptor is registered in time.\n    useLayoutEffect(\n        () =>\n            http.onRequest((config: HttpRequestConfig) => {\n                const baseUrlValue = baseUrl ?? pageRef.current.props._inertiaui_modal?.baseUrl ?? null\n                if (baseUrlValue) {\n                    config.headers = config.headers ?? {}\n                    config.headers['X-InertiaUI-Modal-Base-Url'] = baseUrlValue\n                }\n                return config\n            }),\n        [],\n    )\n\n    useEffect(() => router.on('start', () => (isNavigatingRef.current = true)), [])\n    useEffect(() => router.on('finish', () => (isNavigatingRef.current = false)), [])\n    useEffect(\n        () =>\n            router.on('navigate', function ($event) {\n                const modalOnBase = ($event as { detail: { page: { props: InertiaUIModalPageProps; url: string } } }).detail.page.props._inertiaui_modal\n                const pageUrl = ($event as { detail: { page: { url: string } } }).detail.page.url\n\n                // If we're closing to this specific URL, don't re-open the modal\n                // This handles the race condition where router.push in afterLeave\n                // fires a navigate event before the props callback clears _inertiaui_modal\n                // Only suppresses when navigating to our closing target URL (not browser back to modal)\n                if (closingToBaseUrlTarget) {\n                    const targetPath = new URL(closingToBaseUrlTarget, 'http://x').pathname\n                    const pagePath = new URL(pageUrl, 'http://x').pathname\n                    if (targetPath === pagePath) {\n                        closingToBaseUrlTarget = null\n                        context?.closeAll(true)\n                        baseUrl = null\n                        return\n                    }\n                    closingToBaseUrlTarget = null\n                }\n\n                if (!modalOnBase) {\n                    // No modal data - close any open modals (force close without transition)\n                    context?.closeAll(true)\n                    baseUrl = null\n                    return\n                }\n\n                // If the page URL doesn't match the modal URL, close all modals\n                if (!sameUrlPath(pageUrl, modalOnBase.url)) {\n                    context?.closeAll(true)\n                    baseUrl = null\n                    return\n                }\n\n                // Skip if this modal is already being pushed (handles duplicate navigate events)\n                const modalKey = getModalKey(modalOnBase)\n                if (pendingModalKeysRef.current.has(modalKey)) {\n                    return\n                }\n\n                // Also skip if a modal with this id is already in the stack\n                if (modalOnBase.id && context?.stack.some((m) => m.id === modalOnBase.id)) {\n                    return\n                }\n\n                // Skip if a modal with the same component and URL is already open\n                if (context?.stack.some((m) => m.response?.component === modalOnBase.component && sameUrlPath(m.response?.url, modalOnBase.url))) {\n                    return\n                }\n\n                // Only set baseUrl when we're actually opening a new modal\n                // (after deduplication checks pass)\n                baseUrl = modalOnBase.baseUrl\n\n                pendingModalKeysRef.current.add(modalKey)\n\n                context\n                    ?.pushFromResponseData(modalOnBase, {}, () => {\n                        if (!modalOnBase.baseUrl) {\n                            console.error('No base url in modal response data so cannot navigate back')\n                            return\n                        }\n                        // Clear baseUrl before navigating so the interceptor doesn't add\n                        // the modal header to the base page request (deferred props should\n                        // load without the modal context after closing)\n                        baseUrl = null\n\n                        if (!isNavigatingRef.current && typeof window !== 'undefined' && window.location.href !== modalOnBase.baseUrl) {\n                            router.visit(modalOnBase.baseUrl, {\n                                preserveScroll: true,\n                                preserveState: true,\n                            })\n                        }\n                    })\n                    .finally(() => {\n                        pendingModalKeysRef.current.delete(modalKey)\n                    })\n            }),\n        [],\n    )\n\n    const previousModalRef = useRef<(ModalResponseData & { baseUrl: string }) | undefined>(undefined)\n\n    useEffect(() => {\n        const newModal = $page.props?._inertiaui_modal\n        const previousModal = previousModalRef.current\n\n        // Store the current value for the next render\n        previousModalRef.current = newModal\n\n        if (!newModal) {\n            return\n        }\n\n        // If there's a previous modal with same component/URL, update its props\n        if (previousModal && newModal.component === previousModal.component && sameUrlPath(newModal.url, previousModal.url)) {\n            context?.stack[0]?.updateProps(newModal.props ?? {})\n            return\n        }\n\n        // If there's no previous modal but we have modals in the stack (opened via XHR),\n        // check if the new modal matches any open modal and update its props\n        if (!previousModal && context && context.stack.length > 0) {\n            const existingModal = context.stack.find((m) => m.response?.component === newModal.component && sameUrlPath(m.response?.url, newModal.url))\n            if (existingModal) {\n                existingModal.updateProps(newModal.props ?? {})\n            }\n        }\n    }, [$page.props?._inertiaui_modal])\n\n    return (\n        <>\n            {children}\n            {context && context.stack.length > 0 && <ModalRenderer index={0} />}\n        </>\n    )\n}\n","import React, { useMemo, createElement } from 'react'\n\nimport { useModalStack } from './ModalRoot'\nimport type { ModalRendererProps } from './types'\n\nconst ModalIndexContext = React.createContext<number | null>(null)\nModalIndexContext.displayName = 'ModalIndexContext'\n\nexport const useModalIndex = (): number | null => {\n    return React.useContext(ModalIndexContext)\n}\n\nconst ModalRenderer = ({ index }: ModalRendererProps) => {\n    const { stack } = useModalStack()\n\n    const modalContext = useMemo(() => {\n        return stack[index]\n    }, [stack, index])\n\n    if (!modalContext?.component) {\n        return null\n    }\n\n    return (\n        <ModalIndexContext.Provider value={index}>\n            {createElement(modalContext.component as React.ComponentType<Record<string, unknown>>, {\n                ...modalContext.props,\n                onModalEvent: (...args: unknown[]) => modalContext.emit('modal-event', ...args),\n            })}\n        </ModalIndexContext.Provider>\n    )\n}\n\nexport default ModalRenderer\n","import { useModalIndex } from './ModalRenderer'\nimport { useModalStack } from './ModalRoot'\nimport type { Modal } from './types'\n\nexport default function useModal(): Modal | null {\n    return useModalStack().stack[useModalIndex()] ?? null\n}\n","// See: https://github.com/inertiajs/inertia/blob/48bcd21fb7daf467d0df1bfde2408f161f94a579/packages/react/src/Deferred.ts\nimport { useEffect, useState, ReactNode } from 'react'\n\nimport useModal from './useModal'\n\ninterface DeferredProps {\n    children: ReactNode\n    data: string | string[]\n    fallback?: ReactNode\n}\n\nconst Deferred = ({ children, data, fallback }: DeferredProps) => {\n    if (!data) {\n        throw new Error('`<Deferred>` requires a `data` prop to be a string or array of strings')\n    }\n\n    const [loaded, setLoaded] = useState(false)\n    const keys = Array.isArray(data) ? data : [data]\n    const modal = useModal()\n    const modalProps = modal?.props ?? {}\n\n    useEffect(() => {\n        setLoaded(keys.every((key) => modalProps[key] !== undefined))\n    }, [modalProps, keys])\n\n    return loaded ? children : fallback\n}\n\nDeferred.displayName = 'InertiaModalDeferred'\n\nexport default Deferred\n","import { useMemo, useState, forwardRef, useImperativeHandle, useEffect, useRef, ReactNode } from 'react'\n\nimport { getConfig, getConfigByType } from './config'\nimport { useModalIndex } from './ModalRenderer'\nimport ModalRenderer from './ModalRenderer'\nimport { useModalStack } from './ModalRoot'\nimport type { Modal, ModalConfig, ReloadOptions } from './types'\n\ninterface HeadlessModalConfig {\n    slideover: boolean\n    closeButton: boolean\n    closeExplicitly: boolean\n    closeOnClickOutside: boolean\n    maxWidth: string\n    paddingClasses: string\n    panelClasses: string\n    position: string\n}\n\ninterface HeadlessModalRenderProps {\n    afterLeave: () => void\n    close: () => void\n    config: HeadlessModalConfig\n    emit: (event: string, ...args: unknown[]) => void\n    getChildModal: () => Modal | null\n    getParentModal: () => Modal | null\n    id: string\n    index: number\n    isOpen: boolean\n    modalContext: Modal\n    onTopOfStack: boolean\n    reload: (options?: ReloadOptions) => void\n    setOpen: (open: boolean) => void\n    shouldRender: boolean\n    // Allow additional props from visitModal\n    [key: string]: unknown\n}\n\ninterface HeadlessModalBaseProps {\n    name?: string\n    children: ReactNode | ((props: HeadlessModalRenderProps) => ReactNode)\n    onFocus?: () => void\n    onBlur?: () => void\n    onClose?: () => void\n    onSuccess?: () => void\n    slideover?: boolean\n    closeButton?: boolean\n    closeExplicitly?: boolean\n    closeOnClickOutside?: boolean\n    maxWidth?: string\n    paddingClasses?: string\n    panelClasses?: string\n    position?: string\n}\n\ntype HeadlessModalProps = HeadlessModalBaseProps & Record<string, unknown>\n\nexport interface HeadlessModalRef {\n    afterLeave: () => void\n    close: () => void\n    emit: (event: string, ...args: unknown[]) => void\n    getChildModal: () => Modal | null | undefined\n    getParentModal: () => Modal | null | undefined\n    reload: (options?: ReloadOptions) => void\n    setOpen: (open: boolean) => void\n    readonly id: string | undefined\n    readonly index: number | undefined\n    readonly isOpen: boolean | undefined\n    readonly config: ModalConfig | undefined\n    readonly modalContext: Modal | null\n    readonly onTopOfStack: boolean | undefined\n    readonly shouldRender: boolean | undefined\n}\n\nconst HeadlessModal = forwardRef<HeadlessModalRef, HeadlessModalProps>((allProps, ref) => {\n    const { name, children, onFocus, onBlur, onClose, onSuccess, ...props } = allProps as HeadlessModalBaseProps & Record<string, unknown>\n    const modalIndex = useModalIndex()\n    const { stack, registerLocalModal, removeLocalModal } = useModalStack()\n\n    const [localModalContext, setLocalModalContext] = useState<Modal | null>(null)\n    const modalContext = useMemo(() => (name ? localModalContext : stack[modalIndex]), [name, localModalContext, modalIndex, stack])\n\n    const nextIndex = useMemo(() => {\n        return stack.find((m) => m.shouldRender && m.index > (modalContext?.index ?? -1))?.index\n    }, [modalIndex, stack])\n\n    const configSlideover = useMemo(\n        () => modalContext?.config.slideover ?? props.slideover ?? getConfig('type') === 'slideover',\n        [props.slideover, modalContext?.config.slideover],\n    )\n\n    const config: HeadlessModalConfig = useMemo(\n        () => ({\n            slideover: configSlideover as boolean,\n            closeButton: (props.closeButton ?? getConfigByType(configSlideover as boolean, 'closeButton')) as boolean,\n            closeExplicitly: (props.closeExplicitly ?? getConfigByType(configSlideover as boolean, 'closeExplicitly')) as boolean,\n            closeOnClickOutside: (props.closeOnClickOutside ?? getConfigByType(configSlideover as boolean, 'closeOnClickOutside')) as boolean,\n            maxWidth: (props.maxWidth ?? getConfigByType(configSlideover as boolean, 'maxWidth')) as string,\n            paddingClasses: (props.paddingClasses ?? getConfigByType(configSlideover as boolean, 'paddingClasses')) as string,\n            panelClasses: (props.panelClasses ?? getConfigByType(configSlideover as boolean, 'panelClasses')) as string,\n            position: (props.position ?? getConfigByType(configSlideover as boolean, 'position')) as string,\n            ...modalContext?.config,\n        }),\n        [props, modalContext?.config, configSlideover],\n    )\n\n    useEffect(() => {\n        if (name) {\n            let removeListeners: (() => void) | null = null\n\n            registerLocalModal(name as string, (localContext) => {\n                removeListeners = localContext.registerEventListenersFromProps(props as Record<string, unknown>)\n                setLocalModalContext(localContext)\n            })\n\n            return () => {\n                removeListeners?.()\n                removeListeners = null\n                removeLocalModal(name as string)\n            }\n        }\n\n        return modalContext?.registerEventListenersFromProps(props as Record<string, unknown>)\n    }, [name])\n\n    // Store the latest modalContext in a ref to maintain reference\n    const modalContextRef = useRef(modalContext)\n\n    // Update the ref whenever modalContext changes\n    useEffect(() => {\n        modalContextRef.current = modalContext\n    }, [modalContext])\n\n    // Track previous isOpen value to only emit close when transitioning from true to false\n    const previousIsOpenRef = useRef<boolean | undefined>(undefined)\n\n    useEffect(() => {\n        if (modalContext != null) {\n            if (modalContext.isOpen) {\n                onSuccess?.()\n            } else if (previousIsOpenRef.current === true) {\n                // Only call onClose when transitioning from open to closed,\n                // not when the component first mounts with isOpen undefined/false\n                onClose?.()\n            }\n            previousIsOpenRef.current = modalContext.isOpen\n        }\n    }, [modalContext?.isOpen])\n\n    const [rendered, setRendered] = useState(false)\n\n    useEffect(() => {\n        if (rendered && modalContext != null && modalContext.isOpen) {\n            if (modalContext.onTopOfStack) {\n                onFocus?.()\n            } else {\n                onBlur?.()\n            }\n        }\n\n        setRendered(true)\n    }, [modalContext?.onTopOfStack])\n\n    useImperativeHandle(\n        ref,\n        () => ({\n            afterLeave: () => modalContextRef.current?.afterLeave(),\n            close: () => modalContextRef.current?.close(),\n            emit: (...args: [string, ...unknown[]]) => modalContextRef.current?.emit(...args),\n            getChildModal: () => modalContextRef.current?.getChildModal(),\n            getParentModal: () => modalContextRef.current?.getParentModal(),\n            reload: (options?: ReloadOptions) => modalContextRef.current?.reload(options),\n            setOpen: (open: boolean) => modalContextRef.current?.setOpen(open),\n\n            get id() {\n                return modalContextRef.current?.id\n            },\n            get index() {\n                return modalContextRef.current?.index\n            },\n            get isOpen() {\n                return modalContextRef.current?.isOpen\n            },\n            get config() {\n                return modalContextRef.current?.config\n            },\n            get modalContext() {\n                return modalContextRef.current\n            },\n            get onTopOfStack() {\n                return modalContextRef.current?.onTopOfStack\n            },\n            get shouldRender() {\n                return modalContextRef.current?.shouldRender\n            },\n        }),\n        [modalContext],\n    )\n\n    if (!modalContext?.shouldRender) {\n        return null\n    }\n\n    return (\n        <>\n            {typeof children === 'function'\n                ? children({\n                      // Spread props first so they can be overridden by built-in props\n                      ...modalContext.props,\n                      afterLeave: modalContext.afterLeave,\n                      close: modalContext.close,\n                      config,\n                      emit: modalContext.emit,\n                      getChildModal: modalContext.getChildModal,\n                      getParentModal: modalContext.getParentModal,\n                      id: modalContext.id,\n                      index: modalContext.index,\n                      isOpen: modalContext.isOpen,\n                      modalContext,\n                      onTopOfStack: modalContext.onTopOfStack,\n                      reload: modalContext.reload,\n                      setOpen: modalContext.setOpen,\n                      shouldRender: modalContext.shouldRender,\n                  })\n                : children}\n\n            {/* Next modal in the stack */}\n            {nextIndex !== undefined && <ModalRenderer index={nextIndex} />}\n        </>\n    )\n})\n\nHeadlessModal.displayName = 'HeadlessModal'\nexport default HeadlessModal\n","function r(e){var t,f,n=\"\";if(\"string\"==typeof e||\"number\"==typeof e)n+=e;else if(\"object\"==typeof e)if(Array.isArray(e)){var o=e.length;for(t=0;t<o;t++)e[t]&&(f=r(e[t]))&&(n&&(n+=\" \"),n+=f)}else for(f in e)e[f]&&(n&&(n+=\" \"),n+=f);return n}export function clsx(){for(var e,t,f=0,n=\"\",o=arguments.length;f<o;f++)(e=arguments[f])&&(t=r(e))&&(n&&(n+=\" \"),n+=t);return n}export default clsx;","interface CloseButtonProps {\n    onClick: () => void\n}\n\nexport default function CloseButton({ onClick }: CloseButtonProps) {\n    return (\n        <button type=\"button\" className=\"im-close-button text-gray-400 hover:text-gray-500\" onClick={onClick}>\n            <span className=\"sr-only\">Close</span>\n            <svg className=\"size-6\" xmlns=\"http://www.w3.org/2000/svg\" fill=\"none\" viewBox=\"0 0 24 24\" strokeWidth=\"2\" stroke=\"currentColor\" aria-hidden=\"true\">\n                <path strokeLinecap=\"round\" strokeLinejoin=\"round\" d=\"M6 18L18 6M6 6l12 12\" />\n            </svg>\n        </button>\n    )\n}\n","/**\n * Max width classes for modals and slideovers.\n * Uses a map lookup for Tailwind 4 compatibility (scanner picks up full class strings).\n */\nexport const maxWidthClasses: Record<string, string> = {\n    sm: 'sm:max-w-sm',\n    md: 'sm:max-w-md',\n    lg: 'sm:max-w-md md:max-w-lg',\n    xl: 'sm:max-w-md md:max-w-xl',\n    '2xl': 'sm:max-w-md md:max-w-xl lg:max-w-2xl',\n    '3xl': 'sm:max-w-md md:max-w-xl lg:max-w-3xl',\n    '4xl': 'sm:max-w-md md:max-w-xl lg:max-w-3xl xl:max-w-4xl',\n    '5xl': 'sm:max-w-md md:max-w-xl lg:max-w-3xl xl:max-w-5xl',\n    '6xl': 'sm:max-w-md md:max-w-xl lg:max-w-3xl xl:max-w-5xl 2xl:max-w-6xl',\n    '7xl': 'sm:max-w-md md:max-w-xl lg:max-w-3xl xl:max-w-5xl 2xl:max-w-7xl',\n}\n\nexport const defaultMaxWidth = '2xl'\n\nexport function getMaxWidthClass(maxWidth: string): string {\n    return maxWidthClasses[maxWidth] || maxWidthClasses[defaultMaxWidth]\n}\n","import { createFocusTrap, onEscapeKey, animate, cancelAnimations } from '@inertiaui/vanilla'\nimport clsx from 'clsx'\nimport { useState, useEffect, useRef, useCallback, useMemo, ReactNode, SyntheticEvent, MouseEvent } from 'react'\n\nimport CloseButton from './CloseButton'\nimport { getMaxWidthClass } from './constants'\nimport type { Modal } from './types'\n\ninterface ModalContentConfig {\n    maxWidth: string\n    paddingClasses: string\n    panelClasses: string\n    position: string\n    closeButton: boolean\n    closeExplicitly?: boolean\n    closeOnClickOutside?: boolean\n}\n\ninterface ModalContentProps {\n    modalContext: Modal\n    config: ModalContentConfig\n    useNativeDialog: boolean\n    isFirstModal: boolean\n    onAfterLeave?: () => void\n    children: ReactNode | ((props: { modalContext: Modal; config: ModalContentConfig }) => ReactNode)\n}\n\nconst ModalContent = ({ modalContext, config, useNativeDialog, isFirstModal, onAfterLeave, children }: ModalContentProps) => {\n    const [isRendered, setIsRendered] = useState(false)\n    const [isVisible, setIsVisible] = useState(false) // For backdrop sync\n    const [entered, setEntered] = useState(false) // After animation completes\n    const wrapperRef = useRef<HTMLDivElement>(null)\n    const dialogRef = useRef<HTMLDialogElement>(null)\n    const nativeWrapperRef = useRef<HTMLDivElement>(null)\n    const cleanupFocusTrapRef = useRef<(() => void) | null>(null)\n    const cleanupEscapeKeyRef = useRef<(() => void) | null>(null)\n\n    const maxWidthClass = useMemo(() => getMaxWidthClass(config.maxWidth), [config.maxWidth])\n\n    // ============ Animation handlers using Web Animations API ============\n\n    const animateIn = useCallback(async (element: HTMLElement | null) => {\n        if (!element) return\n\n        setIsVisible(true) // Trigger backdrop immediately\n\n        await animate(element, [\n            { transform: 'translate3d(0, 1rem, 0) scale(0.95)', opacity: 0 },\n            { transform: 'translate3d(0, 0, 0) scale(1)', opacity: 1 },\n        ])\n\n        setEntered(true)\n    }, [])\n\n    const animateOut = useCallback(\n        async (element: HTMLElement | null) => {\n            if (!element) return\n\n            setIsVisible(false) // Trigger backdrop fade out immediately\n\n            await animate(element, [\n                { transform: 'translate3d(0, 0, 0) scale(1)', opacity: 1 },\n                { transform: 'translate3d(0, 1rem, 0) scale(0.95)', opacity: 0 },\n            ])\n\n            setIsRendered(false)\n            if (useNativeDialog && dialogRef.current) {\n                dialogRef.current.close()\n            }\n            onAfterLeave?.()\n            modalContext.afterLeave()\n        },\n        [useNativeDialog, onAfterLeave, modalContext],\n    )\n\n    // ============ Non-native dialog handlers ============\n\n    const setupFocusTrap = useCallback(() => {\n        if (useNativeDialog) return\n        if (!wrapperRef.current || !modalContext.onTopOfStack) return\n        if (cleanupFocusTrapRef.current) return\n\n        cleanupFocusTrapRef.current = createFocusTrap(wrapperRef.current, {\n            initialFocus: true,\n            returnFocus: false,\n        })\n    }, [modalContext.onTopOfStack, useNativeDialog])\n\n    const cleanupFocusTrap = useCallback(() => {\n        if (cleanupFocusTrapRef.current) {\n            cleanupFocusTrapRef.current()\n            cleanupFocusTrapRef.current = null\n        }\n    }, [])\n\n    const setupEscapeKey = useCallback(() => {\n        if (useNativeDialog) return\n        if (cleanupEscapeKeyRef.current) return\n        if (config?.closeExplicitly) return\n\n        cleanupEscapeKeyRef.current = onEscapeKey(() => {\n            if (modalContext.onTopOfStack) {\n                modalContext.close()\n            }\n        })\n    }, [config?.closeExplicitly, modalContext, useNativeDialog])\n\n    const cleanupEscapeKey = useCallback(() => {\n        if (cleanupEscapeKeyRef.current) {\n            cleanupEscapeKeyRef.current()\n            cleanupEscapeKeyRef.current = null\n        }\n    }, [])\n\n    const handleClickOutside = useCallback(\n        (event: MouseEvent) => {\n            if (useNativeDialog) return\n            if (!modalContext.onTopOfStack) return\n            if (config?.closeExplicitly) return\n            if (config?.closeOnClickOutside === false) return\n            if (!wrapperRef.current) return\n\n            if (!wrapperRef.current.contains(event.target as Node)) {\n                modalContext.close()\n            }\n        },\n        [modalContext, config?.closeExplicitly, config?.closeOnClickOutside, useNativeDialog],\n    )\n\n    // ============ Native dialog handlers ============\n\n    const handleCancel = useCallback(\n        (event: SyntheticEvent) => {\n            event.preventDefault()\n            if (modalContext.onTopOfStack && !config?.closeExplicitly) {\n                modalContext.close()\n            }\n        },\n        [modalContext, config?.closeExplicitly],\n    )\n\n    const handleDialogClick = useCallback(\n        (event: MouseEvent) => {\n            if (event.target === dialogRef.current) {\n                if (modalContext.onTopOfStack && !config?.closeExplicitly && config?.closeOnClickOutside !== false) {\n                    modalContext.close()\n                }\n            }\n        },\n        [modalContext, config?.closeExplicitly, config?.closeOnClickOutside],\n    )\n\n    // ============ Lifecycle ============\n\n    // Track previous isOpen state for detecting close\n    const prevIsOpenRef = useRef(modalContext.isOpen)\n\n    // Initial mount and open state changes\n    useEffect(() => {\n        if (useNativeDialog) {\n            if (modalContext.isOpen && !dialogRef.current?.open) {\n                dialogRef.current?.showModal()\n                animateIn(nativeWrapperRef.current)\n            } else if (!modalContext.isOpen && prevIsOpenRef.current) {\n                setEntered(false)\n                animateOut(nativeWrapperRef.current)\n            }\n        } else {\n            if (modalContext.isOpen && !isRendered) {\n                setIsRendered(true)\n            } else if (!modalContext.isOpen && prevIsOpenRef.current) {\n                setEntered(false)\n                animateOut(wrapperRef.current)\n            }\n        }\n        prevIsOpenRef.current = modalContext.isOpen\n    }, [modalContext.isOpen, useNativeDialog, animateIn, animateOut, isRendered])\n\n    // Trigger animation after render (non-native)\n    useEffect(() => {\n        if (!useNativeDialog && isRendered && !entered && modalContext.isOpen) {\n            animateIn(wrapperRef.current).then(() => {\n                setupFocusTrap()\n            })\n        }\n    }, [isRendered, useNativeDialog, entered, modalContext.isOpen, animateIn, setupFocusTrap])\n\n    // Setup escape key (non-native)\n    useEffect(() => {\n        if (!useNativeDialog) {\n            setupEscapeKey()\n        }\n        return () => {\n            cleanupEscapeKey()\n        }\n    }, [useNativeDialog, setupEscapeKey, cleanupEscapeKey])\n\n    // Handle becoming top of stack / losing top of stack (non-native only)\n    useEffect(() => {\n        if (useNativeDialog) return\n\n        if (modalContext.onTopOfStack) {\n            setupEscapeKey()\n            if (entered) {\n                setupFocusTrap()\n            }\n        } else {\n            cleanupFocusTrap()\n            cleanupEscapeKey()\n        }\n    }, [modalContext.onTopOfStack, entered, setupEscapeKey, setupFocusTrap, cleanupFocusTrap, cleanupEscapeKey, useNativeDialog])\n\n    // Cleanup on unmount\n    useEffect(() => {\n        return () => {\n            const wrapper = useNativeDialog ? nativeWrapperRef.current : wrapperRef.current\n            if (wrapper) {\n                cancelAnimations(wrapper)\n            }\n            if (useNativeDialog) {\n                if (dialogRef.current?.open) {\n                    dialogRef.current.close()\n                }\n            } else {\n                cleanupFocusTrap()\n                cleanupEscapeKey()\n            }\n        }\n    }, [useNativeDialog, cleanupFocusTrap, cleanupEscapeKey])\n\n    // ============ Render ============\n\n    const renderContent = () => (\n        <div className={`im-modal-content relative ${config.paddingClasses} ${config.panelClasses}`} data-inertiaui-modal-entered={entered}>\n            {config.closeButton && (\n                <div className=\"absolute top-0 right-0 pt-3 pr-3\">\n                    <CloseButton onClick={modalContext.close} />\n                </div>\n            )}\n            {typeof children === 'function' ? children({ modalContext, config }) : children}\n        </div>\n    )\n\n    // Native dialog mode\n    if (useNativeDialog) {\n        return (\n            <dialog\n                ref={dialogRef}\n                className={clsx(\n                    'im-modal-dialog m-0 overflow-visible bg-transparent p-0',\n                    'size-full max-h-none max-w-none',\n                    'backdrop:bg-black/75 backdrop:transition-opacity backdrop:duration-300',\n                    isVisible ? 'backdrop:opacity-100' : 'backdrop:opacity-0',\n                    !isFirstModal && 'backdrop:bg-transparent',\n                )}\n                onCancel={handleCancel}\n                onClick={handleDialogClick}\n            >\n                <div className=\"im-modal-container fixed inset-0 overflow-y-auto p-4\">\n                    <div\n                        className={clsx('im-modal-positioner flex min-h-full justify-center', {\n                            'items-start': config.position === 'top',\n                            'items-center': config.position === 'center',\n                            'items-end': config.position === 'bottom',\n                        })}\n                    >\n                        <div\n                            ref={nativeWrapperRef}\n                            className={clsx(\n                                'im-modal-wrapper w-full transition-[filter] duration-300',\n                                modalContext.onTopOfStack ? '' : 'blur-xs',\n                                maxWidthClass,\n                            )}\n                        >\n                            {renderContent()}\n                        </div>\n                    </div>\n                </div>\n            </dialog>\n        )\n    }\n\n    // Non-native dialog mode\n    if (!isRendered) return null\n\n    return (\n        <div className=\"im-modal-container fixed inset-0 z-40 overflow-y-auto p-4\" onMouseDown={handleClickOutside}>\n            <div\n                className={clsx('im-modal-positioner flex min-h-full justify-center', {\n                    'items-start': config.position === 'top',\n                    'items-center': config.position === 'center',\n                    'items-end': config.position === 'bottom',\n                })}\n                onMouseDown={handleClickOutside}\n            >\n                <div\n                    ref={wrapperRef}\n                    role=\"dialog\"\n                    aria-modal=\"true\"\n                    className={clsx('im-modal-wrapper w-full transition-[filter] duration-300', modalContext.onTopOfStack ? '' : 'blur-xs', maxWidthClass)}\n                >\n                    <span className=\"sr-only\">Dialog</span>\n                    {renderContent()}\n                </div>\n            </div>\n        </div>\n    )\n}\n\nexport default ModalContent\n","import { createFocusTrap, onEscapeKey, animate, cancelAnimations } from '@inertiaui/vanilla'\nimport clsx from 'clsx'\nimport { useState, useEffect, useRef, useCallback, useMemo, ReactNode, SyntheticEvent, MouseEvent } from 'react'\n\nimport CloseButton from './CloseButton'\nimport { getMaxWidthClass } from './constants'\nimport type { Modal } from './types'\n\ninterface SlideoverContentConfig {\n    maxWidth: string\n    paddingClasses: string\n    panelClasses: string\n    position: string\n    closeButton: boolean\n    closeExplicitly?: boolean\n    closeOnClickOutside?: boolean\n}\n\ninterface SlideoverContentProps {\n    modalContext: Modal\n    config: SlideoverContentConfig\n    useNativeDialog: boolean\n    isFirstModal: boolean\n    onAfterLeave?: () => void\n    children: ReactNode | ((props: { modalContext: Modal; config: SlideoverContentConfig }) => ReactNode)\n}\n\nconst SlideoverContent = ({ modalContext, config, useNativeDialog, isFirstModal, onAfterLeave, children }: SlideoverContentProps) => {\n    const [isRendered, setIsRendered] = useState(false)\n    const [isVisible, setIsVisible] = useState(false) // For backdrop sync\n    const [entered, setEntered] = useState(false) // After animation completes\n    const wrapperRef = useRef<HTMLDivElement>(null)\n    const dialogRef = useRef<HTMLDialogElement>(null)\n    const nativeWrapperRef = useRef<HTMLDivElement>(null)\n    const cleanupFocusTrapRef = useRef<(() => void) | null>(null)\n    const cleanupEscapeKeyRef = useRef<(() => void) | null>(null)\n\n    const isLeft = config.position === 'left'\n\n    const maxWidthClass = useMemo(() => getMaxWidthClass(config.maxWidth), [config.maxWidth])\n\n    // Get translate value based on position\n    const getTranslateX = useCallback(() => (isLeft ? '-100%' : '100%'), [isLeft])\n\n    // ============ Animation handlers using Web Animations API ============\n\n    const animateIn = useCallback(\n        async (element: HTMLElement | null) => {\n            if (!element) return\n\n            setIsVisible(true) // Trigger backdrop immediately\n            const translateX = getTranslateX()\n\n            await animate(element, [\n                { transform: `translate3d(${translateX}, 0, 0)`, opacity: 0 },\n                { transform: 'translate3d(0, 0, 0)', opacity: 1 },\n            ])\n\n            setEntered(true)\n        },\n        [getTranslateX],\n    )\n\n    const animateOut = useCallback(\n        async (element: HTMLElement | null) => {\n            if (!element) return\n\n            setIsVisible(false) // Trigger backdrop fade out immediately\n            const translateX = getTranslateX()\n\n            await animate(element, [\n                { transform: 'translate3d(0, 0, 0)', opacity: 1 },\n                { transform: `translate3d(${translateX}, 0, 0)`, opacity: 0 },\n            ])\n\n            setIsRendered(false)\n            if (useNativeDialog && dialogRef.current) {\n                dialogRef.current.close()\n            }\n            onAfterLeave?.()\n            modalContext.afterLeave()\n        },\n        [getTranslateX, useNativeDialog, onAfterLeave, modalContext],\n    )\n\n    // ============ Non-native dialog handlers ============\n\n    const setupFocusTrap = useCallback(() => {\n        if (useNativeDialog) return\n        if (!wrapperRef.current || !modalContext.onTopOfStack) return\n        if (cleanupFocusTrapRef.current) return\n\n        cleanupFocusTrapRef.current = createFocusTrap(wrapperRef.current, {\n            initialFocus: true,\n            returnFocus: false,\n        })\n    }, [modalContext.onTopOfStack, useNativeDialog])\n\n    const cleanupFocusTrap = useCallback(() => {\n        if (cleanupFocusTrapRef.current) {\n            cleanupFocusTrapRef.current()\n            cleanupFocusTrapRef.current = null\n        }\n    }, [])\n\n    const setupEscapeKey = useCallback(() => {\n        if (useNativeDialog) return\n        if (cleanupEscapeKeyRef.current) return\n        if (config?.closeExplicitly) return\n\n        cleanupEscapeKeyRef.current = onEscapeKey(() => {\n            if (modalContext.onTopOfStack) {\n                modalContext.close()\n            }\n        })\n    }, [config?.closeExplicitly, modalContext, useNativeDialog])\n\n    const cleanupEscapeKey = useCallback(() => {\n        if (cleanupEscapeKeyRef.current) {\n            cleanupEscapeKeyRef.current()\n            cleanupEscapeKeyRef.current = null\n        }\n    }, [])\n\n    const handleClickOutside = useCallback(\n        (event: MouseEvent) => {\n            if (useNativeDialog) return\n            if (!modalContext.onTopOfStack) return\n            if (config?.closeExplicitly) return\n            if (config?.closeOnClickOutside === false) return\n            if (!wrapperRef.current) return\n\n            if (!wrapperRef.current.contains(event.target as Node)) {\n                modalContext.close()\n            }\n        },\n        [modalContext, config?.closeExplicitly, config?.closeOnClickOutside, useNativeDialog],\n    )\n\n    // ============ Native dialog handlers ============\n\n    const handleCancel = useCallback(\n        (event: SyntheticEvent) => {\n            event.preventDefault()\n            if (modalContext.onTopOfStack && !config?.closeExplicitly) {\n                modalContext.close()\n            }\n        },\n        [modalContext, config?.closeExplicitly],\n    )\n\n    const handleDialogClick = useCallback(\n        (event: MouseEvent) => {\n            if (event.target === dialogRef.current) {\n                if (modalContext.onTopOfStack && !config?.closeExplicitly && config?.closeOnClickOutside !== false) {\n                    modalContext.close()\n                }\n            }\n        },\n        [modalContext, config?.closeExplicitly, config?.closeOnClickOutside],\n    )\n\n    // ============ Lifecycle ============\n\n    // Track previous isOpen state for detecting close\n    const prevIsOpenRef = useRef(modalContext.isOpen)\n\n    // Initial mount and open state changes\n    useEffect(() => {\n        if (useNativeDialog) {\n            if (modalContext.isOpen && !dialogRef.current?.open) {\n                dialogRef.current?.showModal()\n                animateIn(nativeWrapperRef.current)\n            } else if (!modalContext.isOpen && prevIsOpenRef.current) {\n                setEntered(false)\n                animateOut(nativeWrapperRef.current)\n            }\n        } else {\n            if (modalContext.isOpen && !isRendered) {\n                setIsRendered(true)\n            } else if (!modalContext.isOpen && prevIsOpenRef.current) {\n                setEntered(false)\n                animateOut(wrapperRef.current)\n            }\n        }\n        prevIsOpenRef.current = modalContext.isOpen\n    }, [modalContext.isOpen, useNativeDialog, animateIn, animateOut, isRendered])\n\n    // Trigger animation after render (non-native)\n    useEffect(() => {\n        if (!useNativeDialog && isRendered && !entered && modalContext.isOpen) {\n            animateIn(wrapperRef.current).then(() => {\n                setupFocusTrap()\n            })\n        }\n    }, [isRendered, useNativeDialog, entered, modalContext.isOpen, animateIn, setupFocusTrap])\n\n    // Setup escape key (non-native)\n    useEffect(() => {\n        if (!useNativeDialog) {\n            setupEscapeKey()\n        }\n        return () => {\n            cleanupEscapeKey()\n        }\n    }, [useNativeDialog, setupEscapeKey, cleanupEscapeKey])\n\n    // Handle becoming top of stack / losing top of stack (non-native only)\n    useEffect(() => {\n        if (useNativeDialog) return\n\n        if (modalContext.onTopOfStack) {\n            setupEscapeKey()\n            if (entered) {\n                setupFocusTrap()\n            }\n        } else {\n            cleanupFocusTrap()\n            cleanupEscapeKey()\n        }\n    }, [modalContext.onTopOfStack, entered, setupEscapeKey, setupFocusTrap, cleanupFocusTrap, cleanupEscapeKey, useNativeDialog])\n\n    // Cleanup on unmount\n    useEffect(() => {\n        return () => {\n            const wrapper = useNativeDialog ? nativeWrapperRef.current : wrapperRef.current\n            if (wrapper) {\n                cancelAnimations(wrapper)\n            }\n            if (useNativeDialog) {\n                if (dialogRef.current?.open) {\n                    dialogRef.current.close()\n                }\n            } else {\n                cleanupFocusTrap()\n                cleanupEscapeKey()\n            }\n        }\n    }, [useNativeDialog, cleanupFocusTrap, cleanupEscapeKey])\n\n    // ============ Render ============\n\n    const renderContent = () => (\n        <div className={`im-slideover-content relative ${config.paddingClasses} ${config.panelClasses}`} data-inertiaui-modal-entered={entered}>\n            {config.closeButton && (\n                <div className=\"absolute top-0 right-0 pt-3 pr-3\">\n                    <CloseButton onClick={modalContext.close} />\n                </div>\n            )}\n            {typeof children === 'function' ? children({ modalContext, config }) : children}\n        </div>\n    )\n\n    // Native dialog mode\n    if (useNativeDialog) {\n        return (\n            <dialog\n                ref={dialogRef}\n                className={clsx(\n                    'im-slideover-dialog m-0 overflow-visible bg-transparent p-0',\n                    'size-full max-h-none max-w-none',\n                    'backdrop:bg-black/75 backdrop:transition-opacity backdrop:duration-300',\n                    isVisible ? 'backdrop:opacity-100' : 'backdrop:opacity-0',\n                    !isFirstModal && 'backdrop:bg-transparent',\n                )}\n                onCancel={handleCancel}\n                onClick={handleDialogClick}\n            >\n                <div className=\"im-slideover-container fixed inset-0 overflow-x-hidden overflow-y-auto\">\n                    <div\n                        className={clsx('im-slideover-positioner flex min-h-full items-center', {\n                            'justify-start rtl:justify-end': config?.position === 'left',\n                            'justify-end rtl:justify-start': config?.position === 'right',\n                        })}\n                    >\n                        <div\n                            ref={nativeWrapperRef}\n                            className={clsx(\n                                'im-slideover-wrapper w-full transition-[filter] duration-300',\n                                modalContext.onTopOfStack ? '' : 'blur-xs',\n                                maxWidthClass,\n                            )}\n                        >\n                            {renderContent()}\n                        </div>\n                    </div>\n                </div>\n            </dialog>\n        )\n    }\n\n    // Non-native dialog mode\n    if (!isRendered) return null\n\n    return (\n        <div className=\"im-slideover-container fixed inset-0 z-40 overflow-x-hidden overflow-y-auto\" onMouseDown={handleClickOutside}>\n            <div\n                className={clsx('im-slideover-positioner flex min-h-full items-center', {\n                    'justify-start rtl:justify-end': config?.position === 'left',\n                    'justify-end rtl:justify-start': config?.position === 'right',\n                })}\n                onMouseDown={handleClickOutside}\n            >\n                <div\n                    ref={wrapperRef}\n                    role=\"dialog\"\n                    aria-modal=\"true\"\n                    className={clsx('im-slideover-wrapper w-full transition-[filter] duration-300', modalContext.onTopOfStack ? '' : 'blur-xs', maxWidthClass)}\n                >\n                    <span className=\"sr-only\">Dialog</span>\n                    {renderContent()}\n                </div>\n            </div>\n        </div>\n    )\n}\n\nexport default SlideoverContent\n","import { lockScroll, markAriaHidden } from '@inertiaui/vanilla'\nimport { forwardRef, useRef, useImperativeHandle, useState, useEffect, useCallback, useMemo, ReactNode } from 'react'\nimport { createPortal } from 'react-dom'\n\nimport { getConfig } from './config'\nimport HeadlessModal, { HeadlessModalRef } from './HeadlessModal'\nimport ModalContent from './ModalContent'\nimport SlideoverContent from './SlideoverContent'\nimport type { Modal as ModalType, ReloadOptions } from './types'\n\ninterface ModalConfig {\n    slideover: boolean\n    closeButton: boolean\n    closeExplicitly: boolean\n    maxWidth: string\n    paddingClasses: string\n    panelClasses: string\n    position: string\n}\n\ninterface ModalRenderProps {\n    afterLeave: () => void\n    close: () => void\n    config: ModalConfig\n    emit: (event: string, ...args: unknown[]) => void\n    getChildModal: () => ModalType | null\n    getParentModal: () => ModalType | null\n    id: string\n    index: number\n    isOpen: boolean\n    modalContext: ModalType\n    onTopOfStack: boolean\n    reload: (options?: ReloadOptions) => void\n    setOpen: (open: boolean) => void\n    shouldRender: boolean\n    // Allow additional props from visitModal\n    [key: string]: unknown\n}\n\ninterface ModalBaseProps {\n    name?: string\n    children: ReactNode | ((props: ModalRenderProps) => ReactNode)\n    onFocus?: () => void\n    onBlur?: () => void\n    onClose?: () => void\n    onSuccess?: () => void\n    onAfterLeave?: () => void\n    slideover?: boolean\n    closeButton?: boolean\n    closeExplicitly?: boolean\n    maxWidth?: string\n    paddingClasses?: string\n    panelClasses?: string\n    position?: string\n}\n\ntype ModalProps = ModalBaseProps & Record<string, unknown>\n\ninterface BackdropTransitionProps {\n    show: boolean\n    appear: boolean\n    onAfterAppear?: () => void\n}\n\nconst Modal = forwardRef<HeadlessModalRef, ModalProps>((allProps, ref) => {\n    const { name, children, onFocus, onBlur, onClose, onSuccess, onAfterLeave, ...props } = allProps as ModalBaseProps & Record<string, unknown>\n    const renderChildren = (contentProps: ModalRenderProps) => {\n        if (typeof children === 'function') {\n            return children(contentProps)\n        }\n\n        return children\n    }\n\n    const headlessModalRef = useRef<HeadlessModalRef>(null)\n    const cleanupScrollLockRef = useRef<(() => void) | null>(null)\n    const cleanupAriaHiddenRef = useRef<(() => void) | null>(null)\n    const [rendered, setRendered] = useState(false)\n    const useNativeDialog = useMemo(() => getConfig('useNativeDialog') as boolean, [])\n\n    useImperativeHandle(ref, () => headlessModalRef.current!, [headlessModalRef])\n\n    // Cleanup on unmount\n    useEffect(() => {\n        return () => {\n            cleanupScrollLockRef.current?.()\n            cleanupAriaHiddenRef.current?.()\n        }\n    }, [])\n\n    const handleSuccess = useCallback(() => {\n        onSuccess?.()\n        if (!cleanupScrollLockRef.current) {\n            cleanupScrollLockRef.current = lockScroll()\n            cleanupAriaHiddenRef.current = markAriaHidden(getConfig('appElement') as string)\n        }\n    }, [onSuccess])\n\n    const handleClose = useCallback(() => {\n        onClose?.()\n        cleanupScrollLockRef.current?.()\n        cleanupAriaHiddenRef.current?.()\n        cleanupScrollLockRef.current = null\n        cleanupAriaHiddenRef.current = null\n    }, [onClose])\n\n    const handleAfterLeave = useCallback(() => {\n        onAfterLeave?.()\n    }, [onAfterLeave])\n\n    return (\n        <HeadlessModal\n            ref={headlessModalRef}\n            name={name}\n            onFocus={onFocus ?? undefined}\n            onBlur={onBlur ?? undefined}\n            onClose={handleClose}\n            onSuccess={handleSuccess}\n            {...props}\n        >\n            {({\n                afterLeave,\n                close,\n                config,\n                emit,\n                getChildModal,\n                getParentModal,\n                id,\n                index,\n                isOpen,\n                modalContext,\n                onTopOfStack,\n                reload,\n                setOpen,\n                shouldRender,\n                ...extraProps\n            }) => (\n                <ModalPortal>\n                    <div className=\"im-dialog relative z-20\" data-inertiaui-modal-id={id} data-inertiaui-modal-index={index} aria-hidden={!onTopOfStack}>\n                        {/* Only render backdrop for the first modal (non-native dialog mode) */}\n                        {/* Native dialog uses ::backdrop pseudo-element instead */}\n                        {index === 0 && !useNativeDialog && <BackdropTransition show={isOpen} appear={!rendered} onAfterAppear={() => setRendered(true)} />}\n\n                        {/* The modal/slideover content itself */}\n                        {config.slideover ? (\n                            <SlideoverContent\n                                modalContext={modalContext}\n                                config={config}\n                                useNativeDialog={useNativeDialog}\n                                isFirstModal={index === 0}\n                                onAfterLeave={handleAfterLeave}\n                            >\n                                {renderChildren({\n                                    ...extraProps,\n                                    afterLeave,\n                                    close,\n                                    config,\n                                    emit,\n                                    getChildModal,\n                                    getParentModal,\n                                    id,\n                                    index,\n                                    isOpen,\n                                    modalContext,\n                                    onTopOfStack,\n                                    reload,\n                                    setOpen,\n                                    shouldRender,\n                                })}\n                            </SlideoverContent>\n                        ) : (\n                            <ModalContent\n                                modalContext={modalContext}\n                                config={config}\n                                useNativeDialog={useNativeDialog}\n                                isFirstModal={index === 0}\n                                onAfterLeave={handleAfterLeave}\n                            >\n                                {renderChildren({\n                                    ...extraProps,\n                                    afterLeave,\n                                    close,\n                                    config,\n                                    emit,\n                                    getChildModal,\n                                    getParentModal,\n                                    id,\n                                    index,\n                                    isOpen,\n                                    modalContext,\n                                    onTopOfStack,\n                                    reload,\n                                    setOpen,\n                                    shouldRender,\n                                })}\n                            </ModalContent>\n                        )}\n                    </div>\n                </ModalPortal>\n            )}\n        </HeadlessModal>\n    )\n})\n\n// Simple portal component\nfunction ModalPortal({ children }: { children: ReactNode }) {\n    const [mounted, setMounted] = useState(false)\n\n    useEffect(() => {\n        setMounted(true)\n    }, [])\n\n    if (!mounted) return null\n\n    return createPortal(children, document.body)\n}\n\n// Backdrop with CSS transition\nfunction BackdropTransition({ show, appear, onAfterAppear }: BackdropTransitionProps) {\n    const [state, setState] = useState<'entering' | 'entered' | 'leaving' | 'exited'>(() => {\n        if (appear && show) return 'entering'\n        return show ? 'entered' : 'exited'\n    })\n    const initialRender = useRef(true)\n    const backdropRef = useRef<HTMLDivElement>(null)\n\n    useEffect(() => {\n        if (initialRender.current) {\n            initialRender.current = false\n            if (appear && show) {\n                requestAnimationFrame(() => {\n                    setState('entered')\n                    const backdrop = backdropRef.current\n                    if (backdrop) {\n                        const onTransitionEnd = (e: TransitionEvent) => {\n                            if (e.target !== backdrop) return\n                            backdrop.removeEventListener('transitionend', onTransitionEnd)\n                            onAfterAppear?.()\n                        }\n                        backdrop.addEventListener('transitionend', onTransitionEnd)\n                    }\n                })\n            }\n            return\n        }\n\n        if (show) {\n            setState('entering')\n            requestAnimationFrame(() => {\n                setState('entered')\n            })\n        } else {\n            setState('leaving')\n            const backdrop = backdropRef.current\n            if (backdrop) {\n                const onTransitionEnd = (e: TransitionEvent) => {\n                    if (e.target !== backdrop) return\n                    backdrop.removeEventListener('transitionend', onTransitionEnd)\n                    setState('exited')\n                }\n                backdrop.addEventListener('transitionend', onTransitionEnd)\n            }\n        }\n    }, [show, appear, onAfterAppear])\n\n    if (state === 'exited') return null\n\n    const isVisible = state === 'entered'\n\n    return (\n        <div\n            ref={backdropRef}\n            className={`im-backdrop fixed inset-0 z-30 bg-black/75 transition-opacity duration-300 ease-in-out ${isVisible ? 'opacity-100' : 'opacity-0'}`}\n            aria-hidden=\"true\"\n        />\n    )\n}\n\nModal.displayName = 'Modal'\nexport default Modal\n","import type { RequestPayload } from '@inertiajs/core'\nimport { useCallback, useState, useEffect, useMemo, useRef, ReactNode, ElementType, MouseEvent } from 'react'\n\nimport { getConfig } from './config'\nimport { only, rejectNullValues, isStandardDomEvent } from './helpers'\nimport { useModalStack, modalPropNames, prefetch as prefetchModal } from './ModalRoot'\nimport type { Modal, PrefetchOption, HttpMethod } from './types'\n\ninterface ModalLinkProps {\n    href: string\n    method?: HttpMethod\n    data?: RequestPayload\n    as?: ElementType\n    headers?: Record<string, string>\n    queryStringArrayFormat?: 'brackets' | 'indices'\n    onAfterLeave?: () => void\n    onBlur?: () => void\n    onClose?: () => void\n    onError?: (error: unknown) => void\n    onFocus?: () => void\n    onStart?: () => void\n    onSuccess?: () => void\n    onPrefetching?: () => void\n    onPrefetched?: () => void\n    navigate?: boolean\n    // Prefetch options (#146)\n    prefetch?: PrefetchOption\n    cacheFor?: number\n    children: ReactNode | ((props: { loading: boolean }) => ReactNode)\n    [key: string]: unknown\n}\n\nconst ModalLink = ({\n    href,\n    method = 'get',\n    data = {} as RequestPayload,\n    as: Component = 'a',\n    headers = {},\n    queryStringArrayFormat = 'brackets' as const,\n    onAfterLeave,\n    onBlur,\n    onClose,\n    onError,\n    onFocus,\n    onStart,\n    onSuccess,\n    onPrefetching,\n    onPrefetched,\n    navigate,\n    prefetch = false,\n    cacheFor = 30000,\n    children,\n    ...props\n}: ModalLinkProps) => {\n    const [loading, setLoading] = useState(false)\n    const [modalContext, setModalContext] = useState<Modal | null>(null)\n    const { stack, visit } = useModalStack()\n    const hoverTimeout = useRef<ReturnType<typeof setTimeout> | null>(null)\n\n    const shouldNavigate = useMemo(() => {\n        return navigate ?? (getConfig('navigate') as boolean)\n    }, [navigate])\n\n    // Prefetch logic (#146)\n    const prefetchModes = useMemo(() => {\n        if (prefetch === true) {\n            return ['hover']\n        }\n        if (prefetch === false) {\n            return []\n        }\n        if (Array.isArray(prefetch)) {\n            return prefetch\n        }\n        return [prefetch]\n    }, [prefetch])\n\n    const doPrefetch = useCallback(() => {\n        prefetchModal(href, {\n            method,\n            data,\n            headers,\n            queryStringArrayFormat,\n            cacheFor,\n            onPrefetching: onPrefetching ?? undefined,\n            onPrefetched: onPrefetched ?? undefined,\n        })\n    }, [href, method, data, headers, queryStringArrayFormat, cacheFor, onPrefetching, onPrefetched])\n\n    const handleMouseEnter = useCallback(() => {\n        if (!prefetchModes.includes('hover')) return\n\n        hoverTimeout.current = setTimeout(() => {\n            doPrefetch()\n        }, 75) // Small delay to avoid prefetching on accidental hovers\n    }, [prefetchModes, doPrefetch])\n\n    const handleMouseLeave = useCallback(() => {\n        if (hoverTimeout.current) {\n            clearTimeout(hoverTimeout.current)\n            hoverTimeout.current = null\n        }\n    }, [])\n\n    const handleMouseDown = useCallback(\n        (event: MouseEvent) => {\n            if (!prefetchModes.includes('click')) return\n            if (event.button !== 0) return // Only left click\n\n            doPrefetch()\n        },\n        [prefetchModes, doPrefetch],\n    )\n\n    // Prefetch on mount\n    useEffect(() => {\n        if (prefetchModes.includes('mount')) {\n            doPrefetch()\n        }\n    }, [])\n\n    // Cleanup hover timeout on unmount\n    useEffect(() => {\n        return () => {\n            if (hoverTimeout.current) {\n                clearTimeout(hoverTimeout.current)\n            }\n        }\n    }, [])\n\n    // Separate standard props from custom event handlers\n    const standardProps: Record<string, unknown> = {}\n    const customEvents: Record<string, (...args: unknown[]) => void> = {}\n\n    Object.keys(props).forEach((key) => {\n        if (modalPropNames.includes(key)) {\n            return\n        }\n\n        if (key.startsWith('on') && typeof props[key] === 'function') {\n            if (isStandardDomEvent(key)) {\n                standardProps[key] = props[key]\n            } else {\n                customEvents[key] = props[key] as (...args: unknown[]) => void\n            }\n        } else {\n            standardProps[key] = props[key]\n        }\n    })\n\n    const [isBlurred, setIsBlurred] = useState(false)\n\n    useEffect(() => {\n        if (!modalContext) {\n            return\n        }\n\n        if (modalContext.onTopOfStack && isBlurred) {\n            onFocus?.()\n        } else if (!modalContext.onTopOfStack && !isBlurred) {\n            onBlur?.()\n        }\n\n        setIsBlurred(!modalContext.onTopOfStack)\n    }, [stack])\n\n    const onCloseCallback = useCallback(() => {\n        onClose?.()\n    }, [onClose])\n\n    const onAfterLeaveCallback = useCallback(() => {\n        setModalContext(null)\n        onAfterLeave?.()\n    }, [onAfterLeave])\n\n    const handle = useCallback(\n        (e?: MouseEvent) => {\n            e?.preventDefault()\n            if (loading) return\n\n            if (!href.startsWith('#')) {\n                setLoading(true)\n                onStart?.()\n            }\n\n            visit(\n                href,\n                method,\n                data,\n                headers,\n                rejectNullValues(only(props, modalPropNames)) as Record<string, unknown>,\n                () => onCloseCallback(),\n                onAfterLeaveCallback,\n                queryStringArrayFormat,\n                shouldNavigate,\n            )\n                .then((newModalContext) => {\n                    setModalContext(newModalContext)\n                    newModalContext.registerEventListenersFromProps(customEvents)\n                    onSuccess?.()\n                })\n                .catch((error) => {\n                    console.error(error)\n                    onError?.(error)\n                })\n                .finally(() => setLoading(false))\n        },\n        [href, method, data, headers, queryStringArrayFormat, props, onCloseCallback, onAfterLeaveCallback],\n    )\n\n    return (\n        <Component\n            {...standardProps}\n            href={href}\n            onClick={handle}\n            onMouseEnter={handleMouseEnter}\n            onMouseLeave={handleMouseLeave}\n            onMouseDown={handleMouseDown}\n        >\n            {typeof children === 'function' ? children({ loading }) : children}\n        </Component>\n    )\n}\n\nexport default ModalLink\n","// See: https://github.com/inertiajs/inertia/blob/48bcd21fb7daf467d0df1bfde2408f161f94a579/packages/react/src/WhenVisible.ts\nimport { createElement, useCallback, useEffect, useRef, useState, ReactNode, ElementType } from 'react'\n\nimport type { ReloadOptions } from './types'\nimport useModal from './useModal'\n\ninterface WhenVisibleProps {\n    children: ReactNode\n    data?: string | string[]\n    params?: ReloadOptions\n    buffer?: number\n    as?: ElementType\n    always?: boolean\n    fallback?: ReactNode\n}\n\nconst WhenVisible = ({ children, data, params, buffer, as, always, fallback }: WhenVisibleProps) => {\n    always = always ?? false\n    as = as ?? 'div'\n    fallback = fallback ?? null\n\n    const [loaded, setLoaded] = useState(false)\n    const hasFetched = useRef(false)\n    const fetching = useRef(false)\n    const ref = useRef<HTMLElement>(null)\n\n    const modal = useModal()\n\n    const getReloadParams = useCallback((): ReloadOptions => {\n        if (data) {\n            return {\n                only: Array.isArray(data) ? data : [data],\n            }\n        }\n\n        if (!params) {\n            throw new Error('You must provide either a `data` or `params` prop.')\n        }\n\n        return params\n    }, [params, data])\n\n    useEffect(() => {\n        if (!ref.current) {\n            return\n        }\n\n        const observer = new IntersectionObserver(\n            (entries) => {\n                if (!entries[0].isIntersecting) {\n                    return\n                }\n\n                if (!always && hasFetched.current) {\n                    observer.disconnect()\n                }\n\n                if (fetching.current) {\n                    return\n                }\n\n                hasFetched.current = true\n                fetching.current = true\n\n                const reloadParams = getReloadParams()\n\n                modal?.reload({\n                    ...reloadParams,\n                    onStart: () => {\n                        fetching.current = true\n                        reloadParams.onStart?.()\n                    },\n                    onFinish: () => {\n                        setLoaded(true)\n                        fetching.current = false\n                        reloadParams.onFinish?.()\n\n                        if (!always) {\n                            observer.disconnect()\n                        }\n                    },\n                })\n            },\n            {\n                rootMargin: `${buffer || 0}px`,\n            },\n        )\n\n        observer.observe(ref.current)\n\n        return () => {\n            observer.disconnect()\n        }\n    }, [ref, getReloadParams, buffer])\n\n    if (always || !loaded) {\n        return createElement(\n            as,\n            {\n                props: null,\n                ref,\n            },\n            loaded ? children : fallback,\n        )\n    }\n\n    return loaded ? children : null\n}\n\nWhenVisible.displayName = 'InertiaWhenVisible'\n\nexport default WhenVisible\n","import * as dialogUtils from '@inertiaui/vanilla'\nimport { createElement } from 'react'\n\nimport { getConfig, putConfig, resetConfig } from './config'\nimport Deferred from './Deferred'\nimport HeadlessModal from './HeadlessModal'\nimport Modal from './Modal'\nimport ModalLink from './ModalLink'\nimport { useModalIndex } from './ModalRenderer'\nimport { useModalStack, ModalRoot, ModalStackProvider, renderApp, initFromPageProps, modalPropNames, prefetch } from './ModalRoot'\nimport useModal from './useModal'\nimport WhenVisible from './WhenVisible'\n\n// Types\nexport type {\n    Modal as ModalInstance,\n    ModalConfig,\n    ModalResponseData,\n    ModalStackContextValue,\n    VisitOptions,\n    ReloadOptions,\n    EventCallback,\n    ComponentResolver,\n    HttpMethod,\n    PageProps,\n    ModalRootProps,\n    ModalRendererProps,\n    LocalModal,\n    // Prefetch types (#146)\n    PrefetchOption,\n    PrefetchOptions,\n} from './types'\n\nexport type { ModalTypeConfig } from './config'\n\nexport type { CleanupFunction, FocusTrapOptions, EscapeKeyOptions } from '@inertiaui/vanilla'\n\nconst setPageLayout =\n    <T extends { default: { layout?: (page: React.ReactNode) => React.ReactNode } }>(layout: React.ComponentType<{ children?: React.ReactNode }>) =>\n    (module: T): T => {\n        module.default.layout = (page) => createElement(layout, { children: page })\n        return module\n    }\n\nexport {\n    Deferred,\n    HeadlessModal,\n    Modal,\n    ModalLink,\n    ModalRoot,\n    ModalStackProvider,\n    WhenVisible,\n    getConfig,\n    initFromPageProps,\n    modalPropNames,\n    putConfig,\n    renderApp,\n    resetConfig,\n    setPageLayout,\n    useModal,\n    useModalIndex,\n    useModalStack,\n    // Prefetch function (#146)\n    prefetch,\n    // Dialog utilities (framework-agnostic)\n    dialogUtils,\n}\n"],"x_google_ignoreList":[8],"mappings":"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"}