Skip to content
(()=>{let e=document;if(e.__moxi_mo)return;let t=new Set,n=!1,r=()=>{n||(n=!0,queueMicrotask(()=>{t.forEach(e=>e()),setTimeout(()=>n=!1)}))};e.__moxi_mo=new MutationObserver(e=>{e.forEach(e=>"childList"==e.type&&e.addedNodes.forEach(e=>g(e))),r()});let i=async function(){}.constructor,a=["q","wait","trigger","debounce"],o=(e,t,n,r)=>e.dispatchEvent(new CustomEvent(t,{detail:n,cancelable:1,bubbles:r??1,composed:1})),s=(e,t,n,r)=>e.addEventListener(t,n,r),l=Symbol(),f=()=>{let e,t=0;return n=>new Promise((r,i)=>{e?.(l),e=i;let a=++t;setTimeout(()=>a==t&&(e=null,r()),n)})},d=e=>t=>new Promise(n=>"number"==typeof t?setTimeout(n,t):s(e,t,n,{once:1})),c=e=>e.closest("[mx-ignore]"),u=e=>e?[e]:[],m={before:"beforebegin",after:"afterend",start:"afterbegin",end:"beforeend"},p=t=>new Proxy({},{get:(n,r)=>{if("count"==r)return t.length;if("arr"==r)return()=>t.slice();if(r==Symbol.iterator)return()=>t.values();if("trigger"==r)return(e,n,r)=>t.forEach(t=>o(t,e,n,r));if("insert"==r)return(e,n)=>t.forEach(t=>t.insertAdjacentHTML(m[e],n));if("take"==r)return(n,r)=>{for(let t of"string"==typeof r?e.querySelectorAll(r):r)t.classList.remove(n);for(let e of t)e.classList.add(n)};let i=t[0]?.[r];return i?.call?(...e)=>t.map(t=>t[r](...e))[0]:i&&"object"==typeof i?p(t.map(e=>e[r])):i},set:(e,n,i)=>(t.forEach(e=>e[n]=i),r(),!0)}),h=t=>n=>{if("string"!=typeof n)return p(n.nodeType?[n]:[...n]);let r=n.match(/^(.+)\s+in\s+(.+)$/),i=e;if(r&&(n=r[1],i="this"==r[2]?t:e.querySelector(r[2])),!i)return p([]);let a,o=n.match(/^(next|prev|closest|first|last)\s+(.+)$/);if(o){let[,e,n]=o,r=e=>t.compareDocumentPosition(e);if("closest"==e)a=u(t.closest(n));else{let t=[...i.querySelectorAll(n)];a="first"==e?t.slice(0,1):"last"==e?t.slice(-1):u("next"==e?t.find(e=>4&r(e)):t.reverse().find(e=>2&r(e)))}}else a=[...i.querySelectorAll(n)];return p(a)},b=n=>{if(n.__moxi||c(n))return;if(!o(n,"mx:init",{}))return;n.__moxi={};let r=h(n),u=d(n),m=o.bind(0,n),p=[];for(let o of n.attributes)if("live"==o.name){let e=new i(...a,o.value),s=f(),l=()=>n.isConnected?e.call(n,r,u,m,s):t.delete(l);t.add(l),p.push(l)}else if(o.name.startsWith("on-")){let[t,...d]=o.name.slice(3).split("."),c=e=>d.includes(e),p=c("halt"),h=f();c("cc")&&(t=t.replace(/-([a-z])/g,(e,t)=>t.toUpperCase()));let b=c("outside")?e:n,g={capture:c("capture"),passive:c("passive")},w=new i("event",...a,`with(event?.detail||{}){${o.value}}`),y=n.__moxi[t]=e=>{if(!e||!(c("self")&&e.target!=n||c("outside")&&n.contains(e.target)))return(p||c("prevent"))&&e?.preventDefault(),(p||c("stop"))&&e?.stopPropagation(),c("once")&&b.removeEventListener(t,y,g),w.call(n,e,r,u,m,h).catch(e=>{if(e!=l)throw e})};"init"==t?y():s(b,t,y,g)}p.forEach(e=>e()),o(n,"mx:inited",{},!1)},g=t=>{if(1!=t.nodeType||c(t))return;let n=e.evaluate("descendant-or-self::*[@live or @*[starts-with(name(),'on-')]]",t,null,7,null);for(let e=0;e<n.snapshotLength;e++)b(n.snapshotItem(e))},w=globalThis,y=e.documentElement;w.q=h(y),w.wait=d(y),w.transition=t=>e.startViewTransition?e.startViewTransition(t):t(),s(e,"mx:process",e=>g(e.target)),s(e,"refresh",r),s(e,"DOMContentLoaded",()=>{e.__moxi_mo.observe(y,{childList:1,subtree:1,attributes:1,characterData:1}),s(e,"input",r,!0),s(e,"change",r,!0),g(e.body)})})(),(()=>{if(document.__fixi_mo)return;document.__fixi_mo=new MutationObserver(e=>e.forEach(e=>"childList"===e.type&&e.addedNodes.forEach(e=>a(e))));let e=(e,t,n,r)=>e.dispatchEvent(new CustomEvent("fx:"+t,{detail:n,cancelable:!0,bubbles:!1!==r,composed:!0})),t=(e,t,n)=>e.getAttribute(t)||n,n=(e,t)=>(window.fixiCfg??{})[e]??t,r=e=>null!=e.closest("[fx-ignore]"),i=i=>{let a={};i.__fixi||r(i)||!e(i,"init",{options:a})||(i.__fixi=async r=>{let a=i.__fixi.requests||=new Set,o=i.form||i.closest("form"),s=new FormData(o??void 0,r.submitter);!i.name||r.submitter||o&&(i.form!==o||"submit"!==i.type)||s.append(i.name,i.value);let l=new AbortController,f={trigger:r,action:t(i,"fx-action"),method:t(i,"fx-method","GET").toUpperCase(),target:document.querySelector(t(i,"fx-target"))??i,swap:t(i,"fx-swap",n("swap","outerHTML")),body:s,drop:a.size,headers:{"FX-Request":"true",...window.fixiCfg?.headers},abort:l.abort.bind(l),signal:l.signal,preventTrigger:!0,transition:n("transition",document.startViewTransition?.bind(document)),fetch:fetch.bind(window)},d=e(i,"config",{cfg:f,requests:a});if(f.preventTrigger&&r.preventDefault(),!d||f.drop)return;if(/GET|DELETE/.test(f.method)){let e=new URLSearchParams(f.body);e.size&&(f.action+=(/\?/.test(f.action)?"&":"?")+e),f.body=null}a.add(f);try{if(f.confirm){if(!await f.confirm())return}if(!e(i,"before",{cfg:f,requests:a}))return;if(f.response=await f.fetch(f.action,f),f.text=await f.response.text(),!e(i,"after",{cfg:f}))return}catch(t){return void e(i,"error",{cfg:f,error:t})}finally{a.delete(f),e(i,"finally",{cfg:f})}let c=()=>{if(f.swap instanceof Function)return f.swap(f);if(/(before|after)(begin|end)/.test(f.swap))f.target.insertAdjacentHTML(f.swap,f.text);else if(f.swap in f.target)f.target[f.swap]=f.text;else if("none"!==f.swap)throw f.swap};f.transition?await f.transition(c).finished:await c(),e(i,"swapped",{cfg:f}),document.contains(i)||e(document,"swapped",{cfg:f})},i.__fixi.evt=t(i,"fx-trigger",i.matches("form")?"submit":i.matches("input:not([type=button]),select,textarea")?"change":"click"),i.addEventListener(i.__fixi.evt,i.__fixi,a),e(i,"inited",{},!1))},a=e=>{if(e.matches){if(r(e))return;e.matches("[fx-action]")&&i(e)}e.querySelectorAll&&e.querySelectorAll("[fx-action]").forEach(i)};document.addEventListener("fx:process",e=>a(e.target)),document.addEventListener("DOMContentLoaded",()=>{document.__fixi_mo.observe(document.documentElement,{childList:!0,subtree:!0}),a(document.body)})})(),(()=>{let e=(e,t,n)=>e.dispatchEvent(new CustomEvent("fx:sse:"+t,{detail:n,cancelable:!0,bubbles:!0,composed:!0}));async function*t(e){let t="",n=new TextDecoder,r={data:"",event:"",id:"",retry:null};for(;;){let{done:i,value:a}=await e.read();if(i)break;t+=n.decode(a,{stream:!0});let o=t.split(/\r\n|\r|\n/);t=o.pop();for(let e of o)if(e){if(":"!==e[0]){let t=e.indexOf(":"),n=t>0?e.slice(0,t):e,i=t>0?e.slice(t+1).replace(/^ /,""):"";"data"===n?r.data+=(r.data?"\n":"")+i:"retry"===n?r.retry=parseInt(i)||null:n in r&&(r[n]=i)}}else(r.data||r.event||r.id||r.retry)&&(yield r),r={data:"",event:"",id:"",retry:null}}(r.data||r.event||r.id||r.retry)&&(yield r)}document.addEventListener("fx:config",n=>{let r=n.detail.cfg,i=r.fetch;r.headers.Accept??="text/html, text/event-stream",r.fetch=async(n,a)=>{let o=await i(n,a);if(!o.headers.get("Content-Type")?.includes("text/event-stream"))return o;let s=r.sseSwap||r.swap,l=r.sse={lastEventId:"",retry:null,reader:o.body.getReader(),closed:!1};if(l.close=()=>{l.closed=!0,l.reader?.cancel()},!e(r.target,"open",{cfg:r,response:o}))return r.swap="none",new Response("");let f=r.target,d=null;"outerHTML"===s&&(d=document.createElement("i"),d.style.display="none",f.after(d));let c=d||f,u=null;r.sseDisconnectOnHidden?u=()=>document.hidden&&l.close():r.ssePauseOnHidden&&(u=()=>document.hidden&&l.reader?.cancel()),u&&document.addEventListener("visibilitychange",u);try{for(;!l.closed;){try{for await(let n of t(l.reader)){if(n.id&&(l.lastEventId=n.id),n.retry&&(l.retry=n.retry),!e(c,"message",{cfg:r,message:n})){l.close();break}let t=f,i=s,a=!1;if(n.event&&"{"===n.event[0]){let e=JSON.parse(n.event);e.target&&(t=document.querySelector(e.target)),e.swap&&(i=e.swap),a=e.transition}else n.event&&(e(c,n.event,{cfg:r,message:n}),t=null);if(t&&n.data){let o=()=>{i instanceof Function?i(t,n.data):/(before|after)(begin|end)/i.test(i)?t.insertAdjacentHTML(i,n.data):i in t&&(t[i]=n.data)};a&&r.transition?await r.transition(o).finished:o(),e(t.isConnected?t:c,"swapped",{cfg:r,message:n}),t===f&&d&&(f=d,s="beforebegin")}}e(c,"close",{cfg:r})}catch(t){e(c,"error",{cfg:r,error:t})}if(l.closed)break;if(!(r.sseReconnect||r.ssePauseOnHidden&&document.hidden))break;if(r.ssePauseOnHidden&&document.hidden?await new Promise(e=>{let t=()=>{document.hidden&&!l.closed||(document.removeEventListener("visibilitychange",t),e())};document.addEventListener("visibilitychange",t)}):await new Promise(e=>setTimeout(e,l.retry||3e3)),l.closed)break;try{let e=new Headers(a.headers);l.lastEventId&&e.set("Last-Event-ID",l.lastEventId),l.reader=(await i(n,{...a,headers:e})).body.getReader()}catch(t){e(c,"error",{cfg:r,error:t});continue}}}finally{d?.remove(),u&&document.removeEventListener("visibilitychange",u)}return r.swap="none",new Response("")}})})(),(()=>{let e=(t,n,r)=>{if(t.nodeType!==n.nodeType||t.nodeName!==n.nodeName)return n.querySelectorAll?.("[id]").forEach(t=>{if(!n.contains(t))return;let i=r[t.id];i&&(delete r[t.id],e(i,t,r),t.replaceWith(i))}),t.replaceWith(n);if(3===t.nodeType||8===t.nodeType)return void(t.nodeValue!==n.nodeValue&&(t.nodeValue=n.nodeValue));for(let e of[...t.attributes])n.hasAttribute(e.name)||t.removeAttribute(e.name);for(let e of n.attributes)t.getAttribute(e.name)!==e.value&&t.setAttribute(e.name,e.value);let i={};for(let e of t.children)e.id&&(i[e.id]=e);let a,o,s,l=t.firstChild,f=n.firstChild;for(;l&&f;){if(a=l.nextSibling,o=f.nextSibling,f.id){if(s=i[f.id],s&&s!==l){t.insertBefore(s,l),e(s,f,r),f=o;continue}if(!s){t.insertBefore(f,l),f=o;continue}}e(l,f,r),l=a,f=o}for(;l;)a=l.nextSibling,l.remove(),l=a;for(;f;)o=f.nextSibling,t.appendChild(f),f=o};window.morph=(t,n)=>{let r=document.createElement("template");r.innerHTML=n;let i={};t.querySelectorAll("[id]").forEach(e=>i[e.id]=e),e(t,r.content.firstElementChild,i)},document.addEventListener("fx:config",e=>{"morph"===e.detail.cfg.swap&&(e.detail.cfg.swap=e=>morph(e.target,e.text))})})(),(()=>{let e={GET:1,HEAD:1,DELETE:1},t=document,n=e=>{if(!e||"object"!=typeof e||e instanceof FormData||e instanceof Element)return!1;if(!(Symbol.iterator in e))return!1;for(let t of e)return t instanceof Element;return!1},r=e=>"string"==typeof e||e instanceof Blob||e instanceof URLSearchParams||e instanceof ArrayBuffer,i=(e,t)=>{if(t)if(t instanceof HTMLFormElement)for(let[n,r]of new FormData(t))e.append(n,r);else if(t.name)if(t instanceof HTMLInputElement)if("file"===t.type)for(let n of t.files)e.append(t.name,n);else"checkbox"===t.type||"radio"===t.type?t.checked&&e.append(t.name,t.value):e.append(t.name,t.value);else if(t instanceof HTMLSelectElement&&t.multiple)for(let n of t.selectedOptions)e.append(t.name,n.value);else"value"in t&&e.append(t.name,t.value)},a=e=>{if(e instanceof FormData)return e;let t=new FormData;if(null==e)return t;if(e instanceof URLSearchParams){for(let[n,r]of e)t.append(n,r);return t}if("string"==typeof e){for(let[n,r]of new URLSearchParams(e))t.append(n,r);return t}if(e instanceof Element)i(t,e);else if(n(e))for(let n of e)i(t,n);else for(let[n,r]of Object.entries(e))if(Array.isArray(r))for(let e of r)t.append(n,e);else null!=r&&t.append(n,r);return t},o=e=>{if(null==e)return[];if("string"==typeof e)return[...t.querySelectorAll(e)];if(e instanceof Element)return[e];if(Symbol.iterator in Object(e)){let t=[];for(let n of e)for(let e of o(n))t.push(e);return t}return[]},s=async(s,l,f,d,{timeout:c,signal:u,include:m,send:p,headers:h={},...b}={})=>{u&&u.addEventListener("abort",()=>d.abort(),{once:!0}),c&&setTimeout(()=>d.abort(),c);let g="query"===p||"body"!==p&&e[s],w={method:s,headers:{...h},...b,signal:d.signal};if(g){let e=a(f);for(let t of o(m))i(e,t);let t=(e=>{let t=new URLSearchParams;for(let[n,r]of e)r instanceof Blob||t.append(n,r);return t.toString()})(e);t&&(l+=(l.includes("?")?"&":"?")+t)}else if(r(f))w.body=f;else if(null!=m||(null==(y=f)||"object"!=typeof y||y instanceof FormData||y instanceof Element||n(y)||r(y))){if(null!=f||null!=m){let e=a(f);for(let t of o(m))i(e,t);w.body=e}}else w.body=JSON.stringify(f),w.headers["Content-Type"]??="application/json";var y;let v={url:l,init:w};if(!t.dispatchEvent(new CustomEvent("rexi:before",{detail:{cfg:v},cancelable:!0})))throw new DOMException("Request cancelled by rexi:before listener","AbortError");let E=await fetch(v.url,v.init);if(t.dispatchEvent(new CustomEvent("rexi:after",{detail:{cfg:v,response:E}})),!E.ok)throw Object.assign(new Error(`${s} ${v.url} -> ${E.status}`),{status:E.status,response:E});return E},l=e=>(n,r,i)=>{let a=new AbortController;return((e,n)=>(e.json=()=>e.then(e=>e.json()),e.text=()=>e.then(e=>e.text()),e.blob=()=>e.then(e=>e.blob()),e.html=()=>e.then(e=>e.text()).then(e=>{let n=t.createElement("template");return n.innerHTML=e,n.content}),e.raw=()=>e,e.abort=()=>n.abort(),e))(s(e,n,r,a,i),a)},f={};for(let e of["get","head","post","put","patch"])f[e]=l(e.toUpperCase());f.del=l("DELETE"),window.rexi=f;for(let e of["get","head","post","put","patch","del"])window[e]=f[e]})();
//# sourceMappingURL=the-fixi-project.min.js.map