From 1d6b6d3ab12e6963b954ca96fd29b3cd45482dd3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Alberto=20Fern=C3=A1ndez-Capel?= Date: Mon, 20 Nov 2023 17:32:11 +0000 Subject: [PATCH] Build with latest turbo/main --- app/assets/javascripts/turbo.js | 22 +++++++++++++++------- app/assets/javascripts/turbo.min.js | 2 +- app/assets/javascripts/turbo.min.js.map | 2 +- 3 files changed, 17 insertions(+), 9 deletions(-) diff --git a/app/assets/javascripts/turbo.js b/app/assets/javascripts/turbo.js index bc494ead..9778da4d 100644 --- a/app/assets/javascripts/turbo.js +++ b/app/assets/javascripts/turbo.js @@ -2231,15 +2231,18 @@ class BrowserAdapter { return visit.loadResponse(); } } - visitRequestFinished(_visit) { + visitRequestFinished(_visit) {} + visitCompleted(_visit) { this.progressBar.setValue(1); this.hideVisitProgressBar(); } - visitCompleted(_visit) {} pageInvalidated(reason) { this.reload(reason); } - visitFailed(_visit) {} + visitFailed(_visit) { + this.progressBar.setValue(1); + this.hideVisitProgressBar(); + } visitRendered(_visit) {} formSubmissionStarted(_formSubmission) { this.progressBar.setValue(0); @@ -2521,7 +2524,7 @@ class Navigator { this.view.clearSnapshotCache(); } const {statusCode: statusCode, redirected: redirected} = fetchResponse; - const action = this.getActionForFormSubmission(formSubmission); + const action = this.#getActionForFormSubmission(formSubmission, fetchResponse); const visitOptions = { action: action, shouldCacheSnapshot: shouldCacheSnapshot, @@ -2579,8 +2582,13 @@ class Navigator { get restorationIdentifier() { return this.history.restorationIdentifier; } - getActionForFormSubmission({submitter: submitter, formElement: formElement}) { - return getVisitAction(submitter, formElement) || "advance"; + #getActionForFormSubmission(formSubmission, fetchResponse) { + const {submitter: submitter, formElement: formElement} = formSubmission; + return getVisitAction(submitter, formElement) || this.#getDefaultAction(fetchResponse); + } + #getDefaultAction(fetchResponse) { + const sameLocationRedirect = fetchResponse.redirected && fetchResponse.location.href === this.location?.href; + return sameLocationRedirect ? "replace" : "advance"; } } @@ -3655,7 +3663,7 @@ class PageView extends View { return this.snapshotCache.get(location); } isPageRefresh(visit) { - return !visit || this.lastRenderedLocation.href === visit.location.href; + return !visit || this.lastRenderedLocation.href === visit.location.href && visit.action === "replace"; } get snapshot() { return PageSnapshot.fromElement(this.element); diff --git a/app/assets/javascripts/turbo.min.js b/app/assets/javascripts/turbo.min.js index 74d2929c..b16bf9c7 100644 --- a/app/assets/javascripts/turbo.min.js +++ b/app/assets/javascripts/turbo.min.js @@ -16,7 +16,7 @@ Copyright © 2023 37signals LLC opacity ${ie.animationDuration/2}ms ${ie.animationDuration/2}ms ease-in; transform: translate3d(0, 0, 0); } - `}hiding=!1;value=0;visible=!1;constructor(){this.stylesheetElement=this.createStylesheetElement(),this.progressElement=this.createProgressElement(),this.installStylesheetElement(),this.setValue(0)}show(){this.visible||(this.visible=!0,this.installProgressElement(),this.startTrickling())}hide(){this.visible&&!this.hiding&&(this.hiding=!0,this.fadeProgressElement((()=>{this.uninstallProgressElement(),this.stopTrickling(),this.visible=!1,this.hiding=!1})))}setValue(e){this.value=e,this.refresh()}installStylesheetElement(){document.head.insertBefore(this.stylesheetElement,document.head.firstChild)}installProgressElement(){this.progressElement.style.width="0",this.progressElement.style.opacity="1",document.documentElement.insertBefore(this.progressElement,document.body),this.refresh()}fadeProgressElement(e){this.progressElement.style.opacity="0",setTimeout(e,1.5*ie.animationDuration)}uninstallProgressElement(){this.progressElement.parentNode&&document.documentElement.removeChild(this.progressElement)}startTrickling(){this.trickleInterval||(this.trickleInterval=window.setInterval(this.trickle,ie.animationDuration))}stopTrickling(){window.clearInterval(this.trickleInterval),delete this.trickleInterval}trickle=()=>{this.setValue(this.value+Math.random()/100)};refresh(){requestAnimationFrame((()=>{this.progressElement.style.width=10+90*this.value+"%"}))}createStylesheetElement(){const e=document.createElement("style");return e.type="text/css",e.textContent=ie.defaultCSS,this.cspNonce&&(e.nonce=this.cspNonce),e}createProgressElement(){const e=document.createElement("div");return e.className="turbo-progress-bar",e}get cspNonce(){return T("csp-nonce")}}class re extends j{detailsByOuterHTML=this.children.filter((e=>!function(e){const t=e.localName;return"noscript"==t}(e))).map((e=>function(e){e.hasAttribute("nonce")&&e.setAttribute("nonce","");return e}(e))).reduce(((e,t)=>{const{outerHTML:s}=t,i=s in e?e[s]:{type:ne(t),tracked:oe(t),elements:[]};return{...e,[s]:{...i,elements:[...i.elements,t]}}}),{});get trackedElementSignature(){return Object.keys(this.detailsByOuterHTML).filter((e=>this.detailsByOuterHTML[e].tracked)).join("")}getScriptElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("script",e)}getStylesheetElementsNotInSnapshot(e){return this.getElementsMatchingTypeNotInSnapshot("stylesheet",e)}getElementsMatchingTypeNotInSnapshot(e,t){return Object.keys(this.detailsByOuterHTML).filter((e=>!(e in t.detailsByOuterHTML))).map((e=>this.detailsByOuterHTML[e])).filter((({type:t})=>t==e)).map((({elements:[e]})=>e))}get provisionalElements(){return Object.keys(this.detailsByOuterHTML).reduce(((e,t)=>{const{type:s,tracked:i,elements:r}=this.detailsByOuterHTML[t];return null!=s||i?r.length>1?[...e,...r.slice(1)]:e:[...e,...r]}),[])}getMetaValue(e){const t=this.findMetaElementByName(e);return t?t.getAttribute("content"):null}findMetaElementByName(e){return Object.keys(this.detailsByOuterHTML).reduce(((t,s)=>{const{elements:[i]}=this.detailsByOuterHTML[s];return function(e,t){const s=e.localName;return"meta"==s&&e.getAttribute("name")==t}(i,e)?i:t}),0)}}function ne(e){return function(e){const t=e.localName;return"script"==t}(e)?"script":function(e){const t=e.localName;return"style"==t||"link"==t&&"stylesheet"==e.getAttribute("rel")}(e)?"stylesheet":void 0}function oe(e){return"reload"==e.getAttribute("data-turbo-track")}class ae extends j{static fromHTMLString(e=""){return this.fromDocument(b(e))}static fromElement(e){return this.fromDocument(e.ownerDocument)}static fromDocument({documentElement:e,body:t,head:s}){return new this(e,t,new re(s))}constructor(e,t,s){super(t),this.documentElement=e,this.headSnapshot=s}clone(){const e=this.element.cloneNode(!0),t=this.element.querySelectorAll("select"),s=e.querySelectorAll("select");for(const[e,i]of t.entries()){const t=s[e];for(const e of t.selectedOptions)e.selected=!1;for(const e of i.selectedOptions)t.options[e.index].selected=!0}for(const t of e.querySelectorAll('input[type="password"]'))t.value="";return new ae(this.documentElement,e,this.headSnapshot)}get lang(){return this.documentElement.getAttribute("lang")}get headElement(){return this.headSnapshot.element}get rootLocation(){return r(this.getSetting("root")??"/")}get cacheControlValue(){return this.getSetting("cache-control")}get isPreviewable(){return"no-preview"!=this.cacheControlValue}get isCacheable(){return"no-cache"!=this.cacheControlValue}get isVisitable(){return"reload"!=this.getSetting("visit-control")}get prefersViewTransitions(){return"same-origin"===this.headSnapshot.getMetaValue("view-transition")}get shouldMorphPage(){return"morph"===this.getSetting("refresh-method")}get shouldPreserveScrollPosition(){return"preserve"===this.getSetting("refresh-scroll")}getSetting(e){return this.headSnapshot.getMetaValue(`turbo-${e}`)}}class ce{#o=!1;#a=Promise.resolve();renderChange(e,t){return e&&this.viewTransitionsAvailable&&!this.#o?(this.#o=!0,this.#a=this.#a.then((async()=>{await document.startViewTransition(t).finished}))):this.#a=this.#a.then(t),this.#a}get viewTransitionsAvailable(){return document.startViewTransition}}const le={action:"advance",historyChanged:!1,visitCachedSnapshot:()=>{},willRender:!0,updateHistory:!0,shouldCacheSnapshot:!0,acceptsStreamResponse:!1},he="visitStart",de="requestStart",ue="requestEnd",me="visitEnd",pe="initialized",fe="started",ge="canceled",be="failed",ve="completed",Se=0,we=-1,ye=-2;class Ee{identifier=S();timingMetrics={};followedRedirect=!1;historyChanged=!1;scrolled=!1;shouldCacheSnapshot=!0;acceptsStreamResponse=!1;snapshotCached=!1;state=pe;viewTransitioner=new ce;constructor(e,t,s,i={}){this.delegate=e,this.location=t,this.restorationIdentifier=s||S();const{action:r,historyChanged:n,referrer:o,snapshot:a,snapshotHTML:c,response:l,visitCachedSnapshot:h,willRender:d,updateHistory:u,shouldCacheSnapshot:m,acceptsStreamResponse:p}={...le,...i};this.action=r,this.historyChanged=n,this.referrer=o,this.snapshot=a,this.snapshotHTML=c,this.response=l,this.isSamePage=this.delegate.locationWithActionIsSamePage(this.location,this.action),this.visitCachedSnapshot=h,this.willRender=d,this.updateHistory=u,this.scrolled=!d,this.shouldCacheSnapshot=m,this.acceptsStreamResponse=p}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get history(){return this.delegate.history}get restorationData(){return this.history.getRestorationDataForIdentifier(this.restorationIdentifier)}get silent(){return this.isSamePage}start(){this.state==pe&&(this.recordTimingMetric(he),this.state=fe,this.adapter.visitStarted(this),this.delegate.visitStarted(this))}cancel(){this.state==fe&&(this.request&&this.request.cancel(),this.cancelRender(),this.state=ge)}complete(){this.state==fe&&(this.recordTimingMetric(me),this.state=ve,this.followRedirect(),this.followedRedirect||(this.adapter.visitCompleted(this),this.delegate.visitCompleted(this)))}fail(){this.state==fe&&(this.state=be,this.adapter.visitFailed(this),this.delegate.visitCompleted(this))}changeHistory(){if(!this.historyChanged&&this.updateHistory){const e=A(this.location.href===this.referrer?.href?"replace":this.action);this.history.update(e,this.location,this.restorationIdentifier),this.historyChanged=!0}}issueRequest(){this.hasPreloadedResponse()?this.simulateRequest():this.shouldIssueRequest()&&!this.request&&(this.request=new O(this,H.get,this.location),this.request.perform())}simulateRequest(){this.response&&(this.startRequest(),this.recordResponse(),this.finishRequest())}startRequest(){this.recordTimingMetric(de),this.adapter.visitRequestStarted(this)}recordResponse(e=this.response){if(this.response=e,e){const{statusCode:t}=e;Re(t)?this.adapter.visitRequestCompleted(this):this.adapter.visitRequestFailedWithStatusCode(this,t)}}finishRequest(){this.recordTimingMetric(ue),this.adapter.visitRequestFinished(this)}loadResponse(){if(this.response){const{statusCode:e,responseHTML:t}=this.response;this.render((async()=>{if(this.shouldCacheSnapshot&&this.cacheSnapshot(),this.view.renderPromise&&await this.view.renderPromise,Re(e)&&null!=t){const e=ae.fromHTMLString(t);await this.renderPageSnapshot(e,!1),this.adapter.visitRendered(this),this.complete()}else await this.view.renderError(ae.fromHTMLString(t),this),this.adapter.visitRendered(this),this.fail()}))}}getCachedSnapshot(){const e=this.view.getCachedSnapshotForLocation(this.location)||this.getPreloadedSnapshot();if(e&&(!n(this.location)||e.hasAnchor(n(this.location)))&&("restore"==this.action||e.isPreviewable))return e}getPreloadedSnapshot(){if(this.snapshotHTML)return ae.fromHTMLString(this.snapshotHTML)}hasCachedSnapshot(){return null!=this.getCachedSnapshot()}loadCachedSnapshot(){const e=this.getCachedSnapshot();if(e){const t=this.shouldIssueRequest();this.render((async()=>{this.cacheSnapshot(),this.isSamePage?this.adapter.visitRendered(this):(this.view.renderPromise&&await this.view.renderPromise,await this.renderPageSnapshot(e,t),this.adapter.visitRendered(this),t||this.complete())}))}}followRedirect(){this.redirectedToLocation&&!this.followedRedirect&&this.response?.redirected&&(this.adapter.visitProposedToLocation(this.redirectedToLocation,{action:"replace",response:this.response,shouldCacheSnapshot:!1,willRender:!1}),this.followedRedirect=!0)}goToSamePageAnchor(){this.isSamePage&&this.render((async()=>{this.cacheSnapshot(),this.performScroll(),this.changeHistory(),this.adapter.visitRendered(this)}))}prepareRequest(e){this.acceptsStreamResponse&&e.acceptResponseType(U.contentType)}requestStarted(){this.startRequest()}requestPreventedHandlingResponse(e,t){}async requestSucceededWithResponse(e,t){const s=await t.responseHTML,{redirected:i,statusCode:r}=t;null==s?this.recordResponse({statusCode:ye,redirected:i}):(this.redirectedToLocation=t.redirected?t.location:void 0,this.recordResponse({statusCode:r,responseHTML:s,redirected:i}))}async requestFailedWithResponse(e,t){const s=await t.responseHTML,{redirected:i,statusCode:r}=t;null==s?this.recordResponse({statusCode:ye,redirected:i}):this.recordResponse({statusCode:r,responseHTML:s,redirected:i})}requestErrored(e,t){this.recordResponse({statusCode:Se,redirected:!1})}requestFinished(){this.finishRequest()}performScroll(){this.scrolled||this.view.forceReloaded||this.view.snapshot.shouldPreserveScrollPosition||("restore"==this.action?this.scrollToRestoredPosition()||this.scrollToAnchor()||this.view.scrollToTop():this.scrollToAnchor()||this.view.scrollToTop(),this.isSamePage&&this.delegate.visitScrolledToSamePageLocation(this.view.lastRenderedLocation,this.location),this.scrolled=!0)}scrollToRestoredPosition(){const{scrollPosition:e}=this.restorationData;if(e)return this.view.scrollToPosition(e),!0}scrollToAnchor(){const e=n(this.location);if(null!=e)return this.view.scrollToAnchor(e),!0}recordTimingMetric(e){this.timingMetrics[e]=(new Date).getTime()}getTimingMetrics(){return{...this.timingMetrics}}getHistoryMethodForAction(e){switch(e){case"replace":return history.replaceState;case"advance":case"restore":return history.pushState}}hasPreloadedResponse(){return"object"==typeof this.response}shouldIssueRequest(){return!this.isSamePage&&("restore"==this.action?!this.hasCachedSnapshot():this.willRender)}cacheSnapshot(){this.snapshotCached||(this.view.cacheSnapshot(this.snapshot).then((e=>e&&this.visitCachedSnapshot(e))),this.snapshotCached=!0)}async render(e){this.cancelRender(),await new Promise((e=>{this.frame=requestAnimationFrame((()=>e()))})),await e(),delete this.frame}async renderPageSnapshot(e,t){await this.viewTransitioner.renderChange(this.view.shouldTransitionTo(e),(async()=>{await this.view.renderPage(e,t,this.willRender,this),this.performScroll()}))}cancelRender(){this.frame&&(cancelAnimationFrame(this.frame),delete this.frame)}}function Re(e){return e>=200&&e<300}class Ae{progressBar=new ie;constructor(e){this.session=e}visitProposedToLocation(e,t){l(e,this.navigator.rootLocation)?this.navigator.startVisit(e,t?.restorationIdentifier||S(),t):window.location.href=e.toString()}visitStarted(e){this.location=e.location,e.loadCachedSnapshot(),e.issueRequest(),e.goToSamePageAnchor()}visitRequestStarted(e){this.progressBar.setValue(0),e.hasCachedSnapshot()||"restore"!=e.action?this.showVisitProgressBarAfterDelay():this.showProgressBar()}visitRequestCompleted(e){e.loadResponse()}visitRequestFailedWithStatusCode(e,t){switch(t){case Se:case we:case ye:return this.reload({reason:"request_failed",context:{statusCode:t}});default:return e.loadResponse()}}visitRequestFinished(e){this.progressBar.setValue(1),this.hideVisitProgressBar()}visitCompleted(e){}pageInvalidated(e){this.reload(e)}visitFailed(e){}visitRendered(e){}formSubmissionStarted(e){this.progressBar.setValue(0),this.showFormProgressBarAfterDelay()}formSubmissionFinished(e){this.progressBar.setValue(1),this.hideFormProgressBar()}showVisitProgressBarAfterDelay(){this.visitProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay)}hideVisitProgressBar(){this.progressBar.hide(),null!=this.visitProgressBarTimeout&&(window.clearTimeout(this.visitProgressBarTimeout),delete this.visitProgressBarTimeout)}showFormProgressBarAfterDelay(){null==this.formProgressBarTimeout&&(this.formProgressBarTimeout=window.setTimeout(this.showProgressBar,this.session.progressBarDelay))}hideFormProgressBar(){this.progressBar.hide(),null!=this.formProgressBarTimeout&&(window.clearTimeout(this.formProgressBarTimeout),delete this.formProgressBarTimeout)}showProgressBar=()=>{this.progressBar.show()};reload(e){p("turbo:reload",{detail:e}),window.location.href=this.location?.toString()||window.location.href}get navigator(){return this.session.navigator}}class Le{selector="[data-turbo-temporary]";deprecatedSelector="[data-turbo-cache=false]";started=!1;start(){this.started||(this.started=!0,addEventListener("turbo:before-cache",this.removeTemporaryElements,!1))}stop(){this.started&&(this.started=!1,removeEventListener("turbo:before-cache",this.removeTemporaryElements,!1))}removeTemporaryElements=e=>{for(const e of this.temporaryElements)e.remove()};get temporaryElements(){return[...document.querySelectorAll(this.selector),...this.temporaryElementsWithDeprecation]}get temporaryElementsWithDeprecation(){const e=document.querySelectorAll(this.deprecatedSelector);return e.length&&console.warn(`The ${this.deprecatedSelector} selector is deprecated and will be removed in a future version. Use ${this.selector} instead.`),[...e]}}class Ce{constructor(e,t){this.session=e,this.element=t,this.linkInterceptor=new Q(this,t),this.formSubmitObserver=new J(this,t)}start(){this.linkInterceptor.start(),this.formSubmitObserver.start()}stop(){this.linkInterceptor.stop(),this.formSubmitObserver.stop()}shouldInterceptLinkClick(e,t,s){return this.#c(e)}linkClickIntercepted(e,t,s){const i=this.#l(e);i&&i.delegate.linkClickIntercepted(e,t,s)}willSubmitForm(e,t){return null==e.closest("turbo-frame")&&this.#h(e,t)&&this.#c(e,t)}formSubmitted(e,t){const s=this.#l(e,t);s&&s.delegate.formSubmitted(e,t)}#h(e,t){const s=o(e,t),i=this.element.ownerDocument.querySelector('meta[name="turbo-root"]'),n=r(i?.content??"/");return this.#c(e,t)&&l(s,n)}#c(e,t){if(e instanceof HTMLFormElement?this.session.submissionIsNavigatable(e,t):this.session.elementIsNavigatable(e)){const s=this.#l(e,t);return!!s&&s!=e.closest("turbo-frame")}return!1}#l(e,t){const s=t?.getAttribute("data-turbo-frame")||e.getAttribute("data-turbo-frame");if(s&&"_top"!=s){const e=this.element.querySelector(`#${s}:not([disabled])`);if(e instanceof i)return e}}}class Te{location;restorationIdentifier=S();restorationData={};started=!1;pageLoaded=!1;constructor(e){this.delegate=e}start(){this.started||(addEventListener("popstate",this.onPopState,!1),addEventListener("load",this.onPageLoad,!1),this.started=!0,this.replace(new URL(window.location.href)))}stop(){this.started&&(removeEventListener("popstate",this.onPopState,!1),removeEventListener("load",this.onPageLoad,!1),this.started=!1)}push(e,t){this.update(history.pushState,e,t)}replace(e,t){this.update(history.replaceState,e,t)}update(e,t,s=S()){const i={turbo:{restorationIdentifier:s}};e.call(history,i,"",t.href),this.location=t,this.restorationIdentifier=s}getRestorationDataForIdentifier(e){return this.restorationData[e]||{}}updateRestorationData(e){const{restorationIdentifier:t}=this,s=this.restorationData[t];this.restorationData[t]={...s,...e}}assumeControlOfScrollRestoration(){this.previousScrollRestoration||(this.previousScrollRestoration=history.scrollRestoration??"auto",history.scrollRestoration="manual")}relinquishControlOfScrollRestoration(){this.previousScrollRestoration&&(history.scrollRestoration=this.previousScrollRestoration,delete this.previousScrollRestoration)}onPopState=e=>{if(this.shouldHandlePopState()){const{turbo:t}=e.state||{};if(t){this.location=new URL(window.location.href);const{restorationIdentifier:e}=t;this.restorationIdentifier=e,this.delegate.historyPoppedToLocationWithRestorationIdentifier(this.location,e)}}};onPageLoad=async e=>{await Promise.resolve(),this.pageLoaded=!0};shouldHandlePopState(){return this.pageIsLoaded()}pageIsLoaded(){return this.pageLoaded||"complete"==document.readyState}}class Pe{constructor(e){this.delegate=e}proposeVisit(e,t={}){this.delegate.allowsVisitingLocationWithAction(e,t.action)&&this.delegate.visitProposedToLocation(e,t)}startVisit(e,t,s={}){this.stop(),this.currentVisit=new Ee(this,r(e),t,{referrer:this.location,...s}),this.currentVisit.start()}submitForm(e,t){this.stop(),this.formSubmission=new $(this,e,t,!0),this.formSubmission.start()}stop(){this.formSubmission&&(this.formSubmission.stop(),delete this.formSubmission),this.currentVisit&&(this.currentVisit.cancel(),delete this.currentVisit)}get adapter(){return this.delegate.adapter}get view(){return this.delegate.view}get rootLocation(){return this.view.snapshot.rootLocation}get history(){return this.delegate.history}formSubmissionStarted(e){"function"==typeof this.adapter.formSubmissionStarted&&this.adapter.formSubmissionStarted(e)}async formSubmissionSucceededWithResponse(e,t){if(e==this.formSubmission){const s=await t.responseHTML;if(s){const i=e.isSafe;i||this.view.clearSnapshotCache();const{statusCode:r,redirected:n}=t,o={action:this.getActionForFormSubmission(e),shouldCacheSnapshot:i,response:{statusCode:r,responseHTML:s,redirected:n}};this.proposeVisit(t.location,o)}}}async formSubmissionFailedWithResponse(e,t){const s=await t.responseHTML;if(s){const e=ae.fromHTMLString(s);t.serverError?await this.view.renderError(e,this.currentVisit):await this.view.renderPage(e,!1,!0,this.currentVisit),e.shouldPreserveScrollPosition||this.view.scrollToTop(),this.view.clearSnapshotCache()}}formSubmissionErrored(e,t){console.error(t)}formSubmissionFinished(e){"function"==typeof this.adapter.formSubmissionFinished&&this.adapter.formSubmissionFinished(e)}visitStarted(e){this.delegate.visitStarted(e)}visitCompleted(e){this.delegate.visitCompleted(e)}locationWithActionIsSamePage(e,t){const s=n(e),i=n(this.view.lastRenderedLocation),r="restore"===t&&void 0===s;return"replace"!==t&&h(e)===h(this.view.lastRenderedLocation)&&(r||null!=s&&s!==i)}visitScrolledToSamePageLocation(e,t){this.delegate.visitScrolledToSamePageLocation(e,t)}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}getActionForFormSubmission({submitter:e,formElement:t}){return L(e,t)||"advance"}}const ke=0,Me=1,Fe=2,Ie=3;class He{stage=ke;started=!1;constructor(e){this.delegate=e}start(){this.started||(this.stage==ke&&(this.stage=Me),document.addEventListener("readystatechange",this.interpretReadyState,!1),addEventListener("pagehide",this.pageWillUnload,!1),this.started=!0)}stop(){this.started&&(document.removeEventListener("readystatechange",this.interpretReadyState,!1),removeEventListener("pagehide",this.pageWillUnload,!1),this.started=!1)}interpretReadyState=()=>{const{readyState:e}=this;"interactive"==e?this.pageIsInteractive():"complete"==e&&this.pageIsComplete()};pageIsInteractive(){this.stage==Me&&(this.stage=Fe,this.delegate.pageBecameInteractive())}pageIsComplete(){this.pageIsInteractive(),this.stage==Fe&&(this.stage=Ie,this.delegate.pageLoaded())}pageWillUnload=()=>{this.delegate.pageWillUnload()};get readyState(){return document.readyState}}class qe{started=!1;constructor(e){this.delegate=e}start(){this.started||(addEventListener("scroll",this.onScroll,!1),this.onScroll(),this.started=!0)}stop(){this.started&&(removeEventListener("scroll",this.onScroll,!1),this.started=!1)}onScroll=()=>{this.updatePosition({x:window.pageXOffset,y:window.pageYOffset})};updatePosition(e){this.delegate.scrollPositionChanged(e)}}class Be{render({fragment:e}){ee.preservingPermanentElements(this,function(e){const t=G(document.documentElement),s={};for(const i of t){const{id:t}=i;for(const r of e.querySelectorAll("turbo-stream")){const e=z(r.templateElement.content,t);e&&(s[t]=[i,e])}}return s}(e),(()=>{!async function(e,t){const s=`turbo-stream-autofocus-${S()}`,i=e.querySelectorAll("turbo-stream"),r=function(e){for(const t of e){const e=M(t.templateElement.content);if(e)return e}return null}(i);let n=null;r&&(n=r.id?r.id:s,r.id=n);t(),await f();if((null==document.activeElement||document.activeElement==document.body)&&n){const e=document.getElementById(n);k(e)&&e.focus(),e&&e.id==s&&e.removeAttribute("id")}}(e,(()=>{!async function(e){const[t,s]=await async function(e,t){const s=t();return e(),await f(),[s,t()]}(e,(()=>document.activeElement)),i=t&&t.id;if(i){const e=document.getElementById(i);k(e)&&e!=s&&e.focus()}}((()=>{document.documentElement.appendChild(e)}))}))}))}enteringBardo(e,t){t.replaceWith(e.cloneNode(!0))}leavingBardo(){}}class Oe{sources=new Set;#d=!1;constructor(e){this.delegate=e}start(){this.#d||(this.#d=!0,addEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}stop(){this.#d&&(this.#d=!1,removeEventListener("turbo:before-fetch-response",this.inspectFetchResponse,!1))}connectStreamSource(e){this.streamSourceIsConnected(e)||(this.sources.add(e),e.addEventListener("message",this.receiveMessageEvent,!1))}disconnectStreamSource(e){this.streamSourceIsConnected(e)&&(this.sources.delete(e),e.removeEventListener("message",this.receiveMessageEvent,!1))}streamSourceIsConnected(e){return this.sources.has(e)}inspectFetchResponse=e=>{const t=function(e){const t=e.detail?.fetchResponse;if(t instanceof u)return t}(e);t&&function(e){const t=e.contentType??"";return t.startsWith(U.contentType)}(t)&&(e.preventDefault(),this.receiveMessageResponse(t))};receiveMessageEvent=e=>{this.#d&&"string"==typeof e.data&&this.receiveMessageHTML(e.data)};async receiveMessageResponse(e){const t=await e.responseHTML;t&&this.receiveMessageHTML(t)}receiveMessageHTML(e){this.delegate.receivedMessageFromStream(U.wrap(e))}}class Ne extends te{static renderElement(e,t){const{documentElement:s,body:i}=document;s.replaceChild(t,i)}async render(){this.replaceHeadAndBody(),this.activateScriptElements()}replaceHeadAndBody(){const{documentElement:e,head:t}=document;e.replaceChild(this.newHead,t),this.renderElement(this.currentElement,this.newElement)}activateScriptElements(){for(const e of this.scriptElements){const t=e.parentNode;if(t){const s=m(e);t.replaceChild(s,e)}}}get newHead(){return this.newSnapshot.headSnapshot.element}get scriptElements(){return document.documentElement.querySelectorAll("script")}}let xe=new Set;function Ve(e,t,s){if(s.head.block){let i=e.querySelector("head"),r=t.querySelector("head");if(i&&r){let n=_e(r,i,s);return void Promise.all(n).then((function(){Ve(e,t,Object.assign(s,{head:{block:!1,ignore:!0}}))}))}}if("innerHTML"===s.morphStyle)return De(t,e,s),e.children;if("outerHTML"===s.morphStyle||null==s.morphStyle){let i=function(e,t,s){let i;i=e.firstChild;let r=i,n=0;for(;i;){let e=Xe(i,t,s);e>n&&(r=i,n=e),i=i.nextSibling}return r}(t,e,s),r=i?.previousSibling,n=i?.nextSibling,o=We(e,i,s);return i?function(e,t,s){let i=[],r=[];for(;null!=e;)i.push(e),e=e.previousSibling;for(;i.length>0;){let e=i.pop();r.push(e),t.parentElement.insertBefore(e,t)}r.push(t);for(;null!=s;)i.push(s),r.push(s),s=s.nextSibling;for(;i.length>0;)t.parentElement.insertBefore(i.pop(),t.nextSibling);return r}(r,o,n):[]}throw"Do not understand how to morph style "+s.morphStyle}function We(e,t,s){if(!s.ignoreActive||e!==document.activeElement){if(null==t){if(!1===s.callbacks.beforeNodeRemoved(e))return;return e.remove(),s.callbacks.afterNodeRemoved(e),null}if(ze(e,t)){if(!1===s.callbacks.beforeNodeMorphed(e,t))return;return e instanceof HTMLHeadElement&&s.head.ignore||(e instanceof HTMLHeadElement&&"morph"!==s.head.style?_e(t,e,s):(!function(e,t){let s=e.nodeType;if(1===s){const s=e.attributes,i=t.attributes;for(const e of s)t.getAttribute(e.name)!==e.value&&t.setAttribute(e.name,e.value);for(const s of i)e.hasAttribute(s.name)||t.removeAttribute(s.name)}8!==s&&3!==s||t.nodeValue!==e.nodeValue&&(t.nodeValue=e.nodeValue);if(e instanceof HTMLInputElement&&t instanceof HTMLInputElement&&"file"!==e.type)t.value=e.value||"",Ue(e,t,"value"),Ue(e,t,"checked"),Ue(e,t,"disabled");else if(e instanceof HTMLOptionElement)Ue(e,t,"selected");else if(e instanceof HTMLTextAreaElement&&t instanceof HTMLTextAreaElement){let s=e.value;s!==t.value&&(t.value=s),t.firstChild&&t.firstChild.nodeValue!==s&&(t.firstChild.nodeValue=s)}}(t,e),De(t,e,s))),s.callbacks.afterNodeMorphed(e,t),e}if(!1===s.callbacks.beforeNodeRemoved(e))return;if(!1===s.callbacks.beforeNodeAdded(t))return;return e.parentElement.replaceChild(t,e),s.callbacks.afterNodeAdded(t),s.callbacks.afterNodeRemoved(e),t}}function De(e,t,s){let i,r=e.firstChild,n=t.firstChild;for(;r;){if(i=r,r=i.nextSibling,null==n){if(!1===s.callbacks.beforeNodeAdded(i))return;t.appendChild(i),s.callbacks.afterNodeAdded(i),et(s,i);continue}if(je(i,n,s)){We(n,i,s),n=n.nextSibling,et(s,i);continue}let o=Je(e,t,i,n,s);if(o){n=Ge(n,o,s),We(o,i,s),et(s,i);continue}let a=Ke(e,t,i,n,s);if(a)n=Ge(n,a,s),We(a,i,s),et(s,i);else{if(!1===s.callbacks.beforeNodeAdded(i))return;t.insertBefore(i,n),s.callbacks.afterNodeAdded(i),et(s,i)}}for(;null!==n;){let e=n;n=n.nextSibling,Qe(e,s)}}function Ue(e,t,s){e[s]!==t[s]&&(e[s]?t.setAttribute(s,e[s]):t.removeAttribute(s))}function _e(e,t,s){let i=[],r=[],n=[],o=[],a=s.head.style,c=new Map;for(const t of e.children)c.set(t.outerHTML,t);for(const e of t.children){let t=c.has(e.outerHTML),i=s.head.shouldReAppend(e),l=s.head.shouldPreserve(e);t||l?i?r.push(e):(c.delete(e.outerHTML),n.push(e)):"append"===a?i&&(r.push(e),o.push(e)):!1!==s.head.shouldRemove(e)&&r.push(e)}o.push(...c.values());let l=[];for(const e of o){let r=document.createRange().createContextualFragment(e.outerHTML).firstChild;if(!1!==s.callbacks.beforeNodeAdded(r)){if(r.href||r.src){let e=null,t=new Promise((function(t){e=t}));r.addEventListener("load",(function(){e()})),l.push(t)}t.appendChild(r),s.callbacks.afterNodeAdded(r),i.push(r)}}for(const e of r)!1!==s.callbacks.beforeNodeRemoved(e)&&(t.removeChild(e),s.callbacks.afterNodeRemoved(e));return s.head.afterHeadMorphed(t,{added:i,kept:n,removed:r}),l}function $e(){}function je(e,t,s){return null!=e&&null!=t&&(e.nodeType===t.nodeType&&e.tagName===t.tagName&&(""!==e.id&&e.id===t.id||tt(s,e,t)>0))}function ze(e,t){return null!=e&&null!=t&&(e.nodeType===t.nodeType&&e.tagName===t.tagName)}function Ge(e,t,s){for(;e!==t;){let t=e;e=e.nextSibling,Qe(t,s)}return et(s,t),t.nextSibling}function Je(e,t,s,i,r){let n=tt(r,s,t);if(n>0){let t=i,o=0;for(;null!=t;){if(je(s,t,r))return t;if(o+=tt(r,t,e),o>n)return null;t=t.nextSibling}}return null}function Ke(e,t,s,i,r){let n=i,o=s.nextSibling,a=0;for(;null!=n;){if(tt(r,n,e)>0)return null;if(ze(s,n))return n;if(ze(o,n)&&(a++,o=o.nextSibling,a>=2))return null;n=n.nextSibling}return n}function Xe(e,t,s){return ze(e,t)?.5+tt(s,e,t):0}function Qe(e,t){et(t,e),!1!==t.callbacks.beforeNodeRemoved(e)&&(e.remove(),t.callbacks.afterNodeRemoved(e))}function Ye(e,t){return!e.deadIds.has(t)}function Ze(e,t,s){return(e.idMap.get(s)||xe).has(t)}function et(e,t){let s=e.idMap.get(t)||xe;for(const t of s)e.deadIds.add(t)}function tt(e,t,s){let i=e.idMap.get(t)||xe,r=0;for(const t of i)Ye(e,t)&&Ze(e,t,s)&&++r;return r}function st(e,t){let s=e.parentElement,i=e.querySelectorAll("[id]");for(const e of i){let i=e;for(;i!==s&&null!=i;){let s=t.get(i);null==s&&(s=new Set,t.set(i,s)),s.add(e.id),i=i.parentElement}}}function it(e,t){let s=new Map;return st(e,s),st(t,s),s}var rt={morph:function(e,t,s={}){e instanceof Document&&(e=e.documentElement),"string"==typeof t&&(t=function(e){let t=new DOMParser,s=e.replace(/]*>|>)([\s\S]*?)<\/svg>/gim,"");if(s.match(/<\/html>/)||s.match(/<\/head>/)||s.match(/<\/body>/)){let i=t.parseFromString(e,"text/html");if(s.match(/<\/html>/))return i.generatedByIdiomorph=!0,i;{let e=i.firstChild;return e?(e.generatedByIdiomorph=!0,e):null}}{let s=t.parseFromString("","text/html").body.querySelector("template").content;return s.generatedByIdiomorph=!0,s}}(t));let i=function(e){if(null==e){return document.createElement("div")}if(e.generatedByIdiomorph)return e;if(e instanceof Node){const t=document.createElement("div");return t.append(e),t}{const t=document.createElement("div");for(const s of[...e])t.append(s);return t}}(t),r=function(e,t,s){return{target:e,newContent:t,config:s,morphStyle:s.morphStyle,ignoreActive:s.ignoreActive,idMap:it(e,t),deadIds:new Set,callbacks:Object.assign({beforeNodeAdded:$e,afterNodeAdded:$e,beforeNodeMorphed:$e,afterNodeMorphed:$e,beforeNodeRemoved:$e,afterNodeRemoved:$e},s.callbacks),head:Object.assign({style:"merge",shouldPreserve:function(e){return"true"===e.getAttribute("im-preserve")},shouldReAppend:function(e){return"true"===e.getAttribute("im-re-append")},shouldRemove:$e,afterHeadMorphed:$e},s.head)}}(e,i,s);return Ve(e,i,r)}};class nt extends te{async render(){this.willRender&&await this.#u()}get renderMethod(){return"morph"}async#u(){this.#m(this.currentElement,this.newElement),this.#p(),p("turbo:morph",{detail:{currentElement:this.currentElement,newElement:this.newElement}})}#m(e,t,s="outerHTML"){this.isMorphingTurboFrame=this.#f(e),rt.morph(e,t,{morphStyle:s,callbacks:{beforeNodeAdded:this.#g,beforeNodeMorphed:this.#b,beforeNodeRemoved:this.#v}})}#g=e=>!(e.id&&e.hasAttribute("data-turbo-permanent")&&document.getElementById(e.id));#b=(e,t)=>!(e instanceof HTMLElement)||!e.hasAttribute("data-turbo-permanent")&&(this.isMorphingTurboFrame||!this.#f(e));#v=e=>this.#b(e);#p(){this.#S().forEach((e=>{this.#f(e)&&(this.#w(e),e.reload())}))}#w(e){e.addEventListener("turbo:before-frame-render",(e=>{e.detail.render=this.#y}),{once:!0})}#y=(e,t)=>{p("turbo:before-frame-morph",{target:e,detail:{currentElement:e,newElement:t}}),this.#m(e,t.children,"innerHTML")};#f(e){return e.src&&"morph"===e.refresh}#S(){return Array.from(document.querySelectorAll("turbo-frame[src]")).filter((e=>!e.closest("[data-turbo-permanent]")))}}class ot extends te{static renderElement(e,t){document.body&&t instanceof HTMLBodyElement?document.body.replaceWith(t):document.documentElement.appendChild(t)}get shouldRender(){return this.newSnapshot.isVisitable&&this.trackedElementsAreIdentical}get reloadReason(){return this.newSnapshot.isVisitable?this.trackedElementsAreIdentical?void 0:{reason:"tracked_element_mismatch"}:{reason:"turbo_visit_control_is_reload"}}async prepareToRender(){this.#E(),await this.mergeHead()}async render(){this.willRender&&await this.replaceBody()}finishRendering(){super.finishRendering(),this.isPreview||this.focusFirstAutofocusableElement()}get currentHeadSnapshot(){return this.currentSnapshot.headSnapshot}get newHeadSnapshot(){return this.newSnapshot.headSnapshot}get newElement(){return this.newSnapshot.element}#E(){const{documentElement:e}=this.currentSnapshot,{lang:t}=this.newSnapshot;t?e.setAttribute("lang",t):e.removeAttribute("lang")}async mergeHead(){const e=this.mergeProvisionalElements(),t=this.copyNewHeadStylesheetElements();this.copyNewHeadScriptElements(),await e,await t}async replaceBody(){await this.preservingPermanentElements((async()=>{this.activateNewBody(),await this.assignNewBody()}))}get trackedElementsAreIdentical(){return this.currentHeadSnapshot.trackedElementSignature==this.newHeadSnapshot.trackedElementSignature}async copyNewHeadStylesheetElements(){const e=[];for(const t of this.newHeadStylesheetElements)e.push(R(t)),document.head.appendChild(t);await Promise.all(e)}copyNewHeadScriptElements(){for(const e of this.newHeadScriptElements)document.head.appendChild(m(e))}async mergeProvisionalElements(){const e=[...this.newHeadProvisionalElements];for(const t of this.currentHeadProvisionalElements)this.isCurrentElementInElementList(t,e)||document.head.removeChild(t);for(const t of e)document.head.appendChild(t)}isCurrentElementInElementList(e,t){for(const[s,i]of t.entries()){if("TITLE"==e.tagName){if("TITLE"!=i.tagName)continue;if(e.innerHTML==i.innerHTML)return t.splice(s,1),!0}if(i.isEqualNode(e))return t.splice(s,1),!0}return!1}removeCurrentHeadProvisionalElements(){for(const e of this.currentHeadProvisionalElements)document.head.removeChild(e)}copyNewHeadProvisionalElements(){for(const e of this.newHeadProvisionalElements)document.head.appendChild(e)}activateNewBody(){document.adoptNode(this.newElement),this.activateNewBodyScriptElements()}activateNewBodyScriptElements(){for(const e of this.newBodyScriptElements){const t=m(e);e.replaceWith(t)}}async assignNewBody(){await this.renderElement(this.currentElement,this.newElement)}get newHeadStylesheetElements(){return this.newHeadSnapshot.getStylesheetElementsNotInSnapshot(this.currentHeadSnapshot)}get newHeadScriptElements(){return this.newHeadSnapshot.getScriptElementsNotInSnapshot(this.currentHeadSnapshot)}get currentHeadProvisionalElements(){return this.currentHeadSnapshot.provisionalElements}get newHeadProvisionalElements(){return this.newHeadSnapshot.provisionalElements}get newBodyScriptElements(){return this.newElement.querySelectorAll("script")}}class at{keys=[];snapshots={};constructor(e){this.size=e}has(e){return d(e)in this.snapshots}get(e){if(this.has(e)){const t=this.read(e);return this.touch(e),t}}put(e,t){return this.write(e,t),this.touch(e),t}clear(){this.snapshots={}}read(e){return this.snapshots[d(e)]}write(e,t){this.snapshots[d(e)]=t}touch(e){const t=d(e),s=this.keys.indexOf(t);s>-1&&this.keys.splice(s,1),this.keys.unshift(t),this.trim()}trim(){for(const e of this.keys.splice(this.size))delete this.snapshots[e]}}class ct extends K{snapshotCache=new at(10);lastRenderedLocation=new URL(location.href);forceReloaded=!1;shouldTransitionTo(e){return this.snapshot.prefersViewTransitions&&e.prefersViewTransitions}renderPage(e,t=!1,s=!0,i){const r=new(this.isPageRefresh(i)&&this.snapshot.shouldMorphPage?nt:ot)(this.snapshot,e,ot.renderElement,t,s);return r.shouldRender?i?.changeHistory():this.forceReloaded=!0,this.render(r)}renderError(e,t){t?.changeHistory();const s=new Ne(this.snapshot,e,Ne.renderElement,!1);return this.render(s)}clearSnapshotCache(){this.snapshotCache.clear()}async cacheSnapshot(e=this.snapshot){if(e.isCacheable){this.delegate.viewWillCacheSnapshot();const{lastRenderedLocation:t}=this;await g();const s=e.clone();return this.snapshotCache.put(t,s),s}}getCachedSnapshotForLocation(e){return this.snapshotCache.get(e)}isPageRefresh(e){return!e||this.lastRenderedLocation.href===e.location.href}get snapshot(){return ae.fromElement(this.element)}}class lt{selector="a[data-turbo-preload]";constructor(e){this.delegate=e}get snapshotCache(){return this.delegate.navigator.view.snapshotCache}start(){if("loading"===document.readyState)return document.addEventListener("DOMContentLoaded",(()=>{this.preloadOnLoadLinksForView(document.body)}));this.preloadOnLoadLinksForView(document.body)}preloadOnLoadLinksForView(e){for(const t of e.querySelectorAll(this.selector))this.preloadURL(t)}async preloadURL(e){const t=new URL(e.href);if(!this.snapshotCache.has(t))try{const e=await F(t.toString(),{headers:{"Sec-Purpose":"prefetch",Accept:"text/html"}}),s=await e.text(),i=ae.fromHTMLString(s);this.snapshotCache.put(t,i)}catch(e){}}}class ht extends Set{constructor(e){super(),this.maxSize=e}add(e){if(this.size>=this.maxSize){const e=this.values().next().value;this.delete(e)}super.add(e)}}class dt{constructor(e){this.session=e}clear(){this.session.clearCache()}resetCacheControl(){this.#R("")}exemptPageFromCache(){this.#R("no-cache")}exemptPageFromPreview(){this.#R("no-preview")}#R(e){!function(e,t){let s=C(e);s||(s=document.createElement("meta"),s.setAttribute("name",e),document.head.appendChild(s)),s.setAttribute("content",t)}("turbo-cache-control",e)}}function ut(e){Object.defineProperties(e,mt)}const mt={absoluteURL:{get(){return this.toString()}}},pt=new class{navigator=new Pe(this);history=new Te(this);preloader=new lt(this);view=new ct(this,document.documentElement);adapter=new Ae(this);pageObserver=new He(this);cacheObserver=new Le;linkClickObserver=new Y(this,window);formSubmitObserver=new J(this,document);scrollObserver=new qe(this);streamObserver=new Oe(this);formLinkClickObserver=new Z(this,document.documentElement);frameRedirector=new Ce(this,document.documentElement);streamMessageRenderer=new Be;cache=new dt(this);recentRequests=new ht(20);drive=!0;enabled=!0;progressBarDelay=500;started=!1;formMode="on";start(){this.started||(this.pageObserver.start(),this.cacheObserver.start(),this.formLinkClickObserver.start(),this.linkClickObserver.start(),this.formSubmitObserver.start(),this.scrollObserver.start(),this.streamObserver.start(),this.frameRedirector.start(),this.history.start(),this.preloader.start(),this.started=!0,this.enabled=!0)}disable(){this.enabled=!1}stop(){this.started&&(this.pageObserver.stop(),this.cacheObserver.stop(),this.formLinkClickObserver.stop(),this.linkClickObserver.stop(),this.formSubmitObserver.stop(),this.scrollObserver.stop(),this.streamObserver.stop(),this.frameRedirector.stop(),this.history.stop(),this.started=!1)}registerAdapter(e){this.adapter=e}visit(e,t={}){const s=t.frame?document.getElementById(t.frame):null;s instanceof i?(s.src=e.toString(),s.loaded):this.navigator.proposeVisit(r(e),t)}refresh(e,t){t&&this.recentRequests.has(t)||(this.cache.exemptPageFromPreview(),this.visit(e,{action:"replace"}))}connectStreamSource(e){this.streamObserver.connectStreamSource(e)}disconnectStreamSource(e){this.streamObserver.disconnectStreamSource(e)}renderStreamMessage(e){this.streamMessageRenderer.render(U.wrap(e))}clearCache(){this.view.clearSnapshotCache()}setProgressBarDelay(e){this.progressBarDelay=e}setFormMode(e){this.formMode=e}get location(){return this.history.location}get restorationIdentifier(){return this.history.restorationIdentifier}historyPoppedToLocationWithRestorationIdentifier(e,t){this.enabled?this.navigator.startVisit(e,t,{action:"restore",historyChanged:!0}):this.adapter.pageInvalidated({reason:"turbo_disabled"})}scrollPositionChanged(e){this.history.updateRestorationData({scrollPosition:e})}willSubmitFormLinkToLocation(e,t){return this.elementIsNavigatable(e)&&l(t,this.snapshot.rootLocation)}submittedFormLinkToLocation(){}willFollowLinkToLocation(e,t,s){return this.elementIsNavigatable(e)&&l(t,this.snapshot.rootLocation)&&this.applicationAllowsFollowingLinkToLocation(e,t,s)}followedLinkToLocation(e,t){const s=this.getActionForLink(e),i=e.hasAttribute("data-turbo-stream");this.visit(t.href,{action:s,acceptsStreamResponse:i})}allowsVisitingLocationWithAction(e,t){return this.locationWithActionIsSamePage(e,t)||this.applicationAllowsVisitingLocation(e)}visitProposedToLocation(e,t){ut(e),this.adapter.visitProposedToLocation(e,t)}visitStarted(e){e.acceptsStreamResponse||y(document.documentElement),ut(e.location),e.silent||this.notifyApplicationAfterVisitingLocation(e.location,e.action)}visitCompleted(e){E(document.documentElement),this.notifyApplicationAfterPageLoad(e.getTimingMetrics())}locationWithActionIsSamePage(e,t){return this.navigator.locationWithActionIsSamePage(e,t)}visitScrolledToSamePageLocation(e,t){this.notifyApplicationAfterVisitingSamePageLocation(e,t)}willSubmitForm(e,t){const s=o(e,t);return this.submissionIsNavigatable(e,t)&&l(r(s),this.snapshot.rootLocation)}formSubmitted(e,t){this.navigator.submitForm(e,t)}pageBecameInteractive(){this.view.lastRenderedLocation=this.location,this.notifyApplicationAfterPageLoad()}pageLoaded(){this.history.assumeControlOfScrollRestoration()}pageWillUnload(){this.history.relinquishControlOfScrollRestoration()}receivedMessageFromStream(e){this.renderStreamMessage(e)}viewWillCacheSnapshot(){this.navigator.currentVisit?.silent||this.notifyApplicationBeforeCachingSnapshot()}allowsImmediateRender({element:e},t,s){const i=this.notifyApplicationBeforeRender(e,t,s),{defaultPrevented:r,detail:{render:n}}=i;return this.view.renderer&&n&&(this.view.renderer.renderElement=n),!r}viewRenderedSnapshot(e,t,s){this.view.lastRenderedLocation=this.history.location,this.notifyApplicationAfterRender(t,s)}preloadOnLoadLinksForView(e){this.preloader.preloadOnLoadLinksForView(e)}viewInvalidated(e){this.adapter.pageInvalidated(e)}frameLoaded(e){this.notifyApplicationAfterFrameLoad(e)}frameRendered(e,t){this.notifyApplicationAfterFrameRender(e,t)}applicationAllowsFollowingLinkToLocation(e,t,s){return!this.notifyApplicationAfterClickingLinkToLocation(e,t,s).defaultPrevented}applicationAllowsVisitingLocation(e){return!this.notifyApplicationBeforeVisitingLocation(e).defaultPrevented}notifyApplicationAfterClickingLinkToLocation(e,t,s){return p("turbo:click",{target:e,detail:{url:t.href,originalEvent:s},cancelable:!0})}notifyApplicationBeforeVisitingLocation(e){return p("turbo:before-visit",{detail:{url:e.href},cancelable:!0})}notifyApplicationAfterVisitingLocation(e,t){return p("turbo:visit",{detail:{url:e.href,action:t}})}notifyApplicationBeforeCachingSnapshot(){return p("turbo:before-cache")}notifyApplicationBeforeRender(e,t,s){return p("turbo:before-render",{detail:{newBody:e,isPreview:t,...s},cancelable:!0})}notifyApplicationAfterRender(e,t){return p("turbo:render",{detail:{isPreview:e,renderMethod:t}})}notifyApplicationAfterPageLoad(e={}){return p("turbo:load",{detail:{url:this.location.href,timing:e}})}notifyApplicationAfterVisitingSamePageLocation(e,t){dispatchEvent(new HashChangeEvent("hashchange",{oldURL:e.toString(),newURL:t.toString()}))}notifyApplicationAfterFrameLoad(e){return p("turbo:frame-load",{target:e})}notifyApplicationAfterFrameRender(e,t){return p("turbo:frame-render",{detail:{fetchResponse:e},target:t,cancelable:!0})}submissionIsNavigatable(e,t){if("off"==this.formMode)return!1;{const s=!t||this.elementIsNavigatable(t);return"optin"==this.formMode?s&&null!=e.closest('[data-turbo="true"]'):s&&this.elementIsNavigatable(e)}}elementIsNavigatable(e){const t=P(e,"[data-turbo]"),s=P(e,"turbo-frame");return this.drive||s?!t||"false"!=t.getAttribute("data-turbo"):!!t&&"true"==t.getAttribute("data-turbo")}getActionForLink(e){return L(e)||"advance"}get snapshot(){return this.view.snapshot}},{cache:ft,navigator:gt}=pt;function bt(){pt.start()}function vt(e){pt.registerAdapter(e)}function St(e,t){pt.visit(e,t)}function wt(e){pt.connectStreamSource(e)}function yt(e){pt.disconnectStreamSource(e)}function Et(e){pt.renderStreamMessage(e)}function Rt(){console.warn("Please replace `Turbo.clearCache()` with `Turbo.cache.clear()`. The top-level function is deprecated and will be removed in a future version of Turbo.`"),pt.clearCache()}function At(e){pt.setProgressBarDelay(e)}function Lt(e){$.confirmMethod=e}function Ct(e){pt.setFormMode(e)}var Tt=Object.freeze({__proto__:null,navigator:gt,session:pt,cache:ft,PageRenderer:ot,PageSnapshot:ae,FrameRenderer:se,fetch:F,start:bt,registerAdapter:vt,visit:St,connectStreamSource:wt,disconnectStreamSource:yt,renderStreamMessage:Et,clearCache:Rt,setProgressBarDelay:At,setConfirmMethod:Lt,setFormMode:Ct});class Pt extends Error{}function kt(e){if(null!=e){const t=document.getElementById(e);if(t instanceof i)return t}}function Mt(e,t){if(e){const n=e.getAttribute("src");if(null!=n&&null!=t&&(s=t,r(n).href==r(s).href))throw new Error(`Matching element has a source URL which references itself`);if(e.ownerDocument!==document&&(e=document.importNode(e,!0)),e instanceof i)return e.connectedCallback(),e.disconnectedCallback(),e}var s}const Ft={after(){this.targetElements.forEach((e=>e.parentElement?.insertBefore(this.templateContent,e.nextSibling)))},append(){this.removeDuplicateTargetChildren(),this.targetElements.forEach((e=>e.append(this.templateContent)))},before(){this.targetElements.forEach((e=>e.parentElement?.insertBefore(this.templateContent,e)))},prepend(){this.removeDuplicateTargetChildren(),this.targetElements.forEach((e=>e.prepend(this.templateContent)))},remove(){this.targetElements.forEach((e=>e.remove()))},replace(){this.targetElements.forEach((e=>e.replaceWith(this.templateContent)))},update(){this.targetElements.forEach((e=>{e.innerHTML="",e.append(this.templateContent)}))},refresh(){pt.refresh(this.baseURI,this.requestId)}};class It extends HTMLElement{static async renderElement(e){await e.performAction()}async connectedCallback(){try{await this.render()}catch(e){console.error(e)}finally{this.disconnect()}}async render(){return this.renderPromise??=(async()=>{const e=this.beforeRenderEvent;this.dispatchEvent(e)&&(await("hidden"===document.visibilityState?g():f()),await e.detail.render(this))})()}disconnect(){try{this.remove()}catch{}}removeDuplicateTargetChildren(){this.duplicateChildren.forEach((e=>e.remove()))}get duplicateChildren(){const e=this.targetElements.flatMap((e=>[...e.children])).filter((e=>!!e.id)),t=[...this.templateContent?.children||[]].filter((e=>!!e.id)).map((e=>e.id));return e.filter((e=>t.includes(e.id)))}get performAction(){if(this.action){const e=Ft[this.action];if(e)return e;this.#A("unknown action")}this.#A("action attribute is missing")}get targetElements(){return this.target?this.targetElementsById:this.targets?this.targetElementsByQuery:void this.#A("target or targets attribute is missing")}get templateContent(){return this.templateElement.content.cloneNode(!0)}get templateElement(){if(null===this.firstElementChild){const e=this.ownerDocument.createElement("template");return this.appendChild(e),e}if(this.firstElementChild instanceof HTMLTemplateElement)return this.firstElementChild;this.#A("first child element must be a