@inertiajs/core 2.0.14 → 2.0.16

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.js CHANGED
@@ -1,10 +1,2383 @@
1
- "use strict";var Xe=Object.create;var G=Object.defineProperty;var Je=Object.getOwnPropertyDescriptor;var Qe=Object.getOwnPropertyNames;var ze=Object.getPrototypeOf,_e=Object.prototype.hasOwnProperty;var Ye=(r,e)=>{for(var t in e)G(r,t,{get:e[t],enumerable:!0})},ye=(r,e,t,i)=>{if(e&&typeof e=="object"||typeof e=="function")for(let s of Qe(e))!_e.call(r,s)&&s!==t&&G(r,s,{get:()=>e[s],enumerable:!(i=Je(e,s))||i.enumerable});return r};var be=(r,e,t)=>(t=r!=null?Xe(ze(r)):{},ye(e||!r||!r.__esModule?G(t,"default",{value:r,enumerable:!0}):t,r)),Ze=r=>ye(G({},"__esModule",{value:!0}),r);var Et={};Ye(Et,{createHeadManager:()=>me,hideProgress:()=>$,hrefToUrl:()=>y,mergeDataIntoQueryString:()=>ie,revealProgress:()=>N,router:()=>St,setupProgress:()=>fe,shouldIntercept:()=>ge,urlWithoutHash:()=>F});module.exports=Ze(Et);function O(r,e){let t;return function(...i){clearTimeout(t),t=setTimeout(()=>r.apply(this,i),e)}}function S(r,e){return document.dispatchEvent(new CustomEvent(`inertia:${r}`,e))}var ee=r=>S("before",{cancelable:!0,detail:{visit:r}}),Pe=r=>S("error",{detail:{errors:r}}),we=r=>S("exception",{cancelable:!0,detail:{exception:r}}),Se=r=>S("finish",{detail:{visit:r}}),Ee=r=>S("invalid",{cancelable:!0,detail:{response:r}}),q=r=>S("navigate",{detail:{page:r}}),Re=r=>S("progress",{detail:{progress:r}}),Te=r=>S("start",{detail:{visit:r}}),xe=r=>S("success",{detail:{page:r}}),qe=(r,e)=>S("prefetched",{detail:{fetchedAt:Date.now(),response:r.data,visit:e}}),Ce=r=>S("prefetching",{detail:{visit:r}});var m=class{static set(e,t){typeof window<"u"&&window.sessionStorage.setItem(e,JSON.stringify(t))}static get(e){if(typeof window<"u")return JSON.parse(window.sessionStorage.getItem(e)||"null")}static merge(e,t){let i=this.get(e);i===null?this.set(e,t):this.set(e,{...i,...t})}static remove(e){typeof window<"u"&&window.sessionStorage.removeItem(e)}static removeNested(e,t){let i=this.get(e);i!==null&&(delete i[t],this.set(e,i))}static exists(e){try{return this.get(e)!==null}catch{return!1}}static clear(){typeof window<"u"&&window.sessionStorage.clear()}};m.locationVisitKey="inertiaLocationVisit";var Ae=async r=>{if(typeof window>"u")throw new Error("Unable to encrypt history");let e=Fe(),t=await Ie(),i=await st(t);if(!i)throw new Error("Unable to encrypt history");return await et(e,i,r)},V={key:"historyKey",iv:"historyIv"},Ve=async r=>{let e=Fe(),t=await Ie();if(!t)throw new Error("Unable to decrypt history");return await tt(e,t,r)},et=async(r,e,t)=>{if(typeof window>"u")throw new Error("Unable to encrypt history");if(typeof window.crypto.subtle>"u")return console.warn("Encryption is not supported in this environment. SSL is required."),Promise.resolve(t);let i=new TextEncoder,s=JSON.stringify(t),o=new Uint8Array(s.length*3),u=i.encodeInto(s,o);return window.crypto.subtle.encrypt({name:"AES-GCM",iv:r},e,o.subarray(0,u.written))},tt=async(r,e,t)=>{if(typeof window.crypto.subtle>"u")return console.warn("Decryption is not supported in this environment. SSL is required."),Promise.resolve(t);let i=await window.crypto.subtle.decrypt({name:"AES-GCM",iv:r},e,t);return JSON.parse(new TextDecoder().decode(i))},Fe=()=>{let r=m.get(V.iv);if(r)return new Uint8Array(r);let e=window.crypto.getRandomValues(new Uint8Array(12));return m.set(V.iv,Array.from(e)),e},rt=async()=>typeof window.crypto.subtle>"u"?(console.warn("Encryption is not supported in this environment. SSL is required."),Promise.resolve(null)):window.crypto.subtle.generateKey({name:"AES-GCM",length:256},!0,["encrypt","decrypt"]),it=async r=>{if(typeof window.crypto.subtle>"u")return console.warn("Encryption is not supported in this environment. SSL is required."),Promise.resolve();let e=await window.crypto.subtle.exportKey("raw",r);m.set(V.key,Array.from(new Uint8Array(e)))},st=async r=>{if(r)return r;let e=await rt();return e?(await it(e),e):null},Ie=async()=>{let r=m.get(V.key);return r?await window.crypto.subtle.importKey("raw",new Uint8Array(r),{name:"AES-GCM",length:256},!0,["encrypt","decrypt"]):null};var v=class{static save(){l.saveScrollPositions(Array.from(this.regions()).map(e=>({top:e.scrollTop,left:e.scrollLeft})))}static regions(){return document.querySelectorAll("[scroll-region]")}static reset(){typeof window<"u"&&window.scrollTo(0,0),this.regions().forEach(e=>{typeof e.scrollTo=="function"?e.scrollTo(0,0):(e.scrollTop=0,e.scrollLeft=0)}),this.save(),window.location.hash&&setTimeout(()=>document.getElementById(window.location.hash.slice(1))?.scrollIntoView())}static restore(e){this.restoreDocument(),this.regions().forEach((t,i)=>{let s=e[i];s&&(typeof t.scrollTo=="function"?t.scrollTo(s.left,s.top):(t.scrollTop=s.top,t.scrollLeft=s.left))})}static restoreDocument(){let e=l.getDocumentScrollPosition();typeof window<"u"&&window.scrollTo(e.left,e.top)}static onScroll(e){let t=e.target;typeof t.hasAttribute=="function"&&t.hasAttribute("scroll-region")&&this.save()}static onWindowScroll(){l.saveDocumentScrollPosition({top:window.scrollY,left:window.scrollX})}};var ke=require("es-toolkit"),j=be(require("qs"),1);function K(r){return r instanceof File||r instanceof Blob||r instanceof FileList&&r.length>0||r instanceof FormData&&Array.from(r.values()).some(e=>K(e))||typeof r=="object"&&r!==null&&Object.values(r).some(e=>K(e))}var te=r=>r instanceof FormData;function re(r,e=new FormData,t=null){r=r||{};for(let i in r)Object.prototype.hasOwnProperty.call(r,i)&&Le(e,Oe(t,i),r[i]);return e}function Oe(r,e){return r?r+"["+e+"]":e}function Le(r,e,t){if(Array.isArray(t))return Array.from(t.keys()).forEach(i=>Le(r,Oe(e,i.toString()),t[i]));if(t instanceof Date)return r.append(e,t.toISOString());if(t instanceof File)return r.append(e,t,t.name);if(t instanceof Blob)return r.append(e,t);if(typeof t=="boolean")return r.append(e,t?"1":"0");if(typeof t=="string")return r.append(e,t);if(typeof t=="number")return r.append(e,`${t}`);if(t==null)return r.append(e,"");re(t,r,e)}function y(r){return new URL(r.toString(),typeof window>"u"?void 0:window.location.toString())}var Ue=(r,e,t,i,s)=>{let o=typeof r=="string"?y(r):r;if((K(e)||i)&&!te(e)&&(e=re(e)),te(e))return[o,e];let[u,p]=ie(t,o,e,s);return[y(u),p]};function ie(r,e,t,i="brackets"){let s=/^[a-z][a-z0-9+.-]*:\/\//i.test(e.toString()),o=s||e.toString().startsWith("/"),u=!o&&!e.toString().startsWith("#")&&!e.toString().startsWith("?"),p=e.toString().includes("?")||r==="get"&&Object.keys(t).length,d=e.toString().includes("#"),a=new URL(e.toString(),"http://localhost");return r==="get"&&Object.keys(t).length&&(a.search=j.stringify((0,ke.mergeWith)(j.parse(a.search,{ignoreQueryPrefix:!0}),t,(h,c,P,x)=>{c===void 0&&delete x[P]}),{encodeValuesOnly:!0,arrayFormat:i}),t={}),[[s?`${a.protocol}//${a.host}`:"",o?a.pathname:"",u?a.pathname.substring(1):"",p?a.search:"",d?a.hash:""].join(""),t]}function F(r){return r=new URL(r.href),r.hash="",r}var se=(r,e)=>{r.hash&&!e.hash&&F(r).href===e.href&&(e.hash=r.hash)},L=(r,e)=>F(r).href===F(e).href;var ne=class{constructor(){this.componentId={};this.listeners=[];this.isFirstPageLoad=!0;this.cleared=!1}init({initialPage:e,swapComponent:t,resolveComponent:i}){return this.page=e,this.swapComponent=t,this.resolveComponent=i,this}set(e,{replace:t=!1,preserveScroll:i=!1,preserveState:s=!1}={}){this.componentId={};let o=this.componentId;return e.clearHistory&&l.clear(),this.resolve(e.component).then(u=>{if(o!==this.componentId)return;e.rememberedState??(e.rememberedState={});let p=typeof window<"u"?window.location:new URL(e.url);return t=t||L(y(e.url),p),new Promise(d=>{t?l.replaceState(e,()=>d(null)):l.pushState(e,()=>d(null))}).then(()=>{let d=!this.isTheSame(e);return this.page=e,this.cleared=!1,d&&this.fireEventsFor("newComponent"),this.isFirstPageLoad&&this.fireEventsFor("firstLoad"),this.isFirstPageLoad=!1,this.swap({component:u,page:e,preserveState:s}).then(()=>{i||v.reset(),E.fireInternalEvent("loadDeferredProps"),t||q(e)})})})}setQuietly(e,{preserveState:t=!1}={}){return this.resolve(e.component).then(i=>(this.page=e,this.cleared=!1,l.setCurrent(e),this.swap({component:i,page:e,preserveState:t})))}clear(){this.cleared=!0}isCleared(){return this.cleared}get(){return this.page}merge(e){this.page={...this.page,...e}}setUrlHash(e){this.page.url.includes(e)||(this.page.url+=e)}remember(e){this.page.rememberedState=e}swap({component:e,page:t,preserveState:i}){return this.swapComponent({component:e,page:t,preserveState:i})}resolve(e){return Promise.resolve(this.resolveComponent(e))}isTheSame(e){return this.page.component===e.component}on(e,t){return this.listeners.push({event:e,callback:t}),()=>{this.listeners=this.listeners.filter(i=>i.event!==e&&i.callback!==t)}}fireEventsFor(e){this.listeners.filter(t=>t.event===e).forEach(t=>t.callback())}},n=new ne;var I=class{constructor(){this.items=[];this.processingPromise=null}add(e){return this.items.push(e),this.process()}process(){return this.processingPromise??(this.processingPromise=this.processNext().then(()=>{this.processingPromise=null})),this.processingPromise}processNext(){let e=this.items.shift();return e?Promise.resolve(e()).then(()=>this.processNext()):Promise.resolve()}};var U=typeof window>"u",k=new I,He=!U&&/CriOS/.test(window.navigator.userAgent),oe=class{constructor(){this.rememberedState="rememberedState";this.scrollRegions="scrollRegions";this.preserveUrl=!1;this.current={};this.initialState=null}remember(e,t){this.replaceState({...n.get(),rememberedState:{...n.get()?.rememberedState??{},[t]:e}})}restore(e){if(!U)return this.current[this.rememberedState]?this.current[this.rememberedState]?.[e]:this.initialState?.[this.rememberedState]?.[e]}pushState(e,t=null){if(!U){if(this.preserveUrl){t&&t();return}this.current=e,k.add(()=>this.getPageData(e).then(i=>{let s=()=>{this.doPushState({page:i},e.url),t&&t()};He?setTimeout(s):s()}))}}getPageData(e){return new Promise(t=>e.encryptHistory?Ae(e).then(t):t(e))}processQueue(){return k.process()}decrypt(e=null){if(U)return Promise.resolve(e??n.get());let t=e??window.history.state?.page;return this.decryptPageData(t).then(i=>{if(!i)throw new Error("Unable to decrypt history");return this.initialState===null?this.initialState=i??void 0:this.current=i??{},i})}decryptPageData(e){return e instanceof ArrayBuffer?Ve(e):Promise.resolve(e)}saveScrollPositions(e){k.add(()=>Promise.resolve().then(()=>{window.history.state?.page&&this.doReplaceState({page:window.history.state.page,scrollRegions:e})}))}saveDocumentScrollPosition(e){k.add(()=>Promise.resolve().then(()=>{window.history.state?.page&&this.doReplaceState({page:window.history.state.page,documentScrollPosition:e})}))}getScrollRegions(){return window.history.state?.scrollRegions||[]}getDocumentScrollPosition(){return window.history.state?.documentScrollPosition||{top:0,left:0}}replaceState(e,t=null){if(n.merge(e),!U){if(this.preserveUrl){t&&t();return}this.current=e,k.add(()=>this.getPageData(e).then(i=>{let s=()=>{this.doReplaceState({page:i},e.url),t&&t()};He?setTimeout(s):s()}))}}doReplaceState(e,t){window.history.replaceState({...e,scrollRegions:e.scrollRegions??window.history.state?.scrollRegions,documentScrollPosition:e.documentScrollPosition??window.history.state?.documentScrollPosition},"",t)}doPushState(e,t){window.history.pushState(e,"",t)}getState(e,t){return this.current?.[e]??t}deleteState(e){this.current[e]!==void 0&&(delete this.current[e],this.replaceState(this.current))}hasAnyState(){return!!this.getAllState()}clear(){m.remove(V.key),m.remove(V.iv)}setCurrent(e){this.current=e}isValidState(e){return!!e.page}getAllState(){return this.current}};typeof window<"u"&&window.history.scrollRestoration&&(window.history.scrollRestoration="manual");var l=new oe;var ae=class{constructor(){this.internalListeners=[]}init(){typeof window<"u"&&(window.addEventListener("popstate",this.handlePopstateEvent.bind(this)),window.addEventListener("scroll",O(v.onWindowScroll.bind(v),100),!0)),typeof document<"u"&&document.addEventListener("scroll",O(v.onScroll.bind(v),100),!0)}onGlobalEvent(e,t){let i=s=>{let o=t(s);s.cancelable&&!s.defaultPrevented&&o===!1&&s.preventDefault()};return this.registerListener(`inertia:${e}`,i)}on(e,t){return this.internalListeners.push({event:e,listener:t}),()=>{this.internalListeners=this.internalListeners.filter(i=>i.listener!==t)}}onMissingHistoryItem(){n.clear(),this.fireInternalEvent("missingHistoryItem")}fireInternalEvent(e){this.internalListeners.filter(t=>t.event===e).forEach(t=>t.listener())}registerListener(e,t){return document.addEventListener(e,t),()=>document.removeEventListener(e,t)}handlePopstateEvent(e){let t=e.state||null;if(t===null){let i=y(n.get().url);i.hash=window.location.hash,l.replaceState({...n.get(),url:i.href}),v.reset();return}if(!l.isValidState(t))return this.onMissingHistoryItem();l.decrypt(t.page).then(i=>{if(n.get().version!==i.version){this.onMissingHistoryItem();return}n.setQuietly(i,{preserveState:!1}).then(()=>{window.requestAnimationFrame(()=>{v.restore(l.getScrollRegions())}),q(n.get())})}).catch(()=>{this.onMissingHistoryItem()})}},E=new ae;var le=class{constructor(){this.type=this.resolveType()}resolveType(){return typeof window>"u"?"navigate":window.performance&&window.performance.getEntriesByType&&window.performance.getEntriesByType("navigation").length>0?window.performance.getEntriesByType("navigation")[0].type:"navigate"}get(){return this.type}isBackForward(){return this.type==="back_forward"}isReload(){return this.type==="reload"}},W=new le;var X=class{static handle(){this.clearRememberedStateOnReload(),[this.handleBackForward,this.handleLocation,this.handleDefault].find(t=>t.bind(this)())}static clearRememberedStateOnReload(){W.isReload()&&l.deleteState(l.rememberedState)}static handleBackForward(){if(!W.isBackForward()||!l.hasAnyState())return!1;let e=l.getScrollRegions();return l.decrypt().then(t=>{n.set(t,{preserveScroll:!0,preserveState:!0}).then(()=>{v.restore(e),q(n.get())})}).catch(()=>{E.onMissingHistoryItem()}),!0}static handleLocation(){if(!m.exists(m.locationVisitKey))return!1;let e=m.get(m.locationVisitKey)||{};return m.remove(m.locationVisitKey),typeof window<"u"&&n.setUrlHash(window.location.hash),l.decrypt(n.get()).then(()=>{let t=l.getState(l.rememberedState,{}),i=l.getScrollRegions();n.remember(t),n.set(n.get(),{preserveScroll:e.preserveScroll,preserveState:!0}).then(()=>{e.preserveScroll&&v.restore(i),q(n.get())})}).catch(()=>{E.onMissingHistoryItem()}),!0}static handleDefault(){typeof window<"u"&&n.setUrlHash(window.location.hash),n.set(n.get(),{preserveScroll:!0,preserveState:!0}).then(()=>{W.isReload()&&v.restore(l.getScrollRegions()),q(n.get())})}};var J=class{constructor(e,t,i){this.id=null;this.throttle=!1;this.keepAlive=!1;this.cbCount=0;this.keepAlive=i.keepAlive??!1,this.cb=t,this.interval=e,(i.autoStart??!0)&&this.start()}stop(){this.id&&clearInterval(this.id)}start(){typeof window>"u"||(this.stop(),this.id=window.setInterval(()=>{(!this.throttle||this.cbCount%10===0)&&this.cb(),this.throttle&&this.cbCount++},this.interval))}isInBackground(e){this.throttle=this.keepAlive?!1:e,this.throttle&&(this.cbCount=0)}};var ce=class{constructor(){this.polls=[];this.setupVisibilityListener()}add(e,t,i){let s=new J(e,t,i);return this.polls.push(s),{stop:()=>s.stop(),start:()=>s.start()}}clear(){this.polls.forEach(e=>e.stop()),this.polls=[]}setupVisibilityListener(){typeof document>"u"||document.addEventListener("visibilitychange",()=>{this.polls.forEach(e=>e.isInBackground(document.hidden))},!1)}},De=new ce;var Me=require("es-toolkit");var ue=(r,e,t)=>{if(r===e)return!0;for(let i in r)if(!t.includes(i)&&r[i]!==e[i]&&!nt(r[i],e[i]))return!1;return!0},nt=(r,e)=>{switch(typeof r){case"object":return ue(r,e,[]);case"function":return r.toString()===e.toString();default:return r===e}};var ot={ms:1,s:1e3,m:6e4,h:36e5,d:864e5},pe=r=>{if(typeof r=="number")return r;for(let[e,t]of Object.entries(ot))if(r.endsWith(e))return parseFloat(r)*t;return parseInt(r)};var de=class{constructor(){this.cached=[];this.inFlightRequests=[];this.removalTimers=[];this.currentUseId=null}add(e,t,{cacheFor:i}){if(this.findInFlight(e))return Promise.resolve();let o=this.findCached(e);if(!e.fresh&&o&&o.staleTimestamp>Date.now())return Promise.resolve();let[u,p]=this.extractStaleValues(i),d=new Promise((a,h)=>{t({...e,onCancel:()=>{this.remove(e),e.onCancel(),h()},onError:c=>{this.remove(e),e.onError(c),h()},onPrefetching(c){e.onPrefetching(c)},onPrefetched(c,P){e.onPrefetched(c,P)},onPrefetchResponse(c){a(c)}})}).then(a=>(this.remove(e),this.cached.push({params:{...e},staleTimestamp:Date.now()+u,response:d,singleUse:i===0,timestamp:Date.now(),inFlight:!1}),this.scheduleForRemoval(e,p),this.inFlightRequests=this.inFlightRequests.filter(h=>!this.paramsAreEqual(h.params,e)),a.handlePrefetch(),a));return this.inFlightRequests.push({params:{...e},response:d,staleTimestamp:null,inFlight:!0}),d}removeAll(){this.cached=[],this.removalTimers.forEach(e=>{clearTimeout(e.timer)}),this.removalTimers=[]}remove(e){this.cached=this.cached.filter(t=>!this.paramsAreEqual(t.params,e)),this.clearTimer(e)}extractStaleValues(e){let[t,i]=this.cacheForToStaleAndExpires(e);return[pe(t),pe(i)]}cacheForToStaleAndExpires(e){if(!Array.isArray(e))return[e,e];switch(e.length){case 0:return[0,0];case 1:return[e[0],e[0]];default:return[e[0],e[1]]}}clearTimer(e){let t=this.removalTimers.find(i=>this.paramsAreEqual(i.params,e));t&&(clearTimeout(t.timer),this.removalTimers=this.removalTimers.filter(i=>i!==t))}scheduleForRemoval(e,t){if(!(typeof window>"u")&&(this.clearTimer(e),t>0)){let i=window.setTimeout(()=>this.remove(e),t);this.removalTimers.push({params:e,timer:i})}}get(e){return this.findCached(e)||this.findInFlight(e)}use(e,t){let i=`${t.url.pathname}-${Date.now()}-${Math.random().toString(36).substring(7)}`;return this.currentUseId=i,e.response.then(s=>{if(this.currentUseId===i)return s.mergeParams({...t,onPrefetched:()=>{}}),this.removeSingleUseItems(t),s.handle()})}removeSingleUseItems(e){this.cached=this.cached.filter(t=>this.paramsAreEqual(t.params,e)?!t.singleUse:!0)}findCached(e){return this.cached.find(t=>this.paramsAreEqual(t.params,e))||null}findInFlight(e){return this.inFlightRequests.find(t=>this.paramsAreEqual(t.params,e))||null}withoutPurposePrefetchHeader(e){let t=(0,Me.cloneDeep)(e);return t.headers.Purpose==="prefetch"&&delete t.headers.Purpose,t}paramsAreEqual(e,t){return ue(this.withoutPurposePrefetchHeader(e),this.withoutPurposePrefetchHeader(t),["showProgress","replace","prefetch","onBefore","onStart","onProgress","onFinish","onCancel","onSuccess","onError","onPrefetched","onCancelToken","onPrefetching","async"])}},C=new de;var he=be(require("axios"),1);var Q=class r{constructor(e){this.callbacks=[];if(!e.prefetch)this.params=e;else{let t={onBefore:this.wrapCallback(e,"onBefore"),onStart:this.wrapCallback(e,"onStart"),onProgress:this.wrapCallback(e,"onProgress"),onFinish:this.wrapCallback(e,"onFinish"),onCancel:this.wrapCallback(e,"onCancel"),onSuccess:this.wrapCallback(e,"onSuccess"),onError:this.wrapCallback(e,"onError"),onCancelToken:this.wrapCallback(e,"onCancelToken"),onPrefetched:this.wrapCallback(e,"onPrefetched"),onPrefetching:this.wrapCallback(e,"onPrefetching")};this.params={...e,...t,onPrefetchResponse:e.onPrefetchResponse||(()=>{})}}}static create(e){return new r(e)}data(){return this.params.method==="get"?null:this.params.data}queryParams(){return this.params.method==="get"?this.params.data:{}}isPartial(){return this.params.only.length>0||this.params.except.length>0||this.params.reset.length>0}onCancelToken(e){this.params.onCancelToken({cancel:e})}markAsFinished(){this.params.completed=!0,this.params.cancelled=!1,this.params.interrupted=!1}markAsCancelled({cancelled:e=!0,interrupted:t=!1}){this.params.onCancel(),this.params.completed=!1,this.params.cancelled=e,this.params.interrupted=t}wasCancelledAtAll(){return this.params.cancelled||this.params.interrupted}onFinish(){this.params.onFinish(this.params)}onStart(){this.params.onStart(this.params)}onPrefetching(){this.params.onPrefetching(this.params)}onPrefetchResponse(e){this.params.onPrefetchResponse&&this.params.onPrefetchResponse(e)}all(){return this.params}headers(){let e={...this.params.headers};this.isPartial()&&(e["X-Inertia-Partial-Component"]=n.get().component);let t=this.params.only.concat(this.params.reset);return t.length>0&&(e["X-Inertia-Partial-Data"]=t.join(",")),this.params.except.length>0&&(e["X-Inertia-Partial-Except"]=this.params.except.join(",")),this.params.reset.length>0&&(e["X-Inertia-Reset"]=this.params.reset.join(",")),this.params.errorBag&&this.params.errorBag.length>0&&(e["X-Inertia-Error-Bag"]=this.params.errorBag),e}setPreserveOptions(e){this.params.preserveScroll=this.resolvePreserveOption(this.params.preserveScroll,e),this.params.preserveState=this.resolvePreserveOption(this.params.preserveState,e)}runCallbacks(){this.callbacks.forEach(({name:e,args:t})=>{this.params[e](...t)})}merge(e){this.params={...this.params,...e}}wrapCallback(e,t){return(...i)=>{this.recordCallback(t,i),e[t](...i)}}recordCallback(e,t){this.callbacks.push({name:e,args:t})}resolvePreserveOption(e,t){return typeof e=="function"?e(t):e==="errors"?Object.keys(t.props.errors||{}).length>0:e}};var Ne={modal:null,listener:null,show(r){typeof r=="object"&&(r=`All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(r)}`);let e=document.createElement("html");e.innerHTML=r,e.querySelectorAll("a").forEach(i=>i.setAttribute("target","_top")),this.modal=document.createElement("div"),this.modal.style.position="fixed",this.modal.style.width="100vw",this.modal.style.height="100vh",this.modal.style.padding="50px",this.modal.style.boxSizing="border-box",this.modal.style.backgroundColor="rgba(0, 0, 0, .6)",this.modal.style.zIndex=2e5,this.modal.addEventListener("click",()=>this.hide());let t=document.createElement("iframe");if(t.style.backgroundColor="white",t.style.borderRadius="5px",t.style.width="100%",t.style.height="100%",this.modal.appendChild(t),document.body.prepend(this.modal),document.body.style.overflow="hidden",!t.contentWindow)throw new Error("iframe not yet ready.");t.contentWindow.document.open(),t.contentWindow.document.write(e.outerHTML),t.contentWindow.document.close(),this.listener=this.hideOnEscape.bind(this),document.addEventListener("keydown",this.listener)},hide(){this.modal.outerHTML="",this.modal=null,document.body.style.overflow="visible",document.removeEventListener("keydown",this.listener)},hideOnEscape(r){r.keyCode===27&&this.hide()}};var at=new I,H=class r{constructor(e,t,i){this.requestParams=e;this.response=t;this.originatingPage=i}static create(e,t,i){return new r(e,t,i)}async handlePrefetch(){L(this.requestParams.all().url,window.location)&&this.handle()}async handle(){return at.add(()=>this.process())}async process(){if(this.requestParams.all().prefetch)return this.requestParams.all().prefetch=!1,this.requestParams.all().onPrefetched(this.response,this.requestParams.all()),qe(this.response,this.requestParams.all()),Promise.resolve();if(this.requestParams.runCallbacks(),!this.isInertiaResponse())return this.handleNonInertiaResponse();await l.processQueue(),l.preserveUrl=this.requestParams.all().preserveUrl,await this.setPage();let e=n.get().props.errors||{};if(Object.keys(e).length>0){let t=this.getScopedErrors(e);return Pe(t),this.requestParams.all().onError(t)}xe(n.get()),await this.requestParams.all().onSuccess(n.get()),l.preserveUrl=!1}mergeParams(e){this.requestParams.merge(e)}async handleNonInertiaResponse(){if(this.isLocationVisit()){let t=y(this.getHeader("x-inertia-location"));return se(this.requestParams.all().url,t),this.locationVisit(t)}let e={...this.response,data:this.getDataFromResponse(this.response.data)};if(Ee(e))return Ne.show(e.data)}isInertiaResponse(){return this.hasHeader("x-inertia")}hasStatus(e){return this.response.status===e}getHeader(e){return this.response.headers[e]}hasHeader(e){return this.getHeader(e)!==void 0}isLocationVisit(){return this.hasStatus(409)&&this.hasHeader("x-inertia-location")}locationVisit(e){try{if(m.set(m.locationVisitKey,{preserveScroll:this.requestParams.all().preserveScroll===!0}),typeof window>"u")return;L(window.location,e)?window.location.reload():window.location.href=e.href}catch{return!1}}async setPage(){let e=this.getDataFromResponse(this.response.data);return this.shouldSetPage(e)?(this.mergeProps(e),await this.setRememberedState(e),this.requestParams.setPreserveOptions(e),e.url=l.preserveUrl?n.get().url:this.pageUrl(e),n.set(e,{replace:this.requestParams.all().replace,preserveScroll:this.requestParams.all().preserveScroll,preserveState:this.requestParams.all().preserveState})):Promise.resolve()}getDataFromResponse(e){if(typeof e!="string")return e;try{return JSON.parse(e)}catch{return e}}shouldSetPage(e){if(!this.requestParams.all().async||this.originatingPage.component!==e.component)return!0;if(this.originatingPage.component!==n.get().component)return!1;let t=y(this.originatingPage.url),i=y(n.get().url);return t.origin===i.origin&&t.pathname===i.pathname}pageUrl(e){let t=y(e.url);return se(this.requestParams.all().url,t),t.pathname+t.search+t.hash}mergeProps(e){if(!this.requestParams.isPartial()||e.component!==n.get().component)return;let t=e.mergeProps||[],i=e.deepMergeProps||[],s=e.matchPropsOn||[];t.forEach(o=>{let u=e.props[o];Array.isArray(u)?e.props[o]=this.mergeOrMatchItems(n.get().props[o]||[],u,o,s):typeof u=="object"&&u!==null&&(e.props[o]={...n.get().props[o]||[],...u})}),i.forEach(o=>{let u=e.props[o],p=n.get().props[o],d=(a,h,c)=>Array.isArray(h)?this.mergeOrMatchItems(a,h,c,s):typeof h=="object"&&h!==null?Object.keys(h).reduce((P,x)=>(P[x]=d(a?a[x]:void 0,h[x],`${c}.${x}`),P),{...a}):h;e.props[o]=d(p,u,o)}),e.props={...n.get().props,...e.props}}mergeOrMatchItems(e,t,i,s){let o=s.find(a=>a.split(".").slice(0,-1).join(".")===i);if(!o)return[...Array.isArray(e)?e:[],...t];let u=o.split(".").pop()||"",p=Array.isArray(e)?e:[],d=new Map;return p.forEach(a=>{a&&typeof a=="object"&&u in a?d.set(a[u],a):d.set(Symbol(),a)}),t.forEach(a=>{a&&typeof a=="object"&&u in a?d.set(a[u],a):d.set(Symbol(),a)}),Array.from(d.values())}async setRememberedState(e){let t=await l.getState(l.rememberedState,{});this.requestParams.all().preserveState&&t&&e.component===n.get().component&&(e.rememberedState=t)}getScopedErrors(e){return this.requestParams.all().errorBag?e[this.requestParams.all().errorBag||""]||{}:e}};var D=class r{constructor(e,t){this.page=t;this.requestHasFinished=!1;this.requestParams=Q.create(e),this.cancelToken=new AbortController}static create(e,t){return new r(e,t)}async send(){this.requestParams.onCancelToken(()=>this.cancel({cancelled:!0})),Te(this.requestParams.all()),this.requestParams.onStart(),this.requestParams.all().prefetch&&(this.requestParams.onPrefetching(),Ce(this.requestParams.all()));let e=this.requestParams.all().prefetch;return(0,he.default)({method:this.requestParams.all().method,url:F(this.requestParams.all().url).href,data:this.requestParams.data(),params:this.requestParams.queryParams(),signal:this.cancelToken.signal,headers:this.getHeaders(),onUploadProgress:this.onProgress.bind(this),responseType:"text"}).then(t=>(this.response=H.create(this.requestParams,t,this.page),this.response.handle())).catch(t=>t?.response?(this.response=H.create(this.requestParams,t.response,this.page),this.response.handle()):Promise.reject(t)).catch(t=>{if(!he.default.isCancel(t)&&we(t))return Promise.reject(t)}).finally(()=>{this.finish(),e&&this.response&&this.requestParams.onPrefetchResponse(this.response)})}finish(){this.requestParams.wasCancelledAtAll()||(this.requestParams.markAsFinished(),this.fireFinishEvents())}fireFinishEvents(){this.requestHasFinished||(this.requestHasFinished=!0,Se(this.requestParams.all()),this.requestParams.onFinish())}cancel({cancelled:e=!1,interrupted:t=!1}){this.requestHasFinished||(this.cancelToken.abort(),this.requestParams.markAsCancelled({cancelled:e,interrupted:t}),this.fireFinishEvents())}onProgress(e){this.requestParams.data()instanceof FormData&&(e.percentage=e.progress?Math.round(e.progress*100):0,Re(e),this.requestParams.all().onProgress(e))}getHeaders(){let e={...this.requestParams.headers(),Accept:"text/html, application/xhtml+xml","X-Requested-With":"XMLHttpRequest","X-Inertia":!0};return n.get().version&&(e["X-Inertia-Version"]=n.get().version),e}};var M=class{constructor({maxConcurrent:e,interruptible:t}){this.requests=[];this.maxConcurrent=e,this.interruptible=t}send(e){this.requests.push(e),e.send().then(()=>{this.requests=this.requests.filter(t=>t!==e)})}interruptInFlight(){this.cancel({interrupted:!0},!1)}cancelInFlight(){this.cancel({cancelled:!0},!0)}cancel({cancelled:e=!1,interrupted:t=!1}={},i){if(!this.shouldCancel(i))return;this.requests.shift()?.cancel({interrupted:t,cancelled:e})}shouldCancel(e){return e?!0:this.interruptible&&this.requests.length>=this.maxConcurrent}};var z=class{constructor(){this.syncRequestStream=new M({maxConcurrent:1,interruptible:!0});this.asyncRequestStream=new M({maxConcurrent:1/0,interruptible:!1})}init({initialPage:e,resolveComponent:t,swapComponent:i}){n.init({initialPage:e,resolveComponent:t,swapComponent:i}),X.handle(),E.init(),E.on("missingHistoryItem",()=>{typeof window<"u"&&this.visit(window.location.href,{preserveState:!0,preserveScroll:!0,replace:!0})}),E.on("loadDeferredProps",()=>{this.loadDeferredProps()})}get(e,t={},i={}){return this.visit(e,{...i,method:"get",data:t})}post(e,t={},i={}){return this.visit(e,{preserveState:!0,...i,method:"post",data:t})}put(e,t={},i={}){return this.visit(e,{preserveState:!0,...i,method:"put",data:t})}patch(e,t={},i={}){return this.visit(e,{preserveState:!0,...i,method:"patch",data:t})}delete(e,t={}){return this.visit(e,{preserveState:!0,...t,method:"delete"})}reload(e={}){if(!(typeof window>"u"))return this.visit(window.location.href,{...e,preserveScroll:!0,preserveState:!0,async:!0,headers:{...e.headers||{},"Cache-Control":"no-cache"}})}remember(e,t="default"){l.remember(e,t)}restore(e="default"){return l.restore(e)}on(e,t){return typeof window>"u"?()=>{}:E.onGlobalEvent(e,t)}cancel(){this.syncRequestStream.cancelInFlight()}cancelAll(){this.asyncRequestStream.cancelInFlight(),this.syncRequestStream.cancelInFlight()}poll(e,t={},i={}){return De.add(e,()=>this.reload(t),{autoStart:i.autoStart??!0,keepAlive:i.keepAlive??!1})}visit(e,t={}){let i=this.getPendingVisit(e,{...t,showProgress:t.showProgress??!t.async}),s=this.getVisitEvents(t);if(s.onBefore(i)===!1||!ee(i))return;let o=i.async?this.asyncRequestStream:this.syncRequestStream;o.interruptInFlight(),!n.isCleared()&&!i.preserveUrl&&v.save();let u={...i,...s},p=C.get(u);p?(N(p.inFlight),C.use(p,u)):(N(!0),o.send(D.create(u,n.get())))}getCached(e,t={}){return C.findCached(this.getPrefetchParams(e,t))}flush(e,t={}){C.remove(this.getPrefetchParams(e,t))}flushAll(){C.removeAll()}getPrefetching(e,t={}){return C.findInFlight(this.getPrefetchParams(e,t))}prefetch(e,t={},{cacheFor:i=3e4}){if(t.method!=="get")throw new Error("Prefetch requests must use the GET method");let s=this.getPendingVisit(e,{...t,async:!0,showProgress:!1,prefetch:!0}),o=s.url.origin+s.url.pathname+s.url.search,u=window.location.origin+window.location.pathname+window.location.search;if(o===u)return;let p=this.getVisitEvents(t);if(p.onBefore(s)===!1||!ee(s))return;$(),this.asyncRequestStream.interruptInFlight();let d={...s,...p};new Promise(h=>{let c=()=>{n.get()?h():setTimeout(c,50)};c()}).then(()=>{C.add(d,h=>{this.asyncRequestStream.send(D.create(h,n.get()))},{cacheFor:i})})}clearHistory(){l.clear()}decryptHistory(){return l.decrypt()}resolveComponent(e){return n.resolve(e)}replace(e){this.clientVisit(e,{replace:!0})}push(e){this.clientVisit(e)}clientVisit(e,{replace:t=!1}={}){let i=n.get(),s=typeof e.props=="function"?e.props(i.props):e.props??i.props;n.set({...i,...e,props:s},{replace:t,preserveScroll:e.preserveScroll,preserveState:e.preserveState})}getPrefetchParams(e,t){return{...this.getPendingVisit(e,{...t,async:!0,showProgress:!1,prefetch:!0}),...this.getVisitEvents(t)}}getPendingVisit(e,t,i={}){let s={method:"get",data:{},replace:!1,preserveScroll:!1,preserveState:!1,only:[],except:[],headers:{},errorBag:"",forceFormData:!1,queryStringArrayFormat:"brackets",async:!1,showProgress:!0,fresh:!1,reset:[],preserveUrl:!1,prefetch:!1,...t},[o,u]=Ue(e,s.data,s.method,s.forceFormData,s.queryStringArrayFormat),p={cancelled:!1,completed:!1,interrupted:!1,...s,...i,url:o,data:u};return p.prefetch&&(p.headers.Purpose="prefetch"),p}getVisitEvents(e){return{onCancelToken:e.onCancelToken||(()=>{}),onBefore:e.onBefore||(()=>{}),onStart:e.onStart||(()=>{}),onProgress:e.onProgress||(()=>{}),onFinish:e.onFinish||(()=>{}),onCancel:e.onCancel||(()=>{}),onSuccess:e.onSuccess||(()=>{}),onError:e.onError||(()=>{}),onPrefetched:e.onPrefetched||(()=>{}),onPrefetching:e.onPrefetching||(()=>{})}}loadDeferredProps(){let e=n.get()?.deferredProps;e&&Object.entries(e).forEach(([t,i])=>{this.reload({only:i})})}};var lt={buildDOMElement(r){let e=document.createElement("template");e.innerHTML=r;let t=e.content.firstChild;if(!r.startsWith("<script "))return t;let i=document.createElement("script");return i.innerHTML=t.innerHTML,t.getAttributeNames().forEach(s=>{i.setAttribute(s,t.getAttribute(s)||"")}),i},isInertiaManagedElement(r){return r.nodeType===Node.ELEMENT_NODE&&r.getAttribute("inertia")!==null},findMatchingElementIndex(r,e){let t=r.getAttribute("inertia");return t!==null?e.findIndex(i=>i.getAttribute("inertia")===t):-1},update:O(function(r){let e=r.map(i=>this.buildDOMElement(i));Array.from(document.head.childNodes).filter(i=>this.isInertiaManagedElement(i)).forEach(i=>{let s=this.findMatchingElementIndex(i,e);if(s===-1){i?.parentNode?.removeChild(i);return}let o=e.splice(s,1)[0];o&&!i.isEqualNode(o)&&i?.parentNode?.replaceChild(o,i)}),e.forEach(i=>document.head.appendChild(i))},1)};function me(r,e,t){let i={},s=0;function o(){let c=s+=1;return i[c]=[],c.toString()}function u(c){c===null||Object.keys(i).indexOf(c)===-1||(delete i[c],h())}function p(c){Object.keys(i).indexOf(c)===-1&&(i[c]=[])}function d(c,P=[]){c!==null&&Object.keys(i).indexOf(c)>-1&&(i[c]=P),h()}function a(){let c=e(""),P={...c?{title:`<title inertia="">${c}</title>`}:{}},x=Object.values(i).reduce((R,T)=>R.concat(T),[]).reduce((R,T)=>{if(T.indexOf("<")===-1)return R;if(T.indexOf("<title ")===0){let B=T.match(/(<title [^>]+>)(.*?)(<\/title>)/);return R.title=B?`${B[1]}${e(B[2])}${B[3]}`:T,R}let ve=T.match(/ inertia="[^"]+"/);return ve?R[ve[0]]=T:R[Object.keys(R).length]=T,R},P);return Object.values(x)}function h(){r?t(a()):lt.update(a())}return h(),{forceUpdate:h,createProvider:function(){let c=o();return{reconnect:()=>p(c),update:P=>d(c,P),disconnect:()=>u(c)}}}}var f="nprogress",w,g={minimum:.08,easing:"linear",positionUsing:"translate3d",speed:200,trickle:!0,trickleSpeed:200,showSpinner:!0,barSelector:'[role="bar"]',spinnerSelector:'[role="spinner"]',parent:"body",color:"#29d",includeCSS:!0,template:['<div class="bar" role="bar">','<div class="peg"></div>',"</div>",'<div class="spinner" role="spinner">','<div class="spinner-icon"></div>',"</div>"].join("")},A=null,ct=r=>{Object.assign(g,r),g.includeCSS&&ft(g.color),w=document.createElement("div"),w.id=f,w.innerHTML=g.template},Y=r=>{let e=$e();r=We(r,g.minimum,1),A=r===1?null:r;let t=pt(!e),i=t.querySelector(g.barSelector),s=g.speed,o=g.easing;t.offsetWidth,mt(u=>{let p=g.positionUsing==="translate3d"?{transition:`all ${s}ms ${o}`,transform:`translate3d(${_(r)}%,0,0)`}:g.positionUsing==="translate"?{transition:`all ${s}ms ${o}`,transform:`translate(${_(r)}%,0)`}:{marginLeft:`${_(r)}%`};for(let d in p)i.style[d]=p[d];if(r!==1)return setTimeout(u,s);t.style.transition="none",t.style.opacity="1",t.offsetWidth,setTimeout(()=>{t.style.transition=`all ${s}ms linear`,t.style.opacity="0",setTimeout(()=>{je(),t.style.transition="",t.style.opacity="",u()},s)},s)})},$e=()=>typeof A=="number",Be=()=>{A||Y(0);let r=function(){setTimeout(function(){A&&(Ge(),r())},g.trickleSpeed)};g.trickle&&r()},ut=r=>{!r&&!A||(Ge(.3+.5*Math.random()),Y(1))},Ge=r=>{let e=A;if(e===null)return Be();if(!(e>1))return r=typeof r=="number"?r:(()=>{let t={.1:[0,.2],.04:[.2,.5],.02:[.5,.8],.005:[.8,.99]};for(let i in t)if(e>=t[i][0]&&e<t[i][1])return parseFloat(i);return 0})(),Y(We(e+r,0,.994))},pt=r=>{if(dt())return document.getElementById(f);document.documentElement.classList.add(`${f}-busy`);let e=w.querySelector(g.barSelector),t=r?"-100":_(A||0),i=Ke();return e.style.transition="all 0 linear",e.style.transform=`translate3d(${t}%,0,0)`,g.showSpinner||w.querySelector(g.spinnerSelector)?.remove(),i!==document.body&&i.classList.add(`${f}-custom-parent`),i.appendChild(w),w},Ke=()=>ht(g.parent)?g.parent:document.querySelector(g.parent),je=()=>{document.documentElement.classList.remove(`${f}-busy`),Ke().classList.remove(`${f}-custom-parent`),w?.remove()},dt=()=>document.getElementById(f)!==null,ht=r=>typeof HTMLElement=="object"?r instanceof HTMLElement:r&&typeof r=="object"&&r.nodeType===1&&typeof r.nodeName=="string";function We(r,e,t){return r<e?e:r>t?t:r}var _=r=>(-1+r)*100,mt=(()=>{let r=[],e=()=>{let t=r.shift();t&&t(e)};return t=>{r.push(t),r.length===1&&e()}})(),ft=r=>{let e=document.createElement("style");e.textContent=`
2
- #${f} {
1
+ "use strict";
2
+ var __create = Object.create;
3
+ var __defProp = Object.defineProperty;
4
+ var __getOwnPropDesc = Object.getOwnPropertyDescriptor;
5
+ var __getOwnPropNames = Object.getOwnPropertyNames;
6
+ var __getProtoOf = Object.getPrototypeOf;
7
+ var __hasOwnProp = Object.prototype.hasOwnProperty;
8
+ var __export = (target, all) => {
9
+ for (var name in all)
10
+ __defProp(target, name, { get: all[name], enumerable: true });
11
+ };
12
+ var __copyProps = (to, from, except, desc) => {
13
+ if (from && typeof from === "object" || typeof from === "function") {
14
+ for (let key of __getOwnPropNames(from))
15
+ if (!__hasOwnProp.call(to, key) && key !== except)
16
+ __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable });
17
+ }
18
+ return to;
19
+ };
20
+ var __toESM = (mod, isNodeMode, target) => (target = mod != null ? __create(__getProtoOf(mod)) : {}, __copyProps(
21
+ // If the importer is in node compatibility mode or this is not an ESM
22
+ // file that has been converted to a CommonJS file using a Babel-
23
+ // compatible transform (i.e. "__esModule" has not been set), then set
24
+ // "default" to the CommonJS "module.exports" for node compatibility.
25
+ isNodeMode || !mod || !mod.__esModule ? __defProp(target, "default", { value: mod, enumerable: true }) : target,
26
+ mod
27
+ ));
28
+ var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod);
29
+
30
+ // src/index.ts
31
+ var index_exports = {};
32
+ __export(index_exports, {
33
+ createHeadManager: () => createHeadManager,
34
+ hideProgress: () => hide,
35
+ hrefToUrl: () => hrefToUrl,
36
+ mergeDataIntoQueryString: () => mergeDataIntoQueryString,
37
+ revealProgress: () => reveal,
38
+ router: () => router,
39
+ setupProgress: () => setupProgress,
40
+ shouldIntercept: () => shouldIntercept,
41
+ urlWithoutHash: () => urlWithoutHash
42
+ });
43
+ module.exports = __toCommonJS(index_exports);
44
+
45
+ // src/debounce.ts
46
+ function debounce(fn, delay) {
47
+ let timeoutID;
48
+ return function(...args) {
49
+ clearTimeout(timeoutID);
50
+ timeoutID = setTimeout(() => fn.apply(this, args), delay);
51
+ };
52
+ }
53
+
54
+ // src/events.ts
55
+ function fireEvent(name, options) {
56
+ return document.dispatchEvent(new CustomEvent(`inertia:${name}`, options));
57
+ }
58
+ var fireBeforeEvent = (visit) => {
59
+ return fireEvent("before", { cancelable: true, detail: { visit } });
60
+ };
61
+ var fireErrorEvent = (errors) => {
62
+ return fireEvent("error", { detail: { errors } });
63
+ };
64
+ var fireExceptionEvent = (exception) => {
65
+ return fireEvent("exception", { cancelable: true, detail: { exception } });
66
+ };
67
+ var fireFinishEvent = (visit) => {
68
+ return fireEvent("finish", { detail: { visit } });
69
+ };
70
+ var fireInvalidEvent = (response) => {
71
+ return fireEvent("invalid", { cancelable: true, detail: { response } });
72
+ };
73
+ var fireNavigateEvent = (page2) => {
74
+ return fireEvent("navigate", { detail: { page: page2 } });
75
+ };
76
+ var fireProgressEvent = (progress3) => {
77
+ return fireEvent("progress", { detail: { progress: progress3 } });
78
+ };
79
+ var fireStartEvent = (visit) => {
80
+ return fireEvent("start", { detail: { visit } });
81
+ };
82
+ var fireSuccessEvent = (page2) => {
83
+ return fireEvent("success", { detail: { page: page2 } });
84
+ };
85
+ var firePrefetchedEvent = (response, visit) => {
86
+ return fireEvent("prefetched", { detail: { fetchedAt: Date.now(), response: response.data, visit } });
87
+ };
88
+ var firePrefetchingEvent = (visit) => {
89
+ return fireEvent("prefetching", { detail: { visit } });
90
+ };
91
+
92
+ // src/sessionStorage.ts
93
+ var SessionStorage = class {
94
+ static set(key, value) {
95
+ if (typeof window !== "undefined") {
96
+ window.sessionStorage.setItem(key, JSON.stringify(value));
97
+ }
98
+ }
99
+ static get(key) {
100
+ if (typeof window !== "undefined") {
101
+ return JSON.parse(window.sessionStorage.getItem(key) || "null");
102
+ }
103
+ }
104
+ static merge(key, value) {
105
+ const existing = this.get(key);
106
+ if (existing === null) {
107
+ this.set(key, value);
108
+ } else {
109
+ this.set(key, { ...existing, ...value });
110
+ }
111
+ }
112
+ static remove(key) {
113
+ if (typeof window !== "undefined") {
114
+ window.sessionStorage.removeItem(key);
115
+ }
116
+ }
117
+ static removeNested(key, nestedKey) {
118
+ const existing = this.get(key);
119
+ if (existing !== null) {
120
+ delete existing[nestedKey];
121
+ this.set(key, existing);
122
+ }
123
+ }
124
+ static exists(key) {
125
+ try {
126
+ return this.get(key) !== null;
127
+ } catch (error) {
128
+ return false;
129
+ }
130
+ }
131
+ static clear() {
132
+ if (typeof window !== "undefined") {
133
+ window.sessionStorage.clear();
134
+ }
135
+ }
136
+ };
137
+ SessionStorage.locationVisitKey = "inertiaLocationVisit";
138
+
139
+ // src/encryption.ts
140
+ var encryptHistory = async (data) => {
141
+ if (typeof window === "undefined") {
142
+ throw new Error("Unable to encrypt history");
143
+ }
144
+ const iv = getIv();
145
+ const storedKey = await getKeyFromSessionStorage();
146
+ const key = await getOrCreateKey(storedKey);
147
+ if (!key) {
148
+ throw new Error("Unable to encrypt history");
149
+ }
150
+ const encrypted = await encryptData(iv, key, data);
151
+ return encrypted;
152
+ };
153
+ var historySessionStorageKeys = {
154
+ key: "historyKey",
155
+ iv: "historyIv"
156
+ };
157
+ var decryptHistory = async (data) => {
158
+ const iv = getIv();
159
+ const storedKey = await getKeyFromSessionStorage();
160
+ if (!storedKey) {
161
+ throw new Error("Unable to decrypt history");
162
+ }
163
+ return await decryptData(iv, storedKey, data);
164
+ };
165
+ var encryptData = async (iv, key, data) => {
166
+ if (typeof window === "undefined") {
167
+ throw new Error("Unable to encrypt history");
168
+ }
169
+ if (typeof window.crypto.subtle === "undefined") {
170
+ console.warn("Encryption is not supported in this environment. SSL is required.");
171
+ return Promise.resolve(data);
172
+ }
173
+ const textEncoder = new TextEncoder();
174
+ const str = JSON.stringify(data);
175
+ const encoded = new Uint8Array(str.length * 3);
176
+ const result = textEncoder.encodeInto(str, encoded);
177
+ return window.crypto.subtle.encrypt(
178
+ {
179
+ name: "AES-GCM",
180
+ iv
181
+ },
182
+ key,
183
+ encoded.subarray(0, result.written)
184
+ );
185
+ };
186
+ var decryptData = async (iv, key, data) => {
187
+ if (typeof window.crypto.subtle === "undefined") {
188
+ console.warn("Decryption is not supported in this environment. SSL is required.");
189
+ return Promise.resolve(data);
190
+ }
191
+ const decrypted = await window.crypto.subtle.decrypt(
192
+ {
193
+ name: "AES-GCM",
194
+ iv
195
+ },
196
+ key,
197
+ data
198
+ );
199
+ return JSON.parse(new TextDecoder().decode(decrypted));
200
+ };
201
+ var getIv = () => {
202
+ const ivString = SessionStorage.get(historySessionStorageKeys.iv);
203
+ if (ivString) {
204
+ return new Uint8Array(ivString);
205
+ }
206
+ const iv = window.crypto.getRandomValues(new Uint8Array(12));
207
+ SessionStorage.set(historySessionStorageKeys.iv, Array.from(iv));
208
+ return iv;
209
+ };
210
+ var createKey = async () => {
211
+ if (typeof window.crypto.subtle === "undefined") {
212
+ console.warn("Encryption is not supported in this environment. SSL is required.");
213
+ return Promise.resolve(null);
214
+ }
215
+ return window.crypto.subtle.generateKey(
216
+ {
217
+ name: "AES-GCM",
218
+ length: 256
219
+ },
220
+ true,
221
+ ["encrypt", "decrypt"]
222
+ );
223
+ };
224
+ var saveKey = async (key) => {
225
+ if (typeof window.crypto.subtle === "undefined") {
226
+ console.warn("Encryption is not supported in this environment. SSL is required.");
227
+ return Promise.resolve();
228
+ }
229
+ const keyData = await window.crypto.subtle.exportKey("raw", key);
230
+ SessionStorage.set(historySessionStorageKeys.key, Array.from(new Uint8Array(keyData)));
231
+ };
232
+ var getOrCreateKey = async (key) => {
233
+ if (key) {
234
+ return key;
235
+ }
236
+ const newKey = await createKey();
237
+ if (!newKey) {
238
+ return null;
239
+ }
240
+ await saveKey(newKey);
241
+ return newKey;
242
+ };
243
+ var getKeyFromSessionStorage = async () => {
244
+ const stringKey = SessionStorage.get(historySessionStorageKeys.key);
245
+ if (!stringKey) {
246
+ return null;
247
+ }
248
+ const key = await window.crypto.subtle.importKey(
249
+ "raw",
250
+ new Uint8Array(stringKey),
251
+ {
252
+ name: "AES-GCM",
253
+ length: 256
254
+ },
255
+ true,
256
+ ["encrypt", "decrypt"]
257
+ );
258
+ return key;
259
+ };
260
+
261
+ // src/scroll.ts
262
+ var Scroll = class {
263
+ static save() {
264
+ history.saveScrollPositions(
265
+ Array.from(this.regions()).map((region) => ({
266
+ top: region.scrollTop,
267
+ left: region.scrollLeft
268
+ }))
269
+ );
270
+ }
271
+ static regions() {
272
+ return document.querySelectorAll("[scroll-region]");
273
+ }
274
+ static reset() {
275
+ const anchorHash = typeof window !== "undefined" ? window.location.hash : null;
276
+ if (!anchorHash) {
277
+ window.scrollTo(0, 0);
278
+ }
279
+ this.regions().forEach((region) => {
280
+ if (typeof region.scrollTo === "function") {
281
+ region.scrollTo(0, 0);
282
+ } else {
283
+ region.scrollTop = 0;
284
+ region.scrollLeft = 0;
285
+ }
286
+ });
287
+ this.save();
288
+ if (anchorHash) {
289
+ setTimeout(() => {
290
+ const anchorElement = document.getElementById(anchorHash.slice(1));
291
+ anchorElement ? anchorElement.scrollIntoView() : window.scrollTo(0, 0);
292
+ });
293
+ }
294
+ }
295
+ static restore(scrollRegions) {
296
+ this.restoreDocument();
297
+ this.regions().forEach((region, index) => {
298
+ const scrollPosition = scrollRegions[index];
299
+ if (!scrollPosition) {
300
+ return;
301
+ }
302
+ if (typeof region.scrollTo === "function") {
303
+ region.scrollTo(scrollPosition.left, scrollPosition.top);
304
+ } else {
305
+ region.scrollTop = scrollPosition.top;
306
+ region.scrollLeft = scrollPosition.left;
307
+ }
308
+ });
309
+ }
310
+ static restoreDocument() {
311
+ const scrollPosition = history.getDocumentScrollPosition();
312
+ if (typeof window !== "undefined") {
313
+ window.scrollTo(scrollPosition.left, scrollPosition.top);
314
+ }
315
+ }
316
+ static onScroll(event) {
317
+ const target = event.target;
318
+ if (typeof target.hasAttribute === "function" && target.hasAttribute("scroll-region")) {
319
+ this.save();
320
+ }
321
+ }
322
+ static onWindowScroll() {
323
+ history.saveDocumentScrollPosition({
324
+ top: window.scrollY,
325
+ left: window.scrollX
326
+ });
327
+ }
328
+ };
329
+
330
+ // src/url.ts
331
+ var qs = __toESM(require("qs"), 1);
332
+
333
+ // src/files.ts
334
+ function hasFiles(data) {
335
+ return data instanceof File || data instanceof Blob || data instanceof FileList && data.length > 0 || data instanceof FormData && Array.from(data.values()).some((value) => hasFiles(value)) || typeof data === "object" && data !== null && Object.values(data).some((value) => hasFiles(value));
336
+ }
337
+
338
+ // src/formData.ts
339
+ var isFormData = (value) => value instanceof FormData;
340
+ function objectToFormData(source, form = new FormData(), parentKey = null) {
341
+ source = source || {};
342
+ for (const key in source) {
343
+ if (Object.prototype.hasOwnProperty.call(source, key)) {
344
+ append(form, composeKey(parentKey, key), source[key]);
345
+ }
346
+ }
347
+ return form;
348
+ }
349
+ function composeKey(parent, key) {
350
+ return parent ? parent + "[" + key + "]" : key;
351
+ }
352
+ function append(form, key, value) {
353
+ if (Array.isArray(value)) {
354
+ return Array.from(value.keys()).forEach((index) => append(form, composeKey(key, index.toString()), value[index]));
355
+ } else if (value instanceof Date) {
356
+ return form.append(key, value.toISOString());
357
+ } else if (value instanceof File) {
358
+ return form.append(key, value, value.name);
359
+ } else if (value instanceof Blob) {
360
+ return form.append(key, value);
361
+ } else if (typeof value === "boolean") {
362
+ return form.append(key, value ? "1" : "0");
363
+ } else if (typeof value === "string") {
364
+ return form.append(key, value);
365
+ } else if (typeof value === "number") {
366
+ return form.append(key, `${value}`);
367
+ } else if (value === null || value === void 0) {
368
+ return form.append(key, "");
369
+ }
370
+ objectToFormData(value, form, key);
371
+ }
372
+
373
+ // src/url.ts
374
+ function hrefToUrl(href) {
375
+ return new URL(href.toString(), typeof window === "undefined" ? void 0 : window.location.toString());
376
+ }
377
+ var transformUrlAndData = (href, data, method, forceFormData, queryStringArrayFormat) => {
378
+ let url = typeof href === "string" ? hrefToUrl(href) : href;
379
+ if ((hasFiles(data) || forceFormData) && !isFormData(data)) {
380
+ data = objectToFormData(data);
381
+ }
382
+ if (isFormData(data)) {
383
+ return [url, data];
384
+ }
385
+ const [_href, _data] = mergeDataIntoQueryString(method, url, data, queryStringArrayFormat);
386
+ return [hrefToUrl(_href), _data];
387
+ };
388
+ function mergeDataIntoQueryString(method, href, data, qsArrayFormat = "brackets") {
389
+ const hasHost = /^[a-z][a-z0-9+.-]*:\/\//i.test(href.toString());
390
+ const hasAbsolutePath = hasHost || href.toString().startsWith("/");
391
+ const hasRelativePath = !hasAbsolutePath && !href.toString().startsWith("#") && !href.toString().startsWith("?");
392
+ const hasRelativePathWithDotPrefix = /^[.]{1,2}([/]|$)/.test(href.toString());
393
+ const hasSearch = href.toString().includes("?") || method === "get" && Object.keys(data).length;
394
+ const hasHash = href.toString().includes("#");
395
+ const url = new URL(href.toString(), typeof window === "undefined" ? "http://localhost" : window.location.toString());
396
+ if (method === "get" && Object.keys(data).length) {
397
+ const parseOptions = { ignoreQueryPrefix: true, parseArrays: false };
398
+ url.search = qs.stringify(
399
+ { ...qs.parse(url.search, parseOptions), ...data },
400
+ {
401
+ encodeValuesOnly: true,
402
+ arrayFormat: qsArrayFormat
403
+ }
404
+ );
405
+ data = {};
406
+ }
407
+ return [
408
+ [
409
+ hasHost ? `${url.protocol}//${url.host}` : "",
410
+ hasAbsolutePath ? url.pathname : "",
411
+ hasRelativePath ? url.pathname.substring(hasRelativePathWithDotPrefix ? 0 : 1) : "",
412
+ hasSearch ? url.search : "",
413
+ hasHash ? url.hash : ""
414
+ ].join(""),
415
+ data
416
+ ];
417
+ }
418
+ function urlWithoutHash(url) {
419
+ url = new URL(url.href);
420
+ url.hash = "";
421
+ return url;
422
+ }
423
+ var setHashIfSameUrl = (originUrl, destinationUrl) => {
424
+ if (originUrl.hash && !destinationUrl.hash && urlWithoutHash(originUrl).href === destinationUrl.href) {
425
+ destinationUrl.hash = originUrl.hash;
426
+ }
427
+ };
428
+ var isSameUrlWithoutHash = (url1, url2) => {
429
+ return urlWithoutHash(url1).href === urlWithoutHash(url2).href;
430
+ };
431
+
432
+ // src/page.ts
433
+ var CurrentPage = class {
434
+ constructor() {
435
+ this.componentId = {};
436
+ this.listeners = [];
437
+ this.isFirstPageLoad = true;
438
+ this.cleared = false;
439
+ }
440
+ init({ initialPage, swapComponent, resolveComponent }) {
441
+ this.page = initialPage;
442
+ this.swapComponent = swapComponent;
443
+ this.resolveComponent = resolveComponent;
444
+ return this;
445
+ }
446
+ set(page2, {
447
+ replace = false,
448
+ preserveScroll = false,
449
+ preserveState = false
450
+ } = {}) {
451
+ this.componentId = {};
452
+ const componentId = this.componentId;
453
+ if (page2.clearHistory) {
454
+ history.clear();
455
+ }
456
+ return this.resolve(page2.component).then((component) => {
457
+ if (componentId !== this.componentId) {
458
+ return;
459
+ }
460
+ page2.rememberedState ?? (page2.rememberedState = {});
461
+ const location = typeof window !== "undefined" ? window.location : new URL(page2.url);
462
+ replace = replace || isSameUrlWithoutHash(hrefToUrl(page2.url), location);
463
+ return new Promise((resolve) => {
464
+ replace ? history.replaceState(page2, () => resolve(null)) : history.pushState(page2, () => resolve(null));
465
+ }).then(() => {
466
+ const isNewComponent = !this.isTheSame(page2);
467
+ this.page = page2;
468
+ this.cleared = false;
469
+ if (isNewComponent) {
470
+ this.fireEventsFor("newComponent");
471
+ }
472
+ if (this.isFirstPageLoad) {
473
+ this.fireEventsFor("firstLoad");
474
+ }
475
+ this.isFirstPageLoad = false;
476
+ return this.swap({ component, page: page2, preserveState }).then(() => {
477
+ if (!preserveScroll) {
478
+ Scroll.reset();
479
+ }
480
+ eventHandler.fireInternalEvent("loadDeferredProps");
481
+ if (!replace) {
482
+ fireNavigateEvent(page2);
483
+ }
484
+ });
485
+ });
486
+ });
487
+ }
488
+ setQuietly(page2, {
489
+ preserveState = false
490
+ } = {}) {
491
+ return this.resolve(page2.component).then((component) => {
492
+ this.page = page2;
493
+ this.cleared = false;
494
+ history.setCurrent(page2);
495
+ return this.swap({ component, page: page2, preserveState });
496
+ });
497
+ }
498
+ clear() {
499
+ this.cleared = true;
500
+ }
501
+ isCleared() {
502
+ return this.cleared;
503
+ }
504
+ get() {
505
+ return this.page;
506
+ }
507
+ merge(data) {
508
+ this.page = { ...this.page, ...data };
509
+ }
510
+ setUrlHash(hash) {
511
+ if (!this.page.url.includes(hash)) {
512
+ this.page.url += hash;
513
+ }
514
+ }
515
+ remember(data) {
516
+ this.page.rememberedState = data;
517
+ }
518
+ swap({
519
+ component,
520
+ page: page2,
521
+ preserveState
522
+ }) {
523
+ return this.swapComponent({ component, page: page2, preserveState });
524
+ }
525
+ resolve(component) {
526
+ return Promise.resolve(this.resolveComponent(component));
527
+ }
528
+ isTheSame(page2) {
529
+ return this.page.component === page2.component;
530
+ }
531
+ on(event, callback) {
532
+ this.listeners.push({ event, callback });
533
+ return () => {
534
+ this.listeners = this.listeners.filter((listener) => listener.event !== event && listener.callback !== callback);
535
+ };
536
+ }
537
+ fireEventsFor(event) {
538
+ this.listeners.filter((listener) => listener.event === event).forEach((listener) => listener.callback());
539
+ }
540
+ };
541
+ var page = new CurrentPage();
542
+
543
+ // src/queue.ts
544
+ var Queue = class {
545
+ constructor() {
546
+ this.items = [];
547
+ this.processingPromise = null;
548
+ }
549
+ add(item) {
550
+ this.items.push(item);
551
+ return this.process();
552
+ }
553
+ process() {
554
+ this.processingPromise ?? (this.processingPromise = this.processNext().then(() => {
555
+ this.processingPromise = null;
556
+ }));
557
+ return this.processingPromise;
558
+ }
559
+ processNext() {
560
+ const next = this.items.shift();
561
+ if (next) {
562
+ return Promise.resolve(next()).then(() => this.processNext());
563
+ }
564
+ return Promise.resolve();
565
+ }
566
+ };
567
+
568
+ // src/history.ts
569
+ var isServer = typeof window === "undefined";
570
+ var queue = new Queue();
571
+ var isChromeIOS = !isServer && /CriOS/.test(window.navigator.userAgent);
572
+ var History = class {
573
+ constructor() {
574
+ this.rememberedState = "rememberedState";
575
+ this.scrollRegions = "scrollRegions";
576
+ this.preserveUrl = false;
577
+ this.current = {};
578
+ // We need initialState for `restore`
579
+ this.initialState = null;
580
+ }
581
+ remember(data, key) {
582
+ this.replaceState({
583
+ ...page.get(),
584
+ rememberedState: {
585
+ ...page.get()?.rememberedState ?? {},
586
+ [key]: data
587
+ }
588
+ });
589
+ }
590
+ restore(key) {
591
+ if (!isServer) {
592
+ return this.current[this.rememberedState] ? this.current[this.rememberedState]?.[key] : this.initialState?.[this.rememberedState]?.[key];
593
+ }
594
+ }
595
+ pushState(page2, cb = null) {
596
+ if (isServer) {
597
+ return;
598
+ }
599
+ if (this.preserveUrl) {
600
+ cb && cb();
601
+ return;
602
+ }
603
+ this.current = page2;
604
+ queue.add(() => {
605
+ return this.getPageData(page2).then((data) => {
606
+ const doPush = () => {
607
+ this.doPushState({ page: data }, page2.url);
608
+ cb && cb();
609
+ };
610
+ if (isChromeIOS) {
611
+ setTimeout(doPush);
612
+ } else {
613
+ doPush();
614
+ }
615
+ });
616
+ });
617
+ }
618
+ getPageData(page2) {
619
+ return new Promise((resolve) => {
620
+ return page2.encryptHistory ? encryptHistory(page2).then(resolve) : resolve(page2);
621
+ });
622
+ }
623
+ processQueue() {
624
+ return queue.process();
625
+ }
626
+ decrypt(page2 = null) {
627
+ if (isServer) {
628
+ return Promise.resolve(page2 ?? page.get());
629
+ }
630
+ const pageData = page2 ?? window.history.state?.page;
631
+ return this.decryptPageData(pageData).then((data) => {
632
+ if (!data) {
633
+ throw new Error("Unable to decrypt history");
634
+ }
635
+ if (this.initialState === null) {
636
+ this.initialState = data ?? void 0;
637
+ } else {
638
+ this.current = data ?? {};
639
+ }
640
+ return data;
641
+ });
642
+ }
643
+ decryptPageData(pageData) {
644
+ return pageData instanceof ArrayBuffer ? decryptHistory(pageData) : Promise.resolve(pageData);
645
+ }
646
+ saveScrollPositions(scrollRegions) {
647
+ queue.add(() => {
648
+ return Promise.resolve().then(() => {
649
+ if (!window.history.state?.page) {
650
+ return;
651
+ }
652
+ this.doReplaceState(
653
+ {
654
+ page: window.history.state.page,
655
+ scrollRegions
656
+ }
657
+ );
658
+ });
659
+ });
660
+ }
661
+ saveDocumentScrollPosition(scrollRegion) {
662
+ queue.add(() => {
663
+ return Promise.resolve().then(() => {
664
+ if (!window.history.state?.page) {
665
+ return;
666
+ }
667
+ this.doReplaceState(
668
+ {
669
+ page: window.history.state.page,
670
+ documentScrollPosition: scrollRegion
671
+ }
672
+ );
673
+ });
674
+ });
675
+ }
676
+ getScrollRegions() {
677
+ return window.history.state?.scrollRegions || [];
678
+ }
679
+ getDocumentScrollPosition() {
680
+ return window.history.state?.documentScrollPosition || { top: 0, left: 0 };
681
+ }
682
+ replaceState(page2, cb = null) {
683
+ page.merge(page2);
684
+ if (isServer) {
685
+ return;
686
+ }
687
+ if (this.preserveUrl) {
688
+ cb && cb();
689
+ return;
690
+ }
691
+ this.current = page2;
692
+ queue.add(() => {
693
+ return this.getPageData(page2).then((data) => {
694
+ const doReplace = () => {
695
+ this.doReplaceState({ page: data }, page2.url);
696
+ cb && cb();
697
+ };
698
+ if (isChromeIOS) {
699
+ setTimeout(doReplace);
700
+ } else {
701
+ doReplace();
702
+ }
703
+ });
704
+ });
705
+ }
706
+ doReplaceState(data, url) {
707
+ window.history.replaceState(
708
+ {
709
+ ...data,
710
+ scrollRegions: data.scrollRegions ?? window.history.state?.scrollRegions,
711
+ documentScrollPosition: data.documentScrollPosition ?? window.history.state?.documentScrollPosition
712
+ },
713
+ "",
714
+ url
715
+ );
716
+ }
717
+ doPushState(data, url) {
718
+ window.history.pushState(data, "", url);
719
+ }
720
+ getState(key, defaultValue) {
721
+ return this.current?.[key] ?? defaultValue;
722
+ }
723
+ deleteState(key) {
724
+ if (this.current[key] !== void 0) {
725
+ delete this.current[key];
726
+ this.replaceState(this.current);
727
+ }
728
+ }
729
+ hasAnyState() {
730
+ return !!this.getAllState();
731
+ }
732
+ clear() {
733
+ SessionStorage.remove(historySessionStorageKeys.key);
734
+ SessionStorage.remove(historySessionStorageKeys.iv);
735
+ }
736
+ setCurrent(page2) {
737
+ this.current = page2;
738
+ }
739
+ isValidState(state) {
740
+ return !!state.page;
741
+ }
742
+ getAllState() {
743
+ return this.current;
744
+ }
745
+ };
746
+ if (typeof window !== "undefined" && window.history.scrollRestoration) {
747
+ window.history.scrollRestoration = "manual";
748
+ }
749
+ var history = new History();
750
+
751
+ // src/eventHandler.ts
752
+ var EventHandler = class {
753
+ constructor() {
754
+ this.internalListeners = [];
755
+ }
756
+ init() {
757
+ if (typeof window !== "undefined") {
758
+ window.addEventListener("popstate", this.handlePopstateEvent.bind(this));
759
+ window.addEventListener("scroll", debounce(Scroll.onWindowScroll.bind(Scroll), 100), true);
760
+ }
761
+ if (typeof document !== "undefined") {
762
+ document.addEventListener("scroll", debounce(Scroll.onScroll.bind(Scroll), 100), true);
763
+ }
764
+ }
765
+ onGlobalEvent(type, callback) {
766
+ const listener = (event) => {
767
+ const response = callback(event);
768
+ if (event.cancelable && !event.defaultPrevented && response === false) {
769
+ event.preventDefault();
770
+ }
771
+ };
772
+ return this.registerListener(`inertia:${type}`, listener);
773
+ }
774
+ on(event, callback) {
775
+ this.internalListeners.push({ event, listener: callback });
776
+ return () => {
777
+ this.internalListeners = this.internalListeners.filter((listener) => listener.listener !== callback);
778
+ };
779
+ }
780
+ onMissingHistoryItem() {
781
+ page.clear();
782
+ this.fireInternalEvent("missingHistoryItem");
783
+ }
784
+ fireInternalEvent(event) {
785
+ this.internalListeners.filter((listener) => listener.event === event).forEach((listener) => listener.listener());
786
+ }
787
+ registerListener(type, listener) {
788
+ document.addEventListener(type, listener);
789
+ return () => document.removeEventListener(type, listener);
790
+ }
791
+ handlePopstateEvent(event) {
792
+ const state = event.state || null;
793
+ if (state === null) {
794
+ const url = hrefToUrl(page.get().url);
795
+ url.hash = window.location.hash;
796
+ history.replaceState({ ...page.get(), url: url.href });
797
+ Scroll.reset();
798
+ return;
799
+ }
800
+ if (!history.isValidState(state)) {
801
+ return this.onMissingHistoryItem();
802
+ }
803
+ history.decrypt(state.page).then((data) => {
804
+ if (page.get().version !== data.version) {
805
+ this.onMissingHistoryItem();
806
+ return;
807
+ }
808
+ router.cancelAll();
809
+ page.setQuietly(data, { preserveState: false }).then(() => {
810
+ window.requestAnimationFrame(() => {
811
+ Scroll.restore(history.getScrollRegions());
812
+ });
813
+ fireNavigateEvent(page.get());
814
+ });
815
+ }).catch(() => {
816
+ this.onMissingHistoryItem();
817
+ });
818
+ }
819
+ };
820
+ var eventHandler = new EventHandler();
821
+
822
+ // src/navigationType.ts
823
+ var NavigationType = class {
824
+ constructor() {
825
+ this.type = this.resolveType();
826
+ }
827
+ resolveType() {
828
+ if (typeof window === "undefined") {
829
+ return "navigate";
830
+ }
831
+ if (window.performance && window.performance.getEntriesByType && window.performance.getEntriesByType("navigation").length > 0) {
832
+ return window.performance.getEntriesByType("navigation")[0].type;
833
+ }
834
+ return "navigate";
835
+ }
836
+ get() {
837
+ return this.type;
838
+ }
839
+ isBackForward() {
840
+ return this.type === "back_forward";
841
+ }
842
+ isReload() {
843
+ return this.type === "reload";
844
+ }
845
+ };
846
+ var navigationType = new NavigationType();
847
+
848
+ // src/initialVisit.ts
849
+ var InitialVisit = class {
850
+ static handle() {
851
+ this.clearRememberedStateOnReload();
852
+ const scenarios = [this.handleBackForward, this.handleLocation, this.handleDefault];
853
+ scenarios.find((handler) => handler.bind(this)());
854
+ }
855
+ static clearRememberedStateOnReload() {
856
+ if (navigationType.isReload()) {
857
+ history.deleteState(history.rememberedState);
858
+ }
859
+ }
860
+ static handleBackForward() {
861
+ if (!navigationType.isBackForward() || !history.hasAnyState()) {
862
+ return false;
863
+ }
864
+ const scrollRegions = history.getScrollRegions();
865
+ history.decrypt().then((data) => {
866
+ page.set(data, { preserveScroll: true, preserveState: true }).then(() => {
867
+ Scroll.restore(scrollRegions);
868
+ fireNavigateEvent(page.get());
869
+ });
870
+ }).catch(() => {
871
+ eventHandler.onMissingHistoryItem();
872
+ });
873
+ return true;
874
+ }
875
+ /**
876
+ * @link https://inertiajs.com/redirects#external-redirects
877
+ */
878
+ static handleLocation() {
879
+ if (!SessionStorage.exists(SessionStorage.locationVisitKey)) {
880
+ return false;
881
+ }
882
+ const locationVisit = SessionStorage.get(SessionStorage.locationVisitKey) || {};
883
+ SessionStorage.remove(SessionStorage.locationVisitKey);
884
+ if (typeof window !== "undefined") {
885
+ page.setUrlHash(window.location.hash);
886
+ }
887
+ history.decrypt(page.get()).then(() => {
888
+ const rememberedState = history.getState(history.rememberedState, {});
889
+ const scrollRegions = history.getScrollRegions();
890
+ page.remember(rememberedState);
891
+ page.set(page.get(), {
892
+ preserveScroll: locationVisit.preserveScroll,
893
+ preserveState: true
894
+ }).then(() => {
895
+ if (locationVisit.preserveScroll) {
896
+ Scroll.restore(scrollRegions);
897
+ }
898
+ fireNavigateEvent(page.get());
899
+ });
900
+ }).catch(() => {
901
+ eventHandler.onMissingHistoryItem();
902
+ });
903
+ return true;
904
+ }
905
+ static handleDefault() {
906
+ if (typeof window !== "undefined") {
907
+ page.setUrlHash(window.location.hash);
908
+ }
909
+ page.set(page.get(), { preserveScroll: true, preserveState: true }).then(() => {
910
+ if (navigationType.isReload()) {
911
+ Scroll.restore(history.getScrollRegions());
912
+ }
913
+ fireNavigateEvent(page.get());
914
+ });
915
+ }
916
+ };
917
+
918
+ // src/poll.ts
919
+ var Poll = class {
920
+ constructor(interval, cb, options) {
921
+ this.id = null;
922
+ this.throttle = false;
923
+ this.keepAlive = false;
924
+ this.cbCount = 0;
925
+ this.keepAlive = options.keepAlive ?? false;
926
+ this.cb = cb;
927
+ this.interval = interval;
928
+ if (options.autoStart ?? true) {
929
+ this.start();
930
+ }
931
+ }
932
+ stop() {
933
+ if (this.id) {
934
+ clearInterval(this.id);
935
+ }
936
+ }
937
+ start() {
938
+ if (typeof window === "undefined") {
939
+ return;
940
+ }
941
+ this.stop();
942
+ this.id = window.setInterval(() => {
943
+ if (!this.throttle || this.cbCount % 10 === 0) {
944
+ this.cb();
945
+ }
946
+ if (this.throttle) {
947
+ this.cbCount++;
948
+ }
949
+ }, this.interval);
950
+ }
951
+ isInBackground(hidden) {
952
+ this.throttle = this.keepAlive ? false : hidden;
953
+ if (this.throttle) {
954
+ this.cbCount = 0;
955
+ }
956
+ }
957
+ };
958
+
959
+ // src/polls.ts
960
+ var Polls = class {
961
+ constructor() {
962
+ this.polls = [];
963
+ this.setupVisibilityListener();
964
+ }
965
+ add(interval, cb, options) {
966
+ const poll = new Poll(interval, cb, options);
967
+ this.polls.push(poll);
968
+ return {
969
+ stop: () => poll.stop(),
970
+ start: () => poll.start()
971
+ };
972
+ }
973
+ clear() {
974
+ this.polls.forEach((poll) => poll.stop());
975
+ this.polls = [];
976
+ }
977
+ setupVisibilityListener() {
978
+ if (typeof document === "undefined") {
979
+ return;
980
+ }
981
+ document.addEventListener(
982
+ "visibilitychange",
983
+ () => {
984
+ this.polls.forEach((poll) => poll.isInBackground(document.hidden));
985
+ },
986
+ false
987
+ );
988
+ }
989
+ };
990
+ var polls = new Polls();
991
+
992
+ // src/prefetched.ts
993
+ var import_es_toolkit = require("es-toolkit");
994
+
995
+ // src/objectUtils.ts
996
+ var objectsAreEqual = (obj1, obj2, excludeKeys) => {
997
+ if (obj1 === obj2) {
998
+ return true;
999
+ }
1000
+ for (const key in obj1) {
1001
+ if (excludeKeys.includes(key)) {
1002
+ continue;
1003
+ }
1004
+ if (obj1[key] === obj2[key]) {
1005
+ continue;
1006
+ }
1007
+ if (!compareValues(obj1[key], obj2[key])) {
1008
+ return false;
1009
+ }
1010
+ }
1011
+ return true;
1012
+ };
1013
+ var compareValues = (value1, value2) => {
1014
+ switch (typeof value1) {
1015
+ case "object":
1016
+ return objectsAreEqual(value1, value2, []);
1017
+ case "function":
1018
+ return value1.toString() === value2.toString();
1019
+ default:
1020
+ return value1 === value2;
1021
+ }
1022
+ };
1023
+
1024
+ // src/time.ts
1025
+ var conversionMap = {
1026
+ ms: 1,
1027
+ s: 1e3,
1028
+ m: 1e3 * 60,
1029
+ h: 1e3 * 60 * 60,
1030
+ d: 1e3 * 60 * 60 * 24
1031
+ };
1032
+ var timeToMs = (time) => {
1033
+ if (typeof time === "number") {
1034
+ return time;
1035
+ }
1036
+ for (const [unit, conversion] of Object.entries(conversionMap)) {
1037
+ if (time.endsWith(unit)) {
1038
+ return parseFloat(time) * conversion;
1039
+ }
1040
+ }
1041
+ return parseInt(time);
1042
+ };
1043
+
1044
+ // src/prefetched.ts
1045
+ var PrefetchedRequests = class {
1046
+ constructor() {
1047
+ this.cached = [];
1048
+ this.inFlightRequests = [];
1049
+ this.removalTimers = [];
1050
+ this.currentUseId = null;
1051
+ }
1052
+ add(params, sendFunc, { cacheFor }) {
1053
+ const inFlight = this.findInFlight(params);
1054
+ if (inFlight) {
1055
+ return Promise.resolve();
1056
+ }
1057
+ const existing = this.findCached(params);
1058
+ if (!params.fresh && existing && existing.staleTimestamp > Date.now()) {
1059
+ return Promise.resolve();
1060
+ }
1061
+ const [stale, expires] = this.extractStaleValues(cacheFor);
1062
+ const promise = new Promise((resolve, reject) => {
1063
+ sendFunc({
1064
+ ...params,
1065
+ onCancel: () => {
1066
+ this.remove(params);
1067
+ params.onCancel();
1068
+ reject();
1069
+ },
1070
+ onError: (error) => {
1071
+ this.remove(params);
1072
+ params.onError(error);
1073
+ reject();
1074
+ },
1075
+ onPrefetching(visitParams) {
1076
+ params.onPrefetching(visitParams);
1077
+ },
1078
+ onPrefetched(response, visit) {
1079
+ params.onPrefetched(response, visit);
1080
+ },
1081
+ onPrefetchResponse(response) {
1082
+ resolve(response);
1083
+ }
1084
+ });
1085
+ }).then((response) => {
1086
+ this.remove(params);
1087
+ this.cached.push({
1088
+ params: { ...params },
1089
+ staleTimestamp: Date.now() + stale,
1090
+ response: promise,
1091
+ singleUse: expires === 0,
1092
+ timestamp: Date.now(),
1093
+ inFlight: false
1094
+ });
1095
+ this.scheduleForRemoval(params, expires);
1096
+ this.inFlightRequests = this.inFlightRequests.filter((prefetching) => {
1097
+ return !this.paramsAreEqual(prefetching.params, params);
1098
+ });
1099
+ response.handlePrefetch();
1100
+ return response;
1101
+ });
1102
+ this.inFlightRequests.push({
1103
+ params: { ...params },
1104
+ response: promise,
1105
+ staleTimestamp: null,
1106
+ inFlight: true
1107
+ });
1108
+ return promise;
1109
+ }
1110
+ removeAll() {
1111
+ this.cached = [];
1112
+ this.removalTimers.forEach((removalTimer) => {
1113
+ clearTimeout(removalTimer.timer);
1114
+ });
1115
+ this.removalTimers = [];
1116
+ }
1117
+ remove(params) {
1118
+ this.cached = this.cached.filter((prefetched) => {
1119
+ return !this.paramsAreEqual(prefetched.params, params);
1120
+ });
1121
+ this.clearTimer(params);
1122
+ }
1123
+ extractStaleValues(cacheFor) {
1124
+ const [stale, expires] = this.cacheForToStaleAndExpires(cacheFor);
1125
+ return [timeToMs(stale), timeToMs(expires)];
1126
+ }
1127
+ cacheForToStaleAndExpires(cacheFor) {
1128
+ if (!Array.isArray(cacheFor)) {
1129
+ return [cacheFor, cacheFor];
1130
+ }
1131
+ switch (cacheFor.length) {
1132
+ case 0:
1133
+ return [0, 0];
1134
+ case 1:
1135
+ return [cacheFor[0], cacheFor[0]];
1136
+ default:
1137
+ return [cacheFor[0], cacheFor[1]];
1138
+ }
1139
+ }
1140
+ clearTimer(params) {
1141
+ const timer = this.removalTimers.find((removalTimer) => {
1142
+ return this.paramsAreEqual(removalTimer.params, params);
1143
+ });
1144
+ if (timer) {
1145
+ clearTimeout(timer.timer);
1146
+ this.removalTimers = this.removalTimers.filter((removalTimer) => removalTimer !== timer);
1147
+ }
1148
+ }
1149
+ scheduleForRemoval(params, expiresIn) {
1150
+ if (typeof window === "undefined") {
1151
+ return;
1152
+ }
1153
+ this.clearTimer(params);
1154
+ if (expiresIn > 0) {
1155
+ const timer = window.setTimeout(() => this.remove(params), expiresIn);
1156
+ this.removalTimers.push({
1157
+ params,
1158
+ timer
1159
+ });
1160
+ }
1161
+ }
1162
+ get(params) {
1163
+ return this.findCached(params) || this.findInFlight(params);
1164
+ }
1165
+ use(prefetched, params) {
1166
+ const id = `${params.url.pathname}-${Date.now()}-${Math.random().toString(36).substring(7)}`;
1167
+ this.currentUseId = id;
1168
+ return prefetched.response.then((response) => {
1169
+ if (this.currentUseId !== id) {
1170
+ return;
1171
+ }
1172
+ response.mergeParams({ ...params, onPrefetched: () => {
1173
+ } });
1174
+ this.removeSingleUseItems(params);
1175
+ return response.handle();
1176
+ });
1177
+ }
1178
+ removeSingleUseItems(params) {
1179
+ this.cached = this.cached.filter((prefetched) => {
1180
+ if (!this.paramsAreEqual(prefetched.params, params)) {
1181
+ return true;
1182
+ }
1183
+ return !prefetched.singleUse;
1184
+ });
1185
+ }
1186
+ findCached(params) {
1187
+ return this.cached.find((prefetched) => {
1188
+ return this.paramsAreEqual(prefetched.params, params);
1189
+ }) || null;
1190
+ }
1191
+ findInFlight(params) {
1192
+ return this.inFlightRequests.find((prefetched) => {
1193
+ return this.paramsAreEqual(prefetched.params, params);
1194
+ }) || null;
1195
+ }
1196
+ withoutPurposePrefetchHeader(params) {
1197
+ const newParams = (0, import_es_toolkit.cloneDeep)(params);
1198
+ if (newParams.headers["Purpose"] === "prefetch") {
1199
+ delete newParams.headers["Purpose"];
1200
+ }
1201
+ return newParams;
1202
+ }
1203
+ paramsAreEqual(params1, params2) {
1204
+ return objectsAreEqual(
1205
+ this.withoutPurposePrefetchHeader(params1),
1206
+ this.withoutPurposePrefetchHeader(params2),
1207
+ [
1208
+ "showProgress",
1209
+ "replace",
1210
+ "prefetch",
1211
+ "onBefore",
1212
+ "onStart",
1213
+ "onProgress",
1214
+ "onFinish",
1215
+ "onCancel",
1216
+ "onSuccess",
1217
+ "onError",
1218
+ "onPrefetched",
1219
+ "onCancelToken",
1220
+ "onPrefetching",
1221
+ "async"
1222
+ ]
1223
+ );
1224
+ }
1225
+ };
1226
+ var prefetchedRequests = new PrefetchedRequests();
1227
+
1228
+ // src/request.ts
1229
+ var import_axios = __toESM(require("axios"), 1);
1230
+
1231
+ // src/requestParams.ts
1232
+ var RequestParams = class _RequestParams {
1233
+ constructor(params) {
1234
+ this.callbacks = [];
1235
+ if (!params.prefetch) {
1236
+ this.params = params;
1237
+ } else {
1238
+ const wrappedCallbacks = {
1239
+ onBefore: this.wrapCallback(params, "onBefore"),
1240
+ onStart: this.wrapCallback(params, "onStart"),
1241
+ onProgress: this.wrapCallback(params, "onProgress"),
1242
+ onFinish: this.wrapCallback(params, "onFinish"),
1243
+ onCancel: this.wrapCallback(params, "onCancel"),
1244
+ onSuccess: this.wrapCallback(params, "onSuccess"),
1245
+ onError: this.wrapCallback(params, "onError"),
1246
+ onCancelToken: this.wrapCallback(params, "onCancelToken"),
1247
+ onPrefetched: this.wrapCallback(params, "onPrefetched"),
1248
+ onPrefetching: this.wrapCallback(params, "onPrefetching")
1249
+ };
1250
+ this.params = {
1251
+ ...params,
1252
+ ...wrappedCallbacks,
1253
+ onPrefetchResponse: params.onPrefetchResponse || (() => {
1254
+ })
1255
+ };
1256
+ }
1257
+ }
1258
+ static create(params) {
1259
+ return new _RequestParams(params);
1260
+ }
1261
+ data() {
1262
+ return this.params.method === "get" ? null : this.params.data;
1263
+ }
1264
+ queryParams() {
1265
+ return this.params.method === "get" ? this.params.data : {};
1266
+ }
1267
+ isPartial() {
1268
+ return this.params.only.length > 0 || this.params.except.length > 0 || this.params.reset.length > 0;
1269
+ }
1270
+ onCancelToken(cb) {
1271
+ this.params.onCancelToken({
1272
+ cancel: cb
1273
+ });
1274
+ }
1275
+ markAsFinished() {
1276
+ this.params.completed = true;
1277
+ this.params.cancelled = false;
1278
+ this.params.interrupted = false;
1279
+ }
1280
+ markAsCancelled({ cancelled = true, interrupted = false }) {
1281
+ this.params.onCancel();
1282
+ this.params.completed = false;
1283
+ this.params.cancelled = cancelled;
1284
+ this.params.interrupted = interrupted;
1285
+ }
1286
+ wasCancelledAtAll() {
1287
+ return this.params.cancelled || this.params.interrupted;
1288
+ }
1289
+ onFinish() {
1290
+ this.params.onFinish(this.params);
1291
+ }
1292
+ onStart() {
1293
+ this.params.onStart(this.params);
1294
+ }
1295
+ onPrefetching() {
1296
+ this.params.onPrefetching(this.params);
1297
+ }
1298
+ onPrefetchResponse(response) {
1299
+ if (this.params.onPrefetchResponse) {
1300
+ this.params.onPrefetchResponse(response);
1301
+ }
1302
+ }
1303
+ all() {
1304
+ return this.params;
1305
+ }
1306
+ headers() {
1307
+ const headers = {
1308
+ ...this.params.headers
1309
+ };
1310
+ if (this.isPartial()) {
1311
+ headers["X-Inertia-Partial-Component"] = page.get().component;
1312
+ }
1313
+ const only = this.params.only.concat(this.params.reset);
1314
+ if (only.length > 0) {
1315
+ headers["X-Inertia-Partial-Data"] = only.join(",");
1316
+ }
1317
+ if (this.params.except.length > 0) {
1318
+ headers["X-Inertia-Partial-Except"] = this.params.except.join(",");
1319
+ }
1320
+ if (this.params.reset.length > 0) {
1321
+ headers["X-Inertia-Reset"] = this.params.reset.join(",");
1322
+ }
1323
+ if (this.params.errorBag && this.params.errorBag.length > 0) {
1324
+ headers["X-Inertia-Error-Bag"] = this.params.errorBag;
1325
+ }
1326
+ return headers;
1327
+ }
1328
+ setPreserveOptions(page2) {
1329
+ this.params.preserveScroll = this.resolvePreserveOption(this.params.preserveScroll, page2);
1330
+ this.params.preserveState = this.resolvePreserveOption(this.params.preserveState, page2);
1331
+ }
1332
+ runCallbacks() {
1333
+ this.callbacks.forEach(({ name, args }) => {
1334
+ this.params[name](...args);
1335
+ });
1336
+ }
1337
+ merge(toMerge) {
1338
+ this.params = {
1339
+ ...this.params,
1340
+ ...toMerge
1341
+ };
1342
+ }
1343
+ wrapCallback(params, name) {
1344
+ return (...args) => {
1345
+ this.recordCallback(name, args);
1346
+ params[name](...args);
1347
+ };
1348
+ }
1349
+ recordCallback(name, args) {
1350
+ this.callbacks.push({ name, args });
1351
+ }
1352
+ resolvePreserveOption(value, page2) {
1353
+ if (typeof value === "function") {
1354
+ return value(page2);
1355
+ }
1356
+ if (value === "errors") {
1357
+ return Object.keys(page2.props.errors || {}).length > 0;
1358
+ }
1359
+ return value;
1360
+ }
1361
+ };
1362
+
1363
+ // src/modal.ts
1364
+ var modal_default = {
1365
+ modal: null,
1366
+ listener: null,
1367
+ show(html) {
1368
+ if (typeof html === "object") {
1369
+ html = `All Inertia requests must receive a valid Inertia response, however a plain JSON response was received.<hr>${JSON.stringify(
1370
+ html
1371
+ )}`;
1372
+ }
1373
+ const page2 = document.createElement("html");
1374
+ page2.innerHTML = html;
1375
+ page2.querySelectorAll("a").forEach((a) => a.setAttribute("target", "_top"));
1376
+ this.modal = document.createElement("div");
1377
+ this.modal.style.position = "fixed";
1378
+ this.modal.style.width = "100vw";
1379
+ this.modal.style.height = "100vh";
1380
+ this.modal.style.padding = "50px";
1381
+ this.modal.style.boxSizing = "border-box";
1382
+ this.modal.style.backgroundColor = "rgba(0, 0, 0, .6)";
1383
+ this.modal.style.zIndex = 2e5;
1384
+ this.modal.addEventListener("click", () => this.hide());
1385
+ const iframe = document.createElement("iframe");
1386
+ iframe.style.backgroundColor = "white";
1387
+ iframe.style.borderRadius = "5px";
1388
+ iframe.style.width = "100%";
1389
+ iframe.style.height = "100%";
1390
+ this.modal.appendChild(iframe);
1391
+ document.body.prepend(this.modal);
1392
+ document.body.style.overflow = "hidden";
1393
+ if (!iframe.contentWindow) {
1394
+ throw new Error("iframe not yet ready.");
1395
+ }
1396
+ iframe.contentWindow.document.open();
1397
+ iframe.contentWindow.document.write(page2.outerHTML);
1398
+ iframe.contentWindow.document.close();
1399
+ this.listener = this.hideOnEscape.bind(this);
1400
+ document.addEventListener("keydown", this.listener);
1401
+ },
1402
+ hide() {
1403
+ this.modal.outerHTML = "";
1404
+ this.modal = null;
1405
+ document.body.style.overflow = "visible";
1406
+ document.removeEventListener("keydown", this.listener);
1407
+ },
1408
+ hideOnEscape(event) {
1409
+ if (event.keyCode === 27) {
1410
+ this.hide();
1411
+ }
1412
+ }
1413
+ };
1414
+
1415
+ // src/response.ts
1416
+ var queue2 = new Queue();
1417
+ var Response = class _Response {
1418
+ constructor(requestParams, response, originatingPage) {
1419
+ this.requestParams = requestParams;
1420
+ this.response = response;
1421
+ this.originatingPage = originatingPage;
1422
+ }
1423
+ static create(params, response, originatingPage) {
1424
+ return new _Response(params, response, originatingPage);
1425
+ }
1426
+ async handlePrefetch() {
1427
+ if (isSameUrlWithoutHash(this.requestParams.all().url, window.location)) {
1428
+ this.handle();
1429
+ }
1430
+ }
1431
+ async handle() {
1432
+ return queue2.add(() => this.process());
1433
+ }
1434
+ async process() {
1435
+ if (this.requestParams.all().prefetch) {
1436
+ this.requestParams.all().prefetch = false;
1437
+ this.requestParams.all().onPrefetched(this.response, this.requestParams.all());
1438
+ firePrefetchedEvent(this.response, this.requestParams.all());
1439
+ return Promise.resolve();
1440
+ }
1441
+ this.requestParams.runCallbacks();
1442
+ if (!this.isInertiaResponse()) {
1443
+ return this.handleNonInertiaResponse();
1444
+ }
1445
+ await history.processQueue();
1446
+ history.preserveUrl = this.requestParams.all().preserveUrl;
1447
+ await this.setPage();
1448
+ const errors = page.get().props.errors || {};
1449
+ if (Object.keys(errors).length > 0) {
1450
+ const scopedErrors = this.getScopedErrors(errors);
1451
+ fireErrorEvent(scopedErrors);
1452
+ return this.requestParams.all().onError(scopedErrors);
1453
+ }
1454
+ fireSuccessEvent(page.get());
1455
+ await this.requestParams.all().onSuccess(page.get());
1456
+ history.preserveUrl = false;
1457
+ }
1458
+ mergeParams(params) {
1459
+ this.requestParams.merge(params);
1460
+ }
1461
+ async handleNonInertiaResponse() {
1462
+ if (this.isLocationVisit()) {
1463
+ const locationUrl = hrefToUrl(this.getHeader("x-inertia-location"));
1464
+ setHashIfSameUrl(this.requestParams.all().url, locationUrl);
1465
+ return this.locationVisit(locationUrl);
1466
+ }
1467
+ const response = {
1468
+ ...this.response,
1469
+ data: this.getDataFromResponse(this.response.data)
1470
+ };
1471
+ if (fireInvalidEvent(response)) {
1472
+ return modal_default.show(response.data);
1473
+ }
1474
+ }
1475
+ isInertiaResponse() {
1476
+ return this.hasHeader("x-inertia");
1477
+ }
1478
+ hasStatus(status2) {
1479
+ return this.response.status === status2;
1480
+ }
1481
+ getHeader(header) {
1482
+ return this.response.headers[header];
1483
+ }
1484
+ hasHeader(header) {
1485
+ return this.getHeader(header) !== void 0;
1486
+ }
1487
+ isLocationVisit() {
1488
+ return this.hasStatus(409) && this.hasHeader("x-inertia-location");
1489
+ }
1490
+ /**
1491
+ * @link https://inertiajs.com/redirects#external-redirects
1492
+ */
1493
+ locationVisit(url) {
1494
+ try {
1495
+ SessionStorage.set(SessionStorage.locationVisitKey, {
1496
+ preserveScroll: this.requestParams.all().preserveScroll === true
1497
+ });
1498
+ if (typeof window === "undefined") {
1499
+ return;
1500
+ }
1501
+ if (isSameUrlWithoutHash(window.location, url)) {
1502
+ window.location.reload();
1503
+ } else {
1504
+ window.location.href = url.href;
1505
+ }
1506
+ } catch (error) {
1507
+ return false;
1508
+ }
1509
+ }
1510
+ async setPage() {
1511
+ const pageResponse = this.getDataFromResponse(this.response.data);
1512
+ if (!this.shouldSetPage(pageResponse)) {
1513
+ return Promise.resolve();
1514
+ }
1515
+ this.mergeProps(pageResponse);
1516
+ await this.setRememberedState(pageResponse);
1517
+ this.requestParams.setPreserveOptions(pageResponse);
1518
+ pageResponse.url = history.preserveUrl ? page.get().url : this.pageUrl(pageResponse);
1519
+ return page.set(pageResponse, {
1520
+ replace: this.requestParams.all().replace,
1521
+ preserveScroll: this.requestParams.all().preserveScroll,
1522
+ preserveState: this.requestParams.all().preserveState
1523
+ });
1524
+ }
1525
+ getDataFromResponse(response) {
1526
+ if (typeof response !== "string") {
1527
+ return response;
1528
+ }
1529
+ try {
1530
+ return JSON.parse(response);
1531
+ } catch (error) {
1532
+ return response;
1533
+ }
1534
+ }
1535
+ shouldSetPage(pageResponse) {
1536
+ if (!this.requestParams.all().async) {
1537
+ return true;
1538
+ }
1539
+ if (this.originatingPage.component !== pageResponse.component) {
1540
+ return true;
1541
+ }
1542
+ if (this.originatingPage.component !== page.get().component) {
1543
+ return false;
1544
+ }
1545
+ const originatingUrl = hrefToUrl(this.originatingPage.url);
1546
+ const currentPageUrl = hrefToUrl(page.get().url);
1547
+ return originatingUrl.origin === currentPageUrl.origin && originatingUrl.pathname === currentPageUrl.pathname;
1548
+ }
1549
+ pageUrl(pageResponse) {
1550
+ const responseUrl = hrefToUrl(pageResponse.url);
1551
+ setHashIfSameUrl(this.requestParams.all().url, responseUrl);
1552
+ return responseUrl.pathname + responseUrl.search + responseUrl.hash;
1553
+ }
1554
+ mergeProps(pageResponse) {
1555
+ if (!this.requestParams.isPartial() || pageResponse.component !== page.get().component) {
1556
+ return;
1557
+ }
1558
+ const propsToMerge = pageResponse.mergeProps || [];
1559
+ const propsToDeepMerge = pageResponse.deepMergeProps || [];
1560
+ const matchPropsOn = pageResponse.matchPropsOn || [];
1561
+ propsToMerge.forEach((prop) => {
1562
+ const incomingProp = pageResponse.props[prop];
1563
+ if (Array.isArray(incomingProp)) {
1564
+ pageResponse.props[prop] = this.mergeOrMatchItems(
1565
+ page.get().props[prop] || [],
1566
+ incomingProp,
1567
+ prop,
1568
+ matchPropsOn
1569
+ );
1570
+ } else if (typeof incomingProp === "object" && incomingProp !== null) {
1571
+ pageResponse.props[prop] = {
1572
+ ...page.get().props[prop] || [],
1573
+ ...incomingProp
1574
+ };
1575
+ }
1576
+ });
1577
+ propsToDeepMerge.forEach((prop) => {
1578
+ const incomingProp = pageResponse.props[prop];
1579
+ const currentProp = page.get().props[prop];
1580
+ const deepMerge = (target, source, currentKey) => {
1581
+ if (Array.isArray(source)) {
1582
+ return this.mergeOrMatchItems(target, source, currentKey, matchPropsOn);
1583
+ }
1584
+ if (typeof source === "object" && source !== null) {
1585
+ return Object.keys(source).reduce(
1586
+ (acc, key) => {
1587
+ acc[key] = deepMerge(target ? target[key] : void 0, source[key], `${currentKey}.${key}`);
1588
+ return acc;
1589
+ },
1590
+ { ...target }
1591
+ );
1592
+ }
1593
+ return source;
1594
+ };
1595
+ pageResponse.props[prop] = deepMerge(currentProp, incomingProp, prop);
1596
+ });
1597
+ pageResponse.props = { ...page.get().props, ...pageResponse.props };
1598
+ }
1599
+ mergeOrMatchItems(target, source, currentKey, matchPropsOn) {
1600
+ const matchOn = matchPropsOn.find((key) => {
1601
+ const path = key.split(".").slice(0, -1).join(".");
1602
+ return path === currentKey;
1603
+ });
1604
+ if (!matchOn) {
1605
+ return [...Array.isArray(target) ? target : [], ...source];
1606
+ }
1607
+ const uniqueProperty = matchOn.split(".").pop() || "";
1608
+ const targetArray = Array.isArray(target) ? target : [];
1609
+ const map = /* @__PURE__ */ new Map();
1610
+ targetArray.forEach((item) => {
1611
+ if (item && typeof item === "object" && uniqueProperty in item) {
1612
+ map.set(item[uniqueProperty], item);
1613
+ } else {
1614
+ map.set(Symbol(), item);
1615
+ }
1616
+ });
1617
+ source.forEach((item) => {
1618
+ if (item && typeof item === "object" && uniqueProperty in item) {
1619
+ map.set(item[uniqueProperty], item);
1620
+ } else {
1621
+ map.set(Symbol(), item);
1622
+ }
1623
+ });
1624
+ return Array.from(map.values());
1625
+ }
1626
+ async setRememberedState(pageResponse) {
1627
+ const rememberedState = await history.getState(history.rememberedState, {});
1628
+ if (this.requestParams.all().preserveState && rememberedState && pageResponse.component === page.get().component) {
1629
+ pageResponse.rememberedState = rememberedState;
1630
+ }
1631
+ }
1632
+ getScopedErrors(errors) {
1633
+ if (!this.requestParams.all().errorBag) {
1634
+ return errors;
1635
+ }
1636
+ return errors[this.requestParams.all().errorBag || ""] || {};
1637
+ }
1638
+ };
1639
+
1640
+ // src/request.ts
1641
+ var Request = class _Request {
1642
+ constructor(params, page2) {
1643
+ this.page = page2;
1644
+ this.requestHasFinished = false;
1645
+ this.requestParams = RequestParams.create(params);
1646
+ this.cancelToken = new AbortController();
1647
+ }
1648
+ static create(params, page2) {
1649
+ return new _Request(params, page2);
1650
+ }
1651
+ async send() {
1652
+ this.requestParams.onCancelToken(() => this.cancel({ cancelled: true }));
1653
+ fireStartEvent(this.requestParams.all());
1654
+ this.requestParams.onStart();
1655
+ if (this.requestParams.all().prefetch) {
1656
+ this.requestParams.onPrefetching();
1657
+ firePrefetchingEvent(this.requestParams.all());
1658
+ }
1659
+ const originallyPrefetch = this.requestParams.all().prefetch;
1660
+ return (0, import_axios.default)({
1661
+ method: this.requestParams.all().method,
1662
+ url: urlWithoutHash(this.requestParams.all().url).href,
1663
+ data: this.requestParams.data(),
1664
+ params: this.requestParams.queryParams(),
1665
+ signal: this.cancelToken.signal,
1666
+ headers: this.getHeaders(),
1667
+ onUploadProgress: this.onProgress.bind(this),
1668
+ // Why text? This allows us to delay JSON.parse until we're ready to use the response,
1669
+ // helps with performance particularly on large responses + history encryption
1670
+ responseType: "text"
1671
+ }).then((response) => {
1672
+ this.response = Response.create(this.requestParams, response, this.page);
1673
+ return this.response.handle();
1674
+ }).catch((error) => {
1675
+ if (error?.response) {
1676
+ this.response = Response.create(this.requestParams, error.response, this.page);
1677
+ return this.response.handle();
1678
+ }
1679
+ return Promise.reject(error);
1680
+ }).catch((error) => {
1681
+ if (import_axios.default.isCancel(error)) {
1682
+ return;
1683
+ }
1684
+ if (fireExceptionEvent(error)) {
1685
+ return Promise.reject(error);
1686
+ }
1687
+ }).finally(() => {
1688
+ this.finish();
1689
+ if (originallyPrefetch && this.response) {
1690
+ this.requestParams.onPrefetchResponse(this.response);
1691
+ }
1692
+ });
1693
+ }
1694
+ finish() {
1695
+ if (this.requestParams.wasCancelledAtAll()) {
1696
+ return;
1697
+ }
1698
+ this.requestParams.markAsFinished();
1699
+ this.fireFinishEvents();
1700
+ }
1701
+ fireFinishEvents() {
1702
+ if (this.requestHasFinished) {
1703
+ return;
1704
+ }
1705
+ this.requestHasFinished = true;
1706
+ fireFinishEvent(this.requestParams.all());
1707
+ this.requestParams.onFinish();
1708
+ }
1709
+ cancel({ cancelled = false, interrupted = false }) {
1710
+ if (this.requestHasFinished) {
1711
+ return;
1712
+ }
1713
+ this.cancelToken.abort();
1714
+ this.requestParams.markAsCancelled({ cancelled, interrupted });
1715
+ this.fireFinishEvents();
1716
+ }
1717
+ onProgress(progress3) {
1718
+ if (this.requestParams.data() instanceof FormData) {
1719
+ progress3.percentage = progress3.progress ? Math.round(progress3.progress * 100) : 0;
1720
+ fireProgressEvent(progress3);
1721
+ this.requestParams.all().onProgress(progress3);
1722
+ }
1723
+ }
1724
+ getHeaders() {
1725
+ const headers = {
1726
+ ...this.requestParams.headers(),
1727
+ Accept: "text/html, application/xhtml+xml",
1728
+ "X-Requested-With": "XMLHttpRequest",
1729
+ "X-Inertia": true
1730
+ };
1731
+ if (page.get().version) {
1732
+ headers["X-Inertia-Version"] = page.get().version;
1733
+ }
1734
+ return headers;
1735
+ }
1736
+ };
1737
+
1738
+ // src/requestStream.ts
1739
+ var RequestStream = class {
1740
+ constructor({ maxConcurrent, interruptible }) {
1741
+ this.requests = [];
1742
+ this.maxConcurrent = maxConcurrent;
1743
+ this.interruptible = interruptible;
1744
+ }
1745
+ send(request) {
1746
+ this.requests.push(request);
1747
+ request.send().then(() => {
1748
+ this.requests = this.requests.filter((r) => r !== request);
1749
+ });
1750
+ }
1751
+ interruptInFlight() {
1752
+ this.cancel({ interrupted: true }, false);
1753
+ }
1754
+ cancelInFlight() {
1755
+ this.cancel({ cancelled: true }, true);
1756
+ }
1757
+ cancel({ cancelled = false, interrupted = false } = {}, force) {
1758
+ if (!this.shouldCancel(force)) {
1759
+ return;
1760
+ }
1761
+ const request = this.requests.shift();
1762
+ request?.cancel({ interrupted, cancelled });
1763
+ }
1764
+ shouldCancel(force) {
1765
+ if (force) {
1766
+ return true;
1767
+ }
1768
+ return this.interruptible && this.requests.length >= this.maxConcurrent;
1769
+ }
1770
+ };
1771
+
1772
+ // src/router.ts
1773
+ var Router = class {
1774
+ constructor() {
1775
+ this.syncRequestStream = new RequestStream({
1776
+ maxConcurrent: 1,
1777
+ interruptible: true
1778
+ });
1779
+ this.asyncRequestStream = new RequestStream({
1780
+ maxConcurrent: Infinity,
1781
+ interruptible: false
1782
+ });
1783
+ }
1784
+ init({ initialPage, resolveComponent, swapComponent }) {
1785
+ page.init({
1786
+ initialPage,
1787
+ resolveComponent,
1788
+ swapComponent
1789
+ });
1790
+ InitialVisit.handle();
1791
+ eventHandler.init();
1792
+ eventHandler.on("missingHistoryItem", () => {
1793
+ if (typeof window !== "undefined") {
1794
+ this.visit(window.location.href, { preserveState: true, preserveScroll: true, replace: true });
1795
+ }
1796
+ });
1797
+ eventHandler.on("loadDeferredProps", () => {
1798
+ this.loadDeferredProps();
1799
+ });
1800
+ }
1801
+ get(url, data = {}, options = {}) {
1802
+ return this.visit(url, { ...options, method: "get", data });
1803
+ }
1804
+ post(url, data = {}, options = {}) {
1805
+ return this.visit(url, { preserveState: true, ...options, method: "post", data });
1806
+ }
1807
+ put(url, data = {}, options = {}) {
1808
+ return this.visit(url, { preserveState: true, ...options, method: "put", data });
1809
+ }
1810
+ patch(url, data = {}, options = {}) {
1811
+ return this.visit(url, { preserveState: true, ...options, method: "patch", data });
1812
+ }
1813
+ delete(url, options = {}) {
1814
+ return this.visit(url, { preserveState: true, ...options, method: "delete" });
1815
+ }
1816
+ reload(options = {}) {
1817
+ if (typeof window === "undefined") {
1818
+ return;
1819
+ }
1820
+ return this.visit(window.location.href, {
1821
+ ...options,
1822
+ preserveScroll: true,
1823
+ preserveState: true,
1824
+ async: true,
1825
+ headers: {
1826
+ ...options.headers || {},
1827
+ "Cache-Control": "no-cache"
1828
+ }
1829
+ });
1830
+ }
1831
+ remember(data, key = "default") {
1832
+ history.remember(data, key);
1833
+ }
1834
+ restore(key = "default") {
1835
+ return history.restore(key);
1836
+ }
1837
+ on(type, callback) {
1838
+ if (typeof window === "undefined") {
1839
+ return () => {
1840
+ };
1841
+ }
1842
+ return eventHandler.onGlobalEvent(type, callback);
1843
+ }
1844
+ cancel() {
1845
+ this.syncRequestStream.cancelInFlight();
1846
+ }
1847
+ cancelAll() {
1848
+ this.asyncRequestStream.cancelInFlight();
1849
+ this.syncRequestStream.cancelInFlight();
1850
+ }
1851
+ poll(interval, requestOptions = {}, options = {}) {
1852
+ return polls.add(interval, () => this.reload(requestOptions), {
1853
+ autoStart: options.autoStart ?? true,
1854
+ keepAlive: options.keepAlive ?? false
1855
+ });
1856
+ }
1857
+ visit(href, options = {}) {
1858
+ const visit = this.getPendingVisit(href, {
1859
+ ...options,
1860
+ showProgress: options.showProgress ?? !options.async
1861
+ });
1862
+ const events = this.getVisitEvents(options);
1863
+ if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) {
1864
+ return;
1865
+ }
1866
+ const requestStream = visit.async ? this.asyncRequestStream : this.syncRequestStream;
1867
+ requestStream.interruptInFlight();
1868
+ if (!page.isCleared() && !visit.preserveUrl) {
1869
+ Scroll.save();
1870
+ }
1871
+ const requestParams = {
1872
+ ...visit,
1873
+ ...events
1874
+ };
1875
+ const prefetched = prefetchedRequests.get(requestParams);
1876
+ if (prefetched) {
1877
+ reveal(prefetched.inFlight);
1878
+ prefetchedRequests.use(prefetched, requestParams);
1879
+ } else {
1880
+ reveal(true);
1881
+ requestStream.send(Request.create(requestParams, page.get()));
1882
+ }
1883
+ }
1884
+ getCached(href, options = {}) {
1885
+ return prefetchedRequests.findCached(this.getPrefetchParams(href, options));
1886
+ }
1887
+ flush(href, options = {}) {
1888
+ prefetchedRequests.remove(this.getPrefetchParams(href, options));
1889
+ }
1890
+ flushAll() {
1891
+ prefetchedRequests.removeAll();
1892
+ }
1893
+ getPrefetching(href, options = {}) {
1894
+ return prefetchedRequests.findInFlight(this.getPrefetchParams(href, options));
1895
+ }
1896
+ prefetch(href, options = {}, { cacheFor = 3e4 }) {
1897
+ if (options.method !== "get") {
1898
+ throw new Error("Prefetch requests must use the GET method");
1899
+ }
1900
+ const visit = this.getPendingVisit(href, {
1901
+ ...options,
1902
+ async: true,
1903
+ showProgress: false,
1904
+ prefetch: true
1905
+ });
1906
+ const visitUrl = visit.url.origin + visit.url.pathname + visit.url.search;
1907
+ const currentUrl = window.location.origin + window.location.pathname + window.location.search;
1908
+ if (visitUrl === currentUrl) {
1909
+ return;
1910
+ }
1911
+ const events = this.getVisitEvents(options);
1912
+ if (events.onBefore(visit) === false || !fireBeforeEvent(visit)) {
1913
+ return;
1914
+ }
1915
+ hide();
1916
+ this.asyncRequestStream.interruptInFlight();
1917
+ const requestParams = {
1918
+ ...visit,
1919
+ ...events
1920
+ };
1921
+ const ensureCurrentPageIsSet = () => {
1922
+ return new Promise((resolve) => {
1923
+ const checkIfPageIsDefined = () => {
1924
+ if (page.get()) {
1925
+ resolve();
1926
+ } else {
1927
+ setTimeout(checkIfPageIsDefined, 50);
1928
+ }
1929
+ };
1930
+ checkIfPageIsDefined();
1931
+ });
1932
+ };
1933
+ ensureCurrentPageIsSet().then(() => {
1934
+ prefetchedRequests.add(
1935
+ requestParams,
1936
+ (params) => {
1937
+ this.asyncRequestStream.send(Request.create(params, page.get()));
1938
+ },
1939
+ { cacheFor }
1940
+ );
1941
+ });
1942
+ }
1943
+ clearHistory() {
1944
+ history.clear();
1945
+ }
1946
+ decryptHistory() {
1947
+ return history.decrypt();
1948
+ }
1949
+ resolveComponent(component) {
1950
+ return page.resolve(component);
1951
+ }
1952
+ replace(params) {
1953
+ this.clientVisit(params, { replace: true });
1954
+ }
1955
+ push(params) {
1956
+ this.clientVisit(params);
1957
+ }
1958
+ clientVisit(params, { replace = false } = {}) {
1959
+ const current = page.get();
1960
+ const props = typeof params.props === "function" ? params.props(current.props) : params.props ?? current.props;
1961
+ const { onError, onFinish, onSuccess, ...pageParams } = params;
1962
+ page.set(
1963
+ {
1964
+ ...current,
1965
+ ...pageParams,
1966
+ props
1967
+ },
1968
+ {
1969
+ replace,
1970
+ preserveScroll: params.preserveScroll,
1971
+ preserveState: params.preserveState
1972
+ }
1973
+ ).then(() => {
1974
+ const errors = page.get().props.errors || {};
1975
+ if (Object.keys(errors).length === 0) {
1976
+ return onSuccess?.(page.get());
1977
+ }
1978
+ const scopedErrors = params.errorBag ? errors[params.errorBag || ""] || {} : errors;
1979
+ return onError?.(scopedErrors);
1980
+ }).finally(() => onFinish?.(params));
1981
+ }
1982
+ getPrefetchParams(href, options) {
1983
+ return {
1984
+ ...this.getPendingVisit(href, {
1985
+ ...options,
1986
+ async: true,
1987
+ showProgress: false,
1988
+ prefetch: true
1989
+ }),
1990
+ ...this.getVisitEvents(options)
1991
+ };
1992
+ }
1993
+ getPendingVisit(href, options, pendingVisitOptions = {}) {
1994
+ const mergedOptions = {
1995
+ method: "get",
1996
+ data: {},
1997
+ replace: false,
1998
+ preserveScroll: false,
1999
+ preserveState: false,
2000
+ only: [],
2001
+ except: [],
2002
+ headers: {},
2003
+ errorBag: "",
2004
+ forceFormData: false,
2005
+ queryStringArrayFormat: "brackets",
2006
+ async: false,
2007
+ showProgress: true,
2008
+ fresh: false,
2009
+ reset: [],
2010
+ preserveUrl: false,
2011
+ prefetch: false,
2012
+ ...options
2013
+ };
2014
+ const [url, _data] = transformUrlAndData(
2015
+ href,
2016
+ mergedOptions.data,
2017
+ mergedOptions.method,
2018
+ mergedOptions.forceFormData,
2019
+ mergedOptions.queryStringArrayFormat
2020
+ );
2021
+ const visit = {
2022
+ cancelled: false,
2023
+ completed: false,
2024
+ interrupted: false,
2025
+ ...mergedOptions,
2026
+ ...pendingVisitOptions,
2027
+ url,
2028
+ data: _data
2029
+ };
2030
+ if (visit.prefetch) {
2031
+ visit.headers["Purpose"] = "prefetch";
2032
+ }
2033
+ return visit;
2034
+ }
2035
+ getVisitEvents(options) {
2036
+ return {
2037
+ onCancelToken: options.onCancelToken || (() => {
2038
+ }),
2039
+ onBefore: options.onBefore || (() => {
2040
+ }),
2041
+ onStart: options.onStart || (() => {
2042
+ }),
2043
+ onProgress: options.onProgress || (() => {
2044
+ }),
2045
+ onFinish: options.onFinish || (() => {
2046
+ }),
2047
+ onCancel: options.onCancel || (() => {
2048
+ }),
2049
+ onSuccess: options.onSuccess || (() => {
2050
+ }),
2051
+ onError: options.onError || (() => {
2052
+ }),
2053
+ onPrefetched: options.onPrefetched || (() => {
2054
+ }),
2055
+ onPrefetching: options.onPrefetching || (() => {
2056
+ })
2057
+ };
2058
+ }
2059
+ loadDeferredProps() {
2060
+ const deferred = page.get()?.deferredProps;
2061
+ if (deferred) {
2062
+ Object.entries(deferred).forEach(([_, group]) => {
2063
+ this.reload({ only: group });
2064
+ });
2065
+ }
2066
+ }
2067
+ };
2068
+
2069
+ // src/head.ts
2070
+ var Renderer = {
2071
+ buildDOMElement(tag) {
2072
+ const template = document.createElement("template");
2073
+ template.innerHTML = tag;
2074
+ const node = template.content.firstChild;
2075
+ if (!tag.startsWith("<script ")) {
2076
+ return node;
2077
+ }
2078
+ const script = document.createElement("script");
2079
+ script.innerHTML = node.innerHTML;
2080
+ node.getAttributeNames().forEach((name) => {
2081
+ script.setAttribute(name, node.getAttribute(name) || "");
2082
+ });
2083
+ return script;
2084
+ },
2085
+ isInertiaManagedElement(element) {
2086
+ return element.nodeType === Node.ELEMENT_NODE && element.getAttribute("inertia") !== null;
2087
+ },
2088
+ findMatchingElementIndex(element, elements) {
2089
+ const key = element.getAttribute("inertia");
2090
+ if (key !== null) {
2091
+ return elements.findIndex((element2) => element2.getAttribute("inertia") === key);
2092
+ }
2093
+ return -1;
2094
+ },
2095
+ update: debounce(function(elements) {
2096
+ const sourceElements = elements.map((element) => this.buildDOMElement(element));
2097
+ const targetElements = Array.from(document.head.childNodes).filter(
2098
+ (element) => this.isInertiaManagedElement(element)
2099
+ );
2100
+ targetElements.forEach((targetElement) => {
2101
+ const index = this.findMatchingElementIndex(targetElement, sourceElements);
2102
+ if (index === -1) {
2103
+ targetElement?.parentNode?.removeChild(targetElement);
2104
+ return;
2105
+ }
2106
+ const sourceElement = sourceElements.splice(index, 1)[0];
2107
+ if (sourceElement && !targetElement.isEqualNode(sourceElement)) {
2108
+ targetElement?.parentNode?.replaceChild(sourceElement, targetElement);
2109
+ }
2110
+ });
2111
+ sourceElements.forEach((element) => document.head.appendChild(element));
2112
+ }, 1)
2113
+ };
2114
+ function createHeadManager(isServer2, titleCallback, onUpdate) {
2115
+ const states = {};
2116
+ let lastProviderId = 0;
2117
+ function connect() {
2118
+ const id = lastProviderId += 1;
2119
+ states[id] = [];
2120
+ return id.toString();
2121
+ }
2122
+ function disconnect(id) {
2123
+ if (id === null || Object.keys(states).indexOf(id) === -1) {
2124
+ return;
2125
+ }
2126
+ delete states[id];
2127
+ commit();
2128
+ }
2129
+ function reconnect(id) {
2130
+ if (Object.keys(states).indexOf(id) === -1) {
2131
+ states[id] = [];
2132
+ }
2133
+ }
2134
+ function update(id, elements = []) {
2135
+ if (id !== null && Object.keys(states).indexOf(id) > -1) {
2136
+ states[id] = elements;
2137
+ }
2138
+ commit();
2139
+ }
2140
+ function collect() {
2141
+ const title = titleCallback("");
2142
+ const defaults = {
2143
+ ...title ? { title: `<title inertia="">${title}</title>` } : {}
2144
+ };
2145
+ const elements = Object.values(states).reduce((carry, elements2) => carry.concat(elements2), []).reduce((carry, element) => {
2146
+ if (element.indexOf("<") === -1) {
2147
+ return carry;
2148
+ }
2149
+ if (element.indexOf("<title ") === 0) {
2150
+ const title2 = element.match(/(<title [^>]+>)(.*?)(<\/title>)/);
2151
+ carry.title = title2 ? `${title2[1]}${titleCallback(title2[2])}${title2[3]}` : element;
2152
+ return carry;
2153
+ }
2154
+ const match = element.match(/ inertia="[^"]+"/);
2155
+ if (match) {
2156
+ carry[match[0]] = element;
2157
+ } else {
2158
+ carry[Object.keys(carry).length] = element;
2159
+ }
2160
+ return carry;
2161
+ }, defaults);
2162
+ return Object.values(elements);
2163
+ }
2164
+ function commit() {
2165
+ isServer2 ? onUpdate(collect()) : Renderer.update(collect());
2166
+ }
2167
+ commit();
2168
+ return {
2169
+ forceUpdate: commit,
2170
+ createProvider: function() {
2171
+ const id = connect();
2172
+ return {
2173
+ reconnect: () => reconnect(id),
2174
+ update: (elements) => update(id, elements),
2175
+ disconnect: () => disconnect(id)
2176
+ };
2177
+ }
2178
+ };
2179
+ }
2180
+
2181
+ // src/progress-component.ts
2182
+ var baseComponentSelector = "nprogress";
2183
+ var progress;
2184
+ var settings = {
2185
+ minimum: 0.08,
2186
+ easing: "linear",
2187
+ positionUsing: "translate3d",
2188
+ speed: 200,
2189
+ trickle: true,
2190
+ trickleSpeed: 200,
2191
+ showSpinner: true,
2192
+ barSelector: '[role="bar"]',
2193
+ spinnerSelector: '[role="spinner"]',
2194
+ parent: "body",
2195
+ color: "#29d",
2196
+ includeCSS: true,
2197
+ template: [
2198
+ '<div class="bar" role="bar">',
2199
+ '<div class="peg"></div>',
2200
+ "</div>",
2201
+ '<div class="spinner" role="spinner">',
2202
+ '<div class="spinner-icon"></div>',
2203
+ "</div>"
2204
+ ].join("")
2205
+ };
2206
+ var status = null;
2207
+ var configure = (options) => {
2208
+ Object.assign(settings, options);
2209
+ if (settings.includeCSS) {
2210
+ injectCSS(settings.color);
2211
+ }
2212
+ progress = document.createElement("div");
2213
+ progress.id = baseComponentSelector;
2214
+ progress.innerHTML = settings.template;
2215
+ };
2216
+ var set = (n) => {
2217
+ const started = isStarted();
2218
+ n = clamp(n, settings.minimum, 1);
2219
+ status = n === 1 ? null : n;
2220
+ const progress3 = render(!started);
2221
+ const bar = progress3.querySelector(settings.barSelector);
2222
+ const speed = settings.speed;
2223
+ const ease = settings.easing;
2224
+ progress3.offsetWidth;
2225
+ queue3((next) => {
2226
+ const barStyles = (() => {
2227
+ if (settings.positionUsing === "translate3d") {
2228
+ return {
2229
+ transition: `all ${speed}ms ${ease}`,
2230
+ transform: `translate3d(${toBarPercentage(n)}%,0,0)`
2231
+ };
2232
+ }
2233
+ if (settings.positionUsing === "translate") {
2234
+ return {
2235
+ transition: `all ${speed}ms ${ease}`,
2236
+ transform: `translate(${toBarPercentage(n)}%,0)`
2237
+ };
2238
+ }
2239
+ return { marginLeft: `${toBarPercentage(n)}%` };
2240
+ })();
2241
+ for (const key in barStyles) {
2242
+ bar.style[key] = barStyles[key];
2243
+ }
2244
+ if (n !== 1) {
2245
+ return setTimeout(next, speed);
2246
+ }
2247
+ progress3.style.transition = "none";
2248
+ progress3.style.opacity = "1";
2249
+ progress3.offsetWidth;
2250
+ setTimeout(() => {
2251
+ progress3.style.transition = `all ${speed}ms linear`;
2252
+ progress3.style.opacity = "0";
2253
+ setTimeout(() => {
2254
+ remove();
2255
+ progress3.style.transition = "";
2256
+ progress3.style.opacity = "";
2257
+ next();
2258
+ }, speed);
2259
+ }, speed);
2260
+ });
2261
+ };
2262
+ var isStarted = () => typeof status === "number";
2263
+ var start = () => {
2264
+ if (!status) {
2265
+ set(0);
2266
+ }
2267
+ const work = function() {
2268
+ setTimeout(function() {
2269
+ if (!status) {
2270
+ return;
2271
+ }
2272
+ increaseByRandom();
2273
+ work();
2274
+ }, settings.trickleSpeed);
2275
+ };
2276
+ if (settings.trickle) {
2277
+ work();
2278
+ }
2279
+ };
2280
+ var done = (force) => {
2281
+ if (!force && !status) {
2282
+ return;
2283
+ }
2284
+ increaseByRandom(0.3 + 0.5 * Math.random());
2285
+ set(1);
2286
+ };
2287
+ var increaseByRandom = (amount) => {
2288
+ const n = status;
2289
+ if (n === null) {
2290
+ return start();
2291
+ }
2292
+ if (n > 1) {
2293
+ return;
2294
+ }
2295
+ amount = typeof amount === "number" ? amount : (() => {
2296
+ const ranges = {
2297
+ 0.1: [0, 0.2],
2298
+ 0.04: [0.2, 0.5],
2299
+ 0.02: [0.5, 0.8],
2300
+ 5e-3: [0.8, 0.99]
2301
+ };
2302
+ for (const r in ranges) {
2303
+ if (n >= ranges[r][0] && n < ranges[r][1]) {
2304
+ return parseFloat(r);
2305
+ }
2306
+ }
2307
+ return 0;
2308
+ })();
2309
+ return set(clamp(n + amount, 0, 0.994));
2310
+ };
2311
+ var render = (fromStart) => {
2312
+ if (isRendered()) {
2313
+ return document.getElementById(baseComponentSelector);
2314
+ }
2315
+ document.documentElement.classList.add(`${baseComponentSelector}-busy`);
2316
+ const bar = progress.querySelector(settings.barSelector);
2317
+ const perc = fromStart ? "-100" : toBarPercentage(status || 0);
2318
+ const parent = getParent();
2319
+ bar.style.transition = "all 0 linear";
2320
+ bar.style.transform = `translate3d(${perc}%,0,0)`;
2321
+ if (!settings.showSpinner) {
2322
+ progress.querySelector(settings.spinnerSelector)?.remove();
2323
+ }
2324
+ if (parent !== document.body) {
2325
+ parent.classList.add(`${baseComponentSelector}-custom-parent`);
2326
+ }
2327
+ parent.appendChild(progress);
2328
+ return progress;
2329
+ };
2330
+ var getParent = () => {
2331
+ return isDOM(settings.parent) ? settings.parent : document.querySelector(settings.parent);
2332
+ };
2333
+ var remove = () => {
2334
+ document.documentElement.classList.remove(`${baseComponentSelector}-busy`);
2335
+ getParent().classList.remove(`${baseComponentSelector}-custom-parent`);
2336
+ progress?.remove();
2337
+ };
2338
+ var isRendered = () => {
2339
+ return document.getElementById(baseComponentSelector) !== null;
2340
+ };
2341
+ var isDOM = (obj) => {
2342
+ if (typeof HTMLElement === "object") {
2343
+ return obj instanceof HTMLElement;
2344
+ }
2345
+ return obj && typeof obj === "object" && obj.nodeType === 1 && typeof obj.nodeName === "string";
2346
+ };
2347
+ function clamp(n, min, max) {
2348
+ if (n < min) {
2349
+ return min;
2350
+ }
2351
+ if (n > max) {
2352
+ return max;
2353
+ }
2354
+ return n;
2355
+ }
2356
+ var toBarPercentage = (n) => (-1 + n) * 100;
2357
+ var queue3 = /* @__PURE__ */ (() => {
2358
+ const pending = [];
2359
+ const next = () => {
2360
+ const fn = pending.shift();
2361
+ if (fn) {
2362
+ fn(next);
2363
+ }
2364
+ };
2365
+ return (fn) => {
2366
+ pending.push(fn);
2367
+ if (pending.length === 1) {
2368
+ next();
2369
+ }
2370
+ };
2371
+ })();
2372
+ var injectCSS = (color) => {
2373
+ const element = document.createElement("style");
2374
+ element.textContent = `
2375
+ #${baseComponentSelector} {
3
2376
  pointer-events: none;
4
2377
  }
5
2378
 
6
- #${f} .bar {
7
- background: ${r};
2379
+ #${baseComponentSelector} .bar {
2380
+ background: ${color};
8
2381
 
9
2382
  position: fixed;
10
2383
  z-index: 1031;
@@ -15,19 +2388,19 @@
15
2388
  height: 2px;
16
2389
  }
17
2390
 
18
- #${f} .peg {
2391
+ #${baseComponentSelector} .peg {
19
2392
  display: block;
20
2393
  position: absolute;
21
2394
  right: 0px;
22
2395
  width: 100px;
23
2396
  height: 100%;
24
- box-shadow: 0 0 10px ${r}, 0 0 5px ${r};
2397
+ box-shadow: 0 0 10px ${color}, 0 0 5px ${color};
25
2398
  opacity: 1.0;
26
2399
 
27
2400
  transform: rotate(3deg) translate(0px, -4px);
28
2401
  }
29
2402
 
30
- #${f} .spinner {
2403
+ #${baseComponentSelector} .spinner {
31
2404
  display: block;
32
2405
  position: fixed;
33
2406
  z-index: 1031;
@@ -35,34 +2408,118 @@
35
2408
  right: 15px;
36
2409
  }
37
2410
 
38
- #${f} .spinner-icon {
2411
+ #${baseComponentSelector} .spinner-icon {
39
2412
  width: 18px;
40
2413
  height: 18px;
41
2414
  box-sizing: border-box;
42
2415
 
43
2416
  border: solid 2px transparent;
44
- border-top-color: ${r};
45
- border-left-color: ${r};
2417
+ border-top-color: ${color};
2418
+ border-left-color: ${color};
46
2419
  border-radius: 50%;
47
2420
 
48
- animation: ${f}-spinner 400ms linear infinite;
2421
+ animation: ${baseComponentSelector}-spinner 400ms linear infinite;
49
2422
  }
50
2423
 
51
- .${f}-custom-parent {
2424
+ .${baseComponentSelector}-custom-parent {
52
2425
  overflow: hidden;
53
2426
  position: relative;
54
2427
  }
55
2428
 
56
- .${f}-custom-parent #${f} .spinner,
57
- .${f}-custom-parent #${f} .bar {
2429
+ .${baseComponentSelector}-custom-parent #${baseComponentSelector} .spinner,
2430
+ .${baseComponentSelector}-custom-parent #${baseComponentSelector} .bar {
58
2431
  position: absolute;
59
2432
  }
60
2433
 
61
- @keyframes ${f}-spinner {
2434
+ @keyframes ${baseComponentSelector}-spinner {
62
2435
  0% { transform: rotate(0deg); }
63
2436
  100% { transform: rotate(360deg); }
64
2437
  }
65
- `,document.head.appendChild(e)},gt=()=>{w&&(w.style.display="")},vt=()=>{w&&(w.style.display="none")},b={configure:ct,isStarted:$e,done:ut,set:Y,remove:je,start:Be,status:A,show:gt,hide:vt};var Z=0,N=(r=!1)=>{Z=Math.max(0,Z-1),(r||Z===0)&&b.show()},$=()=>{Z++,b.hide()};function yt(r){document.addEventListener("inertia:start",e=>bt(e,r)),document.addEventListener("inertia:progress",Pt)}function bt(r,e){r.detail.visit.showProgress||$();let t=setTimeout(()=>b.start(),e);document.addEventListener("inertia:finish",i=>wt(i,t),{once:!0})}function Pt(r){b.isStarted()&&r.detail.progress?.percentage&&b.set(Math.max(b.status,r.detail.progress.percentage/100*.9))}function wt(r,e){clearTimeout(e),b.isStarted()&&(r.detail.visit.completed?b.done():r.detail.visit.interrupted?b.set(0):r.detail.visit.cancelled&&(b.done(),b.remove()))}function fe({delay:r=250,color:e="#29d",includeCSS:t=!0,showSpinner:i=!1}={}){yt(r),b.configure({showSpinner:i,includeCSS:t,color:e})}function ge(r){let e=r.currentTarget.tagName.toLowerCase()==="a";return!(r.target&&(r?.target).isContentEditable||r.defaultPrevented||e&&r.altKey||e&&r.ctrlKey||e&&r.metaKey||e&&r.shiftKey||e&&"button"in r&&r.button!==0)}var St=new z;
2438
+ `;
2439
+ document.head.appendChild(element);
2440
+ };
2441
+ var show = () => {
2442
+ if (progress) {
2443
+ progress.style.display = "";
2444
+ }
2445
+ };
2446
+ var hide2 = () => {
2447
+ if (progress) {
2448
+ progress.style.display = "none";
2449
+ }
2450
+ };
2451
+ var progress_component_default = {
2452
+ configure,
2453
+ isStarted,
2454
+ done,
2455
+ set,
2456
+ remove,
2457
+ start,
2458
+ status,
2459
+ show,
2460
+ hide: hide2
2461
+ };
2462
+
2463
+ // src/progress.ts
2464
+ var hideCount = 0;
2465
+ var reveal = (force = false) => {
2466
+ hideCount = Math.max(0, hideCount - 1);
2467
+ if (force || hideCount === 0) {
2468
+ progress_component_default.show();
2469
+ }
2470
+ };
2471
+ var hide = () => {
2472
+ hideCount++;
2473
+ progress_component_default.hide();
2474
+ };
2475
+ function addEventListeners(delay) {
2476
+ document.addEventListener("inertia:start", (e) => start2(e, delay));
2477
+ document.addEventListener("inertia:progress", progress2);
2478
+ }
2479
+ function start2(event, delay) {
2480
+ if (!event.detail.visit.showProgress) {
2481
+ hide();
2482
+ }
2483
+ const timeout = setTimeout(() => progress_component_default.start(), delay);
2484
+ document.addEventListener("inertia:finish", (e) => finish(e, timeout), { once: true });
2485
+ }
2486
+ function progress2(event) {
2487
+ if (progress_component_default.isStarted() && event.detail.progress?.percentage) {
2488
+ progress_component_default.set(Math.max(progress_component_default.status, event.detail.progress.percentage / 100 * 0.9));
2489
+ }
2490
+ }
2491
+ function finish(event, timeout) {
2492
+ clearTimeout(timeout);
2493
+ if (!progress_component_default.isStarted()) {
2494
+ return;
2495
+ }
2496
+ if (event.detail.visit.completed) {
2497
+ progress_component_default.done();
2498
+ } else if (event.detail.visit.interrupted) {
2499
+ progress_component_default.set(0);
2500
+ } else if (event.detail.visit.cancelled) {
2501
+ progress_component_default.done();
2502
+ progress_component_default.remove();
2503
+ }
2504
+ }
2505
+ function setupProgress({
2506
+ delay = 250,
2507
+ color = "#29d",
2508
+ includeCSS = true,
2509
+ showSpinner = false
2510
+ } = {}) {
2511
+ addEventListeners(delay);
2512
+ progress_component_default.configure({ showSpinner, includeCSS, color });
2513
+ }
2514
+
2515
+ // src/shouldIntercept.ts
2516
+ function shouldIntercept(event) {
2517
+ const isLink = event.currentTarget.tagName.toLowerCase() === "a";
2518
+ return !(event.target && (event?.target).isContentEditable || event.defaultPrevented || isLink && event.altKey || isLink && event.ctrlKey || isLink && event.metaKey || isLink && event.shiftKey || isLink && "button" in event && event.button !== 0);
2519
+ }
2520
+
2521
+ // src/index.ts
2522
+ var router = new Router();
66
2523
  /* NProgress, (c) 2013, 2014 Rico Sta. Cruz - http://ricostacruz.com/nprogress
67
2524
  * @license MIT */
68
2525
  //# sourceMappingURL=index.js.map