resuma 1.3.0

Resuma — resumable SSR Rust web framework: zero hydration, islands, server actions, Flow (Axum).
Documentation
1
var f="resuma-state",p="resuma-root",R="data-r-on:",h="data-r-cap:",y="data-r-inline:",i="/_resuma/core.js?v=1.3.0",u=["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(f);if(!e||!e.textContent)return{signals:[],handlers:{},islands:[]};try{return JSON.parse(e.textContent)}catch{return{signals:[],handlers:{},islands:[]}}}function b(){return document.getElementById(p)??document.body}function w(e){for(let t of Object.values(e))if(Object.keys(t).length)return!0;return!1}function E(e,t){if(e.signals.length||e.islands.length||e.effects?.length||w(e.handlers)||e.visible_tasks&&Object.keys(e.visible_tasks).length||e.lazy_chunks?.length)return!0;let r=u.map(o=>`[data-r-on\\:${o}]`).join(", ");return!!t.querySelector(`resuma-island, resuma-boundary, resuma-dyn, resuma-show, resuma-for, resuma-match, [data-r-bind], [data-r-submit], ${r}, template[data-r-portal], template[data-r-stream-chunk], [data-r-vt], a[data-r-nav]`)}async function d(){window.__resumaCoreReady||(window.__resumaCoreReady=import(i).then(e=>e.bootstrap())),await window.__resumaCoreReady}function l(){let e=_();E(e,b())&&d()}function k(e){let t=e.target;return t instanceof Element?t:t instanceof Text?t.parentElement:null}async function v(e){let t=k(e);if(!t)return;let r=R+e.type,o=h+e.type,c=y+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 s=t.getAttribute(r);if(s){let g=(t.getAttribute(o)??"").split(",").map(n=>n.trim()).filter(Boolean),m=t.getAttribute(c);try{await d(),await(await import(i)).runHandler(s,m,e,g)}catch(n){console.error("[resuma] handler error",n)}return}t=t.parentElement}}function P(){for(let e of u)document.addEventListener(e,v,!0)}function a(){P(),l()}l();document.readyState==="loading"?document.addEventListener("DOMContentLoaded",a,{once:!0}):a();