resuma 1.3.1

Resuma — resumable SSR Rust web framework: zero hydration, islands, server actions, Flow (Axum).
Documentation
1
var Ce=Object.defineProperty;var w=(t,e,n)=>()=>{if(n)throw n[0];try{return t&&(e=t(t=0)),e}catch(r){throw n=[r],r}};var Ae=(t,e)=>{for(var n in e)Ce(t,n,{get:e[n],enumerable:!0})};function bt(){for(let t of wt)document.querySelectorAll(`[data-r-portal-slot="${CSS.escape(t)}"]`).forEach(e=>e.remove());wt=V,V=new Set}function B(t){return document.getElementById(t)??document.querySelector(`[data-r-portal-target="${CSS.escape(t)}"]`)}function z(t){let e=ht.get(t);return e||(e=`p${++_e}`,ht.set(t,e)),V.add(e),e}function K(t,e){t.querySelectorAll(`[data-r-portal-slot="${CSS.escape(e)}"]`).forEach(n=>n.remove())}function yt(t,e,n){K(e,n);let r=document.createElement("div");r.dataset.rPortalSlot=n,r.appendChild(t.content.cloneNode(!0)),e.appendChild(r)}function vt(t){t.querySelectorAll("template[data-r-portal]").forEach(e=>{let n=e.closest("[data-r-show-if]");if(n?.closest("resuma-show")?.dataset.rPortalTarget||n?.hidden)return;let r=e.getAttribute("data-r-portal");if(!r)return;let o=B(r);o&&yt(e,o,z(e))})}function St(t,e,n){let r=t.querySelector("template[data-r-portal]");r&&yt(r,e,n)}var _e,ht,V,wt,G=w(()=>{"use strict";_e=0,ht=new WeakMap,V=new Set,wt=new Set});function h(t){J.push(t)}function Et(){for(;J.length;){let t=J.pop();try{t?.()}catch{}}}var J,k=w(()=>{"use strict";J=[]});function At(t){let e=new Map;for(let n of t){let r=y(n.id);e.set(r,Le(r,n.value))}return e}function y(t){return typeof t=="string"?t:typeof t=="number"?`s${t}`:`s${t[0]}`}function Le(t,e){let n=e,r=new Set,o={id:t,get value(){return n},set value(i){o.set(i)},set(i){Object.is(i,n)||(n=i,r.forEach(s=>s(n)))},update(i){let s=i(n);s!==void 0&&o.set(s)},subscribe(i){return r.add(i),()=>r.delete(i)}};return o}function H(t,e){t.querySelectorAll(xe.toLowerCase()).forEach(r=>{if(kt.has(r))return;let o=r.getAttribute("data-r-signal");if(!o)return;let i=e.get(o);i&&(r.textContent=T(i.value),h(i.subscribe(s=>{r.textContent=T(s)})),kt.add(r))})}function P(t,e){t.querySelectorAll("[data-r-bind]").forEach(r=>_t(r,e)),He(t,e)}function He(t,e){let n=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT),r=n.currentNode;for(;r;)r instanceof HTMLElement&&_t(r,e),r=n.nextNode()}function Pe(t){let e=t.toLowerCase();return e.startsWith("on")||e==="style"}function Ne(t){let e=t.replace(/[\u0000-\u0020]+/g,"");return/^(?:javascript|vbscript|data):/i.test(e)?"":t}function _t(t,e){if(Tt.has(t))return;let n=!1;for(let r of Array.from(t.attributes)){let o=r.name;if(!o.startsWith("data-r-bind:"))continue;let i=o.slice(12);if(Pe(i))continue;let[s,a="{}"]=r.value.split("|"),c=e.get(s);if(!c)continue;let d=Ie.has(i.toLowerCase()),u=m=>{let f=a.replace("{}",T(m));d&&(f=Ne(f)),t.setAttribute(i,f)};u(c.value),h(c.subscribe(u)),n=!0}n&&Tt.add(t)}function T(t){if(t==null)return"";if(typeof t=="string")return t;if(typeof t=="number"||typeof t=="boolean")return String(t);try{return JSON.stringify(t)}catch{return String(t)}}function Fe(t){if(t===void 0)return"";if(typeof t=="string")return t;try{let e=JSON.stringify(t);if(e===void 0)return"";let n=JSON.parse(e);return typeof n=="string"?n:e}catch{return T(t)}}function Y(t,e){t.querySelectorAll("resuma-show").forEach(n=>{if(Mt.has(n))return;let r=n.getAttribute("data-r-show");if(!r)return;let o=n.getAttribute("data-r-inverted")==="true",i=n.querySelector("[data-r-show-if]"),s=n.querySelector("[data-r-show-else]"),a=e.get(r);if(!a||!i)return;let c=d=>{let u=o?!d:!!d;i.hidden=!u,s&&(s.hidden=u);let m=n.dataset.rPortalTarget,f=i.querySelector("template[data-r-portal]");if(!m&&f&&(m=f.getAttribute("data-r-portal")??void 0,m&&(n.dataset.rPortalTarget=m)),m){let p=B(m);if(p){let l=z(n);u?f&&St(i,p,l):K(p,l)}}};c(a.value),h(a.subscribe(c)),Mt.add(n)})}function X(t){if(t&&typeof t=="object")for(let e of["title","name","label","text"]){let n=t[e];if(typeof n=="string")return n}return T(t)}function Lt(t){return t.hasAttribute("data-r-signal")}function Ct(t,e){H(t,e),P(t,e)}function qe(t,e,n){if(n){let i=n.cloneNode(!0);return i.setAttribute("data-r-for-key",e),i.removeAttribute("data-r-for-new"),i.querySelectorAll("resuma-dyn").forEach(s=>{Lt(s)||(s.textContent=X(t))}),i}let r=document.createElement("div");r.setAttribute("data-r-for-item",""),r.setAttribute("data-r-for-key",e);let o=document.createElement("span");return o.textContent=X(t),r.appendChild(o),r}function Oe(t,e){t.querySelectorAll("resuma-dyn").forEach(n=>{Lt(n)||(n.textContent=X(e))})}function $e(t,e,n){if(e&&t&&typeof t=="object"){let r=t[e];if(r!=null)return String(r)}return String(n)}function We(t,e){let n=new Set;return t.map((r,o)=>{let i=$e(r,e,o);return n.has(i)&&(i=`${i}:${o}`),n.add(i),i})}function Z(t,e){t.querySelectorAll("resuma-for").forEach(n=>{if(Q.has(n))return;let r=n.getAttribute("data-r-for");if(!r)return;let o=n.getAttribute("data-r-key"),i=n.querySelector("[data-r-for-list]"),s=e.get(r);if(!s||!i)return;if(n.hasAttribute("data-r-virtual")){Q.add(n),import("/_resuma/ui.js?v=1.3.1").then(c=>{c.bindVirtualFor(n,s,o,d=>Ct(d,e))});return}let a=c=>{let d=Array.isArray(c)?c:[],u=new Map;i.querySelectorAll("[data-r-for-item]").forEach(l=>{let g=l.getAttribute("data-r-for-key");g&&u.set(g,l)});let m=document.createDocumentFragment(),f=i.querySelector("[data-r-for-item]:not([data-r-for-new])")??void 0,p=We(d,o);d.forEach((l,g)=>{let b=p[g],v=u.get(b);v?(u.delete(b),Oe(v,l)):(v=qe(l,b,f),v.setAttribute("data-r-for-new","true")),m.appendChild(v)}),i.replaceChildren(m),u.forEach(l=>l.remove()),Ct(i,e)};a(s.value),h(s.subscribe(a)),Q.add(n)})}function tt(t,e){t.querySelectorAll("resuma-match").forEach(n=>{if(Rt.has(n))return;let r=n.getAttribute("data-r-match");if(!r)return;let o=e.get(r);if(!o)return;let i=n.querySelectorAll("[data-r-match-case]"),s=n.querySelector("[data-r-match-default]"),a=c=>{let d=Fe(c),u=!1;i.forEach(m=>{let p=(m.getAttribute("data-r-match-when")??"")===d;m.hidden=!p,p&&(u=!0)}),s&&(s.hidden=u)};a(o.value),h(o.subscribe(a)),Rt.add(n)})}var xe,kt,Tt,Mt,Q,Rt,Ie,I=w(()=>{"use strict";G();k();xe="RESUMA-DYN",kt=new WeakSet,Tt=new WeakSet,Mt=new WeakSet,Q=new WeakSet,Rt=new WeakSet;Ie=new Set(["href","src","action","formaction","xlink:href","poster","background","ping","data"])});function R(){return window.__resuma}function rt(t,e){return`${t}:${e}`}function De(t,e,n){let r=t==="handler"?`/_resuma/handler/${encodeURIComponent(e)}.js`:`/_resuma/island-chunk/${encodeURIComponent(e)}.js`;return n?`${r}?v=${encodeURIComponent(n)}`:r}function je(t,e){return e?R().chunkDigests?.[t]||String(Date.now()):R().chunkDigests?.[t]}function Ue(t,e){ot([...t].map(n=>({kind:"handler",chunk:n})),e)}function ot(t,e,n){nt++;for(let{kind:r,chunk:o}of t){if(!o)continue;(r==="handler"?e:n)?.delete(o);let s=rt(r,o);M.delete(s),M.delete(`${s}:bust`)}}async function E(t,e,n=!1){let r=R(),o=t==="handler"?r.loaded:r.islandLoaded,i=n?`${rt(t,e)}:bust`:rt(t,e),s=nt,a=je(e,n);if(!n){let u=o.get(e);if(u)return u}let c=M.get(i);c||(c=import(De(t,e,a)),M.set(i,c),c.finally(()=>M.delete(i)));let d=await c;if(s!==nt)return E(t,e,!0);if(!n){let u=o.get(e);if(u)return u}return o.set(e,d),d}function it(t){R().loaded.has(t)||E("handler",t).catch(()=>{})}function Ht(t){for(let e of t)e&&E("handler",e,!0).catch(()=>{})}function Pt(t){for(let e of t)e&&E("island",e,!0).catch(()=>{})}function It(){et.clear()}async function Nt(t){return E("island",t)}async function Ft(t,e){if(e){let c=et.get(e);return c||(c=xt(e),et.set(e,c)),c}let n=t.indexOf("#"),r=n===-1?t:t.slice(0,n),o=n===-1?t:t.slice(n+1),i=R();if(r==="__page__"){let c=i.handlers[r]?.[o];if(c)return xt(c)}let s=await E("handler",r),a=s[o];if(a||(Ue([r]),s=await E("handler",r,!0),a=s[o]),!a)throw new Error(`handler ${o} missing in ${r}`);return a}function xt(t){let e=t.trim(),r=e.startsWith("(")||e.startsWith("function")||e.startsWith("async")?`return (${t});`:`return (async (event, state, __resuma) => { ${t} });`;return new Function(r)()}var et,M,nt,C=w(()=>{"use strict";et=new Map,M=new Map,nt=0});function st(t,e){let n=t.querySelectorAll(Ve),r=[];n.forEach(o=>{let i=o.getAttribute("data-r-chunk");if(!i)return;if((o.getAttribute("data-r-load")??"eager")==="visible"&&"IntersectionObserver"in window){let a=new IntersectionObserver((c,d)=>{for(let u of c)u.isIntersecting&&(d.unobserve(u.target),qt(o,i,e))},{rootMargin:"100px"});r.push(a),a.observe(o);return}qt(o,i,e)}),r.length&&h(()=>{for(let o of r)o.disconnect()})}async function qt(t,e,n){let r=t.getAttribute("data-r-props")??"{}",o={};try{o=JSON.parse(r)}catch{}await Be(e,o,t,n)}async function Be(t,e,n,r){if(n.dataset.rHydrated!=="true")try{let o=await Nt(t);typeof o.resume=="function"&&(o.resume(e,r,n),n.dataset.rHydrated="true")}catch(o){console.debug("[r] island static",t,o)}}var Ve,Ot=w(()=>{"use strict";C();k();Ve="resuma-island"});function ze(t,e,n){let r=Object.create(n.state);if(!t)return r;for(let[o,i]of Object.entries(t)){let s=e.get(y(i));s&&(r[o]=s)}return r}function $t(){for(;A.length;){let t=A.pop();try{t?.()}catch{}}}function Wt(t,e,n){for(let r of t)try{let o=ze(r.captures,e,n),i=new Function(`return (${r.body});`)();if(r.kind==="debounce"){let a=i(o,n);typeof a=="function"&&A.push(a)}else{let a=r.target!=null?e.get(y(r.target)):void 0,c=()=>{try{let f=i(o,n);a&&f!==void 0&&a.set(f)}catch(f){console.error("[r] effect",r.id,f)}},d,u=()=>{let f=r.debounce_ms;if(f!=null&&f>0){d!==void 0&&clearTimeout(d),d=setTimeout(c,f);return}c()};u(),A.push(()=>{d!==void 0&&clearTimeout(d)});let m=new Set;for(let f of r.deps)m.add(y(f));if(r.captures)for(let f of Object.values(r.captures))m.add(y(f));for(let f of m){let l=e.get(f)?.subscribe(()=>u());l&&A.push(l)}}}catch(o){console.error("[r] effect init",r.id,o)}}var A,Dt=w(()=>{"use strict";I();A=[]});function Ut(t,e){e.querySelectorAll(`[${jt}]`).forEach(o=>o.remove());let n=[...new Set(t.filter(Boolean))];if(!n.length)return;if(!("IntersectionObserver"in window)){for(let o of n)it(o);return}let r=new IntersectionObserver((o,i)=>{for(let s of o){if(!s.isIntersecting)continue;let a=s.target.dataset.rChunk;a&&it(a),i.unobserve(s.target)}},{rootMargin:"120px"});h(()=>r.disconnect());for(let o of e.querySelectorAll("resuma-boundary[data-r-chunk]"))r.observe(o);for(let o of n){let i=document.createElement("resuma-boundary");i.hidden=!0,i.dataset.rChunk=o,i.setAttribute(jt,"true"),e.appendChild(i),r.observe(i)}}var jt,Vt=w(()=>{"use strict";k();C();jt="data-r-lazy-chunk-marker"});function Ke(t,e){return t.currentTarget===e?t:new Proxy(t,{get(n,r){if(r==="currentTarget")return e;let o=Reflect.get(n,r,n);return typeof o=="function"?o.bind(n):o}})}function Ge(t){let e=t.target instanceof Element?t.target:t.target instanceof Text?t.target.parentElement:null,n=`data-r-on:${t.type}`;for(;e&&e!==document.body;){if(e.hasAttribute(n))return e;e=e.parentElement}return null}function Bt(t,e){let n=e??Ge(t);return n?Ke(t,n):t}var zt=w(()=>{"use strict"});function Jt(){return globalThis.__resumaClientReady}function Gt(t){if(!t)return;at.add(t);let e=N.get(t);if(e){N.delete(t);for(let n of e)n()}}function Qt(){if(Kt||typeof document>"u")return;Kt=!0,document.addEventListener("resuma:client-ready",e=>{let n=e.detail?.id;typeof n=="string"&&Gt(n)});let t=Jt();if(t)for(let e of Object.keys(t))Gt(e)}function Xt(t){return at.has(t)||!!Jt()?.[t]}function ct(t,e){if(Qt(),Xt(t))return e(),()=>{};let n=N.get(t);return n||N.set(t,n=new Set),n.add(e),()=>{n.delete(e)}}function Yt(t,e=15e3){return Qt(),Xt(t)?Promise.resolve():new Promise((n,r)=>{let o=setTimeout(()=>{i(),r(new Error(`waitClient(${t}) timed out after ${e}ms`))},e),i=ct(t,()=>{clearTimeout(o),n()})})}function Zt(){at.clear();let t=globalThis;if(t.__resumaClientReady)for(let e of Object.keys(t.__resumaClientReady))delete t.__resumaClientReady[e]}async function te(t=document){let e=[];for(let n of t.querySelectorAll('script[type="module"]')){let r=n.textContent||"",o=/import\s+"([^"]+)"/.exec(r)?.[1];!o||!o.includes("/static/client/")||(n.remove(),e.push(import(o).then(()=>{},i=>{console.warn("[resuma] ClientComponent import failed",o,i)})))}e.length&&await Promise.all(e)}var at,N,Kt,lt=w(()=>{"use strict";at=new Set,N=new Map,Kt=!1});var F=w(()=>{"use strict"});async function Qe(t){if(!(!t||ut.has(t))&&!(t.startsWith("http")&&!t.startsWith(location.origin))){ut.add(t);try{let e=await fetch(t,{headers:{Accept:"text/html"},credentials:"same-origin",cache:"no-store"});e.ok&&_.set(t,await e.text())}catch{}finally{ut.delete(t)}}}function se(t){dt=t}function ft(){return document.getElementById(ie)??document.body}function Xe(t){try{return new URL(t,location.origin).origin===location.origin}catch{return!1}}function ae(t,e,n=!1){if(n){if(t===e)return!0;let s="http://resuma.local",a=new URL(t,s),c=new URL(e,s);return a.search?a.pathname+a.search===c.pathname+c.search:a.pathname===c.pathname}if(t===e)return!0;let r="http://resuma.local",o=new URL(t,r),i=new URL(e,r);if(o.search)return o.pathname+o.search===i.pathname+i.search;if(o.pathname===i.pathname)return!0;if(o.pathname!=="/"&&i.pathname.startsWith(o.pathname)){let s=i.pathname.charCodeAt(o.pathname.length);return s===void 0||s===47}return!1}function ne(t,e,n,r){let o=t.getAttribute("data-r-base-class");o||(o=t.className.split(/\s+/).filter(i=>i&&i!==n).join(" "),o||(o=t.className),t.setAttribute("data-r-base-class",o)),t.className=r?`${o} ${n}`.trim():o,r?t.setAttribute("aria-current","page"):t.removeAttribute("aria-current")}function Ye(t,e){let n=null,r=-1;for(let o of t){let i=o.getAttribute("href");if(!i)continue;let s=o.hasAttribute("data-r-nav-exact");ae(i,e,s)&&i.length>r&&(n=o,r=i.length)}return n}function q(t){let e=[...document.querySelectorAll("a[data-r-nav]")],n=new Set;for(let o of document.querySelectorAll("[data-r-nav-exclusive]"))n.add(o);let r=new Set;for(let o of n){let i=e.filter(a=>o.contains(a)),s=Ye(i,t);for(let a of i){let c=a.getAttribute("data-r-active-class");c&&(ne(a,t,c,a===s),r.add(a))}}for(let o of e){if(r.has(o))continue;let i=o.getAttribute("href");if(!i)continue;let s=o.getAttribute("data-r-active-class");if(!s)continue;let a=o.hasAttribute("data-r-nav-exact");ne(o,t,s,ae(i,t,a))}}async function Ze(){if(!window.__resuma){window.location.reload();return}if(dt){dt(),q(location.pathname+location.search);return}try{(await Promise.resolve().then(()=>(fe(),de))).mountPage(),q(location.pathname+location.search)}catch{window.location.reload()}}function tn(){mt(()=>{let t=ft();return t.querySelector("[autofocus]")??t.querySelector("h1, [role='heading'], main")??t})}function en(){for($=!1;O.length;){let t=O.pop(),e=typeof t=="function"?t():t;if(e?.isConnected){!e.hasAttribute("tabindex")&&!e.matches("a,button,input,select,textarea,[tabindex]")&&e.setAttribute("tabindex","-1");try{e.focus({preventScroll:!0})}catch{e.focus()}return}}}function mt(t){O.push(t),!$&&($=!0,queueMicrotask(en))}function ce(){O.length=0,$=!1}function L(t,e){let n=new URL(t,location.origin);if(e)for(let[r,o]of Object.entries(e))o!=null&&o!==""&&n.searchParams.set(r,o);return n.pathname+n.search}function nn(t){try{let e=new URL(t,location.origin);e.searchParams.delete("_r");let n=e.searchParams.toString();return e.pathname+(n?`?${n}`:"")}catch{return t}}function re(t){try{let e=new URL(t,location.origin);e.searchParams.delete("_r");let n=e.searchParams.toString();return e.pathname+(n?`?${n}`:"")}catch{return t}}function rn(t){if(typeof t=="boolean"||t===void 0){let n=t??!0;return{pushState:n,scroll:n,usePrefetch:!0}}let e=t.pushState??!0;return{pushState:e,scroll:t.scroll??e,usePrefetch:t.usePrefetch??!0,historyHref:t.historyHref}}async function gt(t,e){_.clear();let n=t?.split("?")[0]??location.pathname,r=String(Date.now()),o=L(n,{...e,_r:r}),i=L(n,e);await S(o,{pushState:!1,scroll:!1,usePrefetch:!1,historyHref:i})}async function on(t,e,n,r){if(r!==W)return;let o=new DOMParser().parseFromString(e,"text/html"),i=o.getElementById(ie),s=o.getElementById(ee);if(!i||!s?.textContent){window.location.href=t;return}Zt(),ft().innerHTML=i.innerHTML;let a=document.getElementById(ee);a&&(a.textContent=s.textContent),o.title&&(document.title=o.title);let c=n.historyHref??nn(t),d=o.documentElement.getAttribute("dir");d?document.documentElement.setAttribute("dir",d):document.documentElement.removeAttribute("dir"),n.pushState?history.pushState({resumaNav:!0},"",c):history.replaceState({resumaNav:!0},"",c),await Ze(),await te(ft()),n.scroll&&window.scrollTo(0,0),tn(),document.dispatchEvent(new CustomEvent("resuma:navigate",{detail:{href:c}}))}async function sn(t,e,n,r){let o=e.usePrefetch?_.get(t):void 0;if(o)_.delete(t);else{let i=await fetch(t,{headers:{Accept:"text/html"},credentials:"same-origin",cache:"no-store",signal:r});if(n!==W)return;if(!i.ok){window.location.href=t;return}o=await i.text()}n===W&&await on(t,o,e,n)}async function S(t,e=!0){if(!Xe(t)){window.location.assign(t);return}let n=rn(e),r=++W;oe?.abort();let o=new AbortController;oe=o;let i=async()=>{try{await sn(t,n,r,o.signal)}catch(c){if(c instanceof DOMException&&c.name==="AbortError")return;console.error("[r] nav",c),window.location.href=t}},s=!n.pushState&&!n.scroll,a=document;if(!s&&a.startViewTransition&&!an())try{await a.startViewTransition(i).finished}catch{await i()}else await i()}function an(){try{return!!document.querySelector(":popover-open,dialog[open]")}catch{return!1}}function D(t){if(t===Je){gt();return}let e=n=>{_.clear();let r=re(location.pathname+location.search),o=re(n),i=r===o;S(n,{pushState:!i,scroll:!i,usePrefetch:!1,historyHref:o})};if(t.startsWith("/")&&!t.startsWith("//")){e(t);return}try{let n=new URL(t,location.origin);if(n.origin===location.origin&&(n.protocol==="http:"||n.protocol==="https:")){e(n.pathname+n.search+n.hash);return}}catch{}console.warn("[r] bad redirect",t)}function cn(t,e){if(e.defaultPrevented||e.button!==0||e.metaKey||e.ctrlKey||e.shiftKey||e.altKey||t.target&&t.target!=="_self")return!1;let n=t.getAttribute("href");if(!n||n.startsWith("#")||n.startsWith("javascript:"))return!1;if(n.startsWith("http://")||n.startsWith("https://"))try{return new URL(n).origin===location.origin}catch{return!1}return!0}function le(){document.addEventListener("mouseenter",t=>{let e=t.target;if(!(e instanceof Element))return;let r=e.closest("a[data-r-nav]")?.getAttribute("href");r&&Qe(r)},!0),document.addEventListener("click",t=>{let e=t.target;if(!(e instanceof Element))return;let n=e.closest("a[data-r-nav]");if(!n||!cn(n,t))return;let r=n.getAttribute("href");r&&(t.preventDefault(),S(r))}),window.addEventListener("popstate",()=>{S(location.pathname+location.search,{pushState:!1,scroll:!1,usePrefetch:!1})})}var ie,ee,_,ut,Je,dt,O,$,W,oe,ue=w(()=>{"use strict";lt();F();ie="resuma-root",ee="resuma-state",_=new Map,ut=new Set,Je="__revalidate__";dt=null;O=[],$=!1;W=0,oe=null});function ln(t){return typeof t=="string"?{body:t}:t}function un(t,e,n){let r=Object.create(n);if(!t)return r;for(let[o,i]of Object.entries(t)){let s=e.get(y(i));s&&(r[o]=s)}return r}function me(t,e,n,r){let o=Object.entries(t).map(([c,d])=>[c,ln(d)]);if(!o.length)return;let i=async(c,d)=>{try{let u=d.body.trim();u.endsWith(")()")&&(u=u.slice(0,-2));let m=un(d.captures,e,n),f=new Function("state","__resuma",`return (${u})(state, __resuma);`),p=await Promise.resolve(f(m,window.__resuma));typeof p=="function"&&h(p)}catch(u){console.error("[r] task",c,u)}},s=new Set(o.map(([c])=>c)),a=(c,d)=>{s.has(c)&&(s.delete(c),i(c,d))};if("IntersectionObserver"in window){let c=new IntersectionObserver((d,u)=>{for(let m of d){if(!m.isIntersecting)continue;let f=m.target.dataset.rVisibleTask,p=f?o.find(([l])=>l===f)?.[1]:void 0;f&&p&&a(f,p),u.unobserve(m.target)}},{rootMargin:"50px"});h(()=>c.disconnect()),r().querySelectorAll("[data-r-visible-task]").forEach(d=>d.remove());for(let[d]of o){let u=document.createElement("span");u.dataset.rVisibleTask=d,u.className="r-visible-task-marker",u.setAttribute("aria-hidden","true"),r().appendChild(u),c.observe(u)}}else for(let[c,d]of o)a(c,d)}var ge=w(()=>{"use strict";F();I();k()});var de={};Ae(de,{bootstrap:()=>wn,buildLocalState:()=>ke,mountFlowWidgets:()=>mn,mountPage:()=>pt,mutationHeaders:()=>j,runHandler:()=>Te,showActionFieldErrors:()=>Rn});function dn(t){return t instanceof Document||t instanceof Element?!!t.querySelector(pe):!1}function ve(){return he??(he=import("/_resuma/ui.js?v=1.3.1")),he}function x(t,e=""){ve().then(n=>n[t](e))}async function Se(t){if(dn(t))try{(await import("/_resuma/flow.js?v=1.3.1")).initFlowWidgets(t)}catch(e){console.error("[r] flow load",e)}}async function fn(t){if(t.querySelector("[data-r-popup],[data-r-modal],[data-r-gesture],[data-r-virtual]"))try{let e=await ve();e.initUi(t);let n=window.__resuma;n&&Object.assign(n,{showPopup:e.showPopup,hidePopup:e.hidePopup,showModal:e.showModal,hideModal:e.hideModal,dismissAll:e.dismissAll})}catch(e){console.error("[r] ui load",e)}}function mn(t=document){Se(t)}function pn(){let t=document.getElementById(Ee);if(!t?.textContent)return"";try{return JSON.parse(t.textContent).csrf_token??""}catch{return""}}function j(t={}){let e={...t},n=pn();return n&&(e["x-resuma-csrf"]=n),e}function hn(){let t=document.getElementById(Ee);if(!t||!t.textContent)return{signals:[],handlers:{},islands:[],actions:[]};try{let e=JSON.parse(t.textContent);return e.serialization_error&&console.error("[r] resumability payload failed to serialize on the server \u2014 page interactivity is broken"),e}catch(e){return console.error("[r] state",e),{signals:[],handlers:{},islands:[],actions:[]}}}function pt(){ce(),$t(),Et(),bt();let t=hn(),e=At(t.signals),n={};for(let[l,g]of e)n[l]=g;let r=window.__resuma,o=r?.loaded??new Map,i=r?.islandLoaded??new Map,s=r?.chunkDigests??{},a=t.chunk_digests??{},c=new Set(t.lazy_chunks??[]),d=new Set(t.islands??[]);for(let l of document.querySelectorAll("[data-r-on\\:click], [data-r-on\\:submit], [data-r-on\\:input], [data-r-on\\:change]"))for(let g of l.attributes){if(!g.name.startsWith("data-r-on:"))continue;let b=g.value,v=b.indexOf("#");if(v===-1)continue;let U=b.slice(0,v);U&&U!=="__page__"&&c.add(U)}let u=we();for(let l of u.querySelectorAll("resuma-island[data-r-chunk]")){let g=l.getAttribute("data-r-chunk");g&&d.add(g),delete l.dataset.rHydrated}let m=[];for(let l of c)(!a[l]||s[l]!==a[l])&&m.push(l);let f=[];for(let l of d)(!a[l]||s[l]!==a[l])&&f.push(l);(m.length||f.length)&&ot([...m.map(l=>({kind:"handler",chunk:l})),...f.map(l=>({kind:"island",chunk:l}))],o,i),It();let p={state:n,signals:e,handlers:t.handlers,contexts:t.contexts??{},loaded:o,islandLoaded:i,chunkDigests:a,action:Tn,safeAction:Mn,refreshIsland:Re,context:l=>p.contexts[l],navigate:S,buildUrl:L,invalidate:gt,waitClient:Yt,onClientReady:ct,announce:l=>{let g=document.getElementById("r-live");g&&(g.textContent="",requestAnimationFrame(()=>{g.textContent=l}))},measure:l=>{let g=typeof l=="string"?document.querySelector(l):l;if(!(g instanceof Element))return null;let b=g.getBoundingClientRect();return{x:b.x,y:b.y,width:b.width,height:b.height}},storage:{get:l=>{try{return localStorage.getItem(l)}catch{return null}},set:(l,g)=>{try{localStorage.setItem(l,g)}catch{}},remove:l=>{try{localStorage.removeItem(l)}catch{}}},online:()=>navigator.onLine,presence:()=>({idle:!!window.__rIdle||document.hidden,hidden:document.hidden}),isNavigatingWithKeyboard:()=>document.documentElement.dataset.rNav==="keyboard",contentSizeMultiplier:()=>parseFloat(getComputedStyle(document.documentElement).fontSize)/16||1,focus:mt,onCleanup:h,showPopup:l=>(x("showPopup",l),!0),hidePopup:l=>x("hidePopup",l),showModal:l=>(x("showModal",l),!0),hideModal:l=>x("hideModal",l),dismissAll:()=>x("dismissAll"),runHandler:Te};window.__resuma=p,c.size&&Ht(c),d.size&&Pt(d),H(u,e),P(u,e),Y(u,e),Z(u,e),tt(u,e),st(u,e),Sn(u),vt(u),kn(u),Se(u),fn(u),me(t.visible_tasks??{},e,n,we),Wt(t.effects??[],e,p),Ut(t.lazy_chunks??[],u)}async function wn(){be||(be=!0,se(pt),pt(),bn(),vn(),le(),q(location.pathname+location.search),Cn())}function ke(t){let e=window.__resuma;if(!t.length)return e.state;let n={};for(let r of t){let o=r.indexOf(":"),i=o===-1?r:r.slice(0,o),s=o===-1?void 0:r.slice(o+1),a=s!=null?y(s):i,c=e.signals.get(a);c&&(n[i]=c)}return Object.assign(Object.create(e.state),n)}async function Te(t,e,n,r,o){let i=await Ft(t,e),s=ke(r),a=Bt(n,o);await i(a,s,window.__resuma)}function ye(t,e){t.toggleAttribute("aria-busy",e),t.classList.toggle("resuma-form-pending",e),t.querySelectorAll("button, input[type=submit], input[type=button]").forEach(n=>{e?(n.disabled||n.setAttribute("data-r-was-enabled","1"),n.disabled=!0):n.getAttribute("data-r-was-enabled")==="1"&&(n.disabled=!1,n.removeAttribute("data-r-was-enabled"))})}function bn(){document.addEventListener("submit",async t=>{if(!(t.target instanceof HTMLFormElement))return;let e=t.target;if(!e.getAttribute("data-r-submit")||(t.preventDefault(),e.hasAttribute("aria-busy")))return;let n=e.getAttribute("data-r-submit"),r=new FormData(e),o={};r.forEach((s,a)=>{o[a]=String(s)});let i=new URLSearchParams(o);ye(e,!0);try{let s=await fetch(e.action||`/_resuma/submit/${encodeURIComponent(n)}`,{method:"POST",credentials:"same-origin",headers:j({"content-type":"application/x-www-form-urlencoded",accept:"application/json"}),body:i.toString()}),a=await s.json();if(!s.ok||a.ok===!1){yn(e,a.field_errors??{}),(s.status>=500||!a.field_errors)&&console.error("[r] submit",a.error??n);return}Me(e),a.redirect&&D(a.redirect)}catch(s){console.error("[r] submit",s)}finally{document.contains(e)&&ye(e,!1)}},!0)}function yn(t,e){Me(t);for(let[n,r]of Object.entries(e)){let o=t.querySelector(`[name="${CSS.escape(n)}"]`);if(!o)continue;let i=document.createElement("span");i.className="resuma-field-error",i.setAttribute("data-r-field-error",n),i.textContent=r,o.insertAdjacentElement("afterend",i)}}function Me(t){t.querySelectorAll("[data-r-field-error]").forEach(e=>e.remove())}function vn(){document.addEventListener("submit",t=>{if(!(t.target instanceof HTMLFormElement))return;let e=t.target;if(!e.hasAttribute("data-r-loader-refresh")||e.getAttribute("data-r-on:submit")||e.querySelector("[data-r-on\\:submit]"))return;t.preventDefault();let n=new FormData(e),r={};n.forEach((i,s)=>{let a=String(i);a&&(r[s]=a)});let o=e.getAttribute("action")||location.pathname;window.__resuma?.navigate(L(o,r))},!0)}function Sn(t){t.querySelectorAll("template[data-r-stream-chunk]").forEach(e=>{let n=e.getAttribute("data-r-stream-chunk");if(!n)return;let r=t.querySelector(`template[data-r-stream="${n}"]`);if(!r||!r.parentElement)return;let o=e.innerHTML,i=document.createRange().createContextualFragment(o);r.replaceWith(i),e.remove()})}function En(t){if(t.startsWith("/")&&!t.startsWith("//")){S(t);return}try{let e=new URL(t,location.origin);if(e.origin===location.origin&&(e.protocol==="http:"||e.protocol==="https:")){S(e.pathname+e.search+e.hash);return}}catch{}window.location.assign(t)}function kn(t){t.querySelectorAll("[data-r-vt]").forEach(e=>{e.addEventListener("click",n=>{let r=n.target?.closest("a[href]");if(!r||r.getAttribute("target")==="_blank")return;let o=r.getAttribute("href");!o||o.startsWith("#")||o.startsWith("javascript:")||r.hasAttribute("data-r-nav")||(n.preventDefault(),En(o))})})}async function Tn(t,e){let n=await fetch(`/_resuma/action/${encodeURIComponent(t)}`,{method:"POST",credentials:"same-origin",headers:j({"content-type":"application/json"}),body:JSON.stringify({args:e})}),r;try{r=await n.json()}catch{throw n.ok?new Error(`action ${t}: invalid response`):new Error(`action ${t}: ${n.status}`)}if(!n.ok||r.ok===!1)throw new Error(r.error??`action ${t}: ${n.status}`);return r.redirect&&D(r.redirect),r.value}async function Mn(t,e){try{let n=await fetch(`/_resuma/action/${encodeURIComponent(t)}`,{method:"POST",credentials:"same-origin",headers:j({"content-type":"application/json"}),body:JSON.stringify({args:e})}),r;try{r=await n.json()}catch{return{ok:!1,error:`action ${t}: ${n.status}`}}return!n.ok||r.ok===!1?{ok:!1,error:r.error??`action ${t}: ${n.status}`,field_errors:r.field_errors}:(r.redirect&&D(r.redirect),{ok:!0,value:r.value})}catch(n){return{ok:!1,error:n instanceof Error?n.message:String(n)}}}function Rn(t,e){t.querySelectorAll("[data-r-field-error]").forEach(n=>n.remove());for(let[n,r]of Object.entries(e)){let o=t.querySelector(`[name="${CSS.escape(n)}"]`);if(!o)continue;let i=document.createElement("span");i.className="resuma-field-error",i.setAttribute("data-r-field-error",n),i.textContent=r,o.insertAdjacentElement("afterend",i)}}async function Re(t){let e=await fetch(`/_resuma/island/${encodeURIComponent(t)}`);if(!e.ok)return;let n=await e.text(),r=document.querySelector(`resuma-island[data-r-instance="${t}"]`);if(!r)return;r.outerHTML=n;let o=document.querySelector(`resuma-island[data-r-instance="${CSS.escape(t)}"]`),i=window.__resuma?.signals;!o||!i||(H(o,i),P(o,i),Y(o,i),Z(o,i),tt(o,i),st(o,i))}function Cn(){window.__resumaDev&&window.addEventListener("resuma:dev",t=>{let e=String(t.detail??"");e.startsWith("island:")&&Re(e.slice(7))})}var pe,he,Ee,gn,we,be,fe=w(()=>{I();Ot();Dt();Vt();C();C();zt();ue();ge();k();G();lt();F();pe="[data-r-flow-dashboard], [data-r-flow-graph], [data-r-event-stream], [data-r-worker-panel]";he=null;Ee="resuma-state",gn="resuma-root";we=()=>document.getElementById(gn)??document.body;be=!1});fe();export{wn as bootstrap,ke as buildLocalState,mn as mountFlowWidgets,pt as mountPage,j as mutationHeaders,Te as runHandler,Rn as showActionFieldErrors};