resuma 1.2.0

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