resuma 1.0.2

Resuma — resumable SSR Rust web framework: zero hydration, islands, server actions, Flow (Axum).
1
var p="resuma-state",f="resuma-root",g="data-r-on:",y="data-r-cap:",E="data-r-inline:",a="/_resuma/core.js",h=["click","input","change","submit","focus","blur","keydown","keyup","keypress","mousedown","mouseup","mousemove","mouseenter","mouseleave","pointerdown","pointerup","pointermove","touchstart","touchend","scroll","wheel","dragstart","dragend","drop","load"];function _(){let e=document.getElementById(p);if(!e||!e.textContent)return{signals:[],handlers:{},islands:[]};try{return JSON.parse(e.textContent)}catch{return{signals:[],handlers:{},islands:[]}}}function R(){return document.getElementById(f)??document.body}function b(e,t){return e.signals.length||e.islands.length||e.visible_tasks&&Object.keys(e.visible_tasks).length||e.lazy_chunks?.length?!0:!!t.querySelector("resuma-island, resuma-boundary, resuma-dyn, resuma-show, [data-r-bind], [data-r-submit], template[data-r-portal], template[data-r-stream-chunk], [data-r-vt], a[data-r-nav]")}async function s(){window.__resumaCoreReady||(window.__resumaCoreReady=import(a).then(e=>e.bootstrap())),await window.__resumaCoreReady}function i(){let e=_();b(e,R())&&s()}function w(e){let t=e.target;return t instanceof Element?t:t instanceof Text?t.parentElement:null}async function v(e){let t=w(e);if(!t)return;let u=g+e.type,d=y+e.type,c=E+e.type;for(;t&&t!==document.body;){t.getAttribute(`data-r-prevent:${e.type}`)!==null&&e.preventDefault(),t.getAttribute(`data-r-stop:${e.type}`)!==null&&e.stopPropagation();let r=t.getAttribute(u);if(r){let l=(t.getAttribute(d)??"").split(",").map(n=>n.trim()).filter(Boolean),m=t.getAttribute(c);try{await s(),await(await import(a)).runHandler(r,m,e,l)}catch(n){console.error("[resuma] handler error",n)}return}t=t.parentElement}}function P(){for(let e of h)document.addEventListener(e,v,!0)}function o(){P(),i()}i();document.readyState==="loading"?document.addEventListener("DOMContentLoaded",o,{once:!0}):o();