@inertiajs/core 2.1.10 → 2.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/index.esm.js +609 -85
- package/dist/index.esm.js.map +4 -4
- package/dist/index.js +609 -85
- package/dist/index.js.map +4 -4
- package/package.json +9 -9
- package/types/domUtils.d.ts +2 -0
- package/types/events.d.ts +1 -0
- package/types/index.d.ts +3 -1
- package/types/infiniteScroll/data.d.ts +9 -0
- package/types/infiniteScroll/elements.d.ts +14 -0
- package/types/infiniteScroll/queryString.d.ts +12 -0
- package/types/infiniteScroll/scrollPreservation.d.ts +18 -0
- package/types/infiniteScroll.d.ts +12 -0
- package/types/intersectionObservers.d.ts +7 -0
- package/types/progress.d.ts +14 -0
- package/types/response.d.ts +4 -1
- package/types/router.d.ts +3 -0
- package/types/types.d.ts +88 -0
package/dist/index.esm.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
3
|
-
"sources": ["../src/debounce.ts", "../src/events.ts", "../src/sessionStorage.ts", "../src/encryption.ts", "../src/scroll.ts", "../src/url.ts", "../src/files.ts", "../src/formData.ts", "../src/page.ts", "../src/queue.ts", "../src/history.ts", "../src/eventHandler.ts", "../src/navigationType.ts", "../src/initialVisit.ts", "../src/poll.ts", "../src/polls.ts", "../src/prefetched.ts", "../src/objectUtils.ts", "../src/time.ts", "../src/request.ts", "../src/requestParams.ts", "../src/
|
|
4
|
-
"sourcesContent": ["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 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", "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 { history } from './history'\nimport { ScrollRegion } from './types'\n\nexport class Scroll {\n public static save(): void {\n history.saveScrollPositions(\n Array.from(this.regions()).map((region) => ({\n top: region.scrollTop,\n left: region.scrollLeft,\n })),\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\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 this.restoreDocument()\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\n if (typeof window !== 'undefined') {\n window.scrollTo(scrollPosition.left, scrollPosition.top)\n }\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 { hasFiles } from './files'\nimport { isFormData, objectToFormData } from './formData'\nimport { FormDataConvertible, Method, RequestPayload, UrlMethodPair, VisitOptions } 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 data = objectToFormData(data)\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: 'indices' | 'brackets' = 'brackets',\n): [string, MergeDataIntoQueryStringDataReturnType<T>] {\n const hasDataForQueryString = method === 'get' && !isFormData(data) && Object.keys(data).length > 0\n const hasHost = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(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, parseArrays: false }\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", "import { FormDataConvertible, RequestPayload } from './types'\n\nexport function hasFiles(data: RequestPayload | FormDataConvertible): boolean {\n return (\n data instanceof File ||\n data instanceof Blob ||\n (data instanceof FileList && data.length > 0) ||\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 { FormDataConvertible } 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): 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), source[key])\n }\n }\n\n return form\n}\n\nfunction composeKey(parent: string | null, key: string): string {\n return parent ? parent + '[' + key + ']' : key\n}\n\nfunction append(form: FormData, key: string, value: FormDataConvertible): void {\n if (Array.isArray(value)) {\n return Array.from(value.keys()).forEach((index) => append(form, composeKey(key, index.toString()), value[index]))\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)\n}\n", "import { eventHandler } from './eventHandler'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { Scroll } from './scroll'\nimport {\n Component,\n Page,\n PageEvent,\n PageHandler,\n PageResolver,\n PreserveStateOption,\n RouterInitParams,\n VisitOptions,\n} from './types'\nimport { hrefToUrl, isSameUrlWithoutHash } from './url'\n\nclass CurrentPage {\n protected page!: Page\n protected swapComponent!: PageHandler\n protected resolveComponent!: PageResolver\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\n public init({ initialPage, swapComponent, resolveComponent }: RouterInitParams) {\n this.page = initialPage\n this.swapComponent = swapComponent\n this.resolveComponent = resolveComponent\n\n return this\n }\n\n public set(\n page: Page,\n {\n replace = false,\n preserveScroll = false,\n preserveState = false,\n }: Partial<Pick<VisitOptions, 'replace' | 'preserveScroll' | 'preserveState'>> = {},\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 location = typeof window !== 'undefined' ? window.location : new URL(page.url)\n replace = replace || isSameUrlWithoutHash(hrefToUrl(page.url), location)\n\n return new Promise((resolve) => {\n replace ? history.replaceState(page, () => resolve(null)) : history.pushState(page, () => resolve(null))\n }).then(() => {\n const isNewComponent = !this.isTheSame(page)\n\n this.page = page\n this.cleared = false\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 return this.swap({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\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?: PreserveStateOption\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 })\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 merge(data: Partial<Page>): void {\n this.page = { ...this.page, ...data }\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 }: {\n component: Component\n page: Page\n preserveState: PreserveStateOption\n }): Promise<unknown> {\n return this.swapComponent({ component, page, preserveState })\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\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 { decryptHistory, encryptHistory, historySessionStorageKeys } from './encryption'\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.get(),\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]\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 = () => {\n this.doPushState({ page: data }, page.url)\n cb && cb()\n }\n\n if (isChromeIOS) {\n setTimeout(doPush)\n } else {\n doPush()\n }\n })\n })\n }\n\n protected getPageData(page: Page): Promise<Page | ArrayBuffer> {\n return new Promise((resolve) => {\n return page.encryptHistory ? encryptHistory(page).then(resolve) : resolve(page)\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 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 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 = () => {\n this.doReplaceState({ page: data }, page.url)\n cb && cb()\n }\n\n if (isChromeIOS) {\n setTimeout(doReplace)\n } else {\n doReplace()\n }\n })\n })\n }\n\n protected doReplaceState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url?: string,\n ): void {\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 protected doPushState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url: string,\n ): void {\n window.history.pushState(data, '', url)\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 hasAnyState(): boolean {\n return !!this.getAllState()\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", "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.get(), 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 window.requestAnimationFrame(() => {\n Scroll.restore(history.getScrollRegions())\n })\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 { 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 }\n }\n\n protected static handleBackForward(): boolean {\n if (!navigationType.isBackForward() || !history.hasAnyState()) {\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 }\n fireNavigateEvent(currentPage.get())\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 { cloneDeep } from 'lodash-es'\nimport { objectsAreEqual } from './objectUtils'\nimport { Response } from './response'\nimport { timeToMs } from './time'\nimport {\n ActiveVisit,\n CacheForOption,\n InFlightPrefetch,\n InternalActiveVisit,\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, expires] = 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 this.cached.push({\n params: { ...params },\n staleTimestamp: Date.now() + stale,\n response: promise,\n singleUse: expires === 0,\n timestamp: Date.now(),\n inFlight: false,\n tags: Array.isArray(cacheTags) ? cacheTags : [cacheTags],\n })\n\n this.scheduleForRemoval(params, expires)\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 'onBefore',\n 'onStart',\n 'onProgress',\n 'onFinish',\n 'onCancel',\n 'onSuccess',\n 'onError',\n 'onPrefetched',\n 'onCancelToken',\n 'onPrefetching',\n 'async',\n ],\n )\n }\n}\n\nexport const prefetchedRequests = new PrefetchedRequests()\n", "export const objectsAreEqual = <T>(\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 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 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", "const conversionMap = {\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: string | number): 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 { 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 if (currentPage.get().version) {\n headers['X-Inertia-Version'] = currentPage.get().version\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 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 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 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 = this.resolvePreserveOption(this.params.preserveScroll, page)\n this.params.preserveState = this.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 protected 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", "export default {\n modal: null,\n listener: null,\n\n show(html: Record<string, unknown> | string): void {\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 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\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 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 { AxiosResponse } from 'axios'\nimport { router } from '.'\nimport { fireErrorEvent, fireInvalidEvent, firePrefetchedEvent, fireSuccessEvent } 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 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 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 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 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.getDataFromResponse(this.response.data)\n\n if (!this.shouldSetPage(pageResponse)) {\n return Promise.resolve()\n }\n\n this.mergeProps(pageResponse)\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 return currentPage.set(pageResponse, {\n replace: this.requestParams.all().replace,\n preserveScroll: this.requestParams.all().preserveScroll,\n preserveState: this.requestParams.all().preserveState,\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 mergeProps(pageResponse: Page): void {\n if (!this.requestParams.isPartial() || pageResponse.component !== currentPage.get().component) {\n return\n }\n\n const propsToMerge = pageResponse.mergeProps || []\n const propsToDeepMerge = pageResponse.deepMergeProps || []\n const matchPropsOn = pageResponse.matchPropsOn || []\n\n propsToMerge.forEach((prop) => {\n const incomingProp = pageResponse.props[prop]\n\n if (Array.isArray(incomingProp)) {\n pageResponse.props[prop] = this.mergeOrMatchItems(\n (currentPage.get().props[prop] || []) as any[],\n incomingProp,\n prop,\n matchPropsOn,\n )\n } else if (typeof incomingProp === 'object' && incomingProp !== null) {\n pageResponse.props[prop] = {\n ...((currentPage.get().props[prop] || []) as Record<string, any>),\n ...incomingProp,\n }\n }\n })\n\n propsToDeepMerge.forEach((prop) => {\n const incomingProp = pageResponse.props[prop]\n const currentProp = currentPage.get().props[prop]\n\n // Function to recursively merge objects and arrays\n const deepMerge = (target: any, source: any, currentKey: string) => {\n if (Array.isArray(source)) {\n return this.mergeOrMatchItems(target, source, currentKey, 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], `${currentKey}.${key}`)\n return acc\n },\n { ...target },\n )\n }\n\n // f 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\n protected mergeOrMatchItems(target: any[], source: any[], currentKey: string, matchPropsOn: string[]) {\n // Determine if there's a specific key to match items.\n // E.g.: matchPropsOn = ['posts.data.id'] and currentKey = 'posts.data' will match.\n const matchOn = matchPropsOn.find((key) => {\n const path = key.split('.').slice(0, -1).join('.')\n return path === currentKey\n })\n\n if (!matchOn) {\n // No key found to match on, just concatenate the arrays\n return [...(Array.isArray(target) ? target : []), ...source]\n }\n\n // Extract the unique property name to match items (e.g., 'id' from 'posts.data.id').\n const uniqueProperty = matchOn.split('.').pop() || ''\n const targetArray = Array.isArray(target) ? target : []\n const map = new Map<any, any>()\n\n // Populate the map with items from the target array, using the unique property as the key.\n // If an item doesn't have the unique property or isn't an object, a unique Symbol is used as the key.\n targetArray.forEach((item) => {\n if (item && typeof item === 'object' && uniqueProperty in item) {\n map.set(item[uniqueProperty], item)\n } else {\n map.set(Symbol(), item)\n }\n })\n\n // Iterate through the source array. If an item's unique property matches an existing key in the map,\n // update the item. Otherwise, add the new item to the map.\n source.forEach((item) => {\n if (item && typeof item === 'object' && uniqueProperty in item) {\n map.set(item[uniqueProperty], item)\n } else {\n map.set(Symbol(), item)\n }\n })\n\n return Array.from(map.values())\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", "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 { hideProgress, revealProgress } from '.'\nimport { eventHandler } from './eventHandler'\nimport { fireBeforeEvent } 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 { Request } from './request'\nimport { RequestStream } from './requestStream'\nimport { Scroll } from './scroll'\nimport {\n ActiveVisit,\n ClientSideVisitOptions,\n Component,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n InFlightPrefetch,\n Method,\n Page,\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 public init({ initialPage, resolveComponent, swapComponent }: RouterInitParams): void {\n currentPage.init({\n initialPage,\n resolveComponent,\n swapComponent,\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\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 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(key = 'default'): unknown {\n return history.restore(key)\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 revealProgress(prefetched.inFlight)\n prefetchedRequests.use(prefetched, requestParams)\n } else {\n revealProgress(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 })\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 hideProgress()\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: 30_000,\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 push<TProps = Page['props']>(params: ClientSideVisitOptions<TProps>): void {\n this.clientVisit(params)\n }\n\n protected clientVisit<TProps = Page['props']>(\n params: ClientSideVisitOptions<TProps>,\n { replace = false }: { replace?: boolean } = {},\n ): 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 { onError, onFinish, onSuccess, ...pageParams } = params\n\n currentPage\n .set(\n {\n ...current,\n ...pageParams,\n props: props as Page['props'],\n },\n {\n replace,\n preserveScroll: params.preserveScroll,\n preserveState: params.preserveState,\n },\n )\n .then(() => {\n const errors = currentPage.get().props.errors || {}\n\n if (Object.keys(errors).length === 0) {\n return onSuccess?.(currentPage.get())\n }\n\n const scopedErrors = params.errorBag ? errors[params.errorBag || ''] || {} : errors\n\n return 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 }),\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 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 ...options,\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 onStart: options.onStart || (() => {}),\n onProgress: options.onProgress || (() => {}),\n onFinish: options.onFinish || (() => {}),\n onCancel: options.onCancel || (() => {}),\n onSuccess: options.onSuccess || (() => {}),\n onError: options.onError || (() => {}),\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.reload({ only: group })\n })\n }\n }\n}\n", "import { get, set } from 'lodash-es'\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 * 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 {\n set(form, arrayPath, [value])\n }\n\n continue\n }\n\n // No brackets: last value wins when multiple fields have the same key\n set(form, path, value)\n }\n\n return form\n}\n", "import debounce from './debounce'\n\nconst Renderer = {\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('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === 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: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\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\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${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(/ 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 reconnect: () => reconnect(id),\n update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\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(\n event: Pick<\n MouseEvent,\n 'altKey' | 'ctrlKey' | 'defaultPrevented' | 'target' | 'currentTarget' | 'metaKey' | 'shiftKey' | 'button'\n >,\n): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\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: Pick<KeyboardEvent, 'key' | 'currentTarget'>): boolean {\n const isButton = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'button'\n\n return 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\nlet hideCount = 0\n\nexport const reveal = (force = false) => {\n hideCount = Math.max(0, hideCount - 1)\n\n if (force || hideCount === 0) {\n ProgressComponent.show()\n }\n}\n\nexport const hide = () => {\n hideCount++\n\n ProgressComponent.hide()\n}\n\nfunction addEventListeners(delay: number): void {\n document.addEventListener('inertia:start', (e) => start(e, delay))\n document.addEventListener('inertia:progress', progress)\n}\n\nfunction start(event: GlobalEvent<'start'>, delay: number): void {\n if (!event.detail.visit.showProgress) {\n hide()\n }\n\n const timeout = setTimeout(() => ProgressComponent.start(), delay)\n document.addEventListener('inertia:finish', (e) => finish(e, timeout), { once: true })\n}\n\nfunction progress(event: GlobalEvent<'progress'>): void {\n if (ProgressComponent.isStarted() && event.detail.progress?.percentage) {\n ProgressComponent.set(Math.max(ProgressComponent.status!, (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 (!ProgressComponent.isStarted()) {\n return\n }\n\n if (event.detail.visit.completed) {\n ProgressComponent.done()\n } else if (event.detail.visit.interrupted) {\n ProgressComponent.set(0)\n } else if (event.detail.visit.cancelled) {\n ProgressComponent.done()\n ProgressComponent.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 // If no specific fields provided, reset the entire form\n if (!fieldNames || fieldNames.length === 0) {\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) {\n formElement.dispatchEvent(new Event('reset', { bubbles: true }))\n }\n}\n", "import { Router } from './router'\n\nexport { objectToFormData } from './formData'\nexport { formDataToObject } from './formObject'\nexport { default as createHeadManager } from './head'\nexport { shouldIntercept, shouldNavigate } from './navigationEvents'\nexport { hide as hideProgress, reveal as revealProgress, default as setupProgress } from './progress'\nexport { resetFormFields } from './resetFormFields'\nexport * from './types'\nexport { hrefToUrl, isUrlMethodPair, mergeDataIntoQueryString, urlWithoutHash } from './url'\nexport { type Router }\n\nexport const router = new Router()\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["page", "progress", "page", "page", "page", "page", "queue", "status", "page", "progress", "element", "isServer", "elements", "title", "
|
|
3
|
+
"sources": ["../src/router.ts", "../src/debounce.ts", "../src/events.ts", "../src/sessionStorage.ts", "../src/encryption.ts", "../src/scroll.ts", "../src/url.ts", "../src/files.ts", "../src/formData.ts", "../src/page.ts", "../src/queue.ts", "../src/history.ts", "../src/eventHandler.ts", "../src/navigationType.ts", "../src/initialVisit.ts", "../src/poll.ts", "../src/polls.ts", "../src/prefetched.ts", "../src/objectUtils.ts", "../src/time.ts", "../src/request.ts", "../src/requestParams.ts", "../src/response.ts", "../src/modal.ts", "../src/requestStream.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", "../src/index.ts"],
|
|
4
|
+
"sourcesContent": ["import { cloneDeep, get, set } from 'lodash-es'\nimport { progress } from '.'\nimport { eventHandler } from './eventHandler'\nimport { fireBeforeEvent } 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 { Request } from './request'\nimport { RequestStream } from './requestStream'\nimport { Scroll } from './scroll'\nimport {\n ActiveVisit,\n ClientSideVisitOptions,\n Component,\n GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n InFlightPrefetch,\n Method,\n Page,\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 public init({ initialPage, resolveComponent, swapComponent }: RouterInitParams): void {\n currentPage.init({\n initialPage,\n resolveComponent,\n swapComponent,\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\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 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(key = 'default'): unknown {\n return history.restore(key)\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 })\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: 30_000,\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 protected clientVisit<TProps = Page['props']>(\n params: ClientSideVisitOptions<TProps>,\n { replace = false }: { replace?: boolean } = {},\n ): 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 { onError, onFinish, onSuccess, ...pageParams } = params\n\n currentPage\n .set(\n {\n ...current,\n ...pageParams,\n props: props as Page['props'],\n },\n {\n replace,\n preserveScroll: params.preserveScroll,\n preserveState: params.preserveState,\n },\n )\n .then(() => {\n const errors = currentPage.get().props.errors || {}\n\n if (Object.keys(errors).length === 0) {\n return onSuccess?.(currentPage.get())\n }\n\n const scopedErrors = params.errorBag ? errors[params.errorBag || ''] || {} : errors\n\n return 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 }),\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 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 ...options,\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 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.reload({ only: group })\n })\n }\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", "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 { history } from './history'\nimport { ScrollRegion } from './types'\n\nexport class Scroll {\n public static save(): void {\n history.saveScrollPositions(\n Array.from(this.regions()).map((region) => ({\n top: region.scrollTop,\n left: region.scrollLeft,\n })),\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\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 this.restoreDocument()\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\n if (typeof window !== 'undefined') {\n window.scrollTo(scrollPosition.left, scrollPosition.top)\n }\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 { hasFiles } from './files'\nimport { isFormData, objectToFormData } from './formData'\nimport { FormDataConvertible, Method, RequestPayload, UrlMethodPair, VisitOptions } 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 data = objectToFormData(data)\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: 'indices' | 'brackets' = 'brackets',\n): [string, MergeDataIntoQueryStringDataReturnType<T>] {\n const hasDataForQueryString = method === 'get' && !isFormData(data) && Object.keys(data).length > 0\n const hasHost = /^[a-z][a-z0-9+.-]*:\\/\\//i.test(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, parseArrays: false }\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", "import { FormDataConvertible, RequestPayload } from './types'\n\nexport function hasFiles(data: RequestPayload | FormDataConvertible): boolean {\n return (\n data instanceof File ||\n data instanceof Blob ||\n (data instanceof FileList && data.length > 0) ||\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 { FormDataConvertible } 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): 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), source[key])\n }\n }\n\n return form\n}\n\nfunction composeKey(parent: string | null, key: string): string {\n return parent ? parent + '[' + key + ']' : key\n}\n\nfunction append(form: FormData, key: string, value: FormDataConvertible): void {\n if (Array.isArray(value)) {\n return Array.from(value.keys()).forEach((index) => append(form, composeKey(key, index.toString()), value[index]))\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)\n}\n", "import { eventHandler } from './eventHandler'\nimport { fireNavigateEvent } from './events'\nimport { history } from './history'\nimport { Scroll } from './scroll'\nimport {\n Component,\n Page,\n PageEvent,\n PageHandler,\n PageResolver,\n PreserveStateOption,\n RouterInitParams,\n VisitOptions,\n} from './types'\nimport { hrefToUrl, isSameUrlWithoutHash } from './url'\n\nclass CurrentPage {\n protected page!: Page\n protected swapComponent!: PageHandler\n protected resolveComponent!: PageResolver\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\n public init({ initialPage, swapComponent, resolveComponent }: RouterInitParams) {\n this.page = initialPage\n this.swapComponent = swapComponent\n this.resolveComponent = resolveComponent\n\n return this\n }\n\n public set(\n page: Page,\n {\n replace = false,\n preserveScroll = false,\n preserveState = false,\n }: Partial<Pick<VisitOptions, 'replace' | 'preserveScroll' | 'preserveState'>> = {},\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 location = typeof window !== 'undefined' ? window.location : new URL(page.url)\n replace = replace || isSameUrlWithoutHash(hrefToUrl(page.url), location)\n\n return new Promise((resolve) => {\n replace ? history.replaceState(page, () => resolve(null)) : history.pushState(page, () => resolve(null))\n }).then(() => {\n const isNewComponent = !this.isTheSame(page)\n\n this.page = page\n this.cleared = false\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 return this.swap({ component, page, preserveState }).then(() => {\n if (!preserveScroll) {\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?: PreserveStateOption\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 })\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 merge(data: Partial<Page>): void {\n this.page = { ...this.page, ...data }\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 }: {\n component: Component\n page: Page\n preserveState: PreserveStateOption\n }): Promise<unknown> {\n return this.swapComponent({ component, page, preserveState })\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\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 { decryptHistory, encryptHistory, historySessionStorageKeys } from './encryption'\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.get(),\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]\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 = () => {\n this.doPushState({ page: data }, page.url)\n cb && cb()\n }\n\n if (isChromeIOS) {\n setTimeout(doPush)\n } else {\n doPush()\n }\n })\n })\n }\n\n protected getPageData(page: Page): Promise<Page | ArrayBuffer> {\n return new Promise((resolve) => {\n return page.encryptHistory ? encryptHistory(page).then(resolve) : resolve(page)\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 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 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 = () => {\n this.doReplaceState({ page: data }, page.url)\n cb && cb()\n }\n\n if (isChromeIOS) {\n setTimeout(doReplace)\n } else {\n doReplace()\n }\n })\n })\n }\n\n protected doReplaceState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url?: string,\n ): void {\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 protected doPushState(\n data: {\n page: Page | ArrayBuffer\n scrollRegions?: ScrollRegion[]\n documentScrollPosition?: ScrollRegion\n },\n url: string,\n ): void {\n window.history.pushState(data, '', url)\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 hasAnyState(): boolean {\n return !!this.getAllState()\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", "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.get(), 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 window.requestAnimationFrame(() => {\n Scroll.restore(history.getScrollRegions())\n })\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 { 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 }\n }\n\n protected static handleBackForward(): boolean {\n if (!navigationType.isBackForward() || !history.hasAnyState()) {\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 }\n fireNavigateEvent(currentPage.get())\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 { cloneDeep } from 'lodash-es'\nimport { objectsAreEqual } from './objectUtils'\nimport { Response } from './response'\nimport { timeToMs } from './time'\nimport {\n ActiveVisit,\n CacheForOption,\n InFlightPrefetch,\n InternalActiveVisit,\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, expires] = 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 this.cached.push({\n params: { ...params },\n staleTimestamp: Date.now() + stale,\n response: promise,\n singleUse: expires === 0,\n timestamp: Date.now(),\n inFlight: false,\n tags: Array.isArray(cacheTags) ? cacheTags : [cacheTags],\n })\n\n this.scheduleForRemoval(params, expires)\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 'onBefore',\n 'onBeforeUpdate',\n 'onStart',\n 'onProgress',\n 'onFinish',\n 'onCancel',\n 'onSuccess',\n 'onError',\n 'onPrefetched',\n 'onCancelToken',\n 'onPrefetching',\n 'async',\n ],\n )\n }\n}\n\nexport const prefetchedRequests = new PrefetchedRequests()\n", "export const objectsAreEqual = <T>(\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 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 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", "const conversionMap = {\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: string | number): 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 { 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 if (currentPage.get().version) {\n headers['X-Inertia-Version'] = currentPage.get().version\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 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 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 = this.resolvePreserveOption(this.params.preserveScroll, page)\n this.params.preserveState = this.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 protected 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, set } from 'lodash-es'\nimport { router } from '.'\nimport {\n fireBeforeUpdateEvent,\n fireErrorEvent,\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 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 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 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 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.getDataFromResponse(this.response.data)\n\n if (!this.shouldSetPage(pageResponse)) {\n return Promise.resolve()\n }\n\n this.mergeProps(pageResponse)\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,\n preserveState: this.requestParams.all().preserveState,\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 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\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 show(html: Record<string, unknown> | string): void {\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 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\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 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 { 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", "const elementInViewport = (el: HTMLElement) => {\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 let parent = element?.parentElement\n\n while (parent) {\n const overflowY = window.getComputedStyle(parent).overflowY\n\n if (overflowY === 'auto' || overflowY === 'scroll') {\n return parent\n }\n\n parent = parent.parentElement\n }\n\n return null\n}\n\nexport const getElementsInViewportFromCollection = (\n referenceElement: HTMLElement,\n elements: HTMLElement[],\n): HTMLElement[] => {\n const referenceIndex = elements.indexOf(referenceElement)\n const visibleElements: 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 visibleElements.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 visibleElements.push(element)\n } else {\n break\n }\n }\n\n return visibleElements\n}\n", "import { get, set } from 'lodash-es'\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 * 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 {\n set(form, arrayPath, [value])\n }\n\n continue\n }\n\n // No brackets: last value wins when multiple fields have the same key\n set(form, path, value)\n }\n\n return form\n}\n", "import debounce from './debounce'\n\nconst Renderer = {\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('inertia') !== null\n },\n\n findMatchingElementIndex(element: Element, elements: Array<Element>): number {\n const key = element.getAttribute('inertia')\n if (key !== null) {\n return elements.findIndex((element) => element.getAttribute('inertia') === 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: (title: string) => string,\n onUpdate: (elements: string[]) => void,\n): {\n forceUpdate: () => void\n createProvider: () => {\n update: (elements: string[]) => void\n disconnect: () => void\n }\n} {\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\n const defaults: Record<string, string> = {\n ...(title ? { title: `<title inertia=\"\">${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(/ 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 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\nexport const useInfiniteScrollData = (options: {\n getPropName: () => string\n onBeforeUpdate: () => void\n onBeforePreviousRequest: () => void\n onBeforeNextRequest: () => void\n onCompletePreviousRequest: (loadedPage?: string | number) => void\n onCompleteNextRequest: (loadedPage?: string | number) => 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 { previousPage, nextPage, currentPage: lastLoadedPage } = getScrollPropFromCurrentPage()\n\n const state = {\n loading: false,\n previousPage,\n nextPage,\n lastLoadedPage,\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\n const getPageName = () => getScrollPropFromCurrentPage().pageName\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 hasPrevious,\n hasNext,\n fetchNext,\n fetchPrevious,\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 { useIntersectionObservers } from '../intersectionObservers'\nimport { UseInfiniteScrollElementManager } from '../types'\n\nconst INFINITE_SCROLL_PAGE_KEY = 'infiniteScrollPage'\nconst INFINITE_SCROLL_IGNORE_KEY = 'infiniteScrollIgnore'\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}): 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 addedElements.add(node as HTMLElement)\n }\n })\n })\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(\n (entry: IntersectionObserverEntry) => options.onItemIntersected(entry.target as HTMLElement),\n { threshold: 0 },\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 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 const processServerLoadedElements = (loadedPage?: string | number) => {\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\n return {\n setupObservers,\n enableTriggers,\n disableTriggers,\n refreshTriggers,\n flushAll,\n processManuallyAddedElements,\n processServerLoadedElements,\n }\n}\n", "import debounce from '../debounce'\nimport { getElementsInViewportFromCollection } from '../domUtils'\nimport { router } from '../index'\nimport { getPageFromElement } from './elements'\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 // Debounced to avoid excessive URL updates during fast scrolling\n const onItemIntersected = debounce((itemElement: HTMLElement) => {\n if (options.shouldPreserveUrl() || !itemElement) {\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 = [...options.getItemsElement().children] as HTMLElement[]\n\n getElementsInViewportFromCollection(itemElement, elements).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 return\n }\n\n const url = new URL(window.location.href)\n\n // Clean URLs: don't show ?page=1 in the URL, just remove the parameter entirely\n if (mostVisiblePage === '1') {\n url.searchParams.delete(options.getPageName())\n } else {\n url.searchParams.set(options.getPageName(), mostVisiblePage.toString())\n }\n\n // Update URL without triggering a page reload or affecting scroll position\n router.replace({\n url: url.toString(),\n preserveScroll: true,\n preserveState: true,\n })\n }, 250)\n\n return {\n onItemIntersected,\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(\n itemsElement.firstElementChild as HTMLElement,\n [...itemsElement.children] as HTMLElement[],\n )\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 restore()\n }\n\n return {\n captureScrollPosition,\n restoreScrollPosition,\n }\n }\n\n return {\n createCallbacks,\n }\n}\n", "import { 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?: string | number) => {\n setTimeout(() => {\n elementManager.processServerLoadedElements(loadedPage)\n options.onCompletePreviousRequest()\n window.queueMicrotask(elementManager.refreshTriggers)\n })\n },\n onCompleteNextRequest: (loadedPage?: string | number) => {\n setTimeout(() => {\n elementManager.processServerLoadedElements(loadedPage)\n options.onCompleteNextRequest()\n window.queueMicrotask(elementManager.refreshTriggers)\n })\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 return {\n dataManager,\n elementManager,\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(\n event: Pick<\n MouseEvent,\n 'altKey' | 'ctrlKey' | 'defaultPrevented' | 'target' | 'currentTarget' | 'metaKey' | 'shiftKey' | 'button'\n >,\n): boolean {\n const isLink = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'a'\n\n return !(\n (event.target && (event?.target as HTMLElement).isContentEditable) ||\n event.defaultPrevented ||\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: Pick<KeyboardEvent, 'key' | 'currentTarget'>): boolean {\n const isButton = (event.currentTarget as HTMLElement).tagName.toLowerCase() === 'button'\n\n return 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 // If no specific fields provided, reset the entire form\n if (!fieldNames || fieldNames.length === 0) {\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) {\n formElement.dispatchEvent(new Event('reset', { bubbles: true }))\n }\n}\n", "import { Router } from './router'\n\nexport { 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 { hrefToUrl, isUrlMethodPair, mergeDataIntoQueryString, urlWithoutHash } from './url'\nexport { type Router }\n\nexport const router = new Router()\n"],
|
|
5
|
+
"mappings": "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",
|
|
6
|
+
"names": ["cloneDeep", "get", "set", "page", "progress", "page", "page", "page", "page", "queue", "status", "page", "progress", "get", "set", "cloneDeep", "get", "set", "element", "isServer", "elements", "title", "page", "page", "page", "progress", "set", "queue", "status", "hide"]
|
|
7
7
|
}
|