@joker.front/core 1.3.83 → 1.3.84
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/README.md +46 -38
- package/dist/bundle.es.js +1 -1
- package/dist/bundle.es.js.map +1 -0
- package/dist/bundle.js +1 -1
- package/dist/bundle.js.map +1 -0
- package/package.json +24 -18
- package/types/component.d.ts +1 -0
- package/types/parser/vnode.d.ts +1 -1
package/README.md
CHANGED
|
@@ -1,48 +1,58 @@
|
|
|
1
|
-
|
|
1
|
+
## Joker
|
|
2
2
|
|
|
3
|
-
Joker is a framework platform
|
|
3
|
+
Joker is a framework platform engineered to support all development scenarios. Within its ecosystem, Joker.front stands as a front-end development framework. It delivers standardized front-end development protocols and employs an object-oriented, component-based programming model to facilitate efficient user interface development. Whether handling simple or complex interfaces, Joker.front operates with seamless proficiency.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
<p align="center"><a href="https://jokers.pub" target="_blank" rel="noopener noreferrer"><img width="100" src="https://static.jokers.pub/joker.png" alt="Vue logo"></a></p>
|
|
6
6
|
|
|
7
|
-
|
|
7
|
+
<p align="center">
|
|
8
|
+
<img alt="NPM Version" src="https://img.shields.io/npm/v/%40joker.front%2Fcore">
|
|
9
|
+
<img alt="NPM Downloads" src="https://img.shields.io/npm/d18m/%40joker.front%2Fcore">
|
|
10
|
+
<img alt="NPM License" src="https://img.shields.io/npm/l/%40joker.front%2Fcore">
|
|
11
|
+
</p>
|
|
8
12
|
|
|
9
|
-
|
|
13
|
+
### What is Joker?
|
|
10
14
|
|
|
11
|
-
|
|
12
|
-
- **Rich Component Library**: Joker.front provides a complete set of front-end component libraries, including carefully designed and optimized functional and UI components such as routing and scaffolding, which can help developers quickly build beautiful and high-performance user interfaces.
|
|
13
|
-
- **Complete Development Tools**: To further improve development efficiency, Joker also provides a series of supporting development tools, including debugging tools, building tools, etc. These carefully designed tools are aimed at making the development process smoother and helping developers develop, build, test, and update code accurately and quickly.
|
|
14
|
-
- **Class API**: Joker uses TypeScript as the script development standard and adopts the standard Class API as the development specification, which is more in line with the requirements of object-oriented development.
|
|
15
|
-
- **Responsiveness**: Joker will automatically track the JavaScript state, and can update the DOM in a responsive manner immediately when the state changes, and there is no difference comparison of the virtual DOM.
|
|
15
|
+
Joker is a versatile framework platform built on TypeScript, designed to cater to diverse development needs—from basic interface tasks to complex user interface challenges. It ensures exceptional performance and stability across all use cases. As a key part of this ecosystem, Joker.front serves as a front-end development framework, offering standardized specifications and leveraging object-oriented, component-based programming to streamline efficient UI construction, handling both simple and complex interfaces with ease.
|
|
16
16
|
|
|
17
|
-
|
|
17
|
+
Key features include:
|
|
18
18
|
|
|
19
|
-
Joker
|
|
19
|
+
- **Robust Scalability**: Joker provides a component-based framework with scalability as a foundational design principle. It integrates seamlessly into existing projects or systems, supports the construction of scalable web applications, and allows for customization based on project requirements.
|
|
20
|
+
- **Comprehensive Component Library**: Joker.front offers a full suite of front-end components, including meticulously designed and optimized functional and UI elements such as routing and scaffolding. These components enable developers to quickly build visually appealing, high-performance user interfaces.
|
|
21
|
+
- **Complete Development Toolchain**: To enhance development efficiency, Joker includes a range of supporting tools—such as debugging and build tools—designed to streamline the development process, enabling accurate and rapid coding, building, testing, and updating.
|
|
22
|
+
- **Class API**: Joker adopts TypeScript as the standard for script development and employs a standard Class API, aligning with object-oriented development requirements.
|
|
23
|
+
- **Responsiveness**: Joker automatically tracks JavaScript states and updates the DOM reactively in real time when states change.
|
|
24
|
+
- **High Performance**: It achieves point-to-point data synchronization for data and DOM updates, eliminating the need for DOM difference comparison and delivering a high-performance experience with instant update rendering.
|
|
25
|
+
- **Official Visual Development IDE**: Joker comes with its own official visual development IDE, which enables rapid development, allowing developers to build interfaces and implement functions more efficiently through visual operations.
|
|
20
26
|
|
|
21
|
-
|
|
27
|
+
### Performance
|
|
22
28
|
|
|
23
|
-
|
|
29
|
+
Joker utilizes specialized rendering logic to map the association between responsive data and the DOM. This enables point-to-point node updates when data changes, bypassing full virtual node redraws and binary tree comparisons—significantly boosting rendering performance.
|
|
30
|
+
|
|
31
|
+

|
|
32
|
+
|
|
33
|
+

