forked from cferdinandi/reef
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathreef.es.min.js
3 lines (3 loc) · 5.01 KB
/
reef.es.min.js
1
2
3
/*! reef v13.0.5 | (c) 2024 Chris Ferdinandi | MIT License | http://github.com/cferdinandi/reef */
function e(e,t,n=document){let r=new CustomEvent(`reef:${e}`,{bubbles:!0,cancelable:!0,detail:t});return n.dispatchEvent(r)}function t(e){return"string"==typeof e?document.querySelector(e):e}function n(e){return Object.prototype.toString.call(e).slice(8,-1).toLowerCase()}function r(t,i){let o="signal"+(t?`-${t}`:"");return{get:(e,i)=>"_isSignal"===i||(["object","array"].includes(n(e[i]))&&!e[i]._isSignal&&(e[i]=new Proxy(e[i],r(t))),e[i]),set:(t,n,r)=>(t[n]===r||(t[n]=r,e(o,{prop:n,value:r,action:"set"})),!0),deleteProperty(t,n){let r=structuredClone(t[n]);return delete t[n],e(o,{prop:n,value:r,action:"delete"}),!0}}}function i(e={},t=""){return e=["array","object"].includes(n(e))?e:{value:e},new Proxy(e,r(t))}class o{constructor(t,n,r=""){let i="signal"+(r?`-${r}`:"");Object.defineProperties(this,{value:{get:()=>structuredClone(t),set:()=>!0}});for(let r in n)"function"==typeof n[r]&&(this[r]=function(...o){n[r](t,...o),e(i,t)})}}function l(e={},t={},n=""){return new o(e,t,n)}let s,u=["input","option","textarea"],c=["value","checked","selected"],d=["checked","selected"];function a(e){return["false","null","undefined","0","-0","NaN","0n","-0n"].includes(e)}function f(e,t,n,r){if(!t.startsWith("on")||!r)return;if(e[t])return;let i=r[n.split("(")[0]];i&&(e[t]=i)}function h(e,t){let n=t.replace(/\s+/g,"").toLowerCase();return!(!["src","href","xlink:href"].includes(e)||!n.includes("javascript:")&&!n.includes("data:text/html"))||(!!(e.startsWith("on")||e.startsWith("@on")||e.startsWith("#on"))||void 0)}function m(e,t,n,r){f(e,t,n,r),h(t,n)||(c.includes(t)&&(e[t]="value"===t?n:" "),e.setAttribute(t,n))}function g(e,t){c.includes(t)&&(e[t]=""),e.removeAttribute(t)}function p(e,t){if(1===e.nodeType){for(let{name:n,value:r}of Array.from(e.attributes)){if(h(n,r))return g(e,n),void f(e,n,r,t);if(!n.startsWith("@")&&!n.startsWith("#"))continue;let i=n.slice(1);g(e,n),d.includes(i)&&a(r)||m(e,i,r,t)}if(e.childNodes)for(let n of e.childNodes)p(n,t)}}function b(e){return e.childNodes&&e.childNodes.length?null:e.textContent}function y(e,t,n){let r=e.childNodes,i=t.childNodes;(function(e){let t=e.querySelectorAll("script");for(let e of t)e.remove()})(e)||(r.forEach((function(e,o){if(!i[o]){let r=e.cloneNode(!0);return p(r,n),void t.append(r)}if(l=e,s=i[o],"number"==typeof l.nodeType&&l.nodeType!==s.nodeType||"string"==typeof l.tagName&&l.tagName!==s.tagName||"string"==typeof l.id&&l.id&&l.id!==s.id||"getAttribute"in l&&"getAttribute"in s&&l.getAttribute("key")!==s.getAttribute("key")||"string"==typeof l.src&&l.src&&l.src!==s.src){let r=function(e,t){if(1!==e.nodeType)return;let n=e.getAttribute("id"),r=e.getAttribute("key");if(!n||!r)return;let i=n?`#${n}`:`[key="${r}"]`;return t.querySelector(`:scope > ${i}`)}(e,t);if(!r){let t=e.cloneNode(!0);return p(t,n),void i[o].before(t)}i[o].before(r)}var l,s;if(r[o]&&"hasAttribute"in r[o]&&r[o].hasAttribute("reef-ignore"))return;if(function(e,t,n){if(1!==e.nodeType)return;let r=e.attributes,i=t.attributes;for(let{name:i,value:o}of Array.from(r)){if(i.startsWith("#"))continue;if(c.includes(i)&&u.includes(e.tagName.toLowerCase()))continue;let r=i.startsWith("@")?i.slice(1):i;d.includes(r)&&a(o)?g(t,r):m(t,r,o,n)}for(let{name:e,value:n}of Array.from(i))r[e]||c.includes(e)&&u.includes(t.tagName.toLowerCase())||g(t,e)}(e,i[o],n),e.nodeName.includes("-"))return;let f=b(e);if(f&&f!==b(i[o])&&(i[o].textContent=f),e.childNodes.length||!i[o].childNodes.length){if(!i[o].childNodes.length&&e.childNodes.length){let t=document.createDocumentFragment();return y(e,t,n),void i[o].appendChild(t)}e.childNodes.length&&y(e,i[o],n)}else i[o].innerHTML=""})),function(e,t){let n=e.length-t.length;if(!(n<1))for(;n>0;n--)e[e.length-1].remove()}(i,r))}function v(n,r,i){let o=t(n),l=function(e){let t=(new DOMParser).parseFromString(`<body><template>${e}</template></body>`,"text/html");return t.body?t.body.firstElementChild.content:document.createElement("body")}(r);e("before-render",null,o)&&(y(l,o,i),e("render",null,o))}class N{constructor(e,t,n){var r;this.elem=e,this.template=t,this.signals=n.signals?n.signals.map((e=>`reef:signal-${e}`)):["reef:signal"],this.events=n.events,this.handler=(r=this,function(e){r.render()}),this.debounce=null,this.start()}start(){for(let e of this.signals)document.addEventListener(e,this.handler);this.render(),e("start",null,t(this.elem))}stop(){for(let e of this.signals)document.removeEventListener(e,this.handler);e("stop",null,t(this.elem))}render(){let e=this;e.debounce&&window.cancelAnimationFrame(e.debounce),e.debounce=window.requestAnimationFrame((function(){v(e.elem,e.template(),e.events)}))}}function A(e,t,n={}){return new N(e,t,n)}function w(){setTimeout((function(){let e=document.querySelector(s);s=null,e&&(e.focus(),document.activeElement!==e&&(e.setAttribute("tabindex",-1),e.focus()))}),1)}function C(e){e&&"string"==typeof e&&(s=e,document.addEventListener("reef:render",w,{once:!0}))}export{A as component,C as focus,v as render,i as signal,l as store};
//# sourceMappingURL=reef.es.min.js.map