diff --git a/pkg/connectors/icinga2/connector.go b/pkg/connectors/icinga2/connector.go
index 7f1902a9..fe989d78 100644
--- a/pkg/connectors/icinga2/connector.go
+++ b/pkg/connectors/icinga2/connector.go
@@ -200,6 +200,7 @@ func (c *Connector) get(endpoint string, ctx context.Context) (io.ReadCloser, er
if res.StatusCode >= 200 && res.StatusCode < 300 {
return res.Body, nil
}
+ defer res.Body.Close()
if ct := res.Header.Get("Content-Type"); ct == "application/json" {
e := struct {
diff --git a/pkg/web/common/server.go b/pkg/web/common/server.go
index c5d200b6..aac4ebb3 100644
--- a/pkg/web/common/server.go
+++ b/pkg/web/common/server.go
@@ -34,7 +34,7 @@ func Serve(ctx context.Context, addr string, handler http.Handler) {
close(idleConnectionsClosed)
}()
- slog.InfoContext(ctx, "Starting http server", slog.String("addr", addr))
+ slog.InfoContext(ctx, "Starting http server", slog.String("addr", "http://"+addr))
if err := srv.ListenAndServe(); !errors.Is(err, http.ErrServerClosed) {
// Still try to start, application might still do useful work
diff --git a/pkg/web/static/js/index.js b/pkg/web/static/js/index.js
index 95447ee1..a95e3356 100644
--- a/pkg/web/static/js/index.js
+++ b/pkg/web/static/js/index.js
@@ -2,8 +2,6 @@ import * as Turbo from '@hotwired/turbo';
import ReconnectingWebSocket from 'reconnecting-websocket';
import { toggleFilteredStatus } from "./toggle-filtered";
-toggleFilteredStatus();
-
class SSEConn {
constructor(socketUrl) {
this.socketUrl = socketUrl;
@@ -70,7 +68,12 @@ class FallbackConn {
let conn = this;
this.timerId = setTimeout(function reload() {
if (conn.active) {
- let lastRefresh = Date.parse(document.querySelector("#last_refresh").dateTime);
+ let lastRefreshNode = document.querySelector("#last_refresh");
+ let lastRefresh = Date.now();
+ if (lastRefreshNode) {
+ lastRefresh = Date.parse(lastRefreshNode.dateTime);
+ }
+
if (Date.now() - lastRefresh > 90000) {
console.log("Force reloading, last refresh too old: " + (Date.now() - lastRefresh))
location.reload();
@@ -127,6 +130,8 @@ fallback.connect();
conn.connect();
document.addEventListener("DOMContentLoaded", function () {
+ toggleFilteredStatus();
+
console.log('Adding handler for manual disconnect.');
const csEl = document.getElementById('connection-state');
csEl.addEventListener("change", function () {
diff --git a/pkg/web/static/js/index.min.js b/pkg/web/static/js/index.min.js
index 66f69530..cd6277f0 100644
--- a/pkg/web/static/js/index.min.js
+++ b/pkg/web/static/js/index.min.js
@@ -1,8 +1,8 @@
/*!
-Turbo 8.0.19
+Turbo 8.0.17
Copyright © 2025 37signals LLC
*/
-!function(e){function t(e,t,r){throw new e("Failed to execute 'requestSubmit' on 'HTMLFormElement': "+t+".",r)}"function"!=typeof e.requestSubmit&&(e.requestSubmit=function(e){e?(!function(e,r){e instanceof HTMLElement||t(TypeError,"parameter 1 is not of type 'HTMLElement'"),"submit"==e.type||t(TypeError,"The specified element is not a submit button"),e.form==r||t(DOMException,"The specified element is not owned by this form element","NotFoundError")}(e,this),e.click()):((e=document.createElement("input")).type="submit",e.hidden=!0,this.appendChild(e),e.click(),this.removeChild(e))})}(HTMLFormElement.prototype);const e=new WeakMap;function t(t){const r=function(e){const t=e instanceof Element?e:e instanceof Node?e.parentElement:null,r=t?t.closest("input, button"):null;return"submit"==r?.type?r:null}(t.target);r&&r.form&&e.set(r.form,r)}!function(){if("submitter"in Event.prototype)return;let r=window.Event.prototype;if("SubmitEvent"in window){const e=window.SubmitEvent.prototype;if(!/Apple Computer/.test(navigator.vendor)||"submitter"in e)return;r=e}addEventListener("click",t,!0),Object.defineProperty(r,"submitter",{get(){if("submit"==this.type&&this.target instanceof HTMLFormElement)return e.get(this.target)}})}();const r="eager",s="lazy";class i extends HTMLElement{static delegateConstructor=void 0;loaded=Promise.resolve();static get observedAttributes(){return["disabled","loading","src"]}constructor(){super(),this.delegate=new i.delegateConstructor(this)}connectedCallback(){this.delegate.connect()}disconnectedCallback(){this.delegate.disconnect()}reload(){return this.delegate.sourceURLReloaded()}attributeChangedCallback(e){"loading"==e?this.delegate.loadingStyleChanged():"src"==e?this.delegate.sourceURLChanged():"disabled"==e&&this.delegate.disabledChanged()}get src(){return this.getAttribute("src")}set src(e){e?this.setAttribute("src",e):this.removeAttribute("src")}get refresh(){return this.getAttribute("refresh")}set refresh(e){e?this.setAttribute("refresh",e):this.removeAttribute("refresh")}get shouldReloadWithMorph(){return this.src&&"morph"===this.refresh}get loading(){return function(e){if("lazy"===e.toLowerCase())return s;return r}(this.getAttribute("loading")||"")}set loading(e){e?this.setAttribute("loading",e):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get autoscroll(){return this.hasAttribute("autoscroll")}set autoscroll(e){e?this.setAttribute("autoscroll",""):this.removeAttribute("autoscroll")}get complete(){return!this.delegate.isLoading}get isActive(){return this.ownerDocument===document&&!this.isPreview}get isPreview(){return this.ownerDocument?.documentElement?.hasAttribute("data-turbo-preview")}}const n={enabled:!0,progressBarDelay:500,unvisitableExtensions:new Set([".7z",".aac",".apk",".avi",".bmp",".bz2",".css",".csv",".deb",".dmg",".doc",".docx",".exe",".gif",".gz",".heic",".heif",".ico",".iso",".jpeg",".jpg",".js",".json",".m4a",".mkv",".mov",".mp3",".mp4",".mpeg",".mpg",".msi",".ogg",".ogv",".pdf",".pkg",".png",".ppt",".pptx",".rar",".rtf",".svg",".tar",".tif",".tiff",".txt",".wav",".webm",".webp",".wma",".wmv",".xls",".xlsx",".xml",".zip"])};function o(e){if("false"==e.getAttribute("data-turbo-eval"))return e;{const t=document.createElement("script"),r=L();return r&&(t.nonce=r),t.textContent=e.textContent,t.async=!1,function(e,t){for(const{name:r,value:s}of t.attributes)e.setAttribute(r,s)}(t,e),t}}function a(e,{target:t,cancelable:r,detail:s}={}){const i=new CustomEvent(e,{cancelable:r,bubbles:!0,composed:!0,detail:s});return t&&t.isConnected?t.dispatchEvent(i):document.documentElement.dispatchEvent(i),i}function c(e){e.preventDefault(),e.stopImmediatePropagation()}function l(){return"hidden"===document.visibilityState?d():h()}function h(){return new Promise(e=>requestAnimationFrame(()=>e()))}function d(){return new Promise(e=>setTimeout(()=>e(),0))}function u(e=""){return(new DOMParser).parseFromString(e,"text/html")}function m(e,...t){const r=function(e,t){return e.reduce((e,r,s)=>e+r+(null==t[s]?"":t[s]),"")}(e,t).replace(/^\n/,"").split("\n"),s=r[0].match(/^\s+/),i=s?s[0].length:0;return r.map(e=>e.slice(i)).join("\n")}function p(){return Array.from({length:36}).map((e,t)=>8==t||13==t||18==t||23==t?"-":14==t?"4":19==t?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16)).join("")}function f(e,...t){for(const r of t.map(t=>t?.getAttribute(e)))if("string"==typeof r)return r;return null}function g(...e){for(const t of e)"turbo-frame"==t.localName&&t.setAttribute("busy",""),t.setAttribute("aria-busy","true")}function b(...e){for(const t of e)"turbo-frame"==t.localName&&t.removeAttribute("busy"),t.removeAttribute("aria-busy")}function v(e,t=2e3){return new Promise(r=>{const s=()=>{e.removeEventListener("error",s),e.removeEventListener("load",s),r()};e.addEventListener("load",s,{once:!0}),e.addEventListener("error",s,{once:!0}),setTimeout(r,t)})}function w(e){switch(e){case"replace":return history.replaceState;case"advance":case"restore":return history.pushState}}function y(...e){const t=f("data-turbo-action",...e);return function(e){return"advance"==e||"replace"==e||"restore"==e}(t)?t:null}function S(e){return document.querySelector(`meta[name="${e}"]`)}function E(e){const t=S(e);return t&&t.content}function L(){const e=S("csp-nonce");if(e){const{nonce:t,content:r}=e;return""==t?r:t}}function T(e,t){if(e instanceof Element)return e.closest(t)||T(e.assignedSlot||e.getRootNode()?.host,t)}function R(e){return!!e&&null==e.closest("[inert], :disabled, [hidden], details:not([open]), dialog:not([open])")&&"function"==typeof e.focus}function A(e){return Array.from(e.querySelectorAll("[autofocus]")).find(R)}function C(e){if("_blank"===e)return!1;if(e){for(const t of document.getElementsByName(e))if(t instanceof HTMLIFrameElement)return!1;return!0}return!0}function P(e){const t=T(e,"a[href], a[xlink\\:href]");return t?t.hasAttribute("download")||t.hasAttribute("target")&&"_self"!==t.target?null:t:null}function k(e){return F(e.getAttribute("href")||"")}const M={"aria-disabled":{beforeSubmit:e=>{e.setAttribute("aria-disabled","true"),e.addEventListener("click",c)},afterSubmit:e=>{e.removeAttribute("aria-disabled"),e.removeEventListener("click",c)}},disabled:{beforeSubmit:e=>e.disabled=!0,afterSubmit:e=>e.disabled=!1}};const I=new class{#e=null;constructor(e){Object.assign(this,e)}get submitter(){return this.#e}set submitter(e){this.#e=M[e]||e}}({mode:"on",submitter:"disabled"}),_={drive:n,forms:I};function F(e){return new URL(e.toString(),document.baseURI)}function q(e){let t;return e.hash?e.hash.slice(1):(t=e.href.match(/#(.*)$/))?t[1]:void 0}function O(e,t){return F(t?.getAttribute("formaction")||e.getAttribute("action")||e.action)}function H(e){return(function(e){return function(e){return e.pathname.split("/").slice(1)}(e).slice(-1)[0]}(e).match(/\.[^.]*$/)||[])[0]||""}function N(e,t){return function(e,t){const r=V(t.origin+t.pathname);return V(e.href)===r||e.href.startsWith(r)}(e,t)&&!_.drive.unvisitableExtensions.has(H(e))}function B(e){const t=q(e);return null!=t?e.href.slice(0,-(t.length+1)):e.href}function x(e){return B(e)}function D(e,t){return F(e).href==F(t).href}function V(e){return e.endsWith("/")?e:e+"/"}class W{constructor(e){this.response=e}get succeeded(){return this.response.ok}get failed(){return!this.succeeded}get clientError(){return this.statusCode>=400&&this.statusCode<=499}get serverError(){return this.statusCode>=500&&this.statusCode<=599}get redirected(){return this.response.redirected}get location(){return F(this.response.url)}get isHTML(){return this.contentType&&this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/)}get statusCode(){return this.response.status}get contentType(){return this.header("Content-Type")}get responseText(){return this.response.clone().text()}get responseHTML(){return this.isHTML?this.response.clone().text():Promise.resolve(void 0)}header(e){return this.response.headers.get(e)}}class U 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)}}const j=new U(20);function $(e,t={}){const r=new Headers(t.headers||{}),s=p();return j.add(s),r.append("X-Turbo-Request-Id",s),window.fetch(e,{...t,headers:r})}function z(e){switch(e.toLowerCase()){case"get":return G.get;case"post":return G.post;case"put":return G.put;case"patch":return G.patch;case"delete":return G.delete}}const G={get:"get",post:"post",put:"put",patch:"patch",delete:"delete"};const Q={urlEncoded:"application/x-www-form-urlencoded",multipart:"multipart/form-data",plain:"text/plain"};class X{abortController=new AbortController;#t=e=>{};constructor(e,t,r,s=new URLSearchParams,i=null,n=Q.urlEncoded){const[o,a]=Y(F(r),t,s,n);this.delegate=e,this.url=o,this.target=i,this.fetchOptions={credentials:"same-origin",redirect:"follow",method:t.toUpperCase(),headers:{...this.defaultHeaders},body:a,signal:this.abortSignal,referrer:this.delegate.referrer?.href},this.enctype=n}get method(){return this.fetchOptions.method}set method(e){const t=this.isSafe?this.url.searchParams:this.fetchOptions.body||new FormData,r=z(e)||G.get;this.url.search="";const[s,i]=Y(this.url,r,t,this.enctype);this.url=s,this.fetchOptions.body=i,this.fetchOptions.method=r.toUpperCase()}get headers(){return this.fetchOptions.headers}set headers(e){this.fetchOptions.headers=e}get body(){return this.isSafe?this.url.searchParams:this.fetchOptions.body}set body(e){this.fetchOptions.body=e}get location(){return this.url}get params(){return this.url.searchParams}get entries(){return this.body?Array.from(this.body.entries()):[]}cancel(){this.abortController.abort()}async perform(){const{fetchOptions:e}=this;this.delegate.prepareRequest(this);const t=await this.#r(e);try{this.delegate.requestStarted(this),t.detail.fetchRequest?this.response=t.detail.fetchRequest.response:this.response=$(this.url.href,e);const r=await this.response;return await this.receive(r)}catch(e){if("AbortError"!==e.name)throw this.#s(e)&&this.delegate.requestErrored(this,e),e}finally{this.delegate.requestFinished(this)}}async receive(e){const t=new W(e);return a("turbo:before-fetch-response",{cancelable:!0,detail:{fetchResponse:t},target:this.target}).defaultPrevented?this.delegate.requestPreventedHandlingResponse(this,t):t.succeeded?this.delegate.requestSucceededWithResponse(this,t):this.delegate.requestFailedWithResponse(this,t),t}get defaultHeaders(){return{Accept:"text/html, application/xhtml+xml"}}get isSafe(){return K(this.method)}get abortSignal(){return this.abortController.signal}acceptResponseType(e){this.headers.Accept=[e,this.headers.Accept].join(", ")}async#r(e){const t=new Promise(e=>this.#t=e),r=a("turbo:before-fetch-request",{cancelable:!0,detail:{fetchOptions:e,url:this.url,resume:this.#t},target:this.target});return this.url=r.detail.url,r.defaultPrevented&&await t,r}#s(e){return!a("turbo:fetch-request-error",{target:this.target,cancelable:!0,detail:{request:this,error:e}}).defaultPrevented}}function K(e){return z(e)==G.get}function Y(e,t,r,s){const i=Array.from(r).length>0?new URLSearchParams(J(r)):e.searchParams;return K(t)?[Z(e,i),null]:s==Q.urlEncoded?[e,i]:[e,r]}function J(e){const t=[];for(const[r,s]of e)s instanceof File||t.push([r,s]);return t}function Z(e,t){const r=new URLSearchParams(J(t));return e.search=r.toString(),e}class ee{started=!1;constructor(e,t){this.delegate=e,this.element=t,this.intersectionObserver=new IntersectionObserver(this.intersect)}start(){this.started||(this.started=!0,this.intersectionObserver.observe(this.element))}stop(){this.started&&(this.started=!1,this.intersectionObserver.unobserve(this.element))}intersect=e=>{const t=e.slice(-1)[0];t?.isIntersecting&&this.delegate.elementAppearedInViewport(this.element)}}class te{static contentType="text/vnd.turbo-stream.html";static wrap(e){return"string"==typeof e?new this(function(e){const t=document.createElement("template");return t.innerHTML=e,t.content}(e)):e}constructor(e){this.fragment=function(e){for(const t of e.querySelectorAll("turbo-stream")){const e=document.importNode(t,!0);for(const t of e.templateElement.content.querySelectorAll("script"))t.replaceWith(o(t));t.replaceWith(e)}return e}(e)}}const re=new class{#i=null;#n=null;get(e){if(this.#n&&this.#n.url===e&&this.#n.expire>Date.now())return this.#n.request}setLater(e,t,r){this.clear(),this.#i=setTimeout(()=>{t.perform(),this.set(e,t,r),this.#i=null},100)}set(e,t,r){this.#n={url:e,request:t,expire:new Date((new Date).getTime()+r)}}clear(){this.#i&&clearTimeout(this.#i),this.#n=null}},se={initialized:"initialized",requesting:"requesting",waiting:"waiting",receiving:"receiving",stopping:"stopping",stopped:"stopped"};class ie{state=se.initialized;static confirmMethod(e){return Promise.resolve(confirm(e))}constructor(e,t,r,s=!1){const i=function(e,t){const r=t?.getAttribute("formmethod")||e.getAttribute("method")||"";return z(r.toLowerCase())||G.get}(t,r),n=function(e,t){const r=F(e);K(t)&&(r.search="");return r}(function(e,t){const r="string"==typeof e.action?e.action:null;return t?.hasAttribute("formaction")?t.getAttribute("formaction")||"":e.getAttribute("action")||r||""}(t,r),i),o=function(e,t){const r=new FormData(e),s=t?.getAttribute("name"),i=t?.getAttribute("value");s&&r.append(s,i||"");return r}(t,r),a=function(e,t){return function(e){switch(e.toLowerCase()){case Q.multipart:return Q.multipart;case Q.plain:return Q.plain;default:return Q.urlEncoded}}(t?.getAttribute("formenctype")||e.enctype)}(t,r);this.delegate=e,this.formElement=t,this.submitter=r,this.fetchRequest=new X(this,i,n,o,t,a),this.mustRedirect=s}get method(){return this.fetchRequest.method}set method(e){this.fetchRequest.method=e}get action(){return this.fetchRequest.url.toString()}set action(e){this.fetchRequest.url=F(e)}get body(){return this.fetchRequest.body}get enctype(){return this.fetchRequest.enctype}get isSafe(){return this.fetchRequest.isSafe}get location(){return this.fetchRequest.url}async start(){const{initialized:e,requesting:t}=se,r=f("data-turbo-confirm",this.submitter,this.formElement);if("string"==typeof r){const e="function"==typeof _.forms.confirm?_.forms.confirm:ie.confirmMethod;if(!await e(r,this.formElement,this.submitter))return}if(this.state==e)return this.state=t,this.fetchRequest.perform()}stop(){const{stopping:e,stopped:t}=se;if(this.state!=e&&this.state!=t)return this.state=e,this.fetchRequest.cancel(),!0}prepareRequest(e){if(!e.isSafe){const t=function(e){if(null!=e){const t=(document.cookie?document.cookie.split("; "):[]).find(t=>t.startsWith(e));if(t){const e=t.split("=").slice(1).join("=");return e?decodeURIComponent(e):void 0}}}(E("csrf-param"))||E("csrf-token");t&&(e.headers["X-CSRF-Token"]=t)}this.requestAcceptsTurboStreamResponse(e)&&e.acceptResponseType(te.contentType)}requestStarted(e){this.state=se.waiting,this.submitter&&_.forms.submitter.beforeSubmit(this.submitter),this.setSubmitsWith(),g(this.formElement),a("turbo:submit-start",{target:this.formElement,detail:{formSubmission:this}}),this.delegate.formSubmissionStarted(this)}requestPreventedHandlingResponse(e,t){re.clear(),this.result={success:t.succeeded,fetchResponse:t}}requestSucceededWithResponse(e,t){if(t.clientError||t.serverError)this.delegate.formSubmissionFailedWithResponse(this,t);else if(re.clear(),this.requestMustRedirect(e)&&function(e){return 200==e.statusCode&&!e.redirected}(t)){const e=new Error("Form responses must redirect to another location");this.delegate.formSubmissionErrored(this,e)}else this.state=se.receiving,this.result={success:!0,fetchResponse:t},this.delegate.formSubmissionSucceededWithResponse(this,t)}requestFailedWithResponse(e,t){this.result={success:!1,fetchResponse:t},this.delegate.formSubmissionFailedWithResponse(this,t)}requestErrored(e,t){this.result={success:!1,error:t},this.delegate.formSubmissionErrored(this,t)}requestFinished(e){this.state=se.stopped,this.submitter&&_.forms.submitter.afterSubmit(this.submitter),this.resetSubmitterText(),b(this.formElement),a("turbo:submit-end",{target:this.formElement,detail:{formSubmission:this,...this.result}}),this.delegate.formSubmissionFinished(this)}setSubmitsWith(){if(this.submitter&&this.submitsWith)if(this.submitter.matches("button"))this.originalSubmitText=this.submitter.innerHTML,this.submitter.innerHTML=this.submitsWith;else if(this.submitter.matches("input")){const e=this.submitter;this.originalSubmitText=e.value,e.value=this.submitsWith}}resetSubmitterText(){if(this.submitter&&this.originalSubmitText)if(this.submitter.matches("button"))this.submitter.innerHTML=this.originalSubmitText;else if(this.submitter.matches("input")){this.submitter.value=this.originalSubmitText}}requestMustRedirect(e){return!e.isSafe&&this.mustRedirect}requestAcceptsTurboStreamResponse(e){return!e.isSafe||function(e,...t){return t.some(t=>t&&t.hasAttribute(e))}("data-turbo-stream",this.submitter,this.formElement)}get submitsWith(){return this.submitter?.getAttribute("data-turbo-submits-with")}}class ne{constructor(e){this.element=e}get activeElement(){return this.element.ownerDocument.activeElement}get children(){return[...this.element.children]}hasAnchor(e){return null!=this.getElementForAnchor(e)}getElementForAnchor(e){return e?this.element.querySelector(`[id='${e}'], a[name='${e}']`):null}get isConnected(){return this.element.isConnected}get firstAutofocusableElement(){return A(this.element)}get permanentElements(){return ae(this.element)}getPermanentElementById(e){return oe(this.element,e)}getPermanentElementMapForSnapshot(e){const t={};for(const r of this.permanentElements){const{id:s}=r,i=e.getPermanentElementById(s);i&&(t[s]=[r,i])}return t}}function oe(e,t){return e.querySelector(`#${t}[data-turbo-permanent]`)}function ae(e){return e.querySelectorAll("[id][data-turbo-permanent]")}class ce{started=!1;constructor(e,t){this.delegate=e,this.eventTarget=t}start(){this.started||(this.eventTarget.addEventListener("submit",this.submitCaptured,!0),this.started=!0)}stop(){this.started&&(this.eventTarget.removeEventListener("submit",this.submitCaptured,!0),this.started=!1)}submitCaptured=()=>{this.eventTarget.removeEventListener("submit",this.submitBubbled,!1),this.eventTarget.addEventListener("submit",this.submitBubbled,!1)};submitBubbled=e=>{if(!e.defaultPrevented){const t=e.target instanceof HTMLFormElement?e.target:void 0,r=e.submitter||void 0;t&&function(e,t){const r=t?.getAttribute("formmethod")||e.getAttribute("method");return"dialog"!=r}(t,r)&&function(e,t){const r=t?.getAttribute("formtarget")||e.getAttribute("target");return C(r)}(t,r)&&this.delegate.willSubmitForm(t,r)&&(e.preventDefault(),e.stopImmediatePropagation(),this.delegate.formSubmitted(t,r))}}}class le{#o=e=>{};#a=e=>{};constructor(e,t){this.delegate=e,this.element=t}scrollToAnchor(e){const t=this.snapshot.getElementForAnchor(e);t?(this.focusElement(t),this.scrollToElement(t)):this.scrollToPosition({x:0,y:0})}scrollToAnchorFromLocation(e){this.scrollToAnchor(q(e))}scrollToElement(e){e.scrollIntoView()}focusElement(e){e instanceof HTMLElement&&(e.hasAttribute("tabindex")?e.focus():(e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")))}scrollToPosition({x:e,y:t}){this.scrollRoot.scrollTo(e,t)}scrollToTop(){this.scrollToPosition({x:0,y:0})}get scrollRoot(){return window}async render(e){const{isPreview:t,shouldRender:r,willRender:s,newSnapshot:i}=e,n=s;if(r)try{this.renderPromise=new Promise(e=>this.#o=e),this.renderer=e,await this.prepareToRenderSnapshot(e);const r=new Promise(e=>this.#a=e),s={resume:this.#a,render:this.renderer.renderElement,renderMethod:this.renderer.renderMethod};this.delegate.allowsImmediateRender(i,s)||await r,await this.renderSnapshot(e),this.delegate.viewRenderedSnapshot(i,t,this.renderer.renderMethod),this.delegate.preloadOnLoadLinksForView(this.element),this.finishRenderingSnapshot(e)}finally{delete this.renderer,this.#o(void 0),delete this.renderPromise}else n&&this.invalidate(e.reloadReason)}invalidate(e){this.delegate.viewInvalidated(e)}async prepareToRenderSnapshot(e){this.markAsPreview(e.isPreview),await e.prepareToRender()}markAsPreview(e){e?this.element.setAttribute("data-turbo-preview",""):this.element.removeAttribute("data-turbo-preview")}markVisitDirection(e){this.element.setAttribute("data-turbo-visit-direction",e)}unmarkVisitDirection(){this.element.removeAttribute("data-turbo-visit-direction")}async renderSnapshot(e){await e.render()}finishRenderingSnapshot(e){e.finishRendering()}}class he extends le{missing(){this.element.innerHTML='Content missing'}get snapshot(){return new ne(this.element)}}class de{constructor(e,t){this.delegate=e,this.element=t}start(){this.element.addEventListener("click",this.clickBubbled),document.addEventListener("turbo:click",this.linkClicked),document.addEventListener("turbo:before-visit",this.willVisit)}stop(){this.element.removeEventListener("click",this.clickBubbled),document.removeEventListener("turbo:click",this.linkClicked),document.removeEventListener("turbo:before-visit",this.willVisit)}clickBubbled=e=>{this.clickEventIsSignificant(e)?this.clickEvent=e:delete this.clickEvent};linkClicked=e=>{this.clickEvent&&this.clickEventIsSignificant(e)&&this.delegate.shouldInterceptLinkClick(e.target,e.detail.url,e.detail.originalEvent)&&(this.clickEvent.preventDefault(),e.preventDefault(),this.delegate.linkClickIntercepted(e.target,e.detail.url,e.detail.originalEvent)),delete this.clickEvent};willVisit=e=>{delete this.clickEvent};clickEventIsSignificant(e){const t=e.composed?e.target?.parentElement:e.target,r=P(t)||t;return r instanceof Element&&r.closest("turbo-frame, html")==this.element}}class ue{started=!1;constructor(e,t){this.delegate=e,this.eventTarget=t}start(){this.started||(this.eventTarget.addEventListener("click",this.clickCaptured,!0),this.started=!0)}stop(){this.started&&(this.eventTarget.removeEventListener("click",this.clickCaptured,!0),this.started=!1)}clickCaptured=()=>{this.eventTarget.removeEventListener("click",this.clickBubbled,!1),this.eventTarget.addEventListener("click",this.clickBubbled,!1)};clickBubbled=e=>{if(e instanceof MouseEvent&&this.clickEventIsSignificant(e)){const t=P(e.composedPath&&e.composedPath()[0]||e.target);if(t&&C(t.target)){const r=k(t);this.delegate.willFollowLinkToLocation(t,r,e)&&(e.preventDefault(),this.delegate.followedLinkToLocation(t,r))}}};clickEventIsSignificant(e){return!(e.target&&e.target.isContentEditable||e.defaultPrevented||e.which>1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)}}class me{constructor(e,t){this.delegate=e,this.linkInterceptor=new ue(this,t)}start(){this.linkInterceptor.start()}stop(){this.linkInterceptor.stop()}canPrefetchRequestToLocation(e,t){return!1}prefetchAndCacheRequestToLocation(e,t){}willFollowLinkToLocation(e,t,r){return this.delegate.willSubmitFormLinkToLocation(e,t,r)&&(e.hasAttribute("data-turbo-method")||e.hasAttribute("data-turbo-stream"))}followedLinkToLocation(e,t){const r=document.createElement("form");for(const[e,s]of t.searchParams)r.append(Object.assign(document.createElement("input"),{type:"hidden",name:e,value:s}));const s=Object.assign(t,{search:""});r.setAttribute("data-turbo","true"),r.setAttribute("action",s.href),r.setAttribute("hidden","");const i=e.getAttribute("data-turbo-method");i&&r.setAttribute("method",i);const n=e.getAttribute("data-turbo-frame");n&&r.setAttribute("data-turbo-frame",n);const o=y(e);o&&r.setAttribute("data-turbo-action",o);const a=e.getAttribute("data-turbo-confirm");a&&r.setAttribute("data-turbo-confirm",a);e.hasAttribute("data-turbo-stream")&&r.setAttribute("data-turbo-stream",""),this.delegate.submittedFormLinkToLocation(e,t,r),document.body.appendChild(r),r.addEventListener("turbo:submit-end",()=>r.remove(),{once:!0}),requestAnimationFrame(()=>r.requestSubmit())}}class pe{static async preservingPermanentElements(e,t,r){const s=new this(e,t);s.enter(),await r(),s.leave()}constructor(e,t){this.delegate=e,this.permanentElementMap=t}enter(){for(const e in this.permanentElementMap){const[t,r]=this.permanentElementMap[e];this.delegate.enteringBardo(t,r),this.replaceNewPermanentElementWithPlaceholder(r)}}leave(){for(const e in this.permanentElementMap){const[t]=this.permanentElementMap[e];this.replaceCurrentPermanentElementWithClone(t),this.replacePlaceholderWithPermanentElement(t),this.delegate.leavingBardo(t)}}replaceNewPermanentElementWithPlaceholder(e){const t=function(e){const t=document.createElement("meta");return t.setAttribute("name","turbo-permanent-placeholder"),t.setAttribute("content",e.id),t}(e);e.replaceWith(t)}replaceCurrentPermanentElementWithClone(e){const t=e.cloneNode(!0);e.replaceWith(t)}replacePlaceholderWithPermanentElement(e){const t=this.getPlaceholderById(e.id);t?.replaceWith(e)}getPlaceholderById(e){return this.placeholders.find(t=>t.content==e)}get placeholders(){return[...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]}}class fe{#c=null;static renderElement(e,t){}constructor(e,t,r,s=!0){this.currentSnapshot=e,this.newSnapshot=t,this.isPreview=r,this.willRender=s,this.renderElement=this.constructor.renderElement,this.promise=new Promise((e,t)=>this.resolvingFunctions={resolve:e,reject:t})}get shouldRender(){return!0}get shouldAutofocus(){return!0}get reloadReason(){}prepareToRender(){}render(){}finishRendering(){this.resolvingFunctions&&(this.resolvingFunctions.resolve(),delete this.resolvingFunctions)}async preservingPermanentElements(e){await pe.preservingPermanentElements(this,this.permanentElementMap,e)}focusFirstAutofocusableElement(){if(this.shouldAutofocus){const e=this.connectedSnapshot.firstAutofocusableElement;e&&e.focus()}}enteringBardo(e){this.#c||e.contains(this.currentSnapshot.activeElement)&&(this.#c=this.currentSnapshot.activeElement)}leavingBardo(e){e.contains(this.#c)&&this.#c instanceof HTMLElement&&(this.#c.focus(),this.#c=null)}get connectedSnapshot(){return this.newSnapshot.isConnected?this.newSnapshot:this.currentSnapshot}get currentElement(){return this.currentSnapshot.element}get newElement(){return this.newSnapshot.element}get permanentElementMap(){return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)}get renderMethod(){return"replace"}}class ge extends fe{static renderElement(e,t){const r=document.createRange();r.selectNodeContents(e),r.deleteContents();const s=t,i=s.ownerDocument?.createRange();i&&(i.selectNodeContents(s),e.appendChild(i.extractContents()))}constructor(e,t,r,s,i,n=!0){super(t,r,s,i,n),this.delegate=e}get shouldRender(){return!0}async render(){await l(),this.preservingPermanentElements(()=>{this.loadFrameElement()}),this.scrollFrameIntoView(),await l(),this.focusFirstAutofocusableElement(),await l(),this.activateScriptElements()}loadFrameElement(){this.delegate.willRenderFrame(this.currentElement,this.newElement),this.renderElement(this.currentElement,this.newElement)}scrollFrameIntoView(){if(this.currentElement.autoscroll||this.newElement.autoscroll){const r=this.currentElement.firstElementChild,s=(e=this.currentElement.getAttribute("data-autoscroll-block"),t="end","end"==e||"start"==e||"center"==e||"nearest"==e?e:t),i=function(e,t){return"auto"==e||"smooth"==e?e:t}(this.currentElement.getAttribute("data-autoscroll-behavior"),"auto");if(r)return r.scrollIntoView({block:s,behavior:i}),!0}var e,t;return!1}activateScriptElements(){for(const e of this.newScriptElements){const t=o(e);e.replaceWith(t)}}get newScriptElements(){return this.currentElement.querySelectorAll("script")}}var be=function(){const e=()=>{},t={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:e,afterNodeAdded:e,beforeNodeMorphed:e,afterNodeMorphed:e,beforeNodeRemoved:e,afterNodeRemoved:e,beforeAttributeUpdated:e},head:{style:"merge",shouldPreserve:e=>"true"===e.getAttribute("im-preserve"),shouldReAppend:e=>"true"===e.getAttribute("im-re-append"),shouldRemove:e,afterHeadMorphed:e},restoreFocus:!0};const r=function(){function e(e,t,r,i){if(!1===i.callbacks.beforeNodeAdded(t))return null;if(i.idMap.has(t)){const n=document.createElement(t.tagName);return e.insertBefore(n,r),s(n,t,i),i.callbacks.afterNodeAdded(n),n}{const s=document.importNode(t,!0);return e.insertBefore(s,r),i.callbacks.afterNodeAdded(s),s}}const t=function(){function e(e,t,r){let s=e.idMap.get(t),i=e.idMap.get(r);if(!i||!s)return!1;for(const e of s)if(i.has(e))return!0;return!1}function t(e,t){const r=e,s=t;return r.nodeType===s.nodeType&&r.tagName===s.tagName&&(!r.getAttribute?.("id")||r.getAttribute?.("id")===s.getAttribute?.("id"))}return function(r,s,i,n){let o=null,a=s.nextSibling,c=0,l=i;for(;l&&l!=n;){if(t(l,s)){if(e(r,l,s))return l;null===o&&(r.idMap.has(l)||(o=l))}if(null===o&&a&&t(l,a)&&(c++,a=a.nextSibling,c>=2&&(o=void 0)),r.activeElementAndParents.includes(l))break;l=l.nextSibling}return o||null}}();function r(e,t){if(e.idMap.has(t))o(e.pantry,t,null);else{if(!1===e.callbacks.beforeNodeRemoved(t))return;t.parentNode?.removeChild(t),e.callbacks.afterNodeRemoved(t)}}function i(e,t,s){let i=t;for(;i&&i!==s;){let t=i;i=i.nextSibling,r(e,t)}return i}function n(e,t,r,s){const i=s.target.getAttribute?.("id")===t&&s.target||s.target.querySelector(`[id="${t}"]`)||s.pantry.querySelector(`[id="${t}"]`);return function(e,t){const r=e.getAttribute("id");for(;e=e.parentNode;){let s=t.idMap.get(e);s&&(s.delete(r),s.size||t.idMap.delete(e))}}(i,s),o(e,i,r),i}function o(e,t,r){if(e.moveBefore)try{e.moveBefore(t,r)}catch(s){e.insertBefore(t,r)}else e.insertBefore(t,r)}return function(o,a,c,l=null,h=null){a instanceof HTMLTemplateElement&&c instanceof HTMLTemplateElement&&(a=a.content,c=c.content),l||=a.firstChild;for(const r of c.childNodes){if(l&&l!=h){const e=t(o,r,l,h);if(e){e!==l&&i(o,l,e),s(e,r,o),l=e.nextSibling;continue}}if(r instanceof Element){const e=r.getAttribute("id");if(o.persistentIds.has(e)){const t=n(a,e,l,o);s(t,r,o),l=t.nextSibling;continue}}const c=e(a,r,l,o);c&&(l=c.nextSibling)}for(;l&&l!=h;){const e=l;l=l.nextSibling,r(o,e)}}}(),s=function(){function e(e,r,s,i){const n=r[s];if(n!==e[s]){const o=t(s,e,"update",i);o||(e[s]=r[s]),n?o||e.setAttribute(s,""):t(s,e,"remove",i)||e.removeAttribute(s)}}function t(e,t,r,s){return!("value"!==e||!s.ignoreActiveValue||t!==document.activeElement)||!1===s.callbacks.beforeAttributeUpdated(e,t,r)}function s(e,t){return!!t.ignoreActiveValue&&e===document.activeElement&&e!==document.body}return function(n,o,a){return a.ignoreActive&&n===document.activeElement?null:(!1===a.callbacks.beforeNodeMorphed(n,o)||(n instanceof HTMLHeadElement&&a.head.ignore||(n instanceof HTMLHeadElement&&"morph"!==a.head.style?i(n,o,a):(!function(r,i,n){let o=i.nodeType;if(1===o){const o=r,a=i,c=o.attributes,l=a.attributes;for(const e of l)t(e.name,o,"update",n)||o.getAttribute(e.name)!==e.value&&o.setAttribute(e.name,e.value);for(let e=c.length-1;0<=e;e--){const r=c[e];if(r&&!a.hasAttribute(r.name)){if(t(r.name,o,"remove",n))continue;o.removeAttribute(r.name)}}s(o,n)||function(r,s,i){if(r instanceof HTMLInputElement&&s instanceof HTMLInputElement&&"file"!==s.type){let n=s.value,o=r.value;e(r,s,"checked",i),e(r,s,"disabled",i),s.hasAttribute("value")?o!==n&&(t("value",r,"update",i)||(r.setAttribute("value",n),r.value=n)):t("value",r,"remove",i)||(r.value="",r.removeAttribute("value"))}else if(r instanceof HTMLOptionElement&&s instanceof HTMLOptionElement)e(r,s,"selected",i);else if(r instanceof HTMLTextAreaElement&&s instanceof HTMLTextAreaElement){let e=s.value,n=r.value;if(t("value",r,"update",i))return;e!==n&&(r.value=e),r.firstChild&&r.firstChild.nodeValue!==e&&(r.firstChild.nodeValue=e)}}(o,a,n)}8!==o&&3!==o||r.nodeValue!==i.nodeValue&&(r.nodeValue=i.nodeValue)}(n,o,a),s(n,a)||r(a,n,o))),a.callbacks.afterNodeMorphed(n,o)),n)}}();function i(e,t,r){let s=[],i=[],n=[],o=[],a=new Map;for(const e of t.children)a.set(e.outerHTML,e);for(const t of e.children){let e=a.has(t.outerHTML),s=r.head.shouldReAppend(t),c=r.head.shouldPreserve(t);e||c?s?i.push(t):(a.delete(t.outerHTML),n.push(t)):"append"===r.head.style?s&&(i.push(t),o.push(t)):!1!==r.head.shouldRemove(t)&&i.push(t)}o.push(...a.values());let c=[];for(const t of o){let i=document.createRange().createContextualFragment(t.outerHTML).firstChild;if(!1!==r.callbacks.beforeNodeAdded(i)){if("href"in i&&i.href||"src"in i&&i.src){let e,t=new Promise(function(t){e=t});i.addEventListener("load",function(){e()}),c.push(t)}e.appendChild(i),r.callbacks.afterNodeAdded(i),s.push(i)}}for(const t of i)!1!==r.callbacks.beforeNodeRemoved(t)&&(e.removeChild(t),r.callbacks.afterNodeRemoved(t));return r.head.afterHeadMorphed(e,{added:s,kept:n,removed:i}),c}const n=function(){function e(){const e=document.createElement("div");return e.hidden=!0,document.body.insertAdjacentElement("afterend",e),e}function r(e){let t=[],r=document.activeElement;if("BODY"!==r?.tagName&&e.contains(r))for(;r&&(t.push(r),r!==e);)r=r.parentElement;return t}function s(e){let t=Array.from(e.querySelectorAll("[id]"));return e.getAttribute?.("id")&&t.push(e),t}function i(e,t,r,s){for(const i of s){const s=i.getAttribute("id");if(t.has(s)){let t=i;for(;t;){let i=e.get(t);if(null==i&&(i=new Set,e.set(t,i)),i.add(s),t===r)break;t=t.parentElement}}}}return function(n,o,a){const{persistentIds:c,idMap:l}=function(e,t){const r=s(e),n=s(t),o=function(e,t){let r=new Set,s=new Map;for(const{id:t,tagName:i}of e)s.has(t)?r.add(t):s.set(t,i);let i=new Set;for(const{id:e,tagName:n}of t)i.has(e)?r.add(e):s.get(e)===n&&i.add(e);for(const e of r)i.delete(e);return i}(r,n);let a=new Map;i(a,o,e,r);const c=t.__idiomorphRoot||t;return i(a,o,c,n),{persistentIds:o,idMap:a}}(n,o),h=function(e){let r=Object.assign({},t);return Object.assign(r,e),r.callbacks=Object.assign({},t.callbacks,e.callbacks),r.head=Object.assign({},t.head,e.head),r}(a),d=h.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(d))throw`Do not understand how to morph style ${d}`;return{target:n,newContent:o,config:h,morphStyle:d,ignoreActive:h.ignoreActive,ignoreActiveValue:h.ignoreActiveValue,restoreFocus:h.restoreFocus,idMap:l,persistentIds:c,pantry:e(),activeElementAndParents:r(n),callbacks:h.callbacks,head:h.head}}}(),{normalizeElement:o,normalizeParent:a}=function(){const e=new WeakSet;class t{constructor(e){this.originalNode=e,this.realParentNode=e.parentNode,this.previousSibling=e.previousSibling,this.nextSibling=e.nextSibling}get childNodes(){const e=[];let t=this.previousSibling?this.previousSibling.nextSibling:this.realParentNode.firstChild;for(;t&&t!=this.nextSibling;)e.push(t),t=t.nextSibling;return e}querySelectorAll(e){return this.childNodes.reduce((t,r)=>{if(r instanceof Element){r.matches(e)&&t.push(r);const s=r.querySelectorAll(e);for(let e=0;e]*>|>)([\s\S]*?)<\/svg>/gim,"");if(s.match(/<\/html>/)||s.match(/<\/head>/)||s.match(/<\/body>/)){let i=r.parseFromString(t,"text/html");if(s.match(/<\/html>/))return e.add(i),i;{let t=i.firstChild;return t&&e.add(t),t}}{let s=r.parseFromString(""+t+"","text/html").body.querySelector("template").content;return e.add(s),s}}(s));if(e.has(s))return s;if(s instanceof Node){if(s.parentNode)return new t(s);{const e=document.createElement("div");return e.append(s),e}}{const e=document.createElement("div");for(const t of[...s])e.append(t);return e}}}}();return{morph:function(e,t,s={}){e=o(e);const c=a(t),l=n(e,c,s),h=function(e,t){if(!e.config.restoreFocus)return t();let r=document.activeElement;if(!(r instanceof HTMLInputElement||r instanceof HTMLTextAreaElement))return t();const{id:s,selectionStart:i,selectionEnd:n}=r,o=t();s&&s!==document.activeElement?.getAttribute("id")&&(r=e.target.querySelector(`[id="${s}"]`),r?.focus());r&&!r.selectionEnd&&n&&r.setSelectionRange(i,n);return o}(l,()=>function(e,t,r,s){if(e.head.block){const n=t.querySelector("head"),o=r.querySelector("head");if(n&&o){const t=i(n,o,e);return Promise.all(t).then(()=>{const t=Object.assign(e,{head:{block:!1,ignore:!0}});return s(t)})}}return s(e)}(l,e,c,t=>"innerHTML"===t.morphStyle?(r(t,e,c),Array.from(e.childNodes)):function(e,t,s){const i=a(t);return r(e,i,s,t,t.nextSibling),Array.from(i.childNodes)}(t,e,c)));return l.pantry.remove(),h},defaults:t}}();function ve(e,t,{callbacks:r,...s}={}){be.morph(e,t,{...s,callbacks:new Ee(r)})}function we(e,t,r={}){ve(e,t.childNodes,{...r,morphStyle:"innerHTML"})}function ye(e,t){return e instanceof i&&e.shouldReloadWithMorph&&(!t||function(e,t){return t instanceof Element&&"TURBO-FRAME"===t.nodeName&&e.id===t.id&&(!t.getAttribute("src")||D(e.src,t.getAttribute("src")))}(e,t))&&!e.closest("[data-turbo-permanent]")}function Se(e){return e.parentElement.closest("turbo-frame[src][refresh=morph]")}class Ee{#l;constructor({beforeNodeMorphed:e}={}){this.#l=e||(()=>!0)}beforeNodeAdded=e=>!(e.id&&e.hasAttribute("data-turbo-permanent")&&document.getElementById(e.id));beforeNodeMorphed=(e,t)=>{if(e instanceof Element){if(!e.hasAttribute("data-turbo-permanent")&&this.#l(e,t)){return!a("turbo:before-morph-element",{cancelable:!0,target:e,detail:{currentElement:e,newElement:t}}).defaultPrevented}return!1}};beforeAttributeUpdated=(e,t,r)=>!a("turbo:before-morph-attribute",{cancelable:!0,target:t,detail:{attributeName:e,mutationType:r}}).defaultPrevented;beforeNodeRemoved=e=>this.beforeNodeMorphed(e);afterNodeMorphed=(e,t)=>{e instanceof Element&&a("turbo:morph-element",{target:e,detail:{currentElement:e,newElement:t}})}}class Le extends ge{static renderElement(e,t){a("turbo:before-frame-morph",{target:e,detail:{currentElement:e,newElement:t}}),we(e,t,{callbacks:{beforeNodeMorphed:(t,r)=>!ye(t,r)||Se(t)!==e||(t.reload(),!1)}})}async preservingPermanentElements(e){return await e()}}class Te{static animationDuration=300;static get defaultCSS(){return m`
+!function(e){function t(e,t,r){throw new e("Failed to execute 'requestSubmit' on 'HTMLFormElement': "+t+".",r)}"function"!=typeof e.requestSubmit&&(e.requestSubmit=function(e){e?(!function(e,r){e instanceof HTMLElement||t(TypeError,"parameter 1 is not of type 'HTMLElement'"),"submit"==e.type||t(TypeError,"The specified element is not a submit button"),e.form==r||t(DOMException,"The specified element is not owned by this form element","NotFoundError")}(e,this),e.click()):((e=document.createElement("input")).type="submit",e.hidden=!0,this.appendChild(e),e.click(),this.removeChild(e))})}(HTMLFormElement.prototype);const e=new WeakMap;function t(t){const r=function(e){const t=e instanceof Element?e:e instanceof Node?e.parentElement:null,r=t?t.closest("input, button"):null;return"submit"==r?.type?r:null}(t.target);r&&r.form&&e.set(r.form,r)}!function(){if("submitter"in Event.prototype)return;let r=window.Event.prototype;if("SubmitEvent"in window){const e=window.SubmitEvent.prototype;if(!/Apple Computer/.test(navigator.vendor)||"submitter"in e)return;r=e}addEventListener("click",t,!0),Object.defineProperty(r,"submitter",{get(){if("submit"==this.type&&this.target instanceof HTMLFormElement)return e.get(this.target)}})}();const r="eager",s="lazy";class n extends HTMLElement{static delegateConstructor=void 0;loaded=Promise.resolve();static get observedAttributes(){return["disabled","loading","src"]}constructor(){super(),this.delegate=new n.delegateConstructor(this)}connectedCallback(){this.delegate.connect()}disconnectedCallback(){this.delegate.disconnect()}reload(){return this.delegate.sourceURLReloaded()}attributeChangedCallback(e){"loading"==e?this.delegate.loadingStyleChanged():"src"==e?this.delegate.sourceURLChanged():"disabled"==e&&this.delegate.disabledChanged()}get src(){return this.getAttribute("src")}set src(e){e?this.setAttribute("src",e):this.removeAttribute("src")}get refresh(){return this.getAttribute("refresh")}set refresh(e){e?this.setAttribute("refresh",e):this.removeAttribute("refresh")}get shouldReloadWithMorph(){return this.src&&"morph"===this.refresh}get loading(){return function(e){if("lazy"===e.toLowerCase())return s;return r}(this.getAttribute("loading")||"")}set loading(e){e?this.setAttribute("loading",e):this.removeAttribute("loading")}get disabled(){return this.hasAttribute("disabled")}set disabled(e){e?this.setAttribute("disabled",""):this.removeAttribute("disabled")}get autoscroll(){return this.hasAttribute("autoscroll")}set autoscroll(e){e?this.setAttribute("autoscroll",""):this.removeAttribute("autoscroll")}get complete(){return!this.delegate.isLoading}get isActive(){return this.ownerDocument===document&&!this.isPreview}get isPreview(){return this.ownerDocument?.documentElement?.hasAttribute("data-turbo-preview")}}const i={enabled:!0,progressBarDelay:500,unvisitableExtensions:new Set([".7z",".aac",".apk",".avi",".bmp",".bz2",".css",".csv",".deb",".dmg",".doc",".docx",".exe",".gif",".gz",".heic",".heif",".ico",".iso",".jpeg",".jpg",".js",".json",".m4a",".mkv",".mov",".mp3",".mp4",".mpeg",".mpg",".msi",".ogg",".ogv",".pdf",".pkg",".png",".ppt",".pptx",".rar",".rtf",".svg",".tar",".tif",".tiff",".txt",".wav",".webm",".webp",".wma",".wmv",".xls",".xlsx",".xml",".zip"])};function o(e){if("false"==e.getAttribute("data-turbo-eval"))return e;{const t=document.createElement("script"),r=L();return r&&(t.nonce=r),t.textContent=e.textContent,t.async=!1,function(e,t){for(const{name:r,value:s}of t.attributes)e.setAttribute(r,s)}(t,e),t}}function a(e,{target:t,cancelable:r,detail:s}={}){const n=new CustomEvent(e,{cancelable:r,bubbles:!0,composed:!0,detail:s});return t&&t.isConnected?t.dispatchEvent(n):document.documentElement.dispatchEvent(n),n}function c(e){e.preventDefault(),e.stopImmediatePropagation()}function l(){return"hidden"===document.visibilityState?d():h()}function h(){return new Promise(e=>requestAnimationFrame(()=>e()))}function d(){return new Promise(e=>setTimeout(()=>e(),0))}function u(e=""){return(new DOMParser).parseFromString(e,"text/html")}function m(e,...t){const r=function(e,t){return e.reduce((e,r,s)=>e+r+(null==t[s]?"":t[s]),"")}(e,t).replace(/^\n/,"").split("\n"),s=r[0].match(/^\s+/),n=s?s[0].length:0;return r.map(e=>e.slice(n)).join("\n")}function p(){return Array.from({length:36}).map((e,t)=>8==t||13==t||18==t||23==t?"-":14==t?"4":19==t?(Math.floor(4*Math.random())+8).toString(16):Math.floor(15*Math.random()).toString(16)).join("")}function f(e,...t){for(const r of t.map(t=>t?.getAttribute(e)))if("string"==typeof r)return r;return null}function g(...e){for(const t of e)"turbo-frame"==t.localName&&t.setAttribute("busy",""),t.setAttribute("aria-busy","true")}function b(...e){for(const t of e)"turbo-frame"==t.localName&&t.removeAttribute("busy"),t.removeAttribute("aria-busy")}function v(e,t=2e3){return new Promise(r=>{const s=()=>{e.removeEventListener("error",s),e.removeEventListener("load",s),r()};e.addEventListener("load",s,{once:!0}),e.addEventListener("error",s,{once:!0}),setTimeout(r,t)})}function w(e){switch(e){case"replace":return history.replaceState;case"advance":case"restore":return history.pushState}}function y(...e){const t=f("data-turbo-action",...e);return function(e){return"advance"==e||"replace"==e||"restore"==e}(t)?t:null}function S(e){return document.querySelector(`meta[name="${e}"]`)}function E(e){const t=S(e);return t&&t.content}function L(){const e=S("csp-nonce");if(e){const{nonce:t,content:r}=e;return""==t?r:t}}function T(e,t){if(e instanceof Element)return e.closest(t)||T(e.assignedSlot||e.getRootNode()?.host,t)}function R(e){return!!e&&null==e.closest("[inert], :disabled, [hidden], details:not([open]), dialog:not([open])")&&"function"==typeof e.focus}function A(e){return Array.from(e.querySelectorAll("[autofocus]")).find(R)}function C(e){if("_blank"===e)return!1;if(e){for(const t of document.getElementsByName(e))if(t instanceof HTMLIFrameElement)return!1;return!0}return!0}function P(e){const t=T(e,"a[href], a[xlink\\:href]");return t?t.hasAttribute("download")||t.hasAttribute("target")&&"_self"!==t.target?null:t:null}function k(e){return F(e.getAttribute("href")||"")}const M={"aria-disabled":{beforeSubmit:e=>{e.setAttribute("aria-disabled","true"),e.addEventListener("click",c)},afterSubmit:e=>{e.removeAttribute("aria-disabled"),e.removeEventListener("click",c)}},disabled:{beforeSubmit:e=>e.disabled=!0,afterSubmit:e=>e.disabled=!1}};const I=new class{#e=null;constructor(e){Object.assign(this,e)}get submitter(){return this.#e}set submitter(e){this.#e=M[e]||e}}({mode:"on",submitter:"disabled"}),_={drive:i,forms:I};function F(e){return new URL(e.toString(),document.baseURI)}function q(e){let t;return e.hash?e.hash.slice(1):(t=e.href.match(/#(.*)$/))?t[1]:void 0}function O(e,t){return F(t?.getAttribute("formaction")||e.getAttribute("action")||e.action)}function H(e){return(function(e){return function(e){return e.pathname.split("/").slice(1)}(e).slice(-1)[0]}(e).match(/\.[^.]*$/)||[])[0]||""}function N(e,t){return function(e,t){const r=V(t.origin+t.pathname);return V(e.href)===r||e.href.startsWith(r)}(e,t)&&!_.drive.unvisitableExtensions.has(H(e))}function B(e){const t=q(e);return null!=t?e.href.slice(0,-(t.length+1)):e.href}function x(e){return B(e)}function D(e,t){return F(e).href==F(t).href}function V(e){return e.endsWith("/")?e:e+"/"}class W{constructor(e){this.response=e}get succeeded(){return this.response.ok}get failed(){return!this.succeeded}get clientError(){return this.statusCode>=400&&this.statusCode<=499}get serverError(){return this.statusCode>=500&&this.statusCode<=599}get redirected(){return this.response.redirected}get location(){return F(this.response.url)}get isHTML(){return this.contentType&&this.contentType.match(/^(?:text\/([^\s;,]+\b)?html|application\/xhtml\+xml)\b/)}get statusCode(){return this.response.status}get contentType(){return this.header("Content-Type")}get responseText(){return this.response.clone().text()}get responseHTML(){return this.isHTML?this.response.clone().text():Promise.resolve(void 0)}header(e){return this.response.headers.get(e)}}class U 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)}}const j=new U(20);function $(e,t={}){const r=new Headers(t.headers||{}),s=p();return j.add(s),r.append("X-Turbo-Request-Id",s),window.fetch(e,{...t,headers:r})}function z(e){switch(e.toLowerCase()){case"get":return G.get;case"post":return G.post;case"put":return G.put;case"patch":return G.patch;case"delete":return G.delete}}const G={get:"get",post:"post",put:"put",patch:"patch",delete:"delete"};const Q={urlEncoded:"application/x-www-form-urlencoded",multipart:"multipart/form-data",plain:"text/plain"};class X{abortController=new AbortController;#t=e=>{};constructor(e,t,r,s=new URLSearchParams,n=null,i=Q.urlEncoded){const[o,a]=Y(F(r),t,s,i);this.delegate=e,this.url=o,this.target=n,this.fetchOptions={credentials:"same-origin",redirect:"follow",method:t.toUpperCase(),headers:{...this.defaultHeaders},body:a,signal:this.abortSignal,referrer:this.delegate.referrer?.href},this.enctype=i}get method(){return this.fetchOptions.method}set method(e){const t=this.isSafe?this.url.searchParams:this.fetchOptions.body||new FormData,r=z(e)||G.get;this.url.search="";const[s,n]=Y(this.url,r,t,this.enctype);this.url=s,this.fetchOptions.body=n,this.fetchOptions.method=r.toUpperCase()}get headers(){return this.fetchOptions.headers}set headers(e){this.fetchOptions.headers=e}get body(){return this.isSafe?this.url.searchParams:this.fetchOptions.body}set body(e){this.fetchOptions.body=e}get location(){return this.url}get params(){return this.url.searchParams}get entries(){return this.body?Array.from(this.body.entries()):[]}cancel(){this.abortController.abort()}async perform(){const{fetchOptions:e}=this;this.delegate.prepareRequest(this);const t=await this.#r(e);try{this.delegate.requestStarted(this),t.detail.fetchRequest?this.response=t.detail.fetchRequest.response:this.response=$(this.url.href,e);const r=await this.response;return await this.receive(r)}catch(e){if("AbortError"!==e.name)throw this.#s(e)&&this.delegate.requestErrored(this,e),e}finally{this.delegate.requestFinished(this)}}async receive(e){const t=new W(e);return a("turbo:before-fetch-response",{cancelable:!0,detail:{fetchResponse:t},target:this.target}).defaultPrevented?this.delegate.requestPreventedHandlingResponse(this,t):t.succeeded?this.delegate.requestSucceededWithResponse(this,t):this.delegate.requestFailedWithResponse(this,t),t}get defaultHeaders(){return{Accept:"text/html, application/xhtml+xml"}}get isSafe(){return K(this.method)}get abortSignal(){return this.abortController.signal}acceptResponseType(e){this.headers.Accept=[e,this.headers.Accept].join(", ")}async#r(e){const t=new Promise(e=>this.#t=e),r=a("turbo:before-fetch-request",{cancelable:!0,detail:{fetchOptions:e,url:this.url,resume:this.#t},target:this.target});return this.url=r.detail.url,r.defaultPrevented&&await t,r}#s(e){return!a("turbo:fetch-request-error",{target:this.target,cancelable:!0,detail:{request:this,error:e}}).defaultPrevented}}function K(e){return z(e)==G.get}function Y(e,t,r,s){const n=Array.from(r).length>0?new URLSearchParams(J(r)):e.searchParams;return K(t)?[Z(e,n),null]:s==Q.urlEncoded?[e,n]:[e,r]}function J(e){const t=[];for(const[r,s]of e)s instanceof File||t.push([r,s]);return t}function Z(e,t){const r=new URLSearchParams(J(t));return e.search=r.toString(),e}class ee{started=!1;constructor(e,t){this.delegate=e,this.element=t,this.intersectionObserver=new IntersectionObserver(this.intersect)}start(){this.started||(this.started=!0,this.intersectionObserver.observe(this.element))}stop(){this.started&&(this.started=!1,this.intersectionObserver.unobserve(this.element))}intersect=e=>{const t=e.slice(-1)[0];t?.isIntersecting&&this.delegate.elementAppearedInViewport(this.element)}}class te{static contentType="text/vnd.turbo-stream.html";static wrap(e){return"string"==typeof e?new this(function(e){const t=document.createElement("template");return t.innerHTML=e,t.content}(e)):e}constructor(e){this.fragment=function(e){for(const t of e.querySelectorAll("turbo-stream")){const e=document.importNode(t,!0);for(const t of e.templateElement.content.querySelectorAll("script"))t.replaceWith(o(t));t.replaceWith(e)}return e}(e)}}const re=new class{#n=null;#i=null;get(e){if(this.#i&&this.#i.url===e&&this.#i.expire>Date.now())return this.#i.request}setLater(e,t,r){this.clear(),this.#n=setTimeout(()=>{t.perform(),this.set(e,t,r),this.#n=null},100)}set(e,t,r){this.#i={url:e,request:t,expire:new Date((new Date).getTime()+r)}}clear(){this.#n&&clearTimeout(this.#n),this.#i=null}},se={initialized:"initialized",requesting:"requesting",waiting:"waiting",receiving:"receiving",stopping:"stopping",stopped:"stopped"};class ne{state=se.initialized;static confirmMethod(e){return Promise.resolve(confirm(e))}constructor(e,t,r,s=!1){const n=function(e,t){const r=t?.getAttribute("formmethod")||e.getAttribute("method")||"";return z(r.toLowerCase())||G.get}(t,r),i=function(e,t){const r=F(e);K(t)&&(r.search="");return r}(function(e,t){const r="string"==typeof e.action?e.action:null;return t?.hasAttribute("formaction")?t.getAttribute("formaction")||"":e.getAttribute("action")||r||""}(t,r),n),o=function(e,t){const r=new FormData(e),s=t?.getAttribute("name"),n=t?.getAttribute("value");s&&r.append(s,n||"");return r}(t,r),a=function(e,t){return function(e){switch(e.toLowerCase()){case Q.multipart:return Q.multipart;case Q.plain:return Q.plain;default:return Q.urlEncoded}}(t?.getAttribute("formenctype")||e.enctype)}(t,r);this.delegate=e,this.formElement=t,this.submitter=r,this.fetchRequest=new X(this,n,i,o,t,a),this.mustRedirect=s}get method(){return this.fetchRequest.method}set method(e){this.fetchRequest.method=e}get action(){return this.fetchRequest.url.toString()}set action(e){this.fetchRequest.url=F(e)}get body(){return this.fetchRequest.body}get enctype(){return this.fetchRequest.enctype}get isSafe(){return this.fetchRequest.isSafe}get location(){return this.fetchRequest.url}async start(){const{initialized:e,requesting:t}=se,r=f("data-turbo-confirm",this.submitter,this.formElement);if("string"==typeof r){const e="function"==typeof _.forms.confirm?_.forms.confirm:ne.confirmMethod;if(!await e(r,this.formElement,this.submitter))return}if(this.state==e)return this.state=t,this.fetchRequest.perform()}stop(){const{stopping:e,stopped:t}=se;if(this.state!=e&&this.state!=t)return this.state=e,this.fetchRequest.cancel(),!0}prepareRequest(e){if(!e.isSafe){const t=function(e){if(null!=e){const t=(document.cookie?document.cookie.split("; "):[]).find(t=>t.startsWith(e));if(t){const e=t.split("=").slice(1).join("=");return e?decodeURIComponent(e):void 0}}}(E("csrf-param"))||E("csrf-token");t&&(e.headers["X-CSRF-Token"]=t)}this.requestAcceptsTurboStreamResponse(e)&&e.acceptResponseType(te.contentType)}requestStarted(e){this.state=se.waiting,this.submitter&&_.forms.submitter.beforeSubmit(this.submitter),this.setSubmitsWith(),g(this.formElement),a("turbo:submit-start",{target:this.formElement,detail:{formSubmission:this}}),this.delegate.formSubmissionStarted(this)}requestPreventedHandlingResponse(e,t){re.clear(),this.result={success:t.succeeded,fetchResponse:t}}requestSucceededWithResponse(e,t){if(t.clientError||t.serverError)this.delegate.formSubmissionFailedWithResponse(this,t);else if(re.clear(),this.requestMustRedirect(e)&&function(e){return 200==e.statusCode&&!e.redirected}(t)){const e=new Error("Form responses must redirect to another location");this.delegate.formSubmissionErrored(this,e)}else this.state=se.receiving,this.result={success:!0,fetchResponse:t},this.delegate.formSubmissionSucceededWithResponse(this,t)}requestFailedWithResponse(e,t){this.result={success:!1,fetchResponse:t},this.delegate.formSubmissionFailedWithResponse(this,t)}requestErrored(e,t){this.result={success:!1,error:t},this.delegate.formSubmissionErrored(this,t)}requestFinished(e){this.state=se.stopped,this.submitter&&_.forms.submitter.afterSubmit(this.submitter),this.resetSubmitterText(),b(this.formElement),a("turbo:submit-end",{target:this.formElement,detail:{formSubmission:this,...this.result}}),this.delegate.formSubmissionFinished(this)}setSubmitsWith(){if(this.submitter&&this.submitsWith)if(this.submitter.matches("button"))this.originalSubmitText=this.submitter.innerHTML,this.submitter.innerHTML=this.submitsWith;else if(this.submitter.matches("input")){const e=this.submitter;this.originalSubmitText=e.value,e.value=this.submitsWith}}resetSubmitterText(){if(this.submitter&&this.originalSubmitText)if(this.submitter.matches("button"))this.submitter.innerHTML=this.originalSubmitText;else if(this.submitter.matches("input")){this.submitter.value=this.originalSubmitText}}requestMustRedirect(e){return!e.isSafe&&this.mustRedirect}requestAcceptsTurboStreamResponse(e){return!e.isSafe||function(e,...t){return t.some(t=>t&&t.hasAttribute(e))}("data-turbo-stream",this.submitter,this.formElement)}get submitsWith(){return this.submitter?.getAttribute("data-turbo-submits-with")}}class ie{constructor(e){this.element=e}get activeElement(){return this.element.ownerDocument.activeElement}get children(){return[...this.element.children]}hasAnchor(e){return null!=this.getElementForAnchor(e)}getElementForAnchor(e){return e?this.element.querySelector(`[id='${e}'], a[name='${e}']`):null}get isConnected(){return this.element.isConnected}get firstAutofocusableElement(){return A(this.element)}get permanentElements(){return ae(this.element)}getPermanentElementById(e){return oe(this.element,e)}getPermanentElementMapForSnapshot(e){const t={};for(const r of this.permanentElements){const{id:s}=r,n=e.getPermanentElementById(s);n&&(t[s]=[r,n])}return t}}function oe(e,t){return e.querySelector(`#${t}[data-turbo-permanent]`)}function ae(e){return e.querySelectorAll("[id][data-turbo-permanent]")}class ce{started=!1;constructor(e,t){this.delegate=e,this.eventTarget=t}start(){this.started||(this.eventTarget.addEventListener("submit",this.submitCaptured,!0),this.started=!0)}stop(){this.started&&(this.eventTarget.removeEventListener("submit",this.submitCaptured,!0),this.started=!1)}submitCaptured=()=>{this.eventTarget.removeEventListener("submit",this.submitBubbled,!1),this.eventTarget.addEventListener("submit",this.submitBubbled,!1)};submitBubbled=e=>{if(!e.defaultPrevented){const t=e.target instanceof HTMLFormElement?e.target:void 0,r=e.submitter||void 0;t&&function(e,t){const r=t?.getAttribute("formmethod")||e.getAttribute("method");return"dialog"!=r}(t,r)&&function(e,t){const r=t?.getAttribute("formtarget")||e.getAttribute("target");return C(r)}(t,r)&&this.delegate.willSubmitForm(t,r)&&(e.preventDefault(),e.stopImmediatePropagation(),this.delegate.formSubmitted(t,r))}}}class le{#o=e=>{};#a=e=>{};constructor(e,t){this.delegate=e,this.element=t}scrollToAnchor(e){const t=this.snapshot.getElementForAnchor(e);t?(this.focusElement(t),this.scrollToElement(t)):this.scrollToPosition({x:0,y:0})}scrollToAnchorFromLocation(e){this.scrollToAnchor(q(e))}scrollToElement(e){e.scrollIntoView()}focusElement(e){e instanceof HTMLElement&&(e.hasAttribute("tabindex")?e.focus():(e.setAttribute("tabindex","-1"),e.focus(),e.removeAttribute("tabindex")))}scrollToPosition({x:e,y:t}){this.scrollRoot.scrollTo(e,t)}scrollToTop(){this.scrollToPosition({x:0,y:0})}get scrollRoot(){return window}async render(e){const{isPreview:t,shouldRender:r,willRender:s,newSnapshot:n}=e,i=s;if(r)try{this.renderPromise=new Promise(e=>this.#o=e),this.renderer=e,await this.prepareToRenderSnapshot(e);const r=new Promise(e=>this.#a=e),s={resume:this.#a,render:this.renderer.renderElement,renderMethod:this.renderer.renderMethod};this.delegate.allowsImmediateRender(n,s)||await r,await this.renderSnapshot(e),this.delegate.viewRenderedSnapshot(n,t,this.renderer.renderMethod),this.delegate.preloadOnLoadLinksForView(this.element),this.finishRenderingSnapshot(e)}finally{delete this.renderer,this.#o(void 0),delete this.renderPromise}else i&&this.invalidate(e.reloadReason)}invalidate(e){this.delegate.viewInvalidated(e)}async prepareToRenderSnapshot(e){this.markAsPreview(e.isPreview),await e.prepareToRender()}markAsPreview(e){e?this.element.setAttribute("data-turbo-preview",""):this.element.removeAttribute("data-turbo-preview")}markVisitDirection(e){this.element.setAttribute("data-turbo-visit-direction",e)}unmarkVisitDirection(){this.element.removeAttribute("data-turbo-visit-direction")}async renderSnapshot(e){await e.render()}finishRenderingSnapshot(e){e.finishRendering()}}class he extends le{missing(){this.element.innerHTML='Content missing'}get snapshot(){return new ie(this.element)}}class de{constructor(e,t){this.delegate=e,this.element=t}start(){this.element.addEventListener("click",this.clickBubbled),document.addEventListener("turbo:click",this.linkClicked),document.addEventListener("turbo:before-visit",this.willVisit)}stop(){this.element.removeEventListener("click",this.clickBubbled),document.removeEventListener("turbo:click",this.linkClicked),document.removeEventListener("turbo:before-visit",this.willVisit)}clickBubbled=e=>{this.clickEventIsSignificant(e)?this.clickEvent=e:delete this.clickEvent};linkClicked=e=>{this.clickEvent&&this.clickEventIsSignificant(e)&&this.delegate.shouldInterceptLinkClick(e.target,e.detail.url,e.detail.originalEvent)&&(this.clickEvent.preventDefault(),e.preventDefault(),this.delegate.linkClickIntercepted(e.target,e.detail.url,e.detail.originalEvent)),delete this.clickEvent};willVisit=e=>{delete this.clickEvent};clickEventIsSignificant(e){const t=e.composed?e.target?.parentElement:e.target,r=P(t)||t;return r instanceof Element&&r.closest("turbo-frame, html")==this.element}}class ue{started=!1;constructor(e,t){this.delegate=e,this.eventTarget=t}start(){this.started||(this.eventTarget.addEventListener("click",this.clickCaptured,!0),this.started=!0)}stop(){this.started&&(this.eventTarget.removeEventListener("click",this.clickCaptured,!0),this.started=!1)}clickCaptured=()=>{this.eventTarget.removeEventListener("click",this.clickBubbled,!1),this.eventTarget.addEventListener("click",this.clickBubbled,!1)};clickBubbled=e=>{if(e instanceof MouseEvent&&this.clickEventIsSignificant(e)){const t=P(e.composedPath&&e.composedPath()[0]||e.target);if(t&&C(t.target)){const r=k(t);this.delegate.willFollowLinkToLocation(t,r,e)&&(e.preventDefault(),this.delegate.followedLinkToLocation(t,r))}}};clickEventIsSignificant(e){return!(e.target&&e.target.isContentEditable||e.defaultPrevented||e.which>1||e.altKey||e.ctrlKey||e.metaKey||e.shiftKey)}}class me{constructor(e,t){this.delegate=e,this.linkInterceptor=new ue(this,t)}start(){this.linkInterceptor.start()}stop(){this.linkInterceptor.stop()}canPrefetchRequestToLocation(e,t){return!1}prefetchAndCacheRequestToLocation(e,t){}willFollowLinkToLocation(e,t,r){return this.delegate.willSubmitFormLinkToLocation(e,t,r)&&(e.hasAttribute("data-turbo-method")||e.hasAttribute("data-turbo-stream"))}followedLinkToLocation(e,t){const r=document.createElement("form");for(const[e,s]of t.searchParams)r.append(Object.assign(document.createElement("input"),{type:"hidden",name:e,value:s}));const s=Object.assign(t,{search:""});r.setAttribute("data-turbo","true"),r.setAttribute("action",s.href),r.setAttribute("hidden","");const n=e.getAttribute("data-turbo-method");n&&r.setAttribute("method",n);const i=e.getAttribute("data-turbo-frame");i&&r.setAttribute("data-turbo-frame",i);const o=y(e);o&&r.setAttribute("data-turbo-action",o);const a=e.getAttribute("data-turbo-confirm");a&&r.setAttribute("data-turbo-confirm",a);e.hasAttribute("data-turbo-stream")&&r.setAttribute("data-turbo-stream",""),this.delegate.submittedFormLinkToLocation(e,t,r),document.body.appendChild(r),r.addEventListener("turbo:submit-end",()=>r.remove(),{once:!0}),requestAnimationFrame(()=>r.requestSubmit())}}class pe{static async preservingPermanentElements(e,t,r){const s=new this(e,t);s.enter(),await r(),s.leave()}constructor(e,t){this.delegate=e,this.permanentElementMap=t}enter(){for(const e in this.permanentElementMap){const[t,r]=this.permanentElementMap[e];this.delegate.enteringBardo(t,r),this.replaceNewPermanentElementWithPlaceholder(r)}}leave(){for(const e in this.permanentElementMap){const[t]=this.permanentElementMap[e];this.replaceCurrentPermanentElementWithClone(t),this.replacePlaceholderWithPermanentElement(t),this.delegate.leavingBardo(t)}}replaceNewPermanentElementWithPlaceholder(e){const t=function(e){const t=document.createElement("meta");return t.setAttribute("name","turbo-permanent-placeholder"),t.setAttribute("content",e.id),t}(e);e.replaceWith(t)}replaceCurrentPermanentElementWithClone(e){const t=e.cloneNode(!0);e.replaceWith(t)}replacePlaceholderWithPermanentElement(e){const t=this.getPlaceholderById(e.id);t?.replaceWith(e)}getPlaceholderById(e){return this.placeholders.find(t=>t.content==e)}get placeholders(){return[...document.querySelectorAll("meta[name=turbo-permanent-placeholder][content]")]}}class fe{#c=null;static renderElement(e,t){}constructor(e,t,r,s=!0){this.currentSnapshot=e,this.newSnapshot=t,this.isPreview=r,this.willRender=s,this.renderElement=this.constructor.renderElement,this.promise=new Promise((e,t)=>this.resolvingFunctions={resolve:e,reject:t})}get shouldRender(){return!0}get shouldAutofocus(){return!0}get reloadReason(){}prepareToRender(){}render(){}finishRendering(){this.resolvingFunctions&&(this.resolvingFunctions.resolve(),delete this.resolvingFunctions)}async preservingPermanentElements(e){await pe.preservingPermanentElements(this,this.permanentElementMap,e)}focusFirstAutofocusableElement(){if(this.shouldAutofocus){const e=this.connectedSnapshot.firstAutofocusableElement;e&&e.focus()}}enteringBardo(e){this.#c||e.contains(this.currentSnapshot.activeElement)&&(this.#c=this.currentSnapshot.activeElement)}leavingBardo(e){e.contains(this.#c)&&this.#c instanceof HTMLElement&&(this.#c.focus(),this.#c=null)}get connectedSnapshot(){return this.newSnapshot.isConnected?this.newSnapshot:this.currentSnapshot}get currentElement(){return this.currentSnapshot.element}get newElement(){return this.newSnapshot.element}get permanentElementMap(){return this.currentSnapshot.getPermanentElementMapForSnapshot(this.newSnapshot)}get renderMethod(){return"replace"}}class ge extends fe{static renderElement(e,t){const r=document.createRange();r.selectNodeContents(e),r.deleteContents();const s=t,n=s.ownerDocument?.createRange();n&&(n.selectNodeContents(s),e.appendChild(n.extractContents()))}constructor(e,t,r,s,n,i=!0){super(t,r,s,n,i),this.delegate=e}get shouldRender(){return!0}async render(){await l(),this.preservingPermanentElements(()=>{this.loadFrameElement()}),this.scrollFrameIntoView(),await l(),this.focusFirstAutofocusableElement(),await l(),this.activateScriptElements()}loadFrameElement(){this.delegate.willRenderFrame(this.currentElement,this.newElement),this.renderElement(this.currentElement,this.newElement)}scrollFrameIntoView(){if(this.currentElement.autoscroll||this.newElement.autoscroll){const r=this.currentElement.firstElementChild,s=(e=this.currentElement.getAttribute("data-autoscroll-block"),t="end","end"==e||"start"==e||"center"==e||"nearest"==e?e:t),n=function(e,t){return"auto"==e||"smooth"==e?e:t}(this.currentElement.getAttribute("data-autoscroll-behavior"),"auto");if(r)return r.scrollIntoView({block:s,behavior:n}),!0}var e,t;return!1}activateScriptElements(){for(const e of this.newScriptElements){const t=o(e);e.replaceWith(t)}}get newScriptElements(){return this.currentElement.querySelectorAll("script")}}var be=function(){const e=()=>{},t={morphStyle:"outerHTML",callbacks:{beforeNodeAdded:e,afterNodeAdded:e,beforeNodeMorphed:e,afterNodeMorphed:e,beforeNodeRemoved:e,afterNodeRemoved:e,beforeAttributeUpdated:e},head:{style:"merge",shouldPreserve:e=>"true"===e.getAttribute("im-preserve"),shouldReAppend:e=>"true"===e.getAttribute("im-re-append"),shouldRemove:e,afterHeadMorphed:e},restoreFocus:!0};const r=function(){function e(e,t,r,n){if(!1===n.callbacks.beforeNodeAdded(t))return null;if(n.idMap.has(t)){const i=document.createElement(t.tagName);return e.insertBefore(i,r),s(i,t,n),n.callbacks.afterNodeAdded(i),i}{const s=document.importNode(t,!0);return e.insertBefore(s,r),n.callbacks.afterNodeAdded(s),s}}const t=function(){function e(e,t,r){let s=e.idMap.get(t),n=e.idMap.get(r);if(!n||!s)return!1;for(const e of s)if(n.has(e))return!0;return!1}function t(e,t){const r=e,s=t;return r.nodeType===s.nodeType&&r.tagName===s.tagName&&(!r.id||r.id===s.id)}return function(r,s,n,i){let o=null,a=s.nextSibling,c=0,l=n;for(;l&&l!=i;){if(t(l,s)){if(e(r,l,s))return l;null===o&&(r.idMap.has(l)||(o=l))}if(null===o&&a&&t(l,a)&&(c++,a=a.nextSibling,c>=2&&(o=void 0)),l.contains(document.activeElement))break;l=l.nextSibling}return o||null}}();function r(e,t){if(e.idMap.has(t))o(e.pantry,t,null);else{if(!1===e.callbacks.beforeNodeRemoved(t))return;t.parentNode?.removeChild(t),e.callbacks.afterNodeRemoved(t)}}function n(e,t,s){let n=t;for(;n&&n!==s;){let t=n;n=n.nextSibling,r(e,t)}return n}function i(e,t,r,s){const n=s.target.querySelector(`#${t}`)||s.pantry.querySelector(`#${t}`);return function(e,t){const r=e.id;for(;e=e.parentNode;){let s=t.idMap.get(e);s&&(s.delete(r),s.size||t.idMap.delete(e))}}(n,s),o(e,n,r),n}function o(e,t,r){if(e.moveBefore)try{e.moveBefore(t,r)}catch(s){e.insertBefore(t,r)}else e.insertBefore(t,r)}return function(o,a,c,l=null,h=null){a instanceof HTMLTemplateElement&&c instanceof HTMLTemplateElement&&(a=a.content,c=c.content),l||=a.firstChild;for(const r of c.childNodes){if(l&&l!=h){const e=t(o,r,l,h);if(e){e!==l&&n(o,l,e),s(e,r,o),l=e.nextSibling;continue}}if(r instanceof Element&&o.persistentIds.has(r.id)){const e=i(a,r.id,l,o);s(e,r,o),l=e.nextSibling;continue}const c=e(a,r,l,o);c&&(l=c.nextSibling)}for(;l&&l!=h;){const e=l;l=l.nextSibling,r(o,e)}}}(),s=function(){function e(e,r,s,n){const i=r[s];if(i!==e[s]){const o=t(s,e,"update",n);o||(e[s]=r[s]),i?o||e.setAttribute(s,""):t(s,e,"remove",n)||e.removeAttribute(s)}}function t(e,t,r,s){return!("value"!==e||!s.ignoreActiveValue||t!==document.activeElement)||!1===s.callbacks.beforeAttributeUpdated(e,t,r)}function s(e,t){return!!t.ignoreActiveValue&&e===document.activeElement&&e!==document.body}return function(i,o,a){return a.ignoreActive&&i===document.activeElement?null:(!1===a.callbacks.beforeNodeMorphed(i,o)||(i instanceof HTMLHeadElement&&a.head.ignore||(i instanceof HTMLHeadElement&&"morph"!==a.head.style?n(i,o,a):(!function(r,n,i){let o=n.nodeType;if(1===o){const o=r,a=n,c=o.attributes,l=a.attributes;for(const e of l)t(e.name,o,"update",i)||o.getAttribute(e.name)!==e.value&&o.setAttribute(e.name,e.value);for(let e=c.length-1;0<=e;e--){const r=c[e];if(r&&!a.hasAttribute(r.name)){if(t(r.name,o,"remove",i))continue;o.removeAttribute(r.name)}}s(o,i)||function(r,s,n){if(r instanceof HTMLInputElement&&s instanceof HTMLInputElement&&"file"!==s.type){let i=s.value,o=r.value;e(r,s,"checked",n),e(r,s,"disabled",n),s.hasAttribute("value")?o!==i&&(t("value",r,"update",n)||(r.setAttribute("value",i),r.value=i)):t("value",r,"remove",n)||(r.value="",r.removeAttribute("value"))}else if(r instanceof HTMLOptionElement&&s instanceof HTMLOptionElement)e(r,s,"selected",n);else if(r instanceof HTMLTextAreaElement&&s instanceof HTMLTextAreaElement){let e=s.value,i=r.value;if(t("value",r,"update",n))return;e!==i&&(r.value=e),r.firstChild&&r.firstChild.nodeValue!==e&&(r.firstChild.nodeValue=e)}}(o,a,i)}8!==o&&3!==o||r.nodeValue!==n.nodeValue&&(r.nodeValue=n.nodeValue)}(i,o,a),s(i,a)||r(a,i,o))),a.callbacks.afterNodeMorphed(i,o)),i)}}();function n(e,t,r){let s=[],n=[],i=[],o=[],a=new Map;for(const e of t.children)a.set(e.outerHTML,e);for(const t of e.children){let e=a.has(t.outerHTML),s=r.head.shouldReAppend(t),c=r.head.shouldPreserve(t);e||c?s?n.push(t):(a.delete(t.outerHTML),i.push(t)):"append"===r.head.style?s&&(n.push(t),o.push(t)):!1!==r.head.shouldRemove(t)&&n.push(t)}o.push(...a.values());let c=[];for(const t of o){let n=document.createRange().createContextualFragment(t.outerHTML).firstChild;if(!1!==r.callbacks.beforeNodeAdded(n)){if("href"in n&&n.href||"src"in n&&n.src){let e,t=new Promise(function(t){e=t});n.addEventListener("load",function(){e()}),c.push(t)}e.appendChild(n),r.callbacks.afterNodeAdded(n),s.push(n)}}for(const t of n)!1!==r.callbacks.beforeNodeRemoved(t)&&(e.removeChild(t),r.callbacks.afterNodeRemoved(t));return r.head.afterHeadMorphed(e,{added:s,kept:i,removed:n}),c}const i=function(){function e(){const e=document.createElement("div");return e.hidden=!0,document.body.insertAdjacentElement("afterend",e),e}function r(e){let t=Array.from(e.querySelectorAll("[id]"));return e.id&&t.push(e),t}function s(e,t,r,s){for(const n of s)if(t.has(n.id)){let t=n;for(;t;){let s=e.get(t);if(null==s&&(s=new Set,e.set(t,s)),s.add(n.id),t===r)break;t=t.parentElement}}}return function(n,i,o){const{persistentIds:a,idMap:c}=function(e,t){const n=r(e),i=r(t),o=function(e,t){let r=new Set,s=new Map;for(const{id:t,tagName:n}of e)s.has(t)?r.add(t):s.set(t,n);let n=new Set;for(const{id:e,tagName:i}of t)n.has(e)?r.add(e):s.get(e)===i&&n.add(e);for(const e of r)n.delete(e);return n}(n,i);let a=new Map;s(a,o,e,n);const c=t.__idiomorphRoot||t;return s(a,o,c,i),{persistentIds:o,idMap:a}}(n,i),l=function(e){let r=Object.assign({},t);return Object.assign(r,e),r.callbacks=Object.assign({},t.callbacks,e.callbacks),r.head=Object.assign({},t.head,e.head),r}(o),h=l.morphStyle||"outerHTML";if(!["innerHTML","outerHTML"].includes(h))throw`Do not understand how to morph style ${h}`;return{target:n,newContent:i,config:l,morphStyle:h,ignoreActive:l.ignoreActive,ignoreActiveValue:l.ignoreActiveValue,restoreFocus:l.restoreFocus,idMap:c,persistentIds:a,pantry:e(),callbacks:l.callbacks,head:l.head}}}(),{normalizeElement:o,normalizeParent:a}=function(){const e=new WeakSet;return{normalizeElement:function(e){return e instanceof Document?e.documentElement:e},normalizeParent:function t(r){if(null==r)return document.createElement("div");if("string"==typeof r)return t(function(t){let r=new DOMParser,s=t.replace(/