|
|
24
34
|
|
|
25
35
|
[Detailed Explanation](https://front.jokers.pub/base/render)
|
|
26
36
|
|
|
27
|
-
|
|
37
|
+
### How to Use
|
|
28
38
|
|
|
29
|
-
|
|
39
|
+
The Joker CLI facilitates project creation, application and library code generation, and continuous development tasks such as testing, packaging, and deployment.
|
|
30
40
|
|
|
31
41
|
[Help Documentation](https://front.jokers.pub)
|
|
32
42
|
|
|
33
|
-
To install the Joker CLI, open
|
|
43
|
+
To install the Joker CLI, open a terminal/console and execute:
|
|
34
44
|
|
|
35
45
|
```
|
|
36
46
|
pnpm i -g @joker.front/cli
|
|
37
47
|
```
|
|
38
48
|
|
|
39
|
-
1. Run the CLI command
|
|
49
|
+
1. Run the CLI command `joker create` with the project name `my-app`:
|
|
40
50
|
|
|
41
51
|
```
|
|
42
52
|
joker create my-app
|
|
43
53
|
```
|
|
44
54
|
|
|
45
|
-
2.
|
|
55
|
+
2. Navigate to the `my-app` directory and install dependencies:
|
|
46
56
|
|
|
47
57
|
```
|
|
48
58
|
cd my-app
|
|
@@ -50,47 +60,45 @@ cd my-app
|
|
|
50
60
|
pnpm i
|
|
51
61
|
```
|
|
52
62
|
|
|
53
|
-
The CLI will
|
|
63
|
+
The CLI will generate a new workspace and a simple welcome application, ready for immediate use.
|
|
54
64
|
|
|
55
|
-
|
|
65
|
+
### Running the Application
|
|
56
66
|
|
|
57
|
-
The Joker CLI includes
|
|
67
|
+
The Joker CLI includes server and build commands. The server command simplifies local application building and service provisioning.
|
|
58
68
|
|
|
59
|
-
|
|
69
|
+
Two default commands are provided: `dev` (development environment) and `build` (code building).
|
|
60
70
|
|
|
61
|
-
1. Navigate to the workspace folder
|
|
71
|
+
1. Navigate to the workspace folder (e.g., `my-app`):
|
|
62
72
|
|
|
63
73
|
```
|
|
64
74
|
cd my-app
|
|
65
75
|
```
|
|
66
76
|
|
|
67
|
-
2.
|
|
77
|
+
2. Execute the following command:
|
|
68
78
|
|
|
69
79
|
```
|
|
70
80
|
npm run dev
|
|
71
81
|
```
|
|
72
82
|
|
|
73
|
-
|
|
83
|
+
Upon successful execution, a sample page will be displayed.
|
|
74
84
|
|
|
75
|
-
|
|
85
|
+
### Visual Development Tools
|
|
76
86
|
|
|
77
|
-
A front-end framework with built-in visual tools: [
|
|
87
|
+
A front-end framework with built-in visual tools: [Visual Coding IDE](https://jokers.pub)
|
|
78
88
|
|
|
79
|
-

|
|
90
|
+

|
|
91
|
+

|
|
92
|
+

|
|
83
93
|
|
|
84
|
-
|
|
94
|
+
### Documentation
|
|
85
95
|
|
|
86
96
|
[Help Documentation](https://front.jokers.pub)
|
|
87
97
|
|
|
98
|
+
### Related Projects
|
|
99
|
+
|
|
88
100
|
[Official Website](https://front.jokers.pub)
|
|
89
101
|
|
|
90
102
|
[Official UI Library](https://ui.jokers.pub)
|
|
91
103
|
|
|
92
|
-
[
|
|
93
|
-
|
|
94
|
-
## Wechat
|
|
95
|
-
|
|
96
|
-

|
|
104
|
+
[Joker Visual Coding IDE](https://viscode.jokers.pub)
|
package/dist/bundle.es.js
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
import{EXPRESSHANDLERTAG as e,createFuntionBody as t,AST as n,RENDER_HANDLER as s,createComponent as i,createCommand as o}from"@joker.front/ast";export{AST,EXPRESSHANDLERTAG,RENDER_HANDLER,createCodeFunction,createCommand,createComment,createComponent,createElement,createFuntionBody,createText}from"@joker.front/ast";const r=new Map,a=new Map,h=new Map;let d={recordRender:(e,t)=>{a.set(e,t)},recordComponent:(e,t)=>{h.set(e,t)},record:(e,t)=>{void 0===r.get(e)&&r.set(e,new Set),r.get(e).add(t),t.$on("destroy",(()=>{r.get(e)?.delete(t)}))},reload:(e,t)=>{let n=h.get(e);if(!n)return;n.component=t;let s=r.get(e);if(!s)return;let i=Array.from(s);s.clear(),i.forEach((e=>{if(e.$root){if(!e.$rootVNode?.parent)return window.onbeforeunload=null,void location.reload();{let t=e.$rootVNode.parent;if(!(t instanceof z.Component&&t[z.PARSERKEY]&&t[z.PARSERKEY].canReload))return window.onbeforeunload=null,void location.reload();t[z.PARSERKEY].reload()}}}))},rerender:(e,t)=>{let n=a.get(e);n&&(n.render=t),r.get(e)?.forEach((e=>{e.$render(t)}))}};function c(e){return null!==e&&"object"==typeof e}function l(e,t){Object.getOwnPropertyNames(e).forEach((n=>{t(n,e[n])}))}function u(e){return"[object Object]"===Object.prototype.toString.call(e)}function f(e){if(null===e)return e;if("object"!=typeof e)return e;let t;t=Array.isArray(e)?[]:{};let n=Object.keys(e);for(let s of n){let n=e[s];t[s]="object"==typeof n?f(n):n}return t}function p(e,t,n){return Array.isArray(e)&&Array.isArray(t)?function(e,t,n){if(e.length!==t.length)return!1;for(let s=0;s<e.length;s++)if(n){if(e[s]!==t[s])return!1}else if(!1===m(e[s],t[s],n))return!1;return!0}(e,t,n):m(e,t,n)}function m(e,t,n){if(e===t)return!0;let s=c(e),i=c(t);if(s&&i){if(u(e)&&u(t)){let s=Object.keys(e);if(s.length!==Object.keys(t).length)return!1;if(n){for(let n of s)if(e[n]!==t[n])return!1;return!0}return JSON.stringify(e)===JSON.stringify(t)}return e===t}return!s&&!i&&String(e)===String(t)}function y(e,t){let n=e.indexOf(t);return n>-1&&e.splice(n,1),e}function g(e,t){let n=e.findIndex((e=>t(e)));return n>-1&&e.splice(n,1),e}function v(e){return!e||""===e.trim()}function E(e,t="-"){return(e=e||"").split(/(?=[A-Z])/).map((e=>e.toLowerCase())).join(t)}let b=(...e)=>{},w="warn";const N=["silent","error","warn","info"];function $(){let e=new Date;function t(e,t=2){return e.toString().padStart(t,"0")}return t(e.getHours())+":"+t(e.getMinutes())+":"+t(e.getSeconds())+":"+t(e.getMilliseconds(),3)}function R(e,t,n,s){N.indexOf(e)<=N.indexOf(w)&&(void 0===s?console[e](`${$()} [${t}]:`,n):console[e](`${$()} [${t}]:`,n,s))}let C={info:function(e,t,n){R("info",e,t,n)},warn:function(e,t,n){R("warn",e,t,n)},error:function(e,t,n){R("error",e,t,n)},setLoggerLeve:function(e){w=e}};const x={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"',"#39":"'"};function A(e){return e.replace(/&(lt|gt|nbsp|amp|quot|#39);/gi,((e,t)=>x[t]||""))}class O{static target;watchers=new Map;depend(e){O.target?.addDep(this,e)}addWatcher(e,t){let n=this.watchers.get(e)||[];n.push(t),this.watchers.set(e,n)}removeWatcher(e,t){const n=this.watchers.get(e);n&&y(n,t)}notify(e){const t=this.watchers.get(e);if(t){g(t,(e=>e.isDestroy));[...t].forEach((e=>{e.isDestroy||e.update()}))}}}const S=Symbol.for("__JOKER_OBJECT_PROXY_DEP_ID__"),P=Symbol.for("__JOKER_OBJECT_PROXY_DATA_KEY__"),T=Symbol.for("__JOKER_OBJECTPROXY_DEPLEVE_ID__");function D(e){try{return null!=e&&c(e)&&e!==window.parent&&e instanceof Window==!1&&e instanceof F==!1&&e instanceof Qe==!1&&e instanceof _e==!1&&(Array.isArray(e)||u(e)||e instanceof Set||e instanceof Map)&&!Object.isFrozen(e)&&!(e instanceof Element)&&!(G in e)&&!(I in e)&&!(qe in e)}catch{return!1}}function _(e){if(k(e))return e;if(e&&e.hasOwnProperty(P)){let t=Reflect.get(e,P);if(t)return t}let t=new O,n=!0,s=new Proxy(e,{get(e,n,s){if(e instanceof Set||e instanceof Map){if("add"===n){let s=Reflect.get(e,n);return n=>{D(n)&&(n=K(n));let i=s.call(e,n);return j(t,"size"),j(t,T),i}}if("set"===n){let s=Reflect.get(e,n);return(n,i)=>{D(i)&&(i=K(i));let o=s.call(e,n,i);return j(t,"size"),j(t,T),o}}if("delete"===n||"clear"===n){let s=Reflect.get(e,n);return i=>{let o=s.call(e,i);return("clear"===n||o)&&(j(t,"size"),j(t,T)),o}}let s=Reflect.get(e,n);if("function"==typeof s)return s.bind(e)}if(n===P)return;if(n===S)return t;if(n===T)return;let i=Reflect.get(e,n);return n===Symbol.toStringTag||!1===function(e,t){return t in e}(e,n)&&"length"!==n&&"size"!==n||(t.depend(n),D(i)&&k(i)?.depend(T)),i},set(e,s,i){if(n)return Reflect.set(e,s,i),!0;D(i)&&(i=K(i));let o=!1===function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,s),r=Reflect.get(e,s)!==i;return Reflect.set(e,s,i),(r||"length"===s&&Array.isArray(e))&&j(t,s),Array.isArray(e)?"length"===s&&j(t,T):o&&j(t,T),!0},deleteProperty:(e,n)=>(Reflect.deleteProperty(e,n),!1===Array.isArray(e)&&j(t,T),!0)});var i,o,r,a;i=e,o=P,r=s,a=!1,Object.defineProperty(i,o,{value:r,enumerable:a,writable:!0,configurable:!0});for(let t in e){let n=e[t];D(n)&&!k(n)&&(s[t]=_(e[t]))}return n=!1,s}function k(e){if(c(e))return Reflect.get(e,S)}function K(e,t=!1){if(!1===D(e))throw new Error("The provided data is not of the correct type. It must be an array or an object.");return _(t?f(e):e)}function W(e,t,n){let s=n;D(n)&&(s=K(n));let i=new O;Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:()=>(i.depend(t),k(s)?.depend(T),s),set:e=>{e!==s&&(D(e)&&(e=K(e)),s=e,j(i,t))}})}const I=Symbol.for("JOKER_SHALLOW_OBSERVER");class V{data;[I]=!0;dep=new O;constructor(e){this.data=e}isChanged=!1;get value(){return this.dep.depend(T),this.data}set value(e){!1===Object.is(e,this.data)&&(this.isChanged=!0,this.data=e,j(this.dep,T))}}let L=!1,M=new Map;function j(e,t){if(!1===L)e.notify(t);else{let n=M.get(e);void 0===n&&(n=[],M.set(e,n)),n.includes(t)||n.push(t)}}function Y(e){L=!0;try{e()}catch(e){return L=!1,M.clear(),void C.error("Data Hijacking","Encountered a blocking error while collecting changes for data hijacking composite responses. No action will be taken. Please investigate.",e)}L=!1,function(e){const t=[],n=[];e.forEach(((e,n)=>{e.forEach((e=>{t.push(...n.watchers.get(e)||[])}))})),t.forEach((e=>{n.includes(e)||(!e.isDestroy&&e.update(),n.push(e))}))}(M),M.clear()}function B(e){return void 0!==k(e)}const H="Data Observation",J=Symbol.for("JOKER_BREAK_WATCH_UPDATE");class F{ob;updateCallBack;forceCallBack;getter;value;isDestroy=!1;updating=!1;runRelations=new Map;relations=new Map;constructor(e,t,n,s){if(this.ob=e,this.updateCallBack=t,this.forceCallBack=s,void 0===e)throw new Error("Cannot observe changes on undefined");if(void 0===n)this.getter=e=>e;else if("function"==typeof n)this.getter=n;else{const e=function(e){if(/[^\w.$]/.test(e))return;const t=e.split(".");return function(e){let n=e;return t.forEach((e=>{n&&(n=n[e])})),n}}(n);if(void 0===e)throw new Error(`${n} failed to parse. Unable to interpret the expression. Please check the expOrFn parameter or use the function mode instead.`);this.getter=e}void 0===this.getter&&C.error(H,"Failed to create getter",arguments),this.value=this.getValue()}getValue(){if(void 0===this.getter)return;O.target=this;const e="function"==typeof this.ob?this.ob():this.ob;let t;try{t=this.getter.call(e,e)}catch(e){throw C.error(H,"Failed to retrieve value. Executed method: "+this.getter.toString()),e}return O.target=void 0,this.clearnDeps(),t}addDep(e,t){let n=this.runRelations.get(e);if(void 0===n||!n.includes(t)){n=n||[],n.push(t),this.runRelations.set(e,n);const s=this.relations.get(e);void 0!==s&&s.includes(t)||e.addWatcher(t,this)}}update(){if(this.updating)return;const e=this.getValue();if(e===J)return;const t=this.value;if(this.forceCallBack||e!==t||c(e)){this.value=e;const n=e!==t&&p(e,t,!0);if(n&&!this.forceCallBack)return;this.updating=!0;try{this.updateCallBack(e,t,n,this)}catch(e){throw e}finally{this.updating=!1}}}destroy(){this.relations.forEach(((e,t)=>{for(const n of e)t.removeWatcher(n,this)})),this.isDestroy=!0,this.relations.clear(),this.runRelations.clear(),this.ob=void 0,this.value=void 0,this.getter=void 0}clearnDeps(){this.relations.forEach(((e,t)=>{const n=this.runRelations.get(t);for(const s of e)n&&n.includes(s)||t.removeWatcher(s,this)})),this.relations.clear(),this.relations=this.runRelations,this.runRelations=new Map}}var q;!function(e){let t=new Map;e.bind=function(e){return{to:n=>{if(t.has(e))throw new Error(`TagId:${e.toString()} already has an implementation bound. Do not bind again.`);t.set(e,n)}}},e.get=function(e,...n){const s=t.get(e);if(s)return new s(...n)}}(q||(q={}));const G=Symbol.for("JOKER_VNODE_TAG");var z;!function(e){e.PARSERKEY=Symbol.for("JOKER_PARSER_KEY");class t{parent;[G]=!0;static;output;[e.PARSERKEY];childrens;ref;sleep=!1;constructor(e){this.parent=e}get prev(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)-1]}get next(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)+1]}closest(e,t){if(!0===e(this))return this;let n=this.parent;for(;n;){if(!0===e(n))return n;if(!0===t?.(n))break;n=n.parent}}find(e,t,n,s,i){let o=i??[];if(s??=this.childrens,s)for(let i of s){(!0!==e(i)||(o.push(i),n))&&(!0!==t?.(i)&&i.childrens&&this.find(e,t,n,i.childrens,o))}return o}contains(e,t){if(t??=this.childrens,t)for(let n of t){if(!0===e(n))return!0;if(n.childrens&&n.childrens.length&&this.contains(e,n.childrens))return!0}return!1}first(e,t){if(t??=this.childrens,t)for(let n of t){if(!0===e(n))return n;if(n.childrens&&n.childrens.length){let t=this.first(e,n.childrens);if(t)return t}}}}e.Node=t;e.Root=class extends t{childrens=[];component;constructor(){super()}};e.Text=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Html=class extends t{html;notShadow;static=!0;scopedId;constructor(e,t,n){super(t),this.html=e,this.notShadow=n}};e.Comment=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Element=class extends t{tagName;static=!0;attributes={};childrens=[];events=[];_assistEventCache;constructor(e,t){super(t),this.tagName=e}};e.Component=class extends t{name;component;events=[];propValues={};keepalive;get firstElement(){if(this.childrens){let t=n=>{for(let s of n){if(s instanceof e.Element)return s;if(s.childrens){let e=t(s.childrens);if(e)return e}}};return t(this.childrens)}}get rootElements(){if(this.childrens){let t=[],n=s=>{for(let i of s)i instanceof e.Element||i instanceof e.Html?t.push(i):i.childrens&&n(i.childrens)};return n(this.childrens),t}return[]}};e.Condition=class extends t{cmdName;result=!1;childrens=[];isShow=!1;constructor(e,t){super(t),this.cmdName=e}};e.List=class extends t{childrens=[]};e.ListItem=class extends t{ob;childrens=[];constructor(e,t){super(t),this.ob=e}};e.RenderSection=class extends t{id="unknown";params=[];section;childrens=[];ob;constructor(e,t){super(t),"string"==typeof e?this.id=e:this.section=e}}}(z||(z={}));const Q="DOM Rendering",U=["script","style","textarea","pre"];let X=0;const Z=["svg","defs","use","rect","circle","ellipse","line","polyline","polygon","path","text","g"];var ee;function te(e,t,n){return`${e}-${t}-${n}`}function ne(e,t,n,s){e._assistEventCache??=[],e._assistEventCache.push([t,n]),document.body.addEventListener(t,n,s)}function se(e,t,n){e._assistEventCache&&t&&n?(g(e._assistEventCache,(e=>e[0]===t&&e[1]===n)),document.body.removeEventListener(t,n)):(e._assistEventCache?.forEach((e=>{document.body.removeEventListener(e[0],e[1])})),e._assistEventCache&&(e._assistEventCache.length=0),e._assistEventCache=void 0)}!function(e){e.IRENDERIOCTAGID=Symbol.for("JOKER_IRENDERIOC_TAGID"),e.ROOT_CONTAINER="";e.DomRender=class{elements;constructor(){this.elements=document.createDocumentFragment()}mount(e){if(e instanceof Element)e.appendChild(this.elements);else if(e instanceof z.Component)if(e.parent)if(e.output){const t=e.output,n=he(e)||t.parentNode;n&&n.insertBefore(this.elements,t)}else C.error(Q,"Component mount found no DOM target node",e);else C.error(Q,"Mounting child component with no parent",e);else C.error(Q,"Mount only supports Element or VNode.Node",e)}appendNode(e,t){if(this.renderNode(e),e.output){const n=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];for(const s of n)this.appendNodeChildren(e,s,e.parent,t)}else C.error(Q,"No output found for node, cannot mount",e)}updateNode(e,t){if(e instanceof z.Element)for(const t in e.attributes){const n=e.attributes[t];this.setAttribute(e.output,t,n)}else e instanceof z.Text?e.parent&&e.parent instanceof z.Element&&U.includes(e.parent.tagName)?(this.removeNode(e),this.appendNode(e)):e.output.textContent=A(e.text||""):e instanceof z.Html?e.notShadow?(e.output.innerHTML=e.html,e.scopedId&&fe(e.output,e.scopedId)):e.output.root.innerHTML=e.html:C.error(Q,`Node does not support ${t} update`,e)}removeNode(e,t){const n=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];n?.forEach((e=>e?.remove())),t||(e instanceof z.Element&&se(e),e.output=void 0)}destroy(){this.elements=void 0}elementToEnter(e,t,n,s){e.output&&this.transitionFrame(e,t,"enter",n,s)}elementToLeave(e,t,n,s){e.output&&this.transitionFrame(e,t,"leave",n,s)}triggerEvent(e,t,n){const s=[];for(const i of e.events){const[o,r]=i;if(o===t){const t=r.modifiers?.includes("self"),a=r.modifiers?.includes("outside");if(t||a){C.warn(Q,"Event modifiers 'self' and 'outside' not supported in components",e);continue}const h=n.event;if((h instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(o)||h instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(o))&&!1===oe(h,r.modifiers))continue;if(r.callBack(n),r.modifiers?.includes("prevent")&&n.preventDefault(),r.modifiers?.includes("once")&&s.push(i),r.modifiers?.includes("stop"))return n.stopPropagation(),!1}}s.length&&s.forEach((t=>y(e.events,t)))}transitionFrame(e,t,n,s,i){re(e,te(t,n,"from")),s||="transition";const o=e.output.__TRANSITION_EVNETID__=X++;requestAnimationFrame((()=>{requestAnimationFrame((()=>{if(!e.output)return;re(e,te(t,n,"active")),ae(e,te(t,n,"from")),re(e,te(t,n,"to"));const r=function(e,t){const n=window.getComputedStyle(e),s=e=>(n[e]||"").split(", ");if("transition"===t){const e=s("transitionDelay"),t=s("transitionDuration"),n=de(e,t);if(n>0)return{timeout:n,count:t.length}}else if("animation"===t){const e=s("animationDelay"),t=s("animationDuration"),n=de(e,t);if(n>0)return{timeout:n,count:t.length}}}(e.output,s);if(!r)return void i?.();let a=0;const h=()=>{ae(e,te(t,n,"to")),ae(e,te(t,n,"active")),e.output&&(e.output.removeEventListener(`${s}end`,d),o===e.output.__TRANSITION_EVNETID__&&i?.())},d=t=>{t.target===e.output&&++a>=r.count&&h()};setTimeout((()=>{a<r.count&&h()}),r.timeout+1),e.output?.addEventListener(`${s}end`,d)}))}))}renderNode(e){if(!e.output)if(e instanceof z.Text)e.parent&&e.parent instanceof z.Element&&U.includes(e.parent.tagName)?e.output=this.parserHtml(e.text):e.output=document.createTextNode(A(e.text||""));else if(e instanceof z.Html)if(e.notShadow){const t=document.createElement("joker-html-container");t.JOKER_NODE=e,t.innerHTML=e.html,e.scopedId&&(t.setAttribute("data-scoped-"+e.scopedId,""),fe(t,e.scopedId)),e.output=t}else{const t=document.createElement("joker-html-shadow");t.JOKER_NODE=e,t.style.lineHeight="1",t.root.innerHTML=e.html,e.output=t}else if(e instanceof z.Element){let t;const n=e.tagName.toLowerCase();"svg"===n||Z.includes(n)||e.parent?.inSvg?(e.inSvg=!0,t=document.createElementNS("http://www.w3.org/2000/svg",e.tagName)):t=document.createElement(e.tagName);for(const n in e.attributes)this.setAttribute(t,n,e.attributes[n]);t.JOKER_NODE=e,e.output=t,e.events.some((e=>"click"===e[0]&&e[1].modifiers?.includes("outside")))?setTimeout((()=>{this.initElementEvents(t,e)})):this.initElementEvents(t,e)}else e instanceof z.Comment?e.output=document.createComment(e.text):e.output=document.createTextNode("")}initElementEvents(e,t){for(const[n,s]of t.events){const i=s.modifiers?.includes("self");let o=s.modifiers?.includes("outside");i&&o&&(C.warn(Q,"Event modifiers 'self' and 'outside' cannot coexist, using 'self'",t),o=!1);const r=a=>{if(!(t.sleep||i&&a.target!==e)){if(o){if(a.target===e||e.contains(a.target))return;if(!1===document.contains(a.target))return;if(t.contains((e=>(e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output]).includes(a.target))))return!0}(a instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(n)||a instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(n))&&!1===oe(a,s.modifiers)||(s.callBack({eventName:n,event:a,target:t,preventDefault:()=>a.preventDefault(),stopPropagation:()=>a.stopPropagation(),data:void 0}),s.modifiers?.includes("prevent")&&a.preventDefault(),s.modifiers?.includes("stop")&&a.stopPropagation(),s.modifiers?.includes("once")&&(o?se(t,n,r):e.removeEventListener(n,r)))}};let a;s.modifiers?.includes("passive")&&(a={passive:!0}),o?ne(t,n,r,a):e.addEventListener(n,r,a)}}parserHtml(e){const t=document.createElement("div");return t.innerHTML=e,t.childNodes}isCommandGroup(e){return e instanceof z.Component||e instanceof z.Condition||e instanceof z.List||e instanceof z.ListItem||e instanceof z.RenderSection}appendNodeChildren(e,t,n,s){let i=he(e);if(i)i.appendChild(t);else if(void 0===n)this.elements?.appendChild(t);else if(n)if(n instanceof z.Root){const e=n.parent;if(e&&e instanceof z.Component&&e.output){const n=e.output,s=n?.parentNode;if(s)return void s.insertBefore(t,n)}this.elements?.appendChild(t)}else if(n instanceof z.Element){const e=n.output;if(void 0===e)return;e.appendChild(t)}else if(this.isCommandGroup(n)){const i=n.output?.parentNode;if(void 0!==s&&n.childrens?.length&&i){const o=s-1;if(o<0){const n=le(e);return void(n&&i.contains(n.output)?n.output.after(t):i.insertBefore(t,i.firstChild))}{const e=n.childrens[o];if(e){const n=e.output;if(n)return void n.after(t)}}}i&&i.insertBefore(t,n.output)}else C.error(Q,"Node does not support nested children",{node:e,parent:n})}setAttribute(e,t,n){if(e)if("boolean"!=typeof n){if("class"===t){if(Array.isArray(n)){const e=[];for(const t of n)if(c(t))for(const n in t)t[n]&&e.push(n);else t&&e.push(t);n=e.join(" ")}else if(c(n)){for(const t in n){const s=t.trim();s&&(n[t]?e.classList.add(s):e.classList.remove(s))}return}}else if("style"===t&&c(n)){e.removeAttribute("style");for(const t in n){let s=!1;void 0!==n[t]&&!1!==n[t]||(s=!0);const i=String(n[t]);v(i)&&(s=!0),s||(e.style[t]=i)}return}n=(n??"").toString().trim(),"class"===t&&(n=n.split(/\s/).filter((e=>e.trim())).join(" ")),"value"===t&&"value"in e?e.value=n:"xlink:href"===t?e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n):e.setAttribute(t,n)}else n?e.setAttribute(t,""):e.removeAttribute(t)}}}(ee||(ee={}));const ie={enter:"enter",backspace:"delete",tab:"tab",arrowup:"up",arrowdown:"down",arrowleft:"left",arrowright:"right",escape:"esc"," ":"space"};function oe(e,t){if(e instanceof KeyboardEvent){if(void 0===e.key)return!1;for(const n in ie)if(t?.includes(ie[n])&&e.key.toLowerCase()!==n)return!1}else{if(t?.includes("left")&&0!==e.button)return!1;if(t?.includes("right")&&2!==e.button)return!1;if(t?.includes("middle")&&1!==e.button)return!1}return(!t?.includes("ctrl")||!1!==e.ctrlKey)&&((!t?.includes("alt")||!1!==e.altKey)&&(!t?.includes("shift")||!1!==e.shiftKey))}function re(e,t){e.output&&e.output.classList.add(t)}function ae(e,t){e.output&&e.output.classList.remove(t)}function he(e){if(e instanceof z.Element||e instanceof z.Component){let t=e instanceof z.Component?e.propValues["append-to"]:e.attributes["append-to"];if(t){if(t instanceof z.Element)return t.output;if("string"==typeof t){ee.ROOT_CONTAINER&&(t="body"===t?ee.ROOT_CONTAINER:`${ee.ROOT_CONTAINER} ${t}`);const e=document.querySelector(t);if(e)return e}C.warn(Q,"Unsupported appendTo type",{appendTo:t,node:e})}}}function de(e,t){for(;e.length<t.length;)e.concat(e);return Math.max(...t.map(((t,n)=>ce(t)+ce(e[n]))))}function ce(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function le(e,t){let n=e.prev;for(;n;){if(n instanceof z.ListItem==!1)return n;n=n.prev}if(!t){let t=e.parent;for(;t;){if(t instanceof z.Element)return;const e=le(t,!0);if(e)return e;t=t.parent}}}class ue extends HTMLElement{root;constructor(){super(),this.root=this.attachShadow({mode:"open"})}}function fe(e,t){const n=e.childNodes;for(let e=0;e<n.length;e++){const s=n[e];if(1===s.nodeType){const e=s;e.setAttribute("data-scoped-"+t,""),fe(e,t)}}}!customElements.get("joker-html-shadow")&&customElements.define("joker-html-shadow",ue);const pe={};function me(e){for(const t in e)pe[t]=e[t]}const ye="Global",ge="Render Core";function ve(t,n){try{return new Function(e,ye,`return ${t};`)}catch(e){throw new Error(`An unknown error occurred while creating the expression execution method. \nmessage: ${e.message} \n${n?.()||t}`)}}class Ee{ast;ob;parent;ext;ref="";watchers=[];node;isDestroy=!1;constructor(e,t,n,s){this.ast=e,this.ob=t,this.parent=n,this.ext=s}init(e){this.parser(e),this.afterParser()}beforeDestroy(e){}destroy(e){if(this.isDestroy=!0,this.clearWatchers(),this.parent.childrens&&this.node){(this.node instanceof z.Element||this.node instanceof z.Component)&&this.ext.removeRef(this.node);let t=()=>{this.parent&&this.node&&(this.beforeDestroy(e),this.destroyChildrens(e),this.node&&(this.ext.render?.removeNode(this.node),this.parent.childrens&&y(this.parent.childrens,this.node),this.notifyNodeWatcher("remove"),this.destroyOtherData()))};if(this.ext.nodeTransition(this.node,"leave",void 0,(()=>{t()})))return y(this.parent.childrens,this.node),void this.destroyChildrensWatcher(this.node);t()}else this.destroyOtherData()}destroyWathcers(){this.isDestroy=!0,this.clearWatchers(),this.destroyChildrensWatcher(this.node)}destroyOtherData(){this.node&&(this.node[z.PARSERKEY]=void 0),this.node=void 0,this.parent=void 0}destroyChildrens(e){for(;this.node?.childrens?.length;){let t=this.node.childrens[0];t[z.PARSERKEY]?t[z.PARSERKEY].destroy(e):y(this.node.childrens,t)}}destroyChildrensWatcher(e){if(e?.childrens?.length)for(let t of e?.childrens)t[z.PARSERKEY]&&(t[z.PARSERKEY].clearWatchers(),this.destroyChildrensWatcher(t))}appendNode(e){this.parent?.childrens&&this.node&&!this.isDestroy&&(this.node[z.PARSERKEY]=this,this.node instanceof z.Element&&this.ob[Fe]?this.node.attributes["data-scoped-"+this.ob[Fe]]=void 0:this.node instanceof z.Html&&this.ob[Fe]&&(this.node.scopedId=this.ob[Fe]),this.ext.render?.appendNode(this.node,e),void 0===e?this.parent.childrens.push(this.node):this.parent.childrens.splice(e,0,this.node),this.notifyNodeWatcher("append"))}afterParser(){this.ext.nodeTransition(this.node,"enter")}notifyNodeWatcher(e,t){this.ext.notifyNodeWatcher(this.ref,this.node,e,t)}runExpress(e,t,n){try{return ve(e,n).call(t,t,pe)}catch(s){C.error(ge,`Expression error:${s.message}\n`+(n?.()||e),{ob:t}),console.error(s)}}runExpressWithWatcher(e,t,n,s,i){if(this.isDestroy)return;let o="string"==typeof e?ve(e,i):e,r=new F((()=>{if(this.isDestroy||t[He])return J;try{return o.call(t,t,pe)}catch(n){return C.error(ge,`Expression error:${n.message}\n${i?.()||e}`,{ob:t,express:e,node:this.node}),console.error(n),J}}),n,void 0,s);return this.addWatch(r),r.value===J?void 0:r.value}addWatch(e){!1===this.watchers.includes(e)&&this.watchers.push(e)}clearWatchers(){this.watchers.forEach((e=>{e.destroy()})),this.watchers.length=0}}class be extends Ee{parser(){this.node=new z.Text(this.ast.text,this.parent),this.appendNode()}}class we extends Ee{parser(){this.node=new z.Comment(this.ast.text,this.parent),this.appendNode()}}class Ne extends Ee{parser(){if(this.node=new z.Condition(this.ast.kind,this.parent),"else"!==this.ast.kind){v(this.ast.condition)&&C.error("Conditional Command",`The current conditional command ${this.ast.kind} has no judgment condition, please check`);let e=this.runExpressWithWatcher(this.ast.condition,this.ob,(e=>{let t=!!e;if(this.node?.result!==t){if(this.node.result=t,!1===t&&this.node?.isShow)this.destroyChildrens(!0);else if(t&&!this.node?.isShow){let e=this.getElseNode();if(e&&e.isShow&&e.childrens?.length){let t=e[z.PARSERKEY];t&&t instanceof Ne&&t.renderConditionChildren()}}this.reloadAllCondition()}}),!1,(()=>this.ast._code));this.node.result=!!e}this.appendNode(),this.renderConditionChildren()}renderId;getElseNode(){let e=this.node?.next;for(;e&&e instanceof z.Condition&&"if"!==e.cmdName;){if("else"===e.cmdName)return e;e=e.next}}renderConditionChildren(){let e=!1;return this.getPrevIfResult()?e=!1:"else"===this.ast.kind?e=!0:(this.node.result=!!this.runExpress(this.ast.condition,this.ob,(()=>{this.ast._code})),this.node.result&&(e=!0)),e!==this.node.isShow&&(this.node.isShow=e,this.destroyChildrens(!0),e&&this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob),!0)}getPrevIfResult(){if("if"===this.ast.kind)return!1;let e=this.node?.prev;for(;e&&e instanceof z.Condition;){if(e.result)return!0;if("if"===e.cmdName)break;e=e.prev}return!1}reloadAllCondition(){if(this.renderConditionChildren()){let e=this.node?.next;for(;e&&e instanceof z.Condition&&"if"!==e.cmdName;){let t=e[z.PARSERKEY];t&&t instanceof Ne&&t.renderConditionChildren(),e=e.next}}let e=this.node?.next;for(this.node?.result||this.destroyChildrens(!0);e&&e instanceof z.Condition&&"if"!==e.cmdName;){let t=e[z.PARSERKEY];t&&t instanceof Ne&&t.renderConditionChildren(),e=e.next}}}class $e extends Ee{parser(){this.node=new z.List(this.parent),this.appendNode(),this.renderChildrens()}renderChildrens(){switch(this.ast.keyType){case"condition":this.renderConditionChildrens();break;case"in":case"of":this.renderInOrOfChildrens()}}renderConditionChildrens(){let t=this.ast.param,n=Object.create(this.ob),s=!!this.runExpressWithWatcher(function(t,n,s){try{return new Function(e,`${e}.${t}=${n}; return ${s};`)}catch{throw new Error(`Dependency collection for the For loop command expression execution encountered an unknown error. Details: letKey: ${t}, keyVal: ${n}, condition: ${s}`)}}(t.letKey,t.defaultKeyVal,t.condition),n,(()=>{this.clearWatchers(),this.renderChildrens()}),!0,(()=>this.ast._code)),i=0;for(;s;){let e=Object.create(this.ob);W(e,t.letKey,n[t.letKey]);let o=i++;this.renderItem(e,o),this.runExpressWithWatcher((()=>n[t.letKey]),n,(async(n,s,i,r)=>{await Promise.resolve(),r.isDestroy||(e[t.letKey]=n,i||this.updateListItemOb(e,o))}),!0,(()=>this.ast._code)),this.runExpress(t.step,n,(()=>{this.ast._code})),s=!!this.runExpress(t.condition,n,(()=>this.ast._code))}this.destroyOldChildrens(i)}renderInOrOfChildrens(){let e=this.ast.param,t=this.runExpressWithWatcher(e.dataKey,this.ob,(()=>{this.clearWatchers(),this.renderChildrens()}),!1,(()=>this.ast._code)),n=0;if(t&&(Array.isArray(t)||u(t)))for(let s in t){let i=Object.create(this.ob),o=Array.isArray(t)?Number(s):s;e.indexKey&&W(i,e.indexKey,o),e.itemKey&&W(i,e.itemKey,t[s]);let r=n++;this.renderItem(i,r,e.indexKey),e.itemKey&&this.runExpressWithWatcher((()=>t[o]),t,(async(n,s,a,h)=>{await Promise.resolve(),h.isDestroy||o in t&&(i[e.itemKey]=n,a||this.updateListItemOb(i,r))}),!0,(()=>this.ast._code))}this.destroyOldChildrens(n)}findIndexByIndex(e,t,n){let s=-1;if(this.node)for(let i=t;i<this.node.childrens.length;i++)if(this.checkObEqual(e,this.node.childrens[i]?.ob,n?[n]:void 0)){s=i;break}return s}renderItem(e,t,n){if(!this.ast.childrens?.length||!this.node)return;let s=this.node.childrens?.[t];if(s){if(this.checkObEqual(e,s.ob,n?[n]:void 0))return void(n&&s.ob[n]!==e[n]&&(s.ob[n]=e[n]));let i=this.findIndexByIndex(e,t+1,n);if(i>-1){if(t+1===i)this.node.childrens?.[t]?.[z.PARSERKEY]?.destroy();else for(let e=0;e<i-t-1;e++)this.node.childrens?.[t]?.[z.PARSERKEY]?.destroy();return this.renderItem(e,t,n)}return new Re(this.ast,e,this.node,this.ext).init(t)}return new Re(this.ast,e,this.node,this.ext).init()}updateListItemOb(e,t){if(!this.ast.childrens?.length||!this.node)return;let n=this.node.childrens?.[t];l(e,((e,t)=>{n.ob[e]!==t&&(n.ob[e]=t)}))}destroyOldChildrens(e){if(this.node)for(;this.node.childrens.length>e;){let e=this.node.childrens.pop();if(!e)break;e[z.PARSERKEY]?.destroy(!1)}}checkObEqual(e,t,n){let s=!0;return void 0!==t&&(l(e,((e,i)=>{n?.includes(e)||t?.[e]===i||(s=!1)})),s)}}class Re extends Ee{parser(e){this.node=new z.ListItem(this.ob,this.parent),this.appendNode(e),this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}}class Ce extends Ee{parser(){if(v(this.ast.cmdName))throw C.error("Template Directive","Error occurred while converting AST to VNode: Directive name not found",this.ast),new Error("Error converting AST to VNode: Directive name not found");let e;if("Html"===this.ast.cmdName||"Text"===this.ast.cmdName?e=this.ast.param:this.ast.cmdName.startsWith(ye+".")?e=`${this.ast.cmdName}(${this.ast.param})`:this.ast.cmdName in this.ob&&"function"==typeof this.ob[this.ast.cmdName]&&(e=`${t(this.ast.cmdName)}(${this.ast.param})`),e){let t=this.runExpressWithWatcher(`[${e}]`,this.ob,(e=>{this.changeValue(e?.[0])}),!1,(()=>this.ast._code));return t||=[],"Html"===this.ast.cmdName?this.node=new z.Html(xe(t[0]),this.parent,t[1]):this.node=new z.Text(xe(t[0]),this.parent),void this.appendNode()}throw new Error("Command not found: "+this.ast.cmdName)}changeValue(e){this.node&&(this.node instanceof z.Html?this.node.html=xe(e):this.node.text=xe(e),this.ext.render?.updateNode(this.node))}}function xe(e){return null==e||"function"==typeof e?"":e.toString()}const Ae="default";class Oe extends Ee{parser(){let e=this.transformParam();this.node=new z.RenderSection(e.id,this.parent),this.node.params=e.params,this.node.section??=this.ob.$sections?.[e.id],this.appendNode(),this.node.section&&(this.node.section.params?(this.node.ob=Object.create(this.node.section.ob||this.ob),this.node.section.params?.forEach(((e,t)=>{W(this.node.ob,e,this.node.params[t])}))):this.node.ob=this.node.section.ob||this.ob,(this.node.section.parser||this.ext).parserNodes(this.node.section.asts,this.node,this.node.ob))}transformParam(){if(this.ast.param){let e=this.runExpressWithWatcher(`[${this.ast.param}]`,this.ob,(e=>{let t=e?.[0]||Ae;if("string"==typeof t&&t!==this.node.id)throw new Error("The section ID cannot be dynamically changed");this.node.params=e.slice(1),this.node?.ob&&this.node.section&&this.node.section.params?.forEach(((e,t)=>{this.node?.ob&&this.node.ob[e]!==this.node.params[t]&&(this.node.ob[e]=this.node.params[t])}))}),!0,(()=>this.ast._code));return{id:e?.[0]||Ae,params:e?.slice(1)||[]}}return{id:Ae,params:[]}}}const Se="Component Parsing";function Pe(e,t){return!!t.components[e]||!!Ze(e)}class Te extends Ee{loadPromise;parser(){if(this.ast.node)return this.node=this.ast.node,this.node.parent=this.parent,this.initPropData(),void(this.node&&(this.appendNode(),this.node.component?.$mount(this.node)));this.node=new z.Component(this.parent),this.initPropData(),this.appendNode(),this.initEvent(),this.loadPromise=this.renderChildren(),this.ext.promiseQueue.add(this.loadPromise),this.loadPromise.finally((()=>{this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0)}))}get canReload(){return"tagName"in this.ast||"function"==typeof this.ast.component}reload(){this.canReload?(this.beforeDestroy(),this.renderChildren()):C.warn(Se,"Reload operation is not supported for the current component",this.node)}initPropData(){for(let e of this.ast.attributes)if("ref"!==e.name)if("keep-alive"===e.name&&"false"!==e.value&&(this.node.keepalive=!0),e.express){let t=this.runExpressWithWatcher(e.express,this.ob,(t=>{this.node.propValues[e.name]=t,this.notifyNodeWatcher("update",e.name)}),!0,(()=>{if(e.value)return`express:${e.value} \nfrom <${"tagName"in this.ast?this.ast.tagName:"Component"} ${e.name}="${e.value}" ... /> `}));this.node.propValues[e.name]=t}else this.node.propValues[e.name]=e.value;else{if(v(e.value)){C.warn(Se,"The 'ref' value of the element cannot be empty");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}this.node.propValues=K(this.node.propValues)}initEvent(){this.ast.events.forEach((e=>{let t=e.functionName?this.ob[e.functionName]:void 0;void 0===e.functionName?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:b}]):t&&"function"==typeof t?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:n=>{let s=[];e.functionParam&&(s=this.runExpress(`[${e.functionParam}]`,this.ob,(()=>{if(e._code){let t=e.modifiers?.join(".");return`express:${e._code} \nfrom: <${"tagName"in this.ast?this.ast.tagName:"Component"} @${e.name}${t?"."+t:""}="${e._code}" ... /> `}}))),t.call(this.ext.ob,n,...s)}}]):C.error(Se,`The callback method (${e.functionName}) specified for the ${e.name} event in the ${"tagName"in this.ast?this.ast.tagName:""} element was not found. Please check.`)}))}async renderChildren(){return new Promise((async(e,t)=>{if("tagName"in this.ast){let e=this.ob.components[this.ast.tagName]||Ze(this.ast.tagName);if(void 0===e)return void C.error(Se,`Failed to render component. Private or global component named '${this.ast.tagName}' not found.`);if(qe in e||(e=(await e()).default),!this.node)return;{let t=this.getSections();this.node.name=this.ast.tagName,this.node.component=new e(this.node?.propValues,t,this.node?.keepalive)}}else if("function"==typeof this.ast.component){let e=this.getSections();this.node.component=new this.ast.component(this.node?.propValues,e,this.node?.keepalive)}else this.node.component=this.ast.component;if(!this.node)return;!this.node.name&&"name"in this.node.component&&this.node.component.name&&"string"==typeof this.node.component.name&&(this.node.name=this.node.component.name);let n=this,s=function(){n.loadPromise&&e(void 0)};if(this.node.component.$on("mounted",(()=>{this.node?.component.$off("beforeDestroy",s),e(void 0)})),this.node.component.$on("beforeDestroy",s),this.node.component.$mount(this.node),!this.node)return;let i=this.node?.component;i.isKeepAlive&&(this.ast.node=this.node)}))}getSections(){let t={},s=[];return this.ast.childrens.forEach((t=>{if(t.type===n.NodeType.COMMAND&&"if"===t.cmdName&&t.childrens){let i=t,o=t.childrens.some((e=>e.type===n.NodeType.COMMAND&&"section"===e.cmdName)),r=i.condition.startsWith(e+".$sections");if(r){return this.runExpress(i.condition,this.ob,(()=>i._code))?void s.push(...t.childrens):void 0}if(o&&"if"===i.kind&&!r)return void C.warn(Se,"While parsing the section, it was found that this section is wrapped in a conditional statement. This conditional statement only supports if judgments using $sections. It has been excluded.")}s.push(t)})),s.forEach((e=>{if(e.type===n.NodeType.COMMAND&&"section"===e.cmdName){let n=e,s=n.id||Ae;/^(\'|\")(.*?)((\'|\"))$/.test(s)&&(s=s.slice(1,-1)),t[s]=t[s]||{asts:[],ob:this.ob,params:n.paramKeys,parser:this.ext},t[s].asts.push(...e.childrens||[])}else t[Ae]=t[Ae]||{asts:[],ob:this.ob,parser:this.ext},t[Ae].asts.push(e)})),t}beforeDestroy(e){this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0),!0===e&&this.node?.component?.isKeepAlive?this.node?.component?.$destroy():(this.node?.component?.$destroy(!0),this.ast.node=void 0)}}class De extends Ee{parser(){this.node=new z.Element(this.ast.tagName,this.parent),this.initAttributes(),this.initEvents(),this.appendNode(),this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}initAttributes(){for(let e of this.ast.attributes)if("ref"!==e.name)if(e.express){let t=t=>{this.node&&(this.node.attributes[e.name]=this.transformAttrVal(t),this.ext.render?.updateNode(this.node,e.name),this.notifyNodeWatcher("update",e.name))},n=this.runExpressWithWatcher(e.express,this.ob,(e=>{t(e)}),!1,(()=>{if(e.value)return`express:${e.value} \nfrom <${this.ast.tagName} ${e.name}="${e.value}" ... /> `}));this.node.attributes[e.name]=this.transformAttrVal(n)}else this.node.attributes[e.name]=e.value;else{if(v(e.value)){C.warn("Element","The 'ref' value of the element cannot be empty");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}}initEvents(){for(let e of this.ast.events){let t=e.functionName?this.ob[e.functionName]:void 0;if(!(void 0===e.functionName||t&&"function"==typeof t))throw new Error(`The callback method (${e.functionName}) specified for the ${e.name} event in the ${this.ast.tagName} element was not found. Please check.`);this.node?.events.push([e.name,{modifiers:e.modifiers,callBack:n=>{if(void 0===t)return;let s=[];e.functionParam&&(s=this.runExpress(`[${e.functionParam}]`,this.ob,(()=>{if(e._code){let t=e.modifiers?.join(".");return`express:${e._code}\nfrom <${this.ast.tagName} @${e.name}${t?"."+t:""}="${e._code}" ... /> `}}))),t&&t.call(this.ext.ob,n,...s)}}])}}transformAttrVal(e){return void 0!==e&&("string"==typeof e||"boolean"==typeof e||"function"!=typeof e&&Object.prototype.toString()?e:void 0)}}class _e{asts;ob;root=new z.Root;refs={};sleeped=!1;promiseQueue=new Set;nodeWatcherEvents={};render;constructor(e,t,n){this.asts=e,this.ob=t,this.root.component=t,this.render=q.get(ee.IRENDERIOCTAGID)??new ee.DomRender,n&&n instanceof z.Node&&(this.root.parent=n,n.childrens??=[],n.childrens.push(this.root))}parser(){this.parserNodes(this.asts,this.root)}mount(e){this.sleeped&&this.weakup(),this.render?.mount(e)}parserNodes(e,t,s){if(0!==this.asts.length)for(let i of e)if(i.type===n.NodeType.TEXT)new be(i,s??this.ob,t,this).init();else if(i.type===n.NodeType.COMMENT)new we(i,s??this.ob,t,this).init();else if(i.type===n.NodeType.COMPONENT)new Te(i,s??this.ob,t,this).init();else if(i.type===n.NodeType.ELEMENT){let e=i;Pe(e.tagName,s??this.ob)?new Te(e,s??this.ob,t,this).init():new De(e,s??this.ob,t,this).init()}else if(i.type===n.NodeType.COMMAND){let e=i;switch(e.cmdName){case"if":case"elseif":case"else":new Ne(e,s??this.ob,t,this).init();break;case"for":new $e(e,s??this.ob,t,this).init();break;case"RenderSection":new Oe(e,s??this.ob,t,this).init();break;case"section":break;default:new Ce(e,s??this.ob,t,this).init()}}}addRef(e,t){this.refs[e]=this.refs[e]||[],this.refs[e].push(t),t.ref=e}removeRef(e){for(let t in this.refs)this.refs[t].includes(e)&&y(this.refs[t],e)}addNodeWatcher(e,t){this.nodeWatcherEvents[e]=this.nodeWatcherEvents[e]||[],this.nodeWatcherEvents[e].push(t)}removeNodeWatcher(e,t){y(this.nodeWatcherEvents[e]||[],t)}notifyNodeWatcher(e,t,n,s){this.nodeWatcherEvents[e]?.forEach((e=>{e(t,n,s)}))}sleep(e){let t=e||this.root;t.childrens?.forEach((e=>{let t=()=>{e.childrens&&this.sleep(e),e.sleep=!0,this.render?.removeNode(e,!0)};this.nodeTransition(e,"leave",void 0,(()=>{t()}))||t()})),void 0===e&&(this.sleeped=!0)}weakup(e){let t=e||this.root;t.childrens?.forEach((e=>{e.sleep=!1,this.render?.appendNode(e),e.childrens&&this.weakup(e),this.nodeTransition(e,"enter")})),void 0===e&&(this.sleeped=!1)}destroy(e){for(;this.root.childrens.length;){let t=this.root.childrens[0];t[z.PARSERKEY]?t[z.PARSERKEY].destroy(e):y(this.root.childrens,t)}this.render.destroy(),this.refs={},this.root.childrens.length=0,this.nodeWatcherEvents={},this.asts.length=0}destroyWathcers(){for(let e of this.root.childrens)e[z.PARSERKEY]&&e[z.PARSERKEY].destroyWathcers()}reSetAsts(e,t){this.destroy(t),this.render=q.get(ee.IRENDERIOCTAGID)??new ee.DomRender,this.asts=e}nodeTransition(e,t,n,s,i){if(e&&e.parent?.childrens&&(e instanceof z.Element||e instanceof z.Component)){let o=function(e){if(e instanceof z.Element||e instanceof z.Component){let t=e instanceof z.Element?e.attributes:e.propValues;return{name:t["transition-name"],type:t["transition-type"]}}}(e);if(n??=o?.name,i??=o?.type,!n)return!1;let r=ke(e);if(r)return"enter"===t?this.render.elementToEnter(r,n,i,(()=>{let t=e[z.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-enter"),s?.()})):this.render.elementToLeave(r,n,i,(()=>{let t=e[z.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-leave"),s?.()})),!0;C.warn("Render Core","Incomplete data found when executing node animation, please check")}return!1}}function ke(e){if(e instanceof z.Element)return e;if(e.childrens&&e.childrens.length)for(let t of e.childrens)return t instanceof z.Element?t:ke(t)}function Ke(e,t,n){if(void 0===t)return;const s=Array.isArray(n)?n:[n];for(const e of s){if(e===Array&&Array.isArray(t))return t;if(typeof t===e.name.toLowerCase())return t}switch(s[0]){case Number:const e=Number(t);if(!isNaN(e))return e;break;case String:return String(t)}throw new Error(`The type of ${e.toString()} in props does not match the constrained type`)}function We(e,t,n){let s,i,o;if("symbol"!=typeof t&&(s=E(t)),t in e?i=e[t]:s&&(i=e[s]),n&&(t in n?o=n[t]:s&&s in n&&(o=n[s])),void 0!==o){if(u(o)&&("type"in o||"required"in o||"default"in o||"validate"in o)){const e=o;if(e.required&&void 0===i)throw new Error(`props key:${t.toString()} is required, please check`);if(e.type&&(i=Ke(t,i,e.type)),e.validate&&!1===e.validate(i))throw new Error(`Validation failed for props key ${t.toString()}`);i=i??e.default}else i=Ie(o)?Ke(t,i,o):i??o;return i}return i}function Ie(e){return!![String,Array,Number,Object,Function,Boolean].includes(e)||!!Array.isArray(e)&&Ie(e[0])}function Ve(e,t){if(!e.constructor)return!1;let n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);return n&&n.get}const Le="Component",Me=Symbol.for("JOKER_PROPS_DATA_KEY"),je=Symbol.for("JOKER_PROPS_DATA_PROXY"),Ye=Symbol.for("JOKER_PRIVATE_WATCHERS"),Be=Symbol.for("JOKER_EVENT_DATA_KEY"),He=Symbol.for("JOKER_IS_DESTROY"),Je=Symbol.for("JOKER_PARSER_TEMPLATE_TARGET"),Fe=Symbol.for("JOKER_SCOPE_ID"),qe=Symbol.for("JOKER_COMPONENT_TAG"),Ge=Symbol();let ze=["constructor","$mount","$nodeTransition","$destroy","$getRef","$getRefs","$syncProp","$watchNode","$watch","$on","$off","$trigger","$render","created","mounted","beforeDestroy","sleeped","wakeup","destroyed"];class Qe{$sections;isKeepAlive;static[qe]=!0;[Fe];model={};template;$root;isSleeped=!1;components={};propsOption;[Me]={};[Je];[je];[Ye]=[];[Be]=new Map;[He]=!1;[Ge]=!1;constructor(e,t={},n){this.$sections=t,this.isKeepAlive=n,this[Me]=e||{}}get props(){if(void 0===this[je]){let e=this;this[je]=new Proxy(e[Me],{get:(t,n)=>We(e[Me],n,e.propsOption),set(){throw new Error("props parameters are not allowed to be changed, only one-way data transfer is allowed")}})}return this[je]}$mount(e){if(!1===this[Ge]){let e=()=>{let e=[],t=Object.getPrototypeOf(this);for(;null!==t&&t!==Object.prototype;)Object.getOwnPropertyNames(t).forEach((n=>{!1!==ze.includes(n)||Ve(t,n)||"function"!=typeof t[n]||t[n].prototype?.hasOwnProperty("constructor")||e.push(n)})),t=Object.getPrototypeOf(t);return e};for(let t of e())this[t]=this[t].bind(this);this[Ge]=!0}if(this.$root=e,this.isKeepAlive&&this.isSleeped)return this.isSleeped=!1,this[Je]&&this.$root?(this[Je].mount(this.$root),this.wakeup(),this.$trigger("wakeup"),this.$rootVNode&&tt(this.$rootVNode),this):(C.error(Le,"When attempting to wake up the current component, it was found that the rendering handler has been destroyed. The wake-up operation cannot proceed.",[this,this.$root]),this);this.isSleeped=!1,this.model=K(this.model);let t=this.created(),n=async()=>{this.$trigger("created"),this.template&&this.$render(),await this.$nextUpdatedRender(),this[He]||(await this.mounted(),this[He]||this.$trigger("mounted"))};return t&&t instanceof Promise?t.then((()=>{this[He]||n()})):n(),this}$nextUpdatedRender(e){if(this[He])return;let t=[...this[Je]?.promiseQueue||[]],n=this.$rootVNode?.find((e=>e instanceof z.Component));if(n?.forEach((e=>{e?.component&&t.push(...e.component[Je]?.promiseQueue||[])})),t.length)return Promise.all(t).finally((()=>{this[He]||e?.()}));this[He]||e?.()}$nodeTransition(e,t,n,s,i){if("string"==typeof e){let t=this.$getRef(e);if(!t)return void C.error(Le,`Node with ref=${e} not found when executing node animation`);e=t}this[Je]?.nodeTransition(e,t,n,s,i)}$destroy(e){if(!e&&this.isKeepAlive)return this[Je]?.sleep(),this.isSleeped=!0,this.sleeped(),this.$trigger("sleeped"),void(this.$rootVNode&&et(this.$rootVNode));this[He]=!0;for(let e of this[Ye])e.destroy();this[Ye].length=0,this[Je]?.destroyWathcers(),this.beforeDestroy(),this.$trigger("beforeDestroy"),this[Je]?.destroy(),this[Je]=void 0,this.template&&Array.isArray(this.template)&&(this.template.length=0),this.$trigger("destroy"),this[Be].clear(),this.$root=void 0,this.isSleeped=!1,this.$sections={},this[je]=void 0,this[Me]={},this.destroyed()}get $refs(){return this[Je]?.refs||{}}$getRef(e){return this.$refs[e]?.[0]}$getRefs(e){return this.$refs[e]}$syncProp(e,t,n){"function"==typeof t&&(n=t,t=void 0),t??=e,n??=e=>e,this.model[t]=n(this.props[e]),this.$watch((()=>this.props[e]),(()=>{this.model[t]=n?.(this.props[e])}))}get $rootVNode(){return this[Je]?.root}$watchNode(e,t){if(this[Je])return this[Je]?.addNodeWatcher(e,t),()=>{this[Je]?.removeNodeWatcher(e,t)};C.warn(Le,"Component is not yet mounted. Node observation and monitoring cannot be performed.")}$watch(e,t,n){let s=new F((()=>{if(this[He]){for(let e of this[Ye])e.destroy();return J}return e()}),((e,n)=>{this[He]||t(e,n)}),void 0,n);return this[Ye].push(s),[s.value,()=>{s.destroy(),y(this[Ye],s)}]}$on(e,t){let n=this[Be].get(e);void 0===n&&(n=new Set,this[Be].set(e,n)),!1===n?.has(t)&&n.add(t)}$off(e,t){let n=this[Be].get(e);n&&(t?n.delete(t):n.clear())}$trigger(e,t,n){if(!this.$root)return;let s={eventName:e,stopPropagation:n?.stopPropagation??(()=>{}),preventDefault:n?.preventDefault??(()=>{}),data:t,target:n?.target??this.$rootVNode,event:n?.event};if(this.$rootVNode&&this.$rootVNode.parent&&this.$rootVNode.parent instanceof z.Component&&!1===this[Je]?.render.triggerEvent(this.$rootVNode.parent,e,s))return;let i=this[Be].get(e);i?.size&&[...i].forEach((e=>{e(s)}));let o=this[Be].get("*");o?.size&&[...o].forEach((e=>{e(s)}))}$render(e,t){e??=this.template,this.template="function"==typeof e?e(s):e,this.$root&&(this.template??=[],this[Je]?.reSetAsts(this.template,t),this[Je]??=new _e(this.template,this,this.$root),this[Je].parser(),this.$root&&this[Je].mount(this.$root))}created(){}mounted(){}beforeDestroy(){}sleeped(){}wakeup(){}destroyed(){}}const Ue={};function Xe(e,t){if("string"==typeof e)t&&(Ue[e]=t);else for(let t in e)Ue[t]=e[t]}function Ze(e){return Ue[e]}function et(e){e.childrens?.forEach((e=>{e instanceof z.Component&&e.component?.sleeped(),et(e)}))}function tt(e){e.childrens?.forEach((e=>{e instanceof z.Component&&e.component?.wakeup(),tt(e)}))}class nt extends Qe{template=[];cache=new Map;async mounted(){this.$watch((()=>this.props.name),(async e=>{this.$render([],!0),await Promise.resolve(),this.$root&&this.loadComponent(e)})),await this.loadComponent(this.props.name)}propsVaule;created(){this.initProps()}initProps(){let e={};this.props.props||(Object.keys(this.props).forEach((t=>{!1!==this.filterProps(t)&&(e[t]=this.props[t],this.$watch((()=>this.props[t]),(()=>{this.propsVaule[t]=this.props[t]})))})),this.propsVaule=K(e))}filterProps(e){if("string"!=typeof e)return!1;let t=E(e);return"transition-name"!==t&&"name"!==t&&"keep-alive"!==t&&"ref"!==t&&void 0}async loadComponent(e){if(!e)return void this.$render([],this.isKeepAlive);let t;if(this.isKeepAlive){let t=this.cache.get(e);if(t)return void this.$render([i(t,{"transition-name":this.props["transition-name"]})],!0)}let n=this.$rootVNode?.parent?.[z.PARSERKEY]?.ob.components,s=n?.[e];void 0===s&&(s=Ze(e)),s?(qe in s||(s=(await s()).default),t=new s(this.props.props||this.propsVaule,this.$sections,this.isKeepAlive),t.$on("*",(e=>{this.$trigger(e.eventName,e.data,e)})),this.isKeepAlive&&this.cache.set(e,t),this.$render([i(t,{"transition-name":this.props["transition-name"]})],this.isKeepAlive)):C.warn("component",`Component ${e} not found`)}beforeDestroy(){this.removeCache()}removeCache(e){if(e){let t=this.cache.get(e);this.cache.delete(e),t&&t.$destroy(!0)}else this.cache.forEach((e=>{e.$destroy(!0)})),this.cache.clear()}}class st extends Qe{template=function(){return[o("RenderSection")]};async mounted(){await this.$nextUpdatedRender()}}Xe({template:st,component:nt});class it{eventDatas=new Map;on(e,t){let n=this.eventDatas.get(e);void 0===n&&(n=[],this.eventDatas.set(e,n));const s={callBack:t};return n.push(s),()=>{n&&y(n,s)}}once(e,t){let n=this.eventDatas.get(e);void 0===n&&(n=[],this.eventDatas.set(e,n));const s={callBack:t,once:!0};return n.push(s),()=>{n&&y(n,s)}}off(e,t){if(void 0!==e)if(t){const n=this.eventDatas.get(e),s=n?.find((e=>e.callBack===t));s&&y(n,s)}else this.eventDatas.delete(e);else this.eventDatas.clear()}async trigger(e,t){let n=[...this.eventDatas.get(e)||[]];if(n.push(...this.eventDatas.get("*")||[]),n&&n.length){let s=0,i=0,o=!1;for(;n[s];){const r=n[s],a=await r.callBack({stopPropagation:()=>o=!0,callTimes:i,eventName:e},t);if(r.once?y(n,r):s++,!1===a||o)return!1}}}}export{J as BREAK_WATCH_UPDATE,Qe as Component,nt as ComponentContainer,O as Dep,it as EventBus,q as IContainer,He as IS_DESTROY,qe as JOKER_COMPONENT_TAG,G as JOKER_VNODE_TAG,S as OBJECTPROXY_DEPID,Je as PARSER_TEMPLATE_TARGET,_e as ParserTemplate,ee as Render,Fe as SCOPE_ID,V as ShallowObserver,st as Template,z as VNode,F as Watcher,pe as __GLONAL_FUNTIONS__,d as __JOKER_HMR_RUNTIME,Y as combinedReply,W as defineObserverProperty,Ze as getGlobalComponent,B as isObserverData,K as observer,Xe as registerGlobalComponent,me as registerGlobalFunction};
|
|
1
|
+
import{EXPRESSHANDLERTAG as e,createFuntionBody as t,AST as n,RENDER_HANDLER as s,createComponent as i,createCommand as o}from"@joker.front/ast";export{AST,EXPRESSHANDLERTAG,RENDER_HANDLER,createCodeFunction,createCommand,createComment,createComponent,createElement,createFuntionBody,createText}from"@joker.front/ast";const r=new Map,a=new Map,h=new Map;let d={recordRender:(e,t)=>{a.set(e,t)},recordComponent:(e,t)=>{h.set(e,t)},record:(e,t)=>{void 0===r.get(e)&&r.set(e,new Set),r.get(e).add(t),t.$on("destroy",()=>{r.get(e)?.delete(t)})},reload:(e,t)=>{let n=h.get(e);if(!n)return;n.component=t;let s=r.get(e);if(!s)return;let i=Array.from(s);s.clear(),i.forEach(e=>{if(e.$root){if(!e.$rootVNode?.parent)return window.onbeforeunload=null,void location.reload();{let t=e.$rootVNode.parent;if(!(t instanceof z.Component&&t[z.PARSERKEY]&&t[z.PARSERKEY].canReload))return window.onbeforeunload=null,void location.reload();t[z.PARSERKEY].reload()}}})},rerender:(e,t)=>{let n=a.get(e);n&&(n.render=t),r.get(e)?.forEach(e=>{e.$render(t)})}};function c(e){return null!==e&&"object"==typeof e}function l(e,t){Object.getOwnPropertyNames(e).forEach(n=>{t(n,e[n])})}function u(e){return"[object Object]"===Object.prototype.toString.call(e)}function f(e){if(null===e)return e;if("object"!=typeof e)return e;let t;t=Array.isArray(e)?[]:{};let n=Object.keys(e);for(let s of n){let n=e[s];t[s]="object"==typeof n?f(n):n}return t}function p(e,t,n){if(e===t)return!0;let s=c(e),i=c(t);if(s&&i){if(u(e)&&u(t)){let n=Object.keys(e);if(n.length!==Object.keys(t).length)return!1;for(let s of n)if(e[s]!==t[s])return!1;return!0}return e===t}return!s&&!i&&String(e)===String(t)}function m(e,t){let n=e.indexOf(t);return n>-1&&e.splice(n,1),e}function y(e,t){let n=e.findIndex(e=>t(e));return n>-1&&e.splice(n,1),e}function g(e){return!e||""===e.trim()}function v(e,t="-"){return(e=e||"").split(/(?=[A-Z])/).map(e=>e.toLowerCase()).join(t)}let E=(...e)=>{},b="warn";const w=["silent","error","warn","info"];function N(){let e=new Date;function t(e,t=2){return e.toString().padStart(t,"0")}return t(e.getHours())+":"+t(e.getMinutes())+":"+t(e.getSeconds())+":"+t(e.getMilliseconds(),3)}function $(e,t,n,s){w.indexOf(e)<=w.indexOf(b)&&(void 0===s?console[e](`${N()} [${t}]:`,n):console[e](`${N()} [${t}]:`,n,s))}let R=function(e,t,n){$("warn",e,t,n)},C=function(e,t,n){$("error",e,t,n)};const x={lt:"<",gt:">",nbsp:" ",amp:"&",quot:'"',"#39":"'"};function A(e){return e.replace(/&(lt|gt|nbsp|amp|quot|#39);/gi,(e,t)=>x[t]||"")}class O{static target;watchers=new Map;depend(e){O.target?.addDep(this,e)}addWatcher(e,t){let n=this.watchers.get(e)||[];n.push(t),this.watchers.set(e,n)}removeWatcher(e,t){const n=this.watchers.get(e);n&&m(n,t)}notify(e){const t=this.watchers.get(e);if(t){y(t,e=>e.isDestroy);[...t].forEach(e=>{e.isDestroy||e.update()})}}}const S=Symbol.for("__JOKER_OBJECT_PROXY_DEP_ID__"),P=Symbol.for("__JOKER_OBJECT_PROXY_DATA_KEY__"),T=Symbol.for("__JOKER_OBJECTPROXY_DEPLEVE_ID__");function D(e){try{return null!=e&&c(e)&&e!==window.parent&&e instanceof Window==!1&&e instanceof F==!1&&e instanceof Ue==!1&&e instanceof _e==!1&&(Array.isArray(e)||u(e)||e instanceof Set||e instanceof Map)&&!Object.isFrozen(e)&&!(e instanceof Element)&&!(G in e)&&!(I in e)&&!(Ge in e)}catch{return!1}}function k(e){if(_(e))return e;if(e&&e.hasOwnProperty(P)){let t=Reflect.get(e,P);if(t)return t}let t=new O,n=!0,s=new Proxy(e,{get(e,n,s){if(e instanceof Set||e instanceof Map){if("add"===n){let s=Reflect.get(e,n);return n=>{D(n)&&(n=K(n));let i=s.call(e,n);return L(t,"size"),L(t,T),i}}if("set"===n){let s=Reflect.get(e,n);return(n,i)=>{D(i)&&(i=K(i));let o=s.call(e,n,i);return L(t,"size"),L(t,T),o}}if("delete"===n||"clear"===n){let s=Reflect.get(e,n);return i=>{let o=s.call(e,i);return("clear"===n||o)&&(L(t,"size"),L(t,T)),o}}let s=Reflect.get(e,n);if("function"==typeof s)return s.bind(e)}if(n===P)return;if(n===S)return t;if(n===T)return;let i=Reflect.get(e,n);return n===Symbol.toStringTag||!1===function(e,t){return t in e}(e,n)&&"length"!==n&&"size"!==n||(t.depend(n),D(i)&&_(i)?.depend(T)),i},set(e,s,i){if(n)return Reflect.set(e,s,i),!0;D(i)&&(i=K(i));let o=!1===function(e,t){return Object.prototype.hasOwnProperty.call(e,t)}(e,s),r=Reflect.get(e,s)!==i;return Reflect.set(e,s,i),(r||"length"===s&&Array.isArray(e))&&L(t,s),Array.isArray(e)?"length"===s&&L(t,T):o&&L(t,T),!0},deleteProperty:(e,n)=>(Reflect.deleteProperty(e,n),!1===Array.isArray(e)&&L(t,T),!0)});!function(e,t,n,s){Object.defineProperty(e,t,{value:n,enumerable:s,writable:!0,configurable:!0})}(e,P,s,!1);for(let t in e){let n=e[t];D(n)&&!_(n)&&(s[t]=k(e[t]))}return n=!1,s}function _(e){if(c(e))return Reflect.get(e,S)}function K(e,t=!1){if(!1===D(e))throw new Error("The provided data is not of the correct type. It must be an array or an object.");return k(t?f(e):e)}function W(e,t,n){let s=n;D(n)&&(s=K(n));let i=new O;Object.defineProperty(e,t,{enumerable:!0,configurable:!0,get:()=>(i.depend(t),_(s)?.depend(T),s),set:e=>{e!==s&&(D(e)&&(e=K(e)),s=e,L(i,t))}})}const I=Symbol.for("JOKER_SHALLOW_OBSERVER");class V{data;[I]=!0;dep=new O;constructor(e){this.data=e}isChanged=!1;get value(){return this.dep.depend(T),this.data}set value(e){!1===Object.is(e,this.data)&&(this.isChanged=!0,this.data=e,L(this.dep,T))}}let M=!1,j=new Map;function L(e,t){if(!1===M)e.notify(t);else{let n=j.get(e);void 0===n&&(n=[],j.set(e,n)),n.includes(t)||n.push(t)}}function Y(e){M=!0;try{e()}catch(e){return M=!1,j.clear(),void C("Data Hijacking","Encountered a blocking error while collecting changes for data hijacking composite responses. No action will be taken. Please investigate.",e)}M=!1,function(e){const t=[],n=[];e.forEach((e,n)=>{e.forEach(e=>{t.push(...n.watchers.get(e)||[])})}),t.forEach(e=>{n.includes(e)||(!e.isDestroy&&e.update(),n.push(e))})}(j),j.clear()}function B(e){return void 0!==_(e)}const H="Data Observation",J=Symbol.for("JOKER_BREAK_WATCH_UPDATE");class F{ob;updateCallBack;forceCallBack;getter;value;isDestroy=!1;updating=!1;runRelations=new Map;relations=new Map;constructor(e,t,n,s){if(this.ob=e,this.updateCallBack=t,this.forceCallBack=s,void 0===e)throw new Error("Cannot observe changes on undefined");if(void 0===n)this.getter=e=>e;else if("function"==typeof n)this.getter=n;else{const e=function(e){if(/[^\w.$]/.test(e))return;const t=e.split(".");return function(e){let n=e;return t.forEach(e=>{n&&(n=n[e])}),n}}(n);if(void 0===e)throw new Error(`${n} failed to parse. Unable to interpret the expression. Please check the expOrFn parameter or use the function mode instead.`);this.getter=e}void 0===this.getter&&C(H,"Failed to create getter",arguments),this.value=this.getValue()}getValue(){if(void 0===this.getter)return;O.target=this;const e="function"==typeof this.ob?this.ob():this.ob;let t;try{t=this.getter.call(e,e)}catch(e){throw C(H,"Failed to retrieve value. Executed method: "+this.getter.toString()),e}return O.target=void 0,this.clearnDeps(),t}addDep(e,t){let n=this.runRelations.get(e);if(void 0===n||!n.includes(t)){n=n||[],n.push(t),this.runRelations.set(e,n);const s=this.relations.get(e);void 0!==s&&s.includes(t)||e.addWatcher(t,this)}}update(){if(this.updating)return;const e=this.getValue();if(e===J)return;const t=this.value;if(this.forceCallBack||e!==t||c(e)){this.value=e;const n=e!==t&&function(e,t){return Array.isArray(e)&&Array.isArray(t)?function(e,t){if(e.length!==t.length)return!1;for(let n=0;n<e.length;n++)if(e[n]!==t[n])return!1;return!0}(e,t):p(e,t)}(e,t);if(n&&!this.forceCallBack)return;this.updating=!0;try{this.updateCallBack(e,t,n,this)}catch(e){throw e}finally{this.updating=!1}}}destroy(){this.relations.forEach((e,t)=>{for(const n of e)t.removeWatcher(n,this)}),this.isDestroy=!0,this.relations.clear(),this.runRelations.clear(),this.ob=void 0,this.value=void 0,this.getter=void 0}clearnDeps(){this.relations.forEach((e,t)=>{const n=this.runRelations.get(t);for(const s of e)n&&n.includes(s)||t.removeWatcher(s,this)}),this.relations.clear(),this.relations=this.runRelations,this.runRelations=new Map}}var q;!function(e){let t=new Map;e.bind=function(e){return{to:n=>{if(t.has(e))throw new Error(`TagId:${e.toString()} already has an implementation bound. Do not bind again.`);t.set(e,n)}}},e.get=function(e,...n){const s=t.get(e);if(s)return new s(...n)}}(q||(q={}));const G=Symbol.for("JOKER_VNODE_TAG");var z;!function(e){e.PARSERKEY=Symbol.for("JOKER_PARSER_KEY");class t{parent;[G]=!0;static;output;[e.PARSERKEY];childrens;ref;sleep=!1;constructor(e){this.parent=e}get prev(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)-1]}get next(){if(this.parent)return this.parent.childrens?.[this.parent.childrens?.indexOf(this)+1]}closest(e,t){if(!0===e(this))return this;let n=this.parent;for(;n;){if(!0===e(n))return n;if(!0===t?.(n))break;n=n.parent}}find(e,t,n,s,i){let o=i??[];if(s??=this.childrens,s)for(let i of s){(!0!==e(i)||(o.push(i),n))&&(!0!==t?.(i)&&i.childrens&&this.find(e,t,n,i.childrens,o))}return o}contains(e,t){if(t??=this.childrens,t)for(let n of t){if(!0===e(n))return!0;if(n.childrens&&n.childrens.length&&this.contains(e,n.childrens))return!0}return!1}first(e,t){if(t??=this.childrens,t)for(let n of t){if(!0===e(n))return n;if(n.childrens&&n.childrens.length){let t=this.first(e,n.childrens);if(t)return t}}}}e.Node=t;e.Root=class extends t{childrens=[];component;constructor(){super()}};e.Text=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Html=class extends t{html;notShadow;static=!0;scopedId;constructor(e,t,n){super(t),this.html=e,this.notShadow=n}};e.Comment=class extends t{text;static=!0;constructor(e,t){super(t),this.text=e}};e.Element=class extends t{tagName;static=!0;attributes={};childrens=[];events=[];_assistEventCache;constructor(e,t){super(t),this.tagName=e}};e.Component=class extends t{name;component;events=[];propValues={};keepalive;get firstElement(){if(this.childrens){let t=n=>{for(let s of n){if(s instanceof e.Element)return s;if(s.childrens){let e=t(s.childrens);if(e)return e}}};return t(this.childrens)}}get rootElements(){if(this.childrens){let t=[],n=s=>{for(let i of s)i instanceof e.Element||i instanceof e.Html?t.push(i):i.childrens&&n(i.childrens)};return n(this.childrens),t}return[]}};e.Condition=class extends t{cmdName;result=!1;childrens=[];isShow=!1;constructor(e,t){super(t),this.cmdName=e}};e.List=class extends t{childrens=[]};e.ListItem=class extends t{ob;childrens=[];constructor(e,t){super(t),this.ob=e}};e.RenderSection=class extends t{id="unknown";params=[];section;childrens=[];ob;constructor(e,t){super(t),"string"==typeof e?this.id=e:this.section=e}}}(z||(z={}));const Q="DOM Rendering",U=["script","style","textarea","pre"];let X=0;const Z=["svg","defs","use","rect","circle","ellipse","line","polyline","polygon","path","text","g"];var ee;function te(e,t,n){return`${e}-${t}-${n}`}function ne(e,t,n,s){e._assistEventCache??=[],e._assistEventCache.push([t,n]),document.body.addEventListener(t,n,s)}function se(e,t,n){e._assistEventCache&&t&&n?(y(e._assistEventCache,e=>e[0]===t&&e[1]===n),document.body.removeEventListener(t,n)):(e._assistEventCache?.forEach(e=>{document.body.removeEventListener(e[0],e[1])}),e._assistEventCache&&(e._assistEventCache.length=0),e._assistEventCache=void 0)}!function(e){e.IRENDERIOCTAGID=Symbol.for("JOKER_IRENDERIOC_TAGID"),e.ROOT_CONTAINER="";e.DomRender=class{elements;constructor(){this.elements=document.createDocumentFragment()}mount(e){if(e instanceof Element)e.appendChild(this.elements);else if(e instanceof z.Component)if(e.parent)if(e.output){const t=e.output,n=he(e)||t.parentNode;n&&n.insertBefore(this.elements,t)}else C(Q,"Component mount found no DOM target node",e);else C(Q,"Mounting child component with no parent",e);else C(Q,"Mount only supports Element or VNode.Node",e)}appendNode(e,t){if(this.renderNode(e),e.output){const n=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];for(const s of n)this.appendNodeChildren(e,s,e.parent,t);return}C(Q,"No output found for node, cannot mount",e)}updateNode(e,t){if(e instanceof z.Element)for(const t in e.attributes){const n=e.attributes[t];this.setAttribute(e.output,t,n)}else e instanceof z.Text?e.parent&&e.parent instanceof z.Element&&U.includes(e.parent.tagName)?(this.removeNode(e),this.appendNode(e)):e.output.textContent=A(e.text||""):e instanceof z.Html?e.notShadow?(e.output.innerHTML=e.html,e.scopedId&&fe(e.output,e.scopedId)):e.output.root.innerHTML=e.html:C(Q,`Node does not support ${t} update`,e)}removeNode(e,t){const n=e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output];n?.forEach(e=>e?.remove()),t||(e instanceof z.Element&&se(e),e.output=void 0)}destroy(){this.elements=void 0}elementToEnter(e,t,n,s){e.output&&this.transitionFrame(e,t,"enter",n,s)}elementToLeave(e,t,n,s){e.output&&this.transitionFrame(e,t,"leave",n,s)}triggerEvent(e,t,n){const s=[];for(const i of e.events){const[o,r]=i;if(o===t){const t=r.modifiers?.includes("self"),a=r.modifiers?.includes("outside");if(t||a){R(Q,"Event modifiers 'self' and 'outside' not supported in components",e);continue}const h=n.event;if((h instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(o)||h instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(o))&&!1===oe(h,r.modifiers))continue;if(r.callBack(n),r.modifiers?.includes("prevent")&&n.preventDefault(),r.modifiers?.includes("once")&&s.push(i),r.modifiers?.includes("stop"))return n.stopPropagation(),!1}}s.length&&s.forEach(t=>m(e.events,t))}transitionFrame(e,t,n,s,i){re(e,te(t,n,"from")),s||="transition";const o=e.output.__TRANSITION_EVNETID__=X++;requestAnimationFrame(()=>{requestAnimationFrame(()=>{if(!e.output)return;re(e,te(t,n,"active")),ae(e,te(t,n,"from")),re(e,te(t,n,"to"));const r=function(e,t){const n=window.getComputedStyle(e),s=e=>(n[e]||"").split(", ");if("transition"===t){const e=s("transitionDelay"),t=s("transitionDuration"),n=de(e,t);if(n>0)return{timeout:n,count:t.length}}else if("animation"===t){const e=s("animationDelay"),t=s("animationDuration"),n=de(e,t);if(n>0)return{timeout:n,count:t.length}}}(e.output,s);if(!r)return void i?.();let a=0;const h=()=>{ae(e,te(t,n,"to")),ae(e,te(t,n,"active")),e.output&&(e.output.removeEventListener(`${s}end`,d),o===e.output.__TRANSITION_EVNETID__&&i?.())},d=t=>{t.target===e.output&&++a>=r.count&&h()};setTimeout(()=>{a<r.count&&h()},r.timeout+1),e.output?.addEventListener(`${s}end`,d)})})}renderNode(e){if(!e.output)if(e instanceof z.Text)e.parent&&e.parent instanceof z.Element&&U.includes(e.parent.tagName)?e.output=this.parserHtml(e.text):e.output=document.createTextNode(A(e.text||""));else if(e instanceof z.Html)if(e.notShadow){const t=document.createElement("joker-html-container");t.JOKER_NODE=e,t.innerHTML=e.html,e.scopedId&&(t.setAttribute("data-scoped-"+e.scopedId,""),fe(t,e.scopedId)),e.output=t}else{const t=document.createElement("joker-html-shadow");t.JOKER_NODE=e,t.style.lineHeight="1",t.root.innerHTML=e.html,e.output=t}else if(e instanceof z.Element){let t;const n=e.tagName.toLowerCase();"svg"===n||Z.includes(n)||e.parent?.inSvg?(e.inSvg=!0,t=document.createElementNS("http://www.w3.org/2000/svg",e.tagName)):t=document.createElement(e.tagName);for(const n in e.attributes)this.setAttribute(t,n,e.attributes[n]);t.JOKER_NODE=e,e.output=t,e.events.some(e=>"click"===e[0]&&e[1].modifiers?.includes("outside"))?setTimeout(()=>{this.initElementEvents(t,e)}):this.initElementEvents(t,e)}else e instanceof z.Comment?e.output=document.createComment(e.text):e.output=document.createTextNode("")}initElementEvents(e,t){for(const[n,s]of t.events){const i=s.modifiers?.includes("self");let o=s.modifiers?.includes("outside");i&&o&&(R(Q,"Event modifiers 'self' and 'outside' cannot coexist, using 'self'",t),o=!1);const r=a=>{if(!(t.sleep||i&&a.target!==e)){if(o){if(a.target===e||e.contains(a.target))return;if(!1===document.contains(a.target))return;if(t.contains(e=>(e.output instanceof HTMLCollection||e.output instanceof NodeList||Array.isArray(e.output)?Array.from(e.output):[e.output]).includes(a.target)))return!0}(a instanceof KeyboardEvent&&["keydown","keypress","keyup"].includes(n)||a instanceof MouseEvent&&["click","dbclick","mouseup","mousedown"].includes(n))&&!1===oe(a,s.modifiers)||(s.callBack({eventName:n,event:a,target:t,preventDefault:()=>a.preventDefault(),stopPropagation:()=>a.stopPropagation(),data:void 0}),s.modifiers?.includes("prevent")&&a.preventDefault(),s.modifiers?.includes("stop")&&a.stopPropagation(),s.modifiers?.includes("once")&&(o?se(t,n,r):e.removeEventListener(n,r)))}};let a;s.modifiers?.includes("passive")&&(a={passive:!0}),o?ne(t,n,r,a):e.addEventListener(n,r,a)}}parserHtml(e){const t=document.createElement("div");return t.innerHTML=e,t.childNodes}isCommandGroup(e){return e instanceof z.Component||e instanceof z.Condition||e instanceof z.List||e instanceof z.ListItem||e instanceof z.RenderSection}appendNodeChildren(e,t,n,s){let i=he(e);if(i)i.appendChild(t);else if(void 0===n)this.elements?.appendChild(t);else if(n)if(n instanceof z.Root){const e=n.parent;if(e&&e instanceof z.Component&&e.output){const n=e.output,s=n?.parentNode;if(s)return void s.insertBefore(t,n)}this.elements?.appendChild(t)}else if(n instanceof z.Element){const e=n.output;if(void 0===e)return;e.appendChild(t)}else if(this.isCommandGroup(n)){const i=n.output?.parentNode;if(void 0!==s&&n.childrens?.length&&i){const o=s-1;if(o<0){const n=le(e);return void(n&&i.contains(n.output)?n.output.after(t):i.insertBefore(t,i.firstChild))}{const e=n.childrens[o];if(e){const n=e.output;if(n)return void n.after(t)}}}i&&i.insertBefore(t,n.output)}else C(Q,"Node does not support nested children",{node:e,parent:n})}setAttribute(e,t,n){if(e)if("boolean"!=typeof n){if("class"===t){if(n){n=pe(n).join(" ")}}else if("style"===t&&c(n)){e.removeAttribute("style");for(const t in n){let s=!1;void 0!==n[t]&&!1!==n[t]||(s=!0);const i=String(n[t]);g(i)&&(s=!0),s||(e.style[t]=i)}return}n=(n??"").toString().trim(),"class"===t&&(n=n.split(/\s/).filter(e=>e.trim()).join(" ")),"value"===t&&"value"in e?e.value=n:"xlink:href"===t?e.setAttributeNS("http://www.w3.org/1999/xlink","xlink:href",n):e.setAttribute(t,n)}else n?e.setAttribute(t,""):e.removeAttribute(t)}}}(ee||(ee={}));const ie={enter:"enter",backspace:"delete",tab:"tab",arrowup:"up",arrowdown:"down",arrowleft:"left",arrowright:"right",escape:"esc"," ":"space"};function oe(e,t){if(e instanceof KeyboardEvent){if(void 0===e.key)return!1;for(const n in ie)if(t?.includes(ie[n])&&e.key.toLowerCase()!==n)return!1}else{if(t?.includes("left")&&0!==e.button)return!1;if(t?.includes("right")&&2!==e.button)return!1;if(t?.includes("middle")&&1!==e.button)return!1}return(!t?.includes("ctrl")||!1!==e.ctrlKey)&&((!t?.includes("alt")||!1!==e.altKey)&&(!t?.includes("shift")||!1!==e.shiftKey))}function re(e,t){e.output&&e.output.classList.add(t)}function ae(e,t){e.output&&e.output.classList.remove(t)}function he(e){if(e instanceof z.Element||e instanceof z.Component){let t=e instanceof z.Component?e.propValues["append-to"]:e.attributes["append-to"];if(t){if(t instanceof z.Element)return t.output;if("string"==typeof t){ee.ROOT_CONTAINER&&(t="body"===t?ee.ROOT_CONTAINER:`${ee.ROOT_CONTAINER} ${t}`);const e=document.querySelector(t);if(e)return e}R(Q,"Unsupported appendTo type",{appendTo:t,node:e})}}}function de(e,t){for(;e.length<t.length;)e.concat(e);return Math.max(...t.map((t,n)=>ce(t)+ce(e[n])))}function ce(e){return"auto"===e?0:1e3*Number(e.slice(0,-1).replace(",","."))}function le(e,t){let n=e.prev;for(;n;){if(n instanceof z.ListItem==!1)return n;n=n.prev}if(!t){let t=e.parent;for(;t;){if(t instanceof z.Element)return;const e=le(t,!0);if(e)return e;t=t.parent}}}class ue extends HTMLElement{root;constructor(){super(),this.root=this.attachShadow({mode:"open"})}}function fe(e,t){const n=e.childNodes;for(let e=0;e<n.length;e++){const s=n[e];if(1===s.nodeType){const e=s;e.setAttribute("data-scoped-"+t,""),fe(e,t)}}}function pe(e,t){const n=t||[];if("string"==typeof e){const t=e.trim();t&&!n.includes(t)&&n.push(t)}else Array.isArray(e)?e.forEach(e=>pe(e,n)):null!==e&&"object"==typeof e&&Object.entries(e).forEach(([e,t])=>{if(!0===t){const t=e.trim();t&&!n.includes(t)&&n.push(t)}});return n}!customElements.get("joker-html-shadow")&&customElements.define("joker-html-shadow",ue);const me={};function ye(e){for(const t in e)me[t]=e[t]}const ge="Global",ve="Render Core";function Ee(t,n){try{return new Function(e,ge,`return ${t};`)}catch(e){throw new Error(`An unknown error occurred while creating the expression execution method. \nmessage: ${e.message} \n${n?.()||t}`)}}class be{ast;ob;parent;ext;ref="";watchers=[];node;isDestroy=!1;constructor(e,t,n,s){this.ast=e,this.ob=t,this.parent=n,this.ext=s}init(e){this.parser(e),this.afterParser()}beforeDestroy(e){}destroy(e){if(this.isDestroy=!0,this.clearWatchers(),this.parent.childrens&&this.node){(this.node instanceof z.Element||this.node instanceof z.Component)&&this.ext.removeRef(this.node);let t=()=>{this.parent&&this.node&&(this.beforeDestroy(e),this.destroyChildrens(e),this.node&&(this.ext.render?.removeNode(this.node),this.parent.childrens&&m(this.parent.childrens,this.node),this.notifyNodeWatcher("remove"),this.destroyOtherData()))};if(this.ext.nodeTransition(this.node,"leave",void 0,()=>{t()}))return m(this.parent.childrens,this.node),void this.destroyChildrensWatcher(this.node);t()}else this.destroyOtherData()}destroyWathcers(){this.isDestroy=!0,this.clearWatchers(),this.destroyChildrensWatcher(this.node)}destroyOtherData(){this.node&&(this.node[z.PARSERKEY]=void 0),this.node=void 0,this.parent=void 0}destroyChildrens(e){for(;this.node?.childrens?.length;){let t=this.node.childrens[0];t[z.PARSERKEY]?t[z.PARSERKEY].destroy(e):m(this.node.childrens,t)}}destroyChildrensWatcher(e){if(e?.childrens?.length)for(let t of e?.childrens)t[z.PARSERKEY]&&(t[z.PARSERKEY].clearWatchers(),this.destroyChildrensWatcher(t))}appendNode(e){this.parent?.childrens&&this.node&&!this.isDestroy&&(this.node[z.PARSERKEY]=this,this.node instanceof z.Element&&this.ob[qe]?this.node.attributes["data-scoped-"+this.ob[qe]]=void 0:this.node instanceof z.Html&&this.ob[qe]&&(this.node.scopedId=this.ob[qe]),this.ext.render?.appendNode(this.node,e),void 0===e?this.parent.childrens.push(this.node):this.parent.childrens.splice(e,0,this.node),this.notifyNodeWatcher("append"))}afterParser(){this.ext.nodeTransition(this.node,"enter")}notifyNodeWatcher(e,t){this.ext.notifyNodeWatcher(this.ref,this.node,e,t)}runExpress(e,t,n){try{return Ee(e,n).call(t,t,me)}catch(s){C(ve,`Expression error:${s.message}\n`+(n?.()||e),{ob:t}),console.error(s)}}runExpressWithWatcher(e,t,n,s,i){if(this.isDestroy)return;let o="string"==typeof e?Ee(e,i):e,r=new F(()=>{if(this.isDestroy||t[Je])return J;try{return o.call(t,t,me)}catch(n){return C(ve,`Expression error:${n.message}\n${i?.()||e}`,{ob:t,express:e,node:this.node}),console.error(n),J}},n,void 0,s);return this.addWatch(r),r.value===J?void 0:r.value}addWatch(e){!1===this.watchers.includes(e)&&this.watchers.push(e)}clearWatchers(){this.watchers.forEach(e=>{e.destroy()}),this.watchers.length=0}}class we extends be{parser(){this.node=new z.Text(this.ast.text,this.parent),this.appendNode()}}class Ne extends be{parser(){this.node=new z.Comment(this.ast.text,this.parent),this.appendNode()}}class $e extends be{parser(){if(this.node=new z.Condition(this.ast.kind,this.parent),"else"!==this.ast.kind){g(this.ast.condition)&&C("Conditional Command",`The current conditional command ${this.ast.kind} has no judgment condition, please check`);let e=this.runExpressWithWatcher(this.ast.condition,this.ob,e=>{let t=!!e;if(this.node?.result!==t){if(this.node.result=t,!1===t&&this.node?.isShow)this.destroyChildrens(!0);else if(t&&!this.node?.isShow){let e=this.getElseNode();if(e&&e.isShow&&e.childrens?.length){let t=e[z.PARSERKEY];t&&t instanceof $e&&t.renderConditionChildren()}}this.reloadAllCondition()}},!1,()=>this.ast._code);this.node.result=!!e}this.appendNode(),this.renderConditionChildren()}renderId;getElseNode(){let e=this.node?.next;for(;e&&e instanceof z.Condition&&"if"!==e.cmdName;){if("else"===e.cmdName)return e;e=e.next}}renderConditionChildren(){let e=!1;return this.getPrevIfResult()?e=!1:"else"===this.ast.kind?e=!0:(this.node.result=!!this.runExpress(this.ast.condition,this.ob,()=>{this.ast._code}),this.node.result&&(e=!0)),e!==this.node.isShow&&(this.node.isShow=e,this.destroyChildrens(!0),e&&this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob),!0)}getPrevIfResult(){if("if"===this.ast.kind)return!1;let e=this.node?.prev;for(;e&&e instanceof z.Condition;){if(e.result)return!0;if("if"===e.cmdName)break;e=e.prev}return!1}reloadAllCondition(){if(this.renderConditionChildren()){let e=this.node?.next;for(;e&&e instanceof z.Condition&&"if"!==e.cmdName;){let t=e[z.PARSERKEY];t&&t instanceof $e&&t.renderConditionChildren(),e=e.next}}let e=this.node?.next;for(this.node?.result||this.destroyChildrens(!0);e&&e instanceof z.Condition&&"if"!==e.cmdName;){let t=e[z.PARSERKEY];t&&t instanceof $e&&t.renderConditionChildren(),e=e.next}}}class Re extends be{parser(){this.node=new z.List(this.parent),this.appendNode(),this.renderChildrens()}renderChildrens(){switch(this.ast.keyType){case"condition":this.renderConditionChildrens();break;case"in":case"of":this.renderInOrOfChildrens()}}renderConditionChildrens(){let t=this.ast.param,n=Object.create(this.ob),s=!!this.runExpressWithWatcher(function(t,n,s){try{return new Function(e,`${e}.${t}=${n}; return ${s};`)}catch{throw new Error(`Dependency collection for the For loop command expression execution encountered an unknown error. Details: letKey: ${t}, keyVal: ${n}, condition: ${s}`)}}(t.letKey,t.defaultKeyVal,t.condition),n,()=>{this.clearWatchers(),this.renderChildrens()},!0,()=>this.ast._code),i=0;for(;s;){let e=Object.create(this.ob);W(e,t.letKey,n[t.letKey]);let o=i++;this.renderItem(e,o),this.runExpressWithWatcher(()=>n[t.letKey],n,async(n,s,i,r)=>{await Promise.resolve(),r.isDestroy||(e[t.letKey]=n,i||this.updateListItemOb(e,o))},!0,()=>this.ast._code),this.runExpress(t.step,n,()=>{this.ast._code}),s=!!this.runExpress(t.condition,n,()=>this.ast._code)}this.destroyOldChildrens(i)}renderInOrOfChildrens(){let e=this.ast.param,t=this.runExpressWithWatcher(e.dataKey,this.ob,()=>{this.clearWatchers(),this.renderChildrens()},!1,()=>this.ast._code),n=0;if(t&&(Array.isArray(t)||u(t)))for(let s in t){let i=Object.create(this.ob),o=Array.isArray(t)?Number(s):s;e.indexKey&&W(i,e.indexKey,o),e.itemKey&&W(i,e.itemKey,t[s]);let r=n++;this.renderItem(i,r,e.indexKey),e.itemKey&&this.runExpressWithWatcher(()=>t[o],t,async(n,s,a,h)=>{await Promise.resolve(),h.isDestroy||o in t&&(i[e.itemKey]=n,a||this.updateListItemOb(i,r))},!0,()=>this.ast._code)}this.destroyOldChildrens(n)}findIndexByIndex(e,t,n){let s=-1;if(this.node)for(let i=t;i<this.node.childrens.length;i++)if(this.checkObEqual(e,this.node.childrens[i]?.ob,n?[n]:void 0)){s=i;break}return s}renderItem(e,t,n){if(!this.ast.childrens?.length||!this.node)return;let s=this.node.childrens?.[t];if(s){if(this.checkObEqual(e,s.ob,n?[n]:void 0))return void(n&&s.ob[n]!==e[n]&&(s.ob[n]=e[n]));let i=this.findIndexByIndex(e,t+1,n);if(i>-1){if(t+1===i)this.node.childrens?.[t]?.[z.PARSERKEY]?.destroy();else for(let e=0;e<i-t-1;e++)this.node.childrens?.[t]?.[z.PARSERKEY]?.destroy();return this.renderItem(e,t,n)}return new Ce(this.ast,e,this.node,this.ext).init(t)}return new Ce(this.ast,e,this.node,this.ext).init()}updateListItemOb(e,t){if(!this.ast.childrens?.length||!this.node)return;let n=this.node.childrens?.[t];l(e,(e,t)=>{n.ob[e]!==t&&(n.ob[e]=t)})}destroyOldChildrens(e){if(this.node)for(;this.node.childrens.length>e;){let e=this.node.childrens.pop();if(!e)break;e[z.PARSERKEY]?.destroy(!1)}}checkObEqual(e,t,n){let s=!0;return void 0!==t&&(l(e,(e,i)=>{n?.includes(e)||t?.[e]===i||(s=!1)}),s)}}class Ce extends be{parser(e){this.node=new z.ListItem(this.ob,this.parent),this.appendNode(e),this.ast.childrens&&this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}}class xe extends be{parser(){if(g(this.ast.cmdName))throw C("Template Directive","Error occurred while converting AST to VNode: Directive name not found",this.ast),new Error("Error converting AST to VNode: Directive name not found");let e;if("Html"===this.ast.cmdName||"Text"===this.ast.cmdName?e=this.ast.param:this.ast.cmdName.startsWith(ge+".")?e=`${this.ast.cmdName}(${this.ast.param})`:this.ast.cmdName in this.ob&&"function"==typeof this.ob[this.ast.cmdName]&&(e=`${t(this.ast.cmdName)}(${this.ast.param})`),e){let t=this.runExpressWithWatcher(`[${e}]`,this.ob,e=>{this.changeValue(e?.[0])},!1,()=>this.ast._code);return t||=[],"Html"===this.ast.cmdName?this.node=new z.Html(Ae(t[0]),this.parent,t[1]):this.node=new z.Text(Ae(t[0]),this.parent),void this.appendNode()}throw new Error("Command not found: "+this.ast.cmdName)}changeValue(e){this.node&&(this.node instanceof z.Html?this.node.html=Ae(e):this.node.text=Ae(e),this.ext.render?.updateNode(this.node))}}function Ae(e){return null==e||"function"==typeof e?"":e.toString()}const Oe="default";class Se extends be{parser(){let e=this.transformParam();this.node=new z.RenderSection(e.id,this.parent),this.node.params=e.params,this.node.section??=this.ob.$sections?.[e.id],this.appendNode(),this.node.section&&(this.node.section.params?(this.node.ob=Object.create(this.node.section.ob||this.ob),this.node.section.params?.forEach((e,t)=>{W(this.node.ob,e,this.node.params[t])})):this.node.ob=this.node.section.ob||this.ob,(this.node.section.parser||this.ext).parserNodes(this.node.section.asts,this.node,this.node.ob))}transformParam(){if(this.ast.param){let e=this.runExpressWithWatcher(`[${this.ast.param}]`,this.ob,e=>{let t=e?.[0]||Oe;if("string"==typeof t&&t!==this.node.id)throw new Error("The section ID cannot be dynamically changed");this.node.params=e.slice(1),this.node?.ob&&this.node.section&&this.node.section.params?.forEach((e,t)=>{this.node?.ob&&this.node.ob[e]!==this.node.params[t]&&(this.node.ob[e]=this.node.params[t])})},!0,()=>this.ast._code);return{id:e?.[0]||Oe,params:e?.slice(1)||[]}}return{id:Oe,params:[]}}}const Pe="Component Parsing";function Te(e,t){return!!t.components[e]||!!et(e)}class De extends be{loadPromise;parser(){if(this.ast.node)return this.node=this.ast.node,this.node.parent=this.parent,this.initPropData(),void(this.node&&(this.appendNode(),this.node.component?.$mount(this.node)));this.node=new z.Component(this.parent),this.initPropData(),this.appendNode(),this.initEvent(),this.loadPromise=this.renderChildren(),this.ext.promiseQueue.add(this.loadPromise),this.loadPromise.finally(()=>{this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0)})}get canReload(){return"tagName"in this.ast||"function"==typeof this.ast.component}reload(){this.canReload?(this.beforeDestroy(),this.renderChildren()):R(Pe,"Reload operation is not supported for the current component",this.node)}initPropData(){for(let e of this.ast.attributes)if("ref"!==e.name)if("keep-alive"===e.name&&"false"!==e.value&&(this.node.keepalive=!0),e.express){let t=this.runExpressWithWatcher(e.express,this.ob,t=>{this.node.propValues[e.name]=t,this.notifyNodeWatcher("update",e.name)},!0,()=>{if(e.value)return`express:${e.value} \nfrom <${"tagName"in this.ast?this.ast.tagName:"Component"} ${e.name}="${e.value}" ... /> `});this.node.propValues[e.name]=t}else this.node.propValues[e.name]=e.value;else{if(g(e.value)){R(Pe,"The 'ref' value of the element cannot be empty");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}this.node.propValues=K(this.node.propValues)}initEvent(){this.ast.events.forEach(e=>{let t=e.functionName?this.ob[e.functionName]:void 0;void 0===e.functionName?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:E}]):t&&"function"==typeof t?this.node.events.push([e.name,{modifiers:e.modifiers,callBack:n=>{let s=[];e.functionParam&&(s=this.runExpress(`[${e.functionParam}]`,this.ob,()=>{if(e._code){let t=e.modifiers?.join(".");return`express:${e._code} \nfrom: <${"tagName"in this.ast?this.ast.tagName:"Component"} @${e.name}${t?"."+t:""}="${e._code}" ... /> `}})),t.call(this.ext.ob,n,...s)}}]):C(Pe,`The callback method (${e.functionName}) specified for the ${e.name} event in the ${"tagName"in this.ast?this.ast.tagName:""} element was not found. Please check.`)})}async renderChildren(){return new Promise(async(e,t)=>{if("tagName"in this.ast){let e=this.ob.components[this.ast.tagName]||et(this.ast.tagName);if(void 0===e)return void C(Pe,`Failed to render component. Private or global component named '${this.ast.tagName}' not found.`);if(Ge in e||(e=(await e()).default),!this.node)return;{let t=this.getSections();this.node.name=this.ast.tagName,this.node.component=new e(this.node?.propValues,t,this.node?.keepalive)}}else if("function"==typeof this.ast.component){let e=this.getSections();this.node.component=new this.ast.component(this.node?.propValues,e,this.node?.keepalive)}else this.node.component=this.ast.component;if(!this.node)return;!this.node.name&&"name"in this.node.component&&this.node.component.name&&"string"==typeof this.node.component.name&&(this.node.name=this.node.component.name);let n=this,s=function(){n.loadPromise&&e(void 0)};if(this.node.component.$on("mounted",()=>{this.node?.component.$off("beforeDestroy",s),e(void 0)}),this.node.component.$on("beforeDestroy",s),this.node.component.$mount(this.node),!this.node)return;let i=this.node?.component;i.isKeepAlive&&(this.ast.node=this.node)})}getSections(){let t={},s=[];return this.ast.childrens.forEach(t=>{if(t.type===n.NodeType.COMMAND&&"if"===t.cmdName&&t.childrens){let i=t,o=t.childrens.some(e=>e.type===n.NodeType.COMMAND&&"section"===e.cmdName),r=i.condition.startsWith(e+".$sections");if(r){return this.runExpress(i.condition,this.ob,()=>i._code)?void s.push(...t.childrens):void 0}if(o&&"if"===i.kind&&!r)return void R(Pe,"While parsing the section, it was found that this section is wrapped in a conditional statement. This conditional statement only supports if judgments using $sections. It has been excluded.")}s.push(t)}),s.forEach(e=>{if(e.type===n.NodeType.COMMAND&&"section"===e.cmdName){let n=e,s=n.id||Oe;/^(\'|\")(.*?)((\'|\"))$/.test(s)&&(s=s.slice(1,-1)),t[s]=t[s]||{asts:[],ob:this.ob,params:n.paramKeys,parser:this.ext},t[s].asts.push(...e.childrens||[])}else t[Oe]=t[Oe]||{asts:[],ob:this.ob,parser:this.ext},t[Oe].asts.push(e)}),t}beforeDestroy(e){this.loadPromise&&(this.ext.promiseQueue.delete(this.loadPromise),this.loadPromise=void 0),!0===e&&this.node?.component?.isKeepAlive?this.node?.component?.$destroy():(this.node?.component?.$destroy(!0),this.ast.node=void 0)}}class ke extends be{parser(){this.node=new z.Element(this.ast.tagName,this.parent),this.initAttributes(),this.initEvents(),this.appendNode(),this.ext.parserNodes(this.ast.childrens,this.node,this.ob)}initAttributes(){for(let e of this.ast.attributes)if("ref"!==e.name)if(e.express){let t=t=>{this.node&&(this.node.attributes[e.name]=this.transformAttrVal(t),this.ext.render?.updateNode(this.node,e.name),this.notifyNodeWatcher("update",e.name))},n=this.runExpressWithWatcher(e.express,this.ob,e=>{t(e)},!1,()=>{if(e.value)return`express:${e.value} \nfrom <${this.ast.tagName} ${e.name}="${e.value}" ... /> `});this.node.attributes[e.name]=this.transformAttrVal(n)}else this.node.attributes[e.name]=e.value;else{if(g(e.value)){R("Element","The 'ref' value of the element cannot be empty");continue}this.ref=e.value,this.ext.addRef(e.value,this.node)}}initEvents(){for(let e of this.ast.events){let t=e.functionName?this.ob[e.functionName]:void 0;if(!(void 0===e.functionName||t&&"function"==typeof t))throw new Error(`The callback method (${e.functionName}) specified for the ${e.name} event in the ${this.ast.tagName} element was not found. Please check.`);this.node?.events.push([e.name,{modifiers:e.modifiers,callBack:n=>{if(void 0===t)return;let s=[];e.functionParam&&(s=this.runExpress(`[${e.functionParam}]`,this.ob,()=>{if(e._code){let t=e.modifiers?.join(".");return`express:${e._code}\nfrom <${this.ast.tagName} @${e.name}${t?"."+t:""}="${e._code}" ... /> `}})),t&&t.call(this.ext.ob,n,...s)}}])}}transformAttrVal(e){return void 0!==e&&("string"==typeof e||"boolean"==typeof e||"function"!=typeof e&&Object.prototype.toString()?e:void 0)}}class _e{asts;ob;root=new z.Root;refs={};sleeped=!1;promiseQueue=new Set;nodeWatcherEvents={};render;constructor(e,t,n){this.asts=e,this.ob=t,this.root.component=t,this.render=q.get(ee.IRENDERIOCTAGID)??new ee.DomRender,n&&n instanceof z.Node&&(this.root.parent=n,n.childrens??=[],n.childrens.push(this.root))}parser(){this.parserNodes(this.asts,this.root)}mount(e){this.sleeped&&this.weakup(),this.render?.mount(e)}parserNodes(e,t,s){if(0!==this.asts.length)for(let i of e)if(i.type===n.NodeType.TEXT)new we(i,s??this.ob,t,this).init();else if(i.type===n.NodeType.COMMENT)new Ne(i,s??this.ob,t,this).init();else if(i.type===n.NodeType.COMPONENT)new De(i,s??this.ob,t,this).init();else if(i.type===n.NodeType.ELEMENT){let e=i;Te(e.tagName,s??this.ob)?new De(e,s??this.ob,t,this).init():new ke(e,s??this.ob,t,this).init()}else if(i.type===n.NodeType.COMMAND){let e=i;switch(e.cmdName){case"if":case"elseif":case"else":new $e(e,s??this.ob,t,this).init();break;case"for":new Re(e,s??this.ob,t,this).init();break;case"RenderSection":new Se(e,s??this.ob,t,this).init();break;case"section":break;default:new xe(e,s??this.ob,t,this).init()}}}addRef(e,t){this.refs[e]=this.refs[e]||[],this.refs[e].push(t),t.ref=e}removeRef(e){for(let t in this.refs)this.refs[t].includes(e)&&m(this.refs[t],e)}addNodeWatcher(e,t){this.nodeWatcherEvents[e]=this.nodeWatcherEvents[e]||[],this.nodeWatcherEvents[e].push(t)}removeNodeWatcher(e,t){m(this.nodeWatcherEvents[e]||[],t)}notifyNodeWatcher(e,t,n,s){this.nodeWatcherEvents[e]?.forEach(e=>{e(t,n,s)})}sleep(e){let t=e||this.root;t.childrens?.forEach(e=>{let t=()=>{e.childrens&&this.sleep(e),e.sleep=!0,this.render?.removeNode(e,!0)};this.nodeTransition(e,"leave",void 0,()=>{t()})||t()}),void 0===e&&(this.sleeped=!0)}weakup(e){let t=e||this.root;t.childrens?.forEach(e=>{e.sleep=!1,this.render?.appendNode(e),e.childrens&&this.weakup(e),this.nodeTransition(e,"enter")}),void 0===e&&(this.sleeped=!1)}destroy(e){for(;this.root.childrens.length;){let t=this.root.childrens[0];t[z.PARSERKEY]?t[z.PARSERKEY].destroy(e):m(this.root.childrens,t)}this.render.destroy(),this.refs={},this.root.childrens.length=0,this.nodeWatcherEvents={},this.asts.length=0}destroyWathcers(){for(let e of this.root.childrens)e[z.PARSERKEY]&&e[z.PARSERKEY].destroyWathcers()}reSetAsts(e,t){this.destroy(t),this.render=q.get(ee.IRENDERIOCTAGID)??new ee.DomRender,this.asts=e}nodeTransition(e,t,n,s,i){if(e&&e.parent?.childrens&&(e instanceof z.Element||e instanceof z.Component)){let o=function(e){if(e instanceof z.Element||e instanceof z.Component){let t=e instanceof z.Element?e.attributes:e.propValues;return{name:t["transition-name"],type:t["transition-type"]}}}(e);if(n??=o?.name,i??=o?.type,!n)return!1;let r=Ke(e);if(r)return"enter"===t?this.render.elementToEnter(r,n,i,()=>{let t=e[z.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-enter"),s?.()}):this.render.elementToLeave(r,n,i,()=>{let t=e[z.PARSERKEY];t&&t.ref&&this.notifyNodeWatcher(t.ref,e,"after-leave"),s?.()}),!0;R("Render Core","Incomplete data found when executing node animation, please check")}return!1}}function Ke(e){if(e instanceof z.Element)return e;if(e.childrens&&e.childrens.length)for(let t of e.childrens)return t instanceof z.Element?t:Ke(t)}function We(e,t,n){if(void 0===t)return;const s=Array.isArray(n)?n:[n];for(const e of s){if(e===Array&&Array.isArray(t))return t;if(typeof t===e.name.toLowerCase())return t}switch(s[0]){case Number:const e=Number(t);if(!isNaN(e))return e;break;case String:return String(t)}throw new Error(`The type of ${e.toString()} in props does not match the constrained type`)}function Ie(e,t,n){let s,i,o;if("symbol"!=typeof t&&(s=v(t)),t in e?i=e[t]:s&&(i=e[s]),n&&(t in n?o=n[t]:s&&s in n&&(o=n[s])),void 0!==o){if(u(o)&&("type"in o||"required"in o||"default"in o||"validate"in o)){const e=o;if(e.required&&void 0===i)throw new Error(`props key:${t.toString()} is required, please check`);if(e.type&&(i=We(t,i,e.type)),e.validate&&!1===e.validate(i))throw new Error(`Validation failed for props key ${t.toString()}`);i=i??e.default}else i=Ve(o)?We(t,i,o):i??o;return i}return i}function Ve(e){return!![String,Array,Number,Object,Function,Boolean].includes(e)||!!Array.isArray(e)&&Ve(e[0])}function Me(e,t){if(!e.constructor)return!1;let n=Object.getOwnPropertyDescriptor(e.constructor.prototype,t);return n&&n.get}const je="Component",Le=Symbol.for("JOKER_PROPS_DATA_KEY"),Ye=Symbol.for("JOKER_PROPS_DATA_PROXY"),Be=Symbol.for("JOKER_PRIVATE_WATCHERS"),He=Symbol.for("JOKER_EVENT_DATA_KEY"),Je=Symbol.for("JOKER_IS_DESTROY"),Fe=Symbol.for("JOKER_PARSER_TEMPLATE_TARGET"),qe=Symbol.for("JOKER_SCOPE_ID"),Ge=Symbol.for("JOKER_COMPONENT_TAG"),ze=Symbol();let Qe=["constructor","$mount","$nodeTransition","$destroy","$getRef","$getRefs","$syncProp","$watchNode","$watch","$on","$off","$trigger","$render","created","mounted","beforeDestroy","sleeped","wakeup","destroyed"];class Ue{$sections;isKeepAlive;static[Ge]=!0;[qe];model={};template;$root;isSleeped=!1;components={};propsOption;[Le]={};[Fe];[Ye];[Be]=[];[He]=new Map;[Je]=!1;[ze]=!1;constructor(e,t={},n){this.$sections=t,this.isKeepAlive=n,this[Le]=e||{}}get props(){if(void 0===this[Ye]){let e=this;this[Ye]=new Proxy(e[Le],{get:(t,n)=>Ie(e[Le],n,e.propsOption),set(){throw new Error("props parameters are not allowed to be changed, only one-way data transfer is allowed")}})}return this[Ye]}$mount(e){if(!1===this[ze]){let e=()=>{let e=[],t=Object.getPrototypeOf(this);for(;null!==t&&t!==Object.prototype;)Object.getOwnPropertyNames(t).forEach(n=>{!1!==Qe.includes(n)||Me(t,n)||"function"!=typeof t[n]||t[n].prototype?.hasOwnProperty("constructor")||e.push(n)}),t=Object.getPrototypeOf(t);return e};for(let t of e())this[t]=this[t].bind(this);this[ze]=!0}if(this.$root=e,this.isKeepAlive&&this.isSleeped)return this.isSleeped=!1,this[Fe]&&this.$root?(this[Fe].mount(this.$root),this.wakeup(),this.$trigger("wakeup"),this.$rootVNode&&nt(this.$rootVNode),this):(C(je,"When attempting to wake up the current component, it was found that the rendering handler has been destroyed. The wake-up operation cannot proceed.",[this,this.$root]),this);this.isSleeped=!1,this.model=K(this.model);let t=this.created(),n=async()=>{this.$trigger("created"),this.template&&this.$render(),await this.$nextUpdatedRender(),this[Je]||(await this.mounted(),this[Je]||this.$trigger("mounted"))};return t&&t instanceof Promise?t.then(()=>{this[Je]||n()}):n(),this}$nextUpdatedRender(e){if(this[Je])return;let t=[...this[Fe]?.promiseQueue||[]],n=this.$rootVNode?.find(e=>e instanceof z.Component);if(n?.forEach(e=>{e?.component&&t.push(...e.component[Fe]?.promiseQueue||[])}),t.length)return Promise.all(t).finally(()=>{this[Je]||e?.()});this[Je]||e?.()}$nodeTransition(e,t,n,s,i){if("string"==typeof e){let t=this.$getRef(e);if(!t)return void C(je,`Node with ref=${e} not found when executing node animation`);e=t}this[Fe]?.nodeTransition(e,t,n,s,i)}$destroy(e){if(!e&&this.isKeepAlive)return this[Fe]?.sleep(),this.isSleeped=!0,this.sleeped(),this.$trigger("sleeped"),void(this.$rootVNode&&tt(this.$rootVNode));this[Je]=!0;for(let e of this[Be])e.destroy();this[Be].length=0,this[Fe]?.destroyWathcers(),this.beforeDestroy(),this.$trigger("beforeDestroy"),this[Fe]?.destroy(),this[Fe]=void 0,this.template&&Array.isArray(this.template)&&(this.template.length=0),this.$trigger("destroy"),this[He].clear(),this.$root=void 0,this.isSleeped=!1,this.$sections={},this[Ye]=void 0,this[Le]={},this.destroyed()}get $refs(){return this[Fe]?.refs||{}}$getRef(e){return this.$refs[e]?.[0]}$getRefs(e){return this.$refs[e]}$syncProp(e,t,n){"function"==typeof t&&(n=t,t=void 0),t??=e,n??=e=>e,this.model[t]=n(this.props[e]),this.$watch(()=>this.props[e],()=>{this.model[t]=n?.(this.props[e])})}get $rootVNode(){return this[Fe]?.root}$watchNode(e,t){if(this[Fe])return this[Fe]?.addNodeWatcher(e,t),()=>{this[Fe]?.removeNodeWatcher(e,t)};R(je,"Component is not yet mounted. Node observation and monitoring cannot be performed.")}$watch(e,t,n){let s=new F(()=>{if(this[Je]){for(let e of this[Be])e.destroy();return J}return e()},(e,n)=>{this[Je]||t(e,n)},void 0,n);return this[Be].push(s),[s.value,()=>{s.destroy(),m(this[Be],s)}]}$on(e,t){let n=this[He].get(e);void 0===n&&(n=new Set,this[He].set(e,n)),!1===n?.has(t)&&n.add(t)}$off(e,t){let n=this[He].get(e);n&&(t?n.delete(t):n.clear())}get $listeners(){let e={};for(let t in this[He])e[t]||=[],e[t].push(...Array.from(this[He].get(t)||[]));if(this.$root&&this.$root instanceof z.Component)for(let t of this.$root.events){let n=t[0];e[n]||=[],e[n].push(t[1].callBack)}return e}$trigger(e,t,n){if(!this.$root)return;let s={eventName:e,stopPropagation:n?.stopPropagation??(()=>{}),preventDefault:n?.preventDefault??(()=>{}),data:t,target:n?.target??this.$rootVNode,event:n?.event};if(this.$rootVNode&&this.$rootVNode.parent&&this.$rootVNode.parent instanceof z.Component&&!1===this[Fe]?.render.triggerEvent(this.$rootVNode.parent,e,s))return;let i=this[He].get(e);i?.size&&[...i].forEach(e=>{e(s)});let o=this[He].get("*");o?.size&&[...o].forEach(e=>{e(s)})}$render(e,t){e??=this.template,this.template="function"==typeof e?e(s):e,this.$root&&(this.template??=[],this[Fe]?.reSetAsts(this.template,t),this[Fe]??=new _e(this.template,this,this.$root),this[Fe].parser(),this.$root&&this[Fe].mount(this.$root))}created(){}mounted(){}beforeDestroy(){}sleeped(){}wakeup(){}destroyed(){}}const Xe={};function Ze(e,t){if("string"==typeof e)t&&(Xe[e]=t);else for(let t in e)Xe[t]=e[t]}function et(e){return Xe[e]}function tt(e){e.childrens?.forEach(e=>{e instanceof z.Component&&e.component?.sleeped(),tt(e)})}function nt(e){e.childrens?.forEach(e=>{e instanceof z.Component&&e.component?.wakeup(),nt(e)})}class st extends Ue{template=[];cache=new Map;async mounted(){this.$watch(()=>this.props.name,async e=>{this.$render([],!0),await Promise.resolve(),this.$root&&this.loadComponent(e)}),await this.loadComponent(this.props.name)}propsVaule;created(){this.initProps()}initProps(){let e={};this.props.props||(Object.keys(this.props).forEach(t=>{!1!==this.filterProps(t)&&(e[t]=this.props[t],this.$watch(()=>this.props[t],()=>{this.propsVaule[t]=this.props[t]}))}),this.propsVaule=K(e))}filterProps(e){if("string"!=typeof e)return!1;let t=v(e);return"transition-name"!==t&&"name"!==t&&"keep-alive"!==t&&"ref"!==t&&void 0}async loadComponent(e){if(!e)return void this.$render([],this.isKeepAlive);let t;if(this.isKeepAlive){let t=this.cache.get(e);if(t)return void this.$render([i(t,{"transition-name":this.props["transition-name"]})],!0)}let n=this.$rootVNode?.parent?.[z.PARSERKEY]?.ob.components,s=n?.[e];void 0===s&&(s=et(e)),s?(Ge in s||(s=(await s()).default),t=new s(this.props.props||this.propsVaule,this.$sections,this.isKeepAlive),t.$on("*",e=>{this.$trigger(e.eventName,e.data,e)}),this.isKeepAlive&&this.cache.set(e,t),this.$render([i(t,{"transition-name":this.props["transition-name"]})],this.isKeepAlive)):R("component",`Component ${e} not found`)}beforeDestroy(){this.removeCache()}removeCache(e){if(e){let t=this.cache.get(e);this.cache.delete(e),t&&t.$destroy(!0)}else this.cache.forEach(e=>{e.$destroy(!0)}),this.cache.clear()}}class it extends Ue{template=function(){return[o("RenderSection")]};async mounted(){await this.$nextUpdatedRender()}}Ze({template:it,component:st});class ot{eventDatas=new Map;on(e,t){let n=this.eventDatas.get(e);void 0===n&&(n=[],this.eventDatas.set(e,n));const s={callBack:t};return n.push(s),()=>{n&&m(n,s)}}once(e,t){let n=this.eventDatas.get(e);void 0===n&&(n=[],this.eventDatas.set(e,n));const s={callBack:t,once:!0};return n.push(s),()=>{n&&m(n,s)}}off(e,t){if(void 0!==e)if(t){const n=this.eventDatas.get(e),s=n?.find(e=>e.callBack===t);s&&m(n,s)}else this.eventDatas.delete(e);else this.eventDatas.clear()}async trigger(e,t){let n=[...this.eventDatas.get(e)||[]];if(n.push(...this.eventDatas.get("*")||[]),n&&n.length){let s=0,i=0,o=!1;for(;n[s];){const r=n[s],a=await r.callBack({stopPropagation:()=>o=!0,callTimes:i,eventName:e},t);if(r.once?m(n,r):s++,!1===a||o)return!1}}}}export{J as BREAK_WATCH_UPDATE,Ue as Component,st as ComponentContainer,O as Dep,ot as EventBus,q as IContainer,Je as IS_DESTROY,Ge as JOKER_COMPONENT_TAG,G as JOKER_VNODE_TAG,S as OBJECTPROXY_DEPID,Fe as PARSER_TEMPLATE_TARGET,_e as ParserTemplate,ee as Render,qe as SCOPE_ID,V as ShallowObserver,it as Template,z as VNode,F as Watcher,me as __GLONAL_FUNTIONS__,d as __JOKER_HMR_RUNTIME,Y as combinedReply,W as defineObserverProperty,et as getGlobalComponent,B as isObserverData,K as observer,Ze as registerGlobalComponent,ye as registerGlobalFunction};
|