@inertiajs/core 2.3.5 → 2.3.7
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +7 -2
- package/dist/index.esm.js.map +2 -2
- package/dist/index.js +7 -2
- package/dist/index.js.map +2 -2
- package/package.json +2 -2
- package/types/types.d.ts +6 -4
package/dist/index.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
3
|
"sources": ["../src/index.ts", "../src/router.ts", "../src/config.ts", "../src/debounce.ts", "../src/events.ts", "../src/history.ts", "../src/sessionStorage.ts", "../src/encryption.ts", "../src/prefetched.ts", "../src/objectUtils.ts", "../src/time.ts", "../src/scroll.ts", "../src/url.ts", "../src/files.ts", "../src/formData.ts", "../src/page.ts", "../src/queue.ts", "../src/eventHandler.ts", "../src/navigationType.ts", "../src/initialVisit.ts", "../src/poll.ts", "../src/polls.ts", "../src/request.ts", "../src/requestParams.ts", "../src/response.ts", "../src/modal.ts", "../src/dialog.ts", "../src/requestStream.ts", "../src/useFormUtils.ts", "../src/domUtils.ts", "../src/formObject.ts", "../src/head.ts", "../src/infiniteScroll/data.ts", "../src/intersectionObservers.ts", "../src/infiniteScroll/elements.ts", "../src/infiniteScroll/queryString.ts", "../src/infiniteScroll/scrollPreservation.ts", "../src/infiniteScroll.ts", "../src/navigationEvents.ts", "../src/progress-component.ts", "../src/progress.ts", "../src/resetFormFields.ts"],
|
|
4
|
-
"sourcesContent": ["import { Config } from './config'\nimport { Router } from './router'\n\nexport { UseFormUtils } from './useFormUtils'\n\nexport { config } from './config'\nexport { getInitialPageFromDOM, getScrollableParent } from './domUtils'\nexport { objectToFormData } from './formData'\nexport { formDataToObject } from './formObject'\nexport { default as createHeadManager } from './head'\nexport { default as useInfiniteScroll } from './infiniteScroll'\nexport { shouldIntercept, shouldNavigate } from './navigationEvents'\nexport { hide as hideProgress, progress, reveal as revealProgress, default as setupProgress } from './progress'\nexport { resetFormFields } from './resetFormFields'\nexport * from './types'\nexport {\n hrefToUrl,\n isUrlMethodPair,\n mergeDataIntoQueryString,\n urlHasProtocol,\n urlToString,\n urlWithoutHash,\n} from './url'\nexport { type Config, type Router }\n\nexport const router = new Router()\n", "import { cloneDeep, get, set } from 'lodash-es'\nimport { progress } from '.'\nimport { config } from './config'\nimport { eventHandler } from './eventHandler'\nimport { fireBeforeEvent, fireFlashEvent } from './events'\nimport { history } from './history'\nimport { InitialVisit } from './initialVisit'\nimport { page as currentPage } from './page'\nimport { polls } from './polls'\nimport { prefetchedRequests } from './prefetched'\nimport Queue from './queue'\nimport { Request } from './request'\nimport { RequestParams } from './requestParams'\nimport { RequestStream } from './requestStream'\nimport { Scroll } from './scroll'\nimport {\n ActiveVisit,\n ClientSideVisitOptions,\n Component,\n FlashData,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n InFlightPrefetch,\n Method,\n Page,\n PageFlashData,\n PendingVisit,\n PendingVisitOptions,\n PollOptions,\n PrefetchedResponse,\n PrefetchOptions,\n ReloadOptions,\n RequestPayload,\n RouterInitParams,\n UrlMethodPair,\n Visit,\n VisitCallbacks,\n VisitHelperOptions,\n VisitOptions,\n} from './types'\nimport { isUrlMethodPair, transformUrlAndData } from './url'\n\nexport class Router {\n protected syncRequestStream = new RequestStream({\n maxConcurrent: 1,\n interruptible: true,\n })\n\n protected asyncRequestStream = new RequestStream({\n maxConcurrent: Infinity,\n interruptible: false,\n })\n\n protected clientVisitQueue = new Queue<Promise<void>>()\n\n public init<ComponentType = Component>({\n initialPage,\n resolveComponent,\n swapComponent,\n onFlash,\n }: RouterInitParams<ComponentType>): void {\n currentPage.init({\n initialPage,\n resolveComponent,\n swapComponent,\n onFlash,\n })\n\n InitialVisit.handle()\n\n eventHandler.init()\n\n eventHandler.on('missingHistoryItem', () => {\n if (typeof window !== 'undefined') {\n this.visit(window.location.href, { preserveState: true, preserveScroll: true, replace: true })\n }\n })\n\n eventHandler.on('loadDeferredProps', (deferredProps: Page['deferredProps']) => {\n this.loadDeferredProps(deferredProps)\n })\n\n eventHandler.on('historyQuotaExceeded', (url) => {\n window.location.href = url\n })\n }\n\n public get<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { ...options, method: 'get', data })\n }\n\n public post<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'post', data })\n }\n\n public put<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'put', data })\n }\n\n public patch<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'patch', data })\n }\n\n public delete<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n options: Omit<VisitOptions<T>, 'method'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'delete' })\n }\n\n public reload<T extends RequestPayload = RequestPayload>(options: ReloadOptions<T> = {}): void {\n return this.doReload(options)\n }\n\n protected doReload<T extends RequestPayload = RequestPayload>(\n options: ReloadOptions<T> & {\n deferredProps?: boolean\n } = {},\n ): void {\n if (typeof window === 'undefined') {\n return\n }\n\n return this.visit(window.location.href, {\n ...options,\n preserveScroll: true,\n preserveState: true,\n async: true,\n headers: {\n ...(options.headers || {}),\n 'Cache-Control': 'no-cache',\n },\n })\n }\n\n public remember(data: unknown, key = 'default'): void {\n history.remember(data, key)\n }\n\n public restore<T = unknown>(key = 'default'): T | undefined {\n return history.restore(key) as T | undefined\n }\n\n public on<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n if (typeof window === 'undefined') {\n return () => {}\n }\n\n return eventHandler.onGlobalEvent(type, callback)\n }\n\n public cancel(): void {\n this.syncRequestStream.cancelInFlight()\n }\n\n public cancelAll(): void {\n this.asyncRequestStream.cancelInFlight()\n this.syncRequestStream.cancelInFlight()\n }\n\n public poll(interval: number, requestOptions: ReloadOptions = {}, options: PollOptions = {}) {\n return polls.add(interval, () => this.reload(requestOptions), {\n autoStart: options.autoStart ?? true,\n keepAlive: options.keepAlive ?? false,\n })\n }\n\n public visit<T extends RequestPayload = RequestPayload>(\n href: string | URL | UrlMethodPair,\n options: VisitOptions<T> = {},\n ): void {\n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n showProgress: options.showProgress ?? !options.async,\n } as VisitOptions)\n\n const events = this.getVisitEvents(options as VisitOptions)\n\n // If either of these return false, we don't want to continue\n if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n const requestStream = visit.async ? this.asyncRequestStream : this.syncRequestStream\n\n requestStream.interruptInFlight()\n\n if (!currentPage.isCleared() && !visit.preserveUrl) {\n // Save scroll regions for the current page\n Scroll.save()\n }\n\n const requestParams: PendingVisit & VisitCallbacks = {\n ...visit,\n ...events,\n }\n\n const prefetched = prefetchedRequests.get(requestParams)\n\n if (prefetched) {\n progress.reveal(prefetched.inFlight)\n prefetchedRequests.use(prefetched, requestParams)\n } else {\n progress.reveal(true)\n requestStream.send(Request.create(requestParams, currentPage.get()))\n }\n }\n\n public getCached(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n ): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findCached(this.getPrefetchParams(href, options))\n }\n\n public flush(href: string | URL | UrlMethodPair, options: VisitOptions = {}): void {\n prefetchedRequests.remove(this.getPrefetchParams(href, options))\n }\n\n public flushAll(): void {\n prefetchedRequests.removeAll()\n }\n\n public flushByCacheTags(tags: string | string[]): void {\n prefetchedRequests.removeByTags(Array.isArray(tags) ? tags : [tags])\n }\n\n public getPrefetching(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n ): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findInFlight(this.getPrefetchParams(href, options))\n }\n\n public prefetch(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n prefetchOptions: Partial<PrefetchOptions> = {},\n ) {\n const method: Method = options.method ?? (isUrlMethodPair(href) ? href.method : 'get')\n\n if (method !== 'get') {\n throw new Error('Prefetch requests must use the GET method')\n }\n\n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n async: true,\n showProgress: false,\n prefetch: true,\n viewTransition: false,\n })\n\n const visitUrl = visit.url.origin + visit.url.pathname + visit.url.search\n const currentUrl = window.location.origin + window.location.pathname + window.location.search\n\n if (visitUrl === currentUrl) {\n // Don't prefetch the current page, you're already on it\n return\n }\n\n const events = this.getVisitEvents(options)\n\n // If either of these return false, we don't want to continue\n if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n progress.hide()\n\n this.asyncRequestStream.interruptInFlight()\n\n const requestParams: PendingVisit & VisitCallbacks = {\n ...visit,\n ...events,\n }\n\n const ensureCurrentPageIsSet = (): Promise<void> => {\n return new Promise((resolve) => {\n const checkIfPageIsDefined = () => {\n if (currentPage.get()) {\n resolve()\n } else {\n setTimeout(checkIfPageIsDefined, 50)\n }\n }\n\n checkIfPageIsDefined()\n })\n }\n\n ensureCurrentPageIsSet().then(() => {\n prefetchedRequests.add(\n requestParams,\n (params) => {\n this.asyncRequestStream.send(Request.create(params, currentPage.get()))\n },\n {\n cacheFor: config.get('prefetch.cacheFor'),\n cacheTags: [],\n ...prefetchOptions,\n },\n )\n })\n }\n\n public clearHistory(): void {\n history.clear()\n }\n\n public decryptHistory(): Promise<Page> {\n return history.decrypt()\n }\n\n public resolveComponent(component: string): Promise<Component> {\n return currentPage.resolve(component)\n }\n\n public replace<TProps = Page['props']>(params: ClientSideVisitOptions<TProps>): void {\n this.clientVisit(params, { replace: true })\n }\n\n public replaceProp<TProps = Page['props']>(\n name: string,\n value: unknown | ((oldValue: unknown, props: TProps) => unknown),\n options?: Pick<ClientSideVisitOptions, 'onError' | 'onFinish' | 'onSuccess'>,\n ): void {\n this.replace({\n preserveScroll: true,\n preserveState: true,\n props(currentProps) {\n const newValue = typeof value === 'function' ? value(get(currentProps, name), currentProps) : value\n\n return set(cloneDeep(currentProps), name, newValue)\n },\n ...(options || {}),\n })\n }\n\n public appendToProp<TProps = Page['props']>(\n name: string,\n value: unknown | unknown[] | ((oldValue: unknown, props: TProps) => unknown | unknown[]),\n options?: Pick<ClientSideVisitOptions, 'onError' | 'onFinish' | 'onSuccess'>,\n ): void {\n this.replaceProp(\n name,\n (currentValue: unknown, currentProps: TProps) => {\n const newValue = typeof value === 'function' ? value(currentValue, currentProps) : value\n\n if (!Array.isArray(currentValue)) {\n currentValue = currentValue !== undefined ? [currentValue] : []\n }\n\n return [...(currentValue as unknown[]), newValue]\n },\n options,\n )\n }\n\n public prependToProp<TProps = Page['props']>(\n name: string,\n value: unknown | unknown[] | ((oldValue: unknown, props: TProps) => unknown | unknown[]),\n options?: Pick<ClientSideVisitOptions, 'onError' | 'onFinish' | 'onSuccess'>,\n ): void {\n this.replaceProp(\n name,\n (currentValue: unknown, currentProps: TProps) => {\n const newValue = typeof value === 'function' ? value(currentValue, currentProps) : value\n\n if (!Array.isArray(currentValue)) {\n currentValue = currentValue !== undefined ? [currentValue] : []\n }\n\n return [newValue, ...(currentValue as unknown[])]\n },\n options,\n )\n }\n\n public push<TProps = Page['props']>(params: ClientSideVisitOptions<TProps>): void {\n this.clientVisit(params)\n }\n\n public flash<TFlash extends PageFlashData = PageFlashData>(\n keyOrData: string | ((flash: FlashData) => TFlash) | TFlash,\n value?: unknown,\n ): void {\n const current = currentPage.get().flash\n let flash: PageFlashData\n\n if (typeof keyOrData === 'function') {\n flash = keyOrData(current)\n } else if (typeof keyOrData === 'string') {\n flash = { ...current, [keyOrData]: value }\n } else if (keyOrData && Object.keys(keyOrData).length) {\n flash = { ...current, ...keyOrData }\n } else {\n return\n }\n\n currentPage.setFlash(flash)\n\n if (Object.keys(flash).length) {\n fireFlashEvent(flash)\n }\n }\n\n protected clientVisit<TProps = Page['props']>(\n params: ClientSideVisitOptions<TProps>,\n { replace = false }: { replace?: boolean } = {},\n ): void {\n this.clientVisitQueue.add(() => this.performClientVisit(params, { replace }))\n }\n\n protected performClientVisit<TProps = Page['props']>(\n params: ClientSideVisitOptions<TProps>,\n { replace = false }: { replace?: boolean } = {},\n ): Promise<void> {\n const current = currentPage.get()\n\n const props =\n typeof params.props === 'function' ? params.props(current.props as TProps) : (params.props ?? current.props)\n\n const flash = typeof params.flash === 'function' ? params.flash(current.flash) : params.flash\n\n const { viewTransition, onError, onFinish, onFlash, onSuccess, ...pageParams } = params\n\n const page = {\n ...current,\n ...pageParams,\n flash: flash ?? {},\n props: props as Page['props'],\n }\n\n const preserveScroll = RequestParams.resolvePreserveOption(params.preserveScroll ?? false, page)\n const preserveState = RequestParams.resolvePreserveOption(params.preserveState ?? false, page)\n\n return currentPage\n .set(page, {\n replace,\n preserveScroll,\n preserveState,\n viewTransition,\n })\n .then(() => {\n const currentFlash = currentPage.get().flash\n\n if (Object.keys(currentFlash).length > 0) {\n fireFlashEvent(currentFlash)\n onFlash?.(currentFlash)\n }\n\n const errors = currentPage.get().props.errors || {}\n\n if (Object.keys(errors).length === 0) {\n onSuccess?.(currentPage.get())\n return\n }\n\n const scopedErrors = params.errorBag ? errors[params.errorBag || ''] || {} : errors\n\n onError?.(scopedErrors)\n })\n .finally(() => onFinish?.(params))\n }\n\n protected getPrefetchParams(href: string | URL | UrlMethodPair, options: VisitOptions): ActiveVisit {\n return {\n ...this.getPendingVisit(href, {\n ...options,\n async: true,\n showProgress: false,\n prefetch: true,\n viewTransition: false,\n }),\n ...this.getVisitEvents(options),\n }\n }\n\n protected getPendingVisit(\n href: string | URL | UrlMethodPair,\n options: VisitOptions,\n pendingVisitOptions: Partial<PendingVisitOptions> = {},\n ): PendingVisit {\n if (isUrlMethodPair(href)) {\n const urlMethodPair = href\n href = urlMethodPair.url\n options.method = options.method ?? urlMethodPair.method\n }\n\n const defaultVisitOptionsCallback = config.get('visitOptions')\n\n const configuredOptions = defaultVisitOptionsCallback\n ? defaultVisitOptionsCallback(href.toString(), cloneDeep(options)) || {}\n : {}\n\n const mergedOptions: Visit = {\n method: 'get',\n data: {},\n replace: false,\n preserveScroll: false,\n preserveState: false,\n only: [],\n except: [],\n headers: {},\n errorBag: '',\n forceFormData: false,\n queryStringArrayFormat: 'brackets',\n async: false,\n showProgress: true,\n fresh: false,\n reset: [],\n preserveUrl: false,\n prefetch: false,\n invalidateCacheTags: [],\n viewTransition: false,\n ...options,\n ...configuredOptions,\n }\n\n const [url, _data] = transformUrlAndData(\n href,\n mergedOptions.data,\n mergedOptions.method,\n mergedOptions.forceFormData,\n mergedOptions.queryStringArrayFormat,\n )\n\n const visit = {\n cancelled: false,\n completed: false,\n interrupted: false,\n ...mergedOptions,\n ...pendingVisitOptions,\n url,\n data: _data,\n }\n\n if (visit.prefetch) {\n visit.headers['Purpose'] = 'prefetch'\n }\n\n return visit\n }\n\n protected getVisitEvents(options: VisitOptions): VisitCallbacks {\n return {\n onCancelToken: options.onCancelToken || (() => {}),\n onBefore: options.onBefore || (() => {}),\n onBeforeUpdate: options.onBeforeUpdate || (() => {}),\n onStart: options.onStart || (() => {}),\n onProgress: options.onProgress || (() => {}),\n onFinish: options.onFinish || (() => {}),\n onCancel: options.onCancel || (() => {}),\n onSuccess: options.onSuccess || (() => {}),\n onError: options.onError || (() => {}),\n onFlash: options.onFlash || (() => {}),\n onPrefetched: options.onPrefetched || (() => {}),\n onPrefetching: options.onPrefetching || (() => {}),\n }\n }\n\n protected loadDeferredProps(deferred: Page['deferredProps']): void {\n if (deferred) {\n Object.entries(deferred).forEach(([_, group]) => {\n this.doReload({ only: group, deferredProps: true })\n })\n }\n }\n}\n", "import { get, has, set } from 'lodash-es'\nimport { InertiaAppConfig } from './types'\n\n// Generate all possible nested paths\ntype ConfigKeys<T> = T extends Function\n ? never\n : string extends keyof T\n ? string\n :\n | Extract<keyof T, string>\n | {\n [Key in Extract<keyof T, string>]: T[Key] extends object ? `${Key}.${ConfigKeys<T[Key]> & string}` : never\n }[Extract<keyof T, string>]\n\n// Extract the value type at a given path\ntype ConfigValue<T, K extends ConfigKeys<T>> = K extends `${infer P}.${infer Rest}`\n ? P extends keyof T\n ? Rest extends ConfigKeys<T[P]>\n ? ConfigValue<T[P], Rest>\n : never\n : never\n : K extends keyof T\n ? T[K]\n : never\n\n// Helper type for setting multiple config values with an object\ntype ConfigSetObject<T> = {\n [K in ConfigKeys<T>]?: ConfigValue<T, K>\n}\n\ntype FirstLevelOptional<T> = {\n [K in keyof T]?: T[K] extends object ? { [P in keyof T[K]]?: T[K][P] } : T[K]\n}\n\nexport class Config<TConfig extends {} = {}> {\n protected config: FirstLevelOptional<TConfig> = {}\n protected defaults: TConfig\n\n public constructor(defaults: TConfig) {\n this.defaults = defaults\n }\n\n public extend<TExtension extends {}>(defaults?: TExtension): Config<TConfig & TExtension> {\n if (defaults) {\n this.defaults = { ...this.defaults, ...defaults } as TConfig & TExtension\n }\n\n return this as unknown as Config<TConfig & TExtension>\n }\n\n public replace(newConfig: FirstLevelOptional<TConfig>): void {\n this.config = newConfig\n }\n\n public get<K extends ConfigKeys<TConfig>>(key: K): ConfigValue<TConfig, K> {\n return (has(this.config, key) ? get(this.config, key) : get(this.defaults, key)) as ConfigValue<TConfig, K>\n }\n\n public set<K extends ConfigKeys<TConfig>>(\n keyOrValues: K | Partial<ConfigSetObject<TConfig>>,\n value?: ConfigValue<TConfig, K>,\n ): void {\n if (typeof keyOrValues === 'string') {\n set(this.config, keyOrValues, value)\n } else {\n Object.entries(keyOrValues).forEach(([key, val]) => {\n set(this.config, key, val)\n })\n }\n }\n}\n\nexport const config = new Config<InertiaAppConfig>({\n form: {\n recentlySuccessfulDuration: 2_000,\n forceIndicesArrayFormatInFormData: true,\n },\n future: {\n preserveEqualProps: false,\n useDataInertiaHeadAttribute: false,\n useDialogForErrorModal: false,\n useScriptElementForInitialPage: false,\n },\n prefetch: {\n cacheFor: 30_000,\n hoverDelay: 75,\n },\n})\n", "export default function debounce<F extends (...params: any[]) => ReturnType<F>>(fn: F, delay: number): F {\n let timeoutID: NodeJS.Timeout\n return function (...args: unknown[]) {\n clearTimeout(timeoutID)\n timeoutID = setTimeout(() => fn.apply(this, args), delay)\n } as F\n}\n", "import { GlobalEventDetails, GlobalEventNames, GlobalEventTrigger } from './types'\n\nfunction fireEvent<TEventName extends GlobalEventNames>(\n name: TEventName,\n options: CustomEventInit<GlobalEventDetails<TEventName>>,\n): boolean {\n return document.dispatchEvent(new CustomEvent(`inertia:${name}`, options))\n}\n\nexport const fireBeforeEvent: GlobalEventTrigger<'before'> = (visit) => {\n return fireEvent('before', { cancelable: true, detail: { visit } })\n}\n\nexport const fireErrorEvent: GlobalEventTrigger<'error'> = (errors) => {\n return fireEvent('error', { detail: { errors } })\n}\n\nexport const fireExceptionEvent: GlobalEventTrigger<'exception'> = (exception) => {\n return fireEvent('exception', { cancelable: true, detail: { exception } })\n}\n\nexport const fireFinishEvent: GlobalEventTrigger<'finish'> = (visit) => {\n return fireEvent('finish', { detail: { visit } })\n}\n\nexport const fireInvalidEvent: GlobalEventTrigger<'invalid'> = (response) => {\n return fireEvent('invalid', { cancelable: true, detail: { response } })\n}\n\nexport const fireBeforeUpdateEvent: GlobalEventTrigger<'beforeUpdate'> = (page) => {\n return fireEvent('beforeUpdate', { detail: { page } })\n}\n\nexport const fireNavigateEvent: GlobalEventTrigger<'navigate'> = (page) => {\n return fireEvent('navigate', { detail: { page } })\n}\n\nexport const fireProgressEvent: GlobalEventTrigger<'progress'> = (progress) => {\n return fireEvent('progress', { detail: { progress } })\n}\n\nexport const fireStartEvent: GlobalEventTrigger<'start'> = (visit) => {\n return fireEvent('start', { detail: { visit } })\n}\n\nexport const fireSuccessEvent: GlobalEventTrigger<'success'> = (page) => {\n return fireEvent('success', { detail: { page } })\n}\n\nexport const firePrefetchedEvent: GlobalEventTrigger<'prefetched'> = (response, visit) => {\n return fireEvent('prefetched', { detail: { fetchedAt: Date.now(), response: response.data, visit } })\n}\n\nexport const firePrefetchingEvent: GlobalEventTrigger<'prefetching'> = (visit) => {\n return fireEvent('prefetching', { detail: { visit } })\n}\n\nexport const fireFlashEvent: GlobalEventTrigger<'flash'> = (flash) => {\n return fireEvent('flash', { detail: { flash } })\n}\n", "import { cloneDeep, isEqual } from 'lodash-es'\nimport { decryptHistory, encryptHistory, historySessionStorageKeys } from './encryption'\nimport { eventHandler } from './eventHandler'\nimport { page as currentPage } from './page'\nimport Queue from './queue'\nimport { SessionStorage } from './sessionStorage'\nimport { Page, ScrollRegion } from './types'\n\nconst isServer = typeof window === 'undefined'\nconst queue = new Queue<Promise<void>>()\nconst isChromeIOS = !isServer && /CriOS/.test(window.navigator.userAgent)\n\nclass History {\n public rememberedState = 'rememberedState' as const\n public scrollRegions = 'scrollRegions' as const\n public preserveUrl = false\n protected current: Partial<Page> = {}\n // We need initialState for `restore`\n protected initialState: Partial<Page> | null = null\n\n public remember(data: unknown, key: string): void {\n this.replaceState({\n ...currentPage.getWithoutFlashData(),\n rememberedState: {\n ...(currentPage.get()?.rememberedState ?? {}),\n [key]: data,\n },\n })\n }\n\n public restore(key: string): unknown {\n if (!isServer) {\n return this.current[this.rememberedState]?.[key] !== undefined\n ? this.current[this.rememberedState]?.[key]\n : this.initialState?.[this.rememberedState]?.[key]\n }\n }\n\n public pushState(page: Page, cb: (() => void) | null = null): void {\n if (isServer) {\n return\n }\n\n if (this.preserveUrl) {\n cb && cb()\n return\n }\n\n this.current = page\n\n queue.add(() => {\n return this.getPageData(page).then((data) => {\n // Defer history.pushState to the next event loop tick to prevent timing conflicts.\n // Ensure any previous history.replaceState completes before pushState is executed.\n const doPush = () => this.doPushState({ page: data }, page.url).then(() => cb?.())\n\n if (isChromeIOS) {\n return new Promise((resolve) => {\n setTimeout(() => doPush().then(resolve))\n })\n }\n\n return doPush()\n })\n })\n }\n\n protected clonePageProps(page: Page): Page {\n try {\n structuredClone(page.props)\n return page\n } catch {\n // Props contain non-serializable data (e.g., Proxies, functions).\n // Clone them to ensure they can be safely stored in browser history.\n return {\n ...page,\n props: cloneDeep(page.props),\n }\n }\n }\n\n protected getPageData(page: Page): Promise<Page | ArrayBuffer> {\n const pageWithClonedProps = this.clonePageProps(page)\n\n return new Promise((resolve) => {\n return page.encryptHistory ? encryptHistory(pageWithClonedProps).then(resolve) : resolve(pageWithClonedProps)\n })\n }\n\n public processQueue(): Promise<void> {\n return queue.process()\n }\n\n public decrypt(page: Page | null = null): Promise<Page> {\n if (isServer) {\n return Promise.resolve(page ?? currentPage.get())\n }\n\n const pageData = page ?? window.history.state?.page\n\n return this.decryptPageData(pageData).then((data) => {\n if (!data) {\n throw new Error('Unable to decrypt history')\n }\n\n if (this.initialState === null) {\n this.initialState = data ?? undefined\n } else {\n this.current = data ?? {}\n }\n\n return data\n })\n }\n\n protected decryptPageData(pageData: ArrayBuffer | Page | null): Promise<Page | null> {\n return pageData instanceof ArrayBuffer ? decryptHistory(pageData) : Promise.resolve(pageData)\n }\n\n public saveScrollPositions(scrollRegions: ScrollRegion[]): void {\n queue.add(() => {\n return Promise.resolve().then(() => {\n if (!window.history.state?.page) {\n return\n }\n\n if (isEqual(this.getScrollRegions(), scrollRegions)) {\n return\n }\n\n return this.doReplaceState({\n page: window.history.state.page,\n scrollRegions,\n })\n })\n })\n }\n\n public saveDocumentScrollPosition(scrollRegion: ScrollRegion): void {\n queue.add(() => {\n return Promise.resolve().then(() => {\n if (!window.history.state?.page) {\n return\n }\n\n if (isEqual(this.getDocumentScrollPosition(), scrollRegion)) {\n return\n }\n\n return this.doReplaceState({\n page: window.history.state.page,\n documentScrollPosition: scrollRegion,\n })\n })\n })\n }\n\n public getScrollRegions(): ScrollRegion[] {\n return window.history.state?.scrollRegions || []\n }\n\n public getDocumentScrollPosition(): ScrollRegion {\n return window.history.state?.documentScrollPosition || { top: 0, left: 0 }\n }\n\n public replaceState(page: Page, cb: (() => void) | null = null): void {\n currentPage.merge(page)\n\n if (isServer) {\n return\n }\n\n if (this.preserveUrl) {\n cb && cb()\n return\n }\n\n this.current = page\n\n queue.add(() => {\n return this.getPageData(page).then((data) => {\n // Defer history.replaceState to the next event loop tick to prevent timing conflicts.\n // Ensure any previous history.pushState completes before replaceState is executed.\n const doReplace = () => this.doReplaceState({ page: data }, page.url).then(() => cb?.())\n\n if (isChromeIOS) {\n return new Promise((resolve) => {\n setTimeout(() => doReplace().then(resolve))\n })\n }\n\n return doReplace()\n })\n })\n }\n\n protected isHistoryThrottleError(error: unknown): error is Error & { name: 'SecurityError' } {\n return (\n error instanceof Error &&\n error.name === 'SecurityError' &&\n (error.message.includes('history.pushState') || error.message.includes('history.replaceState'))\n )\n }\n\n protected isQuotaExceededError(error: unknown): error is Error & { name: 'QuotaExceededError' } {\n return error instanceof Error && error.name === 'QuotaExceededError'\n }\n\n protected withThrottleProtection<T = void>(cb: () => T): Promise<T | undefined> {\n return Promise.resolve().then(() => {\n try {\n return cb()\n } catch (error) {\n if (!this.isHistoryThrottleError(error)) {\n throw error\n }\n\n console.error(error.message)\n }\n })\n }\n\n protected doReplaceState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url?: string,\n ): Promise<void> {\n return this.withThrottleProtection(() => {\n window.history.replaceState(\n {\n ...data,\n scrollRegions: data.scrollRegions ?? window.history.state?.scrollRegions,\n documentScrollPosition: data.documentScrollPosition ?? window.history.state?.documentScrollPosition,\n },\n '',\n url,\n )\n })\n }\n\n protected doPushState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url: string,\n ): Promise<void> {\n return this.withThrottleProtection(() => {\n try {\n window.history.pushState(data, '', url)\n } catch (error) {\n if (!this.isQuotaExceededError(error)) {\n throw error\n }\n\n eventHandler.fireInternalEvent('historyQuotaExceeded', url)\n }\n })\n }\n\n public getState<T>(key: keyof Page, defaultValue?: T): any {\n return this.current?.[key] ?? defaultValue\n }\n\n public deleteState(key: keyof Page) {\n if (this.current[key] !== undefined) {\n delete this.current[key]\n this.replaceState(this.current as Page)\n }\n }\n\n public clearInitialState(key: keyof Page) {\n if (this.initialState && this.initialState[key] !== undefined) {\n delete this.initialState[key]\n }\n }\n\n public browserHasHistoryEntry(): boolean {\n return !isServer && !!window.history.state?.page\n }\n\n public clear() {\n SessionStorage.remove(historySessionStorageKeys.key)\n SessionStorage.remove(historySessionStorageKeys.iv)\n }\n\n public setCurrent(page: Page): void {\n this.current = page\n }\n\n public isValidState(state: any): boolean {\n return !!state.page\n }\n\n public getAllState(): Page {\n return this.current as Page\n }\n}\n\nif (typeof window !== 'undefined' && window.history.scrollRestoration) {\n window.history.scrollRestoration = 'manual'\n}\n\nexport const history = new History()\n", "export class SessionStorage {\n public static locationVisitKey = 'inertiaLocationVisit'\n\n public static set(key: string, value: any): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.setItem(key, JSON.stringify(value))\n }\n }\n\n public static get(key: string): any {\n if (typeof window !== 'undefined') {\n return JSON.parse(window.sessionStorage.getItem(key) || 'null')\n }\n }\n\n public static merge(key: string, value: any): void {\n const existing = this.get(key)\n\n if (existing === null) {\n this.set(key, value)\n } else {\n this.set(key, { ...existing, ...value })\n }\n }\n\n public static remove(key: string): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.removeItem(key)\n }\n }\n\n public static removeNested(key: string, nestedKey: string): void {\n const existing = this.get(key)\n\n if (existing !== null) {\n delete existing[nestedKey]\n\n this.set(key, existing)\n }\n }\n\n public static exists(key: string): boolean {\n try {\n return this.get(key) !== null\n } catch (error) {\n return false\n }\n }\n\n public static clear(): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.clear()\n }\n }\n}\n", "import { SessionStorage } from './sessionStorage'\n\nexport const encryptHistory = async (data: any): Promise<ArrayBuffer> => {\n if (typeof window === 'undefined') {\n throw new Error('Unable to encrypt history')\n }\n\n const iv = getIv()\n const storedKey = await getKeyFromSessionStorage()\n const key = await getOrCreateKey(storedKey)\n\n if (!key) {\n throw new Error('Unable to encrypt history')\n }\n\n const encrypted = await encryptData(iv, key, data)\n\n return encrypted\n}\n\nexport const historySessionStorageKeys = {\n key: 'historyKey',\n iv: 'historyIv',\n}\n\nexport const decryptHistory = async (data: any): Promise<any> => {\n const iv = getIv()\n const storedKey = await getKeyFromSessionStorage()\n\n if (!storedKey) {\n throw new Error('Unable to decrypt history')\n }\n\n return await decryptData(iv, storedKey, data)\n}\n\nconst encryptData = async (iv: BufferSource, key: CryptoKey, data: any) => {\n if (typeof window === 'undefined') {\n throw new Error('Unable to encrypt history')\n }\n\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(data)\n }\n\n const textEncoder = new TextEncoder()\n const str = JSON.stringify(data)\n const encoded = new Uint8Array(str.length * 3)\n\n const result = textEncoder.encodeInto(str, encoded)\n\n return window.crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n encoded.subarray(0, result.written),\n )\n}\n\nconst decryptData = async (iv: BufferSource, key: CryptoKey, data: any) => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Decryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(data)\n }\n\n const decrypted = await window.crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n data,\n )\n\n return JSON.parse(new TextDecoder().decode(decrypted))\n}\n\nconst getIv = (): BufferSource => {\n const ivString = SessionStorage.get(historySessionStorageKeys.iv)\n\n if (ivString) {\n return new Uint8Array(ivString)\n }\n\n const iv = window.crypto.getRandomValues(new Uint8Array(12))\n\n SessionStorage.set(historySessionStorageKeys.iv, Array.from(iv))\n\n return iv\n}\n\nconst createKey = async () => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(null)\n }\n\n return window.crypto.subtle.generateKey(\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt'],\n )\n}\n\nconst saveKey = async (key: CryptoKey) => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve()\n }\n\n const keyData = await window.crypto.subtle.exportKey('raw', key)\n\n SessionStorage.set(historySessionStorageKeys.key, Array.from(new Uint8Array(keyData)))\n}\n\nconst getOrCreateKey = async (key: CryptoKey | null) => {\n if (key) {\n return key\n }\n\n const newKey = await createKey()\n\n if (!newKey) {\n return null\n }\n\n await saveKey(newKey)\n\n return newKey\n}\n\nconst getKeyFromSessionStorage = async (): Promise<CryptoKey | null> => {\n const stringKey = SessionStorage.get(historySessionStorageKeys.key)\n\n if (!stringKey) {\n return null\n }\n\n const key = await window.crypto.subtle.importKey(\n 'raw',\n new Uint8Array(stringKey),\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt'],\n )\n\n return key\n}\n", "import { cloneDeep } from 'lodash-es'\nimport { objectsAreEqual } from './objectUtils'\nimport { page as currentPage } from './page'\nimport { Response } from './response'\nimport { timeToMs } from './time'\nimport {\n ActiveVisit,\n CacheForOption,\n InFlightPrefetch,\n InternalActiveVisit,\n Page,\n PrefetchedResponse,\n PrefetchOptions,\n PrefetchRemovalTimer,\n} from './types'\n\nclass PrefetchedRequests {\n protected cached: PrefetchedResponse[] = []\n protected inFlightRequests: InFlightPrefetch[] = []\n protected removalTimers: PrefetchRemovalTimer[] = []\n protected currentUseId: string | null = null\n\n public add(\n params: ActiveVisit,\n sendFunc: (params: InternalActiveVisit) => void,\n { cacheFor, cacheTags }: PrefetchOptions,\n ) {\n const inFlight = this.findInFlight(params)\n\n if (inFlight) {\n return Promise.resolve()\n }\n\n const existing = this.findCached(params)\n\n if (!params.fresh && existing && existing.staleTimestamp > Date.now()) {\n return Promise.resolve()\n }\n\n const [stale, prefetchExpiresIn] = this.extractStaleValues(cacheFor)\n\n const promise = new Promise<Response>((resolve, reject) => {\n sendFunc({\n ...params,\n onCancel: () => {\n this.remove(params)\n params.onCancel()\n reject()\n },\n onError: (error) => {\n this.remove(params)\n params.onError(error)\n reject()\n },\n onPrefetching(visitParams) {\n params.onPrefetching(visitParams)\n },\n onPrefetched(response, visit) {\n params.onPrefetched(response, visit)\n },\n onPrefetchResponse(response) {\n resolve(response)\n },\n onPrefetchError(error) {\n prefetchedRequests.removeFromInFlight(params)\n reject(error)\n },\n })\n }).then((response) => {\n this.remove(params)\n\n const pageResponse = response.getPageResponse()\n\n currentPage.mergeOncePropsIntoResponse(pageResponse)\n\n this.cached.push({\n params: { ...params },\n staleTimestamp: Date.now() + stale,\n expiresAt: Date.now() + prefetchExpiresIn,\n response: promise,\n singleUse: prefetchExpiresIn === 0,\n timestamp: Date.now(),\n inFlight: false,\n tags: Array.isArray(cacheTags) ? cacheTags : [cacheTags],\n })\n\n const oncePropExpiresIn = this.getShortestOncePropTtl(pageResponse)\n this.scheduleForRemoval(\n params,\n oncePropExpiresIn ? Math.min(prefetchExpiresIn, oncePropExpiresIn) : prefetchExpiresIn,\n )\n this.removeFromInFlight(params)\n\n response.handlePrefetch()\n\n return response\n })\n\n this.inFlightRequests.push({\n params: { ...params },\n response: promise,\n staleTimestamp: null,\n inFlight: true,\n })\n\n return promise\n }\n\n public removeAll(): void {\n this.cached = []\n this.removalTimers.forEach((removalTimer) => {\n clearTimeout(removalTimer.timer)\n })\n this.removalTimers = []\n }\n\n public removeByTags(tags: string[]): void {\n this.cached = this.cached.filter((prefetched) => {\n return !prefetched.tags.some((tag) => tags.includes(tag))\n })\n }\n\n public remove(params: ActiveVisit): void {\n this.cached = this.cached.filter((prefetched) => {\n return !this.paramsAreEqual(prefetched.params, params)\n })\n\n this.clearTimer(params)\n }\n\n protected removeFromInFlight(params: ActiveVisit): void {\n this.inFlightRequests = this.inFlightRequests.filter((prefetching) => {\n return !this.paramsAreEqual(prefetching.params, params)\n })\n }\n\n protected extractStaleValues(cacheFor: PrefetchOptions['cacheFor']): [number, number] {\n const [stale, expires] = this.cacheForToStaleAndExpires(cacheFor)\n\n return [timeToMs(stale), timeToMs(expires)]\n }\n\n protected cacheForToStaleAndExpires(cacheFor: PrefetchOptions['cacheFor']): [CacheForOption, CacheForOption] {\n if (!Array.isArray(cacheFor)) {\n return [cacheFor, cacheFor]\n }\n\n switch (cacheFor.length) {\n case 0:\n return [0, 0]\n case 1:\n return [cacheFor[0], cacheFor[0]]\n default:\n return [cacheFor[0], cacheFor[1]]\n }\n }\n\n protected clearTimer(params: ActiveVisit) {\n const timer = this.removalTimers.find((removalTimer) => {\n return this.paramsAreEqual(removalTimer.params, params)\n })\n\n if (timer) {\n clearTimeout(timer.timer)\n this.removalTimers = this.removalTimers.filter((removalTimer) => removalTimer !== timer)\n }\n }\n\n protected scheduleForRemoval(params: ActiveVisit, expiresIn: number) {\n if (typeof window === 'undefined') {\n return\n }\n\n this.clearTimer(params)\n\n if (expiresIn > 0) {\n const timer = window.setTimeout(() => this.remove(params), expiresIn)\n\n this.removalTimers.push({\n params,\n timer,\n })\n }\n }\n\n public get(params: ActiveVisit): InFlightPrefetch | PrefetchedResponse | null {\n return this.findCached(params) || this.findInFlight(params)\n }\n\n public use(prefetched: PrefetchedResponse | InFlightPrefetch, params: ActiveVisit) {\n const id = `${params.url.pathname}-${Date.now()}-${Math.random().toString(36).substring(7)}`\n\n this.currentUseId = id\n\n return prefetched.response.then((response) => {\n if (this.currentUseId !== id) {\n // They've since gone on to `use` a different request,\n // so we should ignore this one\n return\n }\n\n response.mergeParams({ ...params, onPrefetched: () => {} })\n\n // If this was a one-time cache, remove it\n // (generally a prefetch=\"click\" request with no specified cache value)\n this.removeSingleUseItems(params)\n\n return response.handle()\n })\n }\n\n protected removeSingleUseItems(params: ActiveVisit) {\n this.cached = this.cached.filter((prefetched) => {\n if (!this.paramsAreEqual(prefetched.params, params)) {\n return true\n }\n\n return !prefetched.singleUse\n })\n }\n\n public findCached(params: ActiveVisit): PrefetchedResponse | null {\n return (\n this.cached.find((prefetched) => {\n return this.paramsAreEqual(prefetched.params, params)\n }) || null\n )\n }\n\n public findInFlight(params: ActiveVisit): InFlightPrefetch | null {\n return (\n this.inFlightRequests.find((prefetched) => {\n return this.paramsAreEqual(prefetched.params, params)\n }) || null\n )\n }\n\n protected withoutPurposePrefetchHeader(params: ActiveVisit): ActiveVisit {\n const newParams = cloneDeep(params)\n if (newParams.headers['Purpose'] === 'prefetch') {\n delete newParams.headers['Purpose']\n }\n return newParams\n }\n\n protected paramsAreEqual(params1: ActiveVisit, params2: ActiveVisit): boolean {\n return objectsAreEqual<ActiveVisit>(\n this.withoutPurposePrefetchHeader(params1),\n this.withoutPurposePrefetchHeader(params2),\n [\n 'showProgress',\n 'replace',\n 'prefetch',\n 'preserveScroll',\n 'preserveState',\n 'onBefore',\n 'onBeforeUpdate',\n 'onStart',\n 'onProgress',\n 'onFinish',\n 'onCancel',\n 'onSuccess',\n 'onError',\n 'onFlash',\n 'onPrefetched',\n 'onCancelToken',\n 'onPrefetching',\n 'async',\n 'viewTransition',\n ],\n )\n }\n\n public updateCachedOncePropsFromCurrentPage(): void {\n this.cached.forEach((prefetched) => {\n prefetched.response.then((response) => {\n const pageResponse = response.getPageResponse()\n\n currentPage.mergeOncePropsIntoResponse(pageResponse, { force: true })\n\n for (const [group, deferredProps] of Object.entries(pageResponse.deferredProps ?? {})) {\n const remaining = deferredProps.filter((prop) => pageResponse.props[prop] === undefined)\n\n if (remaining.length > 0) {\n pageResponse.deferredProps![group] = remaining\n } else {\n delete pageResponse.deferredProps![group]\n }\n }\n\n const oncePropExpiresIn = this.getShortestOncePropTtl(pageResponse)\n\n if (oncePropExpiresIn === null) {\n return\n }\n\n const prefetchExpiresIn = prefetched.expiresAt - Date.now()\n const expiresIn = Math.min(prefetchExpiresIn, oncePropExpiresIn)\n\n if (expiresIn > 0) {\n this.scheduleForRemoval(prefetched.params, expiresIn)\n } else {\n this.remove(prefetched.params)\n }\n })\n })\n }\n\n protected getShortestOncePropTtl(page: Page): number | null {\n const expiryTimestamps = Object.values(page.onceProps ?? {})\n .map((onceProp) => onceProp.expiresAt)\n .filter((expiresAt): expiresAt is number => !!expiresAt)\n\n if (expiryTimestamps.length === 0) {\n return null\n }\n\n return Math.min(...expiryTimestamps) - Date.now()\n }\n}\n\nexport const prefetchedRequests = new PrefetchedRequests()\n", "export const objectsAreEqual = <T extends Record<string, any>>(\n obj1: T,\n obj2: T,\n excludeKeys: {\n [K in keyof T]: K\n }[keyof T][],\n): boolean => {\n if (obj1 === obj2) {\n return true\n }\n\n // Check keys in obj1\n for (const key in obj1) {\n if (excludeKeys.includes(key)) {\n continue\n }\n\n if (obj1[key] === obj2[key]) {\n continue\n }\n\n if (!compareValues(obj1[key], obj2[key])) {\n return false\n }\n }\n\n // Check keys that exist in obj2 but not in obj1\n for (const key in obj2) {\n if (excludeKeys.includes(key)) {\n continue\n }\n\n if (!(key in obj1)) {\n return false\n }\n }\n\n return true\n}\n\nconst compareValues = (value1: any, value2: any): boolean => {\n switch (typeof value1) {\n case 'object':\n return objectsAreEqual(value1, value2, [])\n case 'function':\n return value1.toString() === value2.toString()\n default:\n return value1 === value2\n }\n}\n", "import { CacheForOption, TimeUnit } from './types'\n\nconst conversionMap: Record<TimeUnit, number> = {\n ms: 1,\n s: 1000,\n m: 1000 * 60,\n h: 1000 * 60 * 60,\n d: 1000 * 60 * 60 * 24,\n}\n\nexport const timeToMs = (time: CacheForOption): number => {\n if (typeof time === 'number') {\n return time\n }\n\n for (const [unit, conversion] of Object.entries(conversionMap)) {\n if (time.endsWith(unit)) {\n return parseFloat(time) * conversion\n }\n }\n\n return parseInt(time)\n}\n", "import { history } from './history'\nimport { ScrollRegion } from './types'\n\nexport class Scroll {\n public static save(): void {\n history.saveScrollPositions(this.getScrollRegions())\n }\n\n public static getScrollRegions(): ScrollRegion[] {\n return Array.from(this.regions()).map((region) => ({\n top: region.scrollTop,\n left: region.scrollLeft,\n }))\n }\n\n protected static regions(): NodeListOf<Element> {\n return document.querySelectorAll('[scroll-region]')\n }\n\n public static reset(): void {\n const anchorHash = typeof window !== 'undefined' ? window.location.hash : null\n\n if (!anchorHash) {\n // Reset the document scroll position if there is no hash.\n window.scrollTo(0, 0)\n }\n\n this.regions().forEach((region) => {\n if (typeof region.scrollTo === 'function') {\n region.scrollTo(0, 0)\n } else {\n region.scrollTop = 0\n region.scrollLeft = 0\n }\n })\n\n this.save()\n this.scrollToAnchor()\n }\n\n public static scrollToAnchor(): void {\n const anchorHash = typeof window !== 'undefined' ? window.location.hash : null\n\n if (anchorHash) {\n // We're using a setTimeout() here as a workaround for a bug in the React adapter where the\n // rendering isn't completing fast enough, causing the anchor link to not be scrolled to.\n setTimeout(() => {\n const anchorElement = document.getElementById(anchorHash.slice(1))\n anchorElement ? anchorElement.scrollIntoView() : window.scrollTo(0, 0)\n })\n }\n }\n\n public static restore(scrollRegions: ScrollRegion[]): void {\n if (typeof window === 'undefined') {\n return\n }\n\n window.requestAnimationFrame(() => {\n this.restoreDocument()\n this.restoreScrollRegions(scrollRegions)\n })\n }\n\n public static restoreScrollRegions(scrollRegions: ScrollRegion[]): void {\n if (typeof window === 'undefined') {\n return\n }\n\n this.regions().forEach((region: Element, index: number) => {\n const scrollPosition = scrollRegions[index]\n\n if (!scrollPosition) {\n return\n }\n\n if (typeof region.scrollTo === 'function') {\n region.scrollTo(scrollPosition.left, scrollPosition.top)\n } else {\n region.scrollTop = scrollPosition.top\n region.scrollLeft = scrollPosition.left\n }\n })\n }\n\n public static restoreDocument(): void {\n const scrollPosition = history.getDocumentScrollPosition()\n window.scrollTo(scrollPosition.left, scrollPosition.top)\n }\n\n public static onScroll(event: Event): void {\n const target = event.target as Element\n\n if (typeof target.hasAttribute === 'function' && target.hasAttribute('scroll-region')) {\n this.save()\n }\n }\n\n public static onWindowScroll(): void {\n history.saveDocumentScrollPosition({\n top: window.scrollY,\n left: window.scrollX,\n })\n }\n}\n", "import * as qs from 'qs'\nimport { config } from './config'\nimport { hasFiles } from './files'\nimport { isFormData, objectToFormData } from './formData'\nimport type {\n FormDataConvertible,\n Method,\n QueryStringArrayFormatOption,\n RequestPayload,\n UrlMethodPair,\n VisitOptions,\n} from './types'\n\nexport function hrefToUrl(href: string | URL): URL {\n return new URL(href.toString(), typeof window === 'undefined' ? undefined : window.location.toString())\n}\n\nexport const transformUrlAndData = (\n href: string | URL,\n data: RequestPayload,\n method: Method,\n forceFormData: VisitOptions['forceFormData'],\n queryStringArrayFormat: VisitOptions['queryStringArrayFormat'],\n): [URL, RequestPayload] => {\n let url = typeof href === 'string' ? hrefToUrl(href) : href\n\n if ((hasFiles(data) || forceFormData) && !isFormData(data)) {\n if (config.get('form.forceIndicesArrayFormatInFormData')) {\n queryStringArrayFormat = 'indices'\n }\n\n data = objectToFormData(data, new FormData(), null, queryStringArrayFormat)\n }\n\n if (isFormData(data)) {\n return [url, data]\n }\n\n const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat)\n\n return [hrefToUrl(_href), _data]\n}\n\ntype MergeDataIntoQueryStringDataReturnType<T extends RequestPayload> =\n T extends Record<string, FormDataConvertible> ? Record<string, FormDataConvertible> : RequestPayload\n\nexport function mergeDataIntoQueryString<T extends RequestPayload>(\n method: Method,\n href: URL | string,\n data: T,\n qsArrayFormat: QueryStringArrayFormatOption = 'brackets',\n): [string, MergeDataIntoQueryStringDataReturnType<T>] {\n const hasDataForQueryString = method === 'get' && !isFormData(data) && Object.keys(data).length > 0\n const hasHost = urlHasProtocol(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/') || href.toString() === ''\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasRelativePathWithDotPrefix = /^[.]{1,2}([/]|$)/.test(href.toString())\n const hasSearch = href.toString().includes('?') || hasDataForQueryString\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), typeof window === 'undefined' ? 'http://localhost' : window.location.toString())\n\n if (hasDataForQueryString) {\n const parseOptions = { ignoreQueryPrefix: true, arrayLimit: -1 }\n url.search = qs.stringify(\n { ...qs.parse(url.search, parseOptions), ...data },\n {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n },\n )\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(hasRelativePathWithDotPrefix ? 0 : 1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n (hasDataForQueryString ? {} : data) as MergeDataIntoQueryStringDataReturnType<T>,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n\nexport const setHashIfSameUrl = (originUrl: URL | Location, destinationUrl: URL | Location) => {\n if (originUrl.hash && !destinationUrl.hash && urlWithoutHash(originUrl).href === destinationUrl.href) {\n destinationUrl.hash = originUrl.hash\n }\n}\n\nexport const isSameUrlWithoutHash = (url1: URL | Location, url2: URL | Location): boolean => {\n return urlWithoutHash(url1).href === urlWithoutHash(url2).href\n}\n\nexport function isUrlMethodPair(href: unknown): href is UrlMethodPair {\n return href !== null && typeof href === 'object' && href !== undefined && 'url' in href && 'method' in href\n}\n\nexport function urlHasProtocol(url: string): boolean {\n return /^([a-z][a-z0-9+.-]*:)?\\/\\/[^/]/i.test(url)\n}\n\nexport function urlToString(url: URL | string, absolute: boolean): string {\n const urlObj = typeof url === 'string' ? hrefToUrl(url) : url\n\n return absolute\n ? `${urlObj.protocol}//${urlObj.host}${urlObj.pathname}${urlObj.search}${urlObj.hash}`\n : `${urlObj.pathname}${urlObj.search}${urlObj.hash}`\n}\n", "import { FormDataConvertible, RequestPayload } from './types'\n\nexport const isFile = (value: unknown): boolean =>\n (typeof File !== 'undefined' && value instanceof File) ||\n value instanceof Blob ||\n (typeof FileList !== 'undefined' && value instanceof FileList && value.length > 0)\n\nexport function hasFiles(data: RequestPayload | FormDataConvertible): boolean {\n return (\n isFile(data) ||\n (data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value))) ||\n (typeof data === 'object' && data !== null && Object.values(data).some((value) => hasFiles(value)))\n )\n}\n", "import type { FormDataConvertible, QueryStringArrayFormatOption } from './types'\n\nexport const isFormData = (value: any): value is FormData => value instanceof FormData\n\nexport function objectToFormData(\n source: Record<string, FormDataConvertible>,\n form: FormData = new FormData(),\n parentKey: string | null = null,\n queryStringArrayFormat: QueryStringArrayFormatOption = 'brackets',\n): FormData {\n source = source || {}\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n append(form, composeKey(parentKey, key, 'indices'), source[key], queryStringArrayFormat)\n }\n }\n\n return form\n}\n\nfunction composeKey(parent: string | null, key: string, format: QueryStringArrayFormatOption): string {\n if (!parent) {\n return key\n }\n\n return format === 'brackets' ? `${parent}[]` : `${parent}[${key}]`\n}\n\nfunction append(form: FormData, key: string, value: FormDataConvertible, format: QueryStringArrayFormatOption): void {\n if (Array.isArray(value)) {\n return Array.from(value.keys()).forEach((index) =>\n append(form, composeKey(key, index.toString(), format), value[index], format),\n )\n } else if (value instanceof Date) {\n return form.append(key, value.toISOString())\n } else if (value instanceof File) {\n return form.append(key, value, value.name)\n } else if (value instanceof Blob) {\n return form.append(key, value)\n } else if (typeof value === 'boolean') {\n return form.append(key, value ? '1' : '0')\n } else if (typeof value === 'string') {\n return form.append(key, value)\n } else if (typeof value === 'number') {\n return form.append(key, `${value}`)\n } else if (value === null || value === undefined) {\n return form.append(key, '')\n }\n\n objectToFormData(value, form, key, format)\n}\n", "import { eventHandler } from './eventHandler'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { prefetchedRequests } from './prefetched'\nimport { Scroll } from './scroll'\nimport { Component, FlashData, Page, PageEvent, PageHandler, PageResolver, RouterInitParams, Visit } from './types'\nimport { hrefToUrl, isSameUrlWithoutHash } from './url'\n\nclass CurrentPage {\n protected page!: Page\n protected swapComponent!: PageHandler<any>\n protected resolveComponent!: PageResolver\n protected onFlashCallback?: (flash: Page['flash']) => void\n protected componentId = {}\n protected listeners: {\n event: PageEvent\n callback: VoidFunction\n }[] = []\n protected isFirstPageLoad = true\n protected cleared = false\n protected pendingDeferredProps: Pick<Page, 'deferredProps' | 'url' | 'component'> | null = null\n protected historyQuotaExceeded = false\n\n public init<ComponentType = Component>({\n initialPage,\n swapComponent,\n resolveComponent,\n onFlash,\n }: RouterInitParams<ComponentType>) {\n this.page = { ...initialPage, flash: initialPage.flash ?? {} }\n this.swapComponent = swapComponent\n this.resolveComponent = resolveComponent\n this.onFlashCallback = onFlash\n\n eventHandler.on('historyQuotaExceeded', () => {\n this.historyQuotaExceeded = true\n })\n\n return this\n }\n\n public set(\n page: Page,\n {\n replace = false,\n preserveScroll = false,\n preserveState = false,\n viewTransition = false,\n }: {\n replace?: boolean\n preserveScroll?: boolean\n preserveState?: boolean\n viewTransition?: Visit['viewTransition']\n } = {},\n ): Promise<void> {\n if (Object.keys(page.deferredProps || {}).length) {\n this.pendingDeferredProps = {\n deferredProps: page.deferredProps,\n component: page.component,\n url: page.url,\n }\n }\n\n this.componentId = {}\n\n const componentId = this.componentId\n\n if (page.clearHistory) {\n history.clear()\n }\n\n return this.resolve(page.component).then((component) => {\n if (componentId !== this.componentId) {\n // Component has changed since we started resolving this component, bail\n return\n }\n\n page.rememberedState ??= {}\n\n const isServer = typeof window === 'undefined'\n const location = !isServer ? window.location : new URL(page.url)\n const scrollRegions = !isServer && preserveScroll ? Scroll.getScrollRegions() : []\n replace = replace || isSameUrlWithoutHash(hrefToUrl(page.url), location)\n\n // Clear flash data from the page object, we don't want it when navigating back/forward...\n const pageForHistory = { ...page, flash: {} }\n\n return new Promise<void>((resolve) =>\n replace ? history.replaceState(pageForHistory, resolve) : history.pushState(pageForHistory, resolve),\n ).then(() => {\n const isNewComponent = !this.isTheSame(page)\n\n if (!isNewComponent && Object.keys(page.props.errors || {}).length > 0) {\n // Don't use view transition if the page stays the same and there are (new) errors...\n viewTransition = false\n }\n\n this.page = page\n this.cleared = false\n\n if (this.hasOnceProps()) {\n prefetchedRequests.updateCachedOncePropsFromCurrentPage()\n }\n\n if (isNewComponent) {\n this.fireEventsFor('newComponent')\n }\n\n if (this.isFirstPageLoad) {\n this.fireEventsFor('firstLoad')\n }\n\n this.isFirstPageLoad = false\n\n if (this.historyQuotaExceeded) {\n // If we exceeded the history quota, don't attempt to swap the\n // component as we're performing a full page reload instead.\n this.historyQuotaExceeded = false\n return\n }\n\n return this.swap({\n component,\n page,\n preserveState,\n viewTransition,\n }).then(() => {\n if (preserveScroll) {\n // Scroll regions must be explicitly restored since the DOM elements are destroyed\n // and recreated during the component 'swap'. Document scroll is naturally\n // preserved as the document element itself persists across navigations.\n window.requestAnimationFrame(() => Scroll.restoreScrollRegions(scrollRegions))\n } else {\n Scroll.reset()\n }\n\n if (\n this.pendingDeferredProps &&\n this.pendingDeferredProps.component === page.component &&\n this.pendingDeferredProps.url === page.url\n ) {\n eventHandler.fireInternalEvent('loadDeferredProps', this.pendingDeferredProps.deferredProps)\n }\n\n this.pendingDeferredProps = null\n\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n })\n })\n }\n\n public setQuietly(\n page: Page,\n {\n preserveState = false,\n }: {\n preserveState?: boolean\n } = {},\n ) {\n return this.resolve(page.component).then((component) => {\n this.page = page\n this.cleared = false\n history.setCurrent(page)\n return this.swap({ component, page, preserveState, viewTransition: false })\n })\n }\n\n public clear(): void {\n this.cleared = true\n }\n\n public isCleared(): boolean {\n return this.cleared\n }\n\n public get(): Page {\n return this.page\n }\n\n public getWithoutFlashData(): Page {\n return { ...this.page, flash: {} }\n }\n\n public hasOnceProps(): boolean {\n return Object.keys(this.page.onceProps ?? {}).length > 0\n }\n\n public merge(data: Partial<Page>): void {\n this.page = { ...this.page, ...data }\n }\n\n public setFlash(flash: FlashData): void {\n this.page = { ...this.page, flash }\n this.onFlashCallback?.(flash)\n }\n\n public setUrlHash(hash: string): void {\n if (!this.page.url.includes(hash)) {\n this.page.url += hash\n }\n }\n\n public remember(data: Page['rememberedState']): void {\n this.page.rememberedState = data\n }\n\n public swap({\n component,\n page,\n preserveState,\n viewTransition,\n }: {\n component: Component\n page: Page\n preserveState: boolean\n viewTransition: Visit['viewTransition']\n }): Promise<unknown> {\n const doSwap = () => this.swapComponent({ component, page, preserveState })\n\n if (!viewTransition || !document?.startViewTransition) {\n return doSwap()\n }\n\n const viewTransitionCallback = typeof viewTransition === 'boolean' ? () => null : viewTransition\n\n return new Promise((resolve) => {\n const transitionResult = document.startViewTransition(() => doSwap().then(resolve))\n\n viewTransitionCallback(transitionResult)\n })\n }\n\n public resolve(component: string): Promise<Component> {\n return Promise.resolve(this.resolveComponent(component))\n }\n\n public isTheSame(page: Page): boolean {\n return this.page.component === page.component\n }\n\n public on(event: PageEvent, callback: VoidFunction): VoidFunction {\n this.listeners.push({ event, callback })\n\n return () => {\n this.listeners = this.listeners.filter((listener) => listener.event !== event && listener.callback !== callback)\n }\n }\n\n public fireEventsFor(event: PageEvent): void {\n this.listeners.filter((listener) => listener.event === event).forEach((listener) => listener.callback())\n }\n\n public mergeOncePropsIntoResponse(response: Page, { force = false }: { force?: boolean } = {}): void {\n Object.entries(response.onceProps ?? {}).forEach(([key, onceProp]) => {\n const existingOnceProp = this.page.onceProps?.[key]\n\n if (existingOnceProp === undefined) {\n return\n }\n\n if (force || response.props[onceProp.prop] === undefined) {\n response.props[onceProp.prop] = this.page.props[existingOnceProp.prop]\n response.onceProps![key].expiresAt = existingOnceProp.expiresAt\n }\n })\n }\n}\n\nexport const page = new CurrentPage()\n", "export default class Queue<T> {\n protected items: (() => T)[] = []\n protected processingPromise: Promise<void> | null = null\n\n public add(item: () => T) {\n this.items.push(item)\n return this.process()\n }\n\n public process() {\n this.processingPromise ??= this.processNext().finally(() => {\n this.processingPromise = null\n })\n\n return this.processingPromise\n }\n\n protected processNext(): Promise<void> {\n const next = this.items.shift()\n\n if (next) {\n return Promise.resolve(next()).then(() => this.processNext())\n }\n\n return Promise.resolve()\n }\n}\n", "import debounce from './debounce'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { router } from './index'\nimport { page as currentPage } from './page'\nimport { Scroll } from './scroll'\nimport { GlobalEvent, GlobalEventNames, GlobalEventResult, InternalEvent } from './types'\nimport { hrefToUrl } from './url'\n\nclass EventHandler {\n protected internalListeners: {\n event: InternalEvent\n listener: (...args: any[]) => void\n }[] = []\n\n public init() {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', this.handlePopstateEvent.bind(this))\n window.addEventListener('scroll', debounce(Scroll.onWindowScroll.bind(Scroll), 100), true)\n }\n\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', debounce(Scroll.onScroll.bind(Scroll), 100), true)\n }\n }\n\n public onGlobalEvent<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n const listener = ((event: GlobalEvent<TEventName>) => {\n const response = callback(event)\n\n if (event.cancelable && !event.defaultPrevented && response === false) {\n event.preventDefault()\n }\n }) as EventListener\n\n return this.registerListener(`inertia:${type}`, listener)\n }\n\n public on(event: InternalEvent, callback: (...args: any[]) => void): VoidFunction {\n this.internalListeners.push({ event, listener: callback })\n\n return () => {\n this.internalListeners = this.internalListeners.filter((listener) => listener.listener !== callback)\n }\n }\n\n public onMissingHistoryItem() {\n // At this point, the user has probably cleared the state\n // Mark the current page as cleared so that we don't try to write anything to it.\n currentPage.clear()\n // Fire an event so that that any listeners can handle this situation\n this.fireInternalEvent('missingHistoryItem')\n }\n\n public fireInternalEvent(event: InternalEvent, ...args: any[]): void {\n this.internalListeners\n .filter((listener) => listener.event === event)\n .forEach((listener) => listener.listener(...args))\n }\n\n protected registerListener(type: string, listener: EventListener): VoidFunction {\n document.addEventListener(type, listener)\n\n return () => document.removeEventListener(type, listener)\n }\n\n protected handlePopstateEvent(event: PopStateEvent): void {\n const state = event.state || null\n\n if (state === null) {\n const url = hrefToUrl(currentPage.get().url)\n url.hash = window.location.hash\n\n history.replaceState({ ...currentPage.getWithoutFlashData(), url: url.href })\n Scroll.reset()\n\n return\n }\n\n if (!history.isValidState(state)) {\n return this.onMissingHistoryItem()\n }\n\n history\n .decrypt(state.page)\n .then((data) => {\n if (currentPage.get().version !== data.version) {\n this.onMissingHistoryItem()\n return\n }\n\n // Cancel ongoing requests\n router.cancelAll()\n\n currentPage.setQuietly(data, { preserveState: false }).then(() => {\n Scroll.restore(history.getScrollRegions())\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n this.onMissingHistoryItem()\n })\n }\n}\n\nexport const eventHandler = new EventHandler()\n", "class NavigationType {\n protected type: NavigationTimingType\n\n public constructor() {\n this.type = this.resolveType()\n }\n\n protected resolveType(): NavigationTimingType {\n if (typeof window === 'undefined') {\n return 'navigate'\n }\n\n if (\n window.performance &&\n window.performance.getEntriesByType &&\n window.performance.getEntriesByType('navigation').length > 0\n ) {\n return (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n }\n\n return 'navigate'\n }\n\n public get(): NavigationTimingType {\n return this.type\n }\n\n public isBackForward(): boolean {\n return this.type === 'back_forward'\n }\n\n public isReload(): boolean {\n return this.type === 'reload'\n }\n}\n\nexport const navigationType = new NavigationType()\n", "import { eventHandler } from './eventHandler'\nimport { fireFlashEvent, fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { navigationType } from './navigationType'\nimport { page as currentPage } from './page'\nimport { Scroll } from './scroll'\nimport { SessionStorage } from './sessionStorage'\nimport { LocationVisit, Page } from './types'\n\nexport class InitialVisit {\n public static handle(): void {\n this.clearRememberedStateOnReload()\n\n const scenarios = [this.handleBackForward, this.handleLocation, this.handleDefault]\n\n scenarios.find((handler) => handler.bind(this)())\n }\n\n protected static clearRememberedStateOnReload(): void {\n if (navigationType.isReload()) {\n history.deleteState(history.rememberedState)\n history.clearInitialState(history.rememberedState)\n }\n }\n\n protected static handleBackForward(): boolean {\n if (!navigationType.isBackForward() || !history.browserHasHistoryEntry()) {\n return false\n }\n\n const scrollRegions = history.getScrollRegions()\n\n history\n .decrypt()\n .then((data) => {\n currentPage.set(data, { preserveScroll: true, preserveState: true }).then(() => {\n Scroll.restore(scrollRegions)\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n eventHandler.onMissingHistoryItem()\n })\n\n return true\n }\n\n /**\n * @link https://inertiajs.com/redirects#external-redirects\n */\n protected static handleLocation(): boolean {\n if (!SessionStorage.exists(SessionStorage.locationVisitKey)) {\n return false\n }\n\n const locationVisit: LocationVisit = SessionStorage.get(SessionStorage.locationVisitKey) || {}\n\n SessionStorage.remove(SessionStorage.locationVisitKey)\n\n if (typeof window !== 'undefined') {\n currentPage.setUrlHash(window.location.hash)\n }\n\n history\n .decrypt(currentPage.get())\n .then(() => {\n const rememberedState = history.getState<Page['rememberedState']>(history.rememberedState, {})\n const scrollRegions = history.getScrollRegions()\n currentPage.remember(rememberedState)\n\n currentPage\n .set(currentPage.get(), {\n preserveScroll: locationVisit.preserveScroll,\n preserveState: true,\n })\n .then(() => {\n if (locationVisit.preserveScroll) {\n Scroll.restore(scrollRegions)\n }\n\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n eventHandler.onMissingHistoryItem()\n })\n\n return true\n }\n\n protected static handleDefault(): void {\n if (typeof window !== 'undefined') {\n currentPage.setUrlHash(window.location.hash)\n }\n\n currentPage.set(currentPage.get(), { preserveScroll: true, preserveState: true }).then(() => {\n if (navigationType.isReload()) {\n Scroll.restore(history.getScrollRegions())\n } else {\n Scroll.scrollToAnchor()\n }\n\n const page = currentPage.get()\n\n fireNavigateEvent(page)\n\n const flash = page.flash\n\n if (Object.keys(flash).length > 0) {\n fireFlashEvent(flash)\n }\n })\n }\n}\n", "import { PollOptions } from './types'\n\nexport class Poll {\n protected id: number | null = null\n protected throttle = false\n protected keepAlive = false\n protected cb: VoidFunction\n protected interval: number\n protected cbCount = 0\n\n constructor(interval: number, cb: VoidFunction, options: PollOptions) {\n this.keepAlive = options.keepAlive ?? false\n\n this.cb = cb\n this.interval = interval\n\n if (options.autoStart ?? true) {\n this.start()\n }\n }\n\n public stop() {\n // console.log('stopping...', this.id)\n if (this.id) {\n // console.log('clearing interval...')\n clearInterval(this.id)\n }\n }\n\n public start() {\n if (typeof window === 'undefined') {\n return\n }\n\n this.stop()\n\n this.id = window.setInterval(() => {\n if (!this.throttle || this.cbCount % 10 === 0) {\n this.cb()\n }\n\n if (this.throttle) {\n this.cbCount++\n }\n }, this.interval)\n }\n\n public isInBackground(hidden: boolean) {\n this.throttle = this.keepAlive ? false : hidden\n\n if (this.throttle) {\n this.cbCount = 0\n }\n }\n}\n", "import { Poll } from './poll'\nimport { PollOptions } from './types'\n\nclass Polls {\n protected polls: Poll[] = []\n\n constructor() {\n this.setupVisibilityListener()\n }\n\n public add(\n interval: number,\n cb: VoidFunction,\n options: PollOptions,\n ): {\n stop: VoidFunction\n start: VoidFunction\n } {\n const poll = new Poll(interval, cb, options)\n\n this.polls.push(poll)\n\n return {\n stop: () => poll.stop(),\n start: () => poll.start(),\n }\n }\n\n public clear() {\n this.polls.forEach((poll) => poll.stop())\n\n this.polls = []\n }\n\n protected setupVisibilityListener() {\n if (typeof document === 'undefined') {\n return\n }\n\n document.addEventListener(\n 'visibilitychange',\n () => {\n this.polls.forEach((poll) => poll.isInBackground(document.hidden))\n },\n false,\n )\n }\n}\n\nexport const polls = new Polls()\n", "import { default as axios, AxiosProgressEvent, AxiosRequestConfig } from 'axios'\nimport { fireExceptionEvent, fireFinishEvent, firePrefetchingEvent, fireProgressEvent, fireStartEvent } from './events'\nimport { page as currentPage } from './page'\nimport { RequestParams } from './requestParams'\nimport { Response } from './response'\nimport { ActiveVisit, Page } from './types'\nimport { urlWithoutHash } from './url'\n\nexport class Request {\n protected response!: Response\n protected cancelToken!: AbortController\n protected requestParams: RequestParams\n protected requestHasFinished = false\n\n constructor(\n params: ActiveVisit,\n protected page: Page,\n ) {\n this.requestParams = RequestParams.create(params)\n this.cancelToken = new AbortController()\n }\n\n public static create(params: ActiveVisit, page: Page): Request {\n return new Request(params, page)\n }\n\n public async send() {\n this.requestParams.onCancelToken(() => this.cancel({ cancelled: true }))\n\n fireStartEvent(this.requestParams.all())\n this.requestParams.onStart()\n\n if (this.requestParams.all().prefetch) {\n this.requestParams.onPrefetching()\n firePrefetchingEvent(this.requestParams.all())\n }\n\n // We capture this up here because the response\n // will clear the prefetch flag so it can use it\n // as a regular response once the prefetch is done\n const originallyPrefetch = this.requestParams.all().prefetch\n\n return axios({\n method: this.requestParams.all().method,\n url: urlWithoutHash(this.requestParams.all().url).href,\n data: this.requestParams.data(),\n params: this.requestParams.queryParams(),\n signal: this.cancelToken.signal,\n headers: this.getHeaders(),\n onUploadProgress: this.onProgress.bind(this),\n // Why text? This allows us to delay JSON.parse until we're ready to use the response,\n // helps with performance particularly on large responses + history encryption\n responseType: 'text',\n })\n .then((response) => {\n this.response = Response.create(this.requestParams, response, this.page)\n\n return this.response.handle()\n })\n .catch((error) => {\n if (error?.response) {\n this.response = Response.create(this.requestParams, error.response, this.page)\n\n return this.response.handle()\n }\n\n return Promise.reject(error)\n })\n .catch((error) => {\n if (axios.isCancel(error)) {\n return\n }\n\n if (fireExceptionEvent(error)) {\n if (originallyPrefetch) {\n this.requestParams.onPrefetchError(error)\n }\n\n return Promise.reject(error)\n }\n })\n .finally(() => {\n this.finish()\n\n if (originallyPrefetch && this.response) {\n this.requestParams.onPrefetchResponse(this.response)\n }\n })\n }\n\n protected finish(): void {\n if (this.requestParams.wasCancelledAtAll()) {\n return\n }\n\n this.requestParams.markAsFinished()\n this.fireFinishEvents()\n }\n\n protected fireFinishEvents(): void {\n if (this.requestHasFinished) {\n // This could be called from multiple places, don't let it re-fire\n return\n }\n\n this.requestHasFinished = true\n\n fireFinishEvent(this.requestParams.all())\n this.requestParams.onFinish()\n }\n\n public cancel({ cancelled = false, interrupted = false }: { cancelled?: boolean; interrupted?: boolean }): void {\n if (this.requestHasFinished) {\n // If the request has already finished, there's no need to cancel it\n return\n }\n\n this.cancelToken.abort()\n\n this.requestParams.markAsCancelled({ cancelled, interrupted })\n\n this.fireFinishEvents()\n }\n\n protected onProgress(progress: AxiosProgressEvent): void {\n if (this.requestParams.data() instanceof FormData) {\n progress.percentage = progress.progress ? Math.round(progress.progress * 100) : 0\n fireProgressEvent(progress)\n this.requestParams.all().onProgress(progress)\n }\n }\n\n protected getHeaders(): AxiosRequestConfig['headers'] {\n const headers: AxiosRequestConfig['headers'] = {\n ...this.requestParams.headers(),\n Accept: 'text/html, application/xhtml+xml',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Inertia': true,\n }\n\n const page = currentPage.get()\n\n if (page.version) {\n headers['X-Inertia-Version'] = page.version\n }\n\n const onceProps = Object.entries(page.onceProps || {})\n .filter(([, onceProp]) => {\n if (page.props[onceProp.prop] === undefined) {\n // The prop could deferred and not be loaded yet\n return false\n }\n\n return !onceProp.expiresAt || onceProp.expiresAt > Date.now()\n })\n .map(([key]) => key)\n\n if (onceProps.length > 0) {\n headers['X-Inertia-Except-Once-Props'] = onceProps.join(',')\n }\n\n return headers\n }\n}\n", "import { AxiosRequestConfig } from 'axios'\nimport { page as currentPage } from './page'\nimport { Response } from './response'\nimport { ActiveVisit, InternalActiveVisit, Page, PreserveStateOption, VisitCallbacks } from './types'\n\nexport class RequestParams {\n protected callbacks: {\n name: keyof VisitCallbacks\n args: any[]\n }[] = []\n\n protected params: InternalActiveVisit\n\n constructor(params: InternalActiveVisit) {\n if (!params.prefetch) {\n this.params = params\n } else {\n const wrappedCallbacks: Record<keyof VisitCallbacks, () => any> = {\n onBefore: this.wrapCallback(params, 'onBefore'),\n onBeforeUpdate: this.wrapCallback(params, 'onBeforeUpdate'),\n onStart: this.wrapCallback(params, 'onStart'),\n onProgress: this.wrapCallback(params, 'onProgress'),\n onFinish: this.wrapCallback(params, 'onFinish'),\n onCancel: this.wrapCallback(params, 'onCancel'),\n onSuccess: this.wrapCallback(params, 'onSuccess'),\n onError: this.wrapCallback(params, 'onError'),\n onFlash: this.wrapCallback(params, 'onFlash'),\n onCancelToken: this.wrapCallback(params, 'onCancelToken'),\n onPrefetched: this.wrapCallback(params, 'onPrefetched'),\n onPrefetching: this.wrapCallback(params, 'onPrefetching'),\n }\n\n this.params = {\n ...params,\n ...wrappedCallbacks,\n onPrefetchResponse: params.onPrefetchResponse || (() => {}),\n onPrefetchError: params.onPrefetchError || (() => {}),\n }\n }\n //\n }\n\n public static create(params: ActiveVisit): RequestParams {\n return new RequestParams(params)\n }\n\n public data() {\n return this.params.method === 'get' ? null : this.params.data\n }\n\n public queryParams() {\n return this.params.method === 'get' ? this.params.data : {}\n }\n\n public isPartial() {\n return this.params.only.length > 0 || this.params.except.length > 0 || this.params.reset.length > 0\n }\n\n public isDeferredPropsRequest() {\n return this.params.deferredProps === true\n }\n\n public onCancelToken(cb: VoidFunction) {\n this.params.onCancelToken({\n cancel: cb,\n })\n }\n\n public markAsFinished() {\n this.params.completed = true\n this.params.cancelled = false\n this.params.interrupted = false\n }\n\n public markAsCancelled({ cancelled = true, interrupted = false }) {\n this.params.onCancel()\n\n this.params.completed = false\n this.params.cancelled = cancelled\n this.params.interrupted = interrupted\n }\n\n public wasCancelledAtAll() {\n return this.params.cancelled || this.params.interrupted\n }\n\n public onFinish() {\n this.params.onFinish(this.params)\n }\n\n public onStart() {\n this.params.onStart(this.params)\n }\n\n public onPrefetching() {\n this.params.onPrefetching(this.params)\n }\n\n public onPrefetchResponse(response: Response) {\n if (this.params.onPrefetchResponse) {\n this.params.onPrefetchResponse(response)\n }\n }\n\n public onPrefetchError(error: Error) {\n if (this.params.onPrefetchError) {\n this.params.onPrefetchError(error)\n }\n }\n\n public all() {\n return this.params\n }\n\n public headers(): AxiosRequestConfig['headers'] {\n const headers: AxiosRequestConfig['headers'] = {\n ...this.params.headers,\n }\n\n if (this.isPartial()) {\n headers['X-Inertia-Partial-Component'] = currentPage.get().component\n }\n\n const only = this.params.only.concat(this.params.reset)\n\n if (only.length > 0) {\n headers['X-Inertia-Partial-Data'] = only.join(',')\n }\n\n if (this.params.except.length > 0) {\n headers['X-Inertia-Partial-Except'] = this.params.except.join(',')\n }\n\n if (this.params.reset.length > 0) {\n headers['X-Inertia-Reset'] = this.params.reset.join(',')\n }\n\n if (this.params.errorBag && this.params.errorBag.length > 0) {\n headers['X-Inertia-Error-Bag'] = this.params.errorBag\n }\n\n return headers\n }\n\n public setPreserveOptions(page: Page) {\n this.params.preserveScroll = RequestParams.resolvePreserveOption(this.params.preserveScroll, page)\n this.params.preserveState = RequestParams.resolvePreserveOption(this.params.preserveState, page)\n }\n\n public runCallbacks() {\n this.callbacks.forEach(({ name, args }) => {\n // @ts-ignore\n this.params[name](...args)\n })\n }\n\n public merge(toMerge: Partial<ActiveVisit>) {\n this.params = {\n ...this.params,\n ...toMerge,\n }\n }\n\n protected wrapCallback(params: ActiveVisit, name: keyof VisitCallbacks) {\n // @ts-ignore\n return (...args) => {\n this.recordCallback(name, args)\n // @ts-ignore\n params[name](...args)\n }\n }\n\n protected recordCallback(name: keyof VisitCallbacks, args: any[]) {\n this.callbacks.push({ name, args })\n }\n\n public static resolvePreserveOption(value: PreserveStateOption, page: Page): boolean {\n if (typeof value === 'function') {\n return value(page)\n }\n\n if (value === 'errors') {\n return Object.keys(page.props.errors || {}).length > 0\n }\n\n return value\n }\n}\n", "import { AxiosResponse } from 'axios'\nimport { get, isEqual, set } from 'lodash-es'\nimport { config, router } from '.'\nimport dialog from './dialog'\nimport {\n fireBeforeUpdateEvent,\n fireErrorEvent,\n fireFlashEvent,\n fireInvalidEvent,\n firePrefetchedEvent,\n fireSuccessEvent,\n} from './events'\nimport { history } from './history'\nimport modal from './modal'\nimport { page as currentPage } from './page'\nimport Queue from './queue'\nimport { RequestParams } from './requestParams'\nimport { SessionStorage } from './sessionStorage'\nimport { ActiveVisit, ErrorBag, Errors, Page } from './types'\nimport { hrefToUrl, isSameUrlWithoutHash, setHashIfSameUrl } from './url'\n\nconst queue = new Queue<Promise<boolean | void>>()\n\nexport class Response {\n protected wasPrefetched = false\n\n constructor(\n protected requestParams: RequestParams,\n protected response: AxiosResponse,\n protected originatingPage: Page,\n ) {}\n\n public static create(params: RequestParams, response: AxiosResponse, originatingPage: Page): Response {\n return new Response(params, response, originatingPage)\n }\n\n public async handlePrefetch() {\n if (isSameUrlWithoutHash(this.requestParams.all().url, window.location)) {\n this.handle()\n }\n }\n\n public async handle() {\n return queue.add(() => this.process())\n }\n\n public async process() {\n if (this.requestParams.all().prefetch) {\n this.wasPrefetched = true\n this.requestParams.all().prefetch = false\n\n this.requestParams.all().onPrefetched(this.response, this.requestParams.all())\n firePrefetchedEvent(this.response, this.requestParams.all())\n\n return Promise.resolve()\n }\n\n this.requestParams.runCallbacks()\n\n if (!this.isInertiaResponse()) {\n return this.handleNonInertiaResponse()\n }\n\n await history.processQueue()\n\n history.preserveUrl = this.requestParams.all().preserveUrl\n\n const previousFlash = currentPage.get().flash\n\n await this.setPage()\n\n const errors = currentPage.get().props.errors || {}\n\n if (Object.keys(errors).length > 0) {\n const scopedErrors = this.getScopedErrors(errors)\n\n fireErrorEvent(scopedErrors)\n\n return this.requestParams.all().onError(scopedErrors)\n }\n\n router.flushByCacheTags(this.requestParams.all().invalidateCacheTags || [])\n\n if (!this.wasPrefetched) {\n // We end up here other than from the prefetch cache, so we assume this response is\n // never than the cached one and therefore flush the cache.\n router.flush(currentPage.get().url)\n }\n\n const { flash } = currentPage.get()\n\n if (Object.keys(flash).length > 0 && (!this.requestParams.isPartial() || !isEqual(flash, previousFlash))) {\n fireFlashEvent(flash)\n this.requestParams.all().onFlash(flash)\n }\n\n fireSuccessEvent(currentPage.get())\n\n await this.requestParams.all().onSuccess(currentPage.get())\n\n history.preserveUrl = false\n }\n\n public mergeParams(params: ActiveVisit) {\n this.requestParams.merge(params)\n }\n\n public getPageResponse(): Page {\n const data = this.getDataFromResponse(this.response.data)\n return (this.response.data = { ...data, flash: data.flash ?? {} })\n }\n\n protected async handleNonInertiaResponse() {\n if (this.isLocationVisit()) {\n const locationUrl = hrefToUrl(this.getHeader('x-inertia-location'))\n\n setHashIfSameUrl(this.requestParams.all().url, locationUrl)\n\n return this.locationVisit(locationUrl)\n }\n\n const response = {\n ...this.response,\n data: this.getDataFromResponse(this.response.data),\n }\n\n if (fireInvalidEvent(response)) {\n return config.get('future.useDialogForErrorModal') ? dialog.show(response.data) : modal.show(response.data)\n }\n }\n\n protected isInertiaResponse(): boolean {\n return this.hasHeader('x-inertia')\n }\n\n protected hasStatus(status: number): boolean {\n return this.response.status === status\n }\n\n protected getHeader(header: string): string {\n return this.response.headers[header]\n }\n\n protected hasHeader(header: string): boolean {\n return this.getHeader(header) !== undefined\n }\n\n protected isLocationVisit(): boolean {\n return this.hasStatus(409) && this.hasHeader('x-inertia-location')\n }\n\n /**\n * @link https://inertiajs.com/redirects#external-redirects\n */\n protected locationVisit(url: URL): boolean | void {\n try {\n SessionStorage.set(SessionStorage.locationVisitKey, {\n preserveScroll: this.requestParams.all().preserveScroll === true,\n })\n\n if (typeof window === 'undefined') {\n return\n }\n\n if (isSameUrlWithoutHash(window.location, url)) {\n window.location.reload()\n } else {\n window.location.href = url.href\n }\n } catch (error) {\n return false\n }\n }\n\n protected async setPage(): Promise<void> {\n const pageResponse = this.getPageResponse()\n\n if (!this.shouldSetPage(pageResponse)) {\n return Promise.resolve()\n }\n\n this.mergeProps(pageResponse)\n currentPage.mergeOncePropsIntoResponse(pageResponse)\n this.preserveEqualProps(pageResponse)\n\n await this.setRememberedState(pageResponse)\n\n this.requestParams.setPreserveOptions(pageResponse)\n\n pageResponse.url = history.preserveUrl ? currentPage.get().url : this.pageUrl(pageResponse)\n\n this.requestParams.all().onBeforeUpdate(pageResponse)\n fireBeforeUpdateEvent(pageResponse)\n\n return currentPage.set(pageResponse, {\n replace: this.requestParams.all().replace,\n preserveScroll: this.requestParams.all().preserveScroll as boolean,\n preserveState: this.requestParams.all().preserveState as boolean,\n viewTransition: this.requestParams.all().viewTransition,\n })\n }\n\n protected getDataFromResponse(response: any): any {\n if (typeof response !== 'string') {\n return response\n }\n\n try {\n return JSON.parse(response)\n } catch (error) {\n return response\n }\n }\n\n protected shouldSetPage(pageResponse: Page): boolean {\n if (!this.requestParams.all().async) {\n // If the request is sync, we should always set the page\n return true\n }\n\n if (this.originatingPage.component !== pageResponse.component) {\n // We originated from a component but the response re-directed us,\n // we should respect the redirection and set the page\n return true\n }\n\n // At this point, if the originating request component is different than the current component,\n // the user has since navigated and we should discard the response\n if (this.originatingPage.component !== currentPage.get().component) {\n return false\n }\n\n const originatingUrl = hrefToUrl(this.originatingPage.url)\n const currentPageUrl = hrefToUrl(currentPage.get().url)\n\n // We have the same component, let's double-check the URL\n // If we're no longer on the same path name (e.g. /users/1 -> /users/2), we should not set the page\n return originatingUrl.origin === currentPageUrl.origin && originatingUrl.pathname === currentPageUrl.pathname\n }\n\n protected pageUrl(pageResponse: Page) {\n const responseUrl = hrefToUrl(pageResponse.url)\n\n setHashIfSameUrl(this.requestParams.all().url, responseUrl)\n\n return responseUrl.pathname + responseUrl.search + responseUrl.hash\n }\n\n protected preserveEqualProps(pageResponse: Page): void {\n if (pageResponse.component !== currentPage.get().component || config.get('future.preserveEqualProps') !== true) {\n return\n }\n\n const currentPageProps = currentPage.get().props\n\n Object.entries(pageResponse.props).forEach(([key, value]) => {\n if (isEqual(value, currentPageProps[key])) {\n pageResponse.props[key] = currentPageProps[key]\n }\n })\n }\n\n protected mergeProps(pageResponse: Page): void {\n if (!this.requestParams.isPartial() || pageResponse.component !== currentPage.get().component) {\n return\n }\n\n const propsToAppend = pageResponse.mergeProps || []\n const propsToPrepend = pageResponse.prependProps || []\n const propsToDeepMerge = pageResponse.deepMergeProps || []\n const matchPropsOn = pageResponse.matchPropsOn || []\n\n const mergeProp = (prop: string, shouldAppend: boolean) => {\n const currentProp = get(currentPage.get().props, prop)\n const incomingProp = get(pageResponse.props, prop)\n\n if (Array.isArray(incomingProp)) {\n const newArray = this.mergeOrMatchItems(\n (currentProp || []) as any[],\n incomingProp,\n prop,\n matchPropsOn,\n shouldAppend,\n )\n\n set(pageResponse.props, prop, newArray)\n } else if (typeof incomingProp === 'object' && incomingProp !== null) {\n const newObject = {\n ...(currentProp || {}),\n ...incomingProp,\n }\n\n set(pageResponse.props, prop, newObject)\n }\n }\n\n propsToAppend.forEach((prop) => mergeProp(prop, true))\n propsToPrepend.forEach((prop) => mergeProp(prop, false))\n\n propsToDeepMerge.forEach((prop) => {\n const currentProp = currentPage.get().props[prop]\n const incomingProp = pageResponse.props[prop]\n\n // Function to recursively merge objects and arrays\n const deepMerge = (target: any, source: any, matchProp: string) => {\n if (Array.isArray(source)) {\n return this.mergeOrMatchItems(target, source, matchProp, matchPropsOn)\n }\n\n if (typeof source === 'object' && source !== null) {\n // Merge objects by iterating over keys\n return Object.keys(source).reduce(\n (acc, key) => {\n acc[key] = deepMerge(target ? target[key] : undefined, source[key], `${matchProp}.${key}`)\n return acc\n },\n { ...target },\n )\n }\n\n // If the source is neither an array nor an object, simply return the it\n return source\n }\n\n // Apply the deep merge and update the page response\n pageResponse.props[prop] = deepMerge(currentProp, incomingProp, prop)\n })\n\n pageResponse.props = { ...currentPage.get().props, ...pageResponse.props }\n\n if (this.requestParams.isDeferredPropsRequest()) {\n const currentErrors = currentPage.get().props.errors\n\n if (currentErrors && Object.keys(currentErrors).length > 0) {\n // Preserve existing errors during deferred props requests\n pageResponse.props.errors = currentErrors\n }\n }\n\n // Preserve the existing scrollProps\n if (currentPage.get().scrollProps) {\n pageResponse.scrollProps = {\n ...(currentPage.get().scrollProps || {}),\n ...(pageResponse.scrollProps || {}),\n }\n }\n\n // Preserve the existing onceProps\n if (currentPage.hasOnceProps()) {\n pageResponse.onceProps = {\n ...(currentPage.get().onceProps || {}),\n ...(pageResponse.onceProps || {}),\n }\n }\n\n // Preserve flash data and merge with new flash data on non-deferred requests\n pageResponse.flash = {\n ...currentPage.get().flash,\n ...(this.requestParams.isDeferredPropsRequest() ? {} : pageResponse.flash),\n }\n }\n\n protected mergeOrMatchItems(\n existingItems: any[],\n newItems: any[],\n matchProp: string,\n matchPropsOn: string[],\n shouldAppend = true,\n ) {\n const items = Array.isArray(existingItems) ? existingItems : []\n\n // Find the matching key for this specific property path\n const matchingKey = matchPropsOn.find((key) => {\n const keyPath = key.split('.').slice(0, -1).join('.')\n\n return keyPath === matchProp\n })\n\n // If no matching key is configured, simply concatenate the arrays\n if (!matchingKey) {\n return shouldAppend ? [...items, ...newItems] : [...newItems, ...items]\n }\n\n // Extract the property name we'll use to match items (e.g., 'id' from 'users.data.id')\n const uniqueProperty = matchingKey.split('.').pop() || ''\n\n // Create a map of new items by their unique property lookups\n const newItemsMap = new Map()\n\n newItems.forEach((item) => {\n if (this.hasUniqueProperty(item, uniqueProperty)) {\n newItemsMap.set(item[uniqueProperty], item)\n }\n })\n\n return shouldAppend\n ? this.appendWithMatching(items, newItems, newItemsMap, uniqueProperty)\n : this.prependWithMatching(items, newItems, newItemsMap, uniqueProperty)\n }\n\n protected appendWithMatching(\n existingItems: any[],\n newItems: any[],\n newItemsMap: Map<any, any>,\n uniqueProperty: string,\n ): any[] {\n // Update existing items with new values, keep non-matching items\n const updatedExisting = existingItems.map((item) => {\n if (this.hasUniqueProperty(item, uniqueProperty) && newItemsMap.has(item[uniqueProperty])) {\n return newItemsMap.get(item[uniqueProperty])\n }\n\n return item\n })\n\n // Filter new items to only include those not already in existing items\n const newItemsToAdd = newItems.filter((item) => {\n if (!this.hasUniqueProperty(item, uniqueProperty)) {\n return true // Always add items without unique property\n }\n\n return !existingItems.some(\n (existing) =>\n this.hasUniqueProperty(existing, uniqueProperty) && existing[uniqueProperty] === item[uniqueProperty],\n )\n })\n\n return [...updatedExisting, ...newItemsToAdd]\n }\n\n protected prependWithMatching(\n existingItems: any[],\n newItems: any[],\n newItemsMap: Map<any, any>,\n uniqueProperty: string,\n ): any[] {\n // Filter existing items, keeping only those not being updated\n const untouchedExisting = existingItems.filter((item) => {\n if (this.hasUniqueProperty(item, uniqueProperty)) {\n return !newItemsMap.has(item[uniqueProperty])\n }\n\n return true\n })\n\n return [...newItems, ...untouchedExisting]\n }\n\n protected hasUniqueProperty(item: any, property: string): boolean {\n return item && typeof item === 'object' && property in item\n }\n\n protected async setRememberedState(pageResponse: Page): Promise<void> {\n const rememberedState = await history.getState<Page['rememberedState']>(history.rememberedState, {})\n\n if (\n this.requestParams.all().preserveState &&\n rememberedState &&\n pageResponse.component === currentPage.get().component\n ) {\n pageResponse.rememberedState = rememberedState\n }\n }\n\n protected getScopedErrors(errors: Errors & ErrorBag): Errors {\n if (!this.requestParams.all().errorBag) {\n return errors\n }\n\n return errors[this.requestParams.all().errorBag || ''] || {}\n }\n}\n", "export default {\n modal: null,\n listener: null,\n\n createIframeAndPage(html: Record<string, unknown> | string): { iframe: HTMLIFrameElement; page: HTMLElement } {\n if (typeof html === 'object') {\n html = `All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(\n html,\n )}`\n }\n\n const page = document.createElement('html')\n page.innerHTML = html\n page.querySelectorAll('a').forEach((a) => a.setAttribute('target', '_top'))\n\n const iframe = document.createElement('iframe')\n iframe.style.backgroundColor = 'white'\n iframe.style.borderRadius = '5px'\n iframe.style.width = '100%'\n iframe.style.height = '100%'\n\n return { iframe, page }\n },\n\n show(html: Record<string, unknown> | string): void {\n const { iframe, page } = this.createIframeAndPage(html)\n\n this.modal = document.createElement('div')\n this.modal.style.position = 'fixed'\n this.modal.style.width = '100vw'\n this.modal.style.height = '100vh'\n this.modal.style.padding = '50px'\n this.modal.style.boxSizing = 'border-box'\n this.modal.style.backgroundColor = 'rgba(0, 0, 0, .6)'\n this.modal.style.zIndex = 200000\n this.modal.addEventListener('click', () => this.hide())\n this.modal.appendChild(iframe)\n\n document.body.prepend(this.modal)\n document.body.style.overflow = 'hidden'\n if (!iframe.contentWindow) {\n throw new Error('iframe not yet ready.')\n }\n iframe.contentWindow.document.open()\n iframe.contentWindow.document.write(page.outerHTML)\n iframe.contentWindow.document.close()\n\n this.listener = this.hideOnEscape.bind(this)\n document.addEventListener('keydown', this.listener)\n },\n\n hide(): void {\n this.modal.outerHTML = ''\n this.modal = null\n document.body.style.overflow = 'visible'\n document.removeEventListener('keydown', this.listener)\n },\n\n hideOnEscape(event: KeyboardEvent): void {\n if (event.keyCode === 27) {\n this.hide()\n }\n },\n}\n", "import modal from './modal'\n\nexport default {\n show(html: Record<string, unknown> | string): void {\n const { iframe, page } = modal.createIframeAndPage(html)\n\n iframe.style.boxSizing = 'border-box'\n iframe.style.display = 'block'\n\n const dialog = document.createElement('dialog')\n dialog.id = 'inertia-error-dialog'\n\n // Style the dialog to mimic 50px padding\n Object.assign(dialog.style, {\n width: 'calc(100vw - 100px)',\n height: 'calc(100vh - 100px)',\n padding: '0',\n margin: 'auto',\n border: 'none',\n backgroundColor: 'transparent',\n })\n\n // There's no way to directly style the backdrop of a dialog, so we need to use a style element...\n const dialogStyleElement = document.createElement('style')\n dialogStyleElement.textContent = `\n dialog#inertia-error-dialog::backdrop {\n background-color: rgba(0, 0, 0, 0.6);\n }\n\n dialog#inertia-error-dialog:focus {\n outline: none;\n }\n `\n document.head.appendChild(dialogStyleElement)\n\n dialog.addEventListener('click', (event: MouseEvent) => {\n if (event.target === dialog) {\n dialog.close()\n }\n })\n\n dialog.addEventListener('close', () => {\n dialogStyleElement.remove()\n dialog.remove()\n })\n\n dialog.appendChild(iframe)\n document.body.prepend(dialog)\n dialog.showModal()\n\n // Focus the dialog so the 'Escape' key works immediately\n dialog.focus()\n\n if (!iframe.contentWindow) {\n throw new Error('iframe not yet ready.')\n }\n\n iframe.contentWindow.document.open()\n iframe.contentWindow.document.write(page.outerHTML)\n iframe.contentWindow.document.close()\n },\n}\n", "import { Request } from './request'\n\nexport class RequestStream {\n protected requests: Request[] = []\n\n protected maxConcurrent: number\n\n protected interruptible: boolean\n\n constructor({ maxConcurrent, interruptible }: { maxConcurrent: number; interruptible: boolean }) {\n this.maxConcurrent = maxConcurrent\n this.interruptible = interruptible\n }\n\n public send(request: Request) {\n this.requests.push(request)\n\n request.send().then(() => {\n this.requests = this.requests.filter((r) => r !== request)\n })\n }\n\n public interruptInFlight(): void {\n this.cancel({ interrupted: true }, false)\n }\n\n public cancelInFlight(): void {\n this.cancel({ cancelled: true }, true)\n }\n\n protected cancel({ cancelled = false, interrupted = false } = {}, force: boolean): void {\n if (!this.shouldCancel(force)) {\n return\n }\n\n const request = this.requests.shift()!\n\n request?.cancel({ interrupted, cancelled })\n }\n\n protected shouldCancel(force: boolean): boolean {\n if (force) {\n return true\n }\n\n return this.interruptible && this.requests.length >= this.maxConcurrent\n }\n}\n", "import { NamedInputEvent, ValidationConfig } from 'laravel-precognition'\nimport {\n FormDataType,\n Method,\n UrlMethodPair,\n UseFormArguments,\n UseFormSubmitArguments,\n UseFormSubmitOptions,\n} from './types'\nimport { isUrlMethodPair } from './url'\n\nexport class UseFormUtils {\n /**\n * Creates a callback that returns a UrlMethodPair.\n *\n * createWayfinderCallback(urlMethodPair)\n * createWayfinderCallback(method, url)\n * createWayfinderCallback(() => urlMethodPair)\n * createWayfinderCallback(() => method, () => url)\n */\n public static createWayfinderCallback(\n ...args: [UrlMethodPair | (() => UrlMethodPair)] | [Method | (() => Method), string | (() => string)]\n ): () => UrlMethodPair {\n return () => {\n if (args.length === 1) {\n // Wayfinder object, return as-is or call function...\n return isUrlMethodPair(args[0]) ? args[0] : args[0]()\n }\n\n // Separate method and url, reconstruct Wayfinder object...\n return {\n method: typeof args[0] === 'function' ? args[0]() : args[0],\n url: typeof args[1] === 'function' ? args[1]() : args[1],\n }\n }\n }\n\n /**\n * Parses all useForm() arguments into { rememberKey, data, precognitionEndpoint }.\n *\n * useForm(data)\n * useForm(rememberKey, data)\n * useForm(method, url, data)\n * useForm(urlMethodPair, data)\n *\n */\n public static parseUseFormArguments<TForm extends FormDataType<TForm>>(\n ...args: UseFormArguments<TForm>\n ): {\n rememberKey: string | null\n data: TForm | (() => TForm)\n precognitionEndpoint: (() => UrlMethodPair) | null\n } {\n if (args.length === 1) {\n // Basic form: useForm(data)\n return {\n rememberKey: null,\n data: args[0],\n precognitionEndpoint: null,\n }\n }\n\n if (args.length === 2) {\n if (typeof args[0] === 'string') {\n // Rememberable form: useForm(rememberKey, data)\n return {\n rememberKey: args[0],\n data: args[1],\n precognitionEndpoint: null,\n }\n }\n\n // Form with Precognition + Wayfinder: useForm(wayfinder, data)\n return {\n rememberKey: null,\n data: args[1],\n precognitionEndpoint: this.createWayfinderCallback(args[0]),\n }\n }\n\n // Form with Precognition: useForm(method, url, data)\n return {\n rememberKey: null,\n data: args[2],\n precognitionEndpoint: this.createWayfinderCallback(args[0], args[1]),\n }\n }\n\n /**\n * Parses all submission arguments into { method, url, options }.\n * It uses the Precognition endpoint if no explicit method/url are provided.\n *\n * form.submit(method, url)\n * form.submit(method, url, options)\n * form.submit(urlMethodPair)\n * form.submit(urlMethodPair, options)\n * form.submit()\n * form.submit(options)\n */\n public static parseSubmitArguments(\n args: UseFormSubmitArguments,\n precognitionEndpoint: (() => UrlMethodPair) | null,\n ): { method: Method; url: string; options: UseFormSubmitOptions } {\n if (args.length === 3 || (args.length === 2 && typeof args[0] === 'string')) {\n // Explicit method and url provided...\n return { method: args[0], url: args[1], options: args[2] ?? {} }\n }\n\n if (isUrlMethodPair(args[0])) {\n // Wayfinder object provided...\n return { ...args[0], options: (args[1] as UseFormSubmitOptions) ?? {} }\n }\n\n // Use Precognition endpoint with optional options...\n return { ...precognitionEndpoint!(), options: (args[0] as UseFormSubmitOptions) ?? {} }\n }\n\n /**\n * Merges headers into the Precognition validate() arguments.\n */\n public static mergeHeadersForValidation(\n field?: string | NamedInputEvent | ValidationConfig,\n config?: ValidationConfig,\n headers?: Record<string, string>,\n ): [string | NamedInputEvent | ValidationConfig | undefined, ValidationConfig | undefined] {\n const merge = (config: ValidationConfig): ValidationConfig => {\n config.headers = {\n ...(headers ?? {}),\n ...(config.headers ?? {}),\n }\n\n return config\n }\n\n if (field && typeof field === 'object' && !('target' in field)) {\n field = merge(field)\n } else if (config && typeof config === 'object') {\n config = merge(config)\n } else if (typeof field === 'string') {\n config = merge(config ?? {})\n } else {\n field = merge(field ?? {})\n }\n\n return [field, config]\n }\n}\n", "const elementInViewport = (el: HTMLElement) => {\n if (el.offsetParent === null) {\n // Element is not participating in layout (e.g., display: none)\n return false\n }\n\n const rect = el.getBoundingClientRect()\n\n // We check both vertically and horizontally for containers that scroll in either direction\n const verticallyVisible = rect.top < window.innerHeight && rect.bottom >= 0\n const horizontallyVisible = rect.left < window.innerWidth && rect.right >= 0\n\n return verticallyVisible && horizontallyVisible\n}\n\nexport const getScrollableParent = (element: HTMLElement | null): HTMLElement | null => {\n const allowsVerticalScroll = (el: HTMLElement): boolean => {\n const computedStyle = window.getComputedStyle(el)\n\n if (['scroll', 'overlay'].includes(computedStyle.overflowY)) {\n return true\n }\n\n if (computedStyle.overflowY !== 'auto') {\n return false\n }\n\n if (['visible', 'clip'].includes(computedStyle.overflowX)) {\n return true\n }\n\n return hasDimensionConstraint(computedStyle.maxHeight, el.style.height)\n }\n\n const allowsHorizontalScroll = (el: HTMLElement): boolean => {\n const computedStyle = window.getComputedStyle(el)\n\n if (['scroll', 'overlay'].includes(computedStyle.overflowX)) {\n return true\n }\n\n if (computedStyle.overflowX !== 'auto') {\n return false\n }\n\n if (['visible', 'clip'].includes(computedStyle.overflowY)) {\n return true\n }\n\n return hasDimensionConstraint(computedStyle.maxWidth, el.style.width)\n }\n\n const hasDimensionConstraint = (computedMaxDimension: string, inlineStyleDimension: string): boolean => {\n if (computedMaxDimension && computedMaxDimension !== 'none' && computedMaxDimension !== '0px') {\n return true\n }\n\n if (inlineStyleDimension && inlineStyleDimension !== 'auto' && inlineStyleDimension !== '0') {\n return true\n }\n\n return false\n }\n\n let parent = element?.parentElement\n\n while (parent) {\n const allowsScroll = allowsVerticalScroll(parent) || allowsHorizontalScroll(parent)\n\n if (window.getComputedStyle(parent).display !== 'contents' && allowsScroll) {\n return parent\n }\n\n parent = parent.parentElement\n }\n\n return null\n}\n\nexport const getElementsInViewportFromCollection = (\n elements: HTMLElement[],\n referenceElement?: HTMLElement,\n): HTMLElement[] => {\n if (!referenceElement) {\n return elements.filter((element) => elementInViewport(element))\n }\n\n const referenceIndex = elements.indexOf(referenceElement)\n const upwardElements: HTMLElement[] = []\n const downwardElements: HTMLElement[] = []\n\n // Traverse upwards until an element is not visible\n for (let i = referenceIndex; i >= 0; i--) {\n const element = elements[i]\n\n if (elementInViewport(element)) {\n upwardElements.push(element)\n } else {\n break\n }\n }\n\n // Traverse downwards until an element is not visible\n for (let i = referenceIndex + 1; i < elements.length; i++) {\n const element = elements[i]\n\n if (elementInViewport(element)) {\n downwardElements.push(element)\n } else {\n break\n }\n }\n\n // Reverse upward elements to maintain DOM order, then append downward elements\n return [...upwardElements.reverse(), ...downwardElements]\n}\n\nexport const requestAnimationFrame = (cb: () => void, times: number = 1): void => {\n window.requestAnimationFrame(() => {\n if (times > 1) {\n requestAnimationFrame(cb, times - 1)\n } else {\n cb()\n }\n })\n}\n\nexport const getInitialPageFromDOM = <T>(id: string, useScriptElement: boolean = false): T | null => {\n if (typeof window === 'undefined') {\n return null\n }\n\n if (!useScriptElement) {\n const el = document.getElementById(id)\n\n if (el?.dataset.page) {\n return JSON.parse(el.dataset.page)\n }\n }\n\n const scriptEl = document.querySelector(`script[data-page=\"${id}\"][type=\"application/json\"]`)\n\n if (scriptEl?.textContent) {\n return JSON.parse(scriptEl.textContent)\n }\n\n return null\n}\n", "import { get, set } from 'lodash-es'\nimport { isFile } from './files'\nimport { FormDataConvertible } from './types'\n\n/**\n * Transform dotted notation to bracket notation.\n *\n * Examples:\n * user.name => user[name]\n * user.profile.city => user[profile][city]\n * user.skills[] => user[skills][]\n * users.company[address].street => users[company][address][street]\n * config\\.app\\.name => config.app.name (escaped, literal)\n */\nfunction undotKey(key: string): string {\n if (!key.includes('.')) {\n return key\n }\n\n const transformSegment = (segment: string): string => {\n if (segment.startsWith('[') && segment.endsWith(']')) {\n return segment // Already in bracket notation - leave untouched\n }\n\n // Convert dotted segment to bracket notation: \"user.name\" \u2192 \"user[name]\"\n return segment.split('.').reduce((result, part, index) => (index === 0 ? part : `${result}[${part}]`))\n }\n\n return key\n .replace(/\\\\\\./g, '__ESCAPED_DOT__') // Temporarily replace escaped dots (\\.) to protect them from transformation\n .split(/(\\[[^\\]]*\\])/) // Split on bracket notation while preserving the brackets in the result array\n .filter(Boolean) // Remove empty strings from the split operation\n .map(transformSegment) // Transform each segment: dotted parts become bracketed, existing brackets stay as-is\n .join('') // Reassemble all segments back into a single string\n .replace(/__ESCAPED_DOT__/g, '.') // Restore the escaped dots as literal dots in the final result\n}\n\n/**\n * Parse a key into an array of path segments.\n *\n * Examples:\n * - \"user[name]\" => [\"user\", \"name\"]\n * - \"tags[]\" => [\"tags\", \"\"]\n * - \"items[0][name]\" => [\"items\", 0, \"name\"]\n */\nfunction parseKey(key: string): (string | number | '')[] {\n const path: (string | number | '')[] = []\n const pattern = /([^\\[\\]]+)|\\[(\\d*)\\]/g\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(key)) !== null) {\n if (match[1] !== undefined) {\n path.push(match[1])\n } else if (match[2] !== undefined) {\n path.push(match[2] === '' ? '' : Number(match[2]))\n }\n }\n\n return path\n}\n\n/**\n * Set value in nested object, always creating objects (never arrays).\n * This ensures we can analyze the final structure before deciding what should be arrays.\n */\nfunction setNestedObject(obj: Record<string, any>, path: string[], value: any): void {\n let current = obj\n\n for (let i = 0; i < path.length - 1; i++) {\n if (!(path[i] in current)) {\n current[path[i]] = {}\n }\n\n current = current[path[i]]\n }\n\n current[path[path.length - 1]] = value\n}\n\n/**\n * Check if an object has sequential numeric keys (0, 1, 2, ...).\n */\nfunction objectHasSequentialNumericKeys(value: any): boolean {\n const keys = Object.keys(value)\n const numericKeys = keys\n .filter((k) => /^\\d+$/.test(k))\n .map(Number)\n .sort((a, b) => a - b)\n\n return (\n keys.length === numericKeys.length &&\n numericKeys.length > 0 &&\n numericKeys[0] === 0 &&\n numericKeys.every((n, i) => n === i)\n )\n}\n\n/**\n * Convert objects with sequential numeric keys (0, 1, 2, ...) to arrays.\n */\nfunction convertSequentialObjectsToArrays(value: any): any {\n if (Array.isArray(value)) {\n return value.map(convertSequentialObjectsToArrays)\n }\n\n if (typeof value !== 'object' || value === null || isFile(value)) {\n return value\n }\n\n if (objectHasSequentialNumericKeys(value)) {\n const result = []\n\n for (let i = 0; i < Object.keys(value).length; i++) {\n result[i] = convertSequentialObjectsToArrays(value[i])\n }\n\n return result\n }\n\n // Keep as object, recursively process values\n const result: Record<string, any> = {}\n\n for (const key in value) {\n result[key] = convertSequentialObjectsToArrays(value[key])\n }\n\n return result\n}\n\n/**\n * Convert a FormData instance into an object structure.\n */\nexport function formDataToObject(source: FormData): Record<string, FormDataConvertible> {\n const form: Record<string, any> = {}\n\n // formData.entries() returns an iterator where the first element is the key and the second element\n // is the value. Examples of the keys are \"user[name]\", \"tags[]\", \"items[0][name]\", \"user.name\", etc.\n // We should construct a new (nested) object based on these keys.\n for (const [key, value] of source.entries()) {\n if (value instanceof File && value.size === 0 && value.name === '') {\n // Check if the given value is an empty file. We want to filter\n // those out as they prevent us from comparing objects with\n // each other, which we do to set the isDirty prop.\n continue\n }\n\n const path = parseKey(undotKey(key))\n\n // If the key ends with an empty string (''), treat it as an array push (e.g., \"tags[]\")\n if (path[path.length - 1] === '') {\n const arrayPath = path.slice(0, -1)\n const existing = get(form, arrayPath)\n\n if (Array.isArray(existing)) {\n existing.push(value)\n } else if (existing && typeof existing === 'object' && !isFile(existing)) {\n // If existing is an object with numeric keys, convert to array (treating indices as relative)\n const numericKeys = Object.keys(existing)\n .filter((k) => /^\\d+$/.test(k))\n .map(Number)\n .sort((a, b) => a - b)\n\n set(form, arrayPath, numericKeys.length > 0 ? [...numericKeys.map((k) => existing[k]), value] : [value])\n } else {\n set(form, arrayPath, [value])\n }\n\n continue\n }\n\n // Always build nested objects first, then convert sequential numeric keys to arrays.\n // This prevents the creation of sparse arrays when mixing numeric and string keys.\n setNestedObject(form, path.map(String), value)\n }\n\n // Convert objects with sequential numeric keys (0, 1, 2, ...) to arrays\n return convertSequentialObjectsToArrays(form)\n}\n", "import { config, HeadManager, HeadManagerOnUpdateCallback, HeadManagerTitleCallback } from '.'\nimport debounce from './debounce'\n\nconst Renderer = {\n preferredAttribute(): 'data-inertia' | 'inertia' {\n return config.get('future.useDataInertiaHeadAttribute') ? 'data-inertia' : 'inertia'\n },\n\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute(this.preferredAttribute()) !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const attribute = this.preferredAttribute()\n const key = element.getAttribute(attribute)\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute(attribute) === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: HeadManagerTitleCallback,\n onUpdate: HeadManagerOnUpdateCallback,\n): HeadManager {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function reconnect(id: string): void {\n if (Object.keys(states).indexOf(id) === -1) {\n states[id] = []\n }\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n const attribute = Renderer.preferredAttribute()\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title ${attribute}=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(attribute === 'inertia' ? / inertia=\"[^\"]+\"/ : / data-inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n preferredAttribute: Renderer.preferredAttribute,\n reconnect: () => reconnect(id),\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n", "import { router } from '../index'\nimport { page as currentPage } from '../page'\nimport { Page, PendingVisit, ReloadOptions, ScrollProp, UseInfiniteScrollDataManager } from '../types'\n\nconst MERGE_INTENT_HEADER = 'X-Inertia-Infinite-Scroll-Merge-Intent'\n\ntype Side = 'previous' | 'next'\ntype ScrollPropPageNames = keyof Pick<ScrollProp, 'previousPage' | 'nextPage'>\n\ntype InfiniteScrollState = {\n previousPage: number | string | null\n nextPage: number | string | null\n lastLoadedPage: number | string | null\n requestCount: number\n}\n\nexport const useInfiniteScrollData = (options: {\n getPropName: () => string\n onBeforeUpdate: () => void\n onBeforePreviousRequest: () => void\n onBeforeNextRequest: () => void\n onCompletePreviousRequest: (loadedPage: string | number | null) => void\n onCompleteNextRequest: (loadedPage: string | number | null) => void\n}): UseInfiniteScrollDataManager => {\n const getScrollPropFromCurrentPage = (): ScrollProp => {\n const scrollProp = currentPage.get().scrollProps?.[options.getPropName()]\n\n if (scrollProp) {\n return scrollProp\n }\n\n throw new Error(`The page object does not contain a scroll prop named \"${options.getPropName()}\".`)\n }\n\n const state = {\n component: null,\n loading: false,\n previousPage: null,\n nextPage: null,\n lastLoadedPage: null,\n requestCount: 0,\n } as {\n component: string | null\n loading: boolean\n } & InfiniteScrollState\n\n const resetState = () => {\n const scrollProp = getScrollPropFromCurrentPage()\n\n state.component = currentPage.get().component\n state.loading = false\n state.previousPage = scrollProp.previousPage\n state.nextPage = scrollProp.nextPage\n state.lastLoadedPage = scrollProp.currentPage\n state.requestCount = 0\n }\n\n const getRememberKey = () => `inertia:infinite-scroll-data:${options.getPropName()}`\n\n if (typeof window !== 'undefined') {\n resetState()\n\n const rememberedState = router.restore(getRememberKey()) as InfiniteScrollState | undefined\n\n if (\n rememberedState &&\n typeof rememberedState === 'object' &&\n rememberedState.lastLoadedPage === getScrollPropFromCurrentPage().currentPage\n ) {\n // Restore remembered state only when it's consistent with the current scroll prop,\n // which ensures back/forward navigation works while direct URL visits reset properly.\n state.previousPage = rememberedState.previousPage\n state.nextPage = rememberedState.nextPage\n state.lastLoadedPage = rememberedState.lastLoadedPage\n state.requestCount = rememberedState.requestCount || 0\n }\n }\n\n const removeEventListener = router.on('success', (event) => {\n if (state.component === event.detail.page.component && getScrollPropFromCurrentPage().reset) {\n resetState()\n }\n })\n\n const getScrollPropKeyForSide = (side: Side): ScrollPropPageNames => {\n return side === 'next' ? 'nextPage' : 'previousPage'\n }\n\n const findPageToLoad = (side: Side) => {\n const pagePropName = getScrollPropKeyForSide(side)\n\n return state[pagePropName]\n }\n\n const syncStateOnSuccess = (side: Side) => {\n const scrollProp = getScrollPropFromCurrentPage()\n const paginationProp = getScrollPropKeyForSide(side)\n\n state.lastLoadedPage = scrollProp.currentPage\n state[paginationProp] = scrollProp[paginationProp]\n\n state.requestCount += 1\n\n // We save the state in the browser history so it can be restored\n // if the user navigates away and then back to the page...\n router.remember(\n {\n previousPage: state.previousPage,\n nextPage: state.nextPage,\n lastLoadedPage: state.lastLoadedPage,\n requestCount: state.requestCount,\n } as InfiniteScrollState,\n getRememberKey(),\n )\n }\n\n const getPageName = () => getScrollPropFromCurrentPage().pageName\n const getRequestCount = () => state.requestCount\n\n const fetchPage = (side: Side, reloadOptions: ReloadOptions = {}): void => {\n const page = findPageToLoad(side)\n\n if (state.loading || page === null) {\n return\n }\n\n state.loading = true\n\n router.reload({\n ...reloadOptions,\n data: { [getPageName()]: page },\n only: [options.getPropName()],\n preserveUrl: true, // we handle URL updates manually via useInfiniteScrollQueryString()\n headers: {\n [MERGE_INTENT_HEADER]: side === 'previous' ? 'prepend' : 'append',\n ...reloadOptions.headers,\n },\n onBefore: (visit: PendingVisit) => {\n side === 'next' ? options.onBeforeNextRequest() : options.onBeforePreviousRequest()\n reloadOptions.onBefore?.(visit)\n },\n onBeforeUpdate: (page: Page) => {\n options.onBeforeUpdate()\n reloadOptions.onBeforeUpdate?.(page)\n },\n onSuccess: (page: Page) => {\n syncStateOnSuccess(side)\n reloadOptions.onSuccess?.(page)\n },\n onFinish: (visit: any) => {\n state.loading = false\n side === 'next'\n ? options.onCompleteNextRequest(state.lastLoadedPage)\n : options.onCompletePreviousRequest(state.lastLoadedPage)\n reloadOptions.onFinish?.(visit)\n },\n })\n }\n\n const getLastLoadedPage = () => state.lastLoadedPage\n const hasPrevious = () => !!state.previousPage\n const hasNext = () => !!state.nextPage\n const fetchPrevious = (reloadOptions?: ReloadOptions): void => fetchPage('previous', reloadOptions)\n const fetchNext = (reloadOptions?: ReloadOptions): void => fetchPage('next', reloadOptions)\n\n return {\n getLastLoadedPage,\n getPageName,\n getRequestCount,\n hasPrevious,\n hasNext,\n fetchNext,\n fetchPrevious,\n removeEventListener,\n }\n}\n", "type IntersectionObserverCallback = (entry: IntersectionObserverEntry) => void\n\ninterface IntersectionObserverManager {\n new: (callback: IntersectionObserverCallback, options?: IntersectionObserverInit) => IntersectionObserver\n flushAll: () => void\n}\n\nexport const useIntersectionObservers = (): IntersectionObserverManager => {\n const intersectionObservers: IntersectionObserver[] = []\n\n const newIntersectionObserver = (\n callback: IntersectionObserverCallback,\n options: IntersectionObserverInit = {},\n ): IntersectionObserver => {\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n callback(entry)\n }\n }\n }, options)\n\n intersectionObservers.push(observer)\n\n return observer\n }\n\n const flushAll = () => {\n intersectionObservers.forEach((observer) => observer.disconnect())\n intersectionObservers.length = 0\n }\n\n return {\n new: newIntersectionObserver,\n flushAll,\n }\n}\n", "import { router } from '..'\nimport debounce from '../debounce'\nimport { useIntersectionObservers } from '../intersectionObservers'\nimport { UseInfiniteScrollElementManager } from '../types'\n\nconst INFINITE_SCROLL_PAGE_KEY = 'infiniteScrollPage'\nconst INFINITE_SCROLL_IGNORE_KEY = 'infiniteScrollIgnore'\n\ntype ElementRange = {\n from: number\n to: number\n}\n\nexport const getPageFromElement = (element: HTMLElement): string | undefined =>\n element.dataset[INFINITE_SCROLL_PAGE_KEY]\n\nexport const useInfiniteScrollElementManager = (options: {\n shouldFetchNext: () => boolean\n shouldFetchPrevious: () => boolean\n getTriggerMargin: () => number\n getStartElement: () => HTMLElement\n getEndElement: () => HTMLElement\n getItemsElement: () => HTMLElement\n getScrollableParent: () => HTMLElement | null\n onPreviousTriggered: () => void\n onNextTriggered: () => void\n onItemIntersected: (element: HTMLElement) => void\n getPropName: () => string\n}): UseInfiniteScrollElementManager => {\n const intersectionObservers = useIntersectionObservers()\n\n let itemsObserver: IntersectionObserver\n let startElementObserver: IntersectionObserver\n let endElementObserver: IntersectionObserver\n let itemsMutationObserver: MutationObserver\n let triggersEnabled = false\n\n const setupObservers = () => {\n // Watch for manually added DOM elements (not from server responses)\n // This mutation observer tracks when new elements are added to the slot,\n // so we can distinguish between user-added content and server-loaded pages\n itemsMutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return\n }\n\n addedElements.add(node as HTMLElement)\n })\n })\n\n rememberElementsDebounced()\n })\n\n itemsMutationObserver.observe(options.getItemsElement(), { childList: true })\n\n // Track individual items entering/leaving viewport for URL synchronization\n // When items become visible, we update the URL to reflect the current page\n itemsObserver = intersectionObservers.new((entry: IntersectionObserverEntry) =>\n options.onItemIntersected(entry.target as HTMLElement),\n )\n\n // Set up trigger zones at start/end that load more content when intersected. The rootMargin\n // creates a buffer zone so loading starts before user reaches the edge. We should always\n // have a root margin of at least 1px as our default elements have no height\n const observerOptions: IntersectionObserverInit = {\n root: options.getScrollableParent(),\n rootMargin: `${Math.max(1, options.getTriggerMargin())}px`,\n }\n\n startElementObserver = intersectionObservers.new(options.onPreviousTriggered, observerOptions)\n endElementObserver = intersectionObservers.new(options.onNextTriggered, observerOptions)\n }\n\n const enableTriggers = () => {\n if (triggersEnabled) {\n // Make sure we don't register multiple watchers\n disableTriggers()\n }\n\n const startElement = options.getStartElement()\n const endElement = options.getEndElement()\n\n if (startElement && options.shouldFetchPrevious()) {\n startElementObserver.observe(startElement)\n }\n\n if (endElement && options.shouldFetchNext()) {\n endElementObserver.observe(endElement)\n }\n\n triggersEnabled = true\n }\n\n const disableTriggers = () => {\n if (!triggersEnabled) {\n return\n }\n\n startElementObserver.disconnect()\n endElementObserver.disconnect()\n triggersEnabled = false\n }\n\n const refreshTriggers = () => {\n if (triggersEnabled) {\n enableTriggers()\n }\n }\n\n const flushAll = () => {\n disableTriggers()\n intersectionObservers.flushAll()\n itemsMutationObserver?.disconnect()\n }\n\n const addedElements = new Set<HTMLElement>()\n\n const elementIsUntagged = (element: HTMLElement): boolean =>\n !(INFINITE_SCROLL_PAGE_KEY in element.dataset) && !(INFINITE_SCROLL_IGNORE_KEY in element.dataset)\n\n const processManuallyAddedElements = () => {\n // Tag manually added elements so they don't interfere with URL management\n // These elements get marked as \"ignore\" since they weren't loaded from the server\n Array.from(addedElements).forEach((element) => {\n if (elementIsUntagged(element)) {\n element.dataset[INFINITE_SCROLL_IGNORE_KEY] = 'true'\n }\n\n itemsObserver.observe(element)\n })\n\n addedElements.clear()\n }\n\n const findUntaggedElements = (containerElement: HTMLElement): HTMLElement[] => {\n return Array.from(\n containerElement.querySelectorAll(\n `:scope > *:not([data-infinite-scroll-page]):not([data-infinite-scroll-ignore])`,\n ),\n )\n }\n\n let hasRestoredElements = false\n\n const processServerLoadedElements = (loadedPage: string | number | null) => {\n // On first run, try to restore the elements tags from browser history\n if (!hasRestoredElements) {\n hasRestoredElements = true\n\n if (restoreElements()) {\n return\n }\n }\n\n // Tag new server-loaded elements with their page number for URL management\n // This allows us to update the URL based on which page's content is most visible\n findUntaggedElements(options.getItemsElement()).forEach((element) => {\n if (elementIsUntagged(element)) {\n element.dataset[INFINITE_SCROLL_PAGE_KEY] = loadedPage?.toString() || '1'\n }\n\n itemsObserver.observe(element)\n })\n\n rememberElements()\n }\n\n const getElementsRememberKey = () => `inertia:infinite-scroll-elements:${options.getPropName()}`\n\n // Remember in browser history which elements belong to which page, so we can restore\n // them on back/forward navigation and keep URL synchronization working correctly\n const rememberElements = () => {\n const pageElementRange: Record<string, ElementRange> = {}\n const childNodes = options.getItemsElement().childNodes\n\n for (let index = 0; index < childNodes.length; index++) {\n const node = childNodes[index]\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue\n }\n\n const page = getPageFromElement(node as HTMLElement)\n\n if (typeof page === 'undefined') {\n continue\n }\n\n if (!(page in pageElementRange)) {\n pageElementRange[page] = { from: index, to: index }\n } else {\n pageElementRange[page].to = index\n }\n }\n\n router.remember(pageElementRange, getElementsRememberKey())\n }\n\n const rememberElementsDebounced = debounce(rememberElements, 250)\n\n const restoreElements = (): boolean => {\n const pageElementRange = router.restore(getElementsRememberKey()) as Record<string, ElementRange> | undefined\n\n if (!pageElementRange || typeof pageElementRange !== 'object') {\n return false\n }\n\n const childNodes = options.getItemsElement().childNodes\n\n // Use for loop instead of forEach for better performance\n for (let index = 0; index < childNodes.length; index++) {\n const node = childNodes[index]\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue\n }\n\n const element = node as HTMLElement\n\n // Find which page this element belongs to based on ranges\n let elementPage: string | undefined\n\n for (const [page, range] of Object.entries(pageElementRange)) {\n if (index >= range.from && index <= range.to) {\n elementPage = page\n break\n }\n }\n\n if (elementPage) {\n element.dataset[INFINITE_SCROLL_PAGE_KEY] = elementPage\n } else if (!elementIsUntagged(element)) {\n continue\n } else {\n element.dataset[INFINITE_SCROLL_IGNORE_KEY] = 'true'\n }\n\n itemsObserver.observe(element)\n }\n\n return true\n }\n\n return {\n setupObservers,\n enableTriggers,\n disableTriggers,\n refreshTriggers,\n flushAll,\n processManuallyAddedElements,\n processServerLoadedElements,\n }\n}\n", "import { hrefToUrl, router, urlHasProtocol, urlToString } from '..'\nimport debounce from '../debounce'\nimport { getElementsInViewportFromCollection } from '../domUtils'\nimport { page as currentPage } from './../page'\nimport Queue from './../queue'\nimport { getPageFromElement } from './elements'\n\n// Shared queue among all instances to ensure URL updates are processed sequentially\nconst queue = new Queue<Promise<void>>()\n\nlet initialUrl: URL | null\nlet payloadUrl: URL | null\nlet initialUrlWasAbsolute: boolean | null = null\n\n/**\n * As users scroll through infinite content, this system updates the URL to reflect\n * which page they're currently viewing. It uses a \"most visible page\" calculation\n * so that the URL reflects whichever page has the most visible items.\n */\nexport const useInfiniteScrollQueryString = (options: {\n getPageName: () => string\n getItemsElement: () => HTMLElement\n shouldPreserveUrl: () => boolean\n}) => {\n let enabled = true\n\n const queuePageUpdate = (page: string) => {\n queue\n .add(() => {\n return new Promise((resolve) => {\n if (!enabled) {\n initialUrl = payloadUrl = null\n return resolve()\n }\n\n if (!initialUrl || !payloadUrl) {\n const currentPageUrl = currentPage.get().url\n initialUrl = hrefToUrl(currentPageUrl)\n payloadUrl = hrefToUrl(currentPageUrl)\n initialUrlWasAbsolute = urlHasProtocol(currentPageUrl)\n }\n\n const pageName = options.getPageName()\n const searchParams = payloadUrl.searchParams\n\n // Clean URLs: don't show ?page=1 in the URL, just remove the parameter entirely\n if (page === '1') {\n searchParams.delete(pageName)\n } else {\n searchParams.set(pageName, page)\n }\n\n setTimeout(() => resolve())\n })\n })\n .finally(() => {\n if (\n enabled &&\n initialUrl &&\n payloadUrl &&\n initialUrl.href !== payloadUrl.href &&\n initialUrlWasAbsolute !== null\n ) {\n // Update URL without triggering a page reload or affecting scroll position\n router.replace({\n url: urlToString(payloadUrl, initialUrlWasAbsolute),\n preserveScroll: true,\n preserveState: true,\n })\n }\n\n initialUrl = payloadUrl = initialUrlWasAbsolute = null\n })\n }\n\n // Debounced to avoid excessive URL updates during fast scrolling\n const onItemIntersected = debounce((itemElement: HTMLElement) => {\n const itemsElement = options.getItemsElement()\n\n if (!enabled || options.shouldPreserveUrl() || !itemElement || !itemsElement) {\n return\n }\n\n // Count how many items from each page are currently visible in the viewport\n const pageMap = new Map<string, number>()\n const elements = [...itemsElement.children] as HTMLElement[]\n\n getElementsInViewportFromCollection(elements, itemElement).forEach((element) => {\n const page = getPageFromElement(element) ?? '1'\n\n if (pageMap.has(page)) {\n pageMap.set(page, pageMap.get(page)! + 1)\n } else {\n pageMap.set(page, 1)\n }\n })\n\n // Find the page with the most visible items - this becomes the \"current\" page\n const sortedPages = Array.from(pageMap.entries()).sort((a, b) => b[1] - a[1])\n const mostVisiblePage = sortedPages[0]?.[0]\n\n if (mostVisiblePage !== undefined) {\n queuePageUpdate(mostVisiblePage)\n }\n }, 250)\n\n return {\n onItemIntersected,\n cancel: () => (enabled = false),\n }\n}\n", "import { getElementsInViewportFromCollection } from '../domUtils'\n\n/**\n * When loading content \"before\" the current viewport (e.g. loading page 1 when viewing page 2),\n * new content is prepended to the DOM, which naturally pushes existing content down and\n * disrupts the user's scroll position. This system maintains visual stability by:\n *\n * 1. Capturing a reference element and its position before the update\n * 2. After new content is added, calculating how far that reference element moved\n * 3. Adjusting scroll position to keep the reference element in the same visual location\n */\nexport const useInfiniteScrollPreservation = (options: {\n getScrollableParent: () => HTMLElement | null\n getItemsElement: () => HTMLElement\n}) => {\n const createCallbacks = () => {\n let currentScrollTop: number\n let referenceElement: Element | null = null\n let referenceElementTop: number = 0\n\n const captureScrollPosition = () => {\n const scrollableContainer = options.getScrollableParent()\n const itemsElement = options.getItemsElement()\n\n // Capture current scroll position\n currentScrollTop = scrollableContainer?.scrollTop || window.scrollY\n\n // Find the first visible element to use as a reference point\n // This element will help us calculate how much the content shifted after the update\n const visibleElements = getElementsInViewportFromCollection([...itemsElement.children] as HTMLElement[])\n\n if (visibleElements.length > 0) {\n referenceElement = visibleElements[0]\n const containerRect = scrollableContainer?.getBoundingClientRect() || { top: 0 }\n const containerTop = scrollableContainer ? containerRect.top : 0\n const rect = referenceElement.getBoundingClientRect()\n // Store the reference element's position relative to its container\n referenceElementTop = rect.top - containerTop\n }\n }\n\n const restoreScrollPosition = () => {\n if (!referenceElement) {\n return\n }\n\n let attempts = 0\n let restored = false\n\n const restore = () => {\n attempts++\n\n if (restored || attempts > 10) {\n return false\n }\n\n // Calculate where our reference element ended up after new content was prepended\n const scrollableContainer = options.getScrollableParent()\n const containerRect = scrollableContainer?.getBoundingClientRect() || { top: 0 }\n const containerTop = scrollableContainer ? containerRect.top : 0\n const newRect = referenceElement!.getBoundingClientRect()\n const newElementTop = newRect.top - containerTop\n\n // Calculate how much the reference element moved due to content being prepended\n const adjustment = newElementTop - referenceElementTop\n\n if (adjustment === 0) {\n // Try again on the next frame, as DOM may still be updating\n window.requestAnimationFrame(restore)\n return\n }\n\n // Adjust scroll position to compensate for the movement, keeping the reference element\n // in the same visual position as before the update\n if (scrollableContainer) {\n scrollableContainer.scrollTo({ top: currentScrollTop + adjustment })\n } else {\n window.scrollTo(0, window.scrollY + adjustment)\n }\n\n restored = true\n }\n\n window.requestAnimationFrame(restore)\n }\n\n return {\n captureScrollPosition,\n restoreScrollPosition,\n }\n }\n\n return {\n createCallbacks,\n }\n}\n", "import { requestAnimationFrame } from './domUtils'\nimport { router } from './index'\nimport { useInfiniteScrollData } from './infiniteScroll/data'\nimport { useInfiniteScrollElementManager } from './infiniteScroll/elements'\nimport { useInfiniteScrollQueryString } from './infiniteScroll/queryString'\nimport { useInfiniteScrollPreservation } from './infiniteScroll/scrollPreservation'\nimport { Page, ReloadOptions, UseInfiniteScrollOptions, UseInfiniteScrollProps } from './types'\n\n/**\n * Core infinite scroll composable that orchestrates data fetching, DOM management,\n * scroll preservation, and URL synchronization.\n *\n * This is the main entry point that coordinates four sub-systems:\n * - Data management: Handles pagination state and server requests\n * - Element management: DOM observation and intersection detection\n * - Query string sync: Updates URL as user scrolls through pages\n * - Scroll preservation: Maintains scroll position during content updates\n */\nexport default function useInfiniteScroll(options: UseInfiniteScrollOptions): UseInfiniteScrollProps {\n const queryStringManager = useInfiniteScrollQueryString({ ...options, getPageName: () => dataManager.getPageName() })\n\n // Create scroll preservation callbacks that capture and restore scroll position\n // and restore it after new content is prepended to maintain visual stability\n const scrollPreservation = useInfiniteScrollPreservation(options)\n\n const elementManager = useInfiniteScrollElementManager({\n ...options,\n // As items enter viewport, update URL to reflect the most visible page\n onItemIntersected: queryStringManager.onItemIntersected,\n onPreviousTriggered: () => dataManager.fetchPrevious(),\n onNextTriggered: () => dataManager.fetchNext(),\n })\n\n const dataManager = useInfiniteScrollData({\n ...options,\n // Before updating page data, tag any manually added DOM elements\n // so they don't get confused with server-loaded content\n onBeforeUpdate: elementManager.processManuallyAddedElements,\n // After successful request, tag new server content\n onCompletePreviousRequest: (loadedPage) => {\n options.onCompletePreviousRequest()\n requestAnimationFrame(() => elementManager.processServerLoadedElements(loadedPage), 2)\n },\n onCompleteNextRequest: (loadedPage) => {\n options.onCompleteNextRequest()\n requestAnimationFrame(() => elementManager.processServerLoadedElements(loadedPage), 2)\n },\n })\n\n const addScrollPreservationCallbacks = (reloadOptions: ReloadOptions): ReloadOptions => {\n const { captureScrollPosition, restoreScrollPosition } = scrollPreservation.createCallbacks()\n\n const originalOnBeforeUpdate = reloadOptions.onBeforeUpdate || (() => {})\n const originalOnSuccess = reloadOptions.onSuccess || (() => {})\n\n reloadOptions.onBeforeUpdate = (page: Page) => {\n originalOnBeforeUpdate(page)\n captureScrollPosition()\n }\n\n reloadOptions.onSuccess = (page: Page) => {\n originalOnSuccess(page)\n restoreScrollPosition()\n }\n\n return reloadOptions\n }\n\n const originalFetchNext = dataManager.fetchNext\n dataManager.fetchNext = (reloadOptions: ReloadOptions = {}) => {\n if (options.inReverseMode()) {\n reloadOptions = addScrollPreservationCallbacks(reloadOptions)\n }\n\n originalFetchNext(reloadOptions)\n }\n\n const originalFetchPrevious = dataManager.fetchPrevious\n dataManager.fetchPrevious = (reloadOptions: ReloadOptions = {}) => {\n if (!options.inReverseMode()) {\n reloadOptions = addScrollPreservationCallbacks(reloadOptions)\n }\n\n originalFetchPrevious(reloadOptions)\n }\n\n const removeEventListener = router.on('success', () => requestAnimationFrame(elementManager.refreshTriggers, 2))\n\n return {\n dataManager,\n elementManager,\n flush: () => {\n removeEventListener()\n dataManager.removeEventListener()\n elementManager.flushAll()\n queryStringManager.cancel()\n },\n }\n}\n", "type MouseNavigationEvent = Pick<\n MouseEvent,\n 'altKey' | 'ctrlKey' | 'shiftKey' | 'metaKey' | 'button' | 'currentTarget' | 'defaultPrevented' | 'target'\n>\n\ntype KeyboardNavigationEvent = Pick<KeyboardEvent, 'currentTarget' | 'defaultPrevented' | 'key' | 'target'>\n\nfunction isContentEditableOrPrevented(event: KeyboardNavigationEvent | MouseNavigationEvent): boolean {\n return (event.target instanceof HTMLElement && event.target.isContentEditable) || event.defaultPrevented\n}\n\n/**\n * Determine if this mouse event should be intercepted for navigation purposes.\n * Links with modifier keys or non-left clicks should not be intercepted.\n * Content editable elements and prevented events are ignored.\n */\nexport function shouldIntercept(event: MouseNavigationEvent): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n\n return !(\n isContentEditableOrPrevented(event) ||\n (isLink && event.altKey) ||\n (isLink && event.ctrlKey) ||\n (isLink && event.metaKey) ||\n (isLink && event.shiftKey) ||\n (isLink && 'button' in event && event.button !== 0)\n )\n}\n\n/**\n * Determine if this keyboard event should trigger a navigation request.\n * Enter triggers navigation for both links and buttons currently.\n * Space only triggers navigation for buttons specifically.\n */\nexport function shouldNavigate(event: KeyboardNavigationEvent): boolean {\n const isButton = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'button'\n\n return !isContentEditableOrPrevented(event) && (event.key === 'Enter' || (isButton && event.key === ' '))\n}\n", "/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\nimport { ProgressSettings } from './types'\n\nconst baseComponentSelector = 'nprogress'\n\nlet progress: HTMLDivElement\n\nconst settings: ProgressSettings = {\n minimum: 0.08,\n easing: 'linear',\n positionUsing: 'translate3d',\n speed: 200,\n trickle: true,\n trickleSpeed: 200,\n showSpinner: true,\n barSelector: '[role=\"bar\"]',\n spinnerSelector: '[role=\"spinner\"]',\n parent: 'body',\n color: '#29d',\n includeCSS: true,\n template: [\n '<div class=\"bar\" role=\"bar\">',\n '<div class=\"peg\"></div>',\n '</div>',\n '<div class=\"spinner\" role=\"spinner\">',\n '<div class=\"spinner-icon\"></div>',\n '</div>',\n ].join(''),\n}\n\nlet status: number | null = null\n\nconst configure = (options: Partial<ProgressSettings>) => {\n Object.assign(settings, options)\n\n if (settings.includeCSS) {\n injectCSS(settings.color)\n }\n\n progress = document.createElement('div')\n progress.id = baseComponentSelector\n progress.innerHTML = settings.template\n}\n\n/**\n * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n */\nconst set = (n: number) => {\n const started = isStarted()\n\n n = clamp(n, settings.minimum, 1)\n status = n === 1 ? null : n\n\n const progress = render(!started)\n const bar = progress.querySelector(settings.barSelector)! as HTMLElement\n const speed = settings.speed\n const ease = settings.easing\n\n progress.offsetWidth /* Repaint */\n\n queue((next) => {\n const barStyles = ((): Partial<CSSStyleDeclaration> => {\n if (settings.positionUsing === 'translate3d') {\n return {\n transition: `all ${speed}ms ${ease}`,\n transform: `translate3d(${toBarPercentage(n)}%,0,0)`,\n }\n }\n\n if (settings.positionUsing === 'translate') {\n return {\n transition: `all ${speed}ms ${ease}`,\n transform: `translate(${toBarPercentage(n)}%,0)`,\n }\n }\n\n return { marginLeft: `${toBarPercentage(n)}%` }\n })()\n\n for (const key in barStyles) {\n bar.style[key] = barStyles[key]!\n }\n\n if (n !== 1) {\n return setTimeout(next, speed)\n }\n\n // Fade out\n progress.style.transition = 'none'\n progress.style.opacity = '1'\n progress.offsetWidth /* Repaint */\n\n setTimeout(() => {\n progress.style.transition = `all ${speed}ms linear`\n progress.style.opacity = '0'\n\n setTimeout(() => {\n remove()\n progress.style.transition = ''\n progress.style.opacity = ''\n next()\n }, speed)\n }, speed)\n })\n}\n\nconst isStarted = () => typeof status === 'number'\n\n/**\n * Shows the progress bar.\n * This is the same as setting the status to 0%, except that it doesn't go backwards.\n */\nconst start = () => {\n if (!status) {\n set(0)\n }\n\n const work = function () {\n setTimeout(function () {\n if (!status) {\n return\n }\n\n increaseByRandom()\n work()\n }, settings.trickleSpeed)\n }\n\n if (settings.trickle) {\n work()\n }\n}\n\n/**\n * Hides the progress bar.\n * This is the *sort of* the same as setting the status to 100%, with the\n * difference being `done()` makes some placebo effect of some realistic motion.\n *\n * If `true` is passed, it will show the progress bar even if it's hidden.\n */\nconst done = (force?: boolean) => {\n if (!force && !status) {\n return\n }\n\n increaseByRandom(0.3 + 0.5 * Math.random())\n set(1)\n}\n\nconst increaseByRandom = (amount?: number) => {\n const n = status\n\n if (n === null) {\n return start()\n }\n\n if (n > 1) {\n return\n }\n\n amount =\n typeof amount === 'number'\n ? amount\n : (() => {\n const ranges: Record<number, [number, number]> = {\n 0.1: [0, 0.2],\n 0.04: [0.2, 0.5],\n 0.02: [0.5, 0.8],\n 0.005: [0.8, 0.99],\n }\n\n for (const r in ranges) {\n if (n >= ranges[r][0] && n < ranges[r][1]) {\n return parseFloat(r)\n }\n }\n\n return 0\n })()\n\n return set(clamp(n + amount, 0, 0.994))\n}\n\n/**\n * (Internal) renders the progress bar markup based on the `template` setting.\n */\nconst render = (fromStart: boolean) => {\n if (isRendered()) {\n return document.getElementById(baseComponentSelector)!\n }\n\n document.documentElement.classList.add(`${baseComponentSelector}-busy`)\n\n const bar = progress.querySelector(settings.barSelector)! as HTMLElement\n const perc = fromStart ? '-100' : toBarPercentage(status || 0)\n const parent = getParent()\n\n bar.style.transition = 'all 0 linear'\n bar.style.transform = `translate3d(${perc}%,0,0)`\n\n if (!settings.showSpinner) {\n progress.querySelector(settings.spinnerSelector)?.remove()\n }\n\n if (parent !== document.body) {\n parent.classList.add(`${baseComponentSelector}-custom-parent`)\n }\n\n parent.appendChild(progress)\n\n return progress\n}\n\nconst getParent = (): HTMLElement => {\n return (isDOM(settings.parent) ? settings.parent : document.querySelector(settings.parent)) as HTMLElement\n}\n\nconst remove = () => {\n document.documentElement.classList.remove(`${baseComponentSelector}-busy`)\n getParent().classList.remove(`${baseComponentSelector}-custom-parent`)\n progress?.remove()\n}\n\nconst isRendered = () => {\n return document.getElementById(baseComponentSelector) !== null\n}\n\nconst isDOM = (obj: any) => {\n if (typeof HTMLElement === 'object') {\n return obj instanceof HTMLElement\n }\n\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string'\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n if (n < min) {\n return min\n }\n\n if (n > max) {\n return max\n }\n\n return n\n}\n\n// Converts a percentage (`0..1`) to a bar translateX percentage (`-100%..0%`).\nconst toBarPercentage = (n: number) => (-1 + n) * 100\n\n// Queues a function to be executed.\nconst queue = (() => {\n const pending: ((...args: any[]) => any)[] = []\n\n const next = () => {\n const fn = pending.shift()\n\n if (fn) {\n fn(next)\n }\n }\n\n return (fn: (...args: any[]) => any) => {\n pending.push(fn)\n\n if (pending.length === 1) {\n next()\n }\n }\n})()\n\nconst injectCSS = (color: string): void => {\n const element = document.createElement('style')\n\n element.textContent = `\n #${baseComponentSelector} {\n pointer-events: none;\n }\n\n #${baseComponentSelector} .bar {\n background: ${color};\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n #${baseComponentSelector} .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px ${color}, 0 0 5px ${color};\n opacity: 1.0;\n\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n #${baseComponentSelector} .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #${baseComponentSelector} .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: ${color};\n border-left-color: ${color};\n border-radius: 50%;\n\n animation: ${baseComponentSelector}-spinner 400ms linear infinite;\n }\n\n .${baseComponentSelector}-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .${baseComponentSelector}-custom-parent #${baseComponentSelector} .spinner,\n .${baseComponentSelector}-custom-parent #${baseComponentSelector} .bar {\n position: absolute;\n }\n\n @keyframes ${baseComponentSelector}-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nconst show = () => {\n if (progress) {\n progress.style.display = ''\n }\n}\n\nconst hide = () => {\n if (progress) {\n progress.style.display = 'none'\n }\n}\n\nexport default {\n configure,\n isStarted,\n done,\n set,\n remove,\n start,\n status,\n show,\n hide,\n}\n", "import ProgressComponent from './progress-component'\nimport { GlobalEvent } from './types'\n\nclass Progress {\n public hideCount = 0\n\n public start(): void {\n ProgressComponent.start()\n }\n\n public reveal(force: boolean = false): void {\n this.hideCount = Math.max(0, this.hideCount - 1)\n\n if (force || this.hideCount === 0) {\n ProgressComponent.show()\n }\n }\n\n public hide(): void {\n this.hideCount++\n\n ProgressComponent.hide()\n }\n\n public set(status: number): void {\n ProgressComponent.set(Math.max(0, Math.min(1, status)))\n }\n\n public finish(): void {\n ProgressComponent.done()\n }\n\n public reset(): void {\n ProgressComponent.set(0)\n }\n\n public remove(): void {\n ProgressComponent.done()\n ProgressComponent.remove()\n }\n\n public isStarted(): boolean {\n return ProgressComponent.isStarted()\n }\n\n public getStatus(): number | null {\n return ProgressComponent.status\n }\n}\n\nexport const progress = new Progress()\nexport const reveal = progress.reveal\nexport const hide = progress.hide\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', (e) => handleStartEvent(e, delay))\n document.addEventListener('inertia:progress', handleProgressEvent)\n}\n\nfunction handleStartEvent(event: GlobalEvent<'start'>, delay: number): void {\n if (!event.detail.visit.showProgress) {\n progress.hide()\n }\n\n const timeout = setTimeout(() => progress.start(), delay)\n document.addEventListener('inertia:finish', (e) => finish(e, timeout), { once: true })\n}\n\nfunction handleProgressEvent(event: GlobalEvent<'progress'>): void {\n if (progress.isStarted() && event.detail.progress?.percentage) {\n progress.set(Math.max(progress.getStatus()!, (event.detail.progress.percentage / 100) * 0.9))\n }\n}\n\nfunction finish(event: GlobalEvent<'finish'>, timeout: NodeJS.Timeout): void {\n clearTimeout(timeout!)\n\n if (!progress.isStarted()) {\n return\n }\n\n if (event.detail.visit.completed) {\n progress.finish()\n } else if (event.detail.visit.interrupted) {\n progress.reset()\n } else if (event.detail.visit.cancelled) {\n progress.remove()\n }\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n ProgressComponent.configure({ showSpinner, includeCSS, color })\n}\n", "type FormElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n\nfunction isFormElement(element: Element): element is FormElement {\n return (\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement\n )\n}\n\nfunction resetInputElement(input: HTMLInputElement, defaultValues: FormDataEntryValue[]): boolean {\n const oldValue = input.value\n const oldChecked = input.checked\n\n switch (input.type.toLowerCase()) {\n case 'checkbox':\n // For checkboxes, check if the input's value is in the array of default values\n input.checked = defaultValues.includes(input.value)\n break\n case 'radio':\n // For radios, only use the first default value to avoid multiple radios being checked\n input.checked = defaultValues[0] === input.value\n break\n case 'file':\n input.value = ''\n break\n case 'button':\n case 'submit':\n case 'reset':\n case 'image':\n // These input types don't carry form state\n break\n default:\n // text, email, number, date, etc. - use first default value\n input.value = defaultValues[0] !== null && defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n }\n\n // Return true if the value actually changed\n return input.value !== oldValue || input.checked !== oldChecked\n}\n\nfunction resetSelectElement(select: HTMLSelectElement, defaultValues: FormDataEntryValue[]): boolean {\n const oldValue = select.value\n const oldSelectedOptions = Array.from(select.selectedOptions).map((opt) => opt.value)\n\n if (select.multiple) {\n // For multi-select, select all options that match any of the default values\n const defaultStrings = defaultValues.map((value) => String(value))\n\n Array.from(select.options).forEach((option) => {\n option.selected = defaultStrings.includes(option.value)\n })\n } else {\n // For single select, use the first default value (or empty string)\n select.value = defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n }\n\n // Check if selection actually changed\n const newSelectedOptions = Array.from(select.selectedOptions).map((opt) => opt.value)\n const hasChanged = select.multiple\n ? JSON.stringify(oldSelectedOptions.sort()) !== JSON.stringify(newSelectedOptions.sort())\n : select.value !== oldValue\n\n return hasChanged\n}\n\nfunction resetFormElement(element: FormElement, defaultValues: FormDataEntryValue[]): boolean {\n if (element.disabled) {\n // For disabled elements, use their DOM defaultValue since they're not in FormData\n if (element instanceof HTMLInputElement) {\n const oldValue = element.value\n const oldChecked = element.checked\n\n switch (element.type.toLowerCase()) {\n case 'checkbox':\n case 'radio':\n element.checked = element.defaultChecked\n return element.checked !== oldChecked\n case 'file':\n element.value = ''\n return oldValue !== ''\n case 'button':\n case 'submit':\n case 'reset':\n case 'image':\n // These input types don't carry form state\n return false\n default:\n element.value = element.defaultValue\n return element.value !== oldValue\n }\n } else if (element instanceof HTMLSelectElement) {\n // Reset select to default selected options\n const oldSelectedOptions = Array.from(element.selectedOptions).map((opt) => opt.value)\n\n Array.from(element.options).forEach((option) => {\n option.selected = option.defaultSelected\n })\n\n const newSelectedOptions = Array.from(element.selectedOptions).map((opt) => opt.value)\n return JSON.stringify(oldSelectedOptions.sort()) !== JSON.stringify(newSelectedOptions.sort())\n } else if (element instanceof HTMLTextAreaElement) {\n const oldValue = element.value\n element.value = element.defaultValue\n return element.value !== oldValue\n }\n\n return false\n }\n\n if (element instanceof HTMLInputElement) {\n // Pass all default values to handle checkboxes and radios correctly\n return resetInputElement(element, defaultValues)\n } else if (element instanceof HTMLSelectElement) {\n return resetSelectElement(element, defaultValues)\n } else if (element instanceof HTMLTextAreaElement) {\n const oldValue = element.value\n element.value = defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n return element.value !== oldValue\n }\n\n return false\n}\n\nfunction resetFieldElements(\n elements: Element | RadioNodeList | HTMLCollection,\n defaultValues: FormDataEntryValue[],\n): boolean {\n let hasChanged = false\n\n if (elements instanceof RadioNodeList || elements instanceof HTMLCollection) {\n // Handle multiple elements with the same name (e.g., radio buttons, checkboxes, array fields)\n Array.from(elements).forEach((node, index) => {\n if (node instanceof Element && isFormElement(node)) {\n if (node instanceof HTMLInputElement && ['checkbox', 'radio'].includes(node.type.toLowerCase())) {\n // For checkboxes and radios, pass all default values for value-based matching\n if (resetFormElement(node, defaultValues)) {\n hasChanged = true\n }\n } else {\n // For other array elements (like text inputs), use index-based matching\n const indexedDefaultValues =\n defaultValues[index] !== undefined ? [defaultValues[index]] : [defaultValues[0] ?? null].filter(Boolean)\n\n if (resetFormElement(node, indexedDefaultValues)) {\n hasChanged = true\n }\n }\n }\n })\n } else if (isFormElement(elements)) {\n // Handle single element - pass all default values (important for multi-selects)\n hasChanged = resetFormElement(elements, defaultValues)\n }\n\n return hasChanged\n}\n\nexport function resetFormFields(formElement: HTMLFormElement, defaults: FormData, fieldNames?: string[]): void {\n if (!formElement) {\n return\n }\n\n const resetEntireForm = !fieldNames || fieldNames.length === 0\n\n // If no specific fields provided, reset the entire form\n if (resetEntireForm) {\n // Get all field names from both defaults and form elements (including disabled ones)\n const formData = new FormData(formElement)\n const formElementNames = Array.from(formElement.elements)\n .map((el) => (isFormElement(el) ? el.name : ''))\n .filter(Boolean)\n fieldNames = [...new Set([...defaults.keys(), ...formData.keys(), ...formElementNames])]\n }\n\n let hasChanged = false\n\n fieldNames!.forEach((fieldName) => {\n const elements = formElement.elements.namedItem(fieldName)\n\n if (elements) {\n if (resetFieldElements(elements, defaults.getAll(fieldName))) {\n hasChanged = true\n }\n }\n })\n\n // Dispatch reset event if any field changed (matching native form.reset() behavior)\n if (hasChanged && resetEntireForm) {\n formElement.dispatchEvent(new Event('reset', { bubbles: true }))\n }\n}\n"],
|
|
5
|
-
"mappings": "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",
|
|
4
|
+
"sourcesContent": ["import { Config } from './config'\nimport { Router } from './router'\n\nexport { UseFormUtils } from './useFormUtils'\n\nexport { config } from './config'\nexport { getInitialPageFromDOM, getScrollableParent } from './domUtils'\nexport { objectToFormData } from './formData'\nexport { formDataToObject } from './formObject'\nexport { default as createHeadManager } from './head'\nexport { default as useInfiniteScroll } from './infiniteScroll'\nexport { shouldIntercept, shouldNavigate } from './navigationEvents'\nexport { hide as hideProgress, progress, reveal as revealProgress, default as setupProgress } from './progress'\nexport { resetFormFields } from './resetFormFields'\nexport * from './types'\nexport {\n hrefToUrl,\n isUrlMethodPair,\n mergeDataIntoQueryString,\n urlHasProtocol,\n urlToString,\n urlWithoutHash,\n} from './url'\nexport { type Config, type Router }\n\nexport const router = new Router()\n", "import { cloneDeep, get, set } from 'lodash-es'\nimport { progress } from '.'\nimport { config } from './config'\nimport { eventHandler } from './eventHandler'\nimport { fireBeforeEvent, fireFlashEvent } from './events'\nimport { history } from './history'\nimport { InitialVisit } from './initialVisit'\nimport { page as currentPage } from './page'\nimport { polls } from './polls'\nimport { prefetchedRequests } from './prefetched'\nimport Queue from './queue'\nimport { Request } from './request'\nimport { RequestParams } from './requestParams'\nimport { RequestStream } from './requestStream'\nimport { Scroll } from './scroll'\nimport {\n ActiveVisit,\n ClientSideVisitOptions,\n Component,\n FlashData,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n InFlightPrefetch,\n Method,\n Page,\n PageFlashData,\n PendingVisit,\n PendingVisitOptions,\n PollOptions,\n PrefetchedResponse,\n PrefetchOptions,\n ReloadOptions,\n RequestPayload,\n RouterInitParams,\n UrlMethodPair,\n Visit,\n VisitCallbacks,\n VisitHelperOptions,\n VisitOptions,\n} from './types'\nimport { isUrlMethodPair, transformUrlAndData } from './url'\n\nexport class Router {\n protected syncRequestStream = new RequestStream({\n maxConcurrent: 1,\n interruptible: true,\n })\n\n protected asyncRequestStream = new RequestStream({\n maxConcurrent: Infinity,\n interruptible: false,\n })\n\n protected clientVisitQueue = new Queue<Promise<void>>()\n\n public init<ComponentType = Component>({\n initialPage,\n resolveComponent,\n swapComponent,\n onFlash,\n }: RouterInitParams<ComponentType>): void {\n currentPage.init({\n initialPage,\n resolveComponent,\n swapComponent,\n onFlash,\n })\n\n InitialVisit.handle()\n\n eventHandler.init()\n\n eventHandler.on('missingHistoryItem', () => {\n if (typeof window !== 'undefined') {\n this.visit(window.location.href, { preserveState: true, preserveScroll: true, replace: true })\n }\n })\n\n eventHandler.on('loadDeferredProps', (deferredProps: Page['deferredProps']) => {\n this.loadDeferredProps(deferredProps)\n })\n\n eventHandler.on('historyQuotaExceeded', (url) => {\n window.location.href = url\n })\n }\n\n public get<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { ...options, method: 'get', data })\n }\n\n public post<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'post', data })\n }\n\n public put<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'put', data })\n }\n\n public patch<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n data: T = {} as T,\n options: VisitHelperOptions<T> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'patch', data })\n }\n\n public delete<T extends RequestPayload = RequestPayload>(\n url: URL | string | UrlMethodPair,\n options: Omit<VisitOptions<T>, 'method'> = {},\n ): void {\n return this.visit(url, { preserveState: true, ...options, method: 'delete' })\n }\n\n public reload<T extends RequestPayload = RequestPayload>(options: ReloadOptions<T> = {}): void {\n return this.doReload(options)\n }\n\n protected doReload<T extends RequestPayload = RequestPayload>(\n options: ReloadOptions<T> & {\n deferredProps?: boolean\n } = {},\n ): void {\n if (typeof window === 'undefined') {\n return\n }\n\n return this.visit(window.location.href, {\n ...options,\n preserveScroll: true,\n preserveState: true,\n async: true,\n headers: {\n ...(options.headers || {}),\n 'Cache-Control': 'no-cache',\n },\n })\n }\n\n public remember(data: unknown, key = 'default'): void {\n history.remember(data, key)\n }\n\n public restore<T = unknown>(key = 'default'): T | undefined {\n return history.restore(key) as T | undefined\n }\n\n public on<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n if (typeof window === 'undefined') {\n return () => {}\n }\n\n return eventHandler.onGlobalEvent(type, callback)\n }\n\n public cancel(): void {\n this.syncRequestStream.cancelInFlight()\n }\n\n public cancelAll(): void {\n this.asyncRequestStream.cancelInFlight()\n this.syncRequestStream.cancelInFlight()\n }\n\n public poll(interval: number, requestOptions: ReloadOptions = {}, options: PollOptions = {}) {\n return polls.add(interval, () => this.reload(requestOptions), {\n autoStart: options.autoStart ?? true,\n keepAlive: options.keepAlive ?? false,\n })\n }\n\n public visit<T extends RequestPayload = RequestPayload>(\n href: string | URL | UrlMethodPair,\n options: VisitOptions<T> = {},\n ): void {\n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n showProgress: options.showProgress ?? !options.async,\n } as VisitOptions)\n\n const events = this.getVisitEvents(options as VisitOptions)\n\n // If either of these return false, we don't want to continue\n if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n const requestStream = visit.async ? this.asyncRequestStream : this.syncRequestStream\n\n requestStream.interruptInFlight()\n\n if (!currentPage.isCleared() && !visit.preserveUrl) {\n // Save scroll regions for the current page\n Scroll.save()\n }\n\n const requestParams: PendingVisit & VisitCallbacks = {\n ...visit,\n ...events,\n }\n\n const prefetched = prefetchedRequests.get(requestParams)\n\n if (prefetched) {\n progress.reveal(prefetched.inFlight)\n prefetchedRequests.use(prefetched, requestParams)\n } else {\n progress.reveal(true)\n requestStream.send(Request.create(requestParams, currentPage.get()))\n }\n }\n\n public getCached(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n ): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findCached(this.getPrefetchParams(href, options))\n }\n\n public flush(href: string | URL | UrlMethodPair, options: VisitOptions = {}): void {\n prefetchedRequests.remove(this.getPrefetchParams(href, options))\n }\n\n public flushAll(): void {\n prefetchedRequests.removeAll()\n }\n\n public flushByCacheTags(tags: string | string[]): void {\n prefetchedRequests.removeByTags(Array.isArray(tags) ? tags : [tags])\n }\n\n public getPrefetching(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n ): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findInFlight(this.getPrefetchParams(href, options))\n }\n\n public prefetch(\n href: string | URL | UrlMethodPair,\n options: VisitOptions = {},\n prefetchOptions: Partial<PrefetchOptions> = {},\n ) {\n const method: Method = options.method ?? (isUrlMethodPair(href) ? href.method : 'get')\n\n if (method !== 'get') {\n throw new Error('Prefetch requests must use the GET method')\n }\n\n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n async: true,\n showProgress: false,\n prefetch: true,\n viewTransition: false,\n })\n\n const visitUrl = visit.url.origin + visit.url.pathname + visit.url.search\n const currentUrl = window.location.origin + window.location.pathname + window.location.search\n\n if (visitUrl === currentUrl) {\n // Don't prefetch the current page, you're already on it\n return\n }\n\n const events = this.getVisitEvents(options)\n\n // If either of these return false, we don't want to continue\n if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) {\n return\n }\n\n progress.hide()\n\n this.asyncRequestStream.interruptInFlight()\n\n const requestParams: PendingVisit & VisitCallbacks = {\n ...visit,\n ...events,\n }\n\n const ensureCurrentPageIsSet = (): Promise<void> => {\n return new Promise((resolve) => {\n const checkIfPageIsDefined = () => {\n if (currentPage.get()) {\n resolve()\n } else {\n setTimeout(checkIfPageIsDefined, 50)\n }\n }\n\n checkIfPageIsDefined()\n })\n }\n\n ensureCurrentPageIsSet().then(() => {\n prefetchedRequests.add(\n requestParams,\n (params) => {\n this.asyncRequestStream.send(Request.create(params, currentPage.get()))\n },\n {\n cacheFor: config.get('prefetch.cacheFor'),\n cacheTags: [],\n ...prefetchOptions,\n },\n )\n })\n }\n\n public clearHistory(): void {\n history.clear()\n }\n\n public decryptHistory(): Promise<Page> {\n return history.decrypt()\n }\n\n public resolveComponent(component: string): Promise<Component> {\n return currentPage.resolve(component)\n }\n\n public replace<TProps = Page['props']>(params: ClientSideVisitOptions<TProps>): void {\n this.clientVisit(params, { replace: true })\n }\n\n public replaceProp<TProps = Page['props']>(\n name: string,\n value: unknown | ((oldValue: unknown, props: TProps) => unknown),\n options?: Pick<ClientSideVisitOptions, 'onError' | 'onFinish' | 'onSuccess'>,\n ): void {\n this.replace({\n preserveScroll: true,\n preserveState: true,\n props(currentProps) {\n const newValue = typeof value === 'function' ? value(get(currentProps, name), currentProps) : value\n\n return set(cloneDeep(currentProps), name, newValue)\n },\n ...(options || {}),\n })\n }\n\n public appendToProp<TProps = Page['props']>(\n name: string,\n value: unknown | unknown[] | ((oldValue: unknown, props: TProps) => unknown | unknown[]),\n options?: Pick<ClientSideVisitOptions, 'onError' | 'onFinish' | 'onSuccess'>,\n ): void {\n this.replaceProp(\n name,\n (currentValue: unknown, currentProps: TProps) => {\n const newValue = typeof value === 'function' ? value(currentValue, currentProps) : value\n\n if (!Array.isArray(currentValue)) {\n currentValue = currentValue !== undefined ? [currentValue] : []\n }\n\n return [...(currentValue as unknown[]), newValue]\n },\n options,\n )\n }\n\n public prependToProp<TProps = Page['props']>(\n name: string,\n value: unknown | unknown[] | ((oldValue: unknown, props: TProps) => unknown | unknown[]),\n options?: Pick<ClientSideVisitOptions, 'onError' | 'onFinish' | 'onSuccess'>,\n ): void {\n this.replaceProp(\n name,\n (currentValue: unknown, currentProps: TProps) => {\n const newValue = typeof value === 'function' ? value(currentValue, currentProps) : value\n\n if (!Array.isArray(currentValue)) {\n currentValue = currentValue !== undefined ? [currentValue] : []\n }\n\n return [newValue, ...(currentValue as unknown[])]\n },\n options,\n )\n }\n\n public push<TProps = Page['props']>(params: ClientSideVisitOptions<TProps>): void {\n this.clientVisit(params)\n }\n\n public flash<TFlash extends PageFlashData = PageFlashData>(\n keyOrData: string | ((flash: FlashData) => TFlash) | TFlash,\n value?: unknown,\n ): void {\n const current = currentPage.get().flash\n let flash: PageFlashData\n\n if (typeof keyOrData === 'function') {\n flash = keyOrData(current)\n } else if (typeof keyOrData === 'string') {\n flash = { ...current, [keyOrData]: value }\n } else if (keyOrData && Object.keys(keyOrData).length) {\n flash = { ...current, ...keyOrData }\n } else {\n return\n }\n\n currentPage.setFlash(flash)\n\n if (Object.keys(flash).length) {\n fireFlashEvent(flash)\n }\n }\n\n protected clientVisit<TProps = Page['props']>(\n params: ClientSideVisitOptions<TProps>,\n { replace = false }: { replace?: boolean } = {},\n ): void {\n this.clientVisitQueue.add(() => this.performClientVisit(params, { replace }))\n }\n\n protected performClientVisit<TProps = Page['props']>(\n params: ClientSideVisitOptions<TProps>,\n { replace = false }: { replace?: boolean } = {},\n ): Promise<void> {\n const current = currentPage.get()\n\n const props =\n typeof params.props === 'function' ? params.props(current.props as TProps) : (params.props ?? current.props)\n\n const flash = typeof params.flash === 'function' ? params.flash(current.flash) : params.flash\n\n const { viewTransition, onError, onFinish, onFlash, onSuccess, ...pageParams } = params\n\n const page = {\n ...current,\n ...pageParams,\n flash: flash ?? {},\n props: props as Page['props'],\n }\n\n const preserveScroll = RequestParams.resolvePreserveOption(params.preserveScroll ?? false, page)\n const preserveState = RequestParams.resolvePreserveOption(params.preserveState ?? false, page)\n\n return currentPage\n .set(page, {\n replace,\n preserveScroll,\n preserveState,\n viewTransition,\n })\n .then(() => {\n const currentFlash = currentPage.get().flash\n\n if (Object.keys(currentFlash).length > 0) {\n fireFlashEvent(currentFlash)\n onFlash?.(currentFlash)\n }\n\n const errors = currentPage.get().props.errors || {}\n\n if (Object.keys(errors).length === 0) {\n onSuccess?.(currentPage.get())\n return\n }\n\n const scopedErrors = params.errorBag ? errors[params.errorBag || ''] || {} : errors\n\n onError?.(scopedErrors)\n })\n .finally(() => onFinish?.(params))\n }\n\n protected getPrefetchParams(href: string | URL | UrlMethodPair, options: VisitOptions): ActiveVisit {\n return {\n ...this.getPendingVisit(href, {\n ...options,\n async: true,\n showProgress: false,\n prefetch: true,\n viewTransition: false,\n }),\n ...this.getVisitEvents(options),\n }\n }\n\n protected getPendingVisit(\n href: string | URL | UrlMethodPair,\n options: VisitOptions,\n pendingVisitOptions: Partial<PendingVisitOptions> = {},\n ): PendingVisit {\n if (isUrlMethodPair(href)) {\n const urlMethodPair = href\n href = urlMethodPair.url\n options.method = options.method ?? urlMethodPair.method\n }\n\n const defaultVisitOptionsCallback = config.get('visitOptions')\n\n const configuredOptions = defaultVisitOptionsCallback\n ? defaultVisitOptionsCallback(href.toString(), cloneDeep(options)) || {}\n : {}\n\n const mergedOptions: Visit = {\n method: 'get',\n data: {},\n replace: false,\n preserveScroll: false,\n preserveState: false,\n only: [],\n except: [],\n headers: {},\n errorBag: '',\n forceFormData: false,\n queryStringArrayFormat: 'brackets',\n async: false,\n showProgress: true,\n fresh: false,\n reset: [],\n preserveUrl: false,\n prefetch: false,\n invalidateCacheTags: [],\n viewTransition: false,\n ...options,\n ...configuredOptions,\n }\n\n const [url, _data] = transformUrlAndData(\n href,\n mergedOptions.data,\n mergedOptions.method,\n mergedOptions.forceFormData,\n mergedOptions.queryStringArrayFormat,\n )\n\n const visit = {\n cancelled: false,\n completed: false,\n interrupted: false,\n ...mergedOptions,\n ...pendingVisitOptions,\n url,\n data: _data,\n }\n\n if (visit.prefetch) {\n visit.headers['Purpose'] = 'prefetch'\n }\n\n return visit\n }\n\n protected getVisitEvents(options: VisitOptions): VisitCallbacks {\n return {\n onCancelToken: options.onCancelToken || (() => {}),\n onBefore: options.onBefore || (() => {}),\n onBeforeUpdate: options.onBeforeUpdate || (() => {}),\n onStart: options.onStart || (() => {}),\n onProgress: options.onProgress || (() => {}),\n onFinish: options.onFinish || (() => {}),\n onCancel: options.onCancel || (() => {}),\n onSuccess: options.onSuccess || (() => {}),\n onError: options.onError || (() => {}),\n onFlash: options.onFlash || (() => {}),\n onPrefetched: options.onPrefetched || (() => {}),\n onPrefetching: options.onPrefetching || (() => {}),\n }\n }\n\n protected loadDeferredProps(deferred: Page['deferredProps']): void {\n if (deferred) {\n Object.entries(deferred).forEach(([_, group]) => {\n this.doReload({ only: group, deferredProps: true })\n })\n }\n }\n}\n", "import { get, has, set } from 'lodash-es'\nimport { InertiaAppConfig } from './types'\n\n// Generate all possible nested paths\ntype ConfigKeys<T> = T extends Function\n ? never\n : string extends keyof T\n ? string\n :\n | Extract<keyof T, string>\n | {\n [Key in Extract<keyof T, string>]: T[Key] extends object ? `${Key}.${ConfigKeys<T[Key]> & string}` : never\n }[Extract<keyof T, string>]\n\n// Extract the value type at a given path\ntype ConfigValue<T, K extends ConfigKeys<T>> = K extends `${infer P}.${infer Rest}`\n ? P extends keyof T\n ? Rest extends ConfigKeys<T[P]>\n ? ConfigValue<T[P], Rest>\n : never\n : never\n : K extends keyof T\n ? T[K]\n : never\n\n// Helper type for setting multiple config values with an object\ntype ConfigSetObject<T> = {\n [K in ConfigKeys<T>]?: ConfigValue<T, K>\n}\n\ntype FirstLevelOptional<T> = {\n [K in keyof T]?: T[K] extends object ? { [P in keyof T[K]]?: T[K][P] } : T[K]\n}\n\nexport class Config<TConfig extends {} = {}> {\n protected config: FirstLevelOptional<TConfig> = {}\n protected defaults: TConfig\n\n public constructor(defaults: TConfig) {\n this.defaults = defaults\n }\n\n public extend<TExtension extends {}>(defaults?: TExtension): Config<TConfig & TExtension> {\n if (defaults) {\n this.defaults = { ...this.defaults, ...defaults } as TConfig & TExtension\n }\n\n return this as unknown as Config<TConfig & TExtension>\n }\n\n public replace(newConfig: FirstLevelOptional<TConfig>): void {\n this.config = newConfig\n }\n\n public get<K extends ConfigKeys<TConfig>>(key: K): ConfigValue<TConfig, K> {\n return (has(this.config, key) ? get(this.config, key) : get(this.defaults, key)) as ConfigValue<TConfig, K>\n }\n\n public set<K extends ConfigKeys<TConfig>>(\n keyOrValues: K | Partial<ConfigSetObject<TConfig>>,\n value?: ConfigValue<TConfig, K>,\n ): void {\n if (typeof keyOrValues === 'string') {\n set(this.config, keyOrValues, value)\n } else {\n Object.entries(keyOrValues).forEach(([key, val]) => {\n set(this.config, key, val)\n })\n }\n }\n}\n\nexport const config = new Config<InertiaAppConfig>({\n form: {\n recentlySuccessfulDuration: 2_000,\n forceIndicesArrayFormatInFormData: true,\n },\n future: {\n preserveEqualProps: false,\n useDataInertiaHeadAttribute: false,\n useDialogForErrorModal: false,\n useScriptElementForInitialPage: false,\n },\n prefetch: {\n cacheFor: 30_000,\n hoverDelay: 75,\n },\n})\n", "export default function debounce<F extends (...params: any[]) => ReturnType<F>>(fn: F, delay: number): F {\n let timeoutID: NodeJS.Timeout\n return function (...args: unknown[]) {\n clearTimeout(timeoutID)\n timeoutID = setTimeout(() => fn.apply(this, args), delay)\n } as F\n}\n", "import { GlobalEventDetails, GlobalEventNames, GlobalEventTrigger } from './types'\n\nfunction fireEvent<TEventName extends GlobalEventNames>(\n name: TEventName,\n options: CustomEventInit<GlobalEventDetails<TEventName>>,\n): boolean {\n return document.dispatchEvent(new CustomEvent(`inertia:${name}`, options))\n}\n\nexport const fireBeforeEvent: GlobalEventTrigger<'before'> = (visit) => {\n return fireEvent('before', { cancelable: true, detail: { visit } })\n}\n\nexport const fireErrorEvent: GlobalEventTrigger<'error'> = (errors) => {\n return fireEvent('error', { detail: { errors } })\n}\n\nexport const fireExceptionEvent: GlobalEventTrigger<'exception'> = (exception) => {\n return fireEvent('exception', { cancelable: true, detail: { exception } })\n}\n\nexport const fireFinishEvent: GlobalEventTrigger<'finish'> = (visit) => {\n return fireEvent('finish', { detail: { visit } })\n}\n\nexport const fireInvalidEvent: GlobalEventTrigger<'invalid'> = (response) => {\n return fireEvent('invalid', { cancelable: true, detail: { response } })\n}\n\nexport const fireBeforeUpdateEvent: GlobalEventTrigger<'beforeUpdate'> = (page) => {\n return fireEvent('beforeUpdate', { detail: { page } })\n}\n\nexport const fireNavigateEvent: GlobalEventTrigger<'navigate'> = (page) => {\n return fireEvent('navigate', { detail: { page } })\n}\n\nexport const fireProgressEvent: GlobalEventTrigger<'progress'> = (progress) => {\n return fireEvent('progress', { detail: { progress } })\n}\n\nexport const fireStartEvent: GlobalEventTrigger<'start'> = (visit) => {\n return fireEvent('start', { detail: { visit } })\n}\n\nexport const fireSuccessEvent: GlobalEventTrigger<'success'> = (page) => {\n return fireEvent('success', { detail: { page } })\n}\n\nexport const firePrefetchedEvent: GlobalEventTrigger<'prefetched'> = (response, visit) => {\n return fireEvent('prefetched', { detail: { fetchedAt: Date.now(), response: response.data, visit } })\n}\n\nexport const firePrefetchingEvent: GlobalEventTrigger<'prefetching'> = (visit) => {\n return fireEvent('prefetching', { detail: { visit } })\n}\n\nexport const fireFlashEvent: GlobalEventTrigger<'flash'> = (flash) => {\n return fireEvent('flash', { detail: { flash } })\n}\n", "import { cloneDeep, isEqual } from 'lodash-es'\nimport { decryptHistory, encryptHistory, historySessionStorageKeys } from './encryption'\nimport { eventHandler } from './eventHandler'\nimport { page as currentPage } from './page'\nimport Queue from './queue'\nimport { SessionStorage } from './sessionStorage'\nimport { Page, ScrollRegion } from './types'\n\nconst isServer = typeof window === 'undefined'\nconst queue = new Queue<Promise<void>>()\nconst isChromeIOS = !isServer && /CriOS/.test(window.navigator.userAgent)\n\nclass History {\n public rememberedState = 'rememberedState' as const\n public scrollRegions = 'scrollRegions' as const\n public preserveUrl = false\n protected current: Partial<Page> = {}\n // We need initialState for `restore`\n protected initialState: Partial<Page> | null = null\n\n public remember(data: unknown, key: string): void {\n this.replaceState({\n ...currentPage.getWithoutFlashData(),\n rememberedState: {\n ...(currentPage.get()?.rememberedState ?? {}),\n [key]: data,\n },\n })\n }\n\n public restore(key: string): unknown {\n if (!isServer) {\n return this.current[this.rememberedState]?.[key] !== undefined\n ? this.current[this.rememberedState]?.[key]\n : this.initialState?.[this.rememberedState]?.[key]\n }\n }\n\n public pushState(page: Page, cb: (() => void) | null = null): void {\n if (isServer) {\n return\n }\n\n if (this.preserveUrl) {\n cb && cb()\n return\n }\n\n this.current = page\n\n queue.add(() => {\n return this.getPageData(page).then((data) => {\n // Defer history.pushState to the next event loop tick to prevent timing conflicts.\n // Ensure any previous history.replaceState completes before pushState is executed.\n const doPush = () => this.doPushState({ page: data }, page.url).then(() => cb?.())\n\n if (isChromeIOS) {\n return new Promise((resolve) => {\n setTimeout(() => doPush().then(resolve))\n })\n }\n\n return doPush()\n })\n })\n }\n\n protected clonePageProps(page: Page): Page {\n try {\n structuredClone(page.props)\n return page\n } catch {\n // Props contain non-serializable data (e.g., Proxies, functions).\n // Clone them to ensure they can be safely stored in browser history.\n return {\n ...page,\n props: cloneDeep(page.props),\n }\n }\n }\n\n protected getPageData(page: Page): Promise<Page | ArrayBuffer> {\n const pageWithClonedProps = this.clonePageProps(page)\n\n return new Promise((resolve) => {\n return page.encryptHistory ? encryptHistory(pageWithClonedProps).then(resolve) : resolve(pageWithClonedProps)\n })\n }\n\n public processQueue(): Promise<void> {\n return queue.process()\n }\n\n public decrypt(page: Page | null = null): Promise<Page> {\n if (isServer) {\n return Promise.resolve(page ?? currentPage.get())\n }\n\n const pageData = page ?? window.history.state?.page\n\n return this.decryptPageData(pageData).then((data) => {\n if (!data) {\n throw new Error('Unable to decrypt history')\n }\n\n if (this.initialState === null) {\n this.initialState = data ?? undefined\n } else {\n this.current = data ?? {}\n }\n\n return data\n })\n }\n\n protected decryptPageData(pageData: ArrayBuffer | Page | null): Promise<Page | null> {\n return pageData instanceof ArrayBuffer ? decryptHistory(pageData) : Promise.resolve(pageData)\n }\n\n public saveScrollPositions(scrollRegions: ScrollRegion[]): void {\n queue.add(() => {\n return Promise.resolve().then(() => {\n if (!window.history.state?.page) {\n return\n }\n\n if (isEqual(this.getScrollRegions(), scrollRegions)) {\n return\n }\n\n return this.doReplaceState({\n page: window.history.state.page,\n scrollRegions,\n })\n })\n })\n }\n\n public saveDocumentScrollPosition(scrollRegion: ScrollRegion): void {\n queue.add(() => {\n return Promise.resolve().then(() => {\n if (!window.history.state?.page) {\n return\n }\n\n if (isEqual(this.getDocumentScrollPosition(), scrollRegion)) {\n return\n }\n\n return this.doReplaceState({\n page: window.history.state.page,\n documentScrollPosition: scrollRegion,\n })\n })\n })\n }\n\n public getScrollRegions(): ScrollRegion[] {\n return window.history.state?.scrollRegions || []\n }\n\n public getDocumentScrollPosition(): ScrollRegion {\n return window.history.state?.documentScrollPosition || { top: 0, left: 0 }\n }\n\n public replaceState(page: Page, cb: (() => void) | null = null): void {\n if (isEqual(this.current, page)) {\n cb && cb()\n return\n }\n\n currentPage.merge(page)\n\n if (isServer) {\n return\n }\n\n if (this.preserveUrl) {\n cb && cb()\n return\n }\n\n this.current = page\n\n queue.add(() => {\n return this.getPageData(page).then((data) => {\n // Defer history.replaceState to the next event loop tick to prevent timing conflicts.\n // Ensure any previous history.pushState completes before replaceState is executed.\n const doReplace = () => this.doReplaceState({ page: data }, page.url).then(() => cb?.())\n\n if (isChromeIOS) {\n return new Promise((resolve) => {\n setTimeout(() => doReplace().then(resolve))\n })\n }\n\n return doReplace()\n })\n })\n }\n\n protected isHistoryThrottleError(error: unknown): error is Error & { name: 'SecurityError' } {\n return (\n error instanceof Error &&\n error.name === 'SecurityError' &&\n (error.message.includes('history.pushState') || error.message.includes('history.replaceState'))\n )\n }\n\n protected isQuotaExceededError(error: unknown): error is Error & { name: 'QuotaExceededError' } {\n return error instanceof Error && error.name === 'QuotaExceededError'\n }\n\n protected withThrottleProtection<T = void>(cb: () => T): Promise<T | undefined> {\n return Promise.resolve().then(() => {\n try {\n return cb()\n } catch (error) {\n if (!this.isHistoryThrottleError(error)) {\n throw error\n }\n\n console.error(error.message)\n }\n })\n }\n\n protected doReplaceState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url?: string,\n ): Promise<void> {\n return this.withThrottleProtection(() => {\n window.history.replaceState(\n {\n ...data,\n scrollRegions: data.scrollRegions ?? window.history.state?.scrollRegions,\n documentScrollPosition: data.documentScrollPosition ?? window.history.state?.documentScrollPosition,\n },\n '',\n url,\n )\n })\n }\n\n protected doPushState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url: string,\n ): Promise<void> {\n return this.withThrottleProtection(() => {\n try {\n window.history.pushState(data, '', url)\n } catch (error) {\n if (!this.isQuotaExceededError(error)) {\n throw error\n }\n\n eventHandler.fireInternalEvent('historyQuotaExceeded', url)\n }\n })\n }\n\n public getState<T>(key: keyof Page, defaultValue?: T): any {\n return this.current?.[key] ?? defaultValue\n }\n\n public deleteState(key: keyof Page) {\n if (this.current[key] !== undefined) {\n delete this.current[key]\n this.replaceState(this.current as Page)\n }\n }\n\n public clearInitialState(key: keyof Page) {\n if (this.initialState && this.initialState[key] !== undefined) {\n delete this.initialState[key]\n }\n }\n\n public browserHasHistoryEntry(): boolean {\n return !isServer && !!window.history.state?.page\n }\n\n public clear() {\n SessionStorage.remove(historySessionStorageKeys.key)\n SessionStorage.remove(historySessionStorageKeys.iv)\n }\n\n public setCurrent(page: Page): void {\n this.current = page\n }\n\n public isValidState(state: any): boolean {\n return !!state.page\n }\n\n public getAllState(): Page {\n return this.current as Page\n }\n}\n\nif (typeof window !== 'undefined' && window.history.scrollRestoration) {\n window.history.scrollRestoration = 'manual'\n}\n\nexport const history = new History()\n", "export class SessionStorage {\n public static locationVisitKey = 'inertiaLocationVisit'\n\n public static set(key: string, value: any): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.setItem(key, JSON.stringify(value))\n }\n }\n\n public static get(key: string): any {\n if (typeof window !== 'undefined') {\n return JSON.parse(window.sessionStorage.getItem(key) || 'null')\n }\n }\n\n public static merge(key: string, value: any): void {\n const existing = this.get(key)\n\n if (existing === null) {\n this.set(key, value)\n } else {\n this.set(key, { ...existing, ...value })\n }\n }\n\n public static remove(key: string): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.removeItem(key)\n }\n }\n\n public static removeNested(key: string, nestedKey: string): void {\n const existing = this.get(key)\n\n if (existing !== null) {\n delete existing[nestedKey]\n\n this.set(key, existing)\n }\n }\n\n public static exists(key: string): boolean {\n try {\n return this.get(key) !== null\n } catch (error) {\n return false\n }\n }\n\n public static clear(): void {\n if (typeof window !== 'undefined') {\n window.sessionStorage.clear()\n }\n }\n}\n", "import { SessionStorage } from './sessionStorage'\n\nexport const encryptHistory = async (data: any): Promise<ArrayBuffer> => {\n if (typeof window === 'undefined') {\n throw new Error('Unable to encrypt history')\n }\n\n const iv = getIv()\n const storedKey = await getKeyFromSessionStorage()\n const key = await getOrCreateKey(storedKey)\n\n if (!key) {\n throw new Error('Unable to encrypt history')\n }\n\n const encrypted = await encryptData(iv, key, data)\n\n return encrypted\n}\n\nexport const historySessionStorageKeys = {\n key: 'historyKey',\n iv: 'historyIv',\n}\n\nexport const decryptHistory = async (data: any): Promise<any> => {\n const iv = getIv()\n const storedKey = await getKeyFromSessionStorage()\n\n if (!storedKey) {\n throw new Error('Unable to decrypt history')\n }\n\n return await decryptData(iv, storedKey, data)\n}\n\nconst encryptData = async (iv: BufferSource, key: CryptoKey, data: any) => {\n if (typeof window === 'undefined') {\n throw new Error('Unable to encrypt history')\n }\n\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(data)\n }\n\n const textEncoder = new TextEncoder()\n const str = JSON.stringify(data)\n const encoded = new Uint8Array(str.length * 3)\n\n const result = textEncoder.encodeInto(str, encoded)\n\n return window.crypto.subtle.encrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n encoded.subarray(0, result.written),\n )\n}\n\nconst decryptData = async (iv: BufferSource, key: CryptoKey, data: any) => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Decryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(data)\n }\n\n const decrypted = await window.crypto.subtle.decrypt(\n {\n name: 'AES-GCM',\n iv,\n },\n key,\n data,\n )\n\n return JSON.parse(new TextDecoder().decode(decrypted))\n}\n\nconst getIv = (): BufferSource => {\n const ivString = SessionStorage.get(historySessionStorageKeys.iv)\n\n if (ivString) {\n return new Uint8Array(ivString)\n }\n\n const iv = window.crypto.getRandomValues(new Uint8Array(12))\n\n SessionStorage.set(historySessionStorageKeys.iv, Array.from(iv))\n\n return iv\n}\n\nconst createKey = async () => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve(null)\n }\n\n return window.crypto.subtle.generateKey(\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt'],\n )\n}\n\nconst saveKey = async (key: CryptoKey) => {\n if (typeof window.crypto.subtle === 'undefined') {\n console.warn('Encryption is not supported in this environment. SSL is required.')\n\n return Promise.resolve()\n }\n\n const keyData = await window.crypto.subtle.exportKey('raw', key)\n\n SessionStorage.set(historySessionStorageKeys.key, Array.from(new Uint8Array(keyData)))\n}\n\nconst getOrCreateKey = async (key: CryptoKey | null) => {\n if (key) {\n return key\n }\n\n const newKey = await createKey()\n\n if (!newKey) {\n return null\n }\n\n await saveKey(newKey)\n\n return newKey\n}\n\nconst getKeyFromSessionStorage = async (): Promise<CryptoKey | null> => {\n const stringKey = SessionStorage.get(historySessionStorageKeys.key)\n\n if (!stringKey) {\n return null\n }\n\n const key = await window.crypto.subtle.importKey(\n 'raw',\n new Uint8Array(stringKey),\n {\n name: 'AES-GCM',\n length: 256,\n },\n true,\n ['encrypt', 'decrypt'],\n )\n\n return key\n}\n", "import { cloneDeep } from 'lodash-es'\nimport { objectsAreEqual } from './objectUtils'\nimport { page as currentPage } from './page'\nimport { Response } from './response'\nimport { timeToMs } from './time'\nimport {\n ActiveVisit,\n CacheForOption,\n InFlightPrefetch,\n InternalActiveVisit,\n Page,\n PrefetchedResponse,\n PrefetchOptions,\n PrefetchRemovalTimer,\n} from './types'\n\nclass PrefetchedRequests {\n protected cached: PrefetchedResponse[] = []\n protected inFlightRequests: InFlightPrefetch[] = []\n protected removalTimers: PrefetchRemovalTimer[] = []\n protected currentUseId: string | null = null\n\n public add(\n params: ActiveVisit,\n sendFunc: (params: InternalActiveVisit) => void,\n { cacheFor, cacheTags }: PrefetchOptions,\n ) {\n const inFlight = this.findInFlight(params)\n\n if (inFlight) {\n return Promise.resolve()\n }\n\n const existing = this.findCached(params)\n\n if (!params.fresh && existing && existing.staleTimestamp > Date.now()) {\n return Promise.resolve()\n }\n\n const [stale, prefetchExpiresIn] = this.extractStaleValues(cacheFor)\n\n const promise = new Promise<Response>((resolve, reject) => {\n sendFunc({\n ...params,\n onCancel: () => {\n this.remove(params)\n params.onCancel()\n reject()\n },\n onError: (error) => {\n this.remove(params)\n params.onError(error)\n reject()\n },\n onPrefetching(visitParams) {\n params.onPrefetching(visitParams)\n },\n onPrefetched(response, visit) {\n params.onPrefetched(response, visit)\n },\n onPrefetchResponse(response) {\n resolve(response)\n },\n onPrefetchError(error) {\n prefetchedRequests.removeFromInFlight(params)\n reject(error)\n },\n })\n }).then((response) => {\n this.remove(params)\n\n const pageResponse = response.getPageResponse()\n\n currentPage.mergeOncePropsIntoResponse(pageResponse)\n\n this.cached.push({\n params: { ...params },\n staleTimestamp: Date.now() + stale,\n expiresAt: Date.now() + prefetchExpiresIn,\n response: promise,\n singleUse: prefetchExpiresIn === 0,\n timestamp: Date.now(),\n inFlight: false,\n tags: Array.isArray(cacheTags) ? cacheTags : [cacheTags],\n })\n\n const oncePropExpiresIn = this.getShortestOncePropTtl(pageResponse)\n this.scheduleForRemoval(\n params,\n oncePropExpiresIn ? Math.min(prefetchExpiresIn, oncePropExpiresIn) : prefetchExpiresIn,\n )\n this.removeFromInFlight(params)\n\n response.handlePrefetch()\n\n return response\n })\n\n this.inFlightRequests.push({\n params: { ...params },\n response: promise,\n staleTimestamp: null,\n inFlight: true,\n })\n\n return promise\n }\n\n public removeAll(): void {\n this.cached = []\n this.removalTimers.forEach((removalTimer) => {\n clearTimeout(removalTimer.timer)\n })\n this.removalTimers = []\n }\n\n public removeByTags(tags: string[]): void {\n this.cached = this.cached.filter((prefetched) => {\n return !prefetched.tags.some((tag) => tags.includes(tag))\n })\n }\n\n public remove(params: ActiveVisit): void {\n this.cached = this.cached.filter((prefetched) => {\n return !this.paramsAreEqual(prefetched.params, params)\n })\n\n this.clearTimer(params)\n }\n\n protected removeFromInFlight(params: ActiveVisit): void {\n this.inFlightRequests = this.inFlightRequests.filter((prefetching) => {\n return !this.paramsAreEqual(prefetching.params, params)\n })\n }\n\n protected extractStaleValues(cacheFor: PrefetchOptions['cacheFor']): [number, number] {\n const [stale, expires] = this.cacheForToStaleAndExpires(cacheFor)\n\n return [timeToMs(stale), timeToMs(expires)]\n }\n\n protected cacheForToStaleAndExpires(cacheFor: PrefetchOptions['cacheFor']): [CacheForOption, CacheForOption] {\n if (!Array.isArray(cacheFor)) {\n return [cacheFor, cacheFor]\n }\n\n switch (cacheFor.length) {\n case 0:\n return [0, 0]\n case 1:\n return [cacheFor[0], cacheFor[0]]\n default:\n return [cacheFor[0], cacheFor[1]]\n }\n }\n\n protected clearTimer(params: ActiveVisit) {\n const timer = this.removalTimers.find((removalTimer) => {\n return this.paramsAreEqual(removalTimer.params, params)\n })\n\n if (timer) {\n clearTimeout(timer.timer)\n this.removalTimers = this.removalTimers.filter((removalTimer) => removalTimer !== timer)\n }\n }\n\n protected scheduleForRemoval(params: ActiveVisit, expiresIn: number) {\n if (typeof window === 'undefined') {\n return\n }\n\n this.clearTimer(params)\n\n if (expiresIn > 0) {\n const timer = window.setTimeout(() => this.remove(params), expiresIn)\n\n this.removalTimers.push({\n params,\n timer,\n })\n }\n }\n\n public get(params: ActiveVisit): InFlightPrefetch | PrefetchedResponse | null {\n return this.findCached(params) || this.findInFlight(params)\n }\n\n public use(prefetched: PrefetchedResponse | InFlightPrefetch, params: ActiveVisit) {\n const id = `${params.url.pathname}-${Date.now()}-${Math.random().toString(36).substring(7)}`\n\n this.currentUseId = id\n\n return prefetched.response.then((response) => {\n if (this.currentUseId !== id) {\n // They've since gone on to `use` a different request,\n // so we should ignore this one\n return\n }\n\n response.mergeParams({ ...params, onPrefetched: () => {} })\n\n // If this was a one-time cache, remove it\n // (generally a prefetch=\"click\" request with no specified cache value)\n this.removeSingleUseItems(params)\n\n return response.handle()\n })\n }\n\n protected removeSingleUseItems(params: ActiveVisit) {\n this.cached = this.cached.filter((prefetched) => {\n if (!this.paramsAreEqual(prefetched.params, params)) {\n return true\n }\n\n return !prefetched.singleUse\n })\n }\n\n public findCached(params: ActiveVisit): PrefetchedResponse | null {\n return (\n this.cached.find((prefetched) => {\n return this.paramsAreEqual(prefetched.params, params)\n }) || null\n )\n }\n\n public findInFlight(params: ActiveVisit): InFlightPrefetch | null {\n return (\n this.inFlightRequests.find((prefetched) => {\n return this.paramsAreEqual(prefetched.params, params)\n }) || null\n )\n }\n\n protected withoutPurposePrefetchHeader(params: ActiveVisit): ActiveVisit {\n const newParams = cloneDeep(params)\n if (newParams.headers['Purpose'] === 'prefetch') {\n delete newParams.headers['Purpose']\n }\n return newParams\n }\n\n protected paramsAreEqual(params1: ActiveVisit, params2: ActiveVisit): boolean {\n return objectsAreEqual<ActiveVisit>(\n this.withoutPurposePrefetchHeader(params1),\n this.withoutPurposePrefetchHeader(params2),\n [\n 'showProgress',\n 'replace',\n 'prefetch',\n 'preserveScroll',\n 'preserveState',\n 'onBefore',\n 'onBeforeUpdate',\n 'onStart',\n 'onProgress',\n 'onFinish',\n 'onCancel',\n 'onSuccess',\n 'onError',\n 'onFlash',\n 'onPrefetched',\n 'onCancelToken',\n 'onPrefetching',\n 'async',\n 'viewTransition',\n ],\n )\n }\n\n public updateCachedOncePropsFromCurrentPage(): void {\n this.cached.forEach((prefetched) => {\n prefetched.response.then((response) => {\n const pageResponse = response.getPageResponse()\n\n currentPage.mergeOncePropsIntoResponse(pageResponse, { force: true })\n\n for (const [group, deferredProps] of Object.entries(pageResponse.deferredProps ?? {})) {\n const remaining = deferredProps.filter((prop) => pageResponse.props[prop] === undefined)\n\n if (remaining.length > 0) {\n pageResponse.deferredProps![group] = remaining\n } else {\n delete pageResponse.deferredProps![group]\n }\n }\n\n const oncePropExpiresIn = this.getShortestOncePropTtl(pageResponse)\n\n if (oncePropExpiresIn === null) {\n return\n }\n\n const prefetchExpiresIn = prefetched.expiresAt - Date.now()\n const expiresIn = Math.min(prefetchExpiresIn, oncePropExpiresIn)\n\n if (expiresIn > 0) {\n this.scheduleForRemoval(prefetched.params, expiresIn)\n } else {\n this.remove(prefetched.params)\n }\n })\n })\n }\n\n protected getShortestOncePropTtl(page: Page): number | null {\n const expiryTimestamps = Object.values(page.onceProps ?? {})\n .map((onceProp) => onceProp.expiresAt)\n .filter((expiresAt): expiresAt is number => !!expiresAt)\n\n if (expiryTimestamps.length === 0) {\n return null\n }\n\n return Math.min(...expiryTimestamps) - Date.now()\n }\n}\n\nexport const prefetchedRequests = new PrefetchedRequests()\n", "export const objectsAreEqual = <T extends Record<string, any>>(\n obj1: T,\n obj2: T,\n excludeKeys: {\n [K in keyof T]: K\n }[keyof T][],\n): boolean => {\n if (obj1 === obj2) {\n return true\n }\n\n // Check keys in obj1\n for (const key in obj1) {\n if (excludeKeys.includes(key)) {\n continue\n }\n\n if (obj1[key] === obj2[key]) {\n continue\n }\n\n if (!compareValues(obj1[key], obj2[key])) {\n return false\n }\n }\n\n // Check keys that exist in obj2 but not in obj1\n for (const key in obj2) {\n if (excludeKeys.includes(key)) {\n continue\n }\n\n if (!(key in obj1)) {\n return false\n }\n }\n\n return true\n}\n\nconst compareValues = (value1: any, value2: any): boolean => {\n switch (typeof value1) {\n case 'object':\n return objectsAreEqual(value1, value2, [])\n case 'function':\n return value1.toString() === value2.toString()\n default:\n return value1 === value2\n }\n}\n", "import { CacheForOption, TimeUnit } from './types'\n\nconst conversionMap: Record<TimeUnit, number> = {\n ms: 1,\n s: 1000,\n m: 1000 * 60,\n h: 1000 * 60 * 60,\n d: 1000 * 60 * 60 * 24,\n}\n\nexport const timeToMs = (time: CacheForOption): number => {\n if (typeof time === 'number') {\n return time\n }\n\n for (const [unit, conversion] of Object.entries(conversionMap)) {\n if (time.endsWith(unit)) {\n return parseFloat(time) * conversion\n }\n }\n\n return parseInt(time)\n}\n", "import { history } from './history'\nimport { ScrollRegion } from './types'\n\nexport class Scroll {\n public static save(): void {\n history.saveScrollPositions(this.getScrollRegions())\n }\n\n public static getScrollRegions(): ScrollRegion[] {\n return Array.from(this.regions()).map((region) => ({\n top: region.scrollTop,\n left: region.scrollLeft,\n }))\n }\n\n protected static regions(): NodeListOf<Element> {\n return document.querySelectorAll('[scroll-region]')\n }\n\n public static reset(): void {\n const anchorHash = typeof window !== 'undefined' ? window.location.hash : null\n\n if (!anchorHash) {\n // Reset the document scroll position if there is no hash.\n window.scrollTo(0, 0)\n }\n\n this.regions().forEach((region) => {\n if (typeof region.scrollTo === 'function') {\n region.scrollTo(0, 0)\n } else {\n region.scrollTop = 0\n region.scrollLeft = 0\n }\n })\n\n this.save()\n this.scrollToAnchor()\n }\n\n public static scrollToAnchor(): void {\n const anchorHash = typeof window !== 'undefined' ? window.location.hash : null\n\n if (anchorHash) {\n // We're using a setTimeout() here as a workaround for a bug in the React adapter where the\n // rendering isn't completing fast enough, causing the anchor link to not be scrolled to.\n setTimeout(() => {\n const anchorElement = document.getElementById(anchorHash.slice(1))\n anchorElement ? anchorElement.scrollIntoView() : window.scrollTo(0, 0)\n })\n }\n }\n\n public static restore(scrollRegions: ScrollRegion[]): void {\n if (typeof window === 'undefined') {\n return\n }\n\n window.requestAnimationFrame(() => {\n this.restoreDocument()\n this.restoreScrollRegions(scrollRegions)\n })\n }\n\n public static restoreScrollRegions(scrollRegions: ScrollRegion[]): void {\n if (typeof window === 'undefined') {\n return\n }\n\n this.regions().forEach((region: Element, index: number) => {\n const scrollPosition = scrollRegions[index]\n\n if (!scrollPosition) {\n return\n }\n\n if (typeof region.scrollTo === 'function') {\n region.scrollTo(scrollPosition.left, scrollPosition.top)\n } else {\n region.scrollTop = scrollPosition.top\n region.scrollLeft = scrollPosition.left\n }\n })\n }\n\n public static restoreDocument(): void {\n const scrollPosition = history.getDocumentScrollPosition()\n window.scrollTo(scrollPosition.left, scrollPosition.top)\n }\n\n public static onScroll(event: Event): void {\n const target = event.target as Element\n\n if (typeof target.hasAttribute === 'function' && target.hasAttribute('scroll-region')) {\n this.save()\n }\n }\n\n public static onWindowScroll(): void {\n history.saveDocumentScrollPosition({\n top: window.scrollY,\n left: window.scrollX,\n })\n }\n}\n", "import * as qs from 'qs'\nimport { config } from './config'\nimport { hasFiles } from './files'\nimport { isFormData, objectToFormData } from './formData'\nimport type {\n FormDataConvertible,\n Method,\n QueryStringArrayFormatOption,\n RequestPayload,\n UrlMethodPair,\n VisitOptions,\n} from './types'\n\nexport function hrefToUrl(href: string | URL): URL {\n return new URL(href.toString(), typeof window === 'undefined' ? undefined : window.location.toString())\n}\n\nexport const transformUrlAndData = (\n href: string | URL,\n data: RequestPayload,\n method: Method,\n forceFormData: VisitOptions['forceFormData'],\n queryStringArrayFormat: VisitOptions['queryStringArrayFormat'],\n): [URL, RequestPayload] => {\n let url = typeof href === 'string' ? hrefToUrl(href) : href\n\n if ((hasFiles(data) || forceFormData) && !isFormData(data)) {\n if (config.get('form.forceIndicesArrayFormatInFormData')) {\n queryStringArrayFormat = 'indices'\n }\n\n data = objectToFormData(data, new FormData(), null, queryStringArrayFormat)\n }\n\n if (isFormData(data)) {\n return [url, data]\n }\n\n const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat)\n\n return [hrefToUrl(_href), _data]\n}\n\ntype MergeDataIntoQueryStringDataReturnType<T extends RequestPayload> =\n T extends Record<string, FormDataConvertible> ? Record<string, FormDataConvertible> : RequestPayload\n\nexport function mergeDataIntoQueryString<T extends RequestPayload>(\n method: Method,\n href: URL | string,\n data: T,\n qsArrayFormat: QueryStringArrayFormatOption = 'brackets',\n): [string, MergeDataIntoQueryStringDataReturnType<T>] {\n const hasDataForQueryString = method === 'get' && !isFormData(data) && Object.keys(data).length > 0\n const hasHost = urlHasProtocol(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/') || href.toString() === ''\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasRelativePathWithDotPrefix = /^[.]{1,2}([/]|$)/.test(href.toString())\n const hasSearch = href.toString().includes('?') || hasDataForQueryString\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), typeof window === 'undefined' ? 'http://localhost' : window.location.toString())\n\n if (hasDataForQueryString) {\n // If the original URL contains indices notation (e.g. [0], [1]), preserve it.\n // Indices notation cannot be converted to brackets notation without data loss.\n const hasIndices = /\\[\\d+\\]/.test(url.search)\n const parseOptions = { ignoreQueryPrefix: true, allowSparse: true }\n url.search = qs.stringify(\n { ...qs.parse(url.search, parseOptions), ...data },\n {\n encodeValuesOnly: true,\n arrayFormat: hasIndices ? 'indices' : qsArrayFormat,\n },\n )\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(hasRelativePathWithDotPrefix ? 0 : 1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n (hasDataForQueryString ? {} : data) as MergeDataIntoQueryStringDataReturnType<T>,\n ]\n}\n\nexport function urlWithoutHash(url: URL | Location): URL {\n url = new URL(url.href)\n url.hash = ''\n return url\n}\n\nexport const setHashIfSameUrl = (originUrl: URL | Location, destinationUrl: URL | Location) => {\n if (originUrl.hash && !destinationUrl.hash && urlWithoutHash(originUrl).href === destinationUrl.href) {\n destinationUrl.hash = originUrl.hash\n }\n}\n\nexport const isSameUrlWithoutHash = (url1: URL | Location, url2: URL | Location): boolean => {\n return urlWithoutHash(url1).href === urlWithoutHash(url2).href\n}\n\nexport function isUrlMethodPair(href: unknown): href is UrlMethodPair {\n return href !== null && typeof href === 'object' && href !== undefined && 'url' in href && 'method' in href\n}\n\nexport function urlHasProtocol(url: string): boolean {\n return /^([a-z][a-z0-9+.-]*:)?\\/\\/[^/]/i.test(url)\n}\n\nexport function urlToString(url: URL | string, absolute: boolean): string {\n const urlObj = typeof url === 'string' ? hrefToUrl(url) : url\n\n return absolute\n ? `${urlObj.protocol}//${urlObj.host}${urlObj.pathname}${urlObj.search}${urlObj.hash}`\n : `${urlObj.pathname}${urlObj.search}${urlObj.hash}`\n}\n", "import { FormDataConvertible, RequestPayload } from './types'\n\nexport const isFile = (value: unknown): boolean =>\n (typeof File !== 'undefined' && value instanceof File) ||\n value instanceof Blob ||\n (typeof FileList !== 'undefined' && value instanceof FileList && value.length > 0)\n\nexport function hasFiles(data: RequestPayload | FormDataConvertible): boolean {\n return (\n isFile(data) ||\n (data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value))) ||\n (typeof data === 'object' && data !== null && Object.values(data).some((value) => hasFiles(value)))\n )\n}\n", "import type { FormDataConvertible, QueryStringArrayFormatOption } from './types'\n\nexport const isFormData = (value: any): value is FormData => value instanceof FormData\n\nexport function objectToFormData(\n source: Record<string, FormDataConvertible>,\n form: FormData = new FormData(),\n parentKey: string | null = null,\n queryStringArrayFormat: QueryStringArrayFormatOption = 'brackets',\n): FormData {\n source = source || {}\n\n for (const key in source) {\n if (Object.prototype.hasOwnProperty.call(source, key)) {\n append(form, composeKey(parentKey, key, 'indices'), source[key], queryStringArrayFormat)\n }\n }\n\n return form\n}\n\nfunction composeKey(parent: string | null, key: string, format: QueryStringArrayFormatOption): string {\n if (!parent) {\n return key\n }\n\n return format === 'brackets' ? `${parent}[]` : `${parent}[${key}]`\n}\n\nfunction append(form: FormData, key: string, value: FormDataConvertible, format: QueryStringArrayFormatOption): void {\n if (Array.isArray(value)) {\n return Array.from(value.keys()).forEach((index) =>\n append(form, composeKey(key, index.toString(), format), value[index], format),\n )\n } else if (value instanceof Date) {\n return form.append(key, value.toISOString())\n } else if (value instanceof File) {\n return form.append(key, value, value.name)\n } else if (value instanceof Blob) {\n return form.append(key, value)\n } else if (typeof value === 'boolean') {\n return form.append(key, value ? '1' : '0')\n } else if (typeof value === 'string') {\n return form.append(key, value)\n } else if (typeof value === 'number') {\n return form.append(key, `${value}`)\n } else if (value === null || value === undefined) {\n return form.append(key, '')\n }\n\n objectToFormData(value, form, key, format)\n}\n", "import { eventHandler } from './eventHandler'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { prefetchedRequests } from './prefetched'\nimport { Scroll } from './scroll'\nimport { Component, FlashData, Page, PageEvent, PageHandler, PageResolver, RouterInitParams, Visit } from './types'\nimport { hrefToUrl, isSameUrlWithoutHash } from './url'\n\nclass CurrentPage {\n protected page!: Page\n protected swapComponent!: PageHandler<any>\n protected resolveComponent!: PageResolver\n protected onFlashCallback?: (flash: Page['flash']) => void\n protected componentId = {}\n protected listeners: {\n event: PageEvent\n callback: VoidFunction\n }[] = []\n protected isFirstPageLoad = true\n protected cleared = false\n protected pendingDeferredProps: Pick<Page, 'deferredProps' | 'url' | 'component'> | null = null\n protected historyQuotaExceeded = false\n\n public init<ComponentType = Component>({\n initialPage,\n swapComponent,\n resolveComponent,\n onFlash,\n }: RouterInitParams<ComponentType>) {\n this.page = { ...initialPage, flash: initialPage.flash ?? {} }\n this.swapComponent = swapComponent\n this.resolveComponent = resolveComponent\n this.onFlashCallback = onFlash\n\n eventHandler.on('historyQuotaExceeded', () => {\n this.historyQuotaExceeded = true\n })\n\n return this\n }\n\n public set(\n page: Page,\n {\n replace = false,\n preserveScroll = false,\n preserveState = false,\n viewTransition = false,\n }: {\n replace?: boolean\n preserveScroll?: boolean\n preserveState?: boolean\n viewTransition?: Visit['viewTransition']\n } = {},\n ): Promise<void> {\n if (Object.keys(page.deferredProps || {}).length) {\n this.pendingDeferredProps = {\n deferredProps: page.deferredProps,\n component: page.component,\n url: page.url,\n }\n }\n\n this.componentId = {}\n\n const componentId = this.componentId\n\n if (page.clearHistory) {\n history.clear()\n }\n\n return this.resolve(page.component).then((component) => {\n if (componentId !== this.componentId) {\n // Component has changed since we started resolving this component, bail\n return\n }\n\n page.rememberedState ??= {}\n\n const isServer = typeof window === 'undefined'\n const location = !isServer ? window.location : new URL(page.url)\n const scrollRegions = !isServer && preserveScroll ? Scroll.getScrollRegions() : []\n replace = replace || isSameUrlWithoutHash(hrefToUrl(page.url), location)\n\n // Clear flash data from the page object, we don't want it when navigating back/forward...\n const pageForHistory = { ...page, flash: {} }\n\n return new Promise<void>((resolve) =>\n replace ? history.replaceState(pageForHistory, resolve) : history.pushState(pageForHistory, resolve),\n ).then(() => {\n const isNewComponent = !this.isTheSame(page)\n\n if (!isNewComponent && Object.keys(page.props.errors || {}).length > 0) {\n // Don't use view transition if the page stays the same and there are (new) errors...\n viewTransition = false\n }\n\n this.page = page\n this.cleared = false\n\n if (this.hasOnceProps()) {\n prefetchedRequests.updateCachedOncePropsFromCurrentPage()\n }\n\n if (isNewComponent) {\n this.fireEventsFor('newComponent')\n }\n\n if (this.isFirstPageLoad) {\n this.fireEventsFor('firstLoad')\n }\n\n this.isFirstPageLoad = false\n\n if (this.historyQuotaExceeded) {\n // If we exceeded the history quota, don't attempt to swap the\n // component as we're performing a full page reload instead.\n this.historyQuotaExceeded = false\n return\n }\n\n return this.swap({\n component,\n page,\n preserveState,\n viewTransition,\n }).then(() => {\n if (preserveScroll) {\n // Scroll regions must be explicitly restored since the DOM elements are destroyed\n // and recreated during the component 'swap'. Document scroll is naturally\n // preserved as the document element itself persists across navigations.\n window.requestAnimationFrame(() => Scroll.restoreScrollRegions(scrollRegions))\n } else {\n Scroll.reset()\n }\n\n if (\n this.pendingDeferredProps &&\n this.pendingDeferredProps.component === page.component &&\n this.pendingDeferredProps.url === page.url\n ) {\n eventHandler.fireInternalEvent('loadDeferredProps', this.pendingDeferredProps.deferredProps)\n }\n\n this.pendingDeferredProps = null\n\n if (!replace) {\n fireNavigateEvent(page)\n }\n })\n })\n })\n }\n\n public setQuietly(\n page: Page,\n {\n preserveState = false,\n }: {\n preserveState?: boolean\n } = {},\n ) {\n return this.resolve(page.component).then((component) => {\n this.page = page\n this.cleared = false\n history.setCurrent(page)\n return this.swap({ component, page, preserveState, viewTransition: false })\n })\n }\n\n public clear(): void {\n this.cleared = true\n }\n\n public isCleared(): boolean {\n return this.cleared\n }\n\n public get(): Page {\n return this.page\n }\n\n public getWithoutFlashData(): Page {\n return { ...this.page, flash: {} }\n }\n\n public hasOnceProps(): boolean {\n return Object.keys(this.page.onceProps ?? {}).length > 0\n }\n\n public merge(data: Partial<Page>): void {\n this.page = { ...this.page, ...data }\n }\n\n public setFlash(flash: FlashData): void {\n this.page = { ...this.page, flash }\n this.onFlashCallback?.(flash)\n }\n\n public setUrlHash(hash: string): void {\n if (!this.page.url.includes(hash)) {\n this.page.url += hash\n }\n }\n\n public remember(data: Page['rememberedState']): void {\n this.page.rememberedState = data\n }\n\n public swap({\n component,\n page,\n preserveState,\n viewTransition,\n }: {\n component: Component\n page: Page\n preserveState: boolean\n viewTransition: Visit['viewTransition']\n }): Promise<unknown> {\n const doSwap = () => this.swapComponent({ component, page, preserveState })\n\n if (!viewTransition || !document?.startViewTransition) {\n return doSwap()\n }\n\n const viewTransitionCallback = typeof viewTransition === 'boolean' ? () => null : viewTransition\n\n return new Promise((resolve) => {\n const transitionResult = document.startViewTransition(() => doSwap().then(resolve))\n\n viewTransitionCallback(transitionResult)\n })\n }\n\n public resolve(component: string): Promise<Component> {\n return Promise.resolve(this.resolveComponent(component))\n }\n\n public isTheSame(page: Page): boolean {\n return this.page.component === page.component\n }\n\n public on(event: PageEvent, callback: VoidFunction): VoidFunction {\n this.listeners.push({ event, callback })\n\n return () => {\n this.listeners = this.listeners.filter((listener) => listener.event !== event && listener.callback !== callback)\n }\n }\n\n public fireEventsFor(event: PageEvent): void {\n this.listeners.filter((listener) => listener.event === event).forEach((listener) => listener.callback())\n }\n\n public mergeOncePropsIntoResponse(response: Page, { force = false }: { force?: boolean } = {}): void {\n Object.entries(response.onceProps ?? {}).forEach(([key, onceProp]) => {\n const existingOnceProp = this.page.onceProps?.[key]\n\n if (existingOnceProp === undefined) {\n return\n }\n\n if (force || response.props[onceProp.prop] === undefined) {\n response.props[onceProp.prop] = this.page.props[existingOnceProp.prop]\n response.onceProps![key].expiresAt = existingOnceProp.expiresAt\n }\n })\n }\n}\n\nexport const page = new CurrentPage()\n", "export default class Queue<T> {\n protected items: (() => T)[] = []\n protected processingPromise: Promise<void> | null = null\n\n public add(item: () => T) {\n this.items.push(item)\n return this.process()\n }\n\n public process() {\n this.processingPromise ??= this.processNext().finally(() => {\n this.processingPromise = null\n })\n\n return this.processingPromise\n }\n\n protected processNext(): Promise<void> {\n const next = this.items.shift()\n\n if (next) {\n return Promise.resolve(next()).then(() => this.processNext())\n }\n\n return Promise.resolve()\n }\n}\n", "import debounce from './debounce'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { router } from './index'\nimport { page as currentPage } from './page'\nimport { Scroll } from './scroll'\nimport { GlobalEvent, GlobalEventNames, GlobalEventResult, InternalEvent } from './types'\nimport { hrefToUrl } from './url'\n\nclass EventHandler {\n protected internalListeners: {\n event: InternalEvent\n listener: (...args: any[]) => void\n }[] = []\n\n public init() {\n if (typeof window !== 'undefined') {\n window.addEventListener('popstate', this.handlePopstateEvent.bind(this))\n window.addEventListener('scroll', debounce(Scroll.onWindowScroll.bind(Scroll), 100), true)\n }\n\n if (typeof document !== 'undefined') {\n document.addEventListener('scroll', debounce(Scroll.onScroll.bind(Scroll), 100), true)\n }\n }\n\n public onGlobalEvent<TEventName extends GlobalEventNames>(\n type: TEventName,\n callback: (event: GlobalEvent<TEventName>) => GlobalEventResult<TEventName>,\n ): VoidFunction {\n const listener = ((event: GlobalEvent<TEventName>) => {\n const response = callback(event)\n\n if (event.cancelable && !event.defaultPrevented && response === false) {\n event.preventDefault()\n }\n }) as EventListener\n\n return this.registerListener(`inertia:${type}`, listener)\n }\n\n public on(event: InternalEvent, callback: (...args: any[]) => void): VoidFunction {\n this.internalListeners.push({ event, listener: callback })\n\n return () => {\n this.internalListeners = this.internalListeners.filter((listener) => listener.listener !== callback)\n }\n }\n\n public onMissingHistoryItem() {\n // At this point, the user has probably cleared the state\n // Mark the current page as cleared so that we don't try to write anything to it.\n currentPage.clear()\n // Fire an event so that that any listeners can handle this situation\n this.fireInternalEvent('missingHistoryItem')\n }\n\n public fireInternalEvent(event: InternalEvent, ...args: any[]): void {\n this.internalListeners\n .filter((listener) => listener.event === event)\n .forEach((listener) => listener.listener(...args))\n }\n\n protected registerListener(type: string, listener: EventListener): VoidFunction {\n document.addEventListener(type, listener)\n\n return () => document.removeEventListener(type, listener)\n }\n\n protected handlePopstateEvent(event: PopStateEvent): void {\n const state = event.state || null\n\n if (state === null) {\n const url = hrefToUrl(currentPage.get().url)\n url.hash = window.location.hash\n\n history.replaceState({ ...currentPage.getWithoutFlashData(), url: url.href })\n Scroll.reset()\n\n return\n }\n\n if (!history.isValidState(state)) {\n return this.onMissingHistoryItem()\n }\n\n history\n .decrypt(state.page)\n .then((data) => {\n if (currentPage.get().version !== data.version) {\n this.onMissingHistoryItem()\n return\n }\n\n // Cancel ongoing requests\n router.cancelAll()\n\n currentPage.setQuietly(data, { preserveState: false }).then(() => {\n Scroll.restore(history.getScrollRegions())\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n this.onMissingHistoryItem()\n })\n }\n}\n\nexport const eventHandler = new EventHandler()\n", "class NavigationType {\n protected type: NavigationTimingType\n\n public constructor() {\n this.type = this.resolveType()\n }\n\n protected resolveType(): NavigationTimingType {\n if (typeof window === 'undefined') {\n return 'navigate'\n }\n\n if (\n window.performance &&\n window.performance.getEntriesByType &&\n window.performance.getEntriesByType('navigation').length > 0\n ) {\n return (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n }\n\n return 'navigate'\n }\n\n public get(): NavigationTimingType {\n return this.type\n }\n\n public isBackForward(): boolean {\n return this.type === 'back_forward'\n }\n\n public isReload(): boolean {\n return this.type === 'reload'\n }\n}\n\nexport const navigationType = new NavigationType()\n", "import { eventHandler } from './eventHandler'\nimport { fireFlashEvent, fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { navigationType } from './navigationType'\nimport { page as currentPage } from './page'\nimport { Scroll } from './scroll'\nimport { SessionStorage } from './sessionStorage'\nimport { LocationVisit, Page } from './types'\n\nexport class InitialVisit {\n public static handle(): void {\n this.clearRememberedStateOnReload()\n\n const scenarios = [this.handleBackForward, this.handleLocation, this.handleDefault]\n\n scenarios.find((handler) => handler.bind(this)())\n }\n\n protected static clearRememberedStateOnReload(): void {\n if (navigationType.isReload()) {\n history.deleteState(history.rememberedState)\n history.clearInitialState(history.rememberedState)\n }\n }\n\n protected static handleBackForward(): boolean {\n if (!navigationType.isBackForward() || !history.browserHasHistoryEntry()) {\n return false\n }\n\n const scrollRegions = history.getScrollRegions()\n\n history\n .decrypt()\n .then((data) => {\n currentPage.set(data, { preserveScroll: true, preserveState: true }).then(() => {\n Scroll.restore(scrollRegions)\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n eventHandler.onMissingHistoryItem()\n })\n\n return true\n }\n\n /**\n * @link https://inertiajs.com/redirects#external-redirects\n */\n protected static handleLocation(): boolean {\n if (!SessionStorage.exists(SessionStorage.locationVisitKey)) {\n return false\n }\n\n const locationVisit: LocationVisit = SessionStorage.get(SessionStorage.locationVisitKey) || {}\n\n SessionStorage.remove(SessionStorage.locationVisitKey)\n\n if (typeof window !== 'undefined') {\n currentPage.setUrlHash(window.location.hash)\n }\n\n history\n .decrypt(currentPage.get())\n .then(() => {\n const rememberedState = history.getState<Page['rememberedState']>(history.rememberedState, {})\n const scrollRegions = history.getScrollRegions()\n currentPage.remember(rememberedState)\n\n currentPage\n .set(currentPage.get(), {\n preserveScroll: locationVisit.preserveScroll,\n preserveState: true,\n })\n .then(() => {\n if (locationVisit.preserveScroll) {\n Scroll.restore(scrollRegions)\n }\n\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n eventHandler.onMissingHistoryItem()\n })\n\n return true\n }\n\n protected static handleDefault(): void {\n if (typeof window !== 'undefined') {\n currentPage.setUrlHash(window.location.hash)\n }\n\n currentPage.set(currentPage.get(), { preserveScroll: true, preserveState: true }).then(() => {\n if (navigationType.isReload()) {\n Scroll.restore(history.getScrollRegions())\n } else {\n Scroll.scrollToAnchor()\n }\n\n const page = currentPage.get()\n\n fireNavigateEvent(page)\n\n const flash = page.flash\n\n if (Object.keys(flash).length > 0) {\n fireFlashEvent(flash)\n }\n })\n }\n}\n", "import { PollOptions } from './types'\n\nexport class Poll {\n protected id: number | null = null\n protected throttle = false\n protected keepAlive = false\n protected cb: VoidFunction\n protected interval: number\n protected cbCount = 0\n\n constructor(interval: number, cb: VoidFunction, options: PollOptions) {\n this.keepAlive = options.keepAlive ?? false\n\n this.cb = cb\n this.interval = interval\n\n if (options.autoStart ?? true) {\n this.start()\n }\n }\n\n public stop() {\n // console.log('stopping...', this.id)\n if (this.id) {\n // console.log('clearing interval...')\n clearInterval(this.id)\n }\n }\n\n public start() {\n if (typeof window === 'undefined') {\n return\n }\n\n this.stop()\n\n this.id = window.setInterval(() => {\n if (!this.throttle || this.cbCount % 10 === 0) {\n this.cb()\n }\n\n if (this.throttle) {\n this.cbCount++\n }\n }, this.interval)\n }\n\n public isInBackground(hidden: boolean) {\n this.throttle = this.keepAlive ? false : hidden\n\n if (this.throttle) {\n this.cbCount = 0\n }\n }\n}\n", "import { Poll } from './poll'\nimport { PollOptions } from './types'\n\nclass Polls {\n protected polls: Poll[] = []\n\n constructor() {\n this.setupVisibilityListener()\n }\n\n public add(\n interval: number,\n cb: VoidFunction,\n options: PollOptions,\n ): {\n stop: VoidFunction\n start: VoidFunction\n } {\n const poll = new Poll(interval, cb, options)\n\n this.polls.push(poll)\n\n return {\n stop: () => poll.stop(),\n start: () => poll.start(),\n }\n }\n\n public clear() {\n this.polls.forEach((poll) => poll.stop())\n\n this.polls = []\n }\n\n protected setupVisibilityListener() {\n if (typeof document === 'undefined') {\n return\n }\n\n document.addEventListener(\n 'visibilitychange',\n () => {\n this.polls.forEach((poll) => poll.isInBackground(document.hidden))\n },\n false,\n )\n }\n}\n\nexport const polls = new Polls()\n", "import { default as axios, AxiosProgressEvent, AxiosRequestConfig } from 'axios'\nimport { fireExceptionEvent, fireFinishEvent, firePrefetchingEvent, fireProgressEvent, fireStartEvent } from './events'\nimport { page as currentPage } from './page'\nimport { RequestParams } from './requestParams'\nimport { Response } from './response'\nimport { ActiveVisit, Page } from './types'\nimport { urlWithoutHash } from './url'\n\nexport class Request {\n protected response!: Response\n protected cancelToken!: AbortController\n protected requestParams: RequestParams\n protected requestHasFinished = false\n\n constructor(\n params: ActiveVisit,\n protected page: Page,\n ) {\n this.requestParams = RequestParams.create(params)\n this.cancelToken = new AbortController()\n }\n\n public static create(params: ActiveVisit, page: Page): Request {\n return new Request(params, page)\n }\n\n public async send() {\n this.requestParams.onCancelToken(() => this.cancel({ cancelled: true }))\n\n fireStartEvent(this.requestParams.all())\n this.requestParams.onStart()\n\n if (this.requestParams.all().prefetch) {\n this.requestParams.onPrefetching()\n firePrefetchingEvent(this.requestParams.all())\n }\n\n // We capture this up here because the response\n // will clear the prefetch flag so it can use it\n // as a regular response once the prefetch is done\n const originallyPrefetch = this.requestParams.all().prefetch\n\n return axios({\n method: this.requestParams.all().method,\n url: urlWithoutHash(this.requestParams.all().url).href,\n data: this.requestParams.data(),\n params: this.requestParams.queryParams(),\n signal: this.cancelToken.signal,\n headers: this.getHeaders(),\n onUploadProgress: this.onProgress.bind(this),\n // Why text? This allows us to delay JSON.parse until we're ready to use the response,\n // helps with performance particularly on large responses + history encryption\n responseType: 'text',\n })\n .then((response) => {\n this.response = Response.create(this.requestParams, response, this.page)\n\n return this.response.handle()\n })\n .catch((error) => {\n if (error?.response) {\n this.response = Response.create(this.requestParams, error.response, this.page)\n\n return this.response.handle()\n }\n\n return Promise.reject(error)\n })\n .catch((error) => {\n if (axios.isCancel(error)) {\n return\n }\n\n if (fireExceptionEvent(error)) {\n if (originallyPrefetch) {\n this.requestParams.onPrefetchError(error)\n }\n\n return Promise.reject(error)\n }\n })\n .finally(() => {\n this.finish()\n\n if (originallyPrefetch && this.response) {\n this.requestParams.onPrefetchResponse(this.response)\n }\n })\n }\n\n protected finish(): void {\n if (this.requestParams.wasCancelledAtAll()) {\n return\n }\n\n this.requestParams.markAsFinished()\n this.fireFinishEvents()\n }\n\n protected fireFinishEvents(): void {\n if (this.requestHasFinished) {\n // This could be called from multiple places, don't let it re-fire\n return\n }\n\n this.requestHasFinished = true\n\n fireFinishEvent(this.requestParams.all())\n this.requestParams.onFinish()\n }\n\n public cancel({ cancelled = false, interrupted = false }: { cancelled?: boolean; interrupted?: boolean }): void {\n if (this.requestHasFinished) {\n // If the request has already finished, there's no need to cancel it\n return\n }\n\n this.cancelToken.abort()\n\n this.requestParams.markAsCancelled({ cancelled, interrupted })\n\n this.fireFinishEvents()\n }\n\n protected onProgress(progress: AxiosProgressEvent): void {\n if (this.requestParams.data() instanceof FormData) {\n progress.percentage = progress.progress ? Math.round(progress.progress * 100) : 0\n fireProgressEvent(progress)\n this.requestParams.all().onProgress(progress)\n }\n }\n\n protected getHeaders(): AxiosRequestConfig['headers'] {\n const headers: AxiosRequestConfig['headers'] = {\n ...this.requestParams.headers(),\n Accept: 'text/html, application/xhtml+xml',\n 'X-Requested-With': 'XMLHttpRequest',\n 'X-Inertia': true,\n }\n\n const page = currentPage.get()\n\n if (page.version) {\n headers['X-Inertia-Version'] = page.version\n }\n\n const onceProps = Object.entries(page.onceProps || {})\n .filter(([, onceProp]) => {\n if (page.props[onceProp.prop] === undefined) {\n // The prop could deferred and not be loaded yet\n return false\n }\n\n return !onceProp.expiresAt || onceProp.expiresAt > Date.now()\n })\n .map(([key]) => key)\n\n if (onceProps.length > 0) {\n headers['X-Inertia-Except-Once-Props'] = onceProps.join(',')\n }\n\n return headers\n }\n}\n", "import { AxiosRequestConfig } from 'axios'\nimport { page as currentPage } from './page'\nimport { Response } from './response'\nimport { ActiveVisit, InternalActiveVisit, Page, PreserveStateOption, VisitCallbacks } from './types'\n\nexport class RequestParams {\n protected callbacks: {\n name: keyof VisitCallbacks\n args: any[]\n }[] = []\n\n protected params: InternalActiveVisit\n\n constructor(params: InternalActiveVisit) {\n if (!params.prefetch) {\n this.params = params\n } else {\n const wrappedCallbacks: Record<keyof VisitCallbacks, () => any> = {\n onBefore: this.wrapCallback(params, 'onBefore'),\n onBeforeUpdate: this.wrapCallback(params, 'onBeforeUpdate'),\n onStart: this.wrapCallback(params, 'onStart'),\n onProgress: this.wrapCallback(params, 'onProgress'),\n onFinish: this.wrapCallback(params, 'onFinish'),\n onCancel: this.wrapCallback(params, 'onCancel'),\n onSuccess: this.wrapCallback(params, 'onSuccess'),\n onError: this.wrapCallback(params, 'onError'),\n onFlash: this.wrapCallback(params, 'onFlash'),\n onCancelToken: this.wrapCallback(params, 'onCancelToken'),\n onPrefetched: this.wrapCallback(params, 'onPrefetched'),\n onPrefetching: this.wrapCallback(params, 'onPrefetching'),\n }\n\n this.params = {\n ...params,\n ...wrappedCallbacks,\n onPrefetchResponse: params.onPrefetchResponse || (() => {}),\n onPrefetchError: params.onPrefetchError || (() => {}),\n }\n }\n //\n }\n\n public static create(params: ActiveVisit): RequestParams {\n return new RequestParams(params)\n }\n\n public data() {\n return this.params.method === 'get' ? null : this.params.data\n }\n\n public queryParams() {\n return this.params.method === 'get' ? this.params.data : {}\n }\n\n public isPartial() {\n return this.params.only.length > 0 || this.params.except.length > 0 || this.params.reset.length > 0\n }\n\n public isDeferredPropsRequest() {\n return this.params.deferredProps === true\n }\n\n public onCancelToken(cb: VoidFunction) {\n this.params.onCancelToken({\n cancel: cb,\n })\n }\n\n public markAsFinished() {\n this.params.completed = true\n this.params.cancelled = false\n this.params.interrupted = false\n }\n\n public markAsCancelled({ cancelled = true, interrupted = false }) {\n this.params.onCancel()\n\n this.params.completed = false\n this.params.cancelled = cancelled\n this.params.interrupted = interrupted\n }\n\n public wasCancelledAtAll() {\n return this.params.cancelled || this.params.interrupted\n }\n\n public onFinish() {\n this.params.onFinish(this.params)\n }\n\n public onStart() {\n this.params.onStart(this.params)\n }\n\n public onPrefetching() {\n this.params.onPrefetching(this.params)\n }\n\n public onPrefetchResponse(response: Response) {\n if (this.params.onPrefetchResponse) {\n this.params.onPrefetchResponse(response)\n }\n }\n\n public onPrefetchError(error: Error) {\n if (this.params.onPrefetchError) {\n this.params.onPrefetchError(error)\n }\n }\n\n public all() {\n return this.params\n }\n\n public headers(): AxiosRequestConfig['headers'] {\n const headers: AxiosRequestConfig['headers'] = {\n ...this.params.headers,\n }\n\n if (this.isPartial()) {\n headers['X-Inertia-Partial-Component'] = currentPage.get().component\n }\n\n const only = this.params.only.concat(this.params.reset)\n\n if (only.length > 0) {\n headers['X-Inertia-Partial-Data'] = only.join(',')\n }\n\n if (this.params.except.length > 0) {\n headers['X-Inertia-Partial-Except'] = this.params.except.join(',')\n }\n\n if (this.params.reset.length > 0) {\n headers['X-Inertia-Reset'] = this.params.reset.join(',')\n }\n\n if (this.params.errorBag && this.params.errorBag.length > 0) {\n headers['X-Inertia-Error-Bag'] = this.params.errorBag\n }\n\n return headers\n }\n\n public setPreserveOptions(page: Page) {\n this.params.preserveScroll = RequestParams.resolvePreserveOption(this.params.preserveScroll, page)\n this.params.preserveState = RequestParams.resolvePreserveOption(this.params.preserveState, page)\n }\n\n public runCallbacks() {\n this.callbacks.forEach(({ name, args }) => {\n // @ts-ignore\n this.params[name](...args)\n })\n }\n\n public merge(toMerge: Partial<ActiveVisit>) {\n this.params = {\n ...this.params,\n ...toMerge,\n }\n }\n\n protected wrapCallback(params: ActiveVisit, name: keyof VisitCallbacks) {\n // @ts-ignore\n return (...args) => {\n this.recordCallback(name, args)\n // @ts-ignore\n params[name](...args)\n }\n }\n\n protected recordCallback(name: keyof VisitCallbacks, args: any[]) {\n this.callbacks.push({ name, args })\n }\n\n public static resolvePreserveOption(value: PreserveStateOption, page: Page): boolean {\n if (typeof value === 'function') {\n return value(page)\n }\n\n if (value === 'errors') {\n return Object.keys(page.props.errors || {}).length > 0\n }\n\n return value\n }\n}\n", "import { AxiosResponse } from 'axios'\nimport { get, isEqual, set } from 'lodash-es'\nimport { config, router } from '.'\nimport dialog from './dialog'\nimport {\n fireBeforeUpdateEvent,\n fireErrorEvent,\n fireFlashEvent,\n fireInvalidEvent,\n firePrefetchedEvent,\n fireSuccessEvent,\n} from './events'\nimport { history } from './history'\nimport modal from './modal'\nimport { page as currentPage } from './page'\nimport Queue from './queue'\nimport { RequestParams } from './requestParams'\nimport { SessionStorage } from './sessionStorage'\nimport { ActiveVisit, ErrorBag, Errors, Page } from './types'\nimport { hrefToUrl, isSameUrlWithoutHash, setHashIfSameUrl } from './url'\n\nconst queue = new Queue<Promise<boolean | void>>()\n\nexport class Response {\n protected wasPrefetched = false\n\n constructor(\n protected requestParams: RequestParams,\n protected response: AxiosResponse,\n protected originatingPage: Page,\n ) {}\n\n public static create(params: RequestParams, response: AxiosResponse, originatingPage: Page): Response {\n return new Response(params, response, originatingPage)\n }\n\n public async handlePrefetch() {\n if (isSameUrlWithoutHash(this.requestParams.all().url, window.location)) {\n this.handle()\n }\n }\n\n public async handle() {\n return queue.add(() => this.process())\n }\n\n public async process() {\n if (this.requestParams.all().prefetch) {\n this.wasPrefetched = true\n this.requestParams.all().prefetch = false\n\n this.requestParams.all().onPrefetched(this.response, this.requestParams.all())\n firePrefetchedEvent(this.response, this.requestParams.all())\n\n return Promise.resolve()\n }\n\n this.requestParams.runCallbacks()\n\n if (!this.isInertiaResponse()) {\n return this.handleNonInertiaResponse()\n }\n\n await history.processQueue()\n\n history.preserveUrl = this.requestParams.all().preserveUrl\n\n const previousFlash = currentPage.get().flash\n\n await this.setPage()\n\n const errors = currentPage.get().props.errors || {}\n\n if (Object.keys(errors).length > 0) {\n const scopedErrors = this.getScopedErrors(errors)\n\n fireErrorEvent(scopedErrors)\n\n return this.requestParams.all().onError(scopedErrors)\n }\n\n router.flushByCacheTags(this.requestParams.all().invalidateCacheTags || [])\n\n if (!this.wasPrefetched) {\n // We end up here other than from the prefetch cache, so we assume this response is\n // never than the cached one and therefore flush the cache.\n router.flush(currentPage.get().url)\n }\n\n const { flash } = currentPage.get()\n\n if (Object.keys(flash).length > 0 && (!this.requestParams.isPartial() || !isEqual(flash, previousFlash))) {\n fireFlashEvent(flash)\n this.requestParams.all().onFlash(flash)\n }\n\n fireSuccessEvent(currentPage.get())\n\n await this.requestParams.all().onSuccess(currentPage.get())\n\n history.preserveUrl = false\n }\n\n public mergeParams(params: ActiveVisit) {\n this.requestParams.merge(params)\n }\n\n public getPageResponse(): Page {\n const data = this.getDataFromResponse(this.response.data)\n return (this.response.data = { ...data, flash: data.flash ?? {} })\n }\n\n protected async handleNonInertiaResponse() {\n if (this.isLocationVisit()) {\n const locationUrl = hrefToUrl(this.getHeader('x-inertia-location'))\n\n setHashIfSameUrl(this.requestParams.all().url, locationUrl)\n\n return this.locationVisit(locationUrl)\n }\n\n const response = {\n ...this.response,\n data: this.getDataFromResponse(this.response.data),\n }\n\n if (fireInvalidEvent(response)) {\n return config.get('future.useDialogForErrorModal') ? dialog.show(response.data) : modal.show(response.data)\n }\n }\n\n protected isInertiaResponse(): boolean {\n return this.hasHeader('x-inertia')\n }\n\n protected hasStatus(status: number): boolean {\n return this.response.status === status\n }\n\n protected getHeader(header: string): string {\n return this.response.headers[header]\n }\n\n protected hasHeader(header: string): boolean {\n return this.getHeader(header) !== undefined\n }\n\n protected isLocationVisit(): boolean {\n return this.hasStatus(409) && this.hasHeader('x-inertia-location')\n }\n\n /**\n * @link https://inertiajs.com/redirects#external-redirects\n */\n protected locationVisit(url: URL): boolean | void {\n try {\n SessionStorage.set(SessionStorage.locationVisitKey, {\n preserveScroll: this.requestParams.all().preserveScroll === true,\n })\n\n if (typeof window === 'undefined') {\n return\n }\n\n if (isSameUrlWithoutHash(window.location, url)) {\n window.location.reload()\n } else {\n window.location.href = url.href\n }\n } catch (error) {\n return false\n }\n }\n\n protected async setPage(): Promise<void> {\n const pageResponse = this.getPageResponse()\n\n if (!this.shouldSetPage(pageResponse)) {\n return Promise.resolve()\n }\n\n this.mergeProps(pageResponse)\n currentPage.mergeOncePropsIntoResponse(pageResponse)\n this.preserveEqualProps(pageResponse)\n\n await this.setRememberedState(pageResponse)\n\n this.requestParams.setPreserveOptions(pageResponse)\n\n pageResponse.url = history.preserveUrl ? currentPage.get().url : this.pageUrl(pageResponse)\n\n this.requestParams.all().onBeforeUpdate(pageResponse)\n fireBeforeUpdateEvent(pageResponse)\n\n return currentPage.set(pageResponse, {\n replace: this.requestParams.all().replace,\n preserveScroll: this.requestParams.all().preserveScroll as boolean,\n preserveState: this.requestParams.all().preserveState as boolean,\n viewTransition: this.requestParams.all().viewTransition,\n })\n }\n\n protected getDataFromResponse(response: any): any {\n if (typeof response !== 'string') {\n return response\n }\n\n try {\n return JSON.parse(response)\n } catch (error) {\n return response\n }\n }\n\n protected shouldSetPage(pageResponse: Page): boolean {\n if (!this.requestParams.all().async) {\n // If the request is sync, we should always set the page\n return true\n }\n\n if (this.originatingPage.component !== pageResponse.component) {\n // We originated from a component but the response re-directed us,\n // we should respect the redirection and set the page\n return true\n }\n\n // At this point, if the originating request component is different than the current component,\n // the user has since navigated and we should discard the response\n if (this.originatingPage.component !== currentPage.get().component) {\n return false\n }\n\n const originatingUrl = hrefToUrl(this.originatingPage.url)\n const currentPageUrl = hrefToUrl(currentPage.get().url)\n\n // We have the same component, let's double-check the URL\n // If we're no longer on the same path name (e.g. /users/1 -> /users/2), we should not set the page\n return originatingUrl.origin === currentPageUrl.origin && originatingUrl.pathname === currentPageUrl.pathname\n }\n\n protected pageUrl(pageResponse: Page) {\n const responseUrl = hrefToUrl(pageResponse.url)\n\n setHashIfSameUrl(this.requestParams.all().url, responseUrl)\n\n return responseUrl.pathname + responseUrl.search + responseUrl.hash\n }\n\n protected preserveEqualProps(pageResponse: Page): void {\n if (pageResponse.component !== currentPage.get().component || config.get('future.preserveEqualProps') !== true) {\n return\n }\n\n const currentPageProps = currentPage.get().props\n\n Object.entries(pageResponse.props).forEach(([key, value]) => {\n if (isEqual(value, currentPageProps[key])) {\n pageResponse.props[key] = currentPageProps[key]\n }\n })\n }\n\n protected mergeProps(pageResponse: Page): void {\n if (!this.requestParams.isPartial() || pageResponse.component !== currentPage.get().component) {\n return\n }\n\n const propsToAppend = pageResponse.mergeProps || []\n const propsToPrepend = pageResponse.prependProps || []\n const propsToDeepMerge = pageResponse.deepMergeProps || []\n const matchPropsOn = pageResponse.matchPropsOn || []\n\n const mergeProp = (prop: string, shouldAppend: boolean) => {\n const currentProp = get(currentPage.get().props, prop)\n const incomingProp = get(pageResponse.props, prop)\n\n if (Array.isArray(incomingProp)) {\n const newArray = this.mergeOrMatchItems(\n (currentProp || []) as any[],\n incomingProp,\n prop,\n matchPropsOn,\n shouldAppend,\n )\n\n set(pageResponse.props, prop, newArray)\n } else if (typeof incomingProp === 'object' && incomingProp !== null) {\n const newObject = {\n ...(currentProp || {}),\n ...incomingProp,\n }\n\n set(pageResponse.props, prop, newObject)\n }\n }\n\n propsToAppend.forEach((prop) => mergeProp(prop, true))\n propsToPrepend.forEach((prop) => mergeProp(prop, false))\n\n propsToDeepMerge.forEach((prop) => {\n const currentProp = currentPage.get().props[prop]\n const incomingProp = pageResponse.props[prop]\n\n // Function to recursively merge objects and arrays\n const deepMerge = (target: any, source: any, matchProp: string) => {\n if (Array.isArray(source)) {\n return this.mergeOrMatchItems(target, source, matchProp, matchPropsOn)\n }\n\n if (typeof source === 'object' && source !== null) {\n // Merge objects by iterating over keys\n return Object.keys(source).reduce(\n (acc, key) => {\n acc[key] = deepMerge(target ? target[key] : undefined, source[key], `${matchProp}.${key}`)\n return acc\n },\n { ...target },\n )\n }\n\n // If the source is neither an array nor an object, simply return the it\n return source\n }\n\n // Apply the deep merge and update the page response\n pageResponse.props[prop] = deepMerge(currentProp, incomingProp, prop)\n })\n\n pageResponse.props = { ...currentPage.get().props, ...pageResponse.props }\n\n if (this.requestParams.isDeferredPropsRequest()) {\n const currentErrors = currentPage.get().props.errors\n\n if (currentErrors && Object.keys(currentErrors).length > 0) {\n // Preserve existing errors during deferred props requests\n pageResponse.props.errors = currentErrors\n }\n }\n\n // Preserve the existing scrollProps\n if (currentPage.get().scrollProps) {\n pageResponse.scrollProps = {\n ...(currentPage.get().scrollProps || {}),\n ...(pageResponse.scrollProps || {}),\n }\n }\n\n // Preserve the existing onceProps\n if (currentPage.hasOnceProps()) {\n pageResponse.onceProps = {\n ...(currentPage.get().onceProps || {}),\n ...(pageResponse.onceProps || {}),\n }\n }\n\n // Preserve flash data and merge with new flash data on non-deferred requests\n pageResponse.flash = {\n ...currentPage.get().flash,\n ...(this.requestParams.isDeferredPropsRequest() ? {} : pageResponse.flash),\n }\n }\n\n protected mergeOrMatchItems(\n existingItems: any[],\n newItems: any[],\n matchProp: string,\n matchPropsOn: string[],\n shouldAppend = true,\n ) {\n const items = Array.isArray(existingItems) ? existingItems : []\n\n // Find the matching key for this specific property path\n const matchingKey = matchPropsOn.find((key) => {\n const keyPath = key.split('.').slice(0, -1).join('.')\n\n return keyPath === matchProp\n })\n\n // If no matching key is configured, simply concatenate the arrays\n if (!matchingKey) {\n return shouldAppend ? [...items, ...newItems] : [...newItems, ...items]\n }\n\n // Extract the property name we'll use to match items (e.g., 'id' from 'users.data.id')\n const uniqueProperty = matchingKey.split('.').pop() || ''\n\n // Create a map of new items by their unique property lookups\n const newItemsMap = new Map()\n\n newItems.forEach((item) => {\n if (this.hasUniqueProperty(item, uniqueProperty)) {\n newItemsMap.set(item[uniqueProperty], item)\n }\n })\n\n return shouldAppend\n ? this.appendWithMatching(items, newItems, newItemsMap, uniqueProperty)\n : this.prependWithMatching(items, newItems, newItemsMap, uniqueProperty)\n }\n\n protected appendWithMatching(\n existingItems: any[],\n newItems: any[],\n newItemsMap: Map<any, any>,\n uniqueProperty: string,\n ): any[] {\n // Update existing items with new values, keep non-matching items\n const updatedExisting = existingItems.map((item) => {\n if (this.hasUniqueProperty(item, uniqueProperty) && newItemsMap.has(item[uniqueProperty])) {\n return newItemsMap.get(item[uniqueProperty])\n }\n\n return item\n })\n\n // Filter new items to only include those not already in existing items\n const newItemsToAdd = newItems.filter((item) => {\n if (!this.hasUniqueProperty(item, uniqueProperty)) {\n return true // Always add items without unique property\n }\n\n return !existingItems.some(\n (existing) =>\n this.hasUniqueProperty(existing, uniqueProperty) && existing[uniqueProperty] === item[uniqueProperty],\n )\n })\n\n return [...updatedExisting, ...newItemsToAdd]\n }\n\n protected prependWithMatching(\n existingItems: any[],\n newItems: any[],\n newItemsMap: Map<any, any>,\n uniqueProperty: string,\n ): any[] {\n // Filter existing items, keeping only those not being updated\n const untouchedExisting = existingItems.filter((item) => {\n if (this.hasUniqueProperty(item, uniqueProperty)) {\n return !newItemsMap.has(item[uniqueProperty])\n }\n\n return true\n })\n\n return [...newItems, ...untouchedExisting]\n }\n\n protected hasUniqueProperty(item: any, property: string): boolean {\n return item && typeof item === 'object' && property in item\n }\n\n protected async setRememberedState(pageResponse: Page): Promise<void> {\n const rememberedState = await history.getState<Page['rememberedState']>(history.rememberedState, {})\n\n if (\n this.requestParams.all().preserveState &&\n rememberedState &&\n pageResponse.component === currentPage.get().component\n ) {\n pageResponse.rememberedState = rememberedState\n }\n }\n\n protected getScopedErrors(errors: Errors & ErrorBag): Errors {\n if (!this.requestParams.all().errorBag) {\n return errors\n }\n\n return errors[this.requestParams.all().errorBag || ''] || {}\n }\n}\n", "export default {\n modal: null,\n listener: null,\n\n createIframeAndPage(html: Record<string, unknown> | string): { iframe: HTMLIFrameElement; page: HTMLElement } {\n if (typeof html === 'object') {\n html = `All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(\n html,\n )}`\n }\n\n const page = document.createElement('html')\n page.innerHTML = html\n page.querySelectorAll('a').forEach((a) => a.setAttribute('target', '_top'))\n\n const iframe = document.createElement('iframe')\n iframe.style.backgroundColor = 'white'\n iframe.style.borderRadius = '5px'\n iframe.style.width = '100%'\n iframe.style.height = '100%'\n\n return { iframe, page }\n },\n\n show(html: Record<string, unknown> | string): void {\n const { iframe, page } = this.createIframeAndPage(html)\n\n this.modal = document.createElement('div')\n this.modal.style.position = 'fixed'\n this.modal.style.width = '100vw'\n this.modal.style.height = '100vh'\n this.modal.style.padding = '50px'\n this.modal.style.boxSizing = 'border-box'\n this.modal.style.backgroundColor = 'rgba(0, 0, 0, .6)'\n this.modal.style.zIndex = 200000\n this.modal.addEventListener('click', () => this.hide())\n this.modal.appendChild(iframe)\n\n document.body.prepend(this.modal)\n document.body.style.overflow = 'hidden'\n if (!iframe.contentWindow) {\n throw new Error('iframe not yet ready.')\n }\n iframe.contentWindow.document.open()\n iframe.contentWindow.document.write(page.outerHTML)\n iframe.contentWindow.document.close()\n\n this.listener = this.hideOnEscape.bind(this)\n document.addEventListener('keydown', this.listener)\n },\n\n hide(): void {\n this.modal.outerHTML = ''\n this.modal = null\n document.body.style.overflow = 'visible'\n document.removeEventListener('keydown', this.listener)\n },\n\n hideOnEscape(event: KeyboardEvent): void {\n if (event.keyCode === 27) {\n this.hide()\n }\n },\n}\n", "import modal from './modal'\n\nexport default {\n show(html: Record<string, unknown> | string): void {\n const { iframe, page } = modal.createIframeAndPage(html)\n\n iframe.style.boxSizing = 'border-box'\n iframe.style.display = 'block'\n\n const dialog = document.createElement('dialog')\n dialog.id = 'inertia-error-dialog'\n\n // Style the dialog to mimic 50px padding\n Object.assign(dialog.style, {\n width: 'calc(100vw - 100px)',\n height: 'calc(100vh - 100px)',\n padding: '0',\n margin: 'auto',\n border: 'none',\n backgroundColor: 'transparent',\n })\n\n // There's no way to directly style the backdrop of a dialog, so we need to use a style element...\n const dialogStyleElement = document.createElement('style')\n dialogStyleElement.textContent = `\n dialog#inertia-error-dialog::backdrop {\n background-color: rgba(0, 0, 0, 0.6);\n }\n\n dialog#inertia-error-dialog:focus {\n outline: none;\n }\n `\n document.head.appendChild(dialogStyleElement)\n\n dialog.addEventListener('click', (event: MouseEvent) => {\n if (event.target === dialog) {\n dialog.close()\n }\n })\n\n dialog.addEventListener('close', () => {\n dialogStyleElement.remove()\n dialog.remove()\n })\n\n dialog.appendChild(iframe)\n document.body.prepend(dialog)\n dialog.showModal()\n\n // Focus the dialog so the 'Escape' key works immediately\n dialog.focus()\n\n if (!iframe.contentWindow) {\n throw new Error('iframe not yet ready.')\n }\n\n iframe.contentWindow.document.open()\n iframe.contentWindow.document.write(page.outerHTML)\n iframe.contentWindow.document.close()\n },\n}\n", "import { Request } from './request'\n\nexport class RequestStream {\n protected requests: Request[] = []\n\n protected maxConcurrent: number\n\n protected interruptible: boolean\n\n constructor({ maxConcurrent, interruptible }: { maxConcurrent: number; interruptible: boolean }) {\n this.maxConcurrent = maxConcurrent\n this.interruptible = interruptible\n }\n\n public send(request: Request) {\n this.requests.push(request)\n\n request.send().then(() => {\n this.requests = this.requests.filter((r) => r !== request)\n })\n }\n\n public interruptInFlight(): void {\n this.cancel({ interrupted: true }, false)\n }\n\n public cancelInFlight(): void {\n this.cancel({ cancelled: true }, true)\n }\n\n protected cancel({ cancelled = false, interrupted = false } = {}, force: boolean): void {\n if (!this.shouldCancel(force)) {\n return\n }\n\n const request = this.requests.shift()!\n\n request?.cancel({ interrupted, cancelled })\n }\n\n protected shouldCancel(force: boolean): boolean {\n if (force) {\n return true\n }\n\n return this.interruptible && this.requests.length >= this.maxConcurrent\n }\n}\n", "import { NamedInputEvent, ValidationConfig } from 'laravel-precognition'\nimport {\n FormDataType,\n Method,\n UrlMethodPair,\n UseFormArguments,\n UseFormSubmitArguments,\n UseFormSubmitOptions,\n} from './types'\nimport { isUrlMethodPair } from './url'\n\nexport class UseFormUtils {\n /**\n * Creates a callback that returns a UrlMethodPair.\n *\n * createWayfinderCallback(urlMethodPair)\n * createWayfinderCallback(method, url)\n * createWayfinderCallback(() => urlMethodPair)\n * createWayfinderCallback(() => method, () => url)\n */\n public static createWayfinderCallback(\n ...args: [UrlMethodPair | (() => UrlMethodPair)] | [Method | (() => Method), string | (() => string)]\n ): () => UrlMethodPair {\n return () => {\n if (args.length === 1) {\n // Wayfinder object, return as-is or call function...\n return isUrlMethodPair(args[0]) ? args[0] : args[0]()\n }\n\n // Separate method and url, reconstruct Wayfinder object...\n return {\n method: typeof args[0] === 'function' ? args[0]() : args[0],\n url: typeof args[1] === 'function' ? args[1]() : args[1],\n }\n }\n }\n\n /**\n * Parses all useForm() arguments into { rememberKey, data, precognitionEndpoint }.\n *\n * useForm(data)\n * useForm(rememberKey, data)\n * useForm(method, url, data)\n * useForm(urlMethodPair, data)\n *\n */\n public static parseUseFormArguments<TForm extends FormDataType<TForm>>(\n ...args: UseFormArguments<TForm>\n ): {\n rememberKey: string | null\n data: TForm | (() => TForm)\n precognitionEndpoint: (() => UrlMethodPair) | null\n } {\n if (args.length === 1) {\n // Basic form: useForm(data)\n return {\n rememberKey: null,\n data: args[0],\n precognitionEndpoint: null,\n }\n }\n\n if (args.length === 2) {\n if (typeof args[0] === 'string') {\n // Rememberable form: useForm(rememberKey, data)\n return {\n rememberKey: args[0],\n data: args[1],\n precognitionEndpoint: null,\n }\n }\n\n // Form with Precognition + Wayfinder: useForm(wayfinder, data)\n return {\n rememberKey: null,\n data: args[1],\n precognitionEndpoint: this.createWayfinderCallback(args[0]),\n }\n }\n\n // Form with Precognition: useForm(method, url, data)\n return {\n rememberKey: null,\n data: args[2],\n precognitionEndpoint: this.createWayfinderCallback(args[0], args[1]),\n }\n }\n\n /**\n * Parses all submission arguments into { method, url, options }.\n * It uses the Precognition endpoint if no explicit method/url are provided.\n *\n * form.submit(method, url)\n * form.submit(method, url, options)\n * form.submit(urlMethodPair)\n * form.submit(urlMethodPair, options)\n * form.submit()\n * form.submit(options)\n */\n public static parseSubmitArguments(\n args: UseFormSubmitArguments,\n precognitionEndpoint: (() => UrlMethodPair) | null,\n ): { method: Method; url: string; options: UseFormSubmitOptions } {\n if (args.length === 3 || (args.length === 2 && typeof args[0] === 'string')) {\n // Explicit method and url provided...\n return { method: args[0], url: args[1], options: args[2] ?? {} }\n }\n\n if (isUrlMethodPair(args[0])) {\n // Wayfinder object provided...\n return { ...args[0], options: (args[1] as UseFormSubmitOptions) ?? {} }\n }\n\n // Use Precognition endpoint with optional options...\n return { ...precognitionEndpoint!(), options: (args[0] as UseFormSubmitOptions) ?? {} }\n }\n\n /**\n * Merges headers into the Precognition validate() arguments.\n */\n public static mergeHeadersForValidation(\n field?: string | NamedInputEvent | ValidationConfig,\n config?: ValidationConfig,\n headers?: Record<string, string>,\n ): [string | NamedInputEvent | ValidationConfig | undefined, ValidationConfig | undefined] {\n const merge = (config: ValidationConfig): ValidationConfig => {\n config.headers = {\n ...(headers ?? {}),\n ...(config.headers ?? {}),\n }\n\n return config\n }\n\n if (field && typeof field === 'object' && !('target' in field)) {\n field = merge(field)\n } else if (config && typeof config === 'object') {\n config = merge(config)\n } else if (typeof field === 'string') {\n config = merge(config ?? {})\n } else {\n field = merge(field ?? {})\n }\n\n return [field, config]\n }\n}\n", "const elementInViewport = (el: HTMLElement) => {\n if (el.offsetParent === null) {\n // Element is not participating in layout (e.g., display: none)\n return false\n }\n\n const rect = el.getBoundingClientRect()\n\n // We check both vertically and horizontally for containers that scroll in either direction\n const verticallyVisible = rect.top < window.innerHeight && rect.bottom >= 0\n const horizontallyVisible = rect.left < window.innerWidth && rect.right >= 0\n\n return verticallyVisible && horizontallyVisible\n}\n\nexport const getScrollableParent = (element: HTMLElement | null): HTMLElement | null => {\n const allowsVerticalScroll = (el: HTMLElement): boolean => {\n const computedStyle = window.getComputedStyle(el)\n\n if (['scroll', 'overlay'].includes(computedStyle.overflowY)) {\n return true\n }\n\n if (computedStyle.overflowY !== 'auto') {\n return false\n }\n\n if (['visible', 'clip'].includes(computedStyle.overflowX)) {\n return true\n }\n\n return hasDimensionConstraint(computedStyle.maxHeight, el.style.height)\n }\n\n const allowsHorizontalScroll = (el: HTMLElement): boolean => {\n const computedStyle = window.getComputedStyle(el)\n\n if (['scroll', 'overlay'].includes(computedStyle.overflowX)) {\n return true\n }\n\n if (computedStyle.overflowX !== 'auto') {\n return false\n }\n\n if (['visible', 'clip'].includes(computedStyle.overflowY)) {\n return true\n }\n\n return hasDimensionConstraint(computedStyle.maxWidth, el.style.width)\n }\n\n const hasDimensionConstraint = (computedMaxDimension: string, inlineStyleDimension: string): boolean => {\n if (computedMaxDimension && computedMaxDimension !== 'none' && computedMaxDimension !== '0px') {\n return true\n }\n\n if (inlineStyleDimension && inlineStyleDimension !== 'auto' && inlineStyleDimension !== '0') {\n return true\n }\n\n return false\n }\n\n let parent = element?.parentElement\n\n while (parent) {\n const allowsScroll = allowsVerticalScroll(parent) || allowsHorizontalScroll(parent)\n\n if (window.getComputedStyle(parent).display !== 'contents' && allowsScroll) {\n return parent\n }\n\n parent = parent.parentElement\n }\n\n return null\n}\n\nexport const getElementsInViewportFromCollection = (\n elements: HTMLElement[],\n referenceElement?: HTMLElement,\n): HTMLElement[] => {\n if (!referenceElement) {\n return elements.filter((element) => elementInViewport(element))\n }\n\n const referenceIndex = elements.indexOf(referenceElement)\n const upwardElements: HTMLElement[] = []\n const downwardElements: HTMLElement[] = []\n\n // Traverse upwards until an element is not visible\n for (let i = referenceIndex; i >= 0; i--) {\n const element = elements[i]\n\n if (elementInViewport(element)) {\n upwardElements.push(element)\n } else {\n break\n }\n }\n\n // Traverse downwards until an element is not visible\n for (let i = referenceIndex + 1; i < elements.length; i++) {\n const element = elements[i]\n\n if (elementInViewport(element)) {\n downwardElements.push(element)\n } else {\n break\n }\n }\n\n // Reverse upward elements to maintain DOM order, then append downward elements\n return [...upwardElements.reverse(), ...downwardElements]\n}\n\nexport const requestAnimationFrame = (cb: () => void, times: number = 1): void => {\n window.requestAnimationFrame(() => {\n if (times > 1) {\n requestAnimationFrame(cb, times - 1)\n } else {\n cb()\n }\n })\n}\n\nexport const getInitialPageFromDOM = <T>(id: string, useScriptElement: boolean = false): T | null => {\n if (typeof window === 'undefined') {\n return null\n }\n\n if (!useScriptElement) {\n const el = document.getElementById(id)\n\n if (el?.dataset.page) {\n return JSON.parse(el.dataset.page)\n }\n }\n\n const scriptEl = document.querySelector(`script[data-page=\"${id}\"][type=\"application/json\"]`)\n\n if (scriptEl?.textContent) {\n return JSON.parse(scriptEl.textContent)\n }\n\n return null\n}\n", "import { get, set } from 'lodash-es'\nimport { isFile } from './files'\nimport { FormDataConvertible } from './types'\n\n/**\n * Transform dotted notation to bracket notation.\n *\n * Examples:\n * user.name => user[name]\n * user.profile.city => user[profile][city]\n * user.skills[] => user[skills][]\n * users.company[address].street => users[company][address][street]\n * config\\.app\\.name => config.app.name (escaped, literal)\n */\nfunction undotKey(key: string): string {\n if (!key.includes('.')) {\n return key\n }\n\n const transformSegment = (segment: string): string => {\n if (segment.startsWith('[') && segment.endsWith(']')) {\n return segment // Already in bracket notation - leave untouched\n }\n\n // Convert dotted segment to bracket notation: \"user.name\" \u2192 \"user[name]\"\n return segment.split('.').reduce((result, part, index) => (index === 0 ? part : `${result}[${part}]`))\n }\n\n return key\n .replace(/\\\\\\./g, '__ESCAPED_DOT__') // Temporarily replace escaped dots (\\.) to protect them from transformation\n .split(/(\\[[^\\]]*\\])/) // Split on bracket notation while preserving the brackets in the result array\n .filter(Boolean) // Remove empty strings from the split operation\n .map(transformSegment) // Transform each segment: dotted parts become bracketed, existing brackets stay as-is\n .join('') // Reassemble all segments back into a single string\n .replace(/__ESCAPED_DOT__/g, '.') // Restore the escaped dots as literal dots in the final result\n}\n\n/**\n * Parse a key into an array of path segments.\n *\n * Examples:\n * - \"user[name]\" => [\"user\", \"name\"]\n * - \"tags[]\" => [\"tags\", \"\"]\n * - \"items[0][name]\" => [\"items\", 0, \"name\"]\n */\nfunction parseKey(key: string): (string | number | '')[] {\n const path: (string | number | '')[] = []\n const pattern = /([^\\[\\]]+)|\\[(\\d*)\\]/g\n let match: RegExpExecArray | null\n\n while ((match = pattern.exec(key)) !== null) {\n if (match[1] !== undefined) {\n path.push(match[1])\n } else if (match[2] !== undefined) {\n path.push(match[2] === '' ? '' : Number(match[2]))\n }\n }\n\n return path\n}\n\n/**\n * Set value in nested object, always creating objects (never arrays).\n * This ensures we can analyze the final structure before deciding what should be arrays.\n */\nfunction setNestedObject(obj: Record<string, any>, path: string[], value: any): void {\n let current = obj\n\n for (let i = 0; i < path.length - 1; i++) {\n if (!(path[i] in current)) {\n current[path[i]] = {}\n }\n\n current = current[path[i]]\n }\n\n current[path[path.length - 1]] = value\n}\n\n/**\n * Check if an object has sequential numeric keys (0, 1, 2, ...).\n */\nfunction objectHasSequentialNumericKeys(value: any): boolean {\n const keys = Object.keys(value)\n const numericKeys = keys\n .filter((k) => /^\\d+$/.test(k))\n .map(Number)\n .sort((a, b) => a - b)\n\n return (\n keys.length === numericKeys.length &&\n numericKeys.length > 0 &&\n numericKeys[0] === 0 &&\n numericKeys.every((n, i) => n === i)\n )\n}\n\n/**\n * Convert objects with sequential numeric keys (0, 1, 2, ...) to arrays.\n */\nfunction convertSequentialObjectsToArrays(value: any): any {\n if (Array.isArray(value)) {\n return value.map(convertSequentialObjectsToArrays)\n }\n\n if (typeof value !== 'object' || value === null || isFile(value)) {\n return value\n }\n\n if (objectHasSequentialNumericKeys(value)) {\n const result = []\n\n for (let i = 0; i < Object.keys(value).length; i++) {\n result[i] = convertSequentialObjectsToArrays(value[i])\n }\n\n return result\n }\n\n // Keep as object, recursively process values\n const result: Record<string, any> = {}\n\n for (const key in value) {\n result[key] = convertSequentialObjectsToArrays(value[key])\n }\n\n return result\n}\n\n/**\n * Convert a FormData instance into an object structure.\n */\nexport function formDataToObject(source: FormData): Record<string, FormDataConvertible> {\n const form: Record<string, any> = {}\n\n // formData.entries() returns an iterator where the first element is the key and the second element\n // is the value. Examples of the keys are \"user[name]\", \"tags[]\", \"items[0][name]\", \"user.name\", etc.\n // We should construct a new (nested) object based on these keys.\n for (const [key, value] of source.entries()) {\n if (value instanceof File && value.size === 0 && value.name === '') {\n // Check if the given value is an empty file. We want to filter\n // those out as they prevent us from comparing objects with\n // each other, which we do to set the isDirty prop.\n continue\n }\n\n const path = parseKey(undotKey(key))\n\n // If the key ends with an empty string (''), treat it as an array push (e.g., \"tags[]\")\n if (path[path.length - 1] === '') {\n const arrayPath = path.slice(0, -1)\n const existing = get(form, arrayPath)\n\n if (Array.isArray(existing)) {\n existing.push(value)\n } else if (existing && typeof existing === 'object' && !isFile(existing)) {\n // If existing is an object with numeric keys, convert to array (treating indices as relative)\n const numericKeys = Object.keys(existing)\n .filter((k) => /^\\d+$/.test(k))\n .map(Number)\n .sort((a, b) => a - b)\n\n set(form, arrayPath, numericKeys.length > 0 ? [...numericKeys.map((k) => existing[k]), value] : [value])\n } else {\n set(form, arrayPath, [value])\n }\n\n continue\n }\n\n // Always build nested objects first, then convert sequential numeric keys to arrays.\n // This prevents the creation of sparse arrays when mixing numeric and string keys.\n setNestedObject(form, path.map(String), value)\n }\n\n // Convert objects with sequential numeric keys (0, 1, 2, ...) to arrays\n return convertSequentialObjectsToArrays(form)\n}\n", "import { config, HeadManager, HeadManagerOnUpdateCallback, HeadManagerTitleCallback } from '.'\nimport debounce from './debounce'\n\nconst Renderer = {\n preferredAttribute(): 'data-inertia' | 'inertia' {\n return config.get('future.useDataInertiaHeadAttribute') ? 'data-inertia' : 'inertia'\n },\n\n buildDOMElement(tag: string): ChildNode {\n const template = document.createElement('template')\n template.innerHTML = tag\n const node = template.content.firstChild as Element\n\n if (!tag.startsWith('<script ')) {\n return node\n }\n\n const script = document.createElement('script')\n script.innerHTML = node.innerHTML\n node.getAttributeNames().forEach((name) => {\n script.setAttribute(name, node.getAttribute(name) || '')\n })\n\n return script\n },\n\n isInertiaManagedElement(element: Element): boolean {\n return element.nodeType === Node.ELEMENT_NODE && element.getAttribute(this.preferredAttribute()) !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const attribute = this.preferredAttribute()\n const key = element.getAttribute(attribute)\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute(attribute) === key)\n }\n\n return -1\n },\n\n update: debounce(function (elements: Array<string>) {\n const sourceElements = elements.map((element) => this.buildDOMElement(element))\n const targetElements = Array.from(document.head.childNodes).filter((element) =>\n this.isInertiaManagedElement(element as Element),\n )\n\n targetElements.forEach((targetElement) => {\n const index = this.findMatchingElementIndex(targetElement as Element, sourceElements)\n if (index === -1) {\n targetElement?.parentNode?.removeChild(targetElement)\n return\n }\n\n const sourceElement = sourceElements.splice(index, 1)[0]\n if (sourceElement && !targetElement.isEqualNode(sourceElement)) {\n targetElement?.parentNode?.replaceChild(sourceElement, targetElement)\n }\n })\n\n sourceElements.forEach((element) => document.head.appendChild(element))\n }, 1),\n}\n\nexport default function createHeadManager(\n isServer: boolean,\n titleCallback: HeadManagerTitleCallback,\n onUpdate: HeadManagerOnUpdateCallback,\n): HeadManager {\n const states: Record<string, Array<string>> = {}\n let lastProviderId = 0\n\n function connect(): string {\n const id = (lastProviderId += 1)\n states[id] = []\n return id.toString()\n }\n\n function disconnect(id: string): void {\n if (id === null || Object.keys(states).indexOf(id) === -1) {\n return\n }\n\n delete states[id]\n commit()\n }\n\n function reconnect(id: string): void {\n if (Object.keys(states).indexOf(id) === -1) {\n states[id] = []\n }\n }\n\n function update(id: string, elements: Array<string> = []): void {\n if (id !== null && Object.keys(states).indexOf(id) > -1) {\n states[id] = elements\n }\n\n commit()\n }\n\n function collect(): Array<string> {\n const title = titleCallback('')\n const attribute = Renderer.preferredAttribute()\n\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title ${attribute}=\"\">${title}</title>` } : {}),\n }\n\n const elements = Object.values(states)\n .reduce((carry, elements) => carry.concat(elements), [])\n .reduce((carry, element) => {\n if (element.indexOf('<') === -1) {\n return carry\n }\n\n if (element.indexOf('<title ') === 0) {\n const title = element.match(/(<title [^>]+>)(.*?)(<\\/title>)/)\n carry.title = title ? `${title[1]}${titleCallback(title[2])}${title[3]}` : element\n return carry\n }\n\n const match = element.match(attribute === 'inertia' ? / inertia=\"[^\"]+\"/ : / data-inertia=\"[^\"]+\"/)\n if (match) {\n carry[match[0]] = element\n } else {\n carry[Object.keys(carry).length] = element\n }\n\n return carry\n }, defaults)\n\n return Object.values(elements)\n }\n\n function commit(): void {\n isServer ? onUpdate(collect()) : Renderer.update(collect())\n }\n\n // By committing during initialization, we can guarantee that the default\n // tags are set, as well as that they exist during SSR itself.\n commit()\n\n return {\n forceUpdate: commit,\n createProvider: function () {\n const id = connect()\n\n return {\n preferredAttribute: Renderer.preferredAttribute,\n reconnect: () => reconnect(id),\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\n}\n", "import { router } from '../index'\nimport { page as currentPage } from '../page'\nimport { Page, PendingVisit, ReloadOptions, ScrollProp, UseInfiniteScrollDataManager } from '../types'\n\nconst MERGE_INTENT_HEADER = 'X-Inertia-Infinite-Scroll-Merge-Intent'\n\ntype Side = 'previous' | 'next'\ntype ScrollPropPageNames = keyof Pick<ScrollProp, 'previousPage' | 'nextPage'>\n\ntype InfiniteScrollState = {\n previousPage: number | string | null\n nextPage: number | string | null\n lastLoadedPage: number | string | null\n requestCount: number\n}\n\nexport const useInfiniteScrollData = (options: {\n getPropName: () => string\n onBeforeUpdate: () => void\n onBeforePreviousRequest: () => void\n onBeforeNextRequest: () => void\n onCompletePreviousRequest: (loadedPage: string | number | null) => void\n onCompleteNextRequest: (loadedPage: string | number | null) => void\n}): UseInfiniteScrollDataManager => {\n const getScrollPropFromCurrentPage = (): ScrollProp => {\n const scrollProp = currentPage.get().scrollProps?.[options.getPropName()]\n\n if (scrollProp) {\n return scrollProp\n }\n\n throw new Error(`The page object does not contain a scroll prop named \"${options.getPropName()}\".`)\n }\n\n const state = {\n component: null,\n loading: false,\n previousPage: null,\n nextPage: null,\n lastLoadedPage: null,\n requestCount: 0,\n } as {\n component: string | null\n loading: boolean\n } & InfiniteScrollState\n\n const resetState = () => {\n const scrollProp = getScrollPropFromCurrentPage()\n\n state.component = currentPage.get().component\n state.loading = false\n state.previousPage = scrollProp.previousPage\n state.nextPage = scrollProp.nextPage\n state.lastLoadedPage = scrollProp.currentPage\n state.requestCount = 0\n }\n\n const getRememberKey = () => `inertia:infinite-scroll-data:${options.getPropName()}`\n\n if (typeof window !== 'undefined') {\n resetState()\n\n const rememberedState = router.restore(getRememberKey()) as InfiniteScrollState | undefined\n\n if (\n rememberedState &&\n typeof rememberedState === 'object' &&\n rememberedState.lastLoadedPage === getScrollPropFromCurrentPage().currentPage\n ) {\n // Restore remembered state only when it's consistent with the current scroll prop,\n // which ensures back/forward navigation works while direct URL visits reset properly.\n state.previousPage = rememberedState.previousPage\n state.nextPage = rememberedState.nextPage\n state.lastLoadedPage = rememberedState.lastLoadedPage\n state.requestCount = rememberedState.requestCount || 0\n }\n }\n\n const removeEventListener = router.on('success', (event) => {\n if (state.component === event.detail.page.component && getScrollPropFromCurrentPage().reset) {\n resetState()\n }\n })\n\n const getScrollPropKeyForSide = (side: Side): ScrollPropPageNames => {\n return side === 'next' ? 'nextPage' : 'previousPage'\n }\n\n const findPageToLoad = (side: Side) => {\n const pagePropName = getScrollPropKeyForSide(side)\n\n return state[pagePropName]\n }\n\n const syncStateOnSuccess = (side: Side) => {\n const scrollProp = getScrollPropFromCurrentPage()\n const paginationProp = getScrollPropKeyForSide(side)\n\n state.lastLoadedPage = scrollProp.currentPage\n state[paginationProp] = scrollProp[paginationProp]\n\n state.requestCount += 1\n\n // We save the state in the browser history so it can be restored\n // if the user navigates away and then back to the page...\n router.remember(\n {\n previousPage: state.previousPage,\n nextPage: state.nextPage,\n lastLoadedPage: state.lastLoadedPage,\n requestCount: state.requestCount,\n } as InfiniteScrollState,\n getRememberKey(),\n )\n }\n\n const getPageName = () => getScrollPropFromCurrentPage().pageName\n const getRequestCount = () => state.requestCount\n\n const fetchPage = (side: Side, reloadOptions: ReloadOptions = {}): void => {\n const page = findPageToLoad(side)\n\n if (state.loading || page === null) {\n return\n }\n\n state.loading = true\n\n router.reload({\n ...reloadOptions,\n data: { [getPageName()]: page },\n only: [options.getPropName()],\n preserveUrl: true, // we handle URL updates manually via useInfiniteScrollQueryString()\n headers: {\n [MERGE_INTENT_HEADER]: side === 'previous' ? 'prepend' : 'append',\n ...reloadOptions.headers,\n },\n onBefore: (visit: PendingVisit) => {\n side === 'next' ? options.onBeforeNextRequest() : options.onBeforePreviousRequest()\n reloadOptions.onBefore?.(visit)\n },\n onBeforeUpdate: (page: Page) => {\n options.onBeforeUpdate()\n reloadOptions.onBeforeUpdate?.(page)\n },\n onSuccess: (page: Page) => {\n syncStateOnSuccess(side)\n reloadOptions.onSuccess?.(page)\n },\n onFinish: (visit: any) => {\n state.loading = false\n side === 'next'\n ? options.onCompleteNextRequest(state.lastLoadedPage)\n : options.onCompletePreviousRequest(state.lastLoadedPage)\n reloadOptions.onFinish?.(visit)\n },\n })\n }\n\n const getLastLoadedPage = () => state.lastLoadedPage\n const hasPrevious = () => !!state.previousPage\n const hasNext = () => !!state.nextPage\n const fetchPrevious = (reloadOptions?: ReloadOptions): void => fetchPage('previous', reloadOptions)\n const fetchNext = (reloadOptions?: ReloadOptions): void => fetchPage('next', reloadOptions)\n\n return {\n getLastLoadedPage,\n getPageName,\n getRequestCount,\n hasPrevious,\n hasNext,\n fetchNext,\n fetchPrevious,\n removeEventListener,\n }\n}\n", "type IntersectionObserverCallback = (entry: IntersectionObserverEntry) => void\n\ninterface IntersectionObserverManager {\n new: (callback: IntersectionObserverCallback, options?: IntersectionObserverInit) => IntersectionObserver\n flushAll: () => void\n}\n\nexport const useIntersectionObservers = (): IntersectionObserverManager => {\n const intersectionObservers: IntersectionObserver[] = []\n\n const newIntersectionObserver = (\n callback: IntersectionObserverCallback,\n options: IntersectionObserverInit = {},\n ): IntersectionObserver => {\n const observer = new IntersectionObserver((entries) => {\n for (const entry of entries) {\n if (entry.isIntersecting) {\n callback(entry)\n }\n }\n }, options)\n\n intersectionObservers.push(observer)\n\n return observer\n }\n\n const flushAll = () => {\n intersectionObservers.forEach((observer) => observer.disconnect())\n intersectionObservers.length = 0\n }\n\n return {\n new: newIntersectionObserver,\n flushAll,\n }\n}\n", "import { router } from '..'\nimport debounce from '../debounce'\nimport { useIntersectionObservers } from '../intersectionObservers'\nimport { UseInfiniteScrollElementManager } from '../types'\n\nconst INFINITE_SCROLL_PAGE_KEY = 'infiniteScrollPage'\nconst INFINITE_SCROLL_IGNORE_KEY = 'infiniteScrollIgnore'\n\ntype ElementRange = {\n from: number\n to: number\n}\n\nexport const getPageFromElement = (element: HTMLElement): string | undefined =>\n element.dataset[INFINITE_SCROLL_PAGE_KEY]\n\nexport const useInfiniteScrollElementManager = (options: {\n shouldFetchNext: () => boolean\n shouldFetchPrevious: () => boolean\n getTriggerMargin: () => number\n getStartElement: () => HTMLElement\n getEndElement: () => HTMLElement\n getItemsElement: () => HTMLElement\n getScrollableParent: () => HTMLElement | null\n onPreviousTriggered: () => void\n onNextTriggered: () => void\n onItemIntersected: (element: HTMLElement) => void\n getPropName: () => string\n}): UseInfiniteScrollElementManager => {\n const intersectionObservers = useIntersectionObservers()\n\n let itemsObserver: IntersectionObserver\n let startElementObserver: IntersectionObserver\n let endElementObserver: IntersectionObserver\n let itemsMutationObserver: MutationObserver\n let triggersEnabled = false\n\n const setupObservers = () => {\n // Watch for manually added DOM elements (not from server responses)\n // This mutation observer tracks when new elements are added to the slot,\n // so we can distinguish between user-added content and server-loaded pages\n itemsMutationObserver = new MutationObserver((mutations) => {\n mutations.forEach((mutation) => {\n mutation.addedNodes.forEach((node) => {\n if (node.nodeType !== Node.ELEMENT_NODE) {\n return\n }\n\n addedElements.add(node as HTMLElement)\n })\n })\n\n rememberElementsDebounced()\n })\n\n itemsMutationObserver.observe(options.getItemsElement(), { childList: true })\n\n // Track individual items entering/leaving viewport for URL synchronization\n // When items become visible, we update the URL to reflect the current page\n itemsObserver = intersectionObservers.new((entry: IntersectionObserverEntry) =>\n options.onItemIntersected(entry.target as HTMLElement),\n )\n\n // Set up trigger zones at start/end that load more content when intersected. The rootMargin\n // creates a buffer zone so loading starts before user reaches the edge. We should always\n // have a root margin of at least 1px as our default elements have no height\n const observerOptions: IntersectionObserverInit = {\n root: options.getScrollableParent(),\n rootMargin: `${Math.max(1, options.getTriggerMargin())}px`,\n }\n\n startElementObserver = intersectionObservers.new(options.onPreviousTriggered, observerOptions)\n endElementObserver = intersectionObservers.new(options.onNextTriggered, observerOptions)\n }\n\n const enableTriggers = () => {\n if (triggersEnabled) {\n // Make sure we don't register multiple watchers\n disableTriggers()\n }\n\n const startElement = options.getStartElement()\n const endElement = options.getEndElement()\n\n if (startElement && options.shouldFetchPrevious()) {\n startElementObserver.observe(startElement)\n }\n\n if (endElement && options.shouldFetchNext()) {\n endElementObserver.observe(endElement)\n }\n\n triggersEnabled = true\n }\n\n const disableTriggers = () => {\n if (!triggersEnabled) {\n return\n }\n\n startElementObserver.disconnect()\n endElementObserver.disconnect()\n triggersEnabled = false\n }\n\n const refreshTriggers = () => {\n if (triggersEnabled) {\n enableTriggers()\n }\n }\n\n const flushAll = () => {\n disableTriggers()\n intersectionObservers.flushAll()\n itemsMutationObserver?.disconnect()\n }\n\n const addedElements = new Set<HTMLElement>()\n\n const elementIsUntagged = (element: HTMLElement): boolean =>\n !(INFINITE_SCROLL_PAGE_KEY in element.dataset) && !(INFINITE_SCROLL_IGNORE_KEY in element.dataset)\n\n const processManuallyAddedElements = () => {\n // Tag manually added elements so they don't interfere with URL management\n // These elements get marked as \"ignore\" since they weren't loaded from the server\n Array.from(addedElements).forEach((element) => {\n if (elementIsUntagged(element)) {\n element.dataset[INFINITE_SCROLL_IGNORE_KEY] = 'true'\n }\n\n itemsObserver.observe(element)\n })\n\n addedElements.clear()\n }\n\n const findUntaggedElements = (containerElement: HTMLElement): HTMLElement[] => {\n return Array.from(\n containerElement.querySelectorAll(\n `:scope > *:not([data-infinite-scroll-page]):not([data-infinite-scroll-ignore])`,\n ),\n )\n }\n\n let hasRestoredElements = false\n\n const processServerLoadedElements = (loadedPage: string | number | null) => {\n // On first run, try to restore the elements tags from browser history\n if (!hasRestoredElements) {\n hasRestoredElements = true\n\n if (restoreElements()) {\n return\n }\n }\n\n // Tag new server-loaded elements with their page number for URL management\n // This allows us to update the URL based on which page's content is most visible\n findUntaggedElements(options.getItemsElement()).forEach((element) => {\n if (elementIsUntagged(element)) {\n element.dataset[INFINITE_SCROLL_PAGE_KEY] = loadedPage?.toString() || '1'\n }\n\n itemsObserver.observe(element)\n })\n\n rememberElements()\n }\n\n const getElementsRememberKey = () => `inertia:infinite-scroll-elements:${options.getPropName()}`\n\n // Remember in browser history which elements belong to which page, so we can restore\n // them on back/forward navigation and keep URL synchronization working correctly\n const rememberElements = () => {\n const pageElementRange: Record<string, ElementRange> = {}\n const childNodes = options.getItemsElement().childNodes\n\n for (let index = 0; index < childNodes.length; index++) {\n const node = childNodes[index]\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue\n }\n\n const page = getPageFromElement(node as HTMLElement)\n\n if (typeof page === 'undefined') {\n continue\n }\n\n if (!(page in pageElementRange)) {\n pageElementRange[page] = { from: index, to: index }\n } else {\n pageElementRange[page].to = index\n }\n }\n\n router.remember(pageElementRange, getElementsRememberKey())\n }\n\n const rememberElementsDebounced = debounce(rememberElements, 250)\n\n const restoreElements = (): boolean => {\n const pageElementRange = router.restore(getElementsRememberKey()) as Record<string, ElementRange> | undefined\n\n if (!pageElementRange || typeof pageElementRange !== 'object') {\n return false\n }\n\n const childNodes = options.getItemsElement().childNodes\n\n // Use for loop instead of forEach for better performance\n for (let index = 0; index < childNodes.length; index++) {\n const node = childNodes[index]\n\n if (node.nodeType !== Node.ELEMENT_NODE) {\n continue\n }\n\n const element = node as HTMLElement\n\n // Find which page this element belongs to based on ranges\n let elementPage: string | undefined\n\n for (const [page, range] of Object.entries(pageElementRange)) {\n if (index >= range.from && index <= range.to) {\n elementPage = page\n break\n }\n }\n\n if (elementPage) {\n element.dataset[INFINITE_SCROLL_PAGE_KEY] = elementPage\n } else if (!elementIsUntagged(element)) {\n continue\n } else {\n element.dataset[INFINITE_SCROLL_IGNORE_KEY] = 'true'\n }\n\n itemsObserver.observe(element)\n }\n\n return true\n }\n\n return {\n setupObservers,\n enableTriggers,\n disableTriggers,\n refreshTriggers,\n flushAll,\n processManuallyAddedElements,\n processServerLoadedElements,\n }\n}\n", "import { hrefToUrl, router, urlHasProtocol, urlToString } from '..'\nimport debounce from '../debounce'\nimport { getElementsInViewportFromCollection } from '../domUtils'\nimport { page as currentPage } from './../page'\nimport Queue from './../queue'\nimport { getPageFromElement } from './elements'\n\n// Shared queue among all instances to ensure URL updates are processed sequentially\nconst queue = new Queue<Promise<void>>()\n\nlet initialUrl: URL | null\nlet payloadUrl: URL | null\nlet initialUrlWasAbsolute: boolean | null = null\n\n/**\n * As users scroll through infinite content, this system updates the URL to reflect\n * which page they're currently viewing. It uses a \"most visible page\" calculation\n * so that the URL reflects whichever page has the most visible items.\n */\nexport const useInfiniteScrollQueryString = (options: {\n getPageName: () => string\n getItemsElement: () => HTMLElement\n shouldPreserveUrl: () => boolean\n}) => {\n let enabled = true\n\n const queuePageUpdate = (page: string) => {\n queue\n .add(() => {\n return new Promise((resolve) => {\n if (!enabled) {\n initialUrl = payloadUrl = null\n return resolve()\n }\n\n if (!initialUrl || !payloadUrl) {\n const currentPageUrl = currentPage.get().url\n initialUrl = hrefToUrl(currentPageUrl)\n payloadUrl = hrefToUrl(currentPageUrl)\n initialUrlWasAbsolute = urlHasProtocol(currentPageUrl)\n }\n\n const pageName = options.getPageName()\n const searchParams = payloadUrl.searchParams\n\n // Clean URLs: don't show ?page=1 in the URL, just remove the parameter entirely\n if (page === '1') {\n searchParams.delete(pageName)\n } else {\n searchParams.set(pageName, page)\n }\n\n setTimeout(() => resolve())\n })\n })\n .finally(() => {\n if (\n enabled &&\n initialUrl &&\n payloadUrl &&\n initialUrl.href !== payloadUrl.href &&\n initialUrlWasAbsolute !== null\n ) {\n // Update URL without triggering a page reload or affecting scroll position\n router.replace({\n url: urlToString(payloadUrl, initialUrlWasAbsolute),\n preserveScroll: true,\n preserveState: true,\n })\n }\n\n initialUrl = payloadUrl = initialUrlWasAbsolute = null\n })\n }\n\n // Debounced to avoid excessive URL updates during fast scrolling\n const onItemIntersected = debounce((itemElement: HTMLElement) => {\n const itemsElement = options.getItemsElement()\n\n if (!enabled || options.shouldPreserveUrl() || !itemElement || !itemsElement) {\n return\n }\n\n // Count how many items from each page are currently visible in the viewport\n const pageMap = new Map<string, number>()\n const elements = [...itemsElement.children] as HTMLElement[]\n\n getElementsInViewportFromCollection(elements, itemElement).forEach((element) => {\n const page = getPageFromElement(element) ?? '1'\n\n if (pageMap.has(page)) {\n pageMap.set(page, pageMap.get(page)! + 1)\n } else {\n pageMap.set(page, 1)\n }\n })\n\n // Find the page with the most visible items - this becomes the \"current\" page\n const sortedPages = Array.from(pageMap.entries()).sort((a, b) => b[1] - a[1])\n const mostVisiblePage = sortedPages[0]?.[0]\n\n if (mostVisiblePage !== undefined) {\n queuePageUpdate(mostVisiblePage)\n }\n }, 250)\n\n return {\n onItemIntersected,\n cancel: () => (enabled = false),\n }\n}\n", "import { getElementsInViewportFromCollection } from '../domUtils'\n\n/**\n * When loading content \"before\" the current viewport (e.g. loading page 1 when viewing page 2),\n * new content is prepended to the DOM, which naturally pushes existing content down and\n * disrupts the user's scroll position. This system maintains visual stability by:\n *\n * 1. Capturing a reference element and its position before the update\n * 2. After new content is added, calculating how far that reference element moved\n * 3. Adjusting scroll position to keep the reference element in the same visual location\n */\nexport const useInfiniteScrollPreservation = (options: {\n getScrollableParent: () => HTMLElement | null\n getItemsElement: () => HTMLElement\n}) => {\n const createCallbacks = () => {\n let currentScrollTop: number\n let referenceElement: Element | null = null\n let referenceElementTop: number = 0\n\n const captureScrollPosition = () => {\n const scrollableContainer = options.getScrollableParent()\n const itemsElement = options.getItemsElement()\n\n // Capture current scroll position\n currentScrollTop = scrollableContainer?.scrollTop || window.scrollY\n\n // Find the first visible element to use as a reference point\n // This element will help us calculate how much the content shifted after the update\n const visibleElements = getElementsInViewportFromCollection([...itemsElement.children] as HTMLElement[])\n\n if (visibleElements.length > 0) {\n referenceElement = visibleElements[0]\n const containerRect = scrollableContainer?.getBoundingClientRect() || { top: 0 }\n const containerTop = scrollableContainer ? containerRect.top : 0\n const rect = referenceElement.getBoundingClientRect()\n // Store the reference element's position relative to its container\n referenceElementTop = rect.top - containerTop\n }\n }\n\n const restoreScrollPosition = () => {\n if (!referenceElement) {\n return\n }\n\n let attempts = 0\n let restored = false\n\n const restore = () => {\n attempts++\n\n if (restored || attempts > 10) {\n return false\n }\n\n // Calculate where our reference element ended up after new content was prepended\n const scrollableContainer = options.getScrollableParent()\n const containerRect = scrollableContainer?.getBoundingClientRect() || { top: 0 }\n const containerTop = scrollableContainer ? containerRect.top : 0\n const newRect = referenceElement!.getBoundingClientRect()\n const newElementTop = newRect.top - containerTop\n\n // Calculate how much the reference element moved due to content being prepended\n const adjustment = newElementTop - referenceElementTop\n\n if (adjustment === 0) {\n // Try again on the next frame, as DOM may still be updating\n window.requestAnimationFrame(restore)\n return\n }\n\n // Adjust scroll position to compensate for the movement, keeping the reference element\n // in the same visual position as before the update\n if (scrollableContainer) {\n scrollableContainer.scrollTo({ top: currentScrollTop + adjustment })\n } else {\n window.scrollTo(0, window.scrollY + adjustment)\n }\n\n restored = true\n }\n\n window.requestAnimationFrame(restore)\n }\n\n return {\n captureScrollPosition,\n restoreScrollPosition,\n }\n }\n\n return {\n createCallbacks,\n }\n}\n", "import { requestAnimationFrame } from './domUtils'\nimport { router } from './index'\nimport { useInfiniteScrollData } from './infiniteScroll/data'\nimport { useInfiniteScrollElementManager } from './infiniteScroll/elements'\nimport { useInfiniteScrollQueryString } from './infiniteScroll/queryString'\nimport { useInfiniteScrollPreservation } from './infiniteScroll/scrollPreservation'\nimport { Page, ReloadOptions, UseInfiniteScrollOptions, UseInfiniteScrollProps } from './types'\n\n/**\n * Core infinite scroll composable that orchestrates data fetching, DOM management,\n * scroll preservation, and URL synchronization.\n *\n * This is the main entry point that coordinates four sub-systems:\n * - Data management: Handles pagination state and server requests\n * - Element management: DOM observation and intersection detection\n * - Query string sync: Updates URL as user scrolls through pages\n * - Scroll preservation: Maintains scroll position during content updates\n */\nexport default function useInfiniteScroll(options: UseInfiniteScrollOptions): UseInfiniteScrollProps {\n const queryStringManager = useInfiniteScrollQueryString({ ...options, getPageName: () => dataManager.getPageName() })\n\n // Create scroll preservation callbacks that capture and restore scroll position\n // and restore it after new content is prepended to maintain visual stability\n const scrollPreservation = useInfiniteScrollPreservation(options)\n\n const elementManager = useInfiniteScrollElementManager({\n ...options,\n // As items enter viewport, update URL to reflect the most visible page\n onItemIntersected: queryStringManager.onItemIntersected,\n onPreviousTriggered: () => dataManager.fetchPrevious(),\n onNextTriggered: () => dataManager.fetchNext(),\n })\n\n const dataManager = useInfiniteScrollData({\n ...options,\n // Before updating page data, tag any manually added DOM elements\n // so they don't get confused with server-loaded content\n onBeforeUpdate: elementManager.processManuallyAddedElements,\n // After successful request, tag new server content\n onCompletePreviousRequest: (loadedPage) => {\n options.onCompletePreviousRequest()\n requestAnimationFrame(() => elementManager.processServerLoadedElements(loadedPage), 2)\n },\n onCompleteNextRequest: (loadedPage) => {\n options.onCompleteNextRequest()\n requestAnimationFrame(() => elementManager.processServerLoadedElements(loadedPage), 2)\n },\n })\n\n const addScrollPreservationCallbacks = (reloadOptions: ReloadOptions): ReloadOptions => {\n const { captureScrollPosition, restoreScrollPosition } = scrollPreservation.createCallbacks()\n\n const originalOnBeforeUpdate = reloadOptions.onBeforeUpdate || (() => {})\n const originalOnSuccess = reloadOptions.onSuccess || (() => {})\n\n reloadOptions.onBeforeUpdate = (page: Page) => {\n originalOnBeforeUpdate(page)\n captureScrollPosition()\n }\n\n reloadOptions.onSuccess = (page: Page) => {\n originalOnSuccess(page)\n restoreScrollPosition()\n }\n\n return reloadOptions\n }\n\n const originalFetchNext = dataManager.fetchNext\n dataManager.fetchNext = (reloadOptions: ReloadOptions = {}) => {\n if (options.inReverseMode()) {\n reloadOptions = addScrollPreservationCallbacks(reloadOptions)\n }\n\n originalFetchNext(reloadOptions)\n }\n\n const originalFetchPrevious = dataManager.fetchPrevious\n dataManager.fetchPrevious = (reloadOptions: ReloadOptions = {}) => {\n if (!options.inReverseMode()) {\n reloadOptions = addScrollPreservationCallbacks(reloadOptions)\n }\n\n originalFetchPrevious(reloadOptions)\n }\n\n const removeEventListener = router.on('success', () => requestAnimationFrame(elementManager.refreshTriggers, 2))\n\n return {\n dataManager,\n elementManager,\n flush: () => {\n removeEventListener()\n dataManager.removeEventListener()\n elementManager.flushAll()\n queryStringManager.cancel()\n },\n }\n}\n", "type MouseNavigationEvent = Pick<\n MouseEvent,\n 'altKey' | 'ctrlKey' | 'shiftKey' | 'metaKey' | 'button' | 'currentTarget' | 'defaultPrevented' | 'target'\n>\n\ntype KeyboardNavigationEvent = Pick<KeyboardEvent, 'currentTarget' | 'defaultPrevented' | 'key' | 'target'>\n\nfunction isContentEditableOrPrevented(event: KeyboardNavigationEvent | MouseNavigationEvent): boolean {\n return (event.target instanceof HTMLElement && event.target.isContentEditable) || event.defaultPrevented\n}\n\n/**\n * Determine if this mouse event should be intercepted for navigation purposes.\n * Links with modifier keys or non-left clicks should not be intercepted.\n * Content editable elements and prevented events are ignored.\n */\nexport function shouldIntercept(event: MouseNavigationEvent): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n\n return !(\n isContentEditableOrPrevented(event) ||\n (isLink && event.altKey) ||\n (isLink && event.ctrlKey) ||\n (isLink && event.metaKey) ||\n (isLink && event.shiftKey) ||\n (isLink && 'button' in event && event.button !== 0)\n )\n}\n\n/**\n * Determine if this keyboard event should trigger a navigation request.\n * Enter triggers navigation for both links and buttons currently.\n * Space only triggers navigation for buttons specifically.\n */\nexport function shouldNavigate(event: KeyboardNavigationEvent): boolean {\n const isButton = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'button'\n\n return !isContentEditableOrPrevented(event) && (event.key === 'Enter' || (isButton && event.key === ' '))\n}\n", "/* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress\n * @license MIT */\n\nimport { ProgressSettings } from './types'\n\nconst baseComponentSelector = 'nprogress'\n\nlet progress: HTMLDivElement\n\nconst settings: ProgressSettings = {\n minimum: 0.08,\n easing: 'linear',\n positionUsing: 'translate3d',\n speed: 200,\n trickle: true,\n trickleSpeed: 200,\n showSpinner: true,\n barSelector: '[role=\"bar\"]',\n spinnerSelector: '[role=\"spinner\"]',\n parent: 'body',\n color: '#29d',\n includeCSS: true,\n template: [\n '<div class=\"bar\" role=\"bar\">',\n '<div class=\"peg\"></div>',\n '</div>',\n '<div class=\"spinner\" role=\"spinner\">',\n '<div class=\"spinner-icon\"></div>',\n '</div>',\n ].join(''),\n}\n\nlet status: number | null = null\n\nconst configure = (options: Partial<ProgressSettings>) => {\n Object.assign(settings, options)\n\n if (settings.includeCSS) {\n injectCSS(settings.color)\n }\n\n progress = document.createElement('div')\n progress.id = baseComponentSelector\n progress.innerHTML = settings.template\n}\n\n/**\n * Sets the progress bar status, where `n` is a number from `0.0` to `1.0`.\n */\nconst set = (n: number) => {\n const started = isStarted()\n\n n = clamp(n, settings.minimum, 1)\n status = n === 1 ? null : n\n\n const progress = render(!started)\n const bar = progress.querySelector(settings.barSelector)! as HTMLElement\n const speed = settings.speed\n const ease = settings.easing\n\n progress.offsetWidth /* Repaint */\n\n queue((next) => {\n const barStyles = ((): Partial<CSSStyleDeclaration> => {\n if (settings.positionUsing === 'translate3d') {\n return {\n transition: `all ${speed}ms ${ease}`,\n transform: `translate3d(${toBarPercentage(n)}%,0,0)`,\n }\n }\n\n if (settings.positionUsing === 'translate') {\n return {\n transition: `all ${speed}ms ${ease}`,\n transform: `translate(${toBarPercentage(n)}%,0)`,\n }\n }\n\n return { marginLeft: `${toBarPercentage(n)}%` }\n })()\n\n for (const key in barStyles) {\n bar.style[key] = barStyles[key]!\n }\n\n if (n !== 1) {\n return setTimeout(next, speed)\n }\n\n // Fade out\n progress.style.transition = 'none'\n progress.style.opacity = '1'\n progress.offsetWidth /* Repaint */\n\n setTimeout(() => {\n progress.style.transition = `all ${speed}ms linear`\n progress.style.opacity = '0'\n\n setTimeout(() => {\n remove()\n progress.style.transition = ''\n progress.style.opacity = ''\n next()\n }, speed)\n }, speed)\n })\n}\n\nconst isStarted = () => typeof status === 'number'\n\n/**\n * Shows the progress bar.\n * This is the same as setting the status to 0%, except that it doesn't go backwards.\n */\nconst start = () => {\n if (!status) {\n set(0)\n }\n\n const work = function () {\n setTimeout(function () {\n if (!status) {\n return\n }\n\n increaseByRandom()\n work()\n }, settings.trickleSpeed)\n }\n\n if (settings.trickle) {\n work()\n }\n}\n\n/**\n * Hides the progress bar.\n * This is the *sort of* the same as setting the status to 100%, with the\n * difference being `done()` makes some placebo effect of some realistic motion.\n *\n * If `true` is passed, it will show the progress bar even if it's hidden.\n */\nconst done = (force?: boolean) => {\n if (!force && !status) {\n return\n }\n\n increaseByRandom(0.3 + 0.5 * Math.random())\n set(1)\n}\n\nconst increaseByRandom = (amount?: number) => {\n const n = status\n\n if (n === null) {\n return start()\n }\n\n if (n > 1) {\n return\n }\n\n amount =\n typeof amount === 'number'\n ? amount\n : (() => {\n const ranges: Record<number, [number, number]> = {\n 0.1: [0, 0.2],\n 0.04: [0.2, 0.5],\n 0.02: [0.5, 0.8],\n 0.005: [0.8, 0.99],\n }\n\n for (const r in ranges) {\n if (n >= ranges[r][0] && n < ranges[r][1]) {\n return parseFloat(r)\n }\n }\n\n return 0\n })()\n\n return set(clamp(n + amount, 0, 0.994))\n}\n\n/**\n * (Internal) renders the progress bar markup based on the `template` setting.\n */\nconst render = (fromStart: boolean) => {\n if (isRendered()) {\n return document.getElementById(baseComponentSelector)!\n }\n\n document.documentElement.classList.add(`${baseComponentSelector}-busy`)\n\n const bar = progress.querySelector(settings.barSelector)! as HTMLElement\n const perc = fromStart ? '-100' : toBarPercentage(status || 0)\n const parent = getParent()\n\n bar.style.transition = 'all 0 linear'\n bar.style.transform = `translate3d(${perc}%,0,0)`\n\n if (!settings.showSpinner) {\n progress.querySelector(settings.spinnerSelector)?.remove()\n }\n\n if (parent !== document.body) {\n parent.classList.add(`${baseComponentSelector}-custom-parent`)\n }\n\n parent.appendChild(progress)\n\n return progress\n}\n\nconst getParent = (): HTMLElement => {\n return (isDOM(settings.parent) ? settings.parent : document.querySelector(settings.parent)) as HTMLElement\n}\n\nconst remove = () => {\n document.documentElement.classList.remove(`${baseComponentSelector}-busy`)\n getParent().classList.remove(`${baseComponentSelector}-custom-parent`)\n progress?.remove()\n}\n\nconst isRendered = () => {\n return document.getElementById(baseComponentSelector) !== null\n}\n\nconst isDOM = (obj: any) => {\n if (typeof HTMLElement === 'object') {\n return obj instanceof HTMLElement\n }\n\n return obj && typeof obj === 'object' && obj.nodeType === 1 && typeof obj.nodeName === 'string'\n}\n\nfunction clamp(n: number, min: number, max: number): number {\n if (n < min) {\n return min\n }\n\n if (n > max) {\n return max\n }\n\n return n\n}\n\n// Converts a percentage (`0..1`) to a bar translateX percentage (`-100%..0%`).\nconst toBarPercentage = (n: number) => (-1 + n) * 100\n\n// Queues a function to be executed.\nconst queue = (() => {\n const pending: ((...args: any[]) => any)[] = []\n\n const next = () => {\n const fn = pending.shift()\n\n if (fn) {\n fn(next)\n }\n }\n\n return (fn: (...args: any[]) => any) => {\n pending.push(fn)\n\n if (pending.length === 1) {\n next()\n }\n }\n})()\n\nconst injectCSS = (color: string): void => {\n const element = document.createElement('style')\n\n element.textContent = `\n #${baseComponentSelector} {\n pointer-events: none;\n }\n\n #${baseComponentSelector} .bar {\n background: ${color};\n\n position: fixed;\n z-index: 1031;\n top: 0;\n left: 0;\n\n width: 100%;\n height: 2px;\n }\n\n #${baseComponentSelector} .peg {\n display: block;\n position: absolute;\n right: 0px;\n width: 100px;\n height: 100%;\n box-shadow: 0 0 10px ${color}, 0 0 5px ${color};\n opacity: 1.0;\n\n transform: rotate(3deg) translate(0px, -4px);\n }\n\n #${baseComponentSelector} .spinner {\n display: block;\n position: fixed;\n z-index: 1031;\n top: 15px;\n right: 15px;\n }\n\n #${baseComponentSelector} .spinner-icon {\n width: 18px;\n height: 18px;\n box-sizing: border-box;\n\n border: solid 2px transparent;\n border-top-color: ${color};\n border-left-color: ${color};\n border-radius: 50%;\n\n animation: ${baseComponentSelector}-spinner 400ms linear infinite;\n }\n\n .${baseComponentSelector}-custom-parent {\n overflow: hidden;\n position: relative;\n }\n\n .${baseComponentSelector}-custom-parent #${baseComponentSelector} .spinner,\n .${baseComponentSelector}-custom-parent #${baseComponentSelector} .bar {\n position: absolute;\n }\n\n @keyframes ${baseComponentSelector}-spinner {\n 0% { transform: rotate(0deg); }\n 100% { transform: rotate(360deg); }\n }\n `\n document.head.appendChild(element)\n}\n\nconst show = () => {\n if (progress) {\n progress.style.display = ''\n }\n}\n\nconst hide = () => {\n if (progress) {\n progress.style.display = 'none'\n }\n}\n\nexport default {\n configure,\n isStarted,\n done,\n set,\n remove,\n start,\n status,\n show,\n hide,\n}\n", "import ProgressComponent from './progress-component'\nimport { GlobalEvent } from './types'\n\nclass Progress {\n public hideCount = 0\n\n public start(): void {\n ProgressComponent.start()\n }\n\n public reveal(force: boolean = false): void {\n this.hideCount = Math.max(0, this.hideCount - 1)\n\n if (force || this.hideCount === 0) {\n ProgressComponent.show()\n }\n }\n\n public hide(): void {\n this.hideCount++\n\n ProgressComponent.hide()\n }\n\n public set(status: number): void {\n ProgressComponent.set(Math.max(0, Math.min(1, status)))\n }\n\n public finish(): void {\n ProgressComponent.done()\n }\n\n public reset(): void {\n ProgressComponent.set(0)\n }\n\n public remove(): void {\n ProgressComponent.done()\n ProgressComponent.remove()\n }\n\n public isStarted(): boolean {\n return ProgressComponent.isStarted()\n }\n\n public getStatus(): number | null {\n return ProgressComponent.status\n }\n}\n\nexport const progress = new Progress()\nexport const reveal = progress.reveal\nexport const hide = progress.hide\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', (e) => handleStartEvent(e, delay))\n document.addEventListener('inertia:progress', handleProgressEvent)\n}\n\nfunction handleStartEvent(event: GlobalEvent<'start'>, delay: number): void {\n if (!event.detail.visit.showProgress) {\n progress.hide()\n }\n\n const timeout = setTimeout(() => progress.start(), delay)\n document.addEventListener('inertia:finish', (e) => finish(e, timeout), { once: true })\n}\n\nfunction handleProgressEvent(event: GlobalEvent<'progress'>): void {\n if (progress.isStarted() && event.detail.progress?.percentage) {\n progress.set(Math.max(progress.getStatus()!, (event.detail.progress.percentage / 100) * 0.9))\n }\n}\n\nfunction finish(event: GlobalEvent<'finish'>, timeout: NodeJS.Timeout): void {\n clearTimeout(timeout!)\n\n if (!progress.isStarted()) {\n return\n }\n\n if (event.detail.visit.completed) {\n progress.finish()\n } else if (event.detail.visit.interrupted) {\n progress.reset()\n } else if (event.detail.visit.cancelled) {\n progress.remove()\n }\n}\n\nexport default function setupProgress({\n delay = 250,\n color = '#29d',\n includeCSS = true,\n showSpinner = false,\n} = {}): void {\n addEventListeners(delay)\n ProgressComponent.configure({ showSpinner, includeCSS, color })\n}\n", "type FormElement = HTMLInputElement | HTMLSelectElement | HTMLTextAreaElement\n\nfunction isFormElement(element: Element): element is FormElement {\n return (\n element instanceof HTMLInputElement ||\n element instanceof HTMLSelectElement ||\n element instanceof HTMLTextAreaElement\n )\n}\n\nfunction resetInputElement(input: HTMLInputElement, defaultValues: FormDataEntryValue[]): boolean {\n const oldValue = input.value\n const oldChecked = input.checked\n\n switch (input.type.toLowerCase()) {\n case 'checkbox':\n // For checkboxes, check if the input's value is in the array of default values\n input.checked = defaultValues.includes(input.value)\n break\n case 'radio':\n // For radios, only use the first default value to avoid multiple radios being checked\n input.checked = defaultValues[0] === input.value\n break\n case 'file':\n input.value = ''\n break\n case 'button':\n case 'submit':\n case 'reset':\n case 'image':\n // These input types don't carry form state\n break\n default:\n // text, email, number, date, etc. - use first default value\n input.value = defaultValues[0] !== null && defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n }\n\n // Return true if the value actually changed\n return input.value !== oldValue || input.checked !== oldChecked\n}\n\nfunction resetSelectElement(select: HTMLSelectElement, defaultValues: FormDataEntryValue[]): boolean {\n const oldValue = select.value\n const oldSelectedOptions = Array.from(select.selectedOptions).map((opt) => opt.value)\n\n if (select.multiple) {\n // For multi-select, select all options that match any of the default values\n const defaultStrings = defaultValues.map((value) => String(value))\n\n Array.from(select.options).forEach((option) => {\n option.selected = defaultStrings.includes(option.value)\n })\n } else {\n // For single select, use the first default value (or empty string)\n select.value = defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n }\n\n // Check if selection actually changed\n const newSelectedOptions = Array.from(select.selectedOptions).map((opt) => opt.value)\n const hasChanged = select.multiple\n ? JSON.stringify(oldSelectedOptions.sort()) !== JSON.stringify(newSelectedOptions.sort())\n : select.value !== oldValue\n\n return hasChanged\n}\n\nfunction resetFormElement(element: FormElement, defaultValues: FormDataEntryValue[]): boolean {\n if (element.disabled) {\n // For disabled elements, use their DOM defaultValue since they're not in FormData\n if (element instanceof HTMLInputElement) {\n const oldValue = element.value\n const oldChecked = element.checked\n\n switch (element.type.toLowerCase()) {\n case 'checkbox':\n case 'radio':\n element.checked = element.defaultChecked\n return element.checked !== oldChecked\n case 'file':\n element.value = ''\n return oldValue !== ''\n case 'button':\n case 'submit':\n case 'reset':\n case 'image':\n // These input types don't carry form state\n return false\n default:\n element.value = element.defaultValue\n return element.value !== oldValue\n }\n } else if (element instanceof HTMLSelectElement) {\n // Reset select to default selected options\n const oldSelectedOptions = Array.from(element.selectedOptions).map((opt) => opt.value)\n\n Array.from(element.options).forEach((option) => {\n option.selected = option.defaultSelected\n })\n\n const newSelectedOptions = Array.from(element.selectedOptions).map((opt) => opt.value)\n return JSON.stringify(oldSelectedOptions.sort()) !== JSON.stringify(newSelectedOptions.sort())\n } else if (element instanceof HTMLTextAreaElement) {\n const oldValue = element.value\n element.value = element.defaultValue\n return element.value !== oldValue\n }\n\n return false\n }\n\n if (element instanceof HTMLInputElement) {\n // Pass all default values to handle checkboxes and radios correctly\n return resetInputElement(element, defaultValues)\n } else if (element instanceof HTMLSelectElement) {\n return resetSelectElement(element, defaultValues)\n } else if (element instanceof HTMLTextAreaElement) {\n const oldValue = element.value\n element.value = defaultValues[0] !== undefined ? String(defaultValues[0]) : ''\n return element.value !== oldValue\n }\n\n return false\n}\n\nfunction resetFieldElements(\n elements: Element | RadioNodeList | HTMLCollection,\n defaultValues: FormDataEntryValue[],\n): boolean {\n let hasChanged = false\n\n if (elements instanceof RadioNodeList || elements instanceof HTMLCollection) {\n // Handle multiple elements with the same name (e.g., radio buttons, checkboxes, array fields)\n Array.from(elements).forEach((node, index) => {\n if (node instanceof Element && isFormElement(node)) {\n if (node instanceof HTMLInputElement && ['checkbox', 'radio'].includes(node.type.toLowerCase())) {\n // For checkboxes and radios, pass all default values for value-based matching\n if (resetFormElement(node, defaultValues)) {\n hasChanged = true\n }\n } else {\n // For other array elements (like text inputs), use index-based matching\n const indexedDefaultValues =\n defaultValues[index] !== undefined ? [defaultValues[index]] : [defaultValues[0] ?? null].filter(Boolean)\n\n if (resetFormElement(node, indexedDefaultValues)) {\n hasChanged = true\n }\n }\n }\n })\n } else if (isFormElement(elements)) {\n // Handle single element - pass all default values (important for multi-selects)\n hasChanged = resetFormElement(elements, defaultValues)\n }\n\n return hasChanged\n}\n\nexport function resetFormFields(formElement: HTMLFormElement, defaults: FormData, fieldNames?: string[]): void {\n if (!formElement) {\n return\n }\n\n const resetEntireForm = !fieldNames || fieldNames.length === 0\n\n // If no specific fields provided, reset the entire form\n if (resetEntireForm) {\n // Get all field names from both defaults and form elements (including disabled ones)\n const formData = new FormData(formElement)\n const formElementNames = Array.from(formElement.elements)\n .map((el) => (isFormElement(el) ? el.name : ''))\n .filter(Boolean)\n fieldNames = [...new Set([...defaults.keys(), ...formData.keys(), ...formElementNames])]\n }\n\n let hasChanged = false\n\n fieldNames!.forEach((fieldName) => {\n const elements = formElement.elements.namedItem(fieldName)\n\n if (elements) {\n if (resetFieldElements(elements, defaults.getAll(fieldName))) {\n hasChanged = true\n }\n }\n })\n\n // Dispatch reset event if any field changed (matching native form.reset() behavior)\n if (hasChanged && resetEntireForm) {\n formElement.dispatchEvent(new Event('reset', { bubbles: true }))\n }\n}\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
6
|
"names": ["hide", "import_lodash_es", "page", "progress", "import_lodash_es", "import_lodash_es", "page", "page", "isServer", "page", "page", "page", "import_lodash_es", "page", "page", "queue", "status", "page", "axios", "progress", "page", "config", "import_lodash_es", "result", "element", "isServer", "elements", "title", "page", "page", "queue", "page", "page", "progress", "set", "queue", "status", "hide"]
|
|
7
7
|
}
|