@inertiajs/core 2.0.7 → 2.0.8
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 +12 -12
- package/dist/index.esm.js.map +3 -3
- package/dist/index.js +12 -12
- package/dist/index.js.map +3 -3
- package/package.json +2 -2
- package/types/requestParams.d.ts +1 -1
- package/types/router.d.ts +8 -8
- package/types/types.d.ts +6 -5
package/dist/index.esm.js.map
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{
|
|
2
2
|
"version": 3,
|
|
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/objectUtils.ts", "../src/time.ts", "../src/prefetched.ts", "../src/request.ts", "../src/requestParams.ts", "../src/modal.ts", "../src/response.ts", "../src/requestStream.ts", "../src/router.ts", "../src/head.ts", "../src/progress-component.ts", "../src/progress.ts", "../src/shouldIntercept.ts", "../src/index.ts"],
|
|
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: Uint8Array, 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: Uint8Array, 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 = () => {\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 if (typeof window !== 'undefined') {\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 (window.location.hash) {\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(() => document.getElementById(window.location.hash.slice(1))?.scrollIntoView())\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 deepmerge from 'deepmerge'\nimport * as qs from 'qs'\nimport { hasFiles } from './files'\nimport { isFormData, objectToFormData } from './formData'\nimport { FormDataConvertible, Method, RequestPayload, 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\nexport function mergeDataIntoQueryString(\n method: Method,\n href: URL | string,\n data: Record<string, FormDataConvertible>,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, Record<string, FormDataConvertible>] {\n const hasHost = /^https?:\\/\\//.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/')\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasSearch = href.toString().includes('?') || (method === 'get' && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === 'get' && Object.keys(data).length) {\n url.search = qs.stringify(deepmerge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\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", "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\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 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 eventHandler.fireInternalEvent('loadDeferredProps')\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().then(() => {\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.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 {\n page: window.history.state.page,\n scrollRegions,\n }\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 {\n page: window.history.state.page,\n documentScrollPosition: scrollRegion,\n }\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 { 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: VoidFunction\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: VoidFunction): 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): void {\n this.internalListeners.filter((listener) => listener.event === event).forEach((listener) => listener.listener())\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 currentPage.setQuietly(data, { preserveState: false }).then(() => {\n Scroll.restore(history.getScrollRegions())\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n this.onMissingHistoryItem()\n })\n }\n}\n\nexport const eventHandler = new EventHandler()\n", "class NavigationType {\n protected type: NavigationTimingType\n\n public constructor() {\n this.type = this.resolveType()\n }\n\n protected resolveType(): NavigationTimingType {\n if (typeof window === 'undefined') {\n return 'navigate'\n }\n\n if (\n window.performance &&\n window.performance.getEntriesByType &&\n window.performance.getEntriesByType('navigation').length > 0\n ) {\n return (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n }\n\n return 'navigate'\n }\n\n public get(): NavigationTimingType {\n return this.type\n }\n\n public isBackForward(): boolean {\n return this.type === 'back_forward'\n }\n\n public isReload(): boolean {\n return this.type === 'reload'\n }\n}\n\nexport const navigationType = new NavigationType()\n", "import { eventHandler } from './eventHandler'\nimport { 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", "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 { 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(params: ActiveVisit, sendFunc: (params: InternalActiveVisit) => void, { cacheFor }: PrefetchOptions) {\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 })\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: cacheFor === 0,\n timestamp: Date.now(),\n inFlight: false,\n })\n\n this.scheduleForRemoval(params, expires)\n\n this.inFlightRequests = this.inFlightRequests.filter((prefetching) => {\n return !this.paramsAreEqual(prefetching.params, params)\n })\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 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 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 paramsAreEqual(params1: ActiveVisit, params2: ActiveVisit): boolean {\n return objectsAreEqual<ActiveVisit>(params1, params2, [\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\nexport const prefetchedRequests = new PrefetchedRequests()\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 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 }\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' ? {} : 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 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 { 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 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.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 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 const propsToMerge = pageResponse.mergeProps || []\n\n propsToMerge.forEach((prop) => {\n const incomingProp = pageResponse.props[prop]\n\n if (Array.isArray(incomingProp)) {\n pageResponse.props[prop] = [...((currentPage.get().props[prop] || []) as any[]), ...incomingProp]\n } else if (typeof incomingProp === 'object') {\n pageResponse.props[prop] = {\n ...((currentPage.get().props[prop] || []) as Record<string, any>),\n ...incomingProp,\n }\n }\n })\n\n pageResponse.props = { ...currentPage.get().props, ...pageResponse.props }\n }\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 GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n InFlightPrefetch,\n Page,\n PendingVisit,\n PendingVisitOptions,\n PollOptions,\n PrefetchedResponse,\n PrefetchOptions,\n ReloadOptions,\n RequestPayload,\n RouterInitParams,\n Visit,\n VisitCallbacks,\n VisitHelperOptions,\n VisitOptions,\n} from './types'\nimport { 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', () => {\n this.loadDeferredProps()\n })\n }\n\n public get(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { ...options, method: 'get', data })\n }\n\n public post(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'post', data })\n }\n\n public put(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'put', data })\n }\n\n public patch(url: URL | string, data: RequestPayload = {}, options: VisitHelperOptions = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'patch', data })\n }\n\n public delete(url: URL | string, options: Omit<VisitOptions, 'method'> = {}): void {\n return this.visit(url, { preserveState: true, ...options, method: 'delete' })\n }\n\n public reload(options: ReloadOptions = {}): 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(href: string | URL, options: VisitOptions = {}): void {\n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n showProgress: options.showProgress ?? !options.async,\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 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(href: string | URL, options: VisitOptions = {}): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findCached(this.getPrefetchParams(href, options))\n }\n\n public flush(href: string | URL, options: VisitOptions = {}): void {\n prefetchedRequests.remove(this.getPrefetchParams(href, options))\n }\n\n public flushAll(): void {\n prefetchedRequests.removeAll()\n }\n\n public getPrefetching(href: string | URL, options: VisitOptions = {}): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findInFlight(this.getPrefetchParams(href, options))\n }\n\n public prefetch(href: string | URL, options: VisitOptions = {}, { cacheFor = 30_000 }: PrefetchOptions) {\n if (options.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 { cacheFor },\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 replace(params: ClientSideVisitOptions): void {\n this.clientVisit(params, { replace: true })\n }\n\n public push(params: ClientSideVisitOptions): void {\n this.clientVisit(params)\n }\n\n protected clientVisit(params: ClientSideVisitOptions, { replace = false }: { replace?: boolean } = {}): void {\n const current = currentPage.get()\n\n const props = typeof params.props === 'function' ? params.props(current.props) : (params.props ?? current.props)\n\n currentPage.set(\n {\n ...current,\n ...params,\n props,\n },\n {\n replace,\n preserveScroll: params.preserveScroll,\n preserveState: params.preserveState,\n },\n )\n }\n\n protected getPrefetchParams(href: string | URL, 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,\n options: VisitOptions,\n pendingVisitOptions: Partial<PendingVisitOptions> = {},\n ): PendingVisit {\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 ...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 return {\n cancelled: false,\n completed: false,\n interrupted: false,\n ...mergedOptions,\n ...pendingVisitOptions,\n url,\n data: _data,\n }\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(): void {\n const deferred = currentPage.get()?.deferredProps\n\n if (deferred) {\n Object.entries(deferred).forEach(([_, group]) => {\n this.reload({ only: group })\n })\n }\n }\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 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 update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\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\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\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 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 progress = document.createElement('div')\n progress.id = baseComponentSelector\n progress.innerHTML = settings.template\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 document.getElementById(baseComponentSelector)?.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 hiddenStyles = (() => {\n if (typeof document === 'undefined') {\n return null\n }\n\n const el = document.createElement('style')\n\n el.innerHTML = `#${baseComponentSelector} { display: none; }`\n\n return el\n})()\n\nconst show = () => {\n if (hiddenStyles && document.head.contains(hiddenStyles)) {\n return document.head.removeChild(hiddenStyles)\n }\n}\n\nconst hide = () => {\n if (hiddenStyles && !document.head.contains(hiddenStyles)) {\n document.head.appendChild(hiddenStyles)\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", "// The actual event passed to this function could be a native JavaScript event\n// or a React synthetic event, so we are picking just the keys needed here (that\n// are present in both types).\n\nexport default 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", "import { Router } from './router'\n\nexport { default as createHeadManager } from './head'\nexport { hide as hideProgress, reveal as revealProgress, default as setupProgress } from './progress'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport * from './types'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nexport { type Router }\n\nexport const router = new Router()\n"],
|
|
5
|
-
"mappings": "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",
|
|
6
|
-
"names": ["debounce", "fn", "delay", "timeoutID", "args", "fireEvent", "name", "options", "fireBeforeEvent", "visit", "fireErrorEvent", "errors", "fireExceptionEvent", "exception", "fireFinishEvent", "fireInvalidEvent", "response", "fireNavigateEvent", "page", "fireProgressEvent", "progress", "fireStartEvent", "fireSuccessEvent", "firePrefetchedEvent", "firePrefetchingEvent", "SessionStorage", "key", "value", "existing", "nestedKey", "encryptHistory", "data", "iv", "getIv", "storedKey", "getKeyFromSessionStorage", "key", "getOrCreateKey", "encryptData", "historySessionStorageKeys", "decryptHistory", "decryptData", "textEncoder", "str", "encoded", "result", "decrypted", "ivString", "SessionStorage", "createKey", "saveKey", "keyData", "newKey", "stringKey", "Scroll", "history", "region", "scrollRegions", "index", "scrollPosition", "event", "target", "
|
|
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: Uint8Array, 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: Uint8Array, 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 = () => {\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 if (typeof window !== 'undefined') {\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 (window.location.hash) {\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(() => document.getElementById(window.location.hash.slice(1))?.scrollIntoView())\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 { merge } from 'es-toolkit'\nimport * as qs from 'qs'\nimport { hasFiles } from './files'\nimport { isFormData, objectToFormData } from './formData'\nimport { FormDataConvertible, Method, RequestPayload, 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\nexport function mergeDataIntoQueryString(\n method: Method,\n href: URL | string,\n data: Record<string, FormDataConvertible>,\n qsArrayFormat: 'indices' | 'brackets' = 'brackets',\n): [string, Record<string, FormDataConvertible>] {\n const hasHost = /^https?:\\/\\//.test(href.toString())\n const hasAbsolutePath = hasHost || href.toString().startsWith('/')\n const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith('#') && !href.toString().startsWith('?')\n const hasSearch = href.toString().includes('?') || (method === 'get' && Object.keys(data).length)\n const hasHash = href.toString().includes('#')\n\n const url = new URL(href.toString(), 'http://localhost')\n\n if (method === 'get' && Object.keys(data).length) {\n url.search = qs.stringify(merge(qs.parse(url.search, { ignoreQueryPrefix: true }), data), {\n encodeValuesOnly: true,\n arrayFormat: qsArrayFormat,\n })\n data = {}\n }\n\n return [\n [\n hasHost ? `${url.protocol}//${url.host}` : '',\n hasAbsolutePath ? url.pathname : '',\n hasRelativePath ? url.pathname.substring(1) : '',\n hasSearch ? url.search : '',\n hasHash ? url.hash : '',\n ].join(''),\n data,\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", "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\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 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 eventHandler.fireInternalEvent('loadDeferredProps')\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().then(() => {\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.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 {\n page: window.history.state.page,\n scrollRegions,\n }\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 {\n page: window.history.state.page,\n documentScrollPosition: scrollRegion,\n }\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 { 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: VoidFunction\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: VoidFunction): 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): void {\n this.internalListeners.filter((listener) => listener.event === event).forEach((listener) => listener.listener())\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 currentPage.setQuietly(data, { preserveState: false }).then(() => {\n Scroll.restore(history.getScrollRegions())\n fireNavigateEvent(currentPage.get())\n })\n })\n .catch(() => {\n this.onMissingHistoryItem()\n })\n }\n}\n\nexport const eventHandler = new EventHandler()\n", "class NavigationType {\n protected type: NavigationTimingType\n\n public constructor() {\n this.type = this.resolveType()\n }\n\n protected resolveType(): NavigationTimingType {\n if (typeof window === 'undefined') {\n return 'navigate'\n }\n\n if (\n window.performance &&\n window.performance.getEntriesByType &&\n window.performance.getEntriesByType('navigation').length > 0\n ) {\n return (window.performance.getEntriesByType('navigation')[0] as PerformanceNavigationTiming).type\n }\n\n return 'navigate'\n }\n\n public get(): NavigationTimingType {\n return this.type\n }\n\n public isBackForward(): boolean {\n return this.type === 'back_forward'\n }\n\n public isReload(): boolean {\n return this.type === 'reload'\n }\n}\n\nexport const navigationType = new NavigationType()\n", "import { eventHandler } from './eventHandler'\nimport { 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", "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 { 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(params: ActiveVisit, sendFunc: (params: InternalActiveVisit) => void, { cacheFor }: PrefetchOptions) {\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 })\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: cacheFor === 0,\n timestamp: Date.now(),\n inFlight: false,\n })\n\n this.scheduleForRemoval(params, expires)\n\n this.inFlightRequests = this.inFlightRequests.filter((prefetching) => {\n return !this.paramsAreEqual(prefetching.params, params)\n })\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 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 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 paramsAreEqual(params1: ActiveVisit, params2: ActiveVisit): boolean {\n return objectsAreEqual<ActiveVisit>(params1, params2, [\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\nexport const prefetchedRequests = new PrefetchedRequests()\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 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 }\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 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 { 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 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.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 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\n propsToMerge.forEach((prop) => {\n const incomingProp = pageResponse.props[prop]\n\n if (Array.isArray(incomingProp)) {\n pageResponse.props[prop] = [...((currentPage.get().props[prop] || []) as any[]), ...incomingProp]\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 // Deep merge function to handle nested objects and arrays\n const deepMerge = (target: any, source: any) => {\n if (Array.isArray(source)) {\n // Merge arrays by concatenating the existing and incoming elements\n return [...(Array.isArray(target) ? target : []), ...source]\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])\n return acc\n },\n { ...target },\n )\n }\n\n // If the source is neither an array nor an object, return it directly\n return source\n }\n\n // Assign the deeply merged result back to props.\n pageResponse.props[prop] = deepMerge(currentProp, incomingProp)\n })\n\n pageResponse.props = { ...currentPage.get().props, ...pageResponse.props }\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 GlobalEvent,\n GlobalEventNames,\n GlobalEventResult,\n InFlightPrefetch,\n Page,\n PendingVisit,\n PendingVisitOptions,\n PollOptions,\n PrefetchedResponse,\n PrefetchOptions,\n ReloadOptions,\n RequestPayload,\n RouterInitParams,\n Visit,\n VisitCallbacks,\n VisitHelperOptions,\n VisitOptions,\n} from './types'\nimport { 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', () => {\n this.loadDeferredProps()\n })\n }\n\n public get<T extends RequestPayload = RequestPayload>(\n url: URL | string,\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,\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,\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,\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,\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>(href: string | URL, options: VisitOptions<T> = {}): void {\n const visit: PendingVisit = this.getPendingVisit(href, {\n ...options,\n showProgress: options.showProgress ?? !options.async,\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 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(href: string | URL, options: VisitOptions = {}): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findCached(this.getPrefetchParams(href, options))\n }\n\n public flush(href: string | URL, options: VisitOptions = {}): void {\n prefetchedRequests.remove(this.getPrefetchParams(href, options))\n }\n\n public flushAll(): void {\n prefetchedRequests.removeAll()\n }\n\n public getPrefetching(href: string | URL, options: VisitOptions = {}): InFlightPrefetch | PrefetchedResponse | null {\n return prefetchedRequests.findInFlight(this.getPrefetchParams(href, options))\n }\n\n public prefetch(href: string | URL, options: VisitOptions = {}, { cacheFor = 30_000 }: PrefetchOptions) {\n if (options.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 { cacheFor },\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 replace(params: ClientSideVisitOptions): void {\n this.clientVisit(params, { replace: true })\n }\n\n public push(params: ClientSideVisitOptions): void {\n this.clientVisit(params)\n }\n\n protected clientVisit(params: ClientSideVisitOptions, { replace = false }: { replace?: boolean } = {}): void {\n const current = currentPage.get()\n\n const props = typeof params.props === 'function' ? params.props(current.props) : (params.props ?? current.props)\n\n currentPage.set(\n {\n ...current,\n ...params,\n props,\n },\n {\n replace,\n preserveScroll: params.preserveScroll,\n preserveState: params.preserveState,\n },\n )\n }\n\n protected getPrefetchParams(href: string | URL, 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,\n options: VisitOptions,\n pendingVisitOptions: Partial<PendingVisitOptions> = {},\n ): PendingVisit {\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 ...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 return {\n cancelled: false,\n completed: false,\n interrupted: false,\n ...mergedOptions,\n ...pendingVisitOptions,\n url,\n data: _data,\n }\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(): void {\n const deferred = currentPage.get()?.deferredProps\n\n if (deferred) {\n Object.entries(deferred).forEach(([_, group]) => {\n this.reload({ only: group })\n })\n }\n }\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 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 update: (elements) => update(id, elements),\n disconnect: () => disconnect(id),\n }\n },\n }\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\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\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 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 progress = document.createElement('div')\n progress.id = baseComponentSelector\n progress.innerHTML = settings.template\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 document.getElementById(baseComponentSelector)?.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 hiddenStyles = (() => {\n if (typeof document === 'undefined') {\n return null\n }\n\n const el = document.createElement('style')\n\n el.innerHTML = `#${baseComponentSelector} { display: none; }`\n\n return el\n})()\n\nconst show = () => {\n if (hiddenStyles && document.head.contains(hiddenStyles)) {\n return document.head.removeChild(hiddenStyles)\n }\n}\n\nconst hide = () => {\n if (hiddenStyles && !document.head.contains(hiddenStyles)) {\n document.head.appendChild(hiddenStyles)\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", "// The actual event passed to this function could be a native JavaScript event\n// or a React synthetic event, so we are picking just the keys needed here (that\n// are present in both types).\n\nexport default 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", "import { Router } from './router'\n\nexport { default as createHeadManager } from './head'\nexport { hide as hideProgress, reveal as revealProgress, default as setupProgress } from './progress'\nexport { default as shouldIntercept } from './shouldIntercept'\nexport * from './types'\nexport { hrefToUrl, mergeDataIntoQueryString, urlWithoutHash } from './url'\nexport { type Router }\n\nexport const router = new Router()\n"],
|
|
5
|
+
"mappings": "AAAe,SAARA,EAAyEC,EAAOC,EAAkB,CACvG,IAAIC,EACJ,OAAO,YAAaC,EAAiB,CACnC,aAAaD,CAAS,EACtBA,EAAY,WAAW,IAAMF,EAAG,MAAM,KAAMG,CAAI,EAAGF,CAAK,CAC1D,CACF,CCJA,SAASG,EACPC,EACAC,EACS,CACT,OAAO,SAAS,cAAc,IAAI,YAAY,WAAWD,CAAI,GAAIC,CAAO,CAAC,CAC3E,CAEO,IAAMC,EAAiDC,GACrDJ,EAAU,SAAU,CAAE,WAAY,GAAM,OAAQ,CAAE,MAAAI,CAAM,CAAE,CAAC,EAGvDC,GAA+CC,GACnDN,EAAU,QAAS,CAAE,OAAQ,CAAE,OAAAM,CAAO,CAAE,CAAC,EAGrCC,GAAuDC,GAC3DR,EAAU,YAAa,CAAE,WAAY,GAAM,OAAQ,CAAE,UAAAQ,CAAU,CAAE,CAAC,EAG9DC,GAAiDL,GACrDJ,EAAU,SAAU,CAAE,OAAQ,CAAE,MAAAI,CAAM,CAAE,CAAC,EAGrCM,GAAmDC,GACvDX,EAAU,UAAW,CAAE,WAAY,GAAM,OAAQ,CAAE,SAAAW,CAAS,CAAE,CAAC,EAG3DC,EAAqDC,GACzDb,EAAU,WAAY,CAAE,OAAQ,CAAE,KAAAa,CAAK,CAAE,CAAC,EAGtCC,GAAqDC,GACzDf,EAAU,WAAY,CAAE,OAAQ,CAAE,SAAAe,CAAS,CAAE,CAAC,EAG1CC,GAA+CZ,GACnDJ,EAAU,QAAS,CAAE,OAAQ,CAAE,MAAAI,CAAM,CAAE,CAAC,EAGpCa,GAAmDJ,GACvDb,EAAU,UAAW,CAAE,OAAQ,CAAE,KAAAa,CAAK,CAAE,CAAC,EAGrCK,GAAwD,CAACP,EAAUP,IACvEJ,EAAU,aAAc,CAAE,OAAQ,CAAE,UAAW,KAAK,IAAI,EAAG,SAAUW,EAAS,KAAM,MAAAP,CAAM,CAAE,CAAC,EAGzFe,GAA2Df,GAC/DJ,EAAU,cAAe,CAAE,OAAQ,CAAE,MAAAI,CAAM,CAAE,CAAC,EClDhD,IAAMgB,EAAN,KAAqB,CAG1B,OAAc,IAAIC,EAAaC,EAAkB,CAC3C,OAAO,OAAW,KACpB,OAAO,eAAe,QAAQD,EAAK,KAAK,UAAUC,CAAK,CAAC,CAE5D,CAEA,OAAc,IAAID,EAAkB,CAClC,GAAI,OAAO,OAAW,IACpB,OAAO,KAAK,MAAM,OAAO,eAAe,QAAQA,CAAG,GAAK,MAAM,CAElE,CAEA,OAAc,MAAMA,EAAaC,EAAkB,CACjD,IAAMC,EAAW,KAAK,IAAIF,CAAG,EAEzBE,IAAa,KACf,KAAK,IAAIF,EAAKC,CAAK,EAEnB,KAAK,IAAID,EAAK,CAAE,GAAGE,EAAU,GAAGD,CAAM,CAAC,CAE3C,CAEA,OAAc,OAAOD,EAAmB,CAClC,OAAO,OAAW,KACpB,OAAO,eAAe,WAAWA,CAAG,CAExC,CAEA,OAAc,aAAaA,EAAaG,EAAyB,CAC/D,IAAMD,EAAW,KAAK,IAAIF,CAAG,EAEzBE,IAAa,OACf,OAAOA,EAASC,CAAS,EAEzB,KAAK,IAAIH,EAAKE,CAAQ,EAE1B,CAEA,OAAc,OAAOF,EAAsB,CACzC,GAAI,CACF,OAAO,KAAK,IAAIA,CAAG,IAAM,IAC3B,MAAgB,CACd,MAAO,EACT,CACF,CAEA,OAAc,OAAc,CACtB,OAAO,OAAW,KACpB,OAAO,eAAe,MAAM,CAEhC,CACF,EAtDaD,EACG,iBAAmB,uBCC5B,IAAMK,GAAiB,MAAOC,GAAoC,CACvE,GAAI,OAAO,OAAW,IACpB,MAAM,IAAI,MAAM,2BAA2B,EAG7C,IAAMC,EAAKC,GAAM,EACXC,EAAY,MAAMC,GAAyB,EAC3CC,EAAM,MAAMC,GAAeH,CAAS,EAE1C,GAAI,CAACE,EACH,MAAM,IAAI,MAAM,2BAA2B,EAK7C,OAFkB,MAAME,GAAYN,EAAII,EAAKL,CAAI,CAGnD,EAEaQ,EAA4B,CACvC,IAAK,aACL,GAAI,WACN,EAEaC,GAAiB,MAAOT,GAA4B,CAC/D,IAAMC,EAAKC,GAAM,EACXC,EAAY,MAAMC,GAAyB,EAEjD,GAAI,CAACD,EACH,MAAM,IAAI,MAAM,2BAA2B,EAG7C,OAAO,MAAMO,GAAYT,EAAIE,EAAWH,CAAI,CAC9C,EAEMO,GAAc,MAAON,EAAgBI,EAAgBL,IAAc,CACvE,GAAI,OAAO,OAAW,IACpB,MAAM,IAAI,MAAM,2BAA2B,EAG7C,GAAI,OAAO,OAAO,OAAO,OAAW,IAClC,eAAQ,KAAK,mEAAmE,EAEzE,QAAQ,QAAQA,CAAI,EAG7B,IAAMW,EAAc,IAAI,YAClBC,EAAM,KAAK,UAAUZ,CAAI,EACzBa,EAAU,IAAI,WAAWD,EAAI,OAAS,CAAC,EAEvCE,EAASH,EAAY,WAAWC,EAAKC,CAAO,EAElD,OAAO,OAAO,OAAO,OAAO,QAC1B,CACE,KAAM,UACN,GAAAZ,CACF,EACAI,EACAQ,EAAQ,SAAS,EAAGC,EAAO,OAAO,CACpC,CACF,EAEMJ,GAAc,MAAOT,EAAgBI,EAAgBL,IAAc,CACvE,GAAI,OAAO,OAAO,OAAO,OAAW,IAClC,eAAQ,KAAK,mEAAmE,EAEzE,QAAQ,QAAQA,CAAI,EAG7B,IAAMe,EAAY,MAAM,OAAO,OAAO,OAAO,QAC3C,CACE,KAAM,UACN,GAAAd,CACF,EACAI,EACAL,CACF,EAEA,OAAO,KAAK,MAAM,IAAI,YAAY,EAAE,OAAOe,CAAS,CAAC,CACvD,EAEMb,GAAQ,IAAM,CAClB,IAAMc,EAAWC,EAAe,IAAIT,EAA0B,EAAE,EAEhE,GAAIQ,EACF,OAAO,IAAI,WAAWA,CAAQ,EAGhC,IAAMf,EAAK,OAAO,OAAO,gBAAgB,IAAI,WAAW,EAAE,CAAC,EAE3D,OAAAgB,EAAe,IAAIT,EAA0B,GAAI,MAAM,KAAKP,CAAE,CAAC,EAExDA,CACT,EAEMiB,GAAY,SACZ,OAAO,OAAO,OAAO,OAAW,KAClC,QAAQ,KAAK,mEAAmE,EAEzE,QAAQ,QAAQ,IAAI,GAGtB,OAAO,OAAO,OAAO,YAC1B,CACE,KAAM,UACN,OAAQ,GACV,EACA,GACA,CAAC,UAAW,SAAS,CACvB,EAGIC,GAAU,MAAOd,GAAmB,CACxC,GAAI,OAAO,OAAO,OAAO,OAAW,IAClC,eAAQ,KAAK,mEAAmE,EAEzE,QAAQ,QAAQ,EAGzB,IAAMe,EAAU,MAAM,OAAO,OAAO,OAAO,UAAU,MAAOf,CAAG,EAE/DY,EAAe,IAAIT,EAA0B,IAAK,MAAM,KAAK,IAAI,WAAWY,CAAO,CAAC,CAAC,CACvF,EAEMd,GAAiB,MAAOD,GAA0B,CACtD,GAAIA,EACF,OAAOA,EAGT,IAAMgB,EAAS,MAAMH,GAAU,EAE/B,OAAKG,GAIL,MAAMF,GAAQE,CAAM,EAEbA,GALE,IAMX,EAEMjB,GAA2B,SAAuC,CACtE,IAAMkB,EAAYL,EAAe,IAAIT,EAA0B,GAAG,EAElE,OAAKc,EAIO,MAAM,OAAO,OAAO,OAAO,UACrC,MACA,IAAI,WAAWA,CAAS,EACxB,CACE,KAAM,UACN,OAAQ,GACV,EACA,GACA,CAAC,UAAW,SAAS,CACvB,EAZS,IAeX,EC7JO,IAAMC,EAAN,KAAa,CAClB,OAAc,MAAa,CACzBC,EAAQ,oBACN,MAAM,KAAK,KAAK,QAAQ,CAAC,EAAE,IAAKC,IAAY,CAC1C,IAAKA,EAAO,UACZ,KAAMA,EAAO,UACf,EAAE,CACJ,CACF,CAEA,OAAiB,SAA+B,CAC9C,OAAO,SAAS,iBAAiB,iBAAiB,CACpD,CAEA,OAAc,OAAc,CACtB,OAAO,OAAW,KACpB,OAAO,SAAS,EAAG,CAAC,EAGtB,KAAK,QAAQ,EAAE,QAASA,GAAW,CAC7B,OAAOA,EAAO,UAAa,WAC7BA,EAAO,SAAS,EAAG,CAAC,GAEpBA,EAAO,UAAY,EACnBA,EAAO,WAAa,EAExB,CAAC,EAED,KAAK,KAAK,EAEN,OAAO,SAAS,MAGlB,WAAW,IAAM,SAAS,eAAe,OAAO,SAAS,KAAK,MAAM,CAAC,CAAC,GAAG,eAAe,CAAC,CAE7F,CAEA,OAAc,QAAQC,EAAqC,CACzD,KAAK,gBAAgB,EAErB,KAAK,QAAQ,EAAE,QAAQ,CAACD,EAAiBE,IAAkB,CACzD,IAAMC,EAAiBF,EAAcC,CAAK,EAErCC,IAID,OAAOH,EAAO,UAAa,WAC7BA,EAAO,SAASG,EAAe,KAAMA,EAAe,GAAG,GAEvDH,EAAO,UAAYG,EAAe,IAClCH,EAAO,WAAaG,EAAe,MAEvC,CAAC,CACH,CAEA,OAAc,iBAAwB,CACpC,IAAMA,EAAiBJ,EAAQ,0BAA0B,EAErD,OAAO,OAAW,KACpB,OAAO,SAASI,EAAe,KAAMA,EAAe,GAAG,CAE3D,CAEA,OAAc,SAASC,EAAoB,CACzC,IAAMC,EAASD,EAAM,OAEjB,OAAOC,EAAO,cAAiB,YAAcA,EAAO,aAAa,eAAe,GAClF,KAAK,KAAK,CAEd,CAEA,OAAc,gBAAuB,CACnCN,EAAQ,2BAA2B,CACjC,IAAK,OAAO,QACZ,KAAM,OAAO,OACf,CAAC,CACH,CACF,ECjFA,OAAS,SAAAO,OAAa,aACtB,UAAYC,MAAQ,KCCb,SAASC,EAASC,EAAqD,CAC5E,OACEA,aAAgB,MAChBA,aAAgB,MACfA,aAAgB,UAAYA,EAAK,OAAS,GAC1CA,aAAgB,UAAY,MAAM,KAAKA,EAAK,OAAO,CAAC,EAAE,KAAMC,GAAUF,EAASE,CAAK,CAAC,GACrF,OAAOD,GAAS,UAAYA,IAAS,MAAQ,OAAO,OAAOA,CAAI,EAAE,KAAMC,GAAUF,EAASE,CAAK,CAAC,CAErG,CCRO,IAAMC,EAAcC,GAAkCA,aAAiB,SAEvE,SAASC,GACdC,EACAC,EAAiB,IAAI,SACrBC,EAA2B,KACjB,CACVF,EAASA,GAAU,CAAC,EAEpB,QAAWG,KAAOH,EACZ,OAAO,UAAU,eAAe,KAAKA,EAAQG,CAAG,GAClDC,GAAOH,EAAMI,GAAWH,EAAWC,CAAG,EAAGH,EAAOG,CAAG,CAAC,EAIxD,OAAOF,CACT,CAEA,SAASI,GAAWC,EAAuBH,EAAqB,CAC9D,OAAOG,EAASA,EAAS,IAAMH,EAAM,IAAMA,CAC7C,CAEA,SAASC,GAAOH,EAAgBE,EAAaL,EAAkC,CAC7E,GAAI,MAAM,QAAQA,CAAK,EACrB,OAAO,MAAM,KAAKA,EAAM,KAAK,CAAC,EAAE,QAASS,GAAUH,GAAOH,EAAMI,GAAWF,EAAKI,EAAM,SAAS,CAAC,EAAGT,EAAMS,CAAK,CAAC,CAAC,EAC3G,GAAIT,aAAiB,KAC1B,OAAOG,EAAK,OAAOE,EAAKL,EAAM,YAAY,CAAC,EACtC,GAAIA,aAAiB,KAC1B,OAAOG,EAAK,OAAOE,EAAKL,EAAOA,EAAM,IAAI,EACpC,GAAIA,aAAiB,KAC1B,OAAOG,EAAK,OAAOE,EAAKL,CAAK,EACxB,GAAI,OAAOA,GAAU,UAC1B,OAAOG,EAAK,OAAOE,EAAKL,EAAQ,IAAM,GAAG,EACpC,GAAI,OAAOA,GAAU,SAC1B,OAAOG,EAAK,OAAOE,EAAKL,CAAK,EACxB,GAAI,OAAOA,GAAU,SAC1B,OAAOG,EAAK,OAAOE,EAAK,GAAGL,CAAK,EAAE,EAC7B,GAAIA,GAAU,KACnB,OAAOG,EAAK,OAAOE,EAAK,EAAE,EAG5BJ,GAAiBD,EAAOG,EAAME,CAAG,CACnC,CFtCO,SAASK,EAAUC,EAAyB,CACjD,OAAO,IAAI,IAAIA,EAAK,SAAS,EAAG,OAAO,OAAW,IAAc,OAAY,OAAO,SAAS,SAAS,CAAC,CACxG,CAEO,IAAMC,GAAsB,CACjCD,EACAE,EACAC,EACAC,EACAC,IAC0B,CAC1B,IAAIC,EAAM,OAAON,GAAS,SAAWD,EAAUC,CAAI,EAAIA,EAMvD,IAJKO,EAASL,CAAI,GAAKE,IAAkB,CAACI,EAAWN,CAAI,IACvDA,EAAOO,GAAiBP,CAAI,GAG1BM,EAAWN,CAAI,EACjB,MAAO,CAACI,EAAKJ,CAAI,EAGnB,GAAM,CAACQ,EAAOC,CAAK,EAAIC,GAAyBT,EAAQG,EAAKJ,EAAMG,CAAsB,EAEzF,MAAO,CAACN,EAAUW,CAAK,EAAGC,CAAK,CACjC,EAEO,SAASC,GACdT,EACAH,EACAE,EACAW,EAAwC,WACO,CAC/C,IAAMC,EAAU,eAAe,KAAKd,EAAK,SAAS,CAAC,EAC7Ce,EAAkBD,GAAWd,EAAK,SAAS,EAAE,WAAW,GAAG,EAC3DgB,EAAkB,CAACD,GAAmB,CAACf,EAAK,SAAS,EAAE,WAAW,GAAG,GAAK,CAACA,EAAK,SAAS,EAAE,WAAW,GAAG,EACzGiB,EAAYjB,EAAK,SAAS,EAAE,SAAS,GAAG,GAAMG,IAAW,OAAS,OAAO,KAAKD,CAAI,EAAE,OACpFgB,EAAUlB,EAAK,SAAS,EAAE,SAAS,GAAG,EAEtCM,EAAM,IAAI,IAAIN,EAAK,SAAS,EAAG,kBAAkB,EAEvD,OAAIG,IAAW,OAAS,OAAO,KAAKD,CAAI,EAAE,SACxCI,EAAI,OAAY,YAAUa,GAAS,QAAMb,EAAI,OAAQ,CAAE,kBAAmB,EAAK,CAAC,EAAGJ,CAAI,EAAG,CACxF,iBAAkB,GAClB,YAAaW,CACf,CAAC,EACDX,EAAO,CAAC,GAGH,CACL,CACEY,EAAU,GAAGR,EAAI,QAAQ,KAAKA,EAAI,IAAI,GAAK,GAC3CS,EAAkBT,EAAI,SAAW,GACjCU,EAAkBV,EAAI,SAAS,UAAU,CAAC,EAAI,GAC9CW,EAAYX,EAAI,OAAS,GACzBY,EAAUZ,EAAI,KAAO,EACvB,EAAE,KAAK,EAAE,EACTJ,CACF,CACF,CAEO,SAASkB,EAAed,EAA0B,CACvD,OAAAA,EAAM,IAAI,IAAIA,EAAI,IAAI,EACtBA,EAAI,KAAO,GACJA,CACT,CAEO,IAAMe,GAAmB,CAACC,EAA2BC,IAAmC,CACzFD,EAAU,MAAQ,CAACC,EAAe,MAAQH,EAAeE,CAAS,EAAE,OAASC,EAAe,OAC9FA,EAAe,KAAOD,EAAU,KAEpC,EAEaE,EAAuB,CAACC,EAAsBC,IAClDN,EAAeK,CAAI,EAAE,OAASL,EAAeM,CAAI,EAAE,KG/D5D,IAAMC,GAAN,KAAkB,CAAlB,cAIE,KAAU,YAAc,CAAC,EACzB,KAAU,UAGJ,CAAC,EACP,KAAU,gBAAkB,GAC5B,KAAU,QAAU,GAEb,KAAK,CAAE,YAAAC,EAAa,cAAAC,EAAe,iBAAAC,CAAiB,EAAqB,CAC9E,YAAK,KAAOF,EACZ,KAAK,cAAgBC,EACrB,KAAK,iBAAmBC,EAEjB,IACT,CAEO,IACLC,EACA,CACE,QAAAC,EAAU,GACV,eAAAC,EAAiB,GACjB,cAAAC,EAAgB,EAClB,EAAiF,CAAC,EACnE,CACf,KAAK,YAAc,CAAC,EAEpB,IAAMC,EAAc,KAAK,YAEzB,OAAIJ,EAAK,cACPK,EAAQ,MAAM,EAGT,KAAK,QAAQL,EAAK,SAAS,EAAE,KAAMM,GAAc,CACtD,GAAIF,IAAgB,KAAK,YAEvB,OAGFJ,EAAK,kBAALA,EAAK,gBAAoB,CAAC,GAE1B,IAAMO,EAAW,OAAO,OAAW,IAAc,OAAO,SAAW,IAAI,IAAIP,EAAK,GAAG,EACnF,OAAAC,EAAUA,GAAWO,EAAqBC,EAAUT,EAAK,GAAG,EAAGO,CAAQ,EAEhE,IAAI,QAASG,GAAY,CAC9BT,EAAUI,EAAQ,aAAaL,EAAM,IAAMU,EAAQ,IAAI,CAAC,EAAIL,EAAQ,UAAUL,EAAM,IAAMU,EAAQ,IAAI,CAAC,CACzG,CAAC,EAAE,KAAK,IAAM,CACZ,IAAMC,EAAiB,CAAC,KAAK,UAAUX,CAAI,EAE3C,YAAK,KAAOA,EACZ,KAAK,QAAU,GAEXW,GACF,KAAK,cAAc,cAAc,EAG/B,KAAK,iBACP,KAAK,cAAc,WAAW,EAGhC,KAAK,gBAAkB,GAEhB,KAAK,KAAK,CAAE,UAAAL,EAAW,KAAAN,EAAM,cAAAG,CAAc,CAAC,EAAE,KAAK,IAAM,CACzDD,GACHU,EAAO,MAAM,EAGfC,EAAa,kBAAkB,mBAAmB,EAE7CZ,GACHa,EAAkBd,CAAI,CAE1B,CAAC,CACH,CAAC,CACH,CAAC,CACH,CAEO,WACLA,EACA,CACE,cAAAG,EAAgB,EAClB,EAEI,CAAC,EACL,CACA,OAAO,KAAK,QAAQH,EAAK,SAAS,EAAE,KAAMM,IACxC,KAAK,KAAON,EACZ,KAAK,QAAU,GACfK,EAAQ,WAAWL,CAAI,EAChB,KAAK,KAAK,CAAE,UAAAM,EAAW,KAAAN,EAAM,cAAAG,CAAc,CAAC,EACpD,CACH,CAEO,OAAc,CACnB,KAAK,QAAU,EACjB,CAEO,WAAqB,CAC1B,OAAO,KAAK,OACd,CAEO,KAAY,CACjB,OAAO,KAAK,IACd,CAEO,MAAMY,EAA2B,CACtC,KAAK,KAAO,CAAE,GAAG,KAAK,KAAM,GAAGA,CAAK,CACtC,CAEO,WAAWC,EAAoB,CAC/B,KAAK,KAAK,IAAI,SAASA,CAAI,IAC9B,KAAK,KAAK,KAAOA,EAErB,CAEO,SAASD,EAAqC,CACnD,KAAK,KAAK,gBAAkBA,CAC9B,CAEO,KAAK,CACV,UAAAT,EACA,KAAAN,EACA,cAAAG,CACF,EAIqB,CACnB,OAAO,KAAK,cAAc,CAAE,UAAAG,EAAW,KAAAN,EAAM,cAAAG,CAAc,CAAC,CAC9D,CAEO,QAAQG,EAAuC,CACpD,OAAO,QAAQ,QAAQ,KAAK,iBAAiBA,CAAS,CAAC,CACzD,CAEO,UAAUN,EAAqB,CACpC,OAAO,KAAK,KAAK,YAAcA,EAAK,SACtC,CAEO,GAAGiB,EAAkBC,EAAsC,CAChE,YAAK,UAAU,KAAK,CAAE,MAAAD,EAAO,SAAAC,CAAS,CAAC,EAEhC,IAAM,CACX,KAAK,UAAY,KAAK,UAAU,OAAQC,GAAaA,EAAS,QAAUF,GAASE,EAAS,WAAaD,CAAQ,CACjH,CACF,CAEO,cAAcD,EAAwB,CAC3C,KAAK,UAAU,OAAQE,GAAaA,EAAS,QAAUF,CAAK,EAAE,QAASE,GAAaA,EAAS,SAAS,CAAC,CACzG,CACF,EAEanB,EAAO,IAAIJ,GC3KxB,IAAqBwB,EAArB,KAA8B,CAA9B,cACE,KAAU,MAAqB,CAAC,EAChC,KAAU,kBAA0C,KAE7C,IAAIC,EAAe,CACxB,YAAK,MAAM,KAAKA,CAAI,EACb,KAAK,QAAQ,CACtB,CAEO,SAAU,CACf,YAAK,oBAAL,KAAK,kBAAsB,KAAK,YAAY,EAAE,KAAK,IAAM,CACvD,KAAK,kBAAoB,IAC3B,CAAC,GAEM,KAAK,iBACd,CAEU,aAA6B,CACrC,IAAMC,EAAO,KAAK,MAAM,MAAM,EAE9B,OAAIA,EACK,QAAQ,QAAQA,EAAK,CAAC,EAAE,KAAK,IAAM,KAAK,YAAY,CAAC,EAGvD,QAAQ,QAAQ,CACzB,CACF,ECpBA,IAAMC,EAAW,OAAO,OAAW,IAC7BC,EAAQ,IAAIC,EACZC,GAAc,CAACH,GAAY,QAAQ,KAAK,OAAO,UAAU,SAAS,EAElEI,GAAN,KAAc,CAAd,cACE,KAAO,gBAAkB,kBACzB,KAAO,cAAgB,gBACvB,KAAO,YAAc,GACrB,KAAU,QAAyB,CAAC,EAEpC,KAAU,aAAqC,KAExC,SAASC,EAAeC,EAAmB,CAChD,KAAK,aAAa,CAChB,GAAGC,EAAY,IAAI,EACnB,gBAAiB,CACf,GAAIA,EAAY,IAAI,GAAG,iBAAmB,CAAC,EAC3C,CAACD,CAAG,EAAGD,CACT,CACF,CAAC,CACH,CAEO,QAAQC,EAAsB,CACnC,GAAI,CAACN,EACH,OAAO,KAAK,eAAe,KAAK,eAAe,IAAIM,CAAG,CAE1D,CAEO,UAAUC,EAAYC,EAA0B,KAAY,CACjE,GAAI,CAAAR,EAIJ,IAAI,KAAK,YAAa,CACpBQ,GAAMA,EAAG,EACT,MACF,CAEA,KAAK,QAAUD,EAEfN,EAAM,IAAI,IACD,KAAK,YAAYM,CAAI,EAAE,KAAMF,GAAS,CAG3C,IAAMI,EAAS,IAAM,CACnB,KAAK,YAAY,CAAE,KAAMJ,CAAK,EAAGE,EAAK,GAAG,EACzCC,GAAMA,EAAG,CACX,EAEIL,GACF,WAAWM,CAAM,EAEjBA,EAAO,CAEX,CAAC,CACF,EACH,CAEU,YAAYF,EAAyC,CAC7D,OAAO,IAAI,QAASG,GACXH,EAAK,eAAiBI,GAAeJ,CAAI,EAAE,KAAKG,CAAO,EAAIA,EAAQH,CAAI,CAC/E,CACH,CAEO,cAA8B,CACnC,OAAON,EAAM,QAAQ,CACvB,CAEO,QAAQM,EAAoB,KAAqB,CACtD,GAAIP,EACF,OAAO,QAAQ,QAAQO,GAAQA,EAAY,IAAI,CAAC,EAGlD,IAAMK,EAAWL,GAAQ,OAAO,QAAQ,OAAO,KAE/C,OAAO,KAAK,gBAAgBK,CAAQ,EAAE,KAAMP,GAAS,CACnD,GAAI,CAACA,EACH,MAAM,IAAI,MAAM,2BAA2B,EAG7C,OAAI,KAAK,eAAiB,KACxB,KAAK,aAAeA,GAAQ,OAE5B,KAAK,QAAUA,GAAQ,CAAC,EAGnBA,CACT,CAAC,CACH,CAEU,gBAAgBO,EAA2D,CACnF,OAAOA,aAAoB,YAAcC,GAAeD,CAAQ,EAAI,QAAQ,QAAQA,CAAQ,CAC9F,CAEO,oBAAoBE,EAAqC,CAC9Db,EAAM,IAAI,IACD,QAAQ,QAAQ,EAAE,KAAK,IAAM,CAC7B,OAAO,QAAQ,OAAO,MAI3B,KAAK,eACH,CACE,KAAM,OAAO,QAAQ,MAAM,KAC3B,cAAAa,CACF,CACF,CACF,CAAC,CACF,CACH,CAEO,2BAA2BC,EAAkC,CAClEd,EAAM,IAAI,IACD,QAAQ,QAAQ,EAAE,KAAK,IAAM,CAC7B,OAAO,QAAQ,OAAO,MAI3B,KAAK,eACH,CACE,KAAM,OAAO,QAAQ,MAAM,KAC3B,uBAAwBc,CAC1B,CACF,CACF,CAAC,CACF,CACH,CAEO,kBAAmC,CACxC,OAAO,OAAO,QAAQ,OAAO,eAAiB,CAAC,CACjD,CAEO,2BAA0C,CAC/C,OAAO,OAAO,QAAQ,OAAO,wBAA0B,CAAE,IAAK,EAAG,KAAM,CAAE,CAC3E,CAEO,aAAaR,EAAYC,EAA0B,KAAY,CAGpE,GAFAD,EAAY,MAAMA,CAAI,EAElB,CAAAP,EAIJ,IAAI,KAAK,YAAa,CACpBQ,GAAMA,EAAG,EACT,MACF,CAEA,KAAK,QAAUD,EAEfN,EAAM,IAAI,IACD,KAAK,YAAYM,CAAI,EAAE,KAAMF,GAAS,CAG3C,IAAMW,EAAY,IAAM,CACtB,KAAK,eAAe,CAAE,KAAMX,CAAK,EAAGE,EAAK,GAAG,EAC5CC,GAAMA,EAAG,CACX,EAEIL,GACF,WAAWa,CAAS,EAEpBA,EAAU,CAEd,CAAC,CACF,EACH,CAEU,eACRX,EAKAY,EACM,CACN,OAAO,QAAQ,aACb,CACE,GAAGZ,EACH,cAAeA,EAAK,eAAiB,OAAO,QAAQ,OAAO,cAC3D,uBAAwBA,EAAK,wBAA0B,OAAO,QAAQ,OAAO,sBAC/E,EACA,GACAY,CACF,CACF,CAEU,YACRZ,EAKAY,EACM,CACN,OAAO,QAAQ,UAAUZ,EAAM,GAAIY,CAAG,CACxC,CAEO,SAAYX,EAAiBY,EAAuB,CACzD,OAAO,KAAK,UAAUZ,CAAG,GAAKY,CAChC,CAEO,YAAYZ,EAAiB,CAC9B,KAAK,QAAQA,CAAG,IAAM,SACxB,OAAO,KAAK,QAAQA,CAAG,EACvB,KAAK,aAAa,KAAK,OAAe,EAE1C,CAEO,aAAuB,CAC5B,MAAO,CAAC,CAAC,KAAK,YAAY,CAC5B,CAEO,OAAQ,CACba,EAAe,OAAOC,EAA0B,GAAG,EACnDD,EAAe,OAAOC,EAA0B,EAAE,CACpD,CAEO,WAAWb,EAAkB,CAClC,KAAK,QAAUA,CACjB,CAEO,aAAac,EAAqB,CACvC,MAAO,CAAC,CAACA,EAAM,IACjB,CAEO,aAAoB,CACzB,OAAO,KAAK,OACd,CACF,EAEI,OAAO,OAAW,KAAe,OAAO,QAAQ,oBAClD,OAAO,QAAQ,kBAAoB,UAG9B,IAAMC,EAAU,IAAIlB,GCzO3B,IAAMmB,GAAN,KAAmB,CAAnB,cACE,KAAU,kBAGJ,CAAC,EAEA,MAAO,CACR,OAAO,OAAW,MACpB,OAAO,iBAAiB,WAAY,KAAK,oBAAoB,KAAK,IAAI,CAAC,EACvE,OAAO,iBAAiB,SAAUC,EAASC,EAAO,eAAe,KAAKA,CAAM,EAAG,GAAG,EAAG,EAAI,GAGvF,OAAO,SAAa,KACtB,SAAS,iBAAiB,SAAUD,EAASC,EAAO,SAAS,KAAKA,CAAM,EAAG,GAAG,EAAG,EAAI,CAEzF,CAEO,cACLC,EACAC,EACc,CACd,IAAMC,EAAaC,GAAmC,CACpD,IAAMC,EAAWH,EAASE,CAAK,EAE3BA,EAAM,YAAc,CAACA,EAAM,kBAAoBC,IAAa,IAC9DD,EAAM,eAAe,CAEzB,EAEA,OAAO,KAAK,iBAAiB,WAAWH,CAAI,GAAIE,CAAQ,CAC1D,CAEO,GAAGC,EAAsBF,EAAsC,CACpE,YAAK,kBAAkB,KAAK,CAAE,MAAAE,EAAO,SAAUF,CAAS,CAAC,EAElD,IAAM,CACX,KAAK,kBAAoB,KAAK,kBAAkB,OAAQC,GAAaA,EAAS,WAAaD,CAAQ,CACrG,CACF,CAEO,sBAAuB,CAG5BI,EAAY,MAAM,EAElB,KAAK,kBAAkB,oBAAoB,CAC7C,CAEO,kBAAkBF,EAA4B,CACnD,KAAK,kBAAkB,OAAQD,GAAaA,EAAS,QAAUC,CAAK,EAAE,QAASD,GAAaA,EAAS,SAAS,CAAC,CACjH,CAEU,iBAAiBF,EAAcE,EAAuC,CAC9E,gBAAS,iBAAiBF,EAAME,CAAQ,EAEjC,IAAM,SAAS,oBAAoBF,EAAME,CAAQ,CAC1D,CAEU,oBAAoBC,EAA4B,CACxD,IAAMG,EAAQH,EAAM,OAAS,KAE7B,GAAIG,IAAU,KAAM,CAClB,IAAMC,EAAMC,EAAUH,EAAY,IAAI,EAAE,GAAG,EAC3CE,EAAI,KAAO,OAAO,SAAS,KAE3BE,EAAQ,aAAa,CAAE,GAAGJ,EAAY,IAAI,EAAG,IAAKE,EAAI,IAAK,CAAC,EAC5DR,EAAO,MAAM,EAEb,MACF,CAEA,GAAI,CAACU,EAAQ,aAAaH,CAAK,EAC7B,OAAO,KAAK,qBAAqB,EAGnCG,EACG,QAAQH,EAAM,IAAI,EAClB,KAAMI,GAAS,CACdL,EAAY,WAAWK,EAAM,CAAE,cAAe,EAAM,CAAC,EAAE,KAAK,IAAM,CAChEX,EAAO,QAAQU,EAAQ,iBAAiB,CAAC,EACzCE,EAAkBN,EAAY,IAAI,CAAC,CACrC,CAAC,CACH,CAAC,EACA,MAAM,IAAM,CACX,KAAK,qBAAqB,CAC5B,CAAC,CACL,CACF,EAEaO,EAAe,IAAIf,GCjGhC,IAAMgB,GAAN,KAAqB,CAGZ,aAAc,CACnB,KAAK,KAAO,KAAK,YAAY,CAC/B,CAEU,aAAoC,CAC5C,OAAI,OAAO,OAAW,IACb,WAIP,OAAO,aACP,OAAO,YAAY,kBACnB,OAAO,YAAY,iBAAiB,YAAY,EAAE,OAAS,EAEnD,OAAO,YAAY,iBAAiB,YAAY,EAAE,CAAC,EAAkC,KAGxF,UACT,CAEO,KAA4B,CACjC,OAAO,KAAK,IACd,CAEO,eAAyB,CAC9B,OAAO,KAAK,OAAS,cACvB,CAEO,UAAoB,CACzB,OAAO,KAAK,OAAS,QACvB,CACF,EAEaC,EAAiB,IAAID,GC3B3B,IAAME,EAAN,KAAmB,CACxB,OAAc,QAAe,CAC3B,KAAK,6BAA6B,EAEhB,CAAC,KAAK,kBAAmB,KAAK,eAAgB,KAAK,aAAa,EAExE,KAAMC,GAAYA,EAAQ,KAAK,IAAI,EAAE,CAAC,CAClD,CAEA,OAAiB,8BAAqC,CAChDC,EAAe,SAAS,GAC1BC,EAAQ,YAAYA,EAAQ,eAAe,CAE/C,CAEA,OAAiB,mBAA6B,CAC5C,GAAI,CAACD,EAAe,cAAc,GAAK,CAACC,EAAQ,YAAY,EAC1D,MAAO,GAGT,IAAMC,EAAgBD,EAAQ,iBAAiB,EAE/C,OAAAA,EACG,QAAQ,EACR,KAAME,GAAS,CACdC,EAAY,IAAID,EAAM,CAAE,eAAgB,GAAM,cAAe,EAAK,CAAC,EAAE,KAAK,IAAM,CAC9EE,EAAO,QAAQH,CAAa,EAC5BI,EAAkBF,EAAY,IAAI,CAAC,CACrC,CAAC,CACH,CAAC,EACA,MAAM,IAAM,CACXG,EAAa,qBAAqB,CACpC,CAAC,EAEI,EACT,CAKA,OAAiB,gBAA0B,CACzC,GAAI,CAACC,EAAe,OAAOA,EAAe,gBAAgB,EACxD,MAAO,GAGT,IAAMC,EAA+BD,EAAe,IAAIA,EAAe,gBAAgB,GAAK,CAAC,EAE7F,OAAAA,EAAe,OAAOA,EAAe,gBAAgB,EAEjD,OAAO,OAAW,KACpBJ,EAAY,WAAW,OAAO,SAAS,IAAI,EAG7CH,EACG,QAAQG,EAAY,IAAI,CAAC,EACzB,KAAK,IAAM,CACV,IAAMM,EAAkBT,EAAQ,SAAkCA,EAAQ,gBAAiB,CAAC,CAAC,EACvFC,EAAgBD,EAAQ,iBAAiB,EAC/CG,EAAY,SAASM,CAAe,EAEpCN,EACG,IAAIA,EAAY,IAAI,EAAG,CACtB,eAAgBK,EAAc,eAC9B,cAAe,EACjB,CAAC,EACA,KAAK,IAAM,CACNA,EAAc,gBAChBJ,EAAO,QAAQH,CAAa,EAG9BI,EAAkBF,EAAY,IAAI,CAAC,CACrC,CAAC,CACL,CAAC,EACA,MAAM,IAAM,CACXG,EAAa,qBAAqB,CACpC,CAAC,EAEI,EACT,CAEA,OAAiB,eAAsB,CACjC,OAAO,OAAW,KACpBH,EAAY,WAAW,OAAO,SAAS,IAAI,EAG7CA,EAAY,IAAIA,EAAY,IAAI,EAAG,CAAE,eAAgB,GAAM,cAAe,EAAK,CAAC,EAAE,KAAK,IAAM,CACvFJ,EAAe,SAAS,GAC1BK,EAAO,QAAQJ,EAAQ,iBAAiB,CAAC,EAE3CK,EAAkBF,EAAY,IAAI,CAAC,CACrC,CAAC,CACH,CACF,ECnGO,IAAMO,EAAN,KAAW,CAQhB,YAAYC,EAAkBC,EAAkBC,EAAsB,CAPtE,KAAU,GAAoB,KAC9B,KAAU,SAAW,GACrB,KAAU,UAAY,GAGtB,KAAU,QAAU,EAGlB,KAAK,UAAYA,EAAQ,WAAa,GAEtC,KAAK,GAAKD,EACV,KAAK,SAAWD,GAEZE,EAAQ,WAAa,KACvB,KAAK,MAAM,CAEf,CAEO,MAAO,CAER,KAAK,IAEP,cAAc,KAAK,EAAE,CAEzB,CAEO,OAAQ,CACT,OAAO,OAAW,MAItB,KAAK,KAAK,EAEV,KAAK,GAAK,OAAO,YAAY,IAAM,EAC7B,CAAC,KAAK,UAAY,KAAK,QAAU,KAAO,IAC1C,KAAK,GAAG,EAGN,KAAK,UACP,KAAK,SAET,EAAG,KAAK,QAAQ,EAClB,CAEO,eAAeC,EAAiB,CACrC,KAAK,SAAW,KAAK,UAAY,GAAQA,EAErC,KAAK,WACP,KAAK,QAAU,EAEnB,CACF,ECnDA,IAAMC,GAAN,KAAY,CAGV,aAAc,CAFd,KAAU,MAAgB,CAAC,EAGzB,KAAK,wBAAwB,CAC/B,CAEO,IACLC,EACAC,EACAC,EAIA,CACA,IAAMC,EAAO,IAAIC,EAAKJ,EAAUC,EAAIC,CAAO,EAE3C,YAAK,MAAM,KAAKC,CAAI,EAEb,CACL,KAAM,IAAMA,EAAK,KAAK,EACtB,MAAO,IAAMA,EAAK,MAAM,CAC1B,CACF,CAEO,OAAQ,CACb,KAAK,MAAM,QAASA,GAASA,EAAK,KAAK,CAAC,EAExC,KAAK,MAAQ,CAAC,CAChB,CAEU,yBAA0B,CAC9B,OAAO,SAAa,KAIxB,SAAS,iBACP,mBACA,IAAM,CACJ,KAAK,MAAM,QAASA,GAASA,EAAK,eAAe,SAAS,MAAM,CAAC,CACnE,EACA,EACF,CACF,CACF,EAEaE,GAAQ,IAAIN,GCjDlB,IAAMO,GAAkB,CAC7BC,EACAC,EACAC,IAGY,CACZ,GAAIF,IAASC,EACX,MAAO,GAGT,QAAWE,KAAOH,EAChB,GAAI,CAAAE,EAAY,SAASC,CAAG,GAIxBH,EAAKG,CAAG,IAAMF,EAAKE,CAAG,GAItB,CAACC,GAAcJ,EAAKG,CAAG,EAAGF,EAAKE,CAAG,CAAC,EACrC,MAAO,GAIX,MAAO,EACT,EAEMC,GAAgB,CAACC,EAAaC,IAAyB,CAC3D,OAAQ,OAAOD,EAAQ,CACrB,IAAK,SACH,OAAON,GAAgBM,EAAQC,EAAQ,CAAC,CAAC,EAC3C,IAAK,WACH,OAAOD,EAAO,SAAS,IAAMC,EAAO,SAAS,EAC/C,QACE,OAAOD,IAAWC,CACtB,CACF,ECrCA,IAAMC,GAAgB,CACpB,GAAI,EACJ,EAAG,IACH,EAAG,IACH,EAAG,KACH,EAAG,KACL,EAEaC,GAAYC,GAAkC,CACzD,GAAI,OAAOA,GAAS,SAClB,OAAOA,EAGT,OAAW,CAACC,EAAMC,CAAU,IAAK,OAAO,QAAQJ,EAAa,EAC3D,GAAIE,EAAK,SAASC,CAAI,EACpB,OAAO,WAAWD,CAAI,EAAIE,EAI9B,OAAO,SAASF,CAAI,CACtB,ECPA,IAAMG,GAAN,KAAyB,CAAzB,cACE,KAAU,OAA+B,CAAC,EAC1C,KAAU,iBAAuC,CAAC,EAClD,KAAU,cAAwC,CAAC,EACnD,KAAU,aAA8B,KAEjC,IAAIC,EAAqBC,EAAiD,CAAE,SAAAC,CAAS,EAAoB,CAG9G,GAFiB,KAAK,aAAaF,CAAM,EAGvC,OAAO,QAAQ,QAAQ,EAGzB,IAAMG,EAAW,KAAK,WAAWH,CAAM,EAEvC,GAAI,CAACA,EAAO,OAASG,GAAYA,EAAS,eAAiB,KAAK,IAAI,EAClE,OAAO,QAAQ,QAAQ,EAGzB,GAAM,CAACC,EAAOC,CAAO,EAAI,KAAK,mBAAmBH,CAAQ,EAEnDI,EAAU,IAAI,QAAkB,CAACC,EAASC,IAAW,CACzDP,EAAS,CACP,GAAGD,EACH,SAAU,IAAM,CACd,KAAK,OAAOA,CAAM,EAClBA,EAAO,SAAS,EAChBQ,EAAO,CACT,EACA,QAAUC,GAAU,CAClB,KAAK,OAAOT,CAAM,EAClBA,EAAO,QAAQS,CAAK,EACpBD,EAAO,CACT,EACA,cAAcE,EAAa,CACzBV,EAAO,cAAcU,CAAW,CAClC,EACA,aAAaC,EAAUC,EAAO,CAC5BZ,EAAO,aAAaW,EAAUC,CAAK,CACrC,EACA,mBAAmBD,EAAU,CAC3BJ,EAAQI,CAAQ,CAClB,CACF,CAAC,CACH,CAAC,EAAE,KAAMA,IACP,KAAK,OAAOX,CAAM,EAElB,KAAK,OAAO,KAAK,CACf,OAAQ,CAAE,GAAGA,CAAO,EACpB,eAAgB,KAAK,IAAI,EAAII,EAC7B,SAAUE,EACV,UAAWJ,IAAa,EACxB,UAAW,KAAK,IAAI,EACpB,SAAU,EACZ,CAAC,EAED,KAAK,mBAAmBF,EAAQK,CAAO,EAEvC,KAAK,iBAAmB,KAAK,iBAAiB,OAAQQ,GAC7C,CAAC,KAAK,eAAeA,EAAY,OAAQb,CAAM,CACvD,EAEDW,EAAS,eAAe,EAEjBA,EACR,EAED,YAAK,iBAAiB,KAAK,CACzB,OAAQ,CAAE,GAAGX,CAAO,EACpB,SAAUM,EACV,eAAgB,KAChB,SAAU,EACZ,CAAC,EAEMA,CACT,CAEO,WAAkB,CACvB,KAAK,OAAS,CAAC,EACf,KAAK,cAAc,QAASQ,GAAiB,CAC3C,aAAaA,EAAa,KAAK,CACjC,CAAC,EACD,KAAK,cAAgB,CAAC,CACxB,CAEO,OAAOd,EAA2B,CACvC,KAAK,OAAS,KAAK,OAAO,OAAQe,GACzB,CAAC,KAAK,eAAeA,EAAW,OAAQf,CAAM,CACtD,EAED,KAAK,WAAWA,CAAM,CACxB,CAEU,mBAAmBE,EAAyD,CACpF,GAAM,CAACE,EAAOC,CAAO,EAAI,KAAK,0BAA0BH,CAAQ,EAEhE,MAAO,CAACc,GAASZ,CAAK,EAAGY,GAASX,CAAO,CAAC,CAC5C,CAEU,0BAA0BH,EAAyE,CAC3G,GAAI,CAAC,MAAM,QAAQA,CAAQ,EACzB,MAAO,CAACA,EAAUA,CAAQ,EAG5B,OAAQA,EAAS,OAAQ,CACvB,IAAK,GACH,MAAO,CAAC,EAAG,CAAC,EACd,IAAK,GACH,MAAO,CAACA,EAAS,CAAC,EAAGA,EAAS,CAAC,CAAC,EAClC,QACE,MAAO,CAACA,EAAS,CAAC,EAAGA,EAAS,CAAC,CAAC,CACpC,CACF,CAEU,WAAWF,EAAqB,CACxC,IAAMiB,EAAQ,KAAK,cAAc,KAAMH,GAC9B,KAAK,eAAeA,EAAa,OAAQd,CAAM,CACvD,EAEGiB,IACF,aAAaA,EAAM,KAAK,EACxB,KAAK,cAAgB,KAAK,cAAc,OAAQH,GAAiBA,IAAiBG,CAAK,EAE3F,CAEU,mBAAmBjB,EAAqBkB,EAAmB,CACnE,GAAI,SAAO,OAAW,OAItB,KAAK,WAAWlB,CAAM,EAElBkB,EAAY,GAAG,CACjB,IAAMD,EAAQ,OAAO,WAAW,IAAM,KAAK,OAAOjB,CAAM,EAAGkB,CAAS,EAEpE,KAAK,cAAc,KAAK,CACtB,OAAAlB,EACA,MAAAiB,CACF,CAAC,CACH,CACF,CAEO,IAAIjB,EAAmE,CAC5E,OAAO,KAAK,WAAWA,CAAM,GAAK,KAAK,aAAaA,CAAM,CAC5D,CAEO,IAAIe,EAAmDf,EAAqB,CACjF,IAAMmB,EAAK,GAAGnB,EAAO,IAAI,QAAQ,IAAI,KAAK,IAAI,CAAC,IAAI,KAAK,OAAO,EAAE,SAAS,EAAE,EAAE,UAAU,CAAC,CAAC,GAE1F,YAAK,aAAemB,EAEbJ,EAAW,SAAS,KAAMJ,GAAa,CAC5C,GAAI,KAAK,eAAiBQ,EAM1B,OAAAR,EAAS,YAAY,CAAE,GAAGX,EAAQ,aAAc,IAAM,CAAC,CAAE,CAAC,EAI1D,KAAK,qBAAqBA,CAAM,EAEzBW,EAAS,OAAO,CACzB,CAAC,CACH,CAEU,qBAAqBX,EAAqB,CAClD,KAAK,OAAS,KAAK,OAAO,OAAQe,GAC3B,KAAK,eAAeA,EAAW,OAAQf,CAAM,EAI3C,CAACe,EAAW,UAHV,EAIV,CACH,CAEO,WAAWf,EAAgD,CAChE,OACE,KAAK,OAAO,KAAMe,GACT,KAAK,eAAeA,EAAW,OAAQf,CAAM,CACrD,GAAK,IAEV,CAEO,aAAaA,EAA8C,CAChE,OACE,KAAK,iBAAiB,KAAMe,GACnB,KAAK,eAAeA,EAAW,OAAQf,CAAM,CACrD,GAAK,IAEV,CAEU,eAAeoB,EAAsBC,EAA+B,CAC5E,OAAOC,GAA6BF,EAASC,EAAS,CACpD,eACA,UACA,WACA,WACA,UACA,aACA,WACA,WACA,YACA,UACA,eACA,gBACA,gBACA,OACF,CAAC,CACH,CACF,EAEaE,EAAqB,IAAIxB,GCnOtC,OAAS,WAAWyB,OAAqD,QCKlE,IAAMC,EAAN,MAAMC,CAAc,CAQzB,YAAYC,EAA6B,CAPzC,KAAU,UAGJ,CAAC,EAKL,GAAI,CAACA,EAAO,SACV,KAAK,OAASA,MACT,CACL,IAAMC,EAA4D,CAChE,SAAU,KAAK,aAAaD,EAAQ,UAAU,EAC9C,QAAS,KAAK,aAAaA,EAAQ,SAAS,EAC5C,WAAY,KAAK,aAAaA,EAAQ,YAAY,EAClD,SAAU,KAAK,aAAaA,EAAQ,UAAU,EAC9C,SAAU,KAAK,aAAaA,EAAQ,UAAU,EAC9C,UAAW,KAAK,aAAaA,EAAQ,WAAW,EAChD,QAAS,KAAK,aAAaA,EAAQ,SAAS,EAC5C,cAAe,KAAK,aAAaA,EAAQ,eAAe,EACxD,aAAc,KAAK,aAAaA,EAAQ,cAAc,EACtD,cAAe,KAAK,aAAaA,EAAQ,eAAe,CAC1D,EAEA,KAAK,OAAS,CACZ,GAAGA,EACH,GAAGC,EACH,mBAAoBD,EAAO,qBAAuB,IAAM,CAAC,EAC3D,CACF,CAEF,CAEA,OAAc,OAAOA,EAAoC,CACvD,OAAO,IAAID,EAAcC,CAAM,CACjC,CAEO,MAAO,CACZ,OAAO,KAAK,OAAO,SAAW,MAAQ,KAAO,KAAK,OAAO,IAC3D,CAEO,aAAc,CACnB,OAAO,KAAK,OAAO,SAAW,MAAQ,KAAK,OAAO,KAAO,CAAC,CAC5D,CAEO,WAAY,CACjB,OAAO,KAAK,OAAO,KAAK,OAAS,GAAK,KAAK,OAAO,OAAO,OAAS,GAAK,KAAK,OAAO,MAAM,OAAS,CACpG,CAEO,cAAcE,EAAkB,CACrC,KAAK,OAAO,cAAc,CACxB,OAAQA,CACV,CAAC,CACH,CAEO,gBAAiB,CACtB,KAAK,OAAO,UAAY,GACxB,KAAK,OAAO,UAAY,GACxB,KAAK,OAAO,YAAc,EAC5B,CAEO,gBAAgB,CAAE,UAAAC,EAAY,GAAM,YAAAC,EAAc,EAAM,EAAG,CAChE,KAAK,OAAO,SAAS,EAErB,KAAK,OAAO,UAAY,GACxB,KAAK,OAAO,UAAYD,EACxB,KAAK,OAAO,YAAcC,CAC5B,CAEO,mBAAoB,CACzB,OAAO,KAAK,OAAO,WAAa,KAAK,OAAO,WAC9C,CAEO,UAAW,CAChB,KAAK,OAAO,SAAS,KAAK,MAAM,CAClC,CAEO,SAAU,CACf,KAAK,OAAO,QAAQ,KAAK,MAAM,CACjC,CAEO,eAAgB,CACrB,KAAK,OAAO,cAAc,KAAK,MAAM,CACvC,CAEO,mBAAmBC,EAAoB,CACxC,KAAK,OAAO,oBACd,KAAK,OAAO,mBAAmBA,CAAQ,CAE3C,CAEO,KAAM,CACX,OAAO,KAAK,MACd,CAEO,SAAyC,CAC9C,IAAMC,EAAyC,CAC7C,GAAG,KAAK,OAAO,OACjB,EAEI,KAAK,UAAU,IACjBA,EAAQ,6BAA6B,EAAIC,EAAY,IAAI,EAAE,WAG7D,IAAMC,EAAO,KAAK,OAAO,KAAK,OAAO,KAAK,OAAO,KAAK,EAEtD,OAAIA,EAAK,OAAS,IAChBF,EAAQ,wBAAwB,EAAIE,EAAK,KAAK,GAAG,GAG/C,KAAK,OAAO,OAAO,OAAS,IAC9BF,EAAQ,0BAA0B,EAAI,KAAK,OAAO,OAAO,KAAK,GAAG,GAG/D,KAAK,OAAO,MAAM,OAAS,IAC7BA,EAAQ,iBAAiB,EAAI,KAAK,OAAO,MAAM,KAAK,GAAG,GAGrD,KAAK,OAAO,UAAY,KAAK,OAAO,SAAS,OAAS,IACxDA,EAAQ,qBAAqB,EAAI,KAAK,OAAO,UAGxCA,CACT,CAEO,mBAAmBC,EAAY,CACpC,KAAK,OAAO,eAAiB,KAAK,sBAAsB,KAAK,OAAO,eAAgBA,CAAI,EACxF,KAAK,OAAO,cAAgB,KAAK,sBAAsB,KAAK,OAAO,cAAeA,CAAI,CACxF,CAEO,cAAe,CACpB,KAAK,UAAU,QAAQ,CAAC,CAAE,KAAAE,EAAM,KAAAC,CAAK,IAAM,CAEzC,KAAK,OAAOD,CAAI,EAAE,GAAGC,CAAI,CAC3B,CAAC,CACH,CAEO,MAAMC,EAA+B,CAC1C,KAAK,OAAS,CACZ,GAAG,KAAK,OACR,GAAGA,CACL,CACF,CAEU,aAAaX,EAAqBS,EAA4B,CAEtE,MAAO,IAAIC,IAAS,CAClB,KAAK,eAAeD,EAAMC,CAAI,EAE9BV,EAAOS,CAAI,EAAE,GAAGC,CAAI,CACtB,CACF,CAEU,eAAeD,EAA4BC,EAAa,CAChE,KAAK,UAAU,KAAK,CAAE,KAAAD,EAAM,KAAAC,CAAK,CAAC,CACpC,CAEU,sBAAsBE,EAA4BL,EAAqB,CAC/E,OAAI,OAAOK,GAAU,WACZA,EAAML,CAAI,EAGfK,IAAU,SACL,OAAO,KAAKL,EAAK,MAAM,QAAU,CAAC,CAAC,EAAE,OAAS,EAGhDK,CACT,CACF,EC9KA,IAAOC,GAAQ,CACb,MAAO,KACP,SAAU,KAEV,KAAKC,EAA8C,CAC7C,OAAOA,GAAS,WAClBA,EAAO,8GAA8G,KAAK,UACxHA,CACF,CAAC,IAGH,IAAMC,EAAO,SAAS,cAAc,MAAM,EAC1CA,EAAK,UAAYD,EACjBC,EAAK,iBAAiB,GAAG,EAAE,QAASC,GAAMA,EAAE,aAAa,SAAU,MAAM,CAAC,EAE1E,KAAK,MAAQ,SAAS,cAAc,KAAK,EACzC,KAAK,MAAM,MAAM,SAAW,QAC5B,KAAK,MAAM,MAAM,MAAQ,QACzB,KAAK,MAAM,MAAM,OAAS,QAC1B,KAAK,MAAM,MAAM,QAAU,OAC3B,KAAK,MAAM,MAAM,UAAY,aAC7B,KAAK,MAAM,MAAM,gBAAkB,oBACnC,KAAK,MAAM,MAAM,OAAS,IAC1B,KAAK,MAAM,iBAAiB,QAAS,IAAM,KAAK,KAAK,CAAC,EAEtD,IAAMC,EAAS,SAAS,cAAc,QAAQ,EAS9C,GARAA,EAAO,MAAM,gBAAkB,QAC/BA,EAAO,MAAM,aAAe,MAC5BA,EAAO,MAAM,MAAQ,OACrBA,EAAO,MAAM,OAAS,OACtB,KAAK,MAAM,YAAYA,CAAM,EAE7B,SAAS,KAAK,QAAQ,KAAK,KAAK,EAChC,SAAS,KAAK,MAAM,SAAW,SAC3B,CAACA,EAAO,cACV,MAAM,IAAI,MAAM,uBAAuB,EAEzCA,EAAO,cAAc,SAAS,KAAK,EACnCA,EAAO,cAAc,SAAS,MAAMF,EAAK,SAAS,EAClDE,EAAO,cAAc,SAAS,MAAM,EAEpC,KAAK,SAAW,KAAK,aAAa,KAAK,IAAI,EAC3C,SAAS,iBAAiB,UAAW,KAAK,QAAQ,CACpD,EAEA,MAAa,CACX,KAAK,MAAM,UAAY,GACvB,KAAK,MAAQ,KACb,SAAS,KAAK,MAAM,SAAW,UAC/B,SAAS,oBAAoB,UAAW,KAAK,QAAQ,CACvD,EAEA,aAAaC,EAA4B,CACnCA,EAAM,UAAY,IACpB,KAAK,KAAK,CAEd,CACF,EC9CA,IAAMC,GAAQ,IAAIC,EAELC,EAAN,MAAMC,CAAS,CACpB,YACYC,EACAC,EACAC,EACV,CAHU,mBAAAF,EACA,cAAAC,EACA,qBAAAC,CACT,CAEH,OAAc,OAAOC,EAAuBF,EAAyBC,EAAiC,CACpG,OAAO,IAAIH,EAASI,EAAQF,EAAUC,CAAe,CACvD,CAEA,MAAa,gBAAiB,CACxBE,EAAqB,KAAK,cAAc,IAAI,EAAE,IAAK,OAAO,QAAQ,GACpE,KAAK,OAAO,CAEhB,CAEA,MAAa,QAAS,CACpB,OAAOR,GAAM,IAAI,IAAM,KAAK,QAAQ,CAAC,CACvC,CAEA,MAAa,SAAU,CACrB,GAAI,KAAK,cAAc,IAAI,EAAE,SAC3B,YAAK,cAAc,IAAI,EAAE,SAAW,GAEpC,KAAK,cAAc,IAAI,EAAE,aAAa,KAAK,SAAU,KAAK,cAAc,IAAI,CAAC,EAC7ES,GAAoB,KAAK,SAAU,KAAK,cAAc,IAAI,CAAC,EAEpD,QAAQ,QAAQ,EAKzB,GAFA,KAAK,cAAc,aAAa,EAE5B,CAAC,KAAK,kBAAkB,EAC1B,OAAO,KAAK,yBAAyB,EAGvC,MAAMC,EAAQ,aAAa,EAE3BA,EAAQ,YAAc,KAAK,cAAc,IAAI,EAAE,YAE/C,MAAM,KAAK,QAAQ,EAEnB,IAAMC,EAASC,EAAY,IAAI,EAAE,MAAM,QAAU,CAAC,EAElD,GAAI,OAAO,KAAKD,CAAM,EAAE,OAAS,EAAG,CAClC,IAAME,EAAe,KAAK,gBAAgBF,CAAM,EAEhD,OAAAG,GAAeD,CAAY,EAEpB,KAAK,cAAc,IAAI,EAAE,QAAQA,CAAY,CACtD,CAEAE,GAAiBH,EAAY,IAAI,CAAC,EAElC,MAAM,KAAK,cAAc,IAAI,EAAE,UAAUA,EAAY,IAAI,CAAC,EAE1DF,EAAQ,YAAc,EACxB,CAEO,YAAYH,EAAqB,CACtC,KAAK,cAAc,MAAMA,CAAM,CACjC,CAEA,MAAgB,0BAA2B,CACzC,GAAI,KAAK,gBAAgB,EAAG,CAC1B,IAAMS,EAAcC,EAAU,KAAK,UAAU,oBAAoB,CAAC,EAElE,OAAAC,GAAiB,KAAK,cAAc,IAAI,EAAE,IAAKF,CAAW,EAEnD,KAAK,cAAcA,CAAW,CACvC,CAEA,IAAMX,EAAW,CACf,GAAG,KAAK,SACR,KAAM,KAAK,oBAAoB,KAAK,SAAS,IAAI,CACnD,EAEA,GAAIc,GAAiBd,CAAQ,EAC3B,OAAOe,GAAM,KAAKf,EAAS,IAAI,CAEnC,CAEU,mBAA6B,CACrC,OAAO,KAAK,UAAU,WAAW,CACnC,CAEU,UAAUgB,EAAyB,CAC3C,OAAO,KAAK,SAAS,SAAWA,CAClC,CAEU,UAAUC,EAAwB,CAC1C,OAAO,KAAK,SAAS,QAAQA,CAAM,CACrC,CAEU,UAAUA,EAAyB,CAC3C,OAAO,KAAK,UAAUA,CAAM,IAAM,MACpC,CAEU,iBAA2B,CACnC,OAAO,KAAK,UAAU,GAAG,GAAK,KAAK,UAAU,oBAAoB,CACnE,CAKU,cAAcC,EAA0B,CAChD,GAAI,CAKF,GAJAC,EAAe,IAAIA,EAAe,iBAAkB,CAClD,eAAgB,KAAK,cAAc,IAAI,EAAE,iBAAmB,EAC9D,CAAC,EAEG,OAAO,OAAW,IACpB,OAGEhB,EAAqB,OAAO,SAAUe,CAAG,EAC3C,OAAO,SAAS,OAAO,EAEvB,OAAO,SAAS,KAAOA,EAAI,IAE/B,MAAgB,CACd,MAAO,EACT,CACF,CAEA,MAAgB,SAAyB,CACvC,IAAME,EAAe,KAAK,oBAAoB,KAAK,SAAS,IAAI,EAEhE,OAAK,KAAK,cAAcA,CAAY,GAIpC,KAAK,WAAWA,CAAY,EAC5B,MAAM,KAAK,mBAAmBA,CAAY,EAE1C,KAAK,cAAc,mBAAmBA,CAAY,EAElDA,EAAa,IAAMf,EAAQ,YAAcE,EAAY,IAAI,EAAE,IAAM,KAAK,QAAQa,CAAY,EAEnFb,EAAY,IAAIa,EAAc,CACnC,QAAS,KAAK,cAAc,IAAI,EAAE,QAClC,eAAgB,KAAK,cAAc,IAAI,EAAE,eACzC,cAAe,KAAK,cAAc,IAAI,EAAE,aAC1C,CAAC,GAdQ,QAAQ,QAAQ,CAe3B,CAEU,oBAAoBpB,EAAoB,CAChD,GAAI,OAAOA,GAAa,SACtB,OAAOA,EAGT,GAAI,CACF,OAAO,KAAK,MAAMA,CAAQ,CAC5B,MAAgB,CACd,OAAOA,CACT,CACF,CAEU,cAAcoB,EAA6B,CAMnD,GALI,CAAC,KAAK,cAAc,IAAI,EAAE,OAK1B,KAAK,gBAAgB,YAAcA,EAAa,UAGlD,MAAO,GAKT,GAAI,KAAK,gBAAgB,YAAcb,EAAY,IAAI,EAAE,UACvD,MAAO,GAGT,IAAMc,EAAiBT,EAAU,KAAK,gBAAgB,GAAG,EACnDU,EAAiBV,EAAUL,EAAY,IAAI,EAAE,GAAG,EAItD,OAAOc,EAAe,SAAWC,EAAe,QAAUD,EAAe,WAAaC,EAAe,QACvG,CAEU,QAAQF,EAAoB,CACpC,IAAMG,EAAcX,EAAUQ,EAAa,GAAG,EAE9C,OAAAP,GAAiB,KAAK,cAAc,IAAI,EAAE,IAAKU,CAAW,EAEnDA,EAAY,SAAWA,EAAY,OAASA,EAAY,IACjE,CAEU,WAAWH,EAA0B,CAC7C,GAAI,CAAC,KAAK,cAAc,UAAU,GAAKA,EAAa,YAAcb,EAAY,IAAI,EAAE,UAClF,OAGF,IAAMiB,EAAeJ,EAAa,YAAc,CAAC,EAC3CK,EAAmBL,EAAa,gBAAkB,CAAC,EAEzDI,EAAa,QAASE,GAAS,CAC7B,IAAMC,EAAeP,EAAa,MAAMM,CAAI,EAExC,MAAM,QAAQC,CAAY,EAC5BP,EAAa,MAAMM,CAAI,EAAI,CAAC,GAAKnB,EAAY,IAAI,EAAE,MAAMmB,CAAI,GAAK,CAAC,EAAc,GAAGC,CAAY,EACvF,OAAOA,GAAiB,UAAYA,IAAiB,OAC9DP,EAAa,MAAMM,CAAI,EAAI,CACzB,GAAKnB,EAAY,IAAI,EAAE,MAAMmB,CAAI,GAAK,CAAC,EACvC,GAAGC,CACL,EAEJ,CAAC,EAEDF,EAAiB,QAASC,GAAS,CACjC,IAAMC,EAAeP,EAAa,MAAMM,CAAI,EACtCE,EAAcrB,EAAY,IAAI,EAAE,MAAMmB,CAAI,EAG1CG,EAAY,CAACC,EAAaC,IAC1B,MAAM,QAAQA,CAAM,EAEf,CAAC,GAAI,MAAM,QAAQD,CAAM,EAAIA,EAAS,CAAC,EAAI,GAAGC,CAAM,EAGzD,OAAOA,GAAW,UAAYA,IAAW,KAEpC,OAAO,KAAKA,CAAM,EAAE,OACzB,CAACC,EAAKC,KACJD,EAAIC,CAAG,EAAIJ,EAAUC,EAASA,EAAOG,CAAG,EAAI,OAAWF,EAAOE,CAAG,CAAC,EAC3DD,GAET,CAAE,GAAGF,CAAO,CACd,EAIKC,EAITX,EAAa,MAAMM,CAAI,EAAIG,EAAUD,EAAaD,CAAY,CAChE,CAAC,EAEDP,EAAa,MAAQ,CAAE,GAAGb,EAAY,IAAI,EAAE,MAAO,GAAGa,EAAa,KAAM,CAC3E,CAEA,MAAgB,mBAAmBA,EAAmC,CACpE,IAAMc,EAAkB,MAAM7B,EAAQ,SAAkCA,EAAQ,gBAAiB,CAAC,CAAC,EAGjG,KAAK,cAAc,IAAI,EAAE,eACzB6B,GACAd,EAAa,YAAcb,EAAY,IAAI,EAAE,YAE7Ca,EAAa,gBAAkBc,EAEnC,CAEU,gBAAgB5B,EAAmC,CAC3D,OAAK,KAAK,cAAc,IAAI,EAAE,SAIvBA,EAAO,KAAK,cAAc,IAAI,EAAE,UAAY,EAAE,GAAK,CAAC,EAHlDA,CAIX,CACF,EH/QO,IAAM6B,EAAN,MAAMC,CAAQ,CAMnB,YACEC,EACUC,EACV,CADU,UAAAA,EAJZ,KAAU,mBAAqB,GAM7B,KAAK,cAAgBC,EAAc,OAAOF,CAAM,EAChD,KAAK,YAAc,IAAI,eACzB,CAEA,OAAc,OAAOA,EAAqBC,EAAqB,CAC7D,OAAO,IAAIF,EAAQC,EAAQC,CAAI,CACjC,CAEA,MAAa,MAAO,CAClB,KAAK,cAAc,cAAc,IAAM,KAAK,OAAO,CAAE,UAAW,EAAK,CAAC,CAAC,EAEvEE,GAAe,KAAK,cAAc,IAAI,CAAC,EACvC,KAAK,cAAc,QAAQ,EAEvB,KAAK,cAAc,IAAI,EAAE,WAC3B,KAAK,cAAc,cAAc,EACjCC,GAAqB,KAAK,cAAc,IAAI,CAAC,GAM/C,IAAMC,EAAqB,KAAK,cAAc,IAAI,EAAE,SAEpD,OAAOC,GAAM,CACX,OAAQ,KAAK,cAAc,IAAI,EAAE,OACjC,IAAKC,EAAe,KAAK,cAAc,IAAI,EAAE,GAAG,EAAE,KAClD,KAAM,KAAK,cAAc,KAAK,EAC9B,OAAQ,KAAK,cAAc,YAAY,EACvC,OAAQ,KAAK,YAAY,OACzB,QAAS,KAAK,WAAW,EACzB,iBAAkB,KAAK,WAAW,KAAK,IAAI,EAG3C,aAAc,MAChB,CAAC,EACE,KAAMC,IACL,KAAK,SAAWC,EAAS,OAAO,KAAK,cAAeD,EAAU,KAAK,IAAI,EAEhE,KAAK,SAAS,OAAO,EAC7B,EACA,MAAOE,GACFA,GAAO,UACT,KAAK,SAAWD,EAAS,OAAO,KAAK,cAAeC,EAAM,SAAU,KAAK,IAAI,EAEtE,KAAK,SAAS,OAAO,GAGvB,QAAQ,OAAOA,CAAK,CAC5B,EACA,MAAOA,GAAU,CAChB,GAAI,CAAAJ,GAAM,SAASI,CAAK,GAIpBC,GAAmBD,CAAK,EAC1B,OAAO,QAAQ,OAAOA,CAAK,CAE/B,CAAC,EACA,QAAQ,IAAM,CACb,KAAK,OAAO,EAERL,GAAsB,KAAK,UAC7B,KAAK,cAAc,mBAAmB,KAAK,QAAQ,CAEvD,CAAC,CACL,CAEU,QAAe,CACnB,KAAK,cAAc,kBAAkB,IAIzC,KAAK,cAAc,eAAe,EAClC,KAAK,iBAAiB,EACxB,CAEU,kBAAyB,CAC7B,KAAK,qBAKT,KAAK,mBAAqB,GAE1BO,GAAgB,KAAK,cAAc,IAAI,CAAC,EACxC,KAAK,cAAc,SAAS,EAC9B,CAEO,OAAO,CAAE,UAAAC,EAAY,GAAO,YAAAC,EAAc,EAAM,EAAyD,CAC1G,KAAK,qBAKT,KAAK,YAAY,MAAM,EAEvB,KAAK,cAAc,gBAAgB,CAAE,UAAAD,EAAW,YAAAC,CAAY,CAAC,EAE7D,KAAK,iBAAiB,EACxB,CAEU,WAAWC,EAAoC,CACnD,KAAK,cAAc,KAAK,YAAa,WACvCA,EAAS,WAAaA,EAAS,SAAW,KAAK,MAAMA,EAAS,SAAW,GAAG,EAAI,EAChFC,GAAkBD,CAAQ,EAC1B,KAAK,cAAc,IAAI,EAAE,WAAWA,CAAQ,EAEhD,CAEU,YAA4C,CACpD,IAAME,EAAyC,CAC7C,GAAG,KAAK,cAAc,QAAQ,EAC9B,OAAQ,mCACR,mBAAoB,iBACpB,YAAa,EACf,EAEA,OAAIhB,EAAY,IAAI,EAAE,UACpBgB,EAAQ,mBAAmB,EAAIhB,EAAY,IAAI,EAAE,SAG5CgB,CACT,CACF,EI5IO,IAAMC,EAAN,KAAoB,CAOzB,YAAY,CAAE,cAAAC,EAAe,cAAAC,CAAc,EAAsD,CANjG,KAAU,SAAsB,CAAC,EAO/B,KAAK,cAAgBD,EACrB,KAAK,cAAgBC,CACvB,CAEO,KAAKC,EAAkB,CAC5B,KAAK,SAAS,KAAKA,CAAO,EAE1BA,EAAQ,KAAK,EAAE,KAAK,IAAM,CACxB,KAAK,SAAW,KAAK,SAAS,OAAQC,GAAMA,IAAMD,CAAO,CAC3D,CAAC,CACH,CAEO,mBAA0B,CAC/B,KAAK,OAAO,CAAE,YAAa,EAAK,EAAG,EAAK,CAC1C,CAEO,gBAAuB,CAC5B,KAAK,OAAO,CAAE,UAAW,EAAK,EAAG,EAAI,CACvC,CAEU,OAAO,CAAE,UAAAE,EAAY,GAAO,YAAAC,EAAc,EAAM,EAAI,CAAC,EAAGC,EAAsB,CACtF,GAAI,CAAC,KAAK,aAAaA,CAAK,EAC1B,OAGc,KAAK,SAAS,MAAM,GAE3B,OAAO,CAAE,YAAAD,EAAa,UAAAD,CAAU,CAAC,CAC5C,CAEU,aAAaE,EAAyB,CAC9C,OAAIA,EACK,GAGF,KAAK,eAAiB,KAAK,SAAS,QAAU,KAAK,aAC5D,CACF,ECbO,IAAMC,EAAN,KAAa,CAAb,cACL,KAAU,kBAAoB,IAAIC,EAAc,CAC9C,cAAe,EACf,cAAe,EACjB,CAAC,EAED,KAAU,mBAAqB,IAAIA,EAAc,CAC/C,cAAe,IACf,cAAe,EACjB,CAAC,EAEM,KAAK,CAAE,YAAAC,EAAa,iBAAAC,EAAkB,cAAAC,CAAc,EAA2B,CACpFC,EAAY,KAAK,CACf,YAAAH,EACA,iBAAAC,EACA,cAAAC,CACF,CAAC,EAEDE,EAAa,OAAO,EAEpBC,EAAa,KAAK,EAElBA,EAAa,GAAG,qBAAsB,IAAM,CACtC,OAAO,OAAW,KACpB,KAAK,MAAM,OAAO,SAAS,KAAM,CAAE,cAAe,GAAM,eAAgB,GAAM,QAAS,EAAK,CAAC,CAEjG,CAAC,EAEDA,EAAa,GAAG,oBAAqB,IAAM,CACzC,KAAK,kBAAkB,CACzB,CAAC,CACH,CAEO,IACLC,EACAC,EAAU,CAAC,EACXC,EAAiC,CAAC,EAC5B,CACN,OAAO,KAAK,MAAMF,EAAK,CAAE,GAAGE,EAAS,OAAQ,MAAO,KAAAD,CAAK,CAAC,CAC5D,CAEO,KACLD,EACAC,EAAU,CAAC,EACXC,EAAiC,CAAC,EAC5B,CACN,OAAO,KAAK,MAAMF,EAAK,CAAE,cAAe,GAAM,GAAGE,EAAS,OAAQ,OAAQ,KAAAD,CAAK,CAAC,CAClF,CAEO,IACLD,EACAC,EAAU,CAAC,EACXC,EAAiC,CAAC,EAC5B,CACN,OAAO,KAAK,MAAMF,EAAK,CAAE,cAAe,GAAM,GAAGE,EAAS,OAAQ,MAAO,KAAAD,CAAK,CAAC,CACjF,CAEO,MACLD,EACAC,EAAU,CAAC,EACXC,EAAiC,CAAC,EAC5B,CACN,OAAO,KAAK,MAAMF,EAAK,CAAE,cAAe,GAAM,GAAGE,EAAS,OAAQ,QAAS,KAAAD,CAAK,CAAC,CACnF,CAEO,OACLD,EACAE,EAA2C,CAAC,EACtC,CACN,OAAO,KAAK,MAAMF,EAAK,CAAE,cAAe,GAAM,GAAGE,EAAS,OAAQ,QAAS,CAAC,CAC9E,CAEO,OAAkDA,EAA4B,CAAC,EAAS,CAC7F,GAAI,SAAO,OAAW,KAItB,OAAO,KAAK,MAAM,OAAO,SAAS,KAAM,CACtC,GAAGA,EACH,eAAgB,GAChB,cAAe,GACf,MAAO,GACP,QAAS,CACP,GAAIA,EAAQ,SAAW,CAAC,EACxB,gBAAiB,UACnB,CACF,CAAC,CACH,CAEO,SAASD,EAAeE,EAAM,UAAiB,CACpDC,EAAQ,SAASH,EAAME,CAAG,CAC5B,CAEO,QAAQA,EAAM,UAAoB,CACvC,OAAOC,EAAQ,QAAQD,CAAG,CAC5B,CAEO,GACLE,EACAC,EACc,CACd,OAAI,OAAO,OAAW,IACb,IAAM,CAAC,EAGTP,EAAa,cAAcM,EAAMC,CAAQ,CAClD,CAEO,QAAe,CACpB,KAAK,kBAAkB,eAAe,CACxC,CAEO,WAAkB,CACvB,KAAK,mBAAmB,eAAe,EACvC,KAAK,kBAAkB,eAAe,CACxC,CAEO,KAAKC,EAAkBC,EAAgC,CAAC,EAAGN,EAAuB,CAAC,EAAG,CAC3F,OAAOO,GAAM,IAAIF,EAAU,IAAM,KAAK,OAAOC,CAAc,EAAG,CAC5D,UAAWN,EAAQ,WAAa,GAChC,UAAWA,EAAQ,WAAa,EAClC,CAAC,CACH,CAEO,MAAiDQ,EAAoBR,EAA2B,CAAC,EAAS,CAC/G,IAAMS,EAAsB,KAAK,gBAAgBD,EAAM,CACrD,GAAGR,EACH,aAAcA,EAAQ,cAAgB,CAACA,EAAQ,KACjD,CAAC,EAEKU,EAAS,KAAK,eAAeV,CAAO,EAG1C,GAAIU,EAAO,SAASD,CAAK,IAAM,IAAS,CAACE,EAAgBF,CAAK,EAC5D,OAGF,IAAMG,EAAgBH,EAAM,MAAQ,KAAK,mBAAqB,KAAK,kBAEnEG,EAAc,kBAAkB,EAE5B,CAACjB,EAAY,UAAU,GAAK,CAACc,EAAM,aAErCI,EAAO,KAAK,EAGd,IAAMC,EAA+C,CACnD,GAAGL,EACH,GAAGC,CACL,EAEMK,EAAaC,EAAmB,IAAIF,CAAa,EAEnDC,GACFE,EAAeF,EAAW,QAAQ,EAClCC,EAAmB,IAAID,EAAYD,CAAa,IAEhDG,EAAe,EAAI,EACnBL,EAAc,KAAKM,EAAQ,OAAOJ,EAAenB,EAAY,IAAI,CAAC,CAAC,EAEvE,CAEO,UAAUa,EAAoBR,EAAwB,CAAC,EAAiD,CAC7G,OAAOgB,EAAmB,WAAW,KAAK,kBAAkBR,EAAMR,CAAO,CAAC,CAC5E,CAEO,MAAMQ,EAAoBR,EAAwB,CAAC,EAAS,CACjEgB,EAAmB,OAAO,KAAK,kBAAkBR,EAAMR,CAAO,CAAC,CACjE,CAEO,UAAiB,CACtBgB,EAAmB,UAAU,CAC/B,CAEO,eAAeR,EAAoBR,EAAwB,CAAC,EAAiD,CAClH,OAAOgB,EAAmB,aAAa,KAAK,kBAAkBR,EAAMR,CAAO,CAAC,CAC9E,CAEO,SAASQ,EAAoBR,EAAwB,CAAC,EAAG,CAAE,SAAAmB,EAAW,GAAO,EAAoB,CACtG,GAAInB,EAAQ,SAAW,MACrB,MAAM,IAAI,MAAM,2CAA2C,EAG7D,IAAMS,EAAsB,KAAK,gBAAgBD,EAAM,CACrD,GAAGR,EACH,MAAO,GACP,aAAc,GACd,SAAU,EACZ,CAAC,EAEKoB,EAAWX,EAAM,IAAI,OAASA,EAAM,IAAI,SAAWA,EAAM,IAAI,OAC7DY,EAAa,OAAO,SAAS,OAAS,OAAO,SAAS,SAAW,OAAO,SAAS,OAEvF,GAAID,IAAaC,EAEf,OAGF,IAAMX,EAAS,KAAK,eAAeV,CAAO,EAG1C,GAAIU,EAAO,SAASD,CAAK,IAAM,IAAS,CAACE,EAAgBF,CAAK,EAC5D,OAGFa,EAAa,EAEb,KAAK,mBAAmB,kBAAkB,EAE1C,IAAMR,EAA+C,CACnD,GAAGL,EACH,GAAGC,CACL,EAGS,IAAI,QAASa,GAAY,CAC9B,IAAMC,EAAuB,IAAM,CAC7B7B,EAAY,IAAI,EAClB4B,EAAQ,EAER,WAAWC,EAAsB,EAAE,CAEvC,EAEAA,EAAqB,CACvB,CAAC,EAGsB,KAAK,IAAM,CAClCR,EAAmB,IACjBF,EACCW,GAAW,CACV,KAAK,mBAAmB,KAAKP,EAAQ,OAAOO,EAAQ9B,EAAY,IAAI,CAAC,CAAC,CACxE,EACA,CAAE,SAAAwB,CAAS,CACb,CACF,CAAC,CACH,CAEO,cAAqB,CAC1BjB,EAAQ,MAAM,CAChB,CAEO,gBAAgC,CACrC,OAAOA,EAAQ,QAAQ,CACzB,CAEO,QAAQuB,EAAsC,CACnD,KAAK,YAAYA,EAAQ,CAAE,QAAS,EAAK,CAAC,CAC5C,CAEO,KAAKA,EAAsC,CAChD,KAAK,YAAYA,CAAM,CACzB,CAEU,YAAYA,EAAgC,CAAE,QAAAC,EAAU,EAAM,EAA2B,CAAC,EAAS,CAC3G,IAAMC,EAAUhC,EAAY,IAAI,EAE1BiC,EAAQ,OAAOH,EAAO,OAAU,WAAaA,EAAO,MAAME,EAAQ,KAAK,EAAKF,EAAO,OAASE,EAAQ,MAE1GhC,EAAY,IACV,CACE,GAAGgC,EACH,GAAGF,EACH,MAAAG,CACF,EACA,CACE,QAAAF,EACA,eAAgBD,EAAO,eACvB,cAAeA,EAAO,aACxB,CACF,CACF,CAEU,kBAAkBjB,EAAoBR,EAAoC,CAClF,MAAO,CACL,GAAG,KAAK,gBAAgBQ,EAAM,CAC5B,GAAGR,EACH,MAAO,GACP,aAAc,GACd,SAAU,EACZ,CAAC,EACD,GAAG,KAAK,eAAeA,CAAO,CAChC,CACF,CAEU,gBACRQ,EACAR,EACA6B,EAAoD,CAAC,EACvC,CACd,IAAMC,EAAuB,CAC3B,OAAQ,MACR,KAAM,CAAC,EACP,QAAS,GACT,eAAgB,GAChB,cAAe,GACf,KAAM,CAAC,EACP,OAAQ,CAAC,EACT,QAAS,CAAC,EACV,SAAU,GACV,cAAe,GACf,uBAAwB,WACxB,MAAO,GACP,aAAc,GACd,MAAO,GACP,MAAO,CAAC,EACR,YAAa,GACb,SAAU,GACV,GAAG9B,CACL,EAEM,CAACF,EAAKiC,CAAK,EAAIC,GACnBxB,EACAsB,EAAc,KACdA,EAAc,OACdA,EAAc,cACdA,EAAc,sBAChB,EAEA,MAAO,CACL,UAAW,GACX,UAAW,GACX,YAAa,GACb,GAAGA,EACH,GAAGD,EACH,IAAA/B,EACA,KAAMiC,CACR,CACF,CAEU,eAAe/B,EAAuC,CAC9D,MAAO,CACL,cAAeA,EAAQ,gBAAkB,IAAM,CAAC,GAChD,SAAUA,EAAQ,WAAa,IAAM,CAAC,GACtC,QAASA,EAAQ,UAAY,IAAM,CAAC,GACpC,WAAYA,EAAQ,aAAe,IAAM,CAAC,GAC1C,SAAUA,EAAQ,WAAa,IAAM,CAAC,GACtC,SAAUA,EAAQ,WAAa,IAAM,CAAC,GACtC,UAAWA,EAAQ,YAAc,IAAM,CAAC,GACxC,QAASA,EAAQ,UAAY,IAAM,CAAC,GACpC,aAAcA,EAAQ,eAAiB,IAAM,CAAC,GAC9C,cAAeA,EAAQ,gBAAkB,IAAM,CAAC,EAClD,CACF,CAEU,mBAA0B,CAClC,IAAMiC,EAAWtC,EAAY,IAAI,GAAG,cAEhCsC,GACF,OAAO,QAAQA,CAAQ,EAAE,QAAQ,CAAC,CAACC,EAAGC,CAAK,IAAM,CAC/C,KAAK,OAAO,CAAE,KAAMA,CAAM,CAAC,CAC7B,CAAC,CAEL,CACF,ECnYA,IAAMC,GAAW,CACf,gBAAgBC,EAAwB,CACtC,IAAMC,EAAW,SAAS,cAAc,UAAU,EAClDA,EAAS,UAAYD,EACrB,IAAME,EAAOD,EAAS,QAAQ,WAE9B,GAAI,CAACD,EAAI,WAAW,UAAU,EAC5B,OAAOE,EAGT,IAAMC,EAAS,SAAS,cAAc,QAAQ,EAC9C,OAAAA,EAAO,UAAYD,EAAK,UACxBA,EAAK,kBAAkB,EAAE,QAASE,GAAS,CACzCD,EAAO,aAAaC,EAAMF,EAAK,aAAaE,CAAI,GAAK,EAAE,CACzD,CAAC,EAEMD,CACT,EAEA,wBAAwBE,EAA2B,CACjD,OAAOA,EAAQ,WAAa,KAAK,cAAgBA,EAAQ,aAAa,SAAS,IAAM,IACvF,EAEA,yBAAyBA,EAAkBC,EAAkC,CAC3E,IAAMC,EAAMF,EAAQ,aAAa,SAAS,EAC1C,OAAIE,IAAQ,KACHD,EAAS,UAAWD,GAAYA,EAAQ,aAAa,SAAS,IAAME,CAAG,EAGzE,EACT,EAEA,OAAQC,EAAS,SAAUF,EAAyB,CAClD,IAAMG,EAAiBH,EAAS,IAAKD,GAAY,KAAK,gBAAgBA,CAAO,CAAC,EACvD,MAAM,KAAK,SAAS,KAAK,UAAU,EAAE,OAAQA,GAClE,KAAK,wBAAwBA,CAAkB,CACjD,EAEe,QAASK,GAAkB,CACxC,IAAMC,EAAQ,KAAK,yBAAyBD,EAA0BD,CAAc,EACpF,GAAIE,IAAU,GAAI,CAChBD,GAAe,YAAY,YAAYA,CAAa,EACpD,MACF,CAEA,IAAME,EAAgBH,EAAe,OAAOE,EAAO,CAAC,EAAE,CAAC,EACnDC,GAAiB,CAACF,EAAc,YAAYE,CAAa,GAC3DF,GAAe,YAAY,aAAaE,EAAeF,CAAa,CAExE,CAAC,EAEDD,EAAe,QAASJ,GAAY,SAAS,KAAK,YAAYA,CAAO,CAAC,CACxE,EAAG,CAAC,CACN,EAEe,SAARQ,GACLC,EACAC,EACAC,EAOA,CACA,IAAMC,EAAwC,CAAC,EAC3CC,EAAiB,EAErB,SAASC,GAAkB,CACzB,IAAMC,EAAMF,GAAkB,EAC9B,OAAAD,EAAOG,CAAE,EAAI,CAAC,EACPA,EAAG,SAAS,CACrB,CAEA,SAASC,EAAWD,EAAkB,CAChCA,IAAO,MAAQ,OAAO,KAAKH,CAAM,EAAE,QAAQG,CAAE,IAAM,KAIvD,OAAOH,EAAOG,CAAE,EAChBE,EAAO,EACT,CAEA,SAASC,EAAOH,EAAYd,EAA0B,CAAC,EAAS,CAC1Dc,IAAO,MAAQ,OAAO,KAAKH,CAAM,EAAE,QAAQG,CAAE,EAAI,KACnDH,EAAOG,CAAE,EAAId,GAGfgB,EAAO,CACT,CAEA,SAASE,GAAyB,CAChC,IAAMC,EAAQV,EAAc,EAAE,EAExBW,EAAmC,CACvC,GAAID,EAAQ,CAAE,MAAO,qBAAqBA,CAAK,UAAW,EAAI,CAAC,CACjE,EAEMnB,EAAW,OAAO,OAAOW,CAAM,EAClC,OAAO,CAACU,EAAOrB,IAAaqB,EAAM,OAAOrB,CAAQ,EAAG,CAAC,CAAC,EACtD,OAAO,CAACqB,EAAOtB,IAAY,CAC1B,GAAIA,EAAQ,QAAQ,GAAG,IAAM,GAC3B,OAAOsB,EAGT,GAAItB,EAAQ,QAAQ,SAAS,IAAM,EAAG,CACpC,IAAMoB,EAAQpB,EAAQ,MAAM,iCAAiC,EAC7D,OAAAsB,EAAM,MAAQF,EAAQ,GAAGA,EAAM,CAAC,CAAC,GAAGV,EAAcU,EAAM,CAAC,CAAC,CAAC,GAAGA,EAAM,CAAC,CAAC,GAAKpB,EACpEsB,CACT,CAEA,IAAMC,GAAQvB,EAAQ,MAAM,kBAAkB,EAC9C,OAAIuB,GACFD,EAAMC,GAAM,CAAC,CAAC,EAAIvB,EAElBsB,EAAM,OAAO,KAAKA,CAAK,EAAE,MAAM,EAAItB,EAG9BsB,CACT,EAAGD,CAAQ,EAEb,OAAO,OAAO,OAAOpB,CAAQ,CAC/B,CAEA,SAASgB,GAAe,CACtBR,EAAWE,EAASQ,EAAQ,CAAC,EAAIzB,GAAS,OAAOyB,EAAQ,CAAC,CAC5D,CAIA,OAAAF,EAAO,EAEA,CACL,YAAaA,EACb,eAAgB,UAAY,CAC1B,IAAMF,EAAKD,EAAQ,EAEnB,MAAO,CACL,OAASb,GAAaiB,EAAOH,EAAId,CAAQ,EACzC,WAAY,IAAMe,EAAWD,CAAE,CACjC,CACF,CACF,CACF,CC7IA,IAAMS,EAAwB,YAExBC,EAA6B,CACjC,QAAS,IACT,OAAQ,SACR,cAAe,cACf,MAAO,IACP,QAAS,GACT,aAAc,IACd,YAAa,GACb,YAAa,eACb,gBAAiB,mBACjB,OAAQ,OACR,MAAO,OACP,WAAY,GACZ,SAAU,CACR,+BACA,0BACA,SACA,uCACA,mCACA,QACF,EAAE,KAAK,EAAE,CACX,EAEIC,EAAwB,KAEtBC,GAAaC,GAAuC,CACxD,OAAO,OAAOH,EAAUG,CAAO,EAE3BH,EAAS,YACXI,GAAUJ,EAAS,KAAK,CAE5B,EAKMK,EAAOC,GAAc,CACzB,IAAMC,EAAUC,GAAU,EAE1BF,EAAIG,GAAMH,EAAGN,EAAS,QAAS,CAAC,EAChCC,EAASK,IAAM,EAAI,KAAOA,EAE1B,IAAMI,EAAWC,GAAO,CAACJ,CAAO,EAC1BK,EAAMF,EAAS,cAAcV,EAAS,WAAW,EACjDa,EAAQb,EAAS,MACjBc,EAAOd,EAAS,OAEtBU,EAAS,YAETK,GAAOC,GAAS,CACd,IAAMC,EACAjB,EAAS,gBAAkB,cACtB,CACL,WAAY,OAAOa,CAAK,MAAMC,CAAI,GAClC,UAAW,eAAeI,EAAgBZ,CAAC,CAAC,QAC9C,EAGEN,EAAS,gBAAkB,YACtB,CACL,WAAY,OAAOa,CAAK,MAAMC,CAAI,GAClC,UAAW,aAAaI,EAAgBZ,CAAC,CAAC,MAC5C,EAGK,CAAE,WAAY,GAAGY,EAAgBZ,CAAC,CAAC,GAAI,EAGhD,QAAWa,KAAOF,EAChBL,EAAI,MAAMO,CAAG,EAAIF,EAAUE,CAAG,EAGhC,GAAIb,IAAM,EACR,OAAO,WAAWU,EAAMH,CAAK,EAI/BH,EAAS,MAAM,WAAa,OAC5BA,EAAS,MAAM,QAAU,IACzBA,EAAS,YAET,WAAW,IAAM,CACfA,EAAS,MAAM,WAAa,OAAOG,CAAK,YACxCH,EAAS,MAAM,QAAU,IAEzB,WAAW,IAAM,CACfU,GAAO,EACPJ,EAAK,CACP,EAAGH,CAAK,CACV,EAAGA,CAAK,CACV,CAAC,CACH,EAEML,GAAY,IAAM,OAAOP,GAAW,SAMpCoB,GAAQ,IAAM,CACbpB,GACHI,EAAI,CAAC,EAGP,IAAMiB,EAAO,UAAY,CACvB,WAAW,UAAY,CAChBrB,IAILsB,GAAiB,EACjBD,EAAK,EACP,EAAGtB,EAAS,YAAY,CAC1B,EAEIA,EAAS,SACXsB,EAAK,CAET,EASME,GAAQC,GAAoB,CAC5B,CAACA,GAAS,CAACxB,IAIfsB,GAAiB,GAAM,GAAM,KAAK,OAAO,CAAC,EAC1ClB,EAAI,CAAC,EACP,EAEMkB,GAAoBG,GAAoB,CAC5C,IAAMpB,EAAIL,EAEV,GAAIK,IAAM,KACR,OAAOe,GAAM,EAGf,GAAI,EAAAf,EAAI,GAIR,OAAAoB,EACE,OAAOA,GAAW,SACdA,GACC,IAAM,CACL,IAAMC,EAA2C,CAC/C,GAAK,CAAC,EAAG,EAAG,EACZ,IAAM,CAAC,GAAK,EAAG,EACf,IAAM,CAAC,GAAK,EAAG,EACf,KAAO,CAAC,GAAK,GAAI,CACnB,EAEA,QAAWC,KAAKD,EACd,GAAIrB,GAAKqB,EAAOC,CAAC,EAAE,CAAC,GAAKtB,EAAIqB,EAAOC,CAAC,EAAE,CAAC,EACtC,OAAO,WAAWA,CAAC,EAIvB,MAAO,EACT,GAAG,EAEFvB,EAAII,GAAMH,EAAIoB,EAAQ,EAAG,IAAK,CAAC,CACxC,EAKMf,GAAUkB,GAAuB,CACrC,GAAIC,GAAW,EACb,OAAO,SAAS,eAAe/B,CAAqB,EAGtD,SAAS,gBAAgB,UAAU,IAAI,GAAGA,CAAqB,OAAO,EAEtE,IAAMW,EAAW,SAAS,cAAc,KAAK,EAC7CA,EAAS,GAAKX,EACdW,EAAS,UAAYV,EAAS,SAE9B,IAAMY,EAAMF,EAAS,cAAcV,EAAS,WAAW,EACjD+B,EAAOF,EAAY,OAASX,EAAgBjB,GAAU,CAAC,EACvD+B,EAASC,GAAU,EAEzB,OAAArB,EAAI,MAAM,WAAa,eACvBA,EAAI,MAAM,UAAY,eAAemB,CAAI,SAEpC/B,EAAS,aACZU,EAAS,cAAcV,EAAS,eAAe,GAAG,OAAO,EAGvDgC,IAAW,SAAS,MACtBA,EAAO,UAAU,IAAI,GAAGjC,CAAqB,gBAAgB,EAG/DiC,EAAO,YAAYtB,CAAQ,EAEpBA,CACT,EAEMuB,GAAY,IACRC,GAAMlC,EAAS,MAAM,EAAIA,EAAS,OAAS,SAAS,cAAcA,EAAS,MAAM,EAGrFoB,GAAS,IAAM,CACnB,SAAS,gBAAgB,UAAU,OAAO,GAAGrB,CAAqB,OAAO,EACzEkC,GAAU,EAAE,UAAU,OAAO,GAAGlC,CAAqB,gBAAgB,EACrE,SAAS,eAAeA,CAAqB,GAAG,OAAO,CACzD,EAEM+B,GAAa,IACV,SAAS,eAAe/B,CAAqB,IAAM,KAGtDmC,GAASC,GACT,OAAO,aAAgB,SAClBA,aAAe,YAGjBA,GAAO,OAAOA,GAAQ,UAAYA,EAAI,WAAa,GAAK,OAAOA,EAAI,UAAa,SAGzF,SAAS1B,GAAMH,EAAW8B,EAAaC,EAAqB,CAC1D,OAAI/B,EAAI8B,EACCA,EAGL9B,EAAI+B,EACCA,EAGF/B,CACT,CAGA,IAAMY,EAAmBZ,IAAe,GAAKA,GAAK,IAG5CS,IAAS,IAAM,CACnB,IAAMuB,EAAuC,CAAC,EAExCtB,EAAO,IAAM,CACjB,IAAMuB,EAAKD,EAAQ,MAAM,EAErBC,GACFA,EAAGvB,CAAI,CAEX,EAEA,OAAQuB,GAAgC,CACtCD,EAAQ,KAAKC,CAAE,EAEXD,EAAQ,SAAW,GACrBtB,EAAK,CAET,CACF,GAAG,EAEGZ,GAAaoC,GAAwB,CACzC,IAAMC,EAAU,SAAS,cAAc,OAAO,EAE9CA,EAAQ,YAAc;AAAA,OACjB1C,CAAqB;AAAA;AAAA;AAAA;AAAA,OAIrBA,CAAqB;AAAA,oBACRyC,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAWlBzC,CAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,6BAMCyC,CAAK,aAAaA,CAAK;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAM7CzC,CAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,OAQrBA,CAAqB;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,0BAMFyC,CAAK;AAAA,2BACJA,CAAK;AAAA;AAAA;AAAA,mBAGbzC,CAAqB;AAAA;AAAA;AAAA,OAGjCA,CAAqB;AAAA;AAAA;AAAA;AAAA;AAAA,OAKrBA,CAAqB,mBAAmBA,CAAqB;AAAA,OAC7DA,CAAqB,mBAAmBA,CAAqB;AAAA;AAAA;AAAA;AAAA,iBAInDA,CAAqB;AAAA;AAAA;AAAA;AAAA,IAKpC,SAAS,KAAK,YAAY0C,CAAO,CACnC,EAEMC,GAAgB,IAAM,CAC1B,GAAI,OAAO,SAAa,IACtB,OAAO,KAGT,IAAMC,EAAK,SAAS,cAAc,OAAO,EAEzC,OAAAA,EAAG,UAAY,IAAI5C,CAAqB,sBAEjC4C,CACT,GAAG,EAEGC,GAAO,IAAM,CACjB,GAAIF,GAAgB,SAAS,KAAK,SAASA,CAAY,EACrD,OAAO,SAAS,KAAK,YAAYA,CAAY,CAEjD,EAEMG,GAAO,IAAM,CACbH,GAAgB,CAAC,SAAS,KAAK,SAASA,CAAY,GACtD,SAAS,KAAK,YAAYA,CAAY,CAE1C,EAEOI,EAAQ,CACb,UAAA5C,GACA,UAAAM,GACA,KAAAgB,GACA,IAAAnB,EACA,OAAAe,GACA,MAAAC,GACA,OAAApB,EACA,KAAA2C,GACA,KAAAC,EACF,ECnXA,IAAIE,EAAY,EAEHC,EAAS,CAACC,EAAQ,KAAU,CACvCF,EAAY,KAAK,IAAI,EAAGA,EAAY,CAAC,GAEjCE,GAASF,IAAc,IACzBG,EAAkB,KAAK,CAE3B,EAEaC,EAAO,IAAM,CACxBJ,IAEAG,EAAkB,KAAK,CACzB,EAEA,SAASE,GAAkBC,EAAqB,CAC9C,SAAS,iBAAiB,gBAAkB,GAAMC,GAAM,EAAGD,CAAK,CAAC,EACjE,SAAS,iBAAiB,mBAAoBE,EAAQ,CACxD,CAEA,SAASD,GAAME,EAA6BH,EAAqB,CAC1DG,EAAM,OAAO,MAAM,cACtBL,EAAK,EAGP,IAAMM,EAAU,WAAW,IAAMP,EAAkB,MAAM,EAAGG,CAAK,EACjE,SAAS,iBAAiB,iBAAmBK,GAAMC,GAAOD,EAAGD,CAAO,EAAG,CAAE,KAAM,EAAK,CAAC,CACvF,CAEA,SAASF,GAASC,EAAsC,CAClDN,EAAkB,UAAU,GAAKM,EAAM,OAAO,UAAU,YAC1DN,EAAkB,IAAI,KAAK,IAAIA,EAAkB,OAAUM,EAAM,OAAO,SAAS,WAAa,IAAO,EAAG,CAAC,CAE7G,CAEA,SAASG,GAAOH,EAA8BC,EAA+B,CAC3E,aAAaA,CAAQ,EAEhBP,EAAkB,UAAU,IAI7BM,EAAM,OAAO,MAAM,UACrBN,EAAkB,KAAK,EACdM,EAAM,OAAO,MAAM,YAC5BN,EAAkB,IAAI,CAAC,EACdM,EAAM,OAAO,MAAM,YAC5BN,EAAkB,KAAK,EACvBA,EAAkB,OAAO,GAE7B,CAEe,SAARU,GAA+B,CACpC,MAAAP,EAAQ,IACR,MAAAQ,EAAQ,OACR,WAAAC,EAAa,GACb,YAAAC,EAAc,EAChB,EAAI,CAAC,EAAS,CACZX,GAAkBC,CAAK,EACvBH,EAAkB,UAAU,CAAE,YAAAa,EAAa,WAAAD,EAAY,MAAAD,CAAM,CAAC,CAChE,CC5De,SAARG,GACLC,EAIS,CACT,IAAMC,EAAUD,EAAM,cAA8B,QAAQ,YAAY,IAAM,IAE9E,MAAO,EACJA,EAAM,SAAWA,GAAO,QAAuB,mBAChDA,EAAM,kBACLC,GAAUD,EAAM,QAChBC,GAAUD,EAAM,SAChBC,GAAUD,EAAM,SAChBC,GAAUD,EAAM,UAChBC,GAAU,WAAYD,GAASA,EAAM,SAAW,EAErD,CCZO,IAAME,GAAS,IAAIC",
|
|
6
|
+
"names": ["debounce", "fn", "delay", "timeoutID", "args", "fireEvent", "name", "options", "fireBeforeEvent", "visit", "fireErrorEvent", "errors", "fireExceptionEvent", "exception", "fireFinishEvent", "fireInvalidEvent", "response", "fireNavigateEvent", "page", "fireProgressEvent", "progress", "fireStartEvent", "fireSuccessEvent", "firePrefetchedEvent", "firePrefetchingEvent", "SessionStorage", "key", "value", "existing", "nestedKey", "encryptHistory", "data", "iv", "getIv", "storedKey", "getKeyFromSessionStorage", "key", "getOrCreateKey", "encryptData", "historySessionStorageKeys", "decryptHistory", "decryptData", "textEncoder", "str", "encoded", "result", "decrypted", "ivString", "SessionStorage", "createKey", "saveKey", "keyData", "newKey", "stringKey", "Scroll", "history", "region", "scrollRegions", "index", "scrollPosition", "event", "target", "merge", "qs", "hasFiles", "data", "value", "isFormData", "value", "objectToFormData", "source", "form", "parentKey", "key", "append", "composeKey", "parent", "index", "hrefToUrl", "href", "transformUrlAndData", "data", "method", "forceFormData", "queryStringArrayFormat", "url", "hasFiles", "isFormData", "objectToFormData", "_href", "_data", "mergeDataIntoQueryString", "qsArrayFormat", "hasHost", "hasAbsolutePath", "hasRelativePath", "hasSearch", "hasHash", "merge", "urlWithoutHash", "setHashIfSameUrl", "originUrl", "destinationUrl", "isSameUrlWithoutHash", "url1", "url2", "CurrentPage", "initialPage", "swapComponent", "resolveComponent", "page", "replace", "preserveScroll", "preserveState", "componentId", "history", "component", "location", "isSameUrlWithoutHash", "hrefToUrl", "resolve", "isNewComponent", "Scroll", "eventHandler", "fireNavigateEvent", "data", "hash", "event", "callback", "listener", "Queue", "item", "next", "isServer", "queue", "Queue", "isChromeIOS", "History", "data", "key", "page", "cb", "doPush", "resolve", "encryptHistory", "pageData", "decryptHistory", "scrollRegions", "scrollRegion", "doReplace", "url", "defaultValue", "SessionStorage", "historySessionStorageKeys", "state", "history", "EventHandler", "debounce", "Scroll", "type", "callback", "listener", "event", "response", "page", "state", "url", "hrefToUrl", "history", "data", "fireNavigateEvent", "eventHandler", "NavigationType", "navigationType", "InitialVisit", "handler", "navigationType", "history", "scrollRegions", "data", "page", "Scroll", "fireNavigateEvent", "eventHandler", "SessionStorage", "locationVisit", "rememberedState", "Poll", "interval", "cb", "options", "hidden", "Polls", "interval", "cb", "options", "poll", "Poll", "polls", "objectsAreEqual", "obj1", "obj2", "excludeKeys", "key", "compareValues", "value1", "value2", "conversionMap", "timeToMs", "time", "unit", "conversion", "PrefetchedRequests", "params", "sendFunc", "cacheFor", "existing", "stale", "expires", "promise", "resolve", "reject", "error", "visitParams", "response", "visit", "prefetching", "removalTimer", "prefetched", "timeToMs", "timer", "expiresIn", "id", "params1", "params2", "objectsAreEqual", "prefetchedRequests", "axios", "RequestParams", "_RequestParams", "params", "wrappedCallbacks", "cb", "cancelled", "interrupted", "response", "headers", "page", "only", "name", "args", "toMerge", "value", "modal_default", "html", "page", "a", "iframe", "event", "queue", "Queue", "Response", "_Response", "requestParams", "response", "originatingPage", "params", "isSameUrlWithoutHash", "firePrefetchedEvent", "history", "errors", "page", "scopedErrors", "fireErrorEvent", "fireSuccessEvent", "locationUrl", "hrefToUrl", "setHashIfSameUrl", "fireInvalidEvent", "modal_default", "status", "header", "url", "SessionStorage", "pageResponse", "originatingUrl", "currentPageUrl", "responseUrl", "propsToMerge", "propsToDeepMerge", "prop", "incomingProp", "currentProp", "deepMerge", "target", "source", "acc", "key", "rememberedState", "Request", "_Request", "params", "page", "RequestParams", "fireStartEvent", "firePrefetchingEvent", "originallyPrefetch", "axios", "urlWithoutHash", "response", "Response", "error", "fireExceptionEvent", "fireFinishEvent", "cancelled", "interrupted", "progress", "fireProgressEvent", "headers", "RequestStream", "maxConcurrent", "interruptible", "request", "r", "cancelled", "interrupted", "force", "Router", "RequestStream", "initialPage", "resolveComponent", "swapComponent", "page", "InitialVisit", "eventHandler", "url", "data", "options", "key", "history", "type", "callback", "interval", "requestOptions", "polls", "href", "visit", "events", "fireBeforeEvent", "requestStream", "Scroll", "requestParams", "prefetched", "prefetchedRequests", "reveal", "Request", "cacheFor", "visitUrl", "currentUrl", "hide", "resolve", "checkIfPageIsDefined", "params", "replace", "current", "props", "pendingVisitOptions", "mergedOptions", "_data", "transformUrlAndData", "deferred", "_", "group", "Renderer", "tag", "template", "node", "script", "name", "element", "elements", "key", "debounce", "sourceElements", "targetElement", "index", "sourceElement", "createHeadManager", "isServer", "titleCallback", "onUpdate", "states", "lastProviderId", "connect", "id", "disconnect", "commit", "update", "collect", "title", "defaults", "carry", "match", "baseComponentSelector", "settings", "status", "configure", "options", "injectCSS", "set", "n", "started", "isStarted", "clamp", "progress", "render", "bar", "speed", "ease", "queue", "next", "barStyles", "toBarPercentage", "key", "remove", "start", "work", "increaseByRandom", "done", "force", "amount", "ranges", "r", "fromStart", "isRendered", "perc", "parent", "getParent", "isDOM", "obj", "min", "max", "pending", "fn", "color", "element", "hiddenStyles", "el", "show", "hide", "progress_component_default", "hideCount", "reveal", "force", "progress_component_default", "hide", "addEventListeners", "delay", "start", "progress", "event", "timeout", "e", "finish", "setupProgress", "color", "includeCSS", "showSpinner", "shouldIntercept", "event", "isLink", "router", "Router"]
|
|
7
7
|
}
|