@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/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 exs.dev
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
package/README.md
ADDED
|
@@ -0,0 +1,159 @@
|
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://img.shields.io/npm/v/no-js?color=blue" alt="npm version" />
|
|
3
|
+
<img src="https://img.shields.io/bundlephobia/minzip/no-js?label=gzip" alt="gzip size" />
|
|
4
|
+
<img src="https://img.shields.io/npm/l/no-js" alt="license" />
|
|
5
|
+
<img src="https://img.shields.io/npm/dm/no-js" alt="downloads" />
|
|
6
|
+
</p>
|
|
7
|
+
|
|
8
|
+
# No.JS
|
|
9
|
+
|
|
10
|
+
**The HTML-First Reactive Framework**
|
|
11
|
+
|
|
12
|
+
Build dynamic, reactive web applications using nothing but HTML attributes.
|
|
13
|
+
No build step. No virtual DOM. No transpiler. No JSX. Just HTML.
|
|
14
|
+
|
|
15
|
+
```html
|
|
16
|
+
<div get="/users/1" as="user">
|
|
17
|
+
<h1 bind="user.name">Loading...</h1>
|
|
18
|
+
<p bind="user.email"></p>
|
|
19
|
+
</div>
|
|
20
|
+
```
|
|
21
|
+
|
|
22
|
+
**Zero JavaScript written. Fully reactive. Real API data.**
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Features
|
|
27
|
+
|
|
28
|
+
- **Declarative HTTP** — `get`, `post`, `put`, `patch`, `delete` as HTML attributes
|
|
29
|
+
- **Reactive Binding** — `bind`, `bind-*`, `model` for one/two-way data binding
|
|
30
|
+
- **Conditionals & Loops** — `if`, `else-if`, `show`, `hide`, `each`, `foreach`, `switch`
|
|
31
|
+
- **State Management** — `state` (local), `store` (global), `computed`, `watch`
|
|
32
|
+
- **SPA Routing** — `route`, `route-view`, guards, params, nested routes
|
|
33
|
+
- **Forms & Validation** — Built-in validators + `$form` context
|
|
34
|
+
- **Animations** — `animate`, `transition` with stagger support
|
|
35
|
+
- **i18n** — `t` directive with pluralization
|
|
36
|
+
- **Filters** — `uppercase`, `currency`, `date`, `truncate`, 30+ built-in pipes
|
|
37
|
+
- **Custom Directives** — Extend with `NoJS.directive()`
|
|
38
|
+
- **~11 KB gzipped** — Zero dependencies
|
|
39
|
+
|
|
40
|
+
---
|
|
41
|
+
|
|
42
|
+
## Quick Start
|
|
43
|
+
|
|
44
|
+
### CDN
|
|
45
|
+
|
|
46
|
+
```html
|
|
47
|
+
<script src="https://unpkg.com/no-js@latest/dist/iife/no.js"></script>
|
|
48
|
+
```
|
|
49
|
+
|
|
50
|
+
### NPM
|
|
51
|
+
|
|
52
|
+
```bash
|
|
53
|
+
npm install no-js
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
```js
|
|
57
|
+
// ESM
|
|
58
|
+
import NoJS from 'no-js';
|
|
59
|
+
await NoJS.init();
|
|
60
|
+
|
|
61
|
+
// CommonJS
|
|
62
|
+
const NoJS = require('no-js');
|
|
63
|
+
await NoJS.init();
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
---
|
|
67
|
+
|
|
68
|
+
## Example
|
|
69
|
+
|
|
70
|
+
```html
|
|
71
|
+
<!DOCTYPE html>
|
|
72
|
+
<html>
|
|
73
|
+
<head>
|
|
74
|
+
<script src="https://unpkg.com/no-js@latest/dist/iife/no.js"></script>
|
|
75
|
+
</head>
|
|
76
|
+
<body base="https://jsonplaceholder.typicode.com">
|
|
77
|
+
|
|
78
|
+
<!-- Fetch & display data -->
|
|
79
|
+
<div get="/users" as="users" loading="#skeleton">
|
|
80
|
+
<div each="user in users">
|
|
81
|
+
<h2 bind="user.name"></h2>
|
|
82
|
+
<p bind="user.email"></p>
|
|
83
|
+
</div>
|
|
84
|
+
</div>
|
|
85
|
+
|
|
86
|
+
<!-- Local state + events -->
|
|
87
|
+
<div state="{ count: 0 }">
|
|
88
|
+
<button on:click="count++">Clicked <span bind="count"></span> times</button>
|
|
89
|
+
</div>
|
|
90
|
+
|
|
91
|
+
<!-- Form with validation -->
|
|
92
|
+
<form post="/posts" validate success="#ok">
|
|
93
|
+
<input name="title" required minlength="3" />
|
|
94
|
+
<button type="submit" bind-disabled="!$form.valid">Submit</button>
|
|
95
|
+
</form>
|
|
96
|
+
|
|
97
|
+
<template id="skeleton"><p>Loading...</p></template>
|
|
98
|
+
<template id="ok" var="res"><p>Created: <span bind="res.title"></span></p></template>
|
|
99
|
+
|
|
100
|
+
</body>
|
|
101
|
+
</html>
|
|
102
|
+
```
|
|
103
|
+
|
|
104
|
+
No `app.mount()`. No `createApp()`. No `NgModule`. It just works.
|
|
105
|
+
|
|
106
|
+
---
|
|
107
|
+
|
|
108
|
+
## Documentation
|
|
109
|
+
|
|
110
|
+
Full documentation is available in the [docs/](docs/) folder:
|
|
111
|
+
|
|
112
|
+
| Guide | Description |
|
|
113
|
+
|-------|-------------|
|
|
114
|
+
| [Getting Started](docs/md/getting-started.md) | Installation, core concepts, how it works |
|
|
115
|
+
| [Data Fetching](docs/md/data-fetching.md) | `get`, `post`, `put`, `patch`, `delete`, caching, polling |
|
|
116
|
+
| [Data Binding](docs/md/data-binding.md) | `bind`, `bind-html`, `bind-*`, `model` |
|
|
117
|
+
| [Conditionals](docs/md/conditionals.md) | `if`, `else-if`, `show`, `hide`, `switch`/`case` |
|
|
118
|
+
| [Loops](docs/md/loops.md) | `each`, `foreach`, loop variables, nested loops |
|
|
119
|
+
| [Templates](docs/md/templates.md) | Reusable fragments, slots, remote templates |
|
|
120
|
+
| [State Management](docs/md/state-management.md) | `state`, `store`, `into`, `computed`, `watch` |
|
|
121
|
+
| [Events](docs/md/events.md) | `on:*`, modifiers, lifecycle hooks |
|
|
122
|
+
| [Dynamic Styling](docs/md/styling.md) | `class-*`, `style-*` |
|
|
123
|
+
| [Forms & Validation](docs/md/forms-validation.md) | `validate`, `$form`, custom validators |
|
|
124
|
+
| [Routing](docs/md/routing.md) | SPA navigation, guards, nested routes |
|
|
125
|
+
| [Animations](docs/md/animations.md) | `animate`, `transition`, stagger |
|
|
126
|
+
| [i18n](docs/md/i18n.md) | Translations, pluralization, formatting |
|
|
127
|
+
| [Filters](docs/md/filters.md) | Built-in filters, chaining, custom filters |
|
|
128
|
+
| [Actions & Refs](docs/md/actions-refs.md) | `call`, `trigger`, `ref`, `$refs` |
|
|
129
|
+
| [Custom Directives](docs/md/custom-directives.md) | Extend No.JS |
|
|
130
|
+
| [Error Handling](docs/md/error-handling.md) | Error boundaries, global handler |
|
|
131
|
+
| [Configuration](docs/md/configuration.md) | Global settings, interceptors, template caching, security |
|
|
132
|
+
| [Cheatsheet](docs/md/cheatsheet.md) | Every directive at a glance |
|
|
133
|
+
| [Full SPA Example](docs/md/examples.md) | Complete app with routing, auth, i18n |
|
|
134
|
+
|
|
135
|
+
---
|
|
136
|
+
|
|
137
|
+
## How It Works
|
|
138
|
+
|
|
139
|
+
1. **Parse** — On `DOMContentLoaded`, No.JS walks the DOM for known attributes
|
|
140
|
+
2. **Resolve** — Each attribute maps to a directive, executed by priority
|
|
141
|
+
3. **React** — Data lives in Proxy-backed reactive contexts; changes auto-update the DOM
|
|
142
|
+
4. **Scope** — Contexts inherit from parents, like lexical scoping
|
|
143
|
+
|
|
144
|
+
---
|
|
145
|
+
|
|
146
|
+
## Contributing
|
|
147
|
+
|
|
148
|
+
Contributions are welcome! Please open an issue or submit a pull request.
|
|
149
|
+
|
|
150
|
+
## License
|
|
151
|
+
|
|
152
|
+
[MIT](LICENSE)
|
|
153
|
+
|
|
154
|
+
---
|
|
155
|
+
|
|
156
|
+
<p align="center">
|
|
157
|
+
<strong>No.JS</strong> — Because the best JavaScript is the JavaScript you don't write.<br>
|
|
158
|
+
<code>~11 KB gzipped</code> · <code>Zero dependencies</code> · <code>MIT License</code>
|
|
159
|
+
</p>
|
package/dist/cjs/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 ht=Object.defineProperty;var Rt=Object.getOwnPropertyDescriptor;var Bt=Object.getOwnPropertyNames;var Pt=Object.prototype.hasOwnProperty;var jt=(t,e)=>{for(var r in e)ht(t,r,{get:e[r],enumerable:!0})},Ut=(t,e,r,n)=>{if(e&&typeof e=="object"||typeof e=="function")for(let o of Bt(e))!Pt.call(t,o)&&o!==r&&ht(t,o,{get:()=>e[o],enumerable:!(n=Rt(e,o))||n.enumerable});return t};var Ft=t=>Ut(ht({},"__esModule",{value:!0}),t);var Qt={};jt(Qt,{default:()=>Gt});module.exports=Ft(Qt);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,e,r){e.$watch(r),typeof t=="string"&&t.includes("$store")&&bt.add(r)}function ft(t,e){(G[t]||[]).forEach(r=>r(e))}var U={locale:"en",locales:{},t(t,e={}){let r=U.locales[U.locale]||U.locales[p.i18n.fallbackLocale]||{},n=t.split(".").reduce((o,s)=>o?.[s],r);if(n==null)return t;if(typeof n=="string"&&n.includes("|")&&e.count!=null){let o=n.split("|").map(s=>s.trim());n=Number(e.count)===1?o[0]:o[1]||o[0]}return typeof n=="string"&&(n=n.replace(/\{(\w+)\}/g,(o,s)=>e[s]!=null?e[s]:"")),n}};var qt=0,Wt=new Set;function E(t={},e=null){let r=new Set,n={};Object.assign(n,t);let o=!1;function s(){if(!o){o=!0;try{qt>0?r.forEach(u=>Wt.add(u)):r.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 r;if(a==="$watch")return l=>(r.add(l),()=>r.delete(l));if(a==="$notify")return s;if(a==="$set")return(l,f)=>{c[l]=f};if(a==="$parent")return e;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(e&&e.__isProxy)return e[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:e&&e.__isProxy?a in e:!1}},c=new Proxy(n,i);return c}function yt(t){let e=new Set,r={},n=t;for(;n&&n.__isProxy;){let o=n.__raw;for(let s of Object.keys(o))e.has(s)||(e.add(s),r[s]=o[s]);n=n.$parent}return{keys:[...e],vals:r}}var vt=new Map;function V(t,e,r){let n={};for(let a=0;a<e.length;a++)n[e[a]]=r[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(),e,r);return V(a?c[2].trim():c[3].trim(),e,r)}if(i.includes("||")){let a=i.split("||");for(let l of a){let f=V(l.trim(),e,r);if(f)return f}return V(a[a.length-1].trim(),e,r)}if(i.includes("&&")){let a=i.split("&&"),l;for(let f of a)if(l=V(f.trim(),e,r),!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(),e,r):s(i)}function Jt(t){let e=[],r="",n=0,o=!1,s="";for(let i=0;i<t.length;i++){let c=t[i];if(o){r+=c,c===s&&t[i-1]!=="\\"&&(o=!1);continue}if(c==="'"||c==='"'||c==="`"){o=!0,s=c,r+=c;continue}if(c==="("||c==="["||c==="{"){n++,r+=c;continue}if(c===")"||c==="]"||c==="}"){n--,r+=c;continue}if(c==="|"&&n===0&&t[i+1]!=="|"&&t[i-1]!=="|"){e.push(r.trim()),r="";continue}r+=c}return e.push(r.trim()),e}function zt(t,e){let r=e.indexOf(":"),n,o;r===-1?(n=e.trim(),o=null):(n=e.substring(0,r).trim(),o=e.substring(r+1).trim());let s=b[n];if(!s)return X(`Unknown filter: ${n}`),t;let i=o?Kt(o):[];return s(t,...i)}function Kt(t){let e=[],r="",n=!1,o="";for(let s of t){if(n){if(s===o){n=!1;continue}r+=s;continue}if(s==="'"||s==='"'){n=!0,o=s;continue}if(s===","){e.push(r.trim()),r="";continue}r+=s}return r.trim()&&e.push(r.trim()),e.map(s=>{let i=Number(s);return isNaN(i)?s:i})}function _(t,e){if(!(t==null||t===""))try{let r=Jt(t),n=r[0],{keys:o,vals:s}=yt(e),i=["$store","$route","$router","$i18n","$refs","$form"];for(let l of i)o.includes(l)||(o.push(l),s[l]=e[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<r.length;l++)a=zt(a,r[l]);return a}catch{return}}function F(t,e,r={}){try{let{keys:n,vals:o}=yt(e),s={$store:M,$route:j?.current,$router:j,$i18n:U,$refs:e.$refs};Object.assign(s,r);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=e;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}`)(e,...c)}catch(n){X("Expression error:",t,n.message)}}function tt(t,e){return t.split(".").reduce((r,n)=>r?.[n],e)}function Y(t,e){return t.replace(/\{([^}]+)\}/g,(r,n)=>{let o=_(n.trim(),e);return o??""})}function _t(t,e){if(t.startsWith("http://")||t.startsWith("https://")||t.startsWith("//"))return t;let r=e;for(;r;){let n=r.getAttribute?.("base");if(n)return n.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,"");r=r.parentElement}return p.baseApiUrl?p.baseApiUrl.replace(/\/+$/,"")+"/"+t.replace(/^\/+/,""):t}async function dt(t,e="GET",r=null,n={},o=null,s=null){let i=_t(t,o),c={method:e.toUpperCase(),headers:{...p.headers||{},...n},credentials:p.credentials};if(r&&e!=="GET")if(typeof r=="string")try{JSON.parse(r),c.headers["Content-Type"]="application/json",c.body=r}catch{c.body=r}else r instanceof FormData?c.body=r:(c.headers["Content-Type"]="application/json",c.body=JSON.stringify(r));p.csrf&&e!=="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,e){if(e==="none")return null;if(e==="memory"){let n=gt.get(t);return n&&Date.now()-n.time<(p.cache.ttl||3e5)?n.data:null}let r=e==="local"?localStorage:e==="session"?sessionStorage:null;if(!r)return null;try{let n=r.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;r.removeItem("nojs_cache_"+t)}catch{}return null}function xt(t,e,r){if(r==="none")return;let n={data:e,time:Date.now()};if(r==="memory"){gt.set(t,n);return}let o=r==="local"?localStorage:r==="session"?sessionStorage:null;if(o)try{o.setItem("nojs_cache_"+t,JSON.stringify(n))}catch{}}var ot=new Map;function w(t){let e=t;for(;e;){if(e.__ctx)return e.__ctx;e=e.parentElement}return E()}function z(t){let e=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT);for(;e.nextNode();)e.currentNode.__declared=!1}function N(t){if(!t)return null;let e=t.startsWith("#")?t.slice(1):t,r=document.getElementById(e);return r&&r.content?r.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,e){if(t.startsWith("./")){let r=e.parentNode;for(;r;){if(r.__srcBase)return r.__srcBase+t.slice(2);r=r.parentNode}return t.slice(2)}return _t(t,e)}async function Tt(t){let e=t||document,r=e.querySelectorAll("template[src]");if(k("[LRT] called on",e===document?"document":e.nodeName||"fragment","\u2014 found",r.length,"template[src]",[...r].map(o=>o.getAttribute("src"))),!r.length)return;let n=[...r].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 e=t.getAttribute("src");if(t.__srcLoaded){k("[LTE] SKIP (already loaded):",e);return}k("[LTE] START fetch:",e,"| route:",t.hasAttribute("route"),"| inDOM:",document.contains(t),"| loading:",t.getAttribute("loading")),t.__srcLoaded=!0;let r=Lt(e,t),n=r.substring(0,r.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(r)?(c=ot.get(r),k("[LTE] CACHE HIT:",r)):(c=await(await fetch(r)).text(),i&&ot.set(r,c)),t.innerHTML=c,t.content&&(t.content.__srcBase=n),k("Loaded remote template:",e,"\u2192",r),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:",e,i.message)}}function mt(t){(t||document).querySelectorAll("template[include]").forEach(r=>{let n=r.getAttribute("include"),o=document.getElementById(n.startsWith("#")?n.slice(1):n);!o||!o.content||r.replaceWith(o.content.cloneNode(!0))})}async function Ct(t){let e=[...document.querySelectorAll("template[src]")],r=e.filter(o=>!o.__srcLoaded&&o.getAttribute("lazy")==="priority");await Promise.all(r.map(it));let n=e.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 e=[...document.querySelectorAll("template[src]")].filter(r=>r.__srcLoaded||r.getAttribute("lazy")==="ondemand"?!1:r.hasAttribute("route"));return Promise.all(e.map(it))}var lt=new Map;function v(t,e){lt.set(t,{priority:e.priority??50,init:e.init})}function Xt(t){if(lt.has(t))return{directive:lt.get(t),match:t};let e=["class-*","on:*","style-*","bind-*"];for(let r of e){let n=r.replace("*","");if(t.startsWith(n)&<.has(r))return{directive:lt.get(r),match:r}}return null}function St(t){if(t.__declared)return;t.__declared=!0;let e=[];for(let r of[...t.attributes]){let n=Xt(r.name);n&&e.push({name:r.name,value:r.value,priority:n.directive.priority,init:n.directive.init})}e.sort((r,n)=>r.priority-n.priority);for(let r of e)r.init(t,r.name,r.value)}function L(t){if(!t)return;t.nodeType===1&&!t.__declared&&St(t);let e=document.createTreeWalker(t,NodeFilter.SHOW_ELEMENT);for(;e.nextNode();){let r=e.currentNode;r.tagName==="TEMPLATE"||r.tagName==="SCRIPT"||r.__declared||St(r)}}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(),e=document.createElement("style");e.setAttribute("data-nojs-animations",""),e.textContent=t,document.head.appendChild(e)}function st(t,e,r,n){It();let o=n||1e3;if(e){let s=t.firstElementChild||t;s.classList.add(e),n&&(s.style.animationDuration=n+"ms"),s.addEventListener("animationend",()=>s.classList.remove(e),{once:!0})}if(r){let s=t.firstElementChild||t;s.classList.add(r+"-enter",r+"-enter-active"),requestAnimationFrame(()=>{s.classList.remove(r+"-enter"),s.classList.add(r+"-enter-to");let i=()=>{s.classList.remove(r+"-enter-active",r+"-enter-to")};s.addEventListener("transitionend",i,{once:!0}),setTimeout(i,o)})}}function pt(t,e,r,n,o){It();let s=o||2e3;if(!t.firstElementChild&&!t.childNodes.length){n();return}if(e){let i=t.firstElementChild||t;i.classList.add(e),o&&(i.style.animationDuration=o+"ms"),i.addEventListener("animationend",()=>{i.classList.remove(e),n()},{once:!0}),setTimeout(n,s);return}if(r){let i=t.firstElementChild||t;i.classList.add(r+"-leave",r+"-leave-active"),requestAnimationFrame(()=>{i.classList.remove(r+"-leave"),i.classList.add(r+"-leave-to");let c=()=>{i.classList.remove(r+"-leave-active",r+"-leave-to"),n()};i.addEventListener("transitionend",c,{once:!0}),setTimeout(c,s)});return}n()}function Dt(){let t=[],e={path:"",params:{},query:{},hash:""},r=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("?");e={path:h,params:{},query:o(g),hash:d?"#"+d:""};let A=s(h);if(A){e.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=e,!_(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),r.forEach(C=>C(e))}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:e},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:",e.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,e.path===m):h&&!d.hasAttribute("route-active-exact")&&d.classList.toggle(h,e.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 e},push(a){return i(a)},replace(a){return i(a,!0)},back(){window.history.back()},forward(){window.history.forward()},on(a){return r.add(a),()=>r.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,e=>e.toUpperCase());b.truncate=(t,e=100)=>{let r=String(t??"");return r.length>e?r.slice(0,e)+"...":r};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,e=0)=>{let r=Number(t);return isNaN(r)?t:r.toLocaleString(void 0,{minimumFractionDigits:e,maximumFractionDigits:e})};b.currency=(t,e="USD")=>{let r=Number(t);if(isNaN(r))return t;try{return r.toLocaleString(void 0,{style:"currency",currency:e})}catch{return`${e} ${r.toFixed(2)}`}};b.percent=(t,e=0)=>{let r=Number(t);return isNaN(r)?t:(r*100).toFixed(e)+"%"};b.filesize=t=>{let e=Number(t);if(isNaN(e))return t;let r=["B","KB","MB","GB","TB"],n=0,o=e;for(;o>=1024&&n<r.length-1;)o/=1024,n++;return o.toFixed(n>0?1:0)+" "+r[n]};b.ordinal=t=>{let e=Number(t);if(isNaN(e))return t;let r=["th","st","nd","rd"],n=e%100;return e+(r[(n-20)%10]||r[n]||r[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,e=", ")=>Array.isArray(t)?t.join(e):t;b.reverse=t=>Array.isArray(t)?[...t].reverse():t;b.unique=t=>Array.isArray(t)?[...new Set(t)]:t;b.pluck=(t,e)=>Array.isArray(t)?t.map(r=>r?.[e]):t;b.sortBy=(t,e)=>{if(!Array.isArray(t))return t;let r=e?.startsWith("-"),n=r?e.slice(1):e;return[...t].sort((o,s)=>{let i=o?.[n],c=s?.[n],u=i<c?-1:i>c?1:0;return r?-u:u})};b.where=(t,e,r)=>Array.isArray(t)?t.filter(n=>n?.[e]===r):t;b.date=(t,e="short")=>{let r=new Date(t);if(isNaN(r))return t;let n=e==="long"?{dateStyle:"long"}:e==="full"?{dateStyle:"full"}:{dateStyle:"short"};return r.toLocaleDateString(void 0,n)};b.datetime=t=>{let e=new Date(t);return isNaN(e)?t:e.toLocaleString()};b.relative=t=>{let e=new Date(t);if(isNaN(e))return t;let r=(Date.now()-e.getTime())/1e3;return r<60?"just now":r<3600?Math.floor(r/60)+"m ago":r<86400?Math.floor(r/3600)+"h ago":r<2592e3?Math.floor(r/86400)+"d ago":e.toLocaleDateString()};b.fromNow=t=>{let e=new Date(t);if(isNaN(e))return t;let r=(e.getTime()-Date.now())/1e3;return r<0?b.relative(t):r<60?"in a moment":r<3600?"in "+Math.floor(r/60)+"m":r<86400?"in "+Math.floor(r/3600)+"h":"in "+Math.floor(r/86400)+"d"};b.default=(t,e="")=>t==null||t===""?e:t;b.json=(t,e=2)=>JSON.stringify(t,null,e);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,e,r){let n=_(r,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,e,r){let n=t.getAttribute("value");if(r){if(!M[r]){let o=n?_(n,E())||{}:{};M[r]=E(o)}k("store",r)}}});v("computed",{priority:2,init(t,e,r){let n=t.getAttribute("expr");if(!r||!n)return;let o=w(t);function s(){let i=_(n,o);o.$set(r,i)}o.$watch(s),s()}});v("watch",{priority:2,init(t,e,r){let n=w(t),o=t.getAttribute("on:change"),s=_(r,n);n.$watch(()=>{let i=_(r,n);if(i!==s){let c=s;s=i,o&&F(o,n,{$old:c,$new:i})}})}});var Vt=["get","post","put","patch","delete"];for(let t of Vt)v(t,{priority:1,init(e,r,n){let o=e.getAttribute("as")||"data",s=e.getAttribute("loading"),i=e.getAttribute("error"),c=e.getAttribute("empty"),u=e.getAttribute("success"),a=e.getAttribute("then"),l=e.getAttribute("redirect"),f=e.getAttribute("confirm"),d=parseInt(e.getAttribute("refresh"))||0,m=e.getAttribute("cached"),h=e.hasAttribute("cached")?m||"memory":"none",g=e.getAttribute("body"),A=e.getAttribute("headers"),C=e.getAttribute("var"),y=e.getAttribute("into"),D=parseInt(e.getAttribute("retry"))||p.retries,T=parseInt(e.getAttribute("retry-delay"))||p.retryDelay||1e3,I=e.getAttribute("params"),O=e.parentElement?w(e.parentElement):E(),x=e.__ctx||E({},O);e.__ctx=x;let H=[...e.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(e),L(e);return}}if(s){let $=N(s);$&&(e.innerHTML="",e.appendChild($),L(e))}try{let $=null;if(g){let R=Y(g,x);try{$=JSON.parse(R)}catch{$=R}}if(e.tagName==="FORM"){let R=new FormData(e);$=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,e,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&&(e.innerHTML="",e.appendChild(R),L(e));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){e.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),e.appendChild(ct),L(ct)}}else{e.innerHTML="";for(let R of H)e.appendChild(R.cloneNode(!0));z(e),L(e)}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){e.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),e.appendChild(R),L(R)}}}}if(e.tagName==="FORM"&&t!=="get"?e.addEventListener("submit",S=>{S.preventDefault(),P()}):t==="get"?P():e.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(e.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,e,r){let n=w(t);function o(){let s=_(r,n);s!=null&&(t.textContent=String(s))}Z(r,n,o),o()}});v("bind-html",{priority:20,init(t,e,r){let n=w(t);function o(){let s=_(r,n);s!=null&&(t.innerHTML=Et(String(s)))}Z(r,n,o),o()}});v("bind-*",{priority:20,init(t,e,r){let n=e.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(`${r} = ${JSON.stringify(i)}`,o)});function s(){let i=_(r,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(r,o,s),s()}});v("model",{priority:20,init(t,e,r){let n=w(t),o=t.tagName,s=t.type;function i(){let u=_(r,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(`${r} = __val`,n,{__val:u})}),n.$watch(i),i()}});v("if",{priority:10,init(t,e,r){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=!!_(r,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,e,r){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=!!_(r,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 e=w(t),r=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,e)){t.innerHTML="",t.style.display="none";return}}else break;s=s.previousElementSibling}if(t.style.display="",r){let i=N(r);i&&(t.innerHTML="",t.appendChild(i))}else{t.innerHTML="";for(let i of n)t.appendChild(i.cloneNode(!0))}z(t),L(t)}e.$watch(o),o()}});v("show",{priority:20,init(t,e,r){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=!!_(r,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(r,n,a),a()}});v("hide",{priority:20,init(t,e,r){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=!_(r,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(r,n,a),a()}});v("switch",{priority:10,init(t,e,r){let n=w(t);function o(){let s=_(r,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,e,r){let n=w(t),o=r.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,e,r){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||!r)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({[r]: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={[r]: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,e,r){let n=e.replace("class-",""),o=w(t);if(n==="map"){let i=function(){let c=_(r,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=_(r,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,!!_(r,o))}o.$watch(s),s()}});v("style-*",{priority:20,init(t,e,r){let n=e.replace("style-",""),o=w(t);if(n==="map"){let c=function(){let u=_(r,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=_(r,o);t.style[s]=c!=null?String(c):""}o.$watch(i),i()}});v("on:*",{priority:20,init(t,e,r){let n=w(t),o=e.replace("on:","").split("."),s=o[0],i=new Set(o.slice(1));if(s==="mounted"){requestAnimationFrame(()=>F(r,n,{$el:t}));return}if(s==="init"){F(r,n,{$el:t});return}if(s==="updated"){new MutationObserver(()=>{F(r,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(r,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(r,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(r,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,e,r){let n=w(t),o=t.getAttribute("trigger-data");t.addEventListener("click",()=>{let s=o?_(o,n):null;t.dispatchEvent(new CustomEvent(r,{detail:s,bubbles:!0}))})}});v("ref",{priority:5,init(t,e,r){nt[r]=t}});v("use",{priority:10,init(t,e,r){let n=w(t),o=N(r);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,e,r){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(r,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,e,r){let n=e.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,r);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!==r[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,r);if(u!==!0&&u)return u}break}}return null}v("validate",{priority:30,init(t,e,r){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(r&&(t.tagName==="INPUT"||t.tagName==="TEXTAREA"||t.tagName==="SELECT")){let o=t.getAttribute("error");t.addEventListener("input",()=>{let s=Ot(t.value,r,{});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,e,r){let n=w(t);window.addEventListener("error",o=>{if(t.contains(o.target)||t===o.target){let s=N(r);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,e,r){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(r,s)}n.$watch(o),o()}});function Yt(){if(typeof window>"u")return null;let t=p.router||{};if(t.mode==="hash")return window.location.hash.slice(1)||"/";let e=(t.base||"/").replace(/\/$/,"");return window.location.pathname.replace(e,"")||"/"}var Mt={get baseApiUrl(){return p.baseApiUrl},set baseApiUrl(t){p.baseApiUrl=t},config(t={}){let e={...p.headers},r={...p.cache},n={...p.templates},o={...p.router},s={...p.i18n};Object.assign(p,t),t.headers&&(p.headers={...e,...t.headers}),t.csrf&&(p.csrf=t.csrf),t.cache&&(p.cache={...r,...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 e=Yt();await Ct(e),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,e){v(t,e)},filter(t,e){b[t]=e},validator(t,e){Q[t]=e},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 e=typeof navigator<"u"?navigator.language:"en";U.locales[e]&&(U.locale=e)}},on(t,e){return G[t]||(G[t]=[]),G[t].push(e),()=>{G[t]=G[t].filter(r=>r!==e)}},interceptor(t,e){rt[t]&&rt[t].push(e)},get store(){return M},get router(){return j},createContext:E,evaluate:_,findContext:w,processTree:L,resolve:tt,version:"1.0.0"},Gt=Mt;
|
|
25
|
+
//# sourceMappingURL=no.js.map
|