@erickxavier/no-js 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/LICENSE +21 -0
- package/README.md +159 -0
- package/dist/cjs/no.js +25 -0
- package/dist/cjs/no.js.map +7 -0
- package/dist/esm/no.js +25 -0
- package/dist/esm/no.js.map +7 -0
- package/dist/iife/no.js +25 -0
- package/dist/iife/no.js.map +7 -0
- package/package.json +64 -0
- package/src/animations.js +113 -0
- package/src/cdn.js +16 -0
- package/src/context.js +104 -0
- package/src/directives/binding.js +118 -0
- package/src/directives/conditionals.js +283 -0
- package/src/directives/events.js +153 -0
- package/src/directives/http.js +288 -0
- package/src/directives/i18n.js +29 -0
- package/src/directives/loops.js +235 -0
- package/src/directives/refs.js +144 -0
- package/src/directives/state.js +102 -0
- package/src/directives/styling.js +88 -0
- package/src/directives/validation.js +216 -0
- package/src/dom.js +232 -0
- package/src/evaluate.js +298 -0
- package/src/fetch.js +173 -0
- package/src/filters.js +137 -0
- package/src/globals.js +58 -0
- package/src/i18n.js +36 -0
- package/src/index.js +189 -0
- package/src/registry.js +60 -0
- package/src/router.js +253 -0
package/dist/iife/no.js
ADDED
|
@@ -0,0 +1,25 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* No.JS v1.0.0 — The HTML-First Reactive Framework
|
|
3
|
+
* No more JavaScript. Just HTML attributes with superpowers.
|
|
4
|
+
* @license MIT
|
|
5
|
+
* @see https://github.com/erickillian/nojs
|
|
6
|
+
*/
|
|
7
|
+
(()=>{var p={baseApiUrl:"",headers:{},timeout:1e4,retries:0,retryDelay:1e3,credentials:"same-origin",csrf:null,cache:{strategy:"none",ttl:3e5},templates:{cache:!0},router:{mode:"history",base:"/",scrollBehavior:"top"},i18n:{defaultLocale:"en",fallbackLocale:"en",detectBrowser:!1},debug:!1,devtools:!1,csp:null,sanitize:!0},rt={request:[],response:[]},G={},M={},bt=new Set,b={},Q={},gt=new Map,nt={},j=null;function wt(t){j=t}function k(...t){p.debug&&console.log("[No.JS]",...t)}function X(...t){console.warn("[No.JS]",...t)}function ut(){for(let t of bt)t()}function Z(t,r,e){r.$watch(e),typeof t=="string"&&t.includes("$store")&&bt.add(e)}function ft(t,r){(G[t]||[]).forEach(e=>e(r))}var U={locale:"en",locales:{},t(t,r={}){let e=U.locales[U.locale]||U.locales[p.i18n.fallbackLocale]||{},n=t.split(".").reduce((o,s)=>o?.[s],e);if(n==null)return t;if(typeof n=="string"&&n.includes("|")&&r.count!=null){let o=n.split("|").map(s=>s.trim());n=Number(r.count)===1?o[0]:o[1]||o[0]}return typeof n=="string"&&(n=n.replace(/\{(\w+)\}/g,(o,s)=>r[s]!=null?r[s]:"")),n}};var Rt=0,Bt=new Set;function E(t={},r=null){let e=new Set,n={};Object.assign(n,t);let o=!1;function s(){if(!o){o=!0;try{Rt>0?e.forEach(u=>Bt.add(u)):e.forEach(u=>u())}finally{o=!1}}}let i={get(u,a){if(a==="__isProxy")return!0;if(a==="__raw")return u;if(a==="__listeners")return e;if(a==="$watch")return l=>(e.add(l),()=>e.delete(l));if(a==="$notify")return s;if(a==="$set")return(l,f)=>{c[l]=f};if(a==="$parent")return r;if(a==="$refs")return nt;if(a==="$store")return M;if(a==="$route")return j?j.current:{};if(a==="$router")return j;if(a==="$i18n")return U;if(a==="$form")return u.$form||null;if(a in u)return u[a];if(r&&r.__isProxy)return r[a]},set(u,a,l){let f=u[a];return u[a]=l,f!==l&&s(),!0},has(u,a){return a in u?!0:r&&r.__isProxy?a in r:!1}},c=new Proxy(n,i);return c}function yt(t){let r=new Set,e={},n=t;for(;n&&n.__isProxy;){let o=n.__raw;for(let s of Object.keys(o))r.has(s)||(r.add(s),e[s]=o[s]);n=n.$parent}return{keys:[...r],vals:e}}var vt=new Map;function V(t,r,e){let n={};for(let a=0;a<r.length;a++)n[r[a]]=e[a];function o(a,l){return a.split(".").reduce((f,d)=>f?.[d],l)}function s(a){let l=a.trim();if(l==="true")return!0;if(l==="false")return!1;if(l==="null")return null;if(l!=="undefined")return/^-?\d+(\.\d+)?$/.test(l)?Number(l):/^(['"`]).*\1$/.test(l)?l.slice(1,-1):o(l,n)}let i=t.trim(),c=i.match(/^(.+?)\s*\?\s*(.+?)\s*:\s*(.+)$/);if(c){let a=V(c[1].trim(),r,e);return V(a?c[2].trim():c[3].trim(),r,e)}if(i.includes("||")){let a=i.split("||");for(let l of a){let f=V(l.trim(),r,e);if(f)return f}return V(a[a.length-1].trim(),r,e)}if(i.includes("&&")){let a=i.split("&&"),l;for(let f of a)if(l=V(f.trim(),r,e),!l)return l;return l}let u=i.match(/^(.+?)\s*(===|!==|==|!=|>=|<=|>|<)\s*(.+)$/);if(u){let a=s(u[1]),l=s(u[3]);switch(u[2]){case"===":return a===l;case"!==":return a!==l;case"==":return a==l;case"!=":return a!=l;case">=":return a>=l;case"<=":return a<=l;case">":return a>l;case"<":return a<l}}return i.startsWith("!")?!V(i.slice(1).trim(),r,e):s(i)}function Pt(t){let r=[],e="",n=0,o=!1,s="";for(let i=0;i<t.length;i++){let c=t[i];if(o){e+=c,c===s&&t[i-1]!=="\\"&&(o=!1);continue}if(c==="'"||c==='"'||c==="`"){o=!0,s=c,e+=c;continue}if(c==="("||c==="["||c==="{"){n++,e+=c;continue}if(c===")"||c==="]"||c==="}"){n--,e+=c;continue}if(c==="|"&&n===0&&t[i+1]!=="|"&&t[i-1]!=="|"){r.push(e.trim()),e="";continue}e+=c}return r.push(e.trim()),r}function jt(t,r){let e=r.indexOf(":"),n,o;e===-1?(n=r.trim(),o=null):(n=r.substring(0,e).trim(),o=r.substring(e+1).trim());let s=b[n];if(!s)return X(`Unknown filter: ${n}`),t;let i=o?Ut(o):[];return s(t,...i)}function Ut(t){let r=[],e="",n=!1,o="";for(let s of t){if(n){if(s===o){n=!1;continue}e+=s;continue}if(s==="'"||s==='"'){n=!0,o=s;continue}if(s===","){r.push(e.trim()),e="";continue}e+=s}return e.trim()&&r.push(e.trim()),r.map(s=>{let i=Number(s);return isNaN(i)?s:i})}function _(t,r){if(!(t==null||t===""))try{let e=Pt(t),n=e[0],{keys:o,vals:s}=yt(r),i=["$store","$route","$router","$i18n","$refs","$form"];for(let l of i)o.includes(l)||(o.push(l),s[l]=r[l]);let c=o,u=c.map(l=>s[l]),a;if(p.csp==="strict")a=V(n,c,u);else{let l=n+"|"+c.join(","),f=vt.get(l);f||(f=new Function(...c,`return (${n})`),vt.set(l,f)),a=f(...u)}for(let l=1;l<e.length;l++)a=jt(a,e[l]);return a}catch{return}}function F(t,r,e={}){try{let{keys:n,vals:o}=yt(r),s={$store:M,$route:j?.current,$router:j,$i18n:U,$refs:r.$refs};Object.assign(s,e);for(let[d,m]of Object.entries(s))n.includes(d)||(n.push(d),o[d]=m);let i=[...n],c=i.map(d=>o[d]),u=new Set,a=r;for(;a&&a.__isProxy;){for(let d of Object.keys(a.__raw))u.add(d);a=a.$parent}let l=[...u].map(d=>`{let _c=__ctx;while(_c&&_c.__isProxy){if('${d}'in _c.__raw){_c.$set('${d}',typeof ${d}!=='undefined'?${d}:_c.__raw['${d}']);break;}_c=_c.$parent;}}`).join(`
|
|
8
|
+
`);new Function("__ctx",...i,`${t};
|
|
9
|
+
${l}`)(r,...c)}catch(n){X("Expression error:",t,n.message)}}function tt(t,r){return t.split(".").reduce((e,n)=>e?.[n],r)}function Y(t,r){return t.replace(/\{([^}]+)\}/g,(e,n)=>{let o=_(n.trim(),r);return o??""})}function _t(t,r){if(t.startsWith("http://")||t.startsWith("https://")||t.startsWith("//"))return t;let e=r;for(;e;){let n=e.getAttribute?.("base");if(n)return n.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"");e=e.parentElement}return p.baseApiUrl?p.baseApiUrl.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):t}async function dt(t,r="GET",e=null,n={},o=null,s=null){let i=_t(t,o),c={method:r.toUpperCase(),headers:{...p.headers||{},...n},credentials:p.credentials};if(e&&r!=="GET")if(typeof e=="string")try{JSON.parse(e),c.headers["Content-Type"]="application/json",c.body=e}catch{c.body=e}else e instanceof FormData?c.body=e:(c.headers["Content-Type"]="application/json",c.body=JSON.stringify(e));p.csrf&&r!=="GET"&&(c.headers[p.csrf.header||"X-CSRF-Token"]=p.csrf.token||"");for(let l of rt.request)c=l(i,c)||c;let u=p.retries||0,a;for(let l=0;l<=u;l++)try{let f=new AbortController,d=setTimeout(()=>f.abort(),p.timeout||1e4);if(s){if(s.aborted)throw clearTimeout(d),new DOMException("Aborted","AbortError");s.addEventListener("abort",()=>f.abort(),{once:!0})}c.signal=f.signal;let m=await fetch(i,c);clearTimeout(d);for(let g of rt.response)m=g(m,i)||m;if(!m.ok){let g=await m.json().catch(()=>({})),A=new Error(g.message||`HTTP ${m.status}`);throw A.status=m.status,A.body=g,A}let h=await m.text();try{return JSON.parse(h)}catch{return h}}catch(f){if(f.name==="AbortError")throw f;a=f,l<u&&await new Promise(d=>setTimeout(d,p.retryDelay||1e3))}throw a}function At(t,r){if(r==="none")return null;if(r==="memory"){let n=gt.get(t);return n&&Date.now()-n.time<(p.cache.ttl||3e5)?n.data:null}let e=r==="local"?localStorage:r==="session"?sessionStorage:null;if(!e)return null;try{let n=e.getItem("nojs_cache_"+t);if(!n)return null;let o=JSON.parse(n);if(Date.now()-o.time<(p.cache.ttl||3e5))return o.data;e.removeItem("nojs_cache_"+t)}catch{}return null}function xt(t,r,e){if(e==="none")return;let n={data:r,time:Date.now()};if(e==="memory"){gt.set(t,n);return}let o=e==="local"?localStorage:e==="session"?sessionStorage:null;if(o)try{o.setItem("nojs_cache_"+t,JSON.stringify(n))}catch{}}var ot=new Map;function w(t){let r=t;for(;r;){if(r.__ctx)return r.__ctx;r=r.parentElement}return E()}function z(t){let r=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT);for(;r.nextNode();)r.currentNode.__declared=!1}function N(t){if(!t)return null;let r=t.startsWith("#")?t.slice(1):t,e=document.getElementById(r);return e&&e.content?e.content.cloneNode(!0):null}function Et(t){return p.sanitize?t.replace(/<script[\s\S]*?<\/script>/gi,"").replace(/on\w+\s*=/gi,"data-blocked=").replace(/javascript:/gi,""):t}function Lt(t,r){if(t.startsWith("./")){let e=r.parentNode;for(;e;){if(e.__srcBase)return e.__srcBase+t.slice(2);e=e.parentNode}return t.slice(2)}return _t(t,r)}async function Tt(t){let r=t||document,e=r.querySelectorAll("template[src]");if(k("[LRT] called on",r===document?"document":r.nodeName||"fragment","\u2014 found",e.length,"template[src]",[...e].map(o=>o.getAttribute("src"))),!e.length)return;let n=[...e].map(async o=>{if(o.__srcLoaded){k("[LRT] SKIP (already loaded):",o.getAttribute("src"));return}o.__srcLoaded=!0;let s=o.getAttribute("src"),i=Lt(s,o),c=i.substring(0,i.lastIndexOf("/")+1);try{let u=p.templates.cache!==!1,a;if(u&&ot.has(i)?(a=ot.get(i),k("[LRT] CACHE HIT:",i)):(a=await(await fetch(i)).text(),u&&ot.set(i,a)),o.innerHTML=a,o.content&&(o.content.__srcBase=c),k("Loaded remote template:",s,"\u2192",i),await Tt(o.content||o),!o.hasAttribute("route")&&o.parentNode){let f=[...o.content.childNodes],d=o.parentNode,m=o.nextSibling;d.removeChild(o);for(let h of f)h.nodeType===1&&(h.__srcBase=h.__srcBase||c),d.insertBefore(h,m)}}catch(u){X("Failed to load template:",s,u.message)}});await Promise.all(n)}async function it(t){let r=t.getAttribute("src");if(t.__srcLoaded){k("[LTE] SKIP (already loaded):",r);return}k("[LTE] START fetch:",r,"| route:",t.hasAttribute("route"),"| inDOM:",document.contains(t),"| loading:",t.getAttribute("loading")),t.__srcLoaded=!0;let e=Lt(r,t),n=e.substring(0,e.lastIndexOf("/")+1),o=null,s=t.getAttribute("loading");if(s&&t.parentNode){let i=s.startsWith("#")?s.slice(1):s,c=document.getElementById(i);c&&c.content&&(o=document.createElement("span"),o.style.cssText="display:contents",o.appendChild(c.content.cloneNode(!0)),t.parentNode.insertBefore(o,t))}try{let i=p.templates.cache!==!1,c;if(i&&ot.has(e)?(c=ot.get(e),k("[LTE] CACHE HIT:",e)):(c=await(await fetch(e)).text(),i&&ot.set(e,c)),t.innerHTML=c,t.content&&(t.content.__srcBase=n),k("Loaded remote template:",r,"\u2192",e),t.hasAttribute("route")||await Tt(t.content||t),o&&o.remove(),!t.hasAttribute("route")&&t.parentNode){let a=[...t.content.childNodes],l=t.parentNode,f=t.nextSibling;l.removeChild(t);for(let d of a)d.nodeType===1&&(d.__srcBase=d.__srcBase||n),l.insertBefore(d,f)}}catch(i){o&&o.remove(),X("Failed to load template:",r,i.message)}}function mt(t){(t||document).querySelectorAll("template[include]").forEach(e=>{let n=e.getAttribute("include"),o=document.getElementById(n.startsWith("#")?n.slice(1):n);!o||!o.content||e.replaceWith(o.content.cloneNode(!0))})}async function Ct(t){let r=[...document.querySelectorAll("template[src]")],e=r.filter(o=>!o.__srcLoaded&&o.getAttribute("lazy")==="priority");await Promise.all(e.map(it));let n=r.filter(o=>{if(o.__srcLoaded)return!1;let s=o.getAttribute("lazy");return s==="ondemand"||s==="priority"?!1:o.hasAttribute("route")?t!=null&&o.getAttribute("route")===t:!0});await Promise.all(n.map(it))}function $t(){let r=[...document.querySelectorAll("template[src]")].filter(e=>e.__srcLoaded||e.getAttribute("lazy")==="ondemand"?!1:e.hasAttribute("route"));return Promise.all(r.map(it))}var lt=new Map;function v(t,r){lt.set(t,{priority:r.priority??50,init:r.init})}function Ft(t){if(lt.has(t))return{directive:lt.get(t),match:t};let r=["class-*","on:*","style-*","bind-*"];for(let e of r){let n=e.replace("*","");if(t.startsWith(n)&<.has(e))return{directive:lt.get(e),match:e}}return null}function St(t){if(t.__declared)return;t.__declared=!0;let r=[];for(let e of[...t.attributes]){let n=Ft(e.name);n&&r.push({name:e.name,value:e.value,priority:n.directive.priority,init:n.directive.init})}r.sort((e,n)=>e.priority-n.priority);for(let e of r)e.init(t,e.name,e.value)}function L(t){if(!t)return;t.nodeType===1&&!t.__declared&&St(t);let r=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT);for(;r.nextNode();){let e=r.currentNode;e.tagName==="TEMPLATE"||e.tagName==="SCRIPT"||e.__declared||St(e)}}var Nt=!1;function It(){if(Nt||typeof document>"u")return;Nt=!0;let t=`
|
|
10
|
+
@keyframes fadeIn { from { opacity: 0; } to { opacity: 1; } }
|
|
11
|
+
@keyframes fadeOut { from { opacity: 1; } to { opacity: 0; } }
|
|
12
|
+
@keyframes fadeInUp { from { opacity: 0; transform: translateY(20px); } to { opacity: 1; transform: translateY(0); } }
|
|
13
|
+
@keyframes fadeInDown { from { opacity: 0; transform: translateY(-20px); } to { opacity: 1; transform: translateY(0); } }
|
|
14
|
+
@keyframes fadeOutUp { from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(-20px); } }
|
|
15
|
+
@keyframes fadeOutDown { from { opacity: 1; transform: translateY(0); } to { opacity: 0; transform: translateY(20px); } }
|
|
16
|
+
@keyframes slideInLeft { from { transform: translateX(-100%); } to { transform: translateX(0); } }
|
|
17
|
+
@keyframes slideInRight { from { transform: translateX(100%); } to { transform: translateX(0); } }
|
|
18
|
+
@keyframes slideOutLeft { from { transform: translateX(0); } to { transform: translateX(-100%); } }
|
|
19
|
+
@keyframes slideOutRight { from { transform: translateX(0); } to { transform: translateX(100%); } }
|
|
20
|
+
@keyframes zoomIn { from { opacity: 0; transform: scale(0.5); } to { opacity: 1; transform: scale(1); } }
|
|
21
|
+
@keyframes zoomOut { from { opacity: 1; transform: scale(1); } to { opacity: 0; transform: scale(0.5); } }
|
|
22
|
+
@keyframes bounceIn { 0% { opacity: 0; transform: scale(0.3); } 50% { opacity: 1; transform: scale(1.05); } 70% { transform: scale(0.9); } 100% { opacity: 1; transform: scale(1); } }
|
|
23
|
+
@keyframes bounceOut { 0% { opacity: 1; transform: scale(1); } 20% { transform: scale(0.9); } 50%,55% { opacity: 1; transform: scale(1.1); } 100% { opacity: 0; transform: scale(0.3); } }
|
|
24
|
+
`.trim(),r=document.createElement("style");r.setAttribute("data-nojs-animations",""),r.textContent=t,document.head.appendChild(r)}function st(t,r,e,n){It();let o=n||1e3;if(r){let s=t.firstElementChild||t;s.classList.add(r),n&&(s.style.animationDuration=n+"ms"),s.addEventListener("animationend",()=>s.classList.remove(r),{once:!0})}if(e){let s=t.firstElementChild||t;s.classList.add(e+"-enter",e+"-enter-active"),requestAnimationFrame(()=>{s.classList.remove(e+"-enter"),s.classList.add(e+"-enter-to");let i=()=>{s.classList.remove(e+"-enter-active",e+"-enter-to")};s.addEventListener("transitionend",i,{once:!0}),setTimeout(i,o)})}}function pt(t,r,e,n,o){It();let s=o||2e3;if(!t.firstElementChild&&!t.childNodes.length){n();return}if(r){let i=t.firstElementChild||t;i.classList.add(r),o&&(i.style.animationDuration=o+"ms"),i.addEventListener("animationend",()=>{i.classList.remove(r),n()},{once:!0}),setTimeout(n,s);return}if(e){let i=t.firstElementChild||t;i.classList.add(e+"-leave",e+"-leave-active"),requestAnimationFrame(()=>{i.classList.remove(e+"-leave"),i.classList.add(e+"-leave-to");let c=()=>{i.classList.remove(e+"-leave-active",e+"-leave-to"),n()};i.addEventListener("transitionend",c,{once:!0}),setTimeout(c,s)});return}n()}function Dt(){let t=[],r={path:"",params:{},query:{},hash:""},e=new Set;function n(a){let l=t.find(f=>f.path===a);return l||(l={path:a,outlets:{}},t.push(l)),l}function o(a){let l={};return new URLSearchParams(a).forEach((f,d)=>{l[d]=f}),l}function s(a){for(let l of t){let f=[],d=l.path.replace(/:(\w+)/g,(g,A)=>(f.push(A),"([^/]+)")),m=new RegExp("^"+d+"$"),h=a.match(m);if(h){let g={};return f.forEach((A,C)=>{g[A]=h[C+1]}),{route:l,params:g}}}return null}async function i(a,l=!1){let f=a.indexOf("#"),d=f>=0?a.slice(f+1):"",m=f>=0?a.slice(0,f):a,[h,g=""]=m.split("?");r={path:h,params:{},query:o(g),hash:d?"#"+d:""};let A=s(h);if(A){r.params=A.params;let C=A.route.outlets?.default,y=C?.getAttribute("guard"),D=C?.getAttribute("redirect");if(y){let T=E({},null);if(T.__raw.$store=M,T.__raw.$route=r,!_(y,T)&&D){await i(D,!0);return}}}if(p.router.mode==="hash"){let C="#"+a;l?window.location.replace(C):window.location.hash=a}else{let C=p.router.base.replace(/\/$/,"")+a;l?window.history.replaceState({},"",C):window.history.pushState({},"",C)}await c(A),e.forEach(C=>C(r))}async function c(a){let l=document.querySelectorAll("[route-view]");for(let d of l){let m=d.getAttribute("route-view"),h=m&&m.trim()!==""?m.trim():"default",g=a?.route?.outlets?.[h];if(d.innerHTML="",g){g.getAttribute("src")&&!g.__srcLoaded&&(k("Loading route template on demand:",g.getAttribute("src")),await it(g));let A=g.content.cloneNode(!0),C=E({$route:r},w(d)),y=document.createElement("div");y.style.display="contents",y.__ctx=C,g.content.__srcBase&&(y.__srcBase=g.content.__srcBase),y.appendChild(A),d.appendChild(y),mt(y);let D=[...y.querySelectorAll("template[src]")];k("[ROUTER] nested templates found in wrapper:",D.length,D.map(I=>I.getAttribute("src")+(I.__srcLoaded?"[LOADED]":"[NEW]"))),await Promise.all(D.map(it)),k("[ROUTER] all nested loads done for route:",r.path);let T=d.getAttribute("transition");T&&st(y,null,T),z(y),L(y)}}document.querySelectorAll("[route]").forEach(d=>{let m=d.getAttribute("route"),h=d.getAttribute("route-active")||"active",g=d.getAttribute("route-active-exact");g?d.classList.toggle(g,r.path===m):h&&!d.hasAttribute("route-active-exact")&&d.classList.toggle(h,r.path.startsWith(m))});let f=p.router.scrollBehavior;f==="top"?window.scrollTo(0,0):f==="smooth"&&window.scrollTo({top:0,behavior:"smooth"})}return{get current(){return r},push(a){return i(a)},replace(a){return i(a,!0)},back(){window.history.back()},forward(){window.history.forward()},on(a){return e.add(a),()=>e.delete(a)},register(a,l,f="default"){let d=n(a);d.outlets[f]=l},async init(){if(document.querySelectorAll("template[route]").forEach(a=>{let l=a.getAttribute("route"),f=a.getAttribute("outlet")||"default",d=n(l);d.outlets[f]=a}),document.addEventListener("click",a=>{let l=a.target.closest("[route]");if(l&&!l.hasAttribute("route-view")){a.preventDefault();let f=l.getAttribute("route");i(f)}}),p.router.mode==="hash"){window.addEventListener("hashchange",()=>{let l=window.location.hash.slice(1)||"/";i(l,!0)});let a=window.location.hash.slice(1)||"/";await i(a,!0)}else{window.addEventListener("popstate",()=>{let l=window.location.pathname.replace(p.router.base,"")||"/";i(l,!0)});let a=window.location.pathname.replace(p.router.base,"")||"/";await i(a,!0)}}}}b.uppercase=t=>String(t??"").toUpperCase();b.lowercase=t=>String(t??"").toLowerCase();b.capitalize=t=>String(t??"").replace(/\b\w/g,r=>r.toUpperCase());b.truncate=(t,r=100)=>{let e=String(t??"");return e.length>r?e.slice(0,r)+"...":e};b.trim=t=>String(t??"").trim();b.stripHtml=t=>String(t??"").replace(/<[^>]*>/g,"");b.slugify=t=>String(t??"").toLowerCase().replace(/[^a-z0-9]+/g,"-").replace(/^-|-$/g,"");b.nl2br=t=>String(t??"").replace(/\n/g,"<br>");b.encodeUri=t=>encodeURIComponent(String(t??""));b.number=(t,r=0)=>{let e=Number(t);return isNaN(e)?t:e.toLocaleString(void 0,{minimumFractionDigits:r,maximumFractionDigits:r})};b.currency=(t,r="USD")=>{let e=Number(t);if(isNaN(e))return t;try{return e.toLocaleString(void 0,{style:"currency",currency:r})}catch{return`${r} ${e.toFixed(2)}`}};b.percent=(t,r=0)=>{let e=Number(t);return isNaN(e)?t:(e*100).toFixed(r)+"%"};b.filesize=t=>{let r=Number(t);if(isNaN(r))return t;let e=["B","KB","MB","GB","TB"],n=0,o=r;for(;o>=1024&&n<e.length-1;)o/=1024,n++;return o.toFixed(n>0?1:0)+" "+e[n]};b.ordinal=t=>{let r=Number(t);if(isNaN(r))return t;let e=["th","st","nd","rd"],n=r%100;return r+(e[(n-20)%10]||e[n]||e[0])};b.count=t=>Array.isArray(t)?t.length:0;b.first=t=>Array.isArray(t)?t[0]:t;b.last=t=>Array.isArray(t)?t[t.length-1]:t;b.join=(t,r=", ")=>Array.isArray(t)?t.join(r):t;b.reverse=t=>Array.isArray(t)?[...t].reverse():t;b.unique=t=>Array.isArray(t)?[...new Set(t)]:t;b.pluck=(t,r)=>Array.isArray(t)?t.map(e=>e?.[r]):t;b.sortBy=(t,r)=>{if(!Array.isArray(t))return t;let e=r?.startsWith("-"),n=e?r.slice(1):r;return[...t].sort((o,s)=>{let i=o?.[n],c=s?.[n],u=i<c?-1:i>c?1:0;return e?-u:u})};b.where=(t,r,e)=>Array.isArray(t)?t.filter(n=>n?.[r]===e):t;b.date=(t,r="short")=>{let e=new Date(t);if(isNaN(e))return t;let n=r==="long"?{dateStyle:"long"}:r==="full"?{dateStyle:"full"}:{dateStyle:"short"};return e.toLocaleDateString(void 0,n)};b.datetime=t=>{let r=new Date(t);return isNaN(r)?t:r.toLocaleString()};b.relative=t=>{let r=new Date(t);if(isNaN(r))return t;let e=(Date.now()-r.getTime())/1e3;return e<60?"just now":e<3600?Math.floor(e/60)+"m ago":e<86400?Math.floor(e/3600)+"h ago":e<2592e3?Math.floor(e/86400)+"d ago":r.toLocaleDateString()};b.fromNow=t=>{let r=new Date(t);if(isNaN(r))return t;let e=(r.getTime()-Date.now())/1e3;return e<0?b.relative(t):e<60?"in a moment":e<3600?"in "+Math.floor(e/60)+"m":e<86400?"in "+Math.floor(e/3600)+"h":"in "+Math.floor(e/86400)+"d"};b.default=(t,r="")=>t==null||t===""?r:t;b.json=(t,r=2)=>JSON.stringify(t,null,r);b.debug=t=>(console.log("[No.JS debug]",t),t);b.keys=t=>t&&typeof t=="object"?Object.keys(t):[];b.values=t=>t&&typeof t=="object"?Object.values(t):[];v("state",{priority:0,init(t,r,e){let n=_(e,E())||{},o=t.parentElement?w(t.parentElement):null,s=E(n,o);t.__ctx=s;let i=t.getAttribute("persist"),c=t.getAttribute("persist-key");if(i&&c){let u=i==="localStorage"?localStorage:i==="sessionStorage"?sessionStorage:null;if(u){try{let a=u.getItem("nojs_state_"+c);if(a){let l=JSON.parse(a);for(let[f,d]of Object.entries(l))s.$set(f,d)}}catch{}s.$watch(()=>{try{u.setItem("nojs_state_"+c,JSON.stringify(s.__raw))}catch{}})}}k("state",n)}});v("store",{priority:0,init(t,r,e){let n=t.getAttribute("value");if(e){if(!M[e]){let o=n?_(n,E())||{}:{};M[e]=E(o)}k("store",e)}}});v("computed",{priority:2,init(t,r,e){let n=t.getAttribute("expr");if(!e||!n)return;let o=w(t);function s(){let i=_(n,o);o.$set(e,i)}o.$watch(s),s()}});v("watch",{priority:2,init(t,r,e){let n=w(t),o=t.getAttribute("on:change"),s=_(e,n);n.$watch(()=>{let i=_(e,n);if(i!==s){let c=s;s=i,o&&F(o,n,{$old:c,$new:i})}})}});var qt=["get","post","put","patch","delete"];for(let t of qt)v(t,{priority:1,init(r,e,n){let o=r.getAttribute("as")||"data",s=r.getAttribute("loading"),i=r.getAttribute("error"),c=r.getAttribute("empty"),u=r.getAttribute("success"),a=r.getAttribute("then"),l=r.getAttribute("redirect"),f=r.getAttribute("confirm"),d=parseInt(r.getAttribute("refresh"))||0,m=r.getAttribute("cached"),h=r.hasAttribute("cached")?m||"memory":"none",g=r.getAttribute("body"),A=r.getAttribute("headers"),C=r.getAttribute("var"),y=r.getAttribute("into"),D=parseInt(r.getAttribute("retry"))||p.retries,T=parseInt(r.getAttribute("retry-delay"))||p.retryDelay||1e3,I=r.getAttribute("params"),O=r.parentElement?w(r.parentElement):E(),x=r.__ctx||E({},O);r.__ctx=x;let H=[...r.childNodes].map(S=>S.cloneNode(!0)),B=null;async function P(){if(B&&B.abort(),B=new AbortController,f&&!window.confirm(f))return;let S=Y(n,x);if(I){let $=_(I,x);if($&&typeof $=="object"){let K=S.includes("?")?"&":"?",W=new URLSearchParams($).toString();W&&(S+=K+W)}}let at=t+":"+S;if(t==="get"){let $=At(at,h);if($!=null){x.$set(o,$),z(r),L(r);return}}if(s){let $=N(s);$&&(r.innerHTML="",r.appendChild($),L(r))}try{let $=null;if(g){let R=Y(g,x);try{$=JSON.parse(R)}catch{$=R}}if(r.tagName==="FORM"){let R=new FormData(r);$=Object.fromEntries(R.entries())}let K=A?JSON.parse(A):{},W=p.retries,et=p.retryDelay;p.retries=D,p.retryDelay=T;let J=await dt(S,t,$,K,r,B.signal);if(p.retries=W,p.retryDelay=et,t==="get"&&xt(at,J,h),c&&(J==null||Array.isArray(J)&&J.length===0)){let R=N(c);R&&(r.innerHTML="",r.appendChild(R),L(r));return}if(x.$set(o,J),y&&(M[y]||(M[y]=E({})),M[y].$set(o,J),ut()),u){let R=N(u);if(R){r.innerHTML="";let kt=document.getElementById(u.replace("#",""))?.getAttribute("var")||C||"result",Ht=E({[kt]:J},x),ct=document.createElement("div");ct.style.display="contents",ct.__ctx=Ht,ct.appendChild(R),r.appendChild(ct),L(ct)}}else{r.innerHTML="";for(let R of H)r.appendChild(R.cloneNode(!0));z(r),L(r)}a&&F(a,x,{result:J}),l&&j&&j.push(l),ft("fetch:success",{url:S,data:J})}catch($){if($.name==="AbortError")return;if(X(`${t.toUpperCase()} ${S} failed:`,$.message),ft("fetch:error",{url:S,error:$}),ft("error",{url:S,error:$}),i){let K=N(i);if(K){r.innerHTML="";let et=document.getElementById(i.replace("#",""))?.getAttribute("var")||"err",J=E({[et]:{message:$.message,status:$.status,body:$.body}},x),R=document.createElement("div");R.style.display="contents",R.__ctx=J,R.appendChild(K),r.appendChild(R),L(R)}}}}if(r.tagName==="FORM"&&t!=="get"?r.addEventListener("submit",S=>{S.preventDefault(),P()}):t==="get"?P():r.addEventListener("click",S=>{S.preventDefault(),P()}),/\{[^}]+\}/.test(n)){let K=function(){let et=Y(n,x);et!==at&&(at=et,$&&clearTimeout($),S>0?$=setTimeout(P,S):P())},S=parseInt(r.getAttribute("debounce"))||0,at=Y(n,x),$=null,W=O;for(;W&&W.__isProxy;)W.$watch(K),W=W.$parent}d>0&&setInterval(P,d)}});v("bind",{priority:20,init(t,r,e){let n=w(t);function o(){let s=_(e,n);s!=null&&(t.textContent=String(s))}Z(e,n,o),o()}});v("bind-html",{priority:20,init(t,r,e){let n=w(t);function o(){let s=_(e,n);s!=null&&(t.innerHTML=Et(String(s)))}Z(e,n,o),o()}});v("bind-*",{priority:20,init(t,r,e){let n=r.replace("bind-",""),o=w(t);n==="value"&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.tagName==="SELECT")&&t.addEventListener("input",()=>{let i=t.type==="number"?Number(t.value):t.value;F(`${e} = ${JSON.stringify(i)}`,o)});function s(){let i=_(e,o);if(["disabled","readonly","checked","selected","hidden","required"].includes(n)){i?t.setAttribute(n,""):t.removeAttribute(n),n in t&&(t[n]=!!i);return}i!=null?t.setAttribute(n,String(i)):t.removeAttribute(n)}Z(e,o,s),s()}});v("model",{priority:20,init(t,r,e){let n=w(t),o=t.tagName,s=t.type;function i(){let u=_(e,n);o==="INPUT"&&s==="checkbox"?t.checked=!!u:o==="INPUT"&&s==="radio"?t.checked=t.value===String(u):t.value=u!=null?String(u):""}let c=o==="SELECT"||s==="checkbox"||s==="radio"?"change":"input";t.addEventListener(c,()=>{let u;s==="checkbox"?u=t.checked:s==="number"||s==="range"?u=Number(t.value):u=t.value,F(`${e} = __val`,n,{__val:u})}),n.$watch(i),i()}});v("if",{priority:10,init(t,r,e){let n=w(t),o=t.getAttribute("then"),s=t.getAttribute("else"),i=t.getAttribute("animate-enter")||t.getAttribute("animate"),c=t.getAttribute("animate-leave"),u=t.getAttribute("transition"),a=parseInt(t.getAttribute("animate-duration"))||0,l=[...t.childNodes].map(h=>h.cloneNode(!0)),f;function d(){let h=!!_(e,n);h!==f&&(f=h,c||u?pt(t,c,u,()=>m(h),a):m(h))}function m(h){if(h)if(o){let g=N(o);g&&(t.innerHTML="",t.appendChild(g))}else{t.innerHTML="";for(let g of l)t.appendChild(g.cloneNode(!0))}else if(s){let g=N(s);g&&(t.innerHTML="",t.appendChild(g))}else t.innerHTML="";z(t),L(t),(i||u)&&st(t,i,u,a)}n.$watch(d),d()}});v("else-if",{priority:10,init(t,r,e){let n=w(t),o=t.getAttribute("then");function s(){let i=t.previousElementSibling;for(;i;){let u=i.getAttribute("if")||i.getAttribute("else-if");if(u){if(_(u,n)){t.innerHTML="",t.style.display="none";return}}else break;i=i.previousElementSibling}let c=!!_(e,n);if(t.style.display="",c){if(o){let u=N(o);u&&(t.innerHTML="",t.appendChild(u))}z(t),L(t)}else t.innerHTML=""}n.$watch(s),s()}});v("else",{priority:10,init(t){if(t.hasAttribute("if"))return;let r=w(t),e=t.getAttribute("then"),n=[...t.childNodes].map(s=>s.cloneNode(!0));function o(){let s=t.previousElementSibling;for(;s;){let i=s.getAttribute("if")||s.getAttribute("else-if");if(i){if(_(i,r)){t.innerHTML="",t.style.display="none";return}}else break;s=s.previousElementSibling}if(t.style.display="",e){let i=N(e);i&&(t.innerHTML="",t.appendChild(i))}else{t.innerHTML="";for(let i of n)t.appendChild(i.cloneNode(!0))}z(t),L(t)}r.$watch(o),o()}});v("show",{priority:20,init(t,r,e){let n=w(t),o=t.getAttribute("animate-enter")||t.getAttribute("animate"),s=t.getAttribute("animate-leave"),i=t.getAttribute("transition"),c=parseInt(t.getAttribute("animate-duration"))||0,u;function a(){let l=!!_(e,n);l!==u&&(u=l,l?(t.style.display="",(o||i)&&st(t,o,i,c)):s||i?pt(t,s,i,()=>{t.style.display="none"},c):t.style.display="none")}Z(e,n,a),a()}});v("hide",{priority:20,init(t,r,e){let n=w(t),o=t.getAttribute("animate-enter")||t.getAttribute("animate"),s=t.getAttribute("animate-leave"),i=t.getAttribute("transition"),c=parseInt(t.getAttribute("animate-duration"))||0,u;function a(){let l=!_(e,n);l!==u&&(u=l,l?(t.style.display="",(o||i)&&st(t,o,i,c)):s||i?pt(t,s,i,()=>{t.style.display="none"},c):t.style.display="none")}Z(e,n,a),a()}});v("switch",{priority:10,init(t,r,e){let n=w(t);function o(){let s=_(e,n),i=!1;for(let c of[...t.children]){let u=c.getAttribute("case"),a=c.hasAttribute("default"),l=c.getAttribute("then");if(u){let f=u.split(",").map(d=>_(d.trim(),n));if(!i&&f.includes(s)){if(i=!0,c.style.display="",l){let d=N(l);d&&(c.innerHTML="",c.appendChild(d)),c.__declared=!1,L(c)}}else c.style.display="none"}else if(a&&(c.style.display=i?"none":"",!i&&l)){let f=N(l);f&&(c.innerHTML="",c.appendChild(f)),c.__declared=!1,L(c)}}}n.$watch(o),o()}});v("each",{priority:10,init(t,r,e){let n=w(t),o=e.match(/^(\w+)\s+in\s+(\S+)$/);if(!o)return;let[,s,i]=o,c=t.getAttribute("template"),u=t.getAttribute("else"),a=t.getAttribute("key"),l=t.getAttribute("animate-enter")||t.getAttribute("animate"),f=t.getAttribute("animate-leave"),d=parseInt(t.getAttribute("animate-stagger"))||0,m=parseInt(t.getAttribute("animate-duration"))||0;function h(){let A=tt(i,n);if(!Array.isArray(A))return;if(A.length===0&&u){let y=N(u);y&&(t.innerHTML="",t.appendChild(y),L(t));return}let C=c?document.getElementById(c):null;if(C)if(f&&t.children.length>0){let y=[...t.children],D=y.length;y.forEach(T=>{let I=T.firstElementChild||T;I.classList.add(f);let O=()=>{I.classList.remove(f),D--,D<=0&&g(C,A)};I.addEventListener("animationend",O,{once:!0}),setTimeout(O,m||2e3)})}else g(C,A)}function g(A,C){let y=C.length;t.innerHTML="",C.forEach((D,T)=>{let I={[s]:D,$index:T,$count:y,$first:T===0,$last:T===y-1,$even:T%2===0,$odd:T%2!==0},O=E(I,n),x=A.content.cloneNode(!0),H=document.createElement("div");if(H.style.display="contents",H.__ctx=O,H.appendChild(x),t.appendChild(H),L(H),l&&d&&(H.style.animationDelay=T*d+"ms"),l){let B=H.firstElementChild;B&&B.classList.add(l)}})}n.$watch(h),h()}});v("foreach",{priority:10,init(t,r,e){let n=w(t),o=t.getAttribute("from"),s=t.getAttribute("index")||"$index",i=t.getAttribute("else"),c=t.getAttribute("filter"),u=t.getAttribute("sort"),a=parseInt(t.getAttribute("limit"))||1/0,l=parseInt(t.getAttribute("offset"))||0,f=t.getAttribute("template"),d=t.getAttribute("animate-enter")||t.getAttribute("animate"),m=t.getAttribute("animate-leave"),h=parseInt(t.getAttribute("animate-stagger"))||0,g=parseInt(t.getAttribute("animate-duration"))||0;if(!o||!e)return;let A=f?null:t.cloneNode(!0);function C(){let y=tt(o,n);if(!Array.isArray(y))return;if(c&&(y=y.filter((O,x)=>{let H=E({[e]:O,[s]:x},n);return!!_(c,H)})),u){let O=u.startsWith("-"),x=O?u.slice(1):u;y=[...y].sort((H,B)=>{let P=tt(x,H)??H?.[x],q=tt(x,B)??B?.[x],S=P<q?-1:P>q?1:0;return O?-S:S})}if(y=y.slice(l,l+a),y.length===0&&i){let O=N(i);O&&(t.innerHTML="",t.appendChild(O),L(t));return}let D=f?document.getElementById(f):null,T=y.length;function I(){t.innerHTML="",y.forEach((O,x)=>{let H={[e]:O,[s]:x,$index:x,$count:T,$first:x===0,$last:x===T-1,$even:x%2===0,$odd:x%2!==0},B=E(H,n),P;D?P=D.content.cloneNode(!0):P=A.cloneNode(!0);let q=document.createElement("div");if(q.style.display="contents",q.__ctx=B,q.appendChild(P),t.appendChild(q),L(q),d&&h&&(q.style.animationDelay=x*h+"ms"),d){let S=q.firstElementChild;S&&S.classList.add(d)}})}if(m&&t.children.length>0){let O=[...t.children],x=O.length;O.forEach(H=>{let B=H.firstElementChild||H;B.classList.add(m);let P=()=>{B.classList.remove(m),x--,x<=0&&I()};B.addEventListener("animationend",P,{once:!0}),setTimeout(P,g||2e3)})}else I()}n.$watch(C),C()}});v("class-*",{priority:20,init(t,r,e){let n=r.replace("class-",""),o=w(t);if(n==="map"){let i=function(){let c=_(e,o);if(c&&typeof c=="object")for(let[u,a]of Object.entries(c))t.classList.toggle(u,!!a)};o.$watch(i),i();return}if(n==="list"){let c=function(){let u=_(e,o);if(Array.isArray(u)){i.forEach(l=>{l&&t.classList.remove(l)});let a=u.filter(Boolean);a.forEach(l=>t.classList.add(l)),i=a}},i=[];o.$watch(c),c();return}function s(){t.classList.toggle(n,!!_(e,o))}o.$watch(s),s()}});v("style-*",{priority:20,init(t,r,e){let n=r.replace("style-",""),o=w(t);if(n==="map"){let c=function(){let u=_(e,o);if(u&&typeof u=="object")for(let[a,l]of Object.entries(u))t.style[a]=l??""};o.$watch(c),c();return}let s=n.replace(/-([a-z])/g,(c,u)=>u.toUpperCase());function i(){let c=_(e,o);t.style[s]=c!=null?String(c):""}o.$watch(i),i()}});v("on:*",{priority:20,init(t,r,e){let n=w(t),o=r.replace("on:","").split("."),s=o[0],i=new Set(o.slice(1));if(s==="mounted"){requestAnimationFrame(()=>F(e,n,{$el:t}));return}if(s==="init"){F(e,n,{$el:t});return}if(s==="updated"){new MutationObserver(()=>{F(e,n,{$el:t})}).observe(t,{childList:!0,subtree:!0,characterData:!0,attributes:!0});return}if(s==="error"){window.addEventListener("error",f=>{(t.contains(f.target)||f.target===t)&&F(e,n,{$el:t,$error:f.error||f.message})});return}if(s==="unmounted"){let f=new MutationObserver(d=>{for(let m of d)for(let h of m.removedNodes)if(h===t||h.contains?.(t)){F(e,n,{$el:t}),f.disconnect();return}});t.parentElement&&f.observe(t.parentElement,{childList:!0});return}let c=0,u=0;for(let f of i)/^\d+$/.test(f)&&(i.has("debounce")?c=parseInt(f):i.has("throttle")&&(u=parseInt(f)));let a=f=>{if(s==="keydown"||s==="keyup"||s==="keypress"){let d=["enter","escape","tab","space","delete","backspace","up","down","left","right","ctrl","alt","shift","meta"];for(let m of i)if(d.includes(m)&&(m==="enter"&&f.key!=="Enter"||m==="escape"&&f.key!=="Escape"||m==="tab"&&f.key!=="Tab"||m==="space"&&f.key!==" "||m==="delete"&&f.key!=="Delete"&&f.key!=="Backspace"||m==="up"&&f.key!=="ArrowUp"||m==="down"&&f.key!=="ArrowDown"||m==="left"&&f.key!=="ArrowLeft"||m==="right"&&f.key!=="ArrowRight"||m==="ctrl"&&!f.ctrlKey||m==="alt"&&!f.altKey||m==="shift"&&!f.shiftKey||m==="meta"&&!f.metaKey))return}i.has("prevent")&&f.preventDefault(),i.has("stop")&&f.stopPropagation(),!(i.has("self")&&f.target!==t)&&F(e,n,{$event:f,$el:t})};if(c>0){let f=a,d;a=m=>{clearTimeout(d),d=setTimeout(()=>f(m),c)}}if(u>0){let f=a,d=0;a=m=>{let h=Date.now();h-d>=u&&(d=h,f(m))}}let l={};i.has("once")&&(l.once=!0),t.addEventListener(s,a,l)}});v("trigger",{priority:20,init(t,r,e){let n=w(t),o=t.getAttribute("trigger-data");t.addEventListener("click",()=>{let s=o?_(o,n):null;t.dispatchEvent(new CustomEvent(e,{detail:s,bubbles:!0}))})}});v("ref",{priority:5,init(t,r,e){nt[e]=t}});v("use",{priority:10,init(t,r,e){let n=w(t),o=N(e);if(!o)return;let s={};for(let l of[...t.attributes])if(l.name.startsWith("var-")){let f=l.name.replace("var-","");s[f]=_(l.value,n)}let i=E(s,n),c={};for(let l of[...t.children]){let f=l.getAttribute("slot")||"default";c[f]||(c[f]=document.createDocumentFragment()),c[f].appendChild(l.cloneNode(!0))}let u=o.querySelectorAll("slot");for(let l of u){let f=l.getAttribute("name")||"default";c[f]&&l.replaceWith(c[f])}t.innerHTML="";let a=document.createElement("div");a.style.display="contents",a.__ctx=i,a.appendChild(o),t.appendChild(a),L(a)}});v("call",{priority:20,init(t,r,e){let n=w(t),o=t.getAttribute("method")||"get",s=t.getAttribute("as"),i=t.getAttribute("into"),c=t.getAttribute("success"),u=t.getAttribute("error"),a=t.getAttribute("then"),l=t.getAttribute("confirm"),f=t.getAttribute("body");t.addEventListener("click",async d=>{if(d.preventDefault(),l&&!window.confirm(l))return;let m=Y(e,n);try{let h=null;if(f){let A=Y(f,n);try{h=JSON.parse(A)}catch{h=A}}let g=await dt(m,o,h,{},t);if(s&&n.$set(s,g),s&&i&&(M[i]||(M[i]=E({})),M[i].$set(s,g),ut()),a&&F(a,n,{result:g}),c){let A=N(c);if(A){let y=document.getElementById(c.replace("#",""))?.getAttribute("var")||"result",D=E({[y]:g},n),T=t.closest("[route-view]")||t.parentElement,I=document.createElement("div");I.style.display="contents",I.__ctx=D,I.appendChild(A),T.appendChild(I),L(I)}}}catch(h){if(u){let g=N(u);if(g){let C=document.getElementById(u.replace("#",""))?.getAttribute("var")||"err",y=E({[C]:{message:h.message,status:h.status}},n),D=t.parentElement,T=document.createElement("div");T.style.display="contents",T.__ctx=y,T.appendChild(g),D.appendChild(T),L(T)}}}})}});function Ot(t,r,e){let n=r.split("|").map(o=>o.trim());for(let o of n){let[s,...i]=o.split(":"),c=Q[s];if(c){let u=c(t,...i,e);if(u!==!0&&u)return u}else switch(s){case"email":if(t&&!/^[^\s@]+@[^\s@]+\.[^\s@]+$/.test(t))return"Invalid email";break;case"url":try{new URL(t)}catch{return"Invalid URL"}break;case"min":if(Number(t)<Number(i[0]))return`Minimum value is ${i[0]}`;break;case"max":if(Number(t)>Number(i[0]))return`Maximum value is ${i[0]}`;break;case"between":{let u=Number(t);if(u<Number(i[0])||u>Number(i[1]))return`Must be between ${i[0]} and ${i[1]}`;break}case"match":if(t!==e[i[0]])return`Must match ${i[0]}`;break;case"phone":if(!/^[\d\s\-+()]{7,15}$/.test(t))return"Invalid phone number";break;case"cpf":if(!/^\d{3}\.?\d{3}\.?\d{3}-?\d{2}$/.test(t))return"Invalid CPF";break;case"cnpj":if(!/^\d{2}\.?\d{3}\.?\d{3}\/?\d{4}-?\d{2}$/.test(t))return"Invalid CNPJ";break;case"creditcard":if(!/^\d{13,19}$/.test(t.replace(/\s|-/g,"")))return"Invalid card number";break;case"custom":if(i[0]&&Q[i[0]]){let u=Q[i[0]](t,e);if(u!==!0&&u)return u}break}}return null}v("validate",{priority:30,init(t,r,e){let n=w(t);if(t.tagName==="FORM"){let s=function(){let i={},c={},u=!0;for(let a of t.querySelectorAll("input, textarea, select")){if(!a.name)continue;c[a.name]=a.value;let l=a.getAttribute("validate");if(l){let f=Ot(a.value,l,c);f&&(i[a.name]=f,u=!1)}a.checkValidity()||(i[a.name]=i[a.name]||a.validationMessage,u=!1)}o.valid=u,o.errors=i,o.values=c,n.$set("$form",{...o})},o={valid:!1,dirty:!1,touched:!1,submitting:!1,errors:{},values:{},reset:()=>{t.reset(),s()}};n.$set("$form",o),t.addEventListener("input",()=>{o.dirty=!0,s()}),t.addEventListener("focusout",()=>{o.touched=!0,s()}),t.addEventListener("submit",()=>{o.submitting=!0,n.$set("$form",{...o}),requestAnimationFrame(()=>{o.submitting=!1,n.$set("$form",{...o})})}),requestAnimationFrame(s);return}if(e&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.tagName==="SELECT")){let o=t.getAttribute("error");t.addEventListener("input",()=>{let s=Ot(t.value,e,{});if(s&&o){let i=t.nextElementSibling?.__validationError?t.nextElementSibling:null;i||(i=document.createElement("div"),i.__validationError=!0,i.style.display="contents",t.parentNode.insertBefore(i,t.nextSibling));let c=N(o);if(c){let u=E({err:{message:s}},n);i.innerHTML="",i.__ctx=u,i.appendChild(c),L(i)}}else{let i=t.nextElementSibling?.__validationError?t.nextElementSibling:null;i&&(i.innerHTML="")}})}}});v("error-boundary",{priority:1,init(t,r,e){let n=w(t);window.addEventListener("error",o=>{if(t.contains(o.target)||t===o.target){let s=N(e);if(s){let i=E({err:{message:o.message}},n);t.innerHTML="";let c=document.createElement("div");c.style.display="contents",c.__ctx=i,c.appendChild(s),t.appendChild(c),L(c)}}})}});v("t",{priority:20,init(t,r,e){let n=w(t);function o(){let s={};for(let i of[...t.attributes])if(i.name.startsWith("t-")&&i.name!=="t"){let c=i.name.replace("t-","");s[c]=_(i.value,n)??i.value}t.textContent=U.t(e,s)}n.$watch(o),o()}});function Wt(){if(typeof window>"u")return null;let t=p.router||{};if(t.mode==="hash")return window.location.hash.slice(1)||"/";let r=(t.base||"/").replace(/\/$/,"");return window.location.pathname.replace(r,"")||"/"}var Mt={get baseApiUrl(){return p.baseApiUrl},set baseApiUrl(t){p.baseApiUrl=t},config(t={}){let r={...p.headers},e={...p.cache},n={...p.templates},o={...p.router},s={...p.i18n};Object.assign(p,t),t.headers&&(p.headers={...r,...t.headers}),t.csrf&&(p.csrf=t.csrf),t.cache&&(p.cache={...e,...t.cache}),t.templates&&(p.templates={...n,...t.templates}),t.router&&(p.router={...o,...t.router}),t.i18n&&(p.i18n={...s,...t.i18n},U.locale=t.i18n.defaultLocale||U.locale)},async init(t){if(typeof document>"u")return;t=t||document.body,k("Initializing..."),mt(t);let r=Wt();await Ct(r),document.querySelector("[route-view]")&&wt(Dt()),L(t),j&&await j.init(),k("Initialized."),$t(),p.devtools&&typeof window<"u"&&(window.__NOJS_DEVTOOLS__={stores:M,config:p,refs:nt,router:j,filters:Object.keys(b),validators:Object.keys(Q),version:Mt.version},k("DevTools enabled \u2014 access via window.__NOJS_DEVTOOLS__"))},directive(t,r){v(t,r)},filter(t,r){b[t]=r},validator(t,r){Q[t]=r},i18n(t){if(t.locales&&(U.locales=t.locales),t.defaultLocale&&(U.locale=t.defaultLocale),t.fallbackLocale&&(p.i18n.fallbackLocale=t.fallbackLocale),t.detectBrowser){let r=typeof navigator<"u"?navigator.language:"en";U.locales[r]&&(U.locale=r)}},on(t,r){return G[t]||(G[t]=[]),G[t].push(r),()=>{G[t]=G[t].filter(e=>e!==r)}},interceptor(t,r){rt[t]&&rt[t].push(r)},get store(){return M},get router(){return j},createContext:E,evaluate:_,findContext:w,processTree:L,resolve:tt,version:"1.0.0"},ht=Mt;window.NoJS=ht;document.readyState==="loading"?document.addEventListener("DOMContentLoaded",()=>ht.init()):ht.init();})();
|
|
25
|
+
//# sourceMappingURL=no.js.map
|