{"version":3,"sources":["jsdelivr-header.js","/npm/ziko@1.0.0/dist/ziko.mjs"],"names":[],"mappings":"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AAK,UAAU,EACnB,EAGJ,MAAM,KAAO,IAAI,IAAU,IAAI,UAAU,GAEnC,SAAW,CACf,IACA,MACA,UACA,OACA,UACA,QACA,QACA,IACA,OACA,MACA,MACA,aACA,KACA,SACA,SACA,UACA,OACA,OACA,MACA,WACA,OACA,WACA,KACA,MACA,UACA,MACA,SACA,MACA,KACA,KACA,KACA,QACA,WACA,aACA,SACA,SACA,OACA,KACA,KACA,KACA,KACA,KACA,KACA,SACA,SACA,KACA,IACA,SACA,MACA,QACA,MACA,MACA,QACA,SACA,KACA,OACA,MACA,OACA,OACA,QACA,MACA,SACA,KACA,WACA,SACA,SACA,IACA,QACA,UACA,MACA,WACA,IACA,KACA,KACA,OACA,IACA,OACA,SACA,UACA,SACA,QACA,SACA,OACA,SACA,MACA,UACA,MACA,QACA,QACA,KACA,WACA,WACA,QACA,KACA,QACA,OACA,QACA,KACA,QACA,IACA,KACA,MACA,QACA,OAGI,QAAU,CACZ,MAAO,IAAK,OAAQ,SAAU,MAAO,QAAS,SAC9C,OAAQ,SAAU,UAAW,OAAQ,WAAY,UAAW,OAC5D,OAAQ,QAAS,WAAY,WAAY,cAAe,eAAgB,QAAS,WACjF,iBAAkB,iBAAkB,UAAW,aAC/C,SAAU,UAAW,gBAAiB,sBAAuB,cAAe,mBAC5E,oBAAqB,oBAAqB,eAAgB,UAAW,UAAW,UAAW,UAAW,UACtG,iBAAkB,UAAW,UAAW,cAAe,eAAgB,WAAY,qBACnF,SAAU,eACV,UAAW,gBAAiB,mBAAoB,MAChD,SACA,OAAQ,QAAS,WAAY,iBAG3B,WAAa,CACjB,OAAQ,aACR,SACA,QACA,KACA,cACA,KACA,KAAM,QACN,UAAW,WAAY,cACvB,QAAS,OACT,KAAM,YAAa,SAAU,QAAS,SAAU,OAAQ,OAAQ,UAChE,SAAU,MAAO,QAAS,MAC1B,SAAU,cAMN,KAAO,IAAI,MAAM,CAAC,EAAG,CACzB,GAAA,CAAI,EAAQ,GACV,GAAoB,iBAAT,EAAmB,OAC9B,IACI,EADA,EAAM,EAAK,WAAW,IAAI,KAAK,cAKnC,OAHG,SAAS,S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","file":"/npm/ziko@1.0.0/dist/ziko.mjs","sourceRoot":"","sourcesContent":["/**\n * Minified by jsDelivr using Terser v5.39.0.\n * Original file: /npm/ziko@1.0.0/dist/ziko.mjs\n *\n * Do NOT use SRI with dynamically generated files! More information: https://www.jsdelivr.com/using-sri-with-dynamic-files\n */\n","\n/*\n  Project: ziko.js\n  Author: Zakaria Elalaoui\n  Date : Thu Feb 26 2026 13:06:11 GMT+0000 (UTC)\n  Git-Repo : https://github.com/zakarialaoui10/ziko.js\n  Git-Wiki : https://github.com/zakarialaoui10/ziko.js/wiki\n  Released under MIT License\n*/\n\nconst { PI: PI$1, E } = Math;\r\nconst EPSILON=Number.EPSILON;\n\nconst is_primitive = value => typeof value !== 'object' && typeof value !== 'function' || value === null;\n\nconst mapfun=(fun,...X)=>{\r\n    const Y=X.map(x=>{\r\n        if(is_primitive(x) || x?.__mapfun__) return fun(x)\r\n        if(x instanceof Array) return x.map(n=>mapfun(fun,n));\r\n        if(ArrayBuffer.isView(x)) return x.map(n=>fun(n));\r\n        if(x instanceof Set) return new Set(mapfun(fun,...[...x]));\r\n        if(x instanceof Map) return new Map([...x].map(n=>[n[0],mapfun(fun,n[1])]));\r\n        if(x.isMatrix?.()) return new x.constructor(x.rows, x.cols, mapfun(x.arr.flat(1)))\r\n        else if(x instanceof Object){\r\n            return Object.fromEntries(\r\n                Object.entries(x).map(\r\n                    n=>n=[n[0],mapfun(fun,n[1])]\r\n                )\r\n            )\r\n        }\r\n    });\r\n   return Y.length==1? Y[0]: Y; \r\n};\r\n\r\nconst apply_fun = (x, fn) => {\r\n    if (x.isComplex?.()) return new x.constructor(\r\n        fn(x.a),\r\n        fn(x.b)\r\n    )\r\n    if (x.isMatrix?.()) return new x.constructor(\r\n        x.rows,\r\n        x.cols,\r\n        x.arr.flat(1).map(fn)\r\n    )\r\n    if (x instanceof Array) mapfun(fn, ...x);\r\n    return fn(x)\r\n};\n\nconst base2base = (value, fromBase, toBase) => {\r\n\r\n    const dec = parseInt(value, fromBase);\r\n    if (Number.isNaN(dec)) throw new TypeError('Invalid value for the given base');\r\n\r\n    return dec.toString(toBase);\r\n};\n\nconst arithmetic_helper=(op, x, y)=>{\r\n    if(typeof x === 'number'){\r\n        if(typeof y === 'number'){\r\n            switch(op){\r\n                case 'add' : return x + y;\r\n                case 'sub' : return x - y;\r\n                case 'mul' : return x * y;\r\n                case 'div' : return x / y;\r\n                case 'modulo' : return x % y;\r\n            }\r\n        }\r\n        if(y?.isComplex?.()) x = new y.constructor(x, 0);\r\n        if(y?.isMatrix?.()) x = y.constructor.nums(y.rows, y.cols, x);\r\n        return x[op](y)\r\n    }\r\n    if(x?.isComplex?.()){\r\n        if(typeof y === 'number' || y?.isComplex?.()) return x.clone()[op](y);\r\n        if(y?.isMatrix?.()){\r\n            x = y.constructor.nums(y.rows, y.cols, x);\r\n            return x.clone()[op](y)\r\n        }\r\n    }\r\n    if(x?.isMatrix?.()){\r\n        return x.clone()[op](y)\r\n    }    \r\n};\r\nconst add=(a,...b)=>{\r\n    let res = a;\r\n    for(let i=0; i<b.length; i++)\r\n        res = arithmetic_helper('add', res, b[i]);\r\n    return res;\r\n};\r\nconst sub=(a,...b)=>{\r\n    let res = a;\r\n    for(let i=0; i<b.length; i++)\r\n        res = arithmetic_helper('sub', res, b[i]);\r\n    return res;\r\n};\r\nconst mul=(a,...b)=>{\r\n    let res = a;\r\n    for(let i=0; i<b.length; i++)\r\n        res = arithmetic_helper('mul', res, b[i]);\r\n    return res;\r\n};\r\nconst div=(a,...b)=>{\r\n    let res = a;\r\n    for(let i=0; i<b.length; i++)\r\n        res = arithmetic_helper('div', res, b[i]);\r\n    return res;\r\n};\r\nconst modulo=(a,...b)=>{\r\n    let res = a;\r\n    for(let i=0; i<b.length; i++)\r\n        res = arithmetic_helper('modulo', res, b[i]);\r\n    return res;\r\n};\n\nconst min = (...x) => Math.min(...x);\r\nconst max = (...x) => Math.max(...x);\r\n\r\nconst binomial = (n, k) =>{\r\n  if(n !== Math.floor(n)) return TypeError('n must be an integer');\r\n  if(k !== Math.floor(k)) return TypeError('k must be an integer');\r\n  if (n < 0) return TypeError('n must be non-negative');\r\n  if (k < 0 || n < 0 || k > n) return 0;\r\n  if (k > n - k) k = n - k;\r\n    let c = 1, i;\r\n    for (i = 0; i < k; i++)\r\n        c = c * (n - i) / (i + 1);\r\n    return c;\r\n};\r\n\r\nconst mean = (...x) => x.reduce((a, b) => a + b) / x.length;\r\n\r\nconst variance = (...x) => {\r\n  const n = x.length;\r\n  if (n === 0) return NaN;\r\n  const x_mean = mean(...x);\r\n  return x.reduce((sum, xi) => sum + (xi - x_mean) ** 2, 0) / n;\r\n};\r\n\r\nconst std = (...x) => Math.sqrt(variance(...x));\r\n\r\nconst accum_sum = (...x) => {\r\n  let result = [];\r\n  let total = 0, i, n = x.length;\r\n  for(i = 0; i < n ; i++){\r\n    total = add(total, x[i]);\r\n    result.push(total);\r\n  }\r\n  return result;\r\n};\r\n\r\nconst accum_prod = (...x) => {\r\n  let result = [];\r\n  let prod = 1, i, n = x.length;\r\n  for(i = 0; i < n ; i++){\r\n    prod = mul(prod, x[i]);\r\n    result.push(prod);\r\n  }\r\n  return result;\r\n};\r\n\r\nconst percentile = (X, p) => {\r\n  if (X.length === 0) \r\n    return NaN;\r\n  let a = [...X].sort((x, y) => x - y);\r\n  let index = (p / 100) * (a.length - 1);\r\n  let i = Math.floor(index);\r\n  let f = index - i;\r\n  if (i === a.length - 1) \r\n    return a[i]; \r\n  return a[i] * (1 - f) + a[i + 1] * f;\r\n};\r\n\r\nconst median = X => percentile(X, 50);\n\nclass Random {\r\n    static int(a, b){\r\n        return Math.floor(this.float(a, b));\r\n    }\r\n    static float(a, b){\r\n        return b !== undefined\r\n            ? Math.random() * (b - a) + a\r\n            : Math.random() * a;\r\n    }\r\n    static bin(){\r\n        return this.int(2);\r\n    }\r\n    static oct(){\r\n        return this.int(8);\r\n    }\r\n    static dec(){\r\n        return this.int(10);\r\n    }\r\n    static hex(){\r\n        return base2base(this.int(16), 10, 16);\r\n    }\r\n    static char(upperCase = false){\r\n        const i = upperCase\r\n            ? this.int(65, 91)\r\n            : this.int(97, 123);\r\n        return String.fromCharCode(i);\r\n    }\r\n    static bool(){\r\n        return Boolean(this.int(2));\r\n    }\r\n    static get color(){\r\n        return {\r\n            hex : () =>\r\n                `#${this.int(0xffffff).toString(16).padStart(6, '0')}`,\r\n\r\n            hexa : () => {\r\n                const [r,g,b,a] = Array.from(\r\n                    {length:4},\r\n                    () => this.int(0xff).toString(16).padStart(2,'0')\r\n                );\r\n                return `#${r}${g}${b}${a}`;\r\n            },\r\n            rgb : () => {\r\n                const [r,g,b] = Array.from({length:3}, () => this.int(0xff));\r\n                return `rgb(${r}, ${g}, ${b})`;\r\n            },\r\n            rgba : () => {\r\n                const [r,g,b] = Array.from({length:3}, () => this.int(0xff));\r\n                const a = Math.random().toFixed(2);\r\n                return `rgba(${r}, ${g}, ${b}, ${a})`;\r\n            },\r\n            hsl : () => {\r\n                const h = this.int(360);\r\n                const s = this.int(100);\r\n                const l = this.int(100);\r\n                return `hsl(${h}, ${s}%, ${l}%)`;\r\n            },\r\n            hsla : () => {\r\n                const h = this.int(360);\r\n                const s = this.int(100);\r\n                const l = this.int(100);\r\n                const a = Math.random().toFixed(2);\r\n                return `hsla(${h}, ${s}%, ${l}%, ${a})`;\r\n            },\r\n            gray : () => {\r\n                const g = this.int(0xff);\r\n                return `rgb(${g}, ${g}, ${g})`;\r\n            }\r\n        };\r\n    }\r\n    static get sample(){\r\n        const R = this;\r\n        return {\r\n            int   : (n,a,b) => Array.from({length:n}, () => R.int(a,b)),\r\n            float : (n,a,b) => Array.from({length:n}, () => R.float(a,b)),\r\n            char  : (n,upper=false) => Array.from({length:n}, () => R.char(upper)),\r\n            bool  : n => Array.from({length:n}, () => R.bool()),\r\n            bin   : n => Array.from({length:n}, () => R.bin()),\r\n            oct   : n => Array.from({length:n}, () => R.oct()),\r\n            dec   : n => Array.from({length:n}, () => R.dec()),\r\n            hex   : n => Array.from({length:n}, () => R.hex()),\r\n            get color(){\r\n                return {\r\n                    hex  : n => Array.from({length:n}, () => R.color.hex()),\r\n                    hexa : n => Array.from({length:n}, () => R.color.hexa()),\r\n                    rgb  : n => Array.from({length:n}, () => R.color.rgb()),\r\n                    rgba : n => Array.from({length:n}, () => R.color.rgba()),\r\n                    hsl  : n => Array.from({length:n}, () => R.color.hsl()),\r\n                    hsla : n => Array.from({length:n}, () => R.color.hsla()),\r\n                    gray : n => Array.from({length:n}, () => R.color.gray())\r\n                };\r\n            },\r\n            choice : (n, choices, p) =>\r\n                Array.from({length:n}, () => R.choice(choices, p))\r\n        };\r\n    }\r\n    static shuffle(arr){\r\n        return [...arr].sort(() => 0.5 - Math.random());\r\n    }\r\n    static choice(choices = [1,2,3], p = new Array(choices.length).fill(1 / choices.length)){\r\n        const acc = accum_sum(...p).map(v => v * 100);\r\n        const pool = new Array(100);\r\n        pool.fill(choices[0], 0, acc[0]);\r\n        for(let i=1;i<choices.length;i++)\r\n            pool.fill(choices[i], acc[i-1], acc[i]);\r\n        return pool[this.int(pool.length)];\r\n    }\r\n}\r\n\r\n\r\nglobalThis.Random = Random;\r\n\r\n// // (upperCase) => upperCase ? : String.fromCharCode(rand_int(97,120))\r\n// class Random {\r\n//     static string(length,upperCase){\r\n//         return length instanceof Array?\r\n//             new Array(this.int(...length)).fill(0).map(() => this.char(upperCase)).join(\"\"):\r\n//             new Array(length).fill(0).map(() => this.char(upperCase)).join(\"\");\r\n//     }\r\n\r\n// }\r\n// export{Random}\n\nconst complex_constructor = (Complex, a, b) => {\r\n    let _a, _b;\r\n  if (a instanceof Complex) {\r\n    _a = a.a;\r\n    _b = a.b;\r\n  } \r\n  else if (typeof a === \"object\") {\r\n    if (\"a\" in a && \"b\" in a) {\r\n      _a = a.a;\r\n      _b = a.b;\r\n    } \r\n    else if (\"a\" in a && \"z\" in a) {\r\n      _a = a.a;\r\n      _b = Math.sqrt(a.z ** 2 - a.a ** 2);\r\n    } \r\n    else if (\"a\" in a && \"phi\" in a) {\r\n      _a = a.a;\r\n      _b = a.a * Math.tan(a.phi);\r\n    } \r\n    else if (\"b\" in a && \"z\" in a) {\r\n      _b = a.b;\r\n      _a = Math.sqrt(a.z ** 2 - a.b ** 2);\r\n    } \r\n    else if (\"b\" in a && \"phi\" in a) {\r\n      _b = b;\r\n      _a = a.b / Math.tan(a.phi);\r\n    } \r\n    else if (\"z\" in a && \"phi\" in a) {\r\n      _a = +a.z * Math.cos(a.phi).toFixed(15);\r\n      _b = +a.z * Math.sin(a.phi).toFixed(15);\r\n    }\r\n  } \r\n  else if (typeof a === \"number\" && typeof b === \"number\") {\r\n    _a = +a.toFixed(32);\r\n    _b = +b.toFixed(32);\r\n  }\r\n  return [_a, _b]\r\n};\n\nclass Complex{\r\n    constructor(a = 0, b = 0) {\r\n        [\r\n            this.a,\r\n            this.b\r\n        ] = complex_constructor(Complex, a, b);\r\n    }\r\n    get __mapfun__(){\r\n        return true\r\n    }\r\n    isComplex(){\r\n        return true\r\n    }\r\n    toString(){\r\n        let str = \"\";\r\n        if (this.a !== 0)\r\n          this.b >= 0\r\n            ? (str = `${this.a}+${this.b}*i`)\r\n            : (str = `${this.a}-${Math.abs(this.b)}*i`);\r\n        else\r\n          this.b >= 0\r\n            ? (str = `${this.b}*i`)\r\n            : (str = `-${Math.abs(this.b)}*i`);\r\n        return str;\r\n    }\r\n    serialize() {\r\n        return JSON.stringify({\r\n            type : 'complex',\r\n            data : this\r\n        });\r\n    }\r\n    static deserialize(json){\r\n        if(typeof json === 'string') json = JSON.parse(json);\r\n        let {data, type} = json;\r\n        return (type === 'complex' && ('a' in data) && ('b' in data))\r\n            ? new Complex(data.a, data.b)\r\n            : TypeError('Not a valid complex')\r\n    } \r\n    toFixed(n){\r\n        this.a = + this.a.toFixed(n);\r\n        this.b = + this.b.toFixed(n);\r\n        return this; \r\n    }  \r\n    toPrecision(n){\r\n        this.a = + this.a.toPrecision(n);\r\n        this.b = + this.b.toPrecision(n);\r\n        return this; \r\n    }  \r\n    clone() {\r\n        return new Complex(this.a, this.b);\r\n    }\r\n    get z(){\r\n        return Math.hypot(this.a,this.b);    \r\n    }\r\n    get phi(){\r\n        return Math.atan2(this.b , this.a);        \r\n    }\r\n    static zero() {\r\n        return new Complex(0, 0);\r\n    }\r\n    static fromPolar(z, phi) {\r\n        return new Complex(\r\n            +(z * cos(phi)).toFixed(13), \r\n            +(z * sin(phi)).toFixed(13)\r\n        );\r\n    }\r\n    \r\n    static get random(){\r\n        return {\r\n            int : (a, b)=> new Complex(...Random.sample.int(2, a, b) ),\r\n            float : (a, b)=> new Complex(...Random.sample.float(2, a, b) ),\r\n        }\r\n    }\r\n    static twiddle(K, N){\r\n        const phi = -2 * Math.PI * K / N;\r\n        return new Complex(\r\n            Math.cos(phi), \r\n            Math.sin(phi)\r\n        );\r\n    }\r\n    get conj() {\r\n        return new Complex(this.a, -this.b);\r\n    }\r\n    get inv() {\r\n        return new Complex(\r\n            this.a / Math.hypot(this.a, this.b),\r\n            -this.b / Math.hypot(this.a, this.b)\r\n        );\r\n    }\r\n    add(...c) {\r\n        for (let i = 0; i < c.length; i++) {\r\n            if (typeof c[i] === \"number\") c[i] = new Complex(c[i], 0);\r\n            this.a += c[i].a;\r\n            this.b += c[i].b;\r\n        }\r\n        return this;\r\n    }\r\n    sub(...c) {\r\n        for (let i = 0; i < c.length; i++) {\r\n            if (typeof c[i] === \"number\") c[i] = new Complex(c[i], 0);\r\n            this.a -= c[i].a;\r\n            this.b -= c[i].b;\r\n        }\r\n        return this;\r\n    }\r\n    mul(...c){\r\n        let {z, phi} = this;\r\n        for (let i = 0; i < c.length; i++) {\r\n            if (typeof c[i] === \"number\") c[i] = new Complex(c[i], 0);\r\n            z *= c[i].z;\r\n            phi += c[i].phi;\r\n        }\r\n        this.a = z * Math.cos(phi);\r\n        this.b = z * Math.sin(phi);  \r\n        return this.toFixed(8);\r\n    }\r\n    div(...c){\r\n        let {z, phi} = this;\r\n        for (let i = 0; i < c.length; i++) {\r\n            if (typeof c[i] === \"number\") c[i] = new Complex(c[i], 0);\r\n            z /= c[i].z;\r\n            phi -= c[i].phi;\r\n        }\r\n        this.a = z * Math.cos(phi);\r\n        this.b = z * Math.sin(phi);  \r\n        return this.toFixed(8);    }\r\n    modulo(...c) {\r\n        for (let i = 0; i < c.length; i++) {\r\n            if (typeof c[i] === \"number\") c[i] = new Complex(c[i], 0);\r\n            this.a %= c[i].a;\r\n            this.b %= c[i].b;\r\n        }\r\n        return this;\r\n    }\r\n    pow(...c){\r\n        let {z, phi} = this;\r\n        for (let i = 0; i < c.length; i++) {\r\n            if (typeof c[i] === \"number\") c[i] = new Complex(c[i], 0);\r\n            z *= Math.exp(c[i].a * Math.log(z) - c[i].b * phi);\r\n            phi += c[i].b * Math.log(z) + c[i].a * phi;\r\n        }\r\n        this.a = z * Math.cos(phi);\r\n        this.b = z * Math.sin(phi);  \r\n        return this;\r\n    }\r\n    get expo() {\r\n        return [this.z, this.phi];\r\n    }\r\n    nthr(n=2){\r\n        return complex({z: this.z ** (1/n), phi: this.phi / n});\r\n    }\r\n    get sqrt(){\r\n        return this.nthr(2);\r\n    }\r\n    get cbrt(){\r\n        return this.nthr(3);\r\n    }\r\n    get log(){\r\n        return complex(this.z, this.phi);\r\n    }\r\n    get cos(){\r\n        return complex(\r\n            Math.cos(this.a) * Math.cosh(this.b),\r\n            Math.sin(this.a) * Math.sinh(this.b)\r\n        )\r\n    }\r\n    get sin(){\r\n        return complex(\r\n            Math.sin(this.a) * Math.cosh(this.b),\r\n            Math.cos(this.a) * Math.sinh(this.b)\r\n        )\r\n    }\r\n    get tan(){\r\n        const D=cos(this.a*2)+cosh(this.b*2);\r\n        return complex(\r\n            Math.sin(2 * this.a) / D,\r\n            Math.sinh(2 * this.b) / D\r\n        );\r\n    }\r\n}\r\nconst complex=(a,b)=>{\r\n    if((a instanceof Array||ArrayBuffer.isView(a)) && (b instanceof Array||ArrayBuffer.isView(a)))return a.map((n,i)=>complex(a[i],b[i]));\r\n    if(a.isMatrix?.() && b.isMatrix?.()){\r\n        if((a.shape[0]!==b.shape[0])||(a.shape[1]!==b.shape[1]))return Error(0)\r\n        const arr=a.arr.map((n,i)=>complex(a.arr[i],b.arr[i]));\r\n        return new a.constructor(a.rows,a.cols,...arr)\r\n    }\r\n    return new Complex(a,b)\r\n};\n\nconst PRECESION = 8;\r\n\r\nconst abs = (...x) => mapfun(\r\n    x =>{\r\n        if(x.isComplex?.()) return x.z;\r\n        return Math.abs(x)\r\n    },\r\n    ...x\r\n);\r\n\r\nconst pow$1 = (...x) => {\r\n    const n = x.pop();\r\n    return mapfun(\r\n        x => {\r\n            if(x.isComplex?.()) {\r\n                if(n.isComplex?.()) return new x.constructor({\r\n                    z: Math.exp(n.a * Math.log(x.z) - n.b * x.phi),\r\n                    phi: n.b * Math.log(x.z) + n.a * x.phi\r\n                })\r\n                return new x.constructor({z: x.z ** n, phi: x.phi * n});\r\n            }\r\n            if(n.isComplex?.()) return new x.constructor({\r\n                    z: Math.exp(n.a * Math.log(x)),\r\n                    phi: n.b * Math.log(x)\r\n            })\r\n            return Math.pow(x, n)\r\n        },\r\n        ...x\r\n    )\r\n};\r\n\r\nconst sqrt$2 = (...x) => mapfun(\r\n    x=>{\r\n        if(x.isComplex?.()) \r\n            return new x.constructor({z: x.z**(1/2), phi: x.phi/2});\r\n        if(x < 0) return complex(0, Math.sqrt(-x)).toFixed(PRECESION)\r\n        return + Math.sqrt(x).toFixed(PRECESION);\r\n    },\r\n    ...x\r\n);\r\n\r\nconst cbrt = (...x) => mapfun(\r\n    x=>{\r\n        if(x.isComplex?.()) \r\n            return new x.constructor({z: x.z**(1/3), phi: x.phi/3}).toFixed(PRECESION)\r\n        return + Math.cbrt(x).toFixed(PRECESION);\r\n    },\r\n    ...x\r\n);\r\n\r\nconst nthr = (...x) => {\r\n    const n = x.pop();\r\n    if(typeof n !== 'number') throw Error('nthr expects a real number n');\r\n    return mapfun(\r\n        x => {\r\n            if(x.isComplex?.()) return new x.constructor({z: x.z ** (1/n), phi: x.phi / n});\r\n            if(x<0) return n %2 ===2 \r\n                ? complex(0, (-x)**(1/n)).toFixed(PRECESION)\r\n                : + (-1 * (-x)**(1/n)).toFixed(PRECESION)                \r\n            return + (x**(1/n)).toFixed(PRECESION)\r\n        },\r\n        ...x\r\n    )\r\n};\r\n\r\nconst croot = (...x) =>{\r\n    const c = x.pop();\r\n    if(!c.isComplex?.()) throw Error('croot expect Complex number as root')\r\n    return mapfun(\r\n        x => {\r\n            if(typeof x === 'number') x = new c.constructor(x, 0);\r\n            const {a : c_a, b : c_b} = c;\r\n            const {z, phi} = x;\r\n            const D = Math.hypot(c_a, c_b);\r\n            const A = Math.exp((Math.log(z)*c_a + phi*c_b)/D);\r\n            const B = (phi*c_a - Math.log(z)*c_b)/D;\r\n            return new c.constructor(\r\n                A * Math.cos(B),\r\n                A * Math.sin(B)\r\n            ).toFixed(PRECESION)\r\n        },\r\n        ...x\r\n    )\r\n};\r\n\r\nconst exp$1 = (...x) => mapfun(\r\n    x => {\r\n        if(x.isComplex?.()) return new x.constructor(\r\n            Math.exp(x.a) * Math.cos(x.b),\r\n            Math.exp(x.a) * Math.sin(x.b)\r\n        ).toFixed(PRECESION);\r\n        return + Math.exp(x).toFixed(PRECESION)\r\n    }\r\n    ,...x\r\n);\r\n\r\nconst ln = (...x) => mapfun(\r\n    x => {\r\n        if(x.isComplex?.()) return new x.constructor(\r\n            Math.log(x.z),\r\n            x.phi\r\n        ).toFixed(PRECESION);\r\n        return + Math.log(x).toFixed(PRECESION)\r\n    }\r\n    ,...x\r\n);\r\n\r\nconst sign = (...x) => mapfun(\r\n    x => {\r\n        if(x.isComplex?.()){\r\n            const {z, phi} = x;\r\n            if(z===0) return new x.constructor(0, 0);\r\n            return new x.constructor({z:1, phi})\r\n        }\r\n        return Math.sign(x)\r\n    }\r\n    ,...x\r\n);\r\n\r\nconst floor = (...x) => mapfun(\r\n    x => {\r\n        if(x.isComplex?.()) return new x.constructor(\r\n            Math.floor(x.a),\r\n            Math.floor(x.b)\r\n        )\r\n        return Math.floor(x)\r\n    },\r\n    ...x\r\n);\r\nconst ceil = (...x) => mapfun(\r\n    x => {\r\n        if(x.isComplex?.()) return new x.constructor(\r\n            Math.ceil(x.a),\r\n            Math.ceil(x.b)\r\n        )\r\n        return Math.ceil(x)\r\n    },\r\n    ...x\r\n);\r\nconst round = (...x) => mapfun(\r\n    x => {\r\n        if(x.isComplex?.()) return new x.constructor(\r\n            Math.round(x.a),\r\n            Math.round(x.b)\r\n        )\r\n        return Math.round(x)\r\n    },\r\n    ...x\r\n);\r\n\r\nconst trunc = (...x) => mapfun(\r\n    x => {\r\n        if(x.isComplex?.()) return new x.constructor(\r\n            Math.trunc(x.a),\r\n            Math.trunc(x.b)\r\n        )\r\n        return Math.trunc(x)\r\n    },\r\n    ...x\r\n);\r\n\r\nconst fract = (...x) => mapfun(\r\n    x => {\r\n        if(x.isComplex?.()) return new x.constructor(\r\n            x.a - Math.trunc(x.a),\r\n            x.b - Math.trunc(x.b)\r\n        )\r\n        return x - Math.trunc(x)\r\n    },\r\n    ...x\r\n);\r\n\r\nconst cos$3 = (...x) => mapfun(\r\n    x => {\r\n        if(x.isComplex?.()) return new x.constructor(\r\n            Math.cos(x.a) * Math.cosh(x.b),\r\n            -Math.sin(x.a) * Math.sinh(x.b)\r\n        ).toFixed(PRECESION);\r\n        return + Math.cos(x).toFixed(PRECESION)\r\n    }\r\n    ,...x\r\n);\r\n\r\nconst sin$3 = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex) return new x.constructor(\r\n            Math.sin(x.a) * Math.cosh(x.b),\r\n            Math.cos(x.a) * Math.sinh(x.b)\r\n        ).toFixed(PRECESION);\r\n        return + Math.sin(x).toFixed(PRECESION)\r\n    }\r\n    , ...x\r\n);\r\n\r\nconst tan = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex){\r\n            const D = Math.cos(2*x.a) + Math.cosh(2*x.b);\r\n            return new x.constructor(\r\n                Math.sin(2*x.a) / D,\r\n                Math.sinh(2*x.b) / D\r\n            ).toFixed(PRECESION);\r\n        } \r\n        return + Math.tan(x).toFixed(PRECESION)\r\n    },\r\n    ...x\r\n);\r\n\r\nconst sec = (...x) => mapfun(\r\n    x => {\r\n        if(x.isComplex?.()) ;\r\n        return + (1 / Math.cos(x)).toFixed(PRECESION)\r\n    }\r\n    ,...x\r\n);\r\n\r\nconst acos$1 = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex){\r\n            const { a, b } = x;\r\n            const Rp = Math.hypot(a + 1, b);\r\n            const Rm = Math.hypot(a - 1, b);\r\n            globalThis.Rp = Rp;\r\n            globalThis.Rm = Rm;\r\n            return new x.constructor(\r\n                Math.acos((Rp - Rm) / 2),\r\n                -Math.acosh((Rp + Rm) / 2),\r\n            ).toFixed(PRECESION)\r\n        } \r\n        return + Math.acos(x).toFixed(PRECESION) \r\n    },\r\n    ...x\r\n);\r\n\r\nconst asin = (...x) => mapfun(\r\n    x => {\r\n        if(x?.isComplex){\r\n            const { a, b } = x;\r\n            const Rp = Math.hypot(a + 1, b);\r\n            const Rm = Math.hypot(a - 1, b);\r\n            return new x.constructor(\r\n                Math.asin((Rp - Rm) / 2), \r\n                Math.acosh((Rp + Rm) / 2)\r\n            ).toFixed(PRECESION);\r\n        }\r\n        return + Math.asin(x).toFixed(PRECESION);\r\n    },\r\n    ...x\r\n);\r\n\r\nconst atan = (...x) => mapfun(\r\n    x => {\r\n        if(x?.isComplex){\r\n            const { a, b } = x;\r\n            return new x.constructor(\r\n                Math.atan((a*2/(1-a**2-b**2)))/2,\r\n                Math.log((a**2 + (1+b)**2)/(a**2 + (1-b)**2))/4\r\n            ).toFixed(PRECESION)\r\n        }\r\n        return + Math.atan(x).toFixed(PRECESION);\r\n    },\r\n    ...x\r\n);\r\n\r\nconst acot = (...x) => mapfun(\r\n    x => {\r\n        if(x?.isComplex){\r\n            const { a, b } = x;\r\n            return new x.constructor(\r\n                Math.atan(2*a/(a**2+(b-1)*(b+1)))/2,\r\n                Math.log((a**2 + (b-1)**2)/(a**2 + (b+1)**2))/4   \r\n            ).toFixed(PRECESION)\r\n        }\r\n        return + (Math.PI/2 - Math.atan(x)).toFixed(PRECESION);\r\n    },\r\n    ...x\r\n);\r\n\r\n\r\nconst cosh$2 = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex) return new x.constructor(\r\n            Math.cosh(x.a) * Math.cos(x.b),\r\n            Math.sinh(x.a) * Math.sin(x.b)\r\n        ).toFixed(PRECESION); \r\n        return + Math.cosh(x).toFixed(PRECESION)\r\n    },\r\n    ...x\r\n);\r\nconst sinh$1 = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex) return new x.constructor(\r\n            Math.sinh(x.a) * Math.cos(x.b),\r\n            Math.cosh(x.a) * Math.sin(x.b)\r\n        ).toFixed(PRECESION); \r\n        return + Math.sinh(x).toFixed(PRECESION)\r\n    },\r\n    ...x\r\n);\r\nconst tanh = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex){\r\n            const D = Math.cosh(2*a) + Math.cos(2*b);\r\n            return new x.constructor(\r\n                Math.sinh(2*a) / D,\r\n                Math.sin(2*b) / D\r\n            ).toFixed(PRECESION)\r\n        } \r\n        return + Math.tanh(x).toFixed(PRECESION)\r\n    },\r\n    ...x\r\n);\r\n\r\nconst coth = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex){\r\n            const {a, b} = x;\r\n            const D = (Math.sinh(a)**2)*(Math.cos(b)**2) + (Math.cosh(a)**2)*(Math.sin(b)**2); \r\n            return new x.constructor(\r\n                Math.cosh(a) * Math.sinh(a) / D,\r\n                - Math.sin(b) * Math.cos(b) / D\r\n            ).toFixed(PRECESION)\r\n        } \r\n        return + (1 / Math.tanh(x)).toFixed(PRECESION)\r\n    },\r\n    ...x\r\n);\r\n\r\nconst acosh = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex){\r\n            return ln(x.clone().add(sqrt$2(x.clone().mul(x.clone()).sub(1))))\r\n        } \r\n        return + Math.acosh(x).toFixed(PRECESION)\r\n    },\r\n    ...x\r\n);\r\n\r\nconst asinh = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex){\r\n            return ln(x.clone().add(sqrt$2(x.clone().mul(x.clone()).add(1))))\r\n        } \r\n        return + Math.asinh(x).toFixed(PRECESION)\r\n    },\r\n    ...x\r\n);\r\n\r\nconst atanh = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex); \r\n        return + Math.atanh(x).toFixed(PRECESION)\r\n    },\r\n    ...x\r\n);\r\n\r\nconst sig = (...x) => mapfun(\r\n    x =>{\r\n        if(x?.isComplex); \r\n        return 1/(1 + Math.exp(-x)).toFixed(PRECESION)\r\n    },\r\n    ...x\r\n);\n\nconst deg2rad = (...deg) => mapfun(x => x * Math.PI / 180, ...deg);\r\nconst rad2deg = (...rad) => mapfun(x => x / Math.PI * 180, ...rad);\r\n\r\nconst norm = (x, min, max) => apply_fun(\r\n    x, \r\n    v => min !== max ? (v - min) / (max - min) : 0\r\n);\r\nconst lerp = (x, min, max) => apply_fun(\r\n    x, \r\n    v => (max - min) * v + min\r\n);\r\nconst clamp = (x, min, max) => apply_fun(\r\n    x, \r\n    v => Math.min(Math.max(v, min), max)\r\n);\r\nconst map$1 = (x, a, b, c, d) => apply_fun(\r\n    x, \r\n    v => lerp(norm(v, a, b), c, d)\r\n);\r\n\r\nconst hypot = (...x) => {\r\n  const c0 = x.find(a => a.isComplex?.());\r\n  if (c0) {\r\n    const W = x.map(n => n.isComplex?.() ? n : new c0.constructor(n, 0));\r\n    return Math.hypot(...W.map(c => c.z));\r\n  }\r\n  return Math.hypot(...x);\r\n};\r\n\r\n\r\nconst atan2 = (y, x, rad = true) => {\r\n    if (y instanceof Array && !(x instanceof Array))\r\n        return mapfun(n => atan2(n, x, rad), ...y);\r\n\r\n    if (x instanceof Array && !(y instanceof Array))\r\n        return mapfun(n => atan2(y, n, rad), ...x);\r\n\r\n    if (y instanceof Array && x instanceof Array)\r\n        return y.map((v, i) => atan2(v, x[i], rad));\r\n\r\n    const phi = Math.atan2(y, x);\r\n    return rad ? phi : phi * 180 / Math.PI;\r\n};\n\nconst not = x => {\r\n    if(x.isComplex?.()) return new x.constructor(not(x.a), not(x.b))\r\n    if(x.isMatrix?.()) return new x.constructor(x.rows, x.cols, x.arr.flat(1).map(not))\r\n    return + !x;\r\n};\r\nconst handle_complex_and_matrix = (x, operation) => {\r\n    if (x.every(n => n.isComplex?.())) {\r\n        const Re = x.map(n => n.a);\r\n        const Im = x.map(n => n.b);\r\n        return new x[0].constructor(\r\n            operation(...Re),\r\n            operation(...Im)\r\n        );\r\n    }\r\n\r\n    if (x.every(n => n.isMatrix?.())) {\r\n        if (!x.every(mat => mat.rows === x[0].rows && mat.cols === x[0].cols)) {\r\n            return TypeError('All matrices must have the same shape');\r\n        }\r\n\r\n        const { rows, cols } = x[0];\r\n        const Y = Array.from({ length: rows }, (_, i) =>\r\n            Array.from({ length: cols }, (_, j) =>\r\n                operation(...x.map(mat => mat.arr[i][j]))\r\n            )\r\n        );\r\n        return new x[0].constructor(Y);\r\n    }\r\n\r\n    return null;  // Return null if no Complex or Matrix found\r\n};\r\n\r\nconst and = (...x) => {\r\n    const result = handle_complex_and_matrix(x, and);\r\n    if (result !== null) return result;\r\n    return x.reduce((n, m) => (n &= m), 1);\r\n};\r\n\r\nconst or = (...x) => {\r\n    const result = handle_complex_and_matrix(x, or);\r\n    if (result !== null) return result;\r\n    return x.reduce((n, m) => (n |= m), 0);\r\n};\r\n\r\nconst xor = (...x) => {\r\n    const result = handle_complex_and_matrix(x, xor);\r\n    if (result !== null) return result;\r\n    return x.reduce((n, m) => (n ^= m), 0);\r\n};\r\n\r\nconst nand = (...x) => not(and(...x));\r\nconst nor = (...x) => not(or(...x));\r\nconst xnor = (...x) => not(xor(...x));\n\nconst matrix_constructor = (Matrix, rows, cols, element) => {\r\n  if (rows instanceof Matrix) {\r\n    arr = rows.arr;\r\n    rows = rows.rows;\r\n    cols = rows.cols;\r\n  } \r\n  else {\r\n    let arr = [], i, j;\r\n    if (rows instanceof Array) {\r\n        arr = rows;\r\n        rows = arr.length;\r\n        cols = arr[0].length;\r\n    } \r\n    else {\r\n      for (i = 0; i < rows; i++) {\r\n        arr.push([]);\r\n        arr[i].push(new Array(cols));\r\n        for (j = 0; j < cols; j++) {\r\n          arr[i][j] = element[i * cols + j];\r\n          if (element[i * cols + j] == undefined) arr[i][j] = 0;\r\n        }\r\n      }\r\n    }\r\n    return [\r\n        rows,\r\n        cols,\r\n        arr\r\n    ]\r\n  }\r\n};\n\nconst maintain_indexes = (Matrix, oldRows) =>{\r\n    for (let i = 0; i < Matrix.arr.length; i++) {\r\n        Object.defineProperty(Matrix, i, {\r\n            value: Matrix.arr[i],\r\n            writable: true,\r\n            configurable: true,\r\n            enumerable: false\r\n        });\r\n    }\r\n    for (let i = Matrix.arr.length; i < oldRows; i++) {\r\n        delete Matrix[i];\r\n    }\r\n};\n\nfunction matrix_inverse(M) {\r\n    if(M.row !== M.cols) throw Error('is not a square matrix\"')\r\n    if (M.det === 0) throw Error(\"determinant should not equal 0\");\r\n    const { arr } = M;\r\n    if (arr.length !== arr[0].length) return;\r\n    var i = 0, ii = 0, j = 0, dim = arr.length, e = 0;\r\n    var I = [], C = [];\r\n    for (i = 0; i < dim; i += 1) {\r\n        I[I.length] = [];\r\n        C[C.length] = [];\r\n        for (j = 0; j < dim; j += 1) {\r\n            if (i == j) I[i][j] = 1;\r\n            else I[i][j] = 0;\r\n            C[i][j] = arr[i][j];\r\n        }\r\n    }\r\n    for (i = 0; i < dim; i += 1) {\r\n        e = C[i][i];\r\n        if (e == 0) {\r\n            for (ii = i + 1; ii < dim; ii += 1) {\r\n                if (C[ii][i] != 0) {\r\n                    for (j = 0; j < dim; j++) {\r\n                        e = C[i][j];\r\n                        C[i][j] = C[ii][j];\r\n                        C[ii][j] = e;\r\n                        e = I[i][j];\r\n                        I[i][j] = I[ii][j];\r\n                        I[ii][j] = e;\r\n                    }\r\n                    break;\r\n                }\r\n            }\r\n            e = C[i][i];\r\n            if (e == 0) return;\r\n        }\r\n        for (j = 0; j < dim; j++) {\r\n            C[i][j] = C[i][j] / e;\r\n            I[i][j] = I[i][j] / e;\r\n        }\r\n        for (ii = 0; ii < dim; ii++) {\r\n            if (ii == i) {\r\n                continue;\r\n            }\r\n            e = C[ii][i];\r\n            for (j = 0; j < dim; j++) {\r\n                C[ii][j] -= e * C[i][j];\r\n                I[ii][j] -= e * I[i][j];\r\n            }\r\n        }\r\n    }\r\n    return new M.constructor(I);\r\n}\n\nfunction matrix_det(M) {\r\n    if (!M.isSquare) return new Error(\"is not square matrix\");\r\n    if (M.rows == 1) return M.arr[0][0];\r\n    function determinat(M) {\r\n        if (M.length == 2) {\r\n            if (M.flat(1).some((n) => n?.isMatrix?.())) {\r\n                console.warn(\"Tensors are not completely supported yet ...\");\r\n                return;\r\n            }\r\n            return sub(mul(M[0][0],M[1][1]),mul(M[0][1],M[1][0]))\r\n        }\r\n        var answer = 0;\r\n        for (var i = 0; i < M.length; i++) {\r\n            //console.log(M[0][i]);\r\n            /*answer = answer.add(\r\n                pow(-1, i)\r\n                    .mul(M[0][i])\r\n                    .mul(determinat(deleteRowAndColumn(M, i)))\r\n            );*/\r\n            //const to_be_added=add(mul(pow(-1, i),mul(M[0][i],determinat(deleteRowAndColumn(M, i)))));\r\n            const to_be_added=add(mul(pow$1(-1, i),mul(M[0][i],determinat(deleteRowAndColumn(M, i)))));\r\n            answer=add(answer,to_be_added);\r\n        }\r\n        return answer;\r\n    }\r\n    return determinat(M.arr);\r\n}\r\nfunction deleteRowAndColumn(M, index) {\r\n    var temp = [];\r\n    for (let i = 0; i < M.length; i++) temp.push(M[i].slice(0));\r\n    temp.splice(0, 1);\r\n    for (let i = 0; i < temp.length; i++) temp[i].splice(index, 1);\r\n    return temp;\r\n}\n\nfunction hstack(M1, M2){\r\n    M1 = M1.clone();\r\n    M2 = M2.clone();\r\n    if (M1.rows !== M2.rows) return;\r\n    let newArr = M1.arr;\r\n    for (let i = 0; i < M1.rows; i++) \r\n        for (let j = M1.cols; j < M1.cols + M2.cols; j++) \r\n            newArr[i][j] = M2.arr[i][j - M1.cols];\r\n    M1.cols += M2.cols;\r\n    return new M1.constructor(M1.rows, M1.cols, newArr.flat(1));\r\n}\r\n\r\nfunction vstack(M1, M2){\r\n    M1 = M1.clone();\r\n    M2 = M2.clone();\r\n    if (M1.cols !== M2.cols) return;\r\n    let newArr = M1.arr;\r\n    for (let i = M1.rows; i < M1.rows + M2.rows; i++) {\r\n        newArr[i] = [];\r\n        for (let j = 0; j < M1.cols; j++) newArr[i][j] = M2.arr[i - M1.rows][j];\r\n    }\r\n    M1.rows += M2.rows;\r\n    return new M1.constructor(M1.rows, M1.cols, newArr.flat(1));\r\n}\n\nclass Matrix{\r\n    constructor(rows, cols, element = [] ) {\r\n        [\r\n            this.rows, \r\n            this.cols, \r\n            this.arr\r\n        ] = matrix_constructor(Matrix, rows, cols, element);\r\n        maintain_indexes(this);\r\n    }\r\n    isMatrix(){\r\n        return true\r\n    }\r\n    clone() {\r\n        return new Matrix(this.rows, this.cols, this.arr.flat(1));\r\n    }\r\n    toComplex(){\r\n        this.arr = mapfun(\r\n            x => x?.isComplex?.() ? x : new Complex(x, 0),\r\n            ...this.arr\r\n        );\r\n        maintain_indexes(this);\r\n        return this;\r\n    }\r\n    [Symbol.iterator]() {\r\n      return this.arr[Symbol.iterator]();\r\n    }\r\n    get size() {\r\n        return this.rows * this.cols;\r\n    } \r\n    get shape() {\r\n        return [this.rows, this.cols];\r\n    }\r\n    // toString(){\r\n    //     return arr2str(this.arr,false);\r\n    // }\r\n    at(i = 0, j = undefined) {\r\n        if(i < 0) i += this.rows;\r\n        if(i < 0 || i >= this.rows) throw new Error('Row index out of bounds');\r\n        if(j === undefined) return this.arr[i];\r\n        if(j < 0) j += this.cols;\r\n        if(j < 0 || j >= this.cols) throw new Error('Column index out of bounds');\r\n        return this.arr[i][j];\r\n    }\r\n    slice(r0=0, c0=0, r1 = this.rows-1, c1 = this.cols-1) {\r\n        if(r1 < 0) r1 = this.rows + r1;\r\n        if(c1 < 0 ) c1 = this.cols + c1;\r\n        let newRow = r1 - r0,\r\n            newCol = c1 - c0;\r\n        let newArr = new Array(newCol);\r\n        for (let i = 0; i < newRow; i++) {\r\n            newArr[i] = [];\r\n            for (let j = 0; j < newCol; j++) \r\n                newArr[i][j] = this.arr[i + r0][j + c0];\r\n        }\r\n        this.arr = newArr;\r\n        maintain_indexes(this.rows);\r\n        this.rows = newRow;\r\n        this.cols = newCol;\r\n        return this;\r\n    }\r\n    reshape(newRows, newCols) {\r\n        if(!(newRows * newCols === this.rows * this.cols)) throw Error('size not matched');\r\n        const oldRows = this.rows;\r\n        Object.assign(this, new Matrix(newRows, newCols, this.arr.flat(1)));\r\n        maintain_indexes(oldRows);\r\n        return this;\r\n    }\r\n    get T() {\r\n        let transpose = [];\r\n        for (let i = 0; i < this.arr[0].length; i++) {\r\n            transpose[i] = [];\r\n            for (let j = 0; j < this.arr.length; j++) \r\n                transpose[i][j] = this.arr[j][i];\r\n        }\r\n        return new Matrix(this.cols, this.rows, transpose.flat(1));\r\n    }\r\n    get det() {\r\n        return matrix_det(this)\r\n    }\r\n    get inv() {\r\n        return matrix_inverse(this)\r\n    }\r\n    // normalize names\r\n    static eye(size) {\r\n        let result = new Matrix(size, size);\r\n        for (let i = 0; i < size; i++) \r\n            for (let j = 0; j < size; j++) i === j ? (result.arr[i][j] = 1) : (result.arr[i][j] = 0);\r\n        return result;\r\n    }\r\n    static zeros(rows, cols) {\r\n        let result = new Matrix(rows, cols);\r\n        for (let i = 0; i < rows; i++) \r\n            for (var j = 0; j < cols; j++) result.arr[i][j] = 0;\r\n        return result;\r\n    }\r\n    static ones(rows, cols) {\r\n        let result = new Matrix(rows, cols);\r\n        for (let i = 0; i < rows; i++) \r\n            for (let j = 0; j < cols; j++) result.arr[i][j] = 1;\r\n        return result;\r\n    }\r\n    static nums(rows, cols, number) {\r\n        let result = new Matrix(rows, cols);\r\n        for (let i = 0; i < rows; i++) \r\n            for (let j = 0; j < cols; j++) result.arr[i][j] = number;\r\n        return result;\r\n    }\r\n    static get random(){\r\n        return {\r\n            int : (r, c, a, b)=> new Matrix(\r\n                r,\r\n                c,\r\n                Random.sample.int(r*c, a, b)\r\n            ),\r\n            float : (r, c, a,)=> new Matrix(\r\n                r,\r\n                c,\r\n                Random.sample.float(r*c, a, b)\r\n            ),\r\n        }\r\n    }\r\n    get range(){\r\n        return {\r\n            map : (xmin, xmax, ymin, ymax) => {\r\n                this.arr = map$1(this.arr, xmin, xmax, ymin, ymax);\r\n                return this;\r\n            },\r\n            norm : (min, max) => {\r\n                this.arr = norm(this.arr, min, max);\r\n                return this;\r\n            },\r\n            lerp : (min, max) => {\r\n                this.arr = lerp(this.arr, min, max);\r\n                return this;\r\n            },\r\n            clamp : (min, max) => {\r\n                this.arr = clamp(this.arr, min, max);\r\n                return this;\r\n            },\r\n\r\n        }\r\n    }\r\n    hstack(...matrices) {\r\n        const M=[this, ...matrices].reduce((a,b)=>hstack(a, b));\r\n        Object.assign(this, M);\r\n        maintain_indexes(this);\r\n        return this;\r\n    }\r\n    vstack(...matrices){\r\n        const M=[this, ...matrices].reduce((a,b)=>vstack(a, b));\r\n        Object.assign(this, M);\r\n        maintain_indexes(this);\r\n        return this;\r\n    }\r\n    hqueue(...matrices){\r\n        const M=[this, ...matrices].reverse().reduce((a,b)=>hstack(a, b));\r\n        Object.assign(this, M);\r\n        maintain_indexes(this);\r\n        return this;\r\n    }\r\n    vqueue(...matrices){\r\n        const M=[this,...matrices].reverse().reduce((a, b)=>vstack(a, b));\r\n        Object.assign(this, M);\r\n        maintain_indexes(this);\r\n        return this;\r\n    }\r\n    forEach(fn){\r\n        this.arr.flat(1).forEach(fn);\r\n        return this;\r\n    }\r\n    forEachRow(fn){\r\n        this.arr.forEach(fn);\r\n        return this;\r\n    }\r\n    forEachCol(fn){\r\n        this.clone().T.forEachRow(fn);\r\n        return this\r\n    }\r\n    map(fn){\r\n        const arr = this.arr.flat(1).map(fn);\r\n        return new Matrix(\r\n            this.rows, \r\n            this.cols,\r\n            arr\r\n        )\r\n    }\r\n    mapRows(fn = ()=>{}){\r\n        this.arr = this.arr.map(fn);\r\n        return this;\r\n    }\r\n    mapCols(fn){\r\n        return this.clone().T.mapRows(fn).T;\r\n    }\r\n    sort(fn = ()=>{}){\r\n        const arr = this.arr.flat(1).sort(fn);\r\n        return new Matrix(\r\n            this.rows, \r\n            this.cols,\r\n            arr\r\n        )  \r\n    }\r\n    shuffle(){\r\n        return this.sort(() => 0.5-Math.random())\r\n    }\r\n    sortRows(fn = ()=>{}){\r\n        this.arr = this.arr.map(row => row.sort(fn));\r\n        return this;\r\n    }\r\n    shuffleRows(){\r\n        return this.sortRows(() => 0.5-Math.random())\r\n    }\r\n    sortCols(fn){\r\n        return this.clone().T.sortRows(fn).T;\r\n    }\r\n    shuffleCols(){\r\n        return this.sortCols(() => 0.5-Math.random())\r\n    }\r\n    reduce(fn, initialValue){\r\n        const value = initialValue \r\n            ? this.arr.flat(1).reduce(fn, initialValue) \r\n            : this.arr.flat(1).reduce(fn);\r\n        return new Matrix([[value]])\r\n    }\r\n    reduceRows(fn, initialValue){\r\n        const values = initialValue \r\n            ? this.arr.map(row => row.reduce(fn, initialValue)) \r\n            : this.arr.map(row => row.reduce(fn)); \r\n        return new Matrix(1, this.cols, values)\r\n    }\r\n    reduceCols(fn, initialValue){\r\n        return this.T.reduceRows(fn, initialValue).T\r\n    }\r\n    filterRows(fn){\r\n        const mask = this.arr.map(n => n.some(m => fn(m)));\r\n        const arr = [];\r\n        let i;\r\n        for(i = 0; i < mask.length; i++)\r\n            if(mask[i]) arr.push(this.arr[i]);\r\n        return new Matrix(arr)\r\n    }\r\n    filterCols(fn){\r\n        const arr = this.T.filterRows(fn);\r\n        return new Matrix(arr).T\r\n    }\r\n    every(fn){\r\n        return this.arr.flat(1).every(fn)\r\n    }\r\n    everyRow(fn){\r\n        return this.arr.map(n => n.every(fn))\r\n    }\r\n    everyCol(fn){\r\n        return this.T.arr.map(n => n.every(fn))\r\n    }\r\n    some(fn){\r\n        return this.arr.flat(1).some(fn)\r\n    }\r\n    someRow(fn){\r\n        return this.arr.map(n => n.some(fn))\r\n    }\r\n    someCol(fn){\r\n        return this.T.arr.map(n => n.some(fn))\r\n    }\r\n    // Checkers\r\n    get isSquare() {\r\n        return this.rows === this.cols;\r\n    }\r\n    get isSym() {\r\n        if (!this.isSquare) return false;\r\n        for (let i = 0; i < this.rows; i++) {\r\n            for (let j = i + 1; j < this.cols; j++) {\r\n                if (this.arr[i][j] !== this.arr[j][i]) return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n    get isAntiSym() {\r\n        if (!this.isSquare) return false;\r\n        const n = this.rows;\r\n        for (let i = 0; i < n; i++) {\r\n            if (this.arr[i][i] !== 0) return false;\r\n            for (let j = i + 1; j < n; j++) {\r\n                if (this.arr[i][j] !== -this.arr[j][i]) return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n    get isDiag() {\r\n        if (!this.isSquare) return false;\r\n        const n = this.rows;\r\n        for (let i = 0; i < n; i++) {\r\n            for (let j = i + 1; j < n; j++) {\r\n                if (this.arr[i][j] !== 0 || this.arr[j][i] !== 0) return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n    get isOrtho() {\r\n        if (!this.isSquare) return false;\r\n        return this.isDiag && (this.det == 1 || this.det == -1);\r\n    }\r\n    get isIdemp() {\r\n        if (!this.isSquare) return false;\r\n        const n = this.rows;\r\n        const A = this.arr;\r\n        // Compute A * A\r\n        const MM = [];\r\n        for (let i = 0; i < n; i++) {\r\n            MM[i] = [];\r\n            for (let j = 0; j < n; j++) {\r\n                let sum = 0;\r\n                for (let k = 0; k < n; k++) {\r\n                    sum += A[i][k] * A[k][j];\r\n                }\r\n                MM[i][j] = sum;\r\n            }\r\n        }\r\n        // Check if A * A == A\r\n        for (let i = 0; i < n; i++) {\r\n            for (let j = 0; j < n; j++) {\r\n                if (MM[i][j] !== A[i][j]) return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n\r\n    get isUpperTri() {\r\n        if (!this.isSquare) return false;\r\n        const n = this.rows;\r\n        for (let i = 1; i < n; i++) {\r\n            for (let j = 0; j < i; j++) {\r\n                if (this.arr[i][j] !== 0) return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n    get isLowerTri() {\r\n        if (!this.isSquare) return false;\r\n        const n = this.rows;\r\n        for (let i = 0; i < n - 1; i++) {\r\n            for (let j = i + 1; j < n; j++) {\r\n                if (this.arr[i][j] !== 0) return false;\r\n            }\r\n        }\r\n        return true;\r\n    }\r\n    toPrecision(p) {\r\n        for (let i = 0; i < this.cols; i++) \r\n            for (let j = 0; j < this.rows; j++) \r\n                this.arr[i][j] = +this.arr[i][j].toPrecision(p);\r\n        return this;\r\n    }\r\n    toFixed(p) {\r\n        for (let i = 0; i < this.cols; i++) \r\n            for (let j = 0; j < this.rows; j++) \r\n                this.arr[i][j] = +this.arr[i][j].toFixed(p);\r\n        return this;\r\n    }\r\n    // max2min() {\r\n    //     let newArr = this.arr.flat(1).max2min;\r\n    //     return new Matrix(this.rows, this.cols, newArr);\r\n    // }\r\n    // min2max() {\r\n    //     let newArr = this.arr.flat(1).min2max;\r\n    //     return new Matrix(this.rows, this.cols, newArr);\r\n    // }\r\n    // count(n) {\r\n    //     return this.arr.flat(1).count(n);\r\n    // }\r\n    splice(r0,c0,deleteCount,...items){\r\n        \r\n    }\r\n    getRows(ri, rf = ri + 1) {\r\n        return this.slice(ri, 0, rf, this.cols);\r\n    }\r\n    getCols(ci, cf = ci + 1) {\r\n        return this.slice(0, ci, this.rows, cf);\r\n    }\r\n    #arithmetic(fn, ...matr){\r\n        for (let k = 0; k < matr.length; k++) {\r\n            if (typeof matr[k] == \"number\" || matr[k]?.isComplex?.()) matr[k] = Matrix.nums(this.rows, this.cols, matr[k]);\r\n            for (let i = 0; i < this.rows; i++) \r\n                for (var j = 0; j < this.cols; j++) \r\n                    this.arr[i][j] = fn(this.arr[i][j], matr[k].arr[i][j]);\r\n        }\r\n        return new Matrix(this.rows, this.cols, this.arr.flat(1));  \r\n    }\r\n    add(...matr) {\r\n        return this.#arithmetic(add, ...matr)\r\n    }\r\n    sub(...matr) {\r\n        return this.#arithmetic(sub, ...matr)\r\n    }\r\n    mul(...matr) {\r\n        return this.#arithmetic(mul, ...matr)\r\n    }\r\n    div(...matr) {\r\n        return this.#arithmetic(div, ...matr)\r\n    }\r\n    modulo(...matr) {\r\n        return this.#arithmetic(modulo, ...matr)\r\n    }\r\n    dot(matrix) {\r\n        var res = [];\r\n        for (var i = 0; i < this.arr.length; i++) {\r\n            res[i] = [];\r\n            for (var j = 0; j < matrix.arr[0].length; j++) {\r\n                res[i][j] = 0;\r\n                for (var k = 0; k < this.arr[0].length; k++) {\r\n                    res[i][j] = add(\r\n                        res[i][j],\r\n                        mul(this.arr[i][k],matrix.arr[k][j])\r\n                        );\r\n                }\r\n            }\r\n        }\r\n        return new Matrix(this.arr.length, matrix.arr[0].length, res.flat(1));\r\n    }\r\n    pow(n) {\r\n        let a = this.clone(),\r\n            p = this.clone();\r\n        for (let i = 0; i < n - 1; i++) p = p.dot(a);\r\n        return p;\r\n    }\r\n    sum(){\r\n        let S = 0;\r\n        for (let i = 0; i < this.rows; i++) \r\n            for (let j = 0; j < this.cols; j++) \r\n                S = add(S, this.arr[i][j]);\r\n        return S;\r\n    }\r\n    prod(){\r\n        let S = 1;\r\n        for (let i = 0; i < this.rows; i++) \r\n            for (let j = 0; j < this.cols; j++) \r\n                S = mul(S, this.arr[i][j]);\r\n        return S;\r\n    }\r\n    hasComplex(){\r\n        return this.arr.flat(Infinity).some((n) => n instanceof Complex);\r\n    }\r\n    get min() {\r\n        if (this.hasComplex()) console.error(\"Complex numbers are not comparable\");\r\n        let minRow = [];\r\n        for (let i = 0; i < this.rows; i++) \r\n            minRow.push(Math.min(...this.arr[i]));\r\n        return Math.min(...minRow);\r\n    }\r\n    get max() {\r\n        if (this.hasComplex()) console.error(\"Complex numbers are not comparable\");\r\n        let maxRow = [];\r\n        for (let i = 0; i < this.rows; i++) \r\n            maxRow.push(Math.max(...this.arr[i]));\r\n        return Math.max(...maxRow);\r\n    }\r\n    get minRows() {\r\n        if (this.hasComplex()) console.error(\"Complex numbers are not comparable\");\r\n        let minRow = [];\r\n        for (let i = 0; i < this.rows; i++) \r\n            minRow.push(Math.min(...this.arr[i]));\r\n        return minRow;\r\n    }\r\n    get maxRows() {\r\n        if (this.hasComplex()) console.error(\"Complex numbers are not comparable\");\r\n        let maxRow = [];\r\n        for (let i = 0; i < this.rows; i++) \r\n            maxRow.push(Math.max(...this.arr[i]));\r\n        return maxRow;\r\n    }\r\n    get minCols() {\r\n        if (this.hasComplex()) console.error(\"Complex numbers are not comparable\");\r\n        return this.T.minRows;\r\n    }\r\n    get maxCols() {\r\n        if (this.hasComplex()) console.error(\"Complex numbers are not comparable\");\r\n        return this.T.maxRows;\r\n    }\r\n    static fromVector(v) {\r\n        return new Matrix(v.length, 1, v);\r\n    }\r\n    serialize() {\r\n        const arr = mapfun(x => x.serialize?.() || x, ...this.arr);\r\n        return JSON.stringify({\r\n            type : 'matrix',\r\n            data : {\r\n                rows : this.rows,\r\n                cols : this.cols,\r\n                arr,\r\n            }\r\n        });\r\n    }\r\n    static deserialize(json) {\r\n        if (typeof json == \"string\") json = JSON.parse(json);\r\n        const {type, data} = json;\r\n        if(type !== 'matrix') return TypeError('Not a valid Matrix')\r\n        let {arr} = data;\r\n        arr = mapfun(x => {\r\n            if(typeof x === 'string') {\r\n                const x_obj = JSON.parse(x);\r\n                const {type} = x_obj;\r\n                if(type === 'complex') return Complex.deserialize(x_obj)\r\n            }\r\n            return x\r\n        }, ...arr);\r\n        return new Matrix(arr)\r\n    }\r\n    flip(){\r\n        return this.flipeH().flipeV()\r\n    }\r\n    flipeH(){\r\n        this.arr = this.arr.map(row => [...row].reverse());\r\n        maintain_indexes(this);\r\n        return this;\r\n    }\r\n    flipeV(){\r\n        this.arr = this.arr.reverse();\r\n        maintain_indexes(this);\r\n        return this;\r\n    }\r\n}\r\n\r\n\r\nconst matrix=(r, c, element)=>new Matrix(r, c, element);\r\nconst matrix2=(...element)=>new Matrix(2, 2, element);\r\nconst matrix3=(...element)=>new Matrix(3, 3, element);\r\nconst matrix4=(...element)=>new Matrix(4, 4, element);\n\nconst zeros=(n)=>new Array(n).fill(0);\r\nconst ones=(n)=>new Array(n).fill(1);\r\nconst nums=(num,n)=>new Array(n).fill(num);\r\n\r\nconst arange=(a, b, step , include = false)=>{\r\n    let tab = [];\r\n    if(a<b){\r\n        for (let i = a; include?i<=b:i<b; i += step) tab.push((i * 10) / 10);\r\n    }\r\n    else {\r\n        for(let i = a; include?i>=b:i>b; i -= step) tab.push((i * 10) / 10);\r\n    }\r\n    return tab;\r\n};\r\nconst linspace=(a,b,n=abs(b-a)+1,endpoint=true)=>{\r\n    if(Math.floor(n)!==n)return;\r\n    if([a,b].every(n=>typeof n===\"number\")){\r\n        const [max,min]=[a,b].sort((a,b)=>b-a);\r\n        var Y = [];\r\n        let step ;\r\n        endpoint ? step = (max - min) / (n - 1) : step = (max - min) / n;\r\n        for (var i = 0; i < n; i++) {\r\n            a<b?Y.push(min+step*i):Y.push(max-step*i);\r\n        }\r\n        return Y\r\n    }\r\n\r\n    if([a,b].some(n=>n.isComplex?.())){\r\n        const z1 = new n.constructor(a);\r\n        const z2 = new n.constructor(b);\r\n        n=n||Math.abs(z1.a-z2.a)+1;\r\n        const X=linspace(z1.a,z2.a,n,endpoint);\r\n        const Y=linspace(z1.b,z2.b,n,endpoint);\r\n        let Z=new Array(n).fill(null);\r\n        Z=Z.map((n,i)=> new n.constructor(X[i],Y[i]));\r\n        return Z;\r\n    }\r\n};\r\nconst logspace=(a,b,n=b-a+1,base=E,endpoint=true)=>{\r\n    return linspace(a,b,n,endpoint).map(n=>pow$1(base,n))\r\n};\r\nconst geomspace=(a,b,n=abs(b-a)+1,endpoint=true)=>{\r\n    if(Math.floor(n)!==n)return;\r\n    if([a,b].every(n=>typeof n===\"number\")){\r\n        const [max,min]=[a,b].sort((a,b)=>b-a);\r\n        let base;\r\n        endpoint ? base = nthr(max/min,n-1) : base = nthr(max/min,n) ;\r\n        const Y = [min];\r\n        for (let i = 1; i < n; i++) {\r\n            Y.push(Y[i-1]*base);\r\n        }\r\n        return a<b?Y:Y.reverse()\r\n    }\r\n\r\n    if([a,b].some(n=>n.isComplex?.())){\r\n        const z1 = new n.constructor(a);\r\n        const z2 = new n.constructor(b);\r\n        n=n||Math.abs(z1.a-z2.a)+1;\r\n        let base;\r\n        endpoint ? base = nthr(z2.div(z1),n-1) : base = nthr(z2.div(z1),n) ;\r\n        const Y = [z1];\r\n        for (let i = 1; i < n; i++) {\r\n            Y.push(mul(Y[i-1],base));\r\n        } \r\n        return Y;\r\n    }\r\n};\n\n/** @module Math */\r\n/**\r\n * Checks if a value is within the specified range.\r\n * @function\r\n * @param {number} x - The value to check.\r\n * @param {number} a - The start of the range.\r\n * @param {number} b - The end of the range.\r\n * @returns {boolean} Returns true if the value is within the range [a, b], otherwise false.\r\n */\r\nconst inRange = (x, a, b) => {\r\n    const [min, max] = [Math.min(a, b), Math.max(a, b)];\r\n    return x >= min && x <= max;\r\n};\r\n\r\n/**\r\n * Checks if two numbers are approximately equal within a given error margin.\r\n * @param {number} a - The first number.\r\n * @param {number} b - The second number.\r\n * @param {number} [Err=0.0001] - The maximum acceptable difference between the two numbers.\r\n * @returns {boolean} Returns true if the two numbers are approximately equal within the specified error margin, otherwise false.\r\n */\r\nconst isApproximatlyEqual = (a, b, Err = 0.0001) => {\r\n    return Math.abs(a - b) <= Err;\r\n};\n\n/** @module Math */\r\n\r\n/**\r\n * Computes the cartesian product of two arrays.\r\n * @param {Array} a - The first array.\r\n * @param {Array} b - The second array.\r\n * @returns {Array} Returns an array representing the cartesian product of the input arrays.\r\n */\r\nconst cartesianProduct = (a, b) => a.reduce((p, x) => [...p, ...b.map((y) => [x, y])], []);\r\n\r\n/**\r\n * Computes the greatest common divisor (GCD) of two numbers.\r\n * @param {number} n1 - The first number.\r\n * @param {number} n2 - The second number.\r\n * @returns {number} Returns the greatest common divisor of the two input numbers.\r\n */\r\nconst pgcd = (n1, n2) => {\r\n    let i,\r\n        pgcd = 1;\r\n    if (n1 == floor(n1) && n2 == floor(n2)) {\r\n        for (i = 2; i <= n1 && i <= n2; ++i) {\r\n            if (n1 % i == 0 && n2 % i == 0) pgcd = i;\r\n        }\r\n        return pgcd;\r\n    } else console.log(\"error\");\r\n};\r\n\r\n/**\r\n * Computes the least common multiple (LCM) of two numbers.\r\n * @param {number} n1 - The first number.\r\n * @param {number} n2 - The second number.\r\n * @returns {number} Returns the least common multiple of the two input numbers.\r\n */\r\nconst ppcm = (n1, n2) => {\r\n    let ppcm;\r\n    if (n1 == floor(n1) && n2 == floor(n2)) {\r\n        ppcm = n1 > n2 ? n1 : n2;\r\n        while (true) {\r\n            if (ppcm % n1 == 0 && ppcm % n2 == 0) break;\r\n            ++ppcm;\r\n        }\r\n        return ppcm;\r\n    } else console.log(\"error\");\r\n};\n\n// import { mapfun } from \"../mapfun/index.js\";\r\n// import { \r\n//     add,\r\n//     sub,\r\n//     mul,\r\n//     div,\r\n//     modulo\r\n//  } from \"./arithmetic.js\";\r\nconst Utils={\r\n    // add,\r\n    // sub,\r\n    // mul,\r\n    // div,\r\n    // modulo,\r\n\r\n    zeros,\r\n    ones,\r\n    nums,\r\n    // norm,\r\n    // lerp,\r\n    // map,\r\n    // clamp,\r\n    arange,\r\n    linspace,\r\n    logspace,\r\n    geomspace,\r\n\r\n    // sum,\r\n    // prod,\r\n    // accum,\r\n\r\n    cartesianProduct,\r\n    ppcm,\r\n    pgcd,\r\n\r\n    // deg2rad,\r\n    // rad2deg,\r\n\r\n    inRange,\r\n    isApproximatlyEqual\r\n};\n\nclass UINode {\r\n    constructor(node){\r\n        this.cache = {\r\n            node\r\n        };\r\n    }\r\n    isUINode(){\r\n        return true\r\n    }\r\n    get node(){\r\n        return this.cache.node;\r\n    } \r\n}\r\n\r\n// globalThis.node = (node) => new UINode(node);\n\nfunction parseQueryParams$1(queryString) {\r\n    const params = {};\r\n    queryString.replace(/[A-Z0-9]+?=([\\w|:|\\/\\.]*)/gi, (match) => {\r\n        const [key, value] = match.split('=');\r\n        params[key] = value;\r\n    });\r\n    return params;\r\n}\r\n\r\nfunction defineParamsGetter$1(target ){\r\n    Object.defineProperties(target, {\r\n        'QueryParams': {\r\n            get: function() {\r\n                return parseQueryParams$1(globalThis.location.search.substring(1));\r\n            },\r\n            configurable: false,\r\n            enumerable: true \r\n        },\r\n        'HashParams': {\r\n            get: function() {\r\n                const hash = globalThis.location.hash.substring(1);\r\n                return hash.split(\"#\");\r\n            },\r\n            configurable: false,\r\n            enumerable: true \r\n        }\r\n    });\r\n}\n\nclass UIStore extends Array {\r\n    constructor(...args) {\r\n        super(...args); \r\n    }\r\n    clear(){\r\n        this.length = 0;\r\n        return this;\r\n    }\r\n    getItemById(id) {\r\n        return this.find(n => n.element.id === id);\r\n    }\r\n    getItemsByTagName(tag) {\r\n        return this.filter(n => n.element.tagName.toLowerCase() === tag.toLowerCase());\r\n    }\r\n    getElementsByClassName(className) {\r\n        return this.filter(n => n.element.classList?.contains(className));\r\n    }\r\n    querySelector(selector) {\r\n        const el = globalThis?.document?.querySelector(selector);\r\n        if (!el) return null;\r\n        return this.find(ui => ui.element === el) || null;\r\n    }\r\n    querySelectorAll(selector) {\r\n        const els = globalThis?.document?.querySelectorAll(selector);\r\n        return Array.from(els)\r\n            .map(el => this.find(ui => ui.element === el))\r\n            .filter(Boolean);\r\n    }\r\n}\r\n\r\n// create the singleton\r\nconst __UI__ = new UIStore();\n\nconst __Config__ = {\r\n    default:{\r\n        target:null,\r\n        render:true,\r\n        math:{\r\n            mode:\"deg\"\r\n        }\r\n    },\r\n    setDefault:function(pairs){\r\n        const keys=Object.keys(pairs);\r\n        const values=Object.values(pairs);\r\n        for(let i=0; i<keys.length; i++) this.default[keys[i]]=values[i];\r\n    },\r\n    init:()=>{\r\n        // document.documentElement.setAttribute(\"data-engine\",\"zikojs\")\r\n    },\r\n    renderingMode :\"spa\",\r\n    isSSC : false,\r\n};\n\nconst __HYDRATION__ = {\r\n    store : new Map(),\r\n    index : 0,\r\n    register: function(component){\r\n        this.store.set(this.index++ , component);\r\n    },\r\n    reset(){\r\n        this.index = 0;\r\n        this.store.clear();\r\n    }\r\n    \r\n};\n\nconst __CACHE__ = {\r\n    ui_index : 0,\r\n    get_ui_index:function(){\r\n        return this.ui_index ++\r\n    },\r\n    register_ui: function(UIElement){\r\n        \r\n    }\r\n};\n\nclass UseIPC {\r\n    #channel;\r\n    #eventData;\r\n    #handlers;\r\n    #uuid;\r\n    #subscribers;\r\n    #currentRooms;\r\n    constructor(name = \"\") {\r\n        this.#channel = new BroadcastChannel(name);\r\n        this.#eventData = new Map();\r\n        this.#handlers = new Map(); // Map<event, Array<{fn, rooms}>>\r\n        this.#uuid = \"ziko-channel:\" + (Math.random()*10e16);  // To Be Replaced by UUID\r\n        this.#subscribers = new Set([this.#uuid]);\r\n        this.#currentRooms = new Set(); \r\n        this.#channel.addEventListener(\"message\", (e) => {\r\n            const { last_sent_event, userId, eventData, rooms } = e.data;\r\n            if (userId === this.#uuid) return; // ignore own messages\r\n            // broadcast if no rooms, else check intersection\r\n            if (rooms && rooms.length && !rooms.some(r => this.#currentRooms.has(r))) return;\r\n            this.#subscribers.add(userId);\r\n            this.#eventData = new Map(eventData);\r\n            const handlersList = this.#handlers.get(last_sent_event);\r\n            if (!handlersList) return;\r\n            handlersList.forEach(({ fn, rooms: handlerRooms }) => {\r\n                // trigger if listener has no room filter, or intersects subscriber rooms\r\n                if (!handlerRooms || handlerRooms.length === 0 ||\r\n                    !rooms || rooms.some(r => handlerRooms.includes(r))) {\r\n                    fn(this.#eventData.get(last_sent_event));\r\n                }\r\n            });\r\n        });\r\n    }\r\n\r\n    emit(event, data, rooms) {\r\n        this.#eventData.set(event, data);\r\n        if(typeof rooms === 'string') rooms = [rooms];\r\n        this.#channel.postMessage({\r\n            eventData: Array.from(this.#eventData.entries()),\r\n            last_sent_event: event,\r\n            userId: this.#uuid,\r\n            rooms: rooms && rooms.length ? rooms : undefined\r\n        });\r\n        return this;\r\n    }\r\n    on(event, handler = console.log, rooms) {\r\n        if (!this.#handlers.has(event)) this.#handlers.set(event, []);\r\n        if(typeof rooms === 'string') rooms = [rooms];\r\n        this.#handlers.get(event).push({ fn: handler, rooms });\r\n        return this;\r\n    }\r\n    off(event, handler) {\r\n        if (!this.#handlers.has(event)) return this;\r\n        this.#handlers.set(\r\n            event,\r\n            this.#handlers.get(event).filter(h => h.fn !== handler)\r\n        );\r\n        return this;\r\n    }\r\n    once(event, handler, rooms) {\r\n        const wrapper = (data) => {\r\n            handler(data);\r\n            this.off(event, wrapper);\r\n        };\r\n        this.on(event, wrapper, rooms);\r\n        return this;\r\n    }\r\n    join(...rooms) {\r\n        rooms.forEach(r => this.#currentRooms.add(r));\r\n        return this;\r\n    }\r\n    leave(...rooms) {\r\n        if (!rooms.length) this.#currentRooms.clear();\r\n        else rooms.forEach(r => this.#currentRooms.delete(r));\r\n        return this;\r\n    }\r\n    close() {\r\n        this.#channel.close();\r\n        return this;\r\n    }\r\n}\r\n\r\nconst useIPC = (name) => new UseIPC(name);\n\nclass UseStorage {\r\n    constructor(storage, globalKey, initialValue, use_channel = true) {\r\n        this.cache = {\r\n            storage,\r\n            globalKey,\r\n            channel: use_channel ? useIPC(`Ziko:useStorage-${globalKey}`) : null,\r\n            oldItemKeys: new Set()\r\n        };\r\n\r\n        this.#init(initialValue, use_channel);\r\n    }\r\n\r\n    get items() {\r\n        const raw = this.cache.storage.getItem(this.cache.globalKey);\r\n        if (!raw) return {};\r\n        try {\r\n            return JSON.parse(raw);\r\n        } catch {\r\n            return {};\r\n        }\r\n    }\r\n\r\n    #maintain() {\r\n        const items = this.items;\r\n        this.cache.oldItemKeys.forEach(k => delete this[k]);\r\n        for (const key in items) {\r\n            this[key] = items[key];\r\n            this.cache.oldItemKeys.add(key);\r\n        }\r\n    }\r\n    #init(initialValue, use_channel) {\r\n        if (use_channel && this.cache.channel) this.cache.channel.on(\"Ziko-Storage-Updated\", () => this.#maintain());\r\n        if (!initialValue) {\r\n            this.#maintain();\r\n            return;\r\n        }\r\n        if (this.cache.storage.getItem(this.cache.globalKey)) {\r\n            const existing = this.items;\r\n            Object.keys(existing).forEach(k => this.cache.oldItemKeys.add(k));\r\n            this.#maintain();\r\n        } \r\n        else this.set(initialValue);\r\n    }\r\n\r\n    set(data) {\r\n        this.cache.storage.setItem(this.cache.globalKey, JSON.stringify(data));\r\n        if (this.cache.channel) this.cache.channel.emit(\"Ziko-Storage-Updated\", data);\r\n        this.#maintain();\r\n        return this;\r\n    }\r\n\r\n    add(data) {\r\n        this.set({\r\n            ...this.items,\r\n            ...data\r\n        });\r\n        return this;\r\n    }\r\n    remove(...keys) {\r\n        const items = { ...this.items };\r\n        keys.forEach(key => {\r\n            delete items[key];\r\n            delete this[key];\r\n            this.cache.oldItemKeys.delete(key);\r\n        });\r\n        this.set(items);\r\n        return this;\r\n    }\r\n    get(key) {\r\n        return this.items[key];\r\n    }\r\n    clear() {\r\n        this.cache.storage.removeItem(this.cache.globalKey);\r\n        this.cache.oldItemKeys.forEach(k => delete this[k]);\r\n        this.cache.oldItemKeys.clear();\r\n        this.#maintain();\r\n        return this;\r\n    }\r\n    onStorageUpdated(callback) {\r\n        if (this.cache.channel) {\r\n            this.cache.channel.on(\"Ziko-Storage-Updated\", callback);\r\n        }\r\n        return this;\r\n    }\r\n}\r\n\r\n// factory functions\r\nconst useLocaleStorage = (key, initialValue, use_channel = true) =>\r\n    new UseStorage(localStorage, key, initialValue, use_channel);\r\n\r\nconst useSessionStorage = (key, initialValue, use_channel = true) =>\r\n    new UseStorage(sessionStorage, key, initialValue, use_channel);\n\nvar __State__ = {\r\n    store : new Map(),\r\n    index : 0,\r\n    session_storage : null,\r\n    register: function(state){\r\n        if(!import.meta.env.SSR && import.meta.env.DEV){\r\n            if(!this.session) this.session_storage = useSessionStorage('ziko-state', {});\r\n            const savedValue = this.session_storage.get(this.index);\r\n            if(!savedValue) this.session_storage.add({[this.index] : state.value});\r\n            else state.value = savedValue;\r\n        }\r\n        this.store.set(this.index++, state);\r\n    },\r\n    update: function(index, value){\r\n       if(!import.meta.env.SSR && import.meta.env.DEV){\r\n            this.session_storage.add({[index] : value});\r\n        } \r\n    },\r\n\r\n};\n\nfunction __init__global__(){\r\n    if ( !globalThis?.__Ziko__ ){\r\n        globalThis.__Ziko__ = {\r\n                    __UI__,\r\n                    __HYDRATION__,\r\n                    __State__,\r\n                    __Config__,\r\n                    __CACHE__,\r\n                    __PROVIDERS__: {}\r\n                };\r\n        defineParamsGetter$1(__Ziko__);\r\n    }\r\n}\n\n__init__global__();\r\nclass UIElementCore extends UINode{\r\n  constructor(){\r\n    super();\r\n  }\r\n  init(element, name, type, render){\r\n    this.target = globalThis.__Ziko__.__Config__.default.target||globalThis?.document?.body;\r\n    if(typeof element === \"string\") {\r\n      switch(type){\r\n        case \"html\" : {\r\n          element = globalThis?.document?.createElement(element);\r\n          // console.log('1')\r\n        } break;\r\n        case \"svg\" : {\r\n          element = globalThis?.document?.createElementNS(\"http://www.w3.org/2000/svg\", element); \r\n          // console.log('2')\r\n        } break;\r\n        default : throw Error(\"Not supported\")\r\n      }\r\n    }\r\n    else this.target = element?.parentElement;\r\n    Object.assign(this.cache, {\r\n      name,\r\n      isInteractive : false,\r\n      parent:null,\r\n      isBody:false,\r\n      isRoot:false,\r\n      isHidden: false,\r\n      isFrozzen:false,\r\n      attributes: {},\r\n      filters: {},\r\n      temp:{}\r\n    });\r\n    this.events = {\r\n      ptr:null,\r\n      mouse:null,\r\n      wheel:null,\r\n      key:null,\r\n      drag:null,\r\n      drop:null,\r\n      click:null,\r\n      clipboard:null,\r\n      focus:null,\r\n      swipe:null,\r\n      custom:null,\r\n    };\r\n    this.observer={\r\n      resize:null,\r\n      intersection:null\r\n    };\r\n    if(element) Object.assign(this.cache,{element});\r\n    this.items = new UIStore();\r\n    globalThis.__Ziko__.__UI__[this.cache.name]?globalThis.__Ziko__.__UI__[this.cache.name]?.push(this):globalThis.__Ziko__.__UI__[this.cache.name]=[this];\r\n    element && render && this?.render?.();\r\n    globalThis.__Ziko__.__UI__.push(this);\r\n  }\r\n  get element(){\r\n    return this.cache.element;\r\n  }\r\n    [Symbol.iterator]() {\r\n    return this.items[Symbol.iterator]();\r\n  }\r\n  maintain() {\r\n    for (let i = 0; i < this.items.length; i++) {\r\n      Object.defineProperty(this, i, {\r\n        value: this.items[i],\r\n        writable: true,\r\n        configurable: true,\r\n        enumerable: false \r\n        });\r\n    }\r\n  }\r\n  isInteractive(){\r\n    return this.cache.isInteractive;\r\n  }\r\n  isUIElement(){\r\n    return true;\r\n  }\r\n}\n\nfunction register_to_class(target, ...mixins){\r\n    mixins.forEach(n => _register_to_class_(target, n));\r\n}\r\nfunction _register_to_class_(target, mixin) {\r\n  const descriptors = Object.getOwnPropertyDescriptors(mixin);\r\n  for (const key of Reflect.ownKeys(descriptors)) {\r\n    const desc = descriptors[key];\r\n    if ('get' in desc || 'set' in desc || typeof desc.value !== 'function') {\r\n      Object.defineProperty(Object.getPrototypeOf(target), key, desc);\r\n    } else if (typeof desc.value === 'function') {\r\n      if (!Object.getPrototypeOf(target).hasOwnProperty(key)) {\r\n        Object.defineProperty(Object.getPrototypeOf(target), key, desc);\r\n      }\r\n    }\r\n  }\r\n}\n\n// export function mount(target = this.target) {\r\n//   if(this.isBody) return ;\r\n//   if(target?.isUIElement)target=target.element;\r\n//   this.target=target;\r\n//   this.target?.appendChild(this.element);\r\n//   return this;\r\n// }\r\n// export function unmount(){\r\n//   if(this.cache.parent)this.cache.parent.remove(this);\r\n//   else if(this.target?.children?.length && [...this.target?.children].includes(this.element)) this.target.removeChild(this.element);\r\n//   return this;\r\n// }\r\n\r\n// export function mountAfter(target = this.target, t = 1) {\r\n//   setTimeout(() => this.mount(), t);\r\n//   return this;\r\n// }\r\n// export function unmountAfter(t = 1) {\r\n//   setTimeout(() => this.unmount(), t);\r\n//   return this;\r\n// }\r\n\r\nfunction mount(target = this.target, delay = 0) {\r\n    if (delay > 0) {\r\n        setTimeout(() => this.mount(target, 0), delay);\r\n        return this;\r\n    }\r\n\r\n    if (this.isBody) return this;\r\n\r\n    if (target?.isUIElement) target = target.element;\r\n    this.target = target;\r\n\r\n    this.target?.appendChild(this.element);\r\n    return this;\r\n}\r\n\r\nfunction unmount(delay = 0) {\r\n    if (delay > 0) {\r\n        setTimeout(() => this.unmount(0), delay);\r\n        return this;\r\n    }\r\n\r\n    if (this.cache.parent) {\r\n        this.cache.parent.remove(this);\r\n    } else if (\r\n        this.target?.children?.length &&\r\n        [...this.target.children].includes(this.element)\r\n    ) {\r\n        this.target.removeChild(this.element);\r\n    }\r\n\r\n    return this;\r\n}\n\nvar LifecycleMethods = /*#__PURE__*/Object.freeze({\n   __proto__: null,\n   mount: mount,\n   unmount: unmount\n});\n\nif(!globalThis.__Ziko__) __init__global__();\r\n\r\nfunction useState(initialValue) {\r\n    \r\n    const {store, index} = __Ziko__.__State__;\r\n    __Ziko__.__State__.register({\r\n            value : initialValue,\r\n            subscribers : new Set(),\r\n            paused : false\r\n    });\r\n\r\n    let current = store.get(index);\r\n\r\n    function getValue() {\r\n        return {\r\n            value: current.value,\r\n            isStateGetter: () => true,\r\n            _subscribe: (fn) => current.subscribers.add(fn),\r\n        };\r\n    }\r\n\r\n    function setValue(newValue) {\r\n        if (current.paused) return;\r\n        if (typeof newValue === \"function\") {\r\n            newValue = newValue(current.value);\r\n        }\r\n        if (newValue !== current.value) {\r\n            current.value = newValue;\r\n            current.subscribers.forEach(fn => fn(current.value));\r\n            __Ziko__.__State__.update(index, newValue);\r\n        }\r\n    }\r\n\r\n    const controller = {\r\n        pause: () => { current.paused = true; },\r\n        resume: () => { current.paused = false; },\r\n        clear: () => { current.subscribers.clear(); },\r\n        force: (newValue) => {\r\n            if (typeof newValue === \"function\") newValue = newValue(current.value);\r\n            current.value = newValue;\r\n            current.subscribers.forEach(fn => fn(current.value));\r\n        },\r\n        getSubscribers: () => new Set(current.subscribers),\r\n    };\r\n\r\n    return [getValue, setValue, controller];\r\n}\r\n\r\n\r\nconst isStateGetter = (arg) => {\r\n    return typeof arg === 'function' && arg?.()?.isStateGetter?.();\r\n};\n\nconst camel2hyphencase = (text = '') => text.replace(/[A-Z]/g, match => '-' + match.toLowerCase());\n\nconst is_camelcase = (text = '') =>{\r\n    if (text.length === 0) return false; \r\n    const camelCasePattern = /^[a-z][a-zA-Z0-9]*$/;\r\n    return camelCasePattern.test(text);\r\n};\n\nfunction setAttr(name, value) {\r\n  if(name instanceof Object){\r\n    const [names,values]=[Object.keys(name),Object.values(name)];\r\n    for(let i=0;i<names.length;i++){\r\n      if(values[i] instanceof Array)value[i] = values[i].join(\" \");\r\n      _set_attrs_.call(this, names[i], values[i]);\r\n    }\r\n  }\r\n  else {\r\n    if(value instanceof Array) value = value.join(\" \");\r\n    _set_attrs_.call(this, name, value);\r\n  }\r\n  return this;\r\n}\r\nfunction removeAttr(...names) {\r\n  for(let i=0;i<names.length;i++)this.element?.removeAttribute(names[i]);\r\n  return this;\r\n}\r\nfunction getAttr(name){\r\n  name = is_camelcase(name) ? camel2hyphencase(name) : name;\r\n  return this.element.attributes[name].value;\r\n}\r\nfunction setContentEditable(bool = true) {\r\n  this.setAttr(\"contenteditable\", bool);\r\n  return this;\r\n}\r\n\r\n\r\nfunction _set_attrs_(name, value){\r\n    if(globalThis.SVGAElement && this.element instanceof globalThis.SVGAElement) name = is_camelcase(name) ? camel2hyphencase(name) : name;\r\n    if(this?.attr[name] && this?.attr[name]===value) return;\r\n    if(isStateGetter(value)){\r\n        const getter = value();\r\n        getter._subscribe(\r\n            (newValue) => this.element?.setAttribute(name, newValue),\r\n            this \r\n        );\r\n    }\r\n    else this.element?.setAttribute(name, value);\r\n    Object.assign(this.cache.attributes, {[name]:value});   \r\n}\n\nvar AttrsMethods = /*#__PURE__*/Object.freeze({\n   __proto__: null,\n   _set_attrs_: _set_attrs_,\n   getAttr: getAttr,\n   removeAttr: removeAttr,\n   setAttr: setAttr,\n   setContentEditable: setContentEditable\n});\n\nclass ZikoUIText extends UINode {\r\n    constructor(...value) {\r\n      super(\"span\", \"text\", false, ...value);\r\n      this.element = globalThis?.document?.createTextNode(...value);\r\n    }\r\n    isText(){\r\n      return true\r\n    }\r\n}\r\nconst text = (...str) => new ZikoUIText(...str);\n\n// import { isStateGetter } from \"../../../hooks/use-state.js\";\r\n// import { \r\n//   is_camelcase,\r\n//   camel2hyphencase\r\n//  } from '../../../data/string/index.js';\r\n\r\nfunction append(...ele) {\r\n  __addItem__.call(this, \"append\", \"push\", ...ele);\r\n  return this;\r\n}\r\nfunction prepend(...ele) {\r\n  this.__addItem__.call(this, \"prepend\", \"unshift\", ...ele);\r\n  return this;\r\n}\r\nfunction insertAt(index, ...ele) {\r\n  if (index >= this.element.children.length) this.append(...ele);\r\n  else\r\n    for (let i = 0; i < ele.length; i++) {\r\n      if ([\"number\", \"string\"].includes(typeof ele[i])) ele[i] = text(ele[i]);\r\n      this.element?.insertBefore(ele[i].element, this.items[index].element);\r\n      this.items.splice(index, 0, ele[i]);\r\n    }\r\n  return this;\r\n}\r\nfunction remove(...ele) {\r\n  const remove = (ele) => {\r\n    if (typeof ele === \"number\") ele = this.items[ele];\r\n    if (ele?.isUIElement) this.element?.removeChild(ele.element);\r\n    this.items = this.items.filter((n) => n !== ele);\r\n  };\r\n  for (let i = 0; i < ele.length; i++) remove(ele[i]);\r\n  for (let i = 0; i < this.items.length; i++)\r\n    Object.assign(this, { [[i]]: this.items[i] });\r\n  // Remove from item\r\n  return this;\r\n}\r\nfunction clear(){\r\n  this?.items?.forEach(n=>n.unmount());\r\n  this.element.innerHTML = \"\";\r\n  return this;\r\n}\r\nfunction replaceElementWith(new_element){\r\n    this.cache.element.replaceWith(new_element);\r\n    this.cache.element = new_element;\r\n\r\n    // To do : Dispose Events and States \r\n    return this\r\n}\r\nfunction after(ui){\r\n  if(ui?.isUIElement) ui=ui.element;\r\n  this.element?.after(ui);\r\n  return this;\r\n}\r\nfunction before(ui){\r\n  if(ui?.isUIElement) ui=ui.element;\r\n  this.element?.before(ui);\r\n  return this;\r\n}\r\n\r\n\r\n\r\n\r\nasync function __addItem__(adder, pusher, ...ele) {\r\n  if (this.cache.isFrozzen) {\r\n    console.warn(\"You can't append new item to frozzen element\");\r\n    return this;\r\n  }\r\n  for (let i = 0; i < ele.length; i++) {\r\n    if ([\"number\", \"string\"].includes(typeof ele[i])) ele[i] = text(ele[i]);\r\n        // Fix Items Latter\r\n    if (ele[i] instanceof Function) {\r\n     const getter = ele[i]();\r\n      if (getter.isStateGetter) {\r\n        ele[i] = text(getter.value);\r\n        getter._subscribe(\r\n            (newValue) => (ele[i].element.textContent = newValue),\r\n            ele[i] \r\n        );\r\n        // this.element.appendChild(textNode);\r\n      }\r\n    }\r\n    if (typeof globalThis?.Node === \"function\" && ele[i] instanceof globalThis?.Node) ele[i] = new this.constructor(ele[i]);\r\n    if (ele[i]?.isUINode) {\r\n        ele[i].cache.parent = this;\r\n        this.element?.[adder](ele[i].element);\r\n        ele[i].target = this.element;\r\n        this.items[pusher](ele[i]);\r\n    } \r\n    else if(ele[i] instanceof Promise){\r\n      const UIEle = await ele[i];\r\n      UIEle.cache.parent = this;\r\n      this.element?.[adder](UIEle.element);\r\n      UIEle.target = this.element;\r\n      this.items[pusher](UIEle);\r\n    }\r\n    else if (ele[i] instanceof Object) {\r\n      if (ele[i]?.style) this.style(ele[i]?.style);\r\n      if (ele[i]?.attr) {\r\n        Object.entries(ele[i].attr).forEach((n) =>\r\n          this.setAttr(\"\" + n[0], n[1]),\r\n        );\r\n      }\r\n    }\r\n  }\r\n  this.maintain();\r\n  return this;\r\n}\n\nvar DomMethods = /*#__PURE__*/Object.freeze({\n   __proto__: null,\n   __addItem__: __addItem__,\n   after: after,\n   append: append,\n   before: before,\n   clear: clear,\n   insertAt: insertAt,\n   prepend: prepend,\n   remove: remove,\n   replaceElementWith: replaceElementWith\n});\n\nfunction at(index) {\r\n  return this.items.at(index);\r\n}\r\nfunction forEach(callback) {\r\n  this.items.forEach(callback);\r\n  return this;\r\n}\r\nfunction map(callback) {\r\n  return this.items.map(callback);\r\n}\r\nfunction find(condition) {\r\n  return this.items.filter(condition);\r\n}\n\nvar IndexingMethods = /*#__PURE__*/Object.freeze({\n   __proto__: null,\n   at: at,\n   find: find,\n   forEach: forEach,\n   map: map\n});\n\nfunction style$1(styles){\r\n    if(!this.element?.style) return this;\r\n    for(let key in styles){\r\n        const value = styles[key];\r\n        if(isStateGetter(value)){\r\n            const getter = value();\r\n            Object.assign(this.element.style, {[key] : getter.value});\r\n            getter._subscribe(\r\n                (newValue) => {\r\n                    console.log({newValue});\r\n                    Object.assign(this.element.style, {[key] : newValue});\r\n                },\r\n                // this \r\n            );\r\n        }\r\n        else Object.assign(this.element.style, {[key] : value});\r\n    }\r\n    return this;\r\n}\r\nfunction size(width, height){\r\n    return this.style({width, height})\r\n}\r\nfunction hide(){\r\n\r\n}\r\nfunction show(){\r\n\r\n}\r\nfunction animate(keyframe, {duration=1000, iterations=1, easing=\"ease\"}={}){\r\n    this.element?.animate(keyframe,{duration, iterations, easing});\r\n    return this;\r\n}\n\nvar StyleMethods = /*#__PURE__*/Object.freeze({\n   __proto__: null,\n   animate: animate,\n   hide: hide,\n   show: show,\n   size: size,\n   style: style$1\n});\n\nclass EventController {\r\n  constructor(target, category){\r\n    this.cache = {\r\n      category,\r\n      target,\r\n      listeners : {},\r\n      currentEvent : null,\r\n      event : null,\r\n      customEvents : new Set()\r\n    };\r\n  }\r\n  get event(){\r\n    return this.cache.event\r\n  }\r\n  get target(){\r\n    return this.cache.target;\r\n  }\r\n  get element(){\r\n    return this.cache.target.element;\r\n  }\r\n  get currentEvent(){\r\n    return this.cache.currentEvent;\r\n  }\r\n  addListener(event_name, callback, {preventDefault = false, paused = false} = {}){\r\n    this.cache.listeners[event_name] = {\r\n      callback : e =>{\r\n        this.cache.event = e;\r\n        if(this.cache.listeners[event_name].preventDefault) e.preventDefault();\r\n        if(!this.cache.listeners[event_name].paused) {\r\n          this.cache.currentEvent = event_name;\r\n          callback.call(this, this);\r\n        }\r\n      },\r\n      preventDefault,\r\n      paused,\r\n    };\r\n    this.element.addEventListener(event_name, this.cache.listeners[event_name].callback);\r\n    return this;\r\n  }\r\n  removeListener(event_name){\r\n    this.element.removeEventListener(event_name, this.cache.listeners[event_name].callback);\r\n    return this;\r\n  }\r\n  pause(event_name){\r\n    this.cache.listeners[event_name].paused = true;\r\n    return this;\r\n  }\r\n  resume(event_name){\r\n    this.cache.listeners[event_name].paused = false;\r\n    return this;\r\n  }\r\n  preventDefault(event_name){\r\n    // if(!event_name) \r\n    this.cache.listeners[event_name].preventDefault = true;\r\n    return this;\r\n  }\r\n  useDefault(event_name){\r\n    this.cache.listeners[event_name].preventDefault = false;\r\n    return this;\r\n  }\r\n}\n\nclass ClickAwayEvent extends Event {\r\n  constructor(originalEvent, targetElement) {\r\n    super(\"clickaway\", { bubbles: true, cancelable: true });\r\n    this.originalEvent = originalEvent;\r\n    this.targetElement = targetElement;\r\n  }\r\n}\r\n\r\nfunction register_click_away_event(element) {\r\n  // console.log(element)\r\n  function handler(e) {\r\n    if (!element.contains(e.target)) {\r\n      const clickAwayEvent = new ClickAwayEvent(e, element);\r\n      element.dispatchEvent(clickAwayEvent);\r\n    }\r\n  }\r\n\r\n  globalThis?.document?.addEventListener(\"click\", handler);\r\n\r\n  return () => globalThis?.document?.removeEventListener(\"click\", handler);\r\n  \r\n}\r\n\r\n// // Example usage\r\n// const box = document.querySelector(\"#my-box\");\r\n\r\n// const stop = listenClickAway(box);\r\n\r\n// box.addEventListener(\"clickaway\", (e) => {\r\n//   console.log(\"Clicked outside box!\", e);\r\n// });\r\n\r\n// // later, you can stop listening:\r\n// // stop();\n\nconst getCoordinates = (ctx, normalized = false) =>{\r\n    const rect = ctx.element.getBoundingClientRect();\r\n    const e = ctx.event;\r\n    let x = (e?.clientX - rect.left) | 0;\r\n    let y = (e?.clientY - rect.top) | 0;\r\n\r\n    if(normalized){\r\n        const w = ctx.element.clientWidth;\r\n        const h = ctx.element.clientHeight;\r\n        x = +((x / w) * 2 - 1).toFixed(8);\r\n        y = +((y / h) * -2 + 1).toFixed(8);\r\n    }\r\n\r\n    return {x, y};\r\n};\r\n\r\nconst isCustomEventRegistred = (ctx, category, event_name) => ctx.exp.events?.[category]?.cache?.customEvents?.has(event_name);\n\nconst CATEGORY$3 = 'click';\r\nconst ClickListeners = {\r\n    onClick(callback){\r\n        return this.on(\r\n            'click', callback, \r\n            { category : CATEGORY$3 })\r\n    },\r\n    onDblClick(callback){\r\n        return this.on(\r\n            'dblclick', callback, \r\n            { category : CATEGORY$3})\r\n    },\r\n    onClickAway(callback){\r\n        if(!isCustomEventRegistred(this, CATEGORY$3, 'clickaway')) register_click_away_event(this.element);\r\n        return this.on(\r\n            'clickaway', callback, \r\n            { category : CATEGORY$3, isCustom : true})\r\n    },\r\n};\n\nconst CATEGORY$2 = 'ptr';\r\nconst PtrListeners = {\r\n    onPtrDown(callback, useNormalizedCoordinates = false){\r\n        return this.on(\r\n            'pointerdown', callback, \r\n            { category : CATEGORY$2, details_setter : (ctx)=> {\r\n                const {x, y} = getCoordinates(ctx, useNormalizedCoordinates);\r\n                ctx.dx = x;\r\n                ctx.dy = y;\r\n                ctx.isDown = true;\r\n                ctx.isDragging = ctx.isMoving ?? false;\r\n            }}\r\n        )\r\n    },\r\n    onPtrMove(callback, useNormalizedCoordinates = false){\r\n        return this.on(\r\n            'pointermove', callback, \r\n            { category : CATEGORY$2, details_setter : (ctx)=> {\r\n                const {x, y} = getCoordinates(ctx, useNormalizedCoordinates);\r\n                ctx.mx = x;\r\n                ctx.my = y;\r\n                ctx.isMoving = true;\r\n                ctx.isDragging = ctx.isDown ?? false;\r\n            }}\r\n        )\r\n    },\r\n    onPtrUp(callback, useNormalizedCoordinates = false){\r\n        return this.on(\r\n            'pointerup', callback, \r\n            { category : CATEGORY$2, details_setter : (ctx)=> {\r\n                const {x, y} = getCoordinates(ctx, useNormalizedCoordinates);\r\n                ctx.ux = x;\r\n                ctx.uy = y;\r\n                ctx.isDown = false;\r\n                ctx.isMoving = false;\r\n                ctx.isDragging = false;\r\n            }}\r\n        )\r\n    }\r\n};\n\nconst CATEGORY$1 = 'key';\r\nconst KeyListeners = {\r\n    onKeyDown(callback){\r\n        return this.on(\r\n            'keydown', callback, \r\n            { category : CATEGORY$1, details_setter : ctx=> { ctx.kd = ctx.event.key; }\r\n        })\r\n    },\r\n    onKeyPress(callback){\r\n        return this.on(\r\n            'keypress', callback, \r\n            { category : CATEGORY$1, details_setter : ctx=> { ctx.kp = ctx.event.key; }\r\n        })\r\n    },\r\n    onKeyUp(callback){\r\n        return this.on(\r\n            'keydown', callback, \r\n            { category : CATEGORY$1, details_setter : ctx=> { ctx.ku = ctx.event.key; }\r\n        })\r\n    },\r\n    \r\n};\n\nconst debounce=(fn,delay=1000)=>{\r\n    let id;\r\n    return (...args) => id ? clearTimeout(id) : setTimeout(()=>fn(...args),delay);\r\n};\r\nconst throttle=(fn,delay)=>{\r\n    let lastTime=0;\r\n    return (...args) => {\r\n        const now = new Date().getTime();\r\n        if(now-lastTime < delay) return;\r\n        lastTime = now;\r\n        fn(...args); \r\n    }\r\n};\n\nclass ViewEvent extends CustomEvent {\r\n    constructor(type, detail, { bubbles = true, cancelable = true } = {}) {\r\n        super(type, { detail, bubbles, cancelable });\r\n    }\r\n}\r\n\r\nfunction register_view_event(\r\n    element,\r\n    {\r\n        intersection = true,\r\n        resize = true,\r\n        threshold = 0,\r\n        throttleResize = 100,\r\n        throttleEnterExit = 0\r\n    } = {}\r\n) {\r\n    let intersectionObserver, resizeObserver;\r\n    const resizeCallback = entries => {\r\n        for (let entry of entries) {\r\n            const { width, height } = entry.contentRect;\r\n\r\n            element.dispatchEvent(\r\n                new ViewEvent(\"resizeview\", {\r\n                    width,\r\n                    height,\r\n                    entry\r\n                })\r\n            );\r\n        }\r\n    };\r\n\r\n    const throttledResize = throttleResize > 0\r\n        ? throttle(resizeCallback, throttleResize)\r\n        : resizeCallback;\r\n\r\n    const intersectionCallback = entries => {\r\n        for (let entry of entries) {\r\n            const type = entry.isIntersecting ? \"enterview\" : \"exitview\";\r\n            element.dispatchEvent(new ViewEvent(type, entry));\r\n        }\r\n    };\r\n\r\n    const throttledIntersections = throttleEnterExit > 0\r\n        ? throttle(intersectionCallback, throttleEnterExit)\r\n        : intersectionCallback;\r\n\r\n    if (intersection) {\r\n        intersectionObserver = new IntersectionObserver(throttledIntersections, { threshold });\r\n        intersectionObserver.observe(element);\r\n    }\r\n\r\n    if (resize) {\r\n        resizeObserver = new ResizeObserver(throttledResize);\r\n        resizeObserver.observe(element);\r\n    }\r\n\r\n    // ---- UNREGISTER ----\r\n    return () => {\r\n        if (intersectionObserver) {\r\n            intersectionObserver.unobserve(element);\r\n            intersectionObserver.disconnect();\r\n        }\r\n        if (resizeObserver) {\r\n            resizeObserver.unobserve(element);\r\n            resizeObserver.disconnect();\r\n        }\r\n    };\r\n}\n\nconst CATEGORY = 'view';\r\nconst ViewListeners = {\r\n    onEnterView(callback){\r\n        if(!this.exp.events?.[CATEGORY]) register_view_event(this.element);\r\n        return this.on(\r\n            'enterview', callback, \r\n            { category : CATEGORY, isCustom : true})\r\n    },\r\n    onExitView(callback){\r\n        if(!this.exp.events?.[CATEGORY]) register_view_event(this.element);\r\n        return this.on(\r\n            'exitview', callback, \r\n            { category : CATEGORY, isCustom : true})\r\n    },\r\n    onResizeView(callback){\r\n        if(!this.exp.events?.[CATEGORY]) register_view_event(this.element);\r\n        return this.on(\r\n            'resizeview', callback, \r\n            { category : CATEGORY, isCustom : true})\r\n    },\r\n};\n\nclass SwipeEvent extends CustomEvent {\r\n  constructor(type, detail) {\r\n    super(type, {\r\n      detail,\r\n      bubbles: true,\r\n      cancelable: true\r\n    });\r\n  }\r\n}\r\n\r\nfunction register_swipe_event(\r\n  element,\r\n  threshold = 5,\r\n  restraint = 100,\r\n  allowedTime = 500\r\n) {\r\n  let startX = 0,\r\n      startY = 0,\r\n      startTime = 0,\r\n      isPointerDown = false;\r\n\r\n  function onPointerDown(e) {\r\n    startX = e.clientX;\r\n    startY = e.clientY;\r\n    startTime = performance.now();\r\n    isPointerDown = true;\r\n  }\r\n\r\n  function onPointerUp(e) {\r\n    if (!isPointerDown) return;\r\n    isPointerDown = false;\r\n\r\n    const distX = e.clientX - startX;\r\n    const distY = e.clientY - startY;\r\n    const elapsed = performance.now() - startTime;\r\n\r\n    let direction = null;\r\n    let eventName = null;\r\n\r\n    if (elapsed <= allowedTime) {\r\n      if (Math.abs(distX) >= threshold && Math.abs(distY) <= restraint) {\r\n        direction = distX < 0 ? \"left\" : \"right\";\r\n        eventName = \"swipe\" + direction;\r\n      } \r\n      else if (Math.abs(distY) >= threshold && Math.abs(distX) <= restraint) {\r\n        direction = distY < 0 ? \"up\" : \"down\";\r\n        eventName = \"swipe\" + direction;\r\n      }\r\n    }\r\n\r\n    // Emit event\r\n    if (eventName) {\r\n      element.dispatchEvent(\r\n        new SwipeEvent(eventName, {\r\n          direction,\r\n          distX,\r\n          distY,\r\n          originalEvent: e\r\n        })\r\n      );\r\n    }\r\n  }\r\n\r\n  element.addEventListener(\"pointerdown\", onPointerDown, { passive: true });\r\n  element.addEventListener(\"pointerup\", onPointerUp, { passive: true });\r\n\r\n  return () => {\r\n    element.removeEventListener(\"pointerdown\", onPointerDown);\r\n    element.removeEventListener(\"pointerup\", onPointerUp);\r\n  };\r\n}\n\nlet UIElement$1 = class UIElement extends UIElementCore{\r\n  constructor({element, name ='', type='html', render = __Ziko__.__Config__.default.render}={}){\r\n    super();\r\n    this.exp = {\r\n      events : {\r\n\r\n      }\r\n    };\r\n    register_to_class(\r\n      this, \r\n      LifecycleMethods,\r\n      AttrsMethods, \r\n      DomMethods, \r\n      StyleMethods,\r\n      IndexingMethods,\r\n      PtrListeners,\r\n      ClickListeners,\r\n      KeyListeners,\r\n      ViewListeners,\r\n    );\r\n\r\n    if(element)this.init(element, name, type, render);\r\n  }\r\n  on(event_name, callback, {details_setter, category = 'global', isCustom = false,preventDefault = false} = {}){\r\n    if(category && !this.exp.events.hasOwnProperty(category)) this.exp.events[category] = new EventController(this, category);\r\n    isCustom && this.exp.events[category].cache.customEvents.add(event_name);\r\n    const EVENT = this.exp.events[category];\r\n    EVENT.addListener(event_name, (e)=>{\r\n      if(details_setter) details_setter(EVENT);\r\n      callback(e);\r\n    },{\r\n      preventDefault\r\n    });\r\n    return this;\r\n  }\r\n  _off(event, category = 'global'){\r\n    this.exp.events[category].removeListener(event);\r\n  }\r\n  get element(){\r\n    return this.cache.element;\r\n  }\r\n  isInteractive(){\r\n    return this.cache.isInteractive;\r\n  }\r\n  useClient(directive){\r\n    if(!this.cache.isInteractive){\r\n      this.element.setAttribute('data-hydration-index', globalThis.__Ziko__.__HYDRATION__.index);\r\n      globalThis.__Ziko__.__HYDRATION__.register(() => this);\r\n      this.cache.isInteractive = true;\r\n    }\r\n    if(directive)this.element.setAttribute('data-hydration-directive', directive);\r\n    return this;\r\n  }\r\n  get st(){\r\n    return this.cache.style;\r\n  }\r\n  get attr(){\r\n    return this.cache.attributes;\r\n  }\r\n  get evt(){\r\n    return this.events;\r\n  }\r\n  get html(){\r\n    return this.element.innerHTML;\r\n  }\r\n  get text(){\r\n    return this.element.textContent;\r\n  }\r\n  get isBody(){\r\n    return this.element === globalThis?.document.body;\r\n  }\r\n  get parent(){\r\n    return this.cache.parent;\r\n  }\r\n  get width(){\r\n    return this.element.getBoundingClientRect().width;\r\n  }\r\n  get height(){\r\n    return this.element.getBoundingClientRect().height;\r\n  }\r\n  get top(){\r\n    return this.element.getBoundingClientRect().top;\r\n  }\r\n  get right(){\r\n    return this.element.getBoundingClientRect().right;\r\n  }\r\n  get bottom(){\r\n    return this.element.getBoundingClientRect().bottom;\r\n  }\r\n  get left(){\r\n    return this.element.getBoundingClientRect().left;\r\n  }\r\n\r\n};\n\nconst call_with_optional_props = (Component) => {\r\n    return (...args) => {\r\n        const first = args[0];\r\n        const isChild = first?.isUIElement?.() || isPrimitive(first) ;\r\n        return isChild \r\n                ? new Component({}, ...args)\r\n                : new Component(first, ...args.slice(1))\r\n    };\r\n};\r\nfunction add_vendor_prefix(property) {\r\n\tconst propertyUC = property.slice(0, 1).toUpperCase() + property.slice(1);\r\n\tconst vendors = ['Webkit', 'Moz', 'O', 'ms'];\r\n\tfor(let i = 0, len = vendors.length; i < len; i++) {\r\n\t\tconst vendor = vendors[i];\r\n\t\tif(typeof (globalThis?.document?.body).style[vendor + propertyUC] !== 'undefined') return vendor + propertyUC;\r\n\t}\r\n\treturn property;\r\n}\r\nconst normalize_css_value = value => typeof value === 'number' ? value+'px' : value;\r\nconst add_class = (UIElement, name) => UIElement.element.className = UIElement.element.className.replace(/\\s+$/gi, '') + ' ' + name;\r\nconst remove_class =(UIElement, name) => UIElement.element.className = UIElement.element.className.replace(name, '');\r\n\r\n// const addSuffixeToNumber=(value,suffixe=\"px\")=>{\r\n//   if(typeof value === \"number\") value+=suffixe;\r\n//   if(value instanceof Array)value=value.map(n=>typeof n===\"number\"?n+=suffixe:n).join(\" \");\r\n//   return value;\r\n// }\r\n\r\n// const Id = (a) => document.getElementById(a);\r\n// const Class = (a) => [...document.getElementsByClassName(a)];\r\n// const $=(...selector)=>{\r\n//   var ele=[]\r\n//   for(let i=0;i<selector.length;i++){\r\n//     if(typeof selector[i]==\"string\")ele.push(...document.querySelectorAll(selector[i]));\r\n//     if(selector[i] instanceof UIElement)ele.push(selector[i].element)\r\n//   }\r\n//   return ele.length===1?ele[0]:ele;\r\n// }\r\n\r\nconst style = (el, styles) => {if(el)Object.assign(el.style, styles);};\r\n\r\nfunction script(src) {\r\n  const Script = document?.createElement(\"script\");\r\n  Script.setAttribute(\"src\", src);\r\n  document.head.appendChild(Script);\r\n}\r\nfunction linkStyle(href) {\r\n  const link = document?.createElement(\"link\");\r\n  link.setAttribute(\"rel\", \"stylesheet\");\r\n  link.setAttribute(\"href\", href);\r\n  document.head.appendChild(link);\r\n}\r\nconst CloneElement = (UIElement) => {\r\n  var clone = new UIElement.__proto__.constructor();\r\n  //waitForUIElm(UIElement).then(e=>console.log(e)).then(()=>clone = new UIElement.__proto__.constructor())\r\n  //let a = new UIElement.__proto__.constructor()\r\n  return clone;\r\n};\r\nconst cloneUI=UIElement=>{\r\n  return Object.assign(Object.create(Object.getPrototypeOf(UIElement)),UIElement)\r\n};\r\nfunction isPrimitive(value) {\r\n    return typeof value !== 'object' && typeof value !== 'function' || value === null;\r\n}\r\nconst waitElm=(UIElement)=>{\r\n    return new Promise(resolve => {\r\n        if (UIElement) {\r\n            return resolve(UIElement);\r\n        }\r\n        const observer = new MutationObserver(() => {\r\n            if (UIElement) {\r\n                resolve(UIElement);\r\n                observer.disconnect();\r\n            }\r\n        });\r\n        observer.observe(document?.body, {\r\n            childList: true,\r\n            subtree: true\r\n        });\r\n    });\r\n  };\n\nclass UIView extends UIElement$1{\r\n    constructor(...items){\r\n        super({element : 'div', name : 'view'});\r\n        this.append(...items);\r\n    }\r\n}\r\n\r\nconst View = (...items) => new UIView(...items);\n\nconst HTMLTags = [\r\n  'a',\r\n  'abb',\r\n  'address',\r\n  'area',\r\n  'article',\r\n  'aside',\r\n  'audio',\r\n  'b',\r\n  'base',\r\n  'bdi',\r\n  'bdo',\r\n  'blockquote',\r\n  'br',\r\n  'button',\r\n  'canvas',\r\n  'caption',\r\n  'cite',\r\n  'code',\r\n  'col',\r\n  'colgroup',\r\n  'data',\r\n  'datalist',\r\n  'dd',\r\n  'del',\r\n  'details',\r\n  'dfn',\r\n  'dialog',\r\n  'div',\r\n  'dl',\r\n  'dt',\r\n  'em',\r\n  'embed',\r\n  'fieldset',\r\n  'figcaption',\r\n  'figure',\r\n  'footer',\r\n  'form',\r\n  'h1',\r\n  'h2',\r\n  'h3',\r\n  'h4',\r\n  'h5',\r\n  'h6',\r\n  'header',\r\n  'hgroup',\r\n  'hr',\r\n  'i',\r\n  'iframe',\r\n  'img',\r\n  'ipnut',\r\n  'ins',\r\n  'kbd',\r\n  'label',\r\n  'legend',\r\n  'li',\r\n  'main',\r\n  'map',\r\n  'mark',\r\n  'menu',\r\n  'meter',\r\n  'nav',\r\n  'object',\r\n  'ol',\r\n  'optgroup',\r\n  'option',\r\n  'output',\r\n  'p',\r\n  'param',\r\n  'picture',\r\n  'pre',\r\n  'progress',\r\n  'q',\r\n  'rp',\r\n  'rt',\r\n  'ruby',\r\n  's',\r\n  'samp',\r\n  'search',\r\n  'section',\r\n  'select',\r\n  'small',\r\n  'source',\r\n  'span',\r\n  'strong',\r\n  'sub',\r\n  'summary',\r\n  'sup',\r\n  'table',\r\n  'tbody',\r\n  'td',\r\n  'template',\r\n  'textarea',\r\n  'tfoot',\r\n  'th',\r\n  'thead',\r\n  'time',\r\n  'title',\r\n  'tr',\r\n  'track',\r\n  'u',\r\n  'ul',\r\n  'var',\r\n  'video',\r\n  'wbr'\r\n];\r\n\r\nconst SVGTags = [\r\n    \"svg\", \"g\", \"defs\", \"symbol\", \"use\", \"image\", \"switch\",\r\n    \"rect\", \"circle\", \"ellipse\", \"line\", \"polyline\", \"polygon\", \"path\",\r\n    \"text\", \"tspan\", \"textPath\", \"altGlyph\", \"altGlyphDef\", \"altGlyphItem\", \"glyph\", \"glyphRef\",\r\n    \"linearGradient\", \"radialGradient\", \"pattern\", \"solidColor\",\r\n    \"filter\", \"feBlend\", \"feColorMatrix\", \"feComponentTransfer\", \"feComposite\", \"feConvolveMatrix\",\r\n    \"feDiffuseLighting\", \"feDisplacementMap\", \"feDropShadow\", \"feFlood\", \"feFuncA\", \"feFuncR\", \"feFuncG\", \"feFuncB\",\r\n    \"feGaussianBlur\", \"feImage\", \"feMerge\", \"feMergeNode\", \"feMorphology\", \"feOffset\", \"feSpecularLighting\",\r\n    \"feTile\", \"feTurbulence\",\r\n    \"animate\", \"animateMotion\", \"animateTransform\", \"set\",\r\n    \"script\",\r\n    \"desc\", \"title\", \"metadata\", \"foreignObject\"\r\n  ];\r\n\r\nconst MathMLTags = [\r\n  'math', 'annotation', \r\n  `merror`,\r\n  `mfrac`,\r\n  `mi`, \r\n  `mprescripts`,\r\n  `mn`, \r\n  `mo`, `mover`,\r\n  `mpadded`, `mphantom`, `mprescripts`,\r\n  `mroot`, `mrow`,\r\n  `ms`, `semantics`, `mspace`, `msqrt`, `mstyle`, `msub`, `msup`, `msubsup`,\r\n  `mtable`, `mtd`, `mtext`, `mtr`,\r\n  `munder`, `munderover`\r\n];\n\n// const h=(tag, attributes = {}, ...children)=> _h(tag, \"html\", attributes, ...children);\r\n// const s=(tag, attributes = {}, ...children)=> _h(tag, \"svg\", attributes, ...children);\r\n\r\nconst tags = new Proxy({}, {\r\n  get(target, prop) {\r\n    if (typeof prop !== 'string') return undefined;\r\n    let tag = prop.replaceAll(\"_\",\"-\").toLowerCase();\r\n    let type ;\r\n    if(HTMLTags.includes(tag)) type = 'html';\r\n    if(SVGTags.includes(tag)) type = 'svg';\r\n    if(MathMLTags.includes(tag)) type = 'mathml';\r\n    return (...args)=>{\r\n      // Fix undefined\r\n      // console.log(isStateGetter(args[0]))\r\n      // console.log(!!args)\r\n      if(args.length === 0) {\r\n        // console.log('length 0')\r\n        return new UIElement$1({element : tag, name : tag, type})\r\n      }\r\n      if(\r\n        ['string', 'number'].includes(typeof args[0]) \r\n        || args[0] instanceof UIElement$1 \r\n        || (typeof args[0] === 'function' && args[0]().isStateGetter())\r\n      ) return new UIElement$1({element : tag, name : tag, type}).append(...args);\r\n      // console.log(args[0])\r\n      return new UIElement$1({element : tag, type}).setAttr(args.shift()).append(...args)\r\n    }\r\n    // if(SVGTags.includes(tag)) return (...args) => new UIElement(tag,\"\",{el_type : \"svg\"}).append(...args);\r\n    // return (...args)=>{\r\n    //   if(!(args[0] instanceof UIElement) && args[0] instanceof Object){\r\n    //     let attributes = args.shift()\r\n    //     return new UIElement(tag).setAttr(attributes).append(...args)\r\n    //   }\r\n    //   return new UIElement(tag).append(...args);\r\n    // }\r\n    // // switch(tag){\r\n    //   case \"html\"  : globalThis?.document?.createElement(\"html\")\r\n    //   case \"head\"  :\r\n    //   case \"style\" :\r\n    //   case \"link\"  :\r\n    //   case \"meta\"  :\r\n    //   case \"srcipt\":\r\n    //   case \"body\"  : return null; break;\r\n    //   default : return new UIElement(tag);\r\n    // }\r\n  }\r\n});\n\nfunction set_vertical(direction){\r\n  direction == 1\r\n    ? this.style({ flexDirection: \"column\" })\r\n    : direction == -1 && this.style({ flexDirection: \"column-reverse\" });\r\n  return this;\r\n}\r\nfunction set_horizontal(direction){\r\n    direction == 1\r\n        ? this.style({ flexDirection: \"row\" })\r\n        : direction == -1 && this.style({ flexDirection: \"row-reverse\" });\r\n    return this;\r\n}\r\nfunction map_pos_x(align){\r\n    let pos = [\"flex-start\", \"center\", \"flex-end\"];\r\n    if (typeof align === \"number\") align = pos[align + 1];\r\n    return align;\r\n}\r\nfunction map_pos_y(align){\r\n    return map_pos_x(-align);\r\n}\n\nclass UIFlex extends UIElement$1 {\r\n  constructor({tag = \"div\", orientation = \"h\", order, w = \"100%\", h = \"100%\"} = {}) {\r\n    super({element : tag , name : \"Flex\"});\r\n    this.direction = \"cols\";\r\n    this.style({ display: \"flex\" });\r\n    // this.mount();\r\n  }\r\n  isFlex(){\r\n    return true;\r\n  }\r\n  responsify(respBreakPoint, wrap = true) {\r\n    this.wrap(wrap);\r\n    if (this.element.clientWidth < respBreakPoint) this.vertical();\r\n    else this.horizontal();\r\n    return this;\r\n  }\r\n  setSpaceAround() {\r\n    this.style({ justifyContent: \"space-around\" });\r\n    return this;\r\n  }\r\n  setSpaceBetween() {\r\n    this.style({ justifyContent: \"space-between\" });\r\n    return this;\r\n  }\r\n  setBaseline() {\r\n    this.style({ alignItems: \"baseline\" });\r\n    return this;\r\n  }\r\n  gap(g) {\r\n    if (this.direction === \"row\") this.style({ columnGap: g });\r\n    else if (this.direction === \"column\") this.style({ rowGap: g });\r\n    return this;\r\n  }\r\n  wrap(value = \"wrap\") {\r\n    const values = [\"no-wrap\", \"wrap\",\"wrap-reverse\"];\r\n    this.style({\r\n      flexWrap: typeof value === \"string\" ? value : values[+value],\r\n    });\r\n    return this;\r\n  }\r\n  _justifyContent(align = \"center\") {\r\n    this.style({ justifyContent: align });\r\n    return this;\r\n  }\r\n  // verticalize\r\n  vertical(x, y, order = 1) {\r\n    set_vertical.call(this, order);\r\n    this.style({\r\n      alignItems: typeof(x)===\"number\"?map_pos_x.call(this,x):x,\r\n      justifyContent: typeof(y)==\"number\"?map_pos_y.call(this,y):y\r\n    });\r\n    return this;\r\n  }\r\n  // horizontalize\r\n  horizontal(x, y, order = 1) {\r\n    set_horizontal.call(this, order);\r\n    this.style({\r\n      alignItems: typeof(y)==\"number\"?map_pos_y.call(this,y):y,\r\n      justifyContent: typeof(x)===\"number\"?map_pos_x.call(this,x):x\r\n    });\r\n    return this;\r\n  }\r\n  show() {\r\n    this.isHidden = false;\r\n    this.style({ display: \"flex\" });\r\n    return this;\r\n  }\r\n}\r\n\r\nconst Flex = (...UIElement) =>{\r\n  let tag=\"div\";\r\n  if(typeof UIElement[0]===\"string\"){\r\n    tag=UIElement[0];\r\n    UIElement.pop();\r\n  }\r\n  return new UIFlex(tag).append(...UIElement);\r\n};\n\nclass UIElement extends UIElementCore{\r\n    constructor({element, name, type, render}){\r\n        super({element, name, type, render});\r\n    }\r\n}\n\nclass ZikoUISuspense extends UIElement{\r\n    constructor(fallback_ui, callback){\r\n        super({element : \"div\", name : \"suspense\"});\r\n        this.setAttr({\r\n            dataTemp : \"suspense\"\r\n        });\r\n        this.fallback_ui = fallback_ui;\r\n        this.append(fallback_ui);\r\n        (async ()=>{\r\n            try{\r\n                const ui = await callback();\r\n                fallback_ui.unmount();\r\n                this.append(ui);\r\n            }\r\n            catch(error){\r\n                console.log({error});\r\n            }\r\n        })();\r\n    }\r\n}\r\n\r\nconst Suspense = (fallback_ui, callback) => new ZikoUISuspense(fallback_ui, callback);\n\nclass UIHTMLWrapper extends UIElement$1 {\r\n    constructor(content){\r\n        super({element : 'div', name : 'html_wrappper'});\r\n        this.element.append(html2dom(content));\r\n        this.style({\r\n            display : 'contents'\r\n        });\r\n    }\r\n}\r\n\r\nfunction html2dom(htmlString) {\r\n    if(globalThis?.DOMParser){\r\n        const parser = new DOMParser();\r\n        const doc = parser.parseFromString(`<div>${htmlString}</div>`, 'text/html');\r\n        doc.body.firstChild.style.display = \"contents\";\r\n        return doc.body.firstChild;\r\n    }\r\n}\r\n\r\nconst HTMLWrapper = (content) => new UIHTMLWrapper(content);\n\nclass UISVGWrapper extends UIElement$1 {\r\n    constructor(content){\r\n        super({element : 'div', name : 'html_wrappper'});\r\n        this.element.append(svg2dom(content));\r\n        this.style({\r\n            display : 'contents'\r\n        });\r\n    }\r\n}\r\n\r\nfunction svg2dom(svgString) {\r\n  if (typeof DOMParser !== \"undefined\") {\r\n    const parser = new DOMParser();\r\n    const doc = parser.parseFromString(svgString.trim(), \"image/svg+xml\");\r\n    const svg = doc.documentElement;\r\n\r\n    if (svg.nodeName === \"parsererror\") {\r\n      throw new Error(\"Invalid SVG string\");\r\n    }\r\n    if(svg.hasAttribute('xmlns')) return svg\r\n    // TO Fix ...\r\n    const {children, attributes} = svg;\r\n    const element = document.createElementNS(\"http://www.w3.org/2000/svg\", \"svg\");\r\n    for(let {name, value} of attributes){\r\n      element.setAttribute(name, value);\r\n    }\r\n    element.append(...children);\r\n\r\n    globalThis.svg = svg;\r\n    globalThis.children = children; \r\n    globalThis.attributes = attributes;\r\n    globalThis.element = element;\r\n    return element;\r\n  }\r\n  throw new Error(\"DOMParser is not available in this environment\");\r\n}\r\n\r\n\r\n\r\nconst SVGWrapper = (content) => new UISVGWrapper(content);\n\nfunction define_wc(name, UI_Constructor, props = {}, { mode = 'open'} = {}) {\r\n    if (globalThis.customElements?.get(name)) {\r\n        console.warn(`Custom element \"${name}\" is already defined`);\r\n        return;\r\n    }\r\n    if(name.search('-') === -1){\r\n        console.warn(`\"${name}\" is not a valid custom element name`);\r\n        return; \r\n    }\r\n    globalThis.customElements?.define(\r\n        name,\r\n        class extends HTMLElement {\r\n            static get observedAttributes() {\r\n                return ['style', ...Object.keys(props)];\r\n            }\r\n\r\n            constructor() {\r\n                super();\r\n                this.attachShadow({ mode });\r\n                this.props = {};\r\n                this.mask = {\r\n                    ...props,\r\n                    // style: { type: Object }\r\n                };\r\n            }\r\n\r\n            connectedCallback() {\r\n                this.render();\r\n            }\r\n\r\n            render() {\r\n                this.shadowRoot.innerHTML = '';\r\n                const item = UI_Constructor(this.props);\r\n                if(item instanceof Array) item.forEach(n => n.mount(this.shadowRoot)); \r\n                else item.mount(this.shadowRoot);\r\n            }\r\n\r\n            attributeChangedCallback(name, _, newValue) {\r\n                Object.assign(this.props, {\r\n                    [name]: this.mask[name].type(newValue)\r\n                });\r\n                this.render();\r\n            }\r\n        }\r\n    );\r\n}\n\nclass UISwitch extends UIElement$1{\r\n    constructor(key, cases){\r\n        super();\r\n        this.key = key; \r\n        this.cases = cases;\r\n        this.init();\r\n    }\r\n    init(){\r\n        Object.values(this.cases).filter(n=>n != this.current).forEach(n=>n.unmount());\r\n        super.init(this.current.element);\r\n    }\r\n    get current(){\r\n        const matched = Object.keys(this.cases).find(n => n == this.key) ?? 'default';\r\n        return this.cases[matched]\r\n    }\r\n    updateKey(key){\r\n        this.key = key;\r\n        this.replaceElementWith(this.current.element);\r\n        // this.cache.element.replaceWith(this.current.element)\r\n        // this.cache.element = this.current.element;\r\n        return this;\r\n    }\r\n    \r\n}\r\n\r\nconst Switch=({key, cases})=> new UISwitch(key, cases);\r\n\r\n// export const Switch=({key, cases}) => {\r\n//     const matched = Object.keys(cases).find(n => n == key) ?? 'default';\r\n//     return this.cases[matched]()\r\n// }\n\nconst { PI, sqrt: sqrt$1, cos: cos$2, sin: sin$2, acos, pow } = Math;\r\n\r\nconst linear = t => t;\r\n\r\n// --- Sin ---\r\nconst in_sin = t => 1 - cos$2((t * PI) / 2);\r\nconst out_sin = t => sin$2((t * PI) / 2);\r\nconst in_out_sin = t => -(cos$2(PI * t) - 1) / 2;\r\n\r\n// --- Quad ---\r\nconst in_quad = t => t ** 2;\r\nconst out_quad = t => 1 - (1 - t) ** 2;\r\nconst in_out_quad = t =>\r\n    t < 0.5 ? 2 * (t ** 2) : 1 - (-2 * t + 2) ** 2 / 2;\r\n\r\n// --- Cubic ---\r\nconst in_cubic = t => t ** 3;\r\nconst out_cubic = t => 1 - (1 - t) ** 3;\r\nconst in_out_cubic = t =>\r\n    t < 0.5 ? 4 * (t ** 3) : 1 - (-2 * t + 2) ** 3 / 2;\r\n\r\n// --- Quart ---\r\nconst in_quart = t => t ** 4;\r\nconst out_quart = t => 1 - (1 - t) ** 4;\r\nconst in_out_quart = t =>\r\n    t < 0.5 ? 8 * (t ** 4) : 1 - (-2 * t + 2) ** 4 / 2;\r\n\r\n// --- Quint ---\r\nconst in_quint = t => t ** 5;\r\nconst out_quint = t => 1 - (1 - t) ** 5;\r\nconst in_out_quint = t =>\r\n    t < 0.5 ? 16 * (t ** 5) : 1 - (-2 * t + 2) ** 5 / 2;\r\n\r\n// --- Expo ---\r\nconst in_expo = t => (t === 0 ? 0 : 2 ** (10 * t - 10));\r\nconst out_expo = t => (t === 1 ? 1 : 1 - 2 ** (-10 * t));\r\nconst in_out_expo = t =>\r\n    t === 0\r\n        ? 0\r\n        : t === 1\r\n        ? 1\r\n        : t < 0.5\r\n        ? 2 ** (20 * t - 10) / 2\r\n        : (2 - 2 ** (-20 * t + 10)) / 2;\r\n\r\n// --- Circ ---\r\nconst in_circ = t => 1 - sqrt$1(1 - t ** 2);\r\nconst out_circ = t => sqrt$1(1 - (t - 1) ** 2);\r\nconst in_out_circ = t =>\r\n    t < 0.5\r\n        ? (1 - sqrt$1(1 - (2 * t) ** 2)) / 2\r\n        : (sqrt$1(1 - (-2 * t + 2) ** 2) + 1) / 2;\r\n\r\n// --- Arc ---\r\nconst arc = t => 1 - sin$2(acos(t));\r\n\r\n// --- Back ---\r\nconst back = (t, x = 1) => (t ** 2) * ((x + 1) * t - x);\r\n\r\n// --- Elastic ---\r\nconst elastic = t =>\r\n    -2 * pow(2, 10 * (t - 1)) * cos$2((20 * PI * t) / 3 * t);\r\n\r\n// --- Back variations ---\r\nconst in_back = (t, c1 = 1.70158, c3 = c1 + 1) =>\r\n    c3 * pow(t, 3) - c1 * (t ** 2);\r\n\r\nconst out_back = (t, c1 = 1.70158, c3 = c1 + 1) =>\r\n    1 + c3 * pow(t - 1, 3) + c1 * pow(t - 1, 2);\r\n\r\nconst in_out_back = (t, c1 = 1.70158, c2 = c1 * 1.525) =>\r\n    t < 0.5\r\n        ? (pow(2 * t, 2) * ((c2 + 1) * 2 * t - c2)) / 2\r\n        : (pow(2 * t - 2, 2) * ((c2 + 1) * (t * 2 - 2) + c2) + 2) / 2;\r\n\r\n// --- Elastic variations ---\r\nconst in_elastic = (t, c4 = (2 * PI) / 3) =>\r\n    t === 0\r\n        ? 0\r\n        : t === 1\r\n        ? 1\r\n        : -pow(2, 10 * t - 10) * sin$2((t * 10 - 10.75) * c4);\r\n\r\nconst out_elastic = (t, c4 = (2 * PI) / 3) =>\r\n    t === 0\r\n        ? 0\r\n        : t === 1\r\n        ? 1\r\n        : pow(2, -10 * t) * sin$2((t * 10 - 0.75) * c4) + 1;\r\n\r\nconst in_out_elastic = (t, c5 = (2 * PI) / 4.5) =>\r\n    t === 0\r\n        ? 0\r\n        : t === 1\r\n        ? 1\r\n        : t < 0.5\r\n        ? -(pow(2, 20 * t - 10) * sin$2((20 * t - 11.125) * c5)) / 2\r\n        : (pow(2, -20 * t + 10) * sin$2((20 * t - 11.125) * c5)) / 2 + 1;\r\n\r\n// --- Bounce ---\r\nconst in_bounce = (t, n1 = 7.5625, d1 = 2.75) =>\r\n    1 - out_bounce(1 - t, n1, d1);\r\n\r\nconst out_bounce = (t, n1 = 7.5625, d1 = 2.75) => {\r\n    if (t < 1 / d1) return n1 * t * t;\r\n    if (t < 2 / d1) return n1 * (t -= 1.5 / d1) * t + 0.75;\r\n    if (t < 2.5 / d1) return n1 * (t -= 2.25 / d1) * t + 0.9375;\r\n    return n1 * (t -= 2.625 / d1) * t + 0.984375;\r\n};\r\n\r\nconst in_out_bounce = (t, n1 = 7.5625, d1 = 2.75) =>\r\n    t < 0.5\r\n        ? out_bounce(1 - 2 * t, n1, d1) / 2\r\n        : out_bounce(2 * t - 1, n1, d1) / 2;\r\n\r\n// --- Step / Discrete ---\r\nconst step = (t, steps = 5) => Math.floor(t * steps) / steps;\r\nconst discret = (t, segments = 5) => Math.ceil(t * segments) / segments;\n\nclass TimeAnimation {\r\n  constructor(callback, { ease = linear, step = 50, t0 = 0, start = true, duration = 3000 } = {}) {\r\n    this.callback = callback;\r\n    this.state = {\r\n      isRunning: false,\r\n      animationId: null,\r\n      startTime: null,\r\n      ease,\r\n      step,\r\n    //   interval: [t0, t1],\r\n      autoStart: start,\r\n      duration\r\n    };\r\n\r\n    this.t = 0;   // elapsed time\r\n    this.tx = 0;  // normalized [0,1]\r\n    this.ty = 0;  // eased value\r\n    this.i = 0;   // frame index\r\n\r\n    if (this.state.autoStart) {\r\n      this.start();\r\n    }\r\n  }\r\n\r\n  // ---- private loop handler ----\r\n  #tick = () => {\r\n    this.t += this.state.step;\r\n    this.i++;\r\n\r\n    this.tx = map$1(this.t, 0, this.state.duration, 0, 1);\r\n    this.ty = this.state.ease(this.tx);\r\n\r\n    this.callback(this);\r\n\r\n    if (this.t >= this.state.duration) {\r\n      clearInterval(this.state.animationId);\r\n      this.state.isRunning = false;\r\n    }\r\n  };\r\n\r\n  // ---- core runner ----\r\n  #run(reset = true) {\r\n    if (!this.state.isRunning) {\r\n      if (reset) this.reset(false);\r\n\r\n      this.state.isRunning = true;\r\n      this.state.startTime = Date.now();\r\n      this.state.animationId = setInterval(this.#tick, this.state.step);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  // ---- lifecycle methods ----\r\n  start() {\r\n    return this.#run(true);\r\n  }\r\n\r\n  pause() {\r\n    if (this.state.isRunning) {\r\n      clearInterval(this.state.animationId);\r\n      this.state.isRunning = false;\r\n    }\r\n    return this;\r\n  }\r\n\r\n  resume() {\r\n    return this.#run(false);\r\n  }\r\n\r\n  stop() {\r\n    this.pause();\r\n    this.reset(false);\r\n    return this;\r\n  }\r\n\r\n  reset(restart = true) {\r\n    this.t = 0;\r\n    this.tx = 0;\r\n    this.ty = 0;\r\n    this.i = 0;\r\n\r\n    if (restart) this.start();\r\n    return this;\r\n  }\r\n}\r\n\r\n// Hook-style factory\r\nconst animation = (callback, {ease, t0, t1, start, duration} = {}) =>\r\n  new TimeAnimation(callback, {ease, t0, t1, start, duration});\n\nclass Tick {\r\n  constructor(fn, ms, count = Infinity, start) {\r\n    this.ms = ms;\r\n    this.fn = fn;\r\n    this.count = count;\r\n    this.frame = 1;\r\n    this.id = null;\r\n    this.running = false;\r\n    if(start) this.start();\r\n  }\r\n\r\n  start() {\r\n    if (!this.running) {\r\n      this.running = true;\r\n      this.frame = 1;\r\n      this.id = setInterval(() => {\r\n        if (this.frame > this.count) {\r\n          this.stop();\r\n          return;\r\n        }\r\n        this.fn.call(null, this);\r\n        this.frame++;\r\n      }, this.ms);\r\n    }\r\n    return this;\r\n  }\r\n\r\n  stop() {\r\n    if (this.running) {\r\n      this.running = false;\r\n      clearInterval(this.id);\r\n      this.id = null;\r\n    }\r\n    return this;\r\n  }\r\n\r\n  isRunning() {\r\n    return this.running;\r\n  }\r\n}\r\n\r\n// Helper factory\r\nconst tick = (fn, ms, count = Infinity, start = true) => new Tick(fn, ms, count, start);\n\nclass Clock extends Tick {\r\n  constructor(tickMs = 1000 / 60) {\r\n    super(tickMs, () => this._tick());\r\n    this.elapsed = 0;\r\n    this._lastTime = performance.now();\r\n    this._callbacks = new Set();\r\n  }\r\n\r\n  _tick() {\r\n    const now = performance.now();\r\n    const delta = now - this._lastTime;\r\n    this.elapsed += delta;\r\n    this._lastTime = now;\r\n\r\n    for (const cb of this._callbacks) {\r\n      cb({ elapsed: this.elapsed, delta });\r\n    }\r\n  }\r\n\r\n  onTick(cb) {\r\n    this._callbacks.add(cb);\r\n    return () => this._callbacks.delete(cb); \r\n  }\r\n\r\n  reset() {\r\n    this.elapsed = 0;\r\n    this._lastTime = performance.now();\r\n  }\r\n\r\n  pause() {\r\n    super.stop();\r\n  }\r\n\r\n  resume() {\r\n    this._lastTime = performance.now();\r\n    super.start();\r\n  }\r\n}\r\n\r\nconst clock = (tickMs) => new Clock(tickMs);\r\n\r\n\r\n/* \r\n\r\n    const clock = new Clock(200);\r\n\r\n    clock.onTick(({ elapsed, delta }) => {\r\n      console.log(`Elapsed: ${elapsed.toFixed(0)}ms, Delta: ${delta.toFixed(0)}ms`);\r\n    });\r\n\r\n    clock.start();\r\n\r\n    setTimeout(() => clock.pause(), 1000);  \r\n    setTimeout(() => clock.resume(), 2000); \r\n\r\n*/\n\nclass TimeScheduler {\r\n  constructor(tasks = [], { repeat = 1, loop = false } = {}) {\r\n    this.tasks = tasks;\r\n    this.repeat = repeat;\r\n    this.loop = loop;\r\n\r\n    this.stopped = false;\r\n    this.running = false;\r\n\r\n    // lifecycle hooks\r\n    this.onStart = null;\r\n    this.onTask = null;\r\n    this.onEnd = null;\r\n  }\r\n\r\n  async run() {\r\n    if (this.running) return;\r\n    this.running = true;\r\n    this.stopped = false;\r\n\r\n    if (this.onStart) this.onStart();\r\n\r\n    let repeatCount = this.repeat;\r\n\r\n    do {\r\n      for (const task of this.tasks) {\r\n        if (this.stopped) return;\r\n\r\n        if (Array.isArray(task)) {\r\n          // Parallel tasks\r\n          await Promise.all(\r\n            task.map(({ fn, delay = 0 }) =>\r\n              new Promise(async (resolve) => {\r\n                if (delay > 0) await new Promise(r => setTimeout(r, delay));\r\n                if (this.onTask) this.onTask(fn);\r\n                await fn();\r\n                resolve();\r\n              })\r\n            )\r\n          );\r\n        } else {\r\n          // Single task\r\n          const { fn, delay = 0 } = task;\r\n          if (delay > 0) await new Promise(r => setTimeout(r, delay));\r\n          if (this.onTask) this.onTask(fn);\r\n          await fn();\r\n        }\r\n      }\r\n    } while (this.loop && !this.stopped && (repeatCount === Infinity || repeatCount-- > 1));\r\n\r\n    if (!this.stopped && this.onEnd) this.onEnd();\r\n    this.running = false;\r\n  }\r\n\r\n  stop() {\r\n    this.stopped = true;\r\n    this.running = false;\r\n  }\r\n\r\n  addTask(task) {\r\n    this.tasks.push(task);\r\n  }\r\n\r\n  clearTasks() {\r\n    this.tasks = [];\r\n  }\r\n}\r\n\r\nconst Scheduler = (tasks, { repeat = null} = {}) => new TimeScheduler(tasks, { repeat});\n\nconst step_fps = (step_or_fps) => 1000 / step_or_fps;\n\nconst sleep= ms => new Promise(res => setTimeout(res, ms));\r\nfunction timeout(ms, fn) {\r\n  let id;\r\n  const promise = new Promise((resolve) => {\r\n    id = setTimeout(() => {\r\n      if (fn) fn();\r\n      resolve();\r\n    }, ms);\r\n  });\r\n\r\n  return {\r\n    id,\r\n    clear: () => clearTimeout(id),\r\n    promise\r\n  };\r\n}\n\nclass TimeLoop {\r\n  constructor(callback, { step = 1000, t0 = 0, t1 = Infinity, autoplay = true } = {}) {\r\n    this.callback = callback;\r\n    this.cache = {\r\n      isRunning: false,\r\n      id: null,\r\n      last_tick: null,\r\n      step,\r\n      t0,\r\n      t1,\r\n      autoplay,\r\n      pauseTime: null,\r\n      frame : 0,\r\n    };\r\n\r\n    if (autoplay) {\r\n      t0 ? this.startAfter(t0) : this.start();\r\n      if (t1 !== Infinity) this.stopAfter(t1);\r\n    }\r\n  }\r\n\r\n  get frame(){\r\n    return this.cache.frame;\r\n  }\r\n  get elapsed(){\r\n    return this.cache.elapsed;\r\n  }\r\n\r\n  start() {\r\n    if (!this.cache.isRunning) {\r\n      this.cache.frame = 0;\r\n      this.cache.isRunning = true;\r\n      this.cache.last_tick = Date.now();\r\n      this.animate();\r\n    }\r\n    return this;\r\n  }\r\n\r\n  pause() {\r\n    if (this.cache.isRunning) {\r\n      clearTimeout(this.cache.id);\r\n      this.cache.isRunning = false;\r\n      this.cache.pauseTime = Date.now();\r\n    }\r\n    return this;\r\n  }\r\n\r\n  resume() {\r\n    if (!this.cache.isRunning) {\r\n      this.cache.isRunning = true;\r\n      if (this.cache.pauseTime) {\r\n        // adjust start time so delta stays consistent\r\n        const pausedDuration = Date.now() - this.cache.pauseTime;\r\n        this.cache.last_tick += pausedDuration;\r\n      }\r\n      this.animate();\r\n    }\r\n    return this;\r\n  }\r\n\r\n  stop() {\r\n    this.pause();\r\n    this.cache.frame = 0;\r\n    return this;\r\n  }\r\n\r\n  startAfter(t = 1000) {\r\n    setTimeout(() => this.start(), t);\r\n    return this;\r\n  }\r\n\r\n  stopAfter(t = 1000) {\r\n    setTimeout(() => this.stop(), t);\r\n    return this;\r\n  }\r\n\r\n  animate = () => {\r\n    if (this.cache.isRunning) {\r\n      const now = Date.now();\r\n      const delta = now - this.cache.last_tick;\r\n\r\n      if (delta >= this.cache.step) {\r\n        this.cache.elapsed = now - (this.cache.t0 || 0);\r\n        this.callback(this);\r\n        this.cache.frame++;\r\n        this.cache.last_tick = now - (delta % this.cache.step);\r\n      }\r\n\r\n      this.cache.id = setTimeout(this.animate, 0);\r\n    }\r\n  }\r\n}\r\n\r\nconst loop = (callback, options = {}) => new TimeLoop(callback, options);\r\n\r\n\r\n// Helpers\r\n// const useFps = (fps) => 1000 / fps;\r\n\r\n// const _loop = loop( e => {\r\n//   console.log(\"Frame:\", e.frame, \" Elapsed: \", e.elapsed);\r\n// });\n\nconst time_memory_Taken = (callback) => {\r\n    const t0 = Date.now();\r\n    const m0 = performance.memory.usedJSHeapSize;\r\n    const result = callback();\r\n    const t1 = Date.now();\r\n    const m1 = performance.memory.usedJSHeapSize;\r\n    const elapsedTime = t1 - t0;\r\n    const usedMemory = m1 - m0;\r\n    return { \r\n        elapsedTime,\r\n        usedMemory, \r\n        result \r\n    };\r\n  };\n\nconst waitForUIElm=(UIElement)=>{\r\n    return new Promise(resolve => {\r\n        if (UIElement.element) {\r\n            return resolve(UIElement.element);\r\n        }\r\n  \r\n        const observer = new MutationObserver(() => {\r\n            if (UIElement.element) {\r\n                resolve(UIElement.element);\r\n                observer.disconnect();\r\n            }\r\n        });\r\n  \r\n        observer.observe(document?.body, {\r\n            childList: true,\r\n            subtree: true\r\n        });\r\n    });\r\n  };\r\n  const waitForUIElmSync=(UIElement,timeout=2000)=>{\r\n    const t0=Date.now();\r\n    while(Date.now()-t0<timeout){\r\n      if(UIElement.element)return UIElement.element\r\n    }\r\n  };\n\n// import Ease from \"./ease.js\";\r\nconst wait=(delayInMS)=>{\r\n    return new Promise((resolve) => setTimeout(resolve, delayInMS));\r\n};\r\nconst timeTaken = callback => {\r\n    console.time('timeTaken');\r\n    const r = callback();\r\n    console.timeEnd('timeTaken');\r\n    return r;\r\n};\n\nconst csv2arr = (csv, delimiter = \",\")=>csv.trim().trimEnd().split(\"\\n\").map(n=>n.split(delimiter));\r\nconst csv2matrix = (csv, delimiter = \",\")=>new Matrix(csv2arr(csv,delimiter));\r\nconst csv2object = (csv, delimiter = \",\") => {\r\n    const [header, ...rows] = csv2arr(csv,delimiter);\r\n    const result = rows.map(row => {\r\n        const obj = {};\r\n        header.forEach((key, index) => {\r\n            obj[key] = row[index];\r\n        });\r\n        return obj;\r\n    });\r\n    return result;\r\n};\r\nconst csv2json = (csv, delimiter = \",\") => JSON.stringify(csv2object(csv,delimiter));\r\nconst csv2sql=(csv, Table)=>{\r\n    const lines = csv.trim().trimEnd().split('\\n').filter(n=>n);\r\n    const columns = lines[0].split(',');\r\n    let sqlQuery = `INSERT INTO ${Table} (${columns.join(', ')}) Values `;\r\n    let sqlValues = [];\r\n    for (let i = 1; i < lines.length; i++) {\r\n      const values = lines[i].split(',');\r\n      sqlValues.push(`(${values})`);\r\n    }\r\n    return sqlQuery+sqlValues.join(\",\\n\");\r\n  };\n\nconst _objects2arr=data=>data instanceof Array?[Object.keys(data[0]),...data.map(n=>Object.values(n))]:[Object.keys(data)];\r\nconst _objects2csv=(data,delimiter)=>_objects2arr(data).map(n=>n.join(delimiter)).join(\"\\n\");\r\nconst json2arr=json=>json instanceof Object?_objects2arr(json):_objects2arr(JSON.parse(json));\r\nconst json2csv=(json,delimiter=\",\")=>json instanceof Object?_objects2csv(json,delimiter):_objects2csv(JSON.parse(json),delimiter);\r\nconst json2csvFile=(json,delimiter)=>{\r\n    const str=json2csv(json,delimiter);\r\n    const blob=new Blob([str], { type: 'text/csv;charset=utf-8;' });\r\n    return {\r\n       str,\r\n       blob,\r\n       url:URL.createObjectURL(blob)\r\n    }\r\n};\r\nconst _processObject=(obj, indent)=>{\r\n    const yml = [];\r\n    if (Array.isArray(obj)) {\r\n        obj.forEach(item => {\r\n            if (typeof item === 'object' && item !== null) {\r\n                yml.push(`${indent}-`);\r\n                const nestedLines = _processObject(item, `${indent}  `);\r\n                yml.push(...nestedLines);\r\n            } else yml.push(`${indent}- ${item}`);\r\n        });\r\n    } else {\r\n        for (const key in obj) {\r\n            if (obj.hasOwnProperty(key)) {\r\n                const value = obj[key];\r\n                if (typeof value === 'object' && value !== null) {\r\n                    yml.push(`${indent}${key}:`);\r\n                    const nestedLines = _processObject(value, `${indent}  `);\r\n                    yml.push(...nestedLines);\r\n                } else {\r\n                    yml.push(`${indent}${key}: ${value}`);\r\n                }\r\n            }\r\n        }\r\n    }\r\n    return yml;\r\n};\r\nconst _object2yml=(object,indent=\"\")=>_processObject(object,indent).join('\\n');\r\nconst json2yml=(json,indent)=>json instanceof Object?_object2yml(json,indent):_object2yml(JSON.parse(json),indent);\r\nconst json2ymlFile=(json,indent)=>{\r\n    const str=json2yml(json,indent);\r\n    const blob=new Blob([str], { type: 'text/yml;charset=utf-8;' });\r\n    return {\r\n       str,\r\n       blob,\r\n       url:URL.createObjectURL(blob)\r\n    }\r\n};\r\nconst json2xml=(json, indent = 1)=>{\r\n    let xml = '';\r\n    for (const key in json) {\r\n      if (json.hasOwnProperty(key)) {\r\n        const value = json[key];\r\n        xml += '\\n' + ' '.repeat(indent) + `<${key}>`;\r\n        (typeof value === 'object') ? xml += json2xml(value, indent + 2) : xml += `${value}`;\r\n        xml += `</${key}>`;\r\n      }\r\n    }\r\n    return xml.trim();\r\n  };\r\nconst json2xmlFile=(json,indent)=>{\r\n    const str=json2xml(json,indent);\r\n    const blob=new Blob([str], { type: 'text/xml;charset=utf-8;' });\r\n    return {\r\n       str,\r\n       blob,\r\n       url:URL.createObjectURL(blob)\r\n    }\r\n};\n\nconst svg2str=svg=>(new XMLSerializer()).serializeToString(svg);\r\nconst svg2ascii=svg=>btoa(svg2str(svg));\r\nconst svg2imgUrl=svg=>'data:image/svg+xml;base64,'+svg2ascii(svg);\r\nconst svg2img=(svg,render=true)=>tags.img(svg2imgUrl(svg)).mount(render);\n\n// const obj2str=(object)=>{\r\n//     const recursiveToString = (obj) => {\r\n//       if (Array.isArray(obj)) return arr2str(obj);\r\n//       if (typeof obj === 'object' && obj !== null) {\r\n//         return `{ ${Object.entries(obj)\r\n//           .map(([key, value]) => `${key}:${recursiveToString(value)}`)\r\n//           .join(\" , \")} }`;\r\n//       }\r\n//       return String(obj); \r\n//     };\r\n//     return recursiveToString(object);\r\n//   };\r\n//   const obj2str = (object) => {\r\n//     const recursiveToString = (obj, indentLevel = 0) => {\r\n//       const indent = '  '.repeat(indentLevel);\r\n//       const nextIndent = '  '.repeat(indentLevel + 1);\r\n//       if(Array.isArray(obj)) return arr2str(obj, indentLevel);\r\n//       if(obj instanceof Complex || obj instanceof Matrix) return obj.toString();\r\n//       if (typeof obj === 'object' && obj !== null) {\r\n//         const entries = Object.entries(obj)\r\n//           .map(([key, value]) => `${nextIndent}${key}: ${recursiveToString(value, indentLevel + 1)}`)\r\n//           .join(\",\\n\");\r\n  \r\n//         return `{\\n${entries}\\n${indent}}`;\r\n//       }\r\n  \r\n//       return String(obj);\r\n//     };\r\n  \r\n//     return recursiveToString(object);\r\n//   };\r\n// const obj2str = (object, useIndentation = true, indentLevel = 0) => {\r\n//     const recursiveToString = (obj, level = 0) => {\r\n//       const indent = useIndentation ? '  '.repeat(level) : '';\r\n//       const nextIndent = useIndentation ? '  '.repeat(level + 1) : '';\r\n//     if (Array.isArray(obj)) return arr2str(obj, false, level);\r\n//     if(obj instanceof Complex || obj instanceof Matrix) return obj.toString();\r\n//     if (typeof obj === 'object' && obj !== null) {\r\n//         const entries = Object.entries(obj)\r\n//           .map(([key, value]) => useIndentation \r\n//             ? `${nextIndent}${key}: ${recursiveToString(value, level + 1)}` \r\n//             : `${key}: ${recursiveToString(value, level + 1)}`\r\n//           ).join(useIndentation ? \",\\n\" : \", \");\r\n  \r\n//         return useIndentation \r\n//           ? `{\\n${entries}\\n${indent}}` \r\n//           : `{${entries}}`;\r\n//       }\r\n  \r\n//       return String(obj);\r\n//     };\r\n  \r\n//     return recursiveToString(object, indentLevel);\r\n//   };\r\n\r\nconst obj2str=(obj)=>JSON.stringify(\r\n  mapfun(n=>{\r\n    if([\"number\",\"string\",\"boolean\",\"bigint\"].includes(typeof n)) return String(n);\r\n    if(n instanceof Complex || n instanceof Matrix) return n.toString();\r\n    if(n instanceof Array) return arr2str(n)\r\n  },\r\n  obj), null, \"  \")\r\n  .replace(/\"([^\"]+)\":/g, '$1:') // Remove Quotes from Keys \r\n  .replace(/: \"([^\"]+)\"/g, ': $1'); // Remove Quotes from str values\n\nconst getMaxDepth = arr=> {\r\n  if (!Array.isArray(arr)) return 0;\r\n  let maxDepth = 1;\r\n  for (const element of arr) {\r\n    if (Array.isArray(element)) {\r\n      const depth = getMaxDepth(element);\r\n      if (depth + 1 > maxDepth) {\r\n        maxDepth = depth + 1;\r\n      }\r\n    }\r\n  }\r\n  return maxDepth;\r\n};\r\nconst arr2str = (arr) => {\r\n  let level = 0;\r\n  function arrStringify(arr) {\r\n    let max = getMaxDepth(arr);\r\n    let useIdentation = 0;\r\n    if (arr.some((n) => Array.isArray(n))) {\r\n      level++;\r\n      useIdentation = 1;   \r\n    }\r\n    return (\r\n      \"[\" +\r\n      arr.map((n, i) => {\r\n        if ([\"number\", \"string\", \"boolean\", \"bigint\"].includes(typeof n))\r\n          return String(n);\r\n        if (n instanceof Complex) return n.toString();\r\n        if (n instanceof Array) {\r\n          return `\\n${\"  \".repeat(level)}${arrStringify(n)}${i === arr.length - 1 ? \"\\n\" : \"\"}`;\r\n        }\r\n        if( n instanceof Object) return obj2str(n);\r\n      }) \r\n      + `${\"  \".repeat((max+level+1) * useIdentation)}]` \r\n    );\r\n  }\r\n  return arrStringify(arr);\r\n};\n\nconst json2css=(json, indentLevel = 0)=>{\r\n    json = trimKeys(json);\r\n    let cssText = '';\r\n    const indent = '  '.repeat(indentLevel); \r\n\r\n    for (let selector in json) {\r\n        if (typeof json[selector] === 'object') {\r\n            cssText += `${indent}${selector} {\\n`;\r\n            const properties = json[selector];\r\n            for (let property in properties) {\r\n                if (typeof properties[property] === 'object') {\r\n                    cssText += json2css({ [property]: properties[property] }, indentLevel + 1);\r\n                } else {\r\n                    cssText += `${indent}  ${property.replace(/[A-Z]/g, match => '-' + match.toLowerCase())}: ${properties[property]};\\n`;\r\n                }\r\n            }\r\n\r\n            cssText += `${indent}}\\n`; \r\n        }\r\n    }\r\n\r\n    return cssText;\r\n};\r\nfunction trimKeys(obj) {\r\n    if (typeof obj !== 'object' || obj === null) {\r\n        return obj; \r\n    }\r\n\r\n    return Object.keys(obj).reduce((acc, key) => {\r\n        const trimmedKey = key.trim();\r\n        acc[trimmedKey] = trimKeys(obj[key]);\r\n        return acc;\r\n    }, Array.isArray(obj) ? [] : {});\r\n}\n\n// import { ZikoHead , useHead} from \"../reactivity/hooks/head/index.js\";\r\nclass ZikoApp {\r\n    constructor({head = null, wrapper = null, target = null}){\r\n        this.head = head;\r\n        this.wrapper = wrapper;\r\n        this.target = target;\r\n        this.init();        \r\n    }\r\n    get isZikoApp(){\r\n        return true;\r\n    }\r\n    init(){\r\n        this.head && this.setHead(this.head);\r\n        this.wrapper && this.setWrapper(this.wrapper);\r\n        this.target && this.setTarget(this.target);\r\n        if(this.wrapper && this.target)this.wrapper.mount(this.target);\r\n    }\r\n    setTarget(target){\r\n        if(target instanceof HTMLElement) this.target = target;\r\n        else if (typeof target === \"string\") this.target = globalThis?.document?.querySelector(target);\r\n        return this;\r\n    }\r\n    setWrapper(wrapper){\r\n        if(wrapper?.isUIElement) this.wrapper = wrapper;\r\n        else if(typeof wrapper === \"function\") this.wrapper = wrapper();\r\n        return this;\r\n    }\r\n    // setHead(head){\r\n    //     if(head instanceof ZikoHead) this.head = head;\r\n    //     else this.head = useHead(head);\r\n    //     return this;  \r\n    // }\r\n    \r\n}\r\nconst App = ({head, wrapper, target}) => new ZikoApp({head, wrapper, target});\n\nfunction routesMatcher(mask, route) {\r\n    const maskSegments = mask.split('/');\r\n    const routeSegments = route.split('/');\r\n    if (maskSegments.length !== routeSegments.length) {\r\n        return false;\r\n    }\r\n    for (let i = 0; i < maskSegments.length; i++) {\r\n        const maskSegment = maskSegments[i];\r\n        const routeSegment = routeSegments[i];\r\n        if (maskSegment.startsWith(':')) {\r\n            continue;\r\n        } else if (maskSegment !== routeSegment) {\r\n            return false;\r\n        }\r\n    }    \r\n    return true;\r\n}\r\nfunction dynamicRoutesParser(mask, route) {\r\n    const maskSegments = mask.split('/');\r\n    const routeSegments = route.split('/');\r\n    const params = {};\r\n    if (maskSegments.length !== routeSegments.length) {\r\n        return params; \r\n    }\r\n    for (let i = 0; i < maskSegments.length; i++) {\r\n        const maskSegment = maskSegments[i];\r\n        const routeSegment = routeSegments[i];\r\n        if (maskSegment.startsWith(':')) {\r\n            const paramName = maskSegment.slice(1); \r\n            params[paramName] = routeSegment;\r\n        } else if (maskSegment !== routeSegment) {\r\n            return {};\r\n        }\r\n    }\r\n    return params;\r\n}\r\n\r\nfunction isDynamic(path) {\r\n    const DynamicPattern = /:\\w+/;    \r\n    return DynamicPattern.test(path);\r\n  }\r\n\r\n// // Example usage:\r\n// const mask = \"app/lang/:lang/id/:id\";\r\n// const route = \"app/lang/en/id/7\";\r\n// console.log(dynamicRoutesParser(mask, route)); // Should return { lang: \"en\", id: \"7\" }\n\nclass ZikoSPA extends ZikoApp{\r\n    constructor({head, wrapper, target, routes}){\r\n        super({head, wrapper, target});\r\n        this.routes=new Map([\r\n            [\"404\",text(\"Error 404\")],\r\n            ...Object.entries(routes)\r\n        ]);\r\n        this.clear();\r\n        globalThis.onpopstate = this.mount(location.pathname);\r\n    }\r\n    clear(){\r\n        [...this.routes].forEach(n=>{\r\n            !isDynamic(n[0]) && n[1]?.isUIElement && n[1].unmount();\r\n        });   \r\n        // this.wrapper.clear();\r\n        return this;\r\n    }\r\n    mount(path){\r\n        const [mask, callback] = [...this.routes].find(route=>routesMatcher(route[0],path));\r\n        let element ;\r\n        if(isDynamic(mask)){\r\n            const params = dynamicRoutesParser(mask, path);\r\n            element = callback.call(this,params);\r\n        }\r\n        else {\r\n            callback?.isUIElement && callback.mount(this.wrapper); \r\n            if(typeof callback === \"function\") element = callback();  \r\n        }\r\n        if(element?.isUIElement) element.mount(this.wrapper);\r\n        // if(element?.isZikoApp) element.mount(this.wrapper);\r\n        if(element instanceof Promise){\r\n            element.then(e=>e.mount(this.wrapper));\r\n        }\r\n        globalThis.history.pushState({}, \"\", path);\r\n        return this;\r\n    }\r\n}\r\nconst SPA=({head, wrapper, target, routes})=>new ZikoSPA({head, wrapper, target, routes});\r\n\r\n\r\n/*\r\n // Static \r\n  S.get(\"/url\",wrapper)\r\n// Dynamique \r\n s.get(\"/url/name/:name/id/:id\",(path,name,id)=>handler())\r\n// regEx\r\n*/\n\nfunction parseQueryParams(queryString) {\r\n    const params = {};\r\n    queryString.replace(/[A-Z0-9]+?=([\\w|:|\\/\\.]*)/gi, (match) => {\r\n        const [key, value] = match.split('=');\r\n        params[key] = value;\r\n    });\r\n    return params;\r\n}\r\n\r\nfunction defineParamsGetter(target ){\r\n    Object.defineProperties(target, {\r\n        'QueryParams': {\r\n            get: function() {\r\n                return parseQueryParams(globalThis.location.search.substring(1));\r\n            },\r\n            configurable: false,\r\n            enumerable: true \r\n        },\r\n        'HashParams': {\r\n            get: function() {\r\n                const hash = globalThis.location.hash.substring(1);\r\n                return hash.split(\"#\");\r\n            },\r\n            configurable: false,\r\n            enumerable: true \r\n        }\r\n    });\r\n}\n\n// import.meta.glob('./src/pages/**/*.js')\r\nasync function FileBasedRouting(pages /* use import.meta.glob */){\r\n   const routes = Object.keys(pages);\r\n   const root = findCommonPath(routes);\r\n   const pairs = {};\r\n   for(let i=0; i<routes.length; i++){\r\n      const module = await pages[routes[i]]();\r\n      const component = await module.default;\r\n      Object.assign(pairs,{[customPath(routes[i], root)]:component});\r\n   }\r\n   return SPA({\r\n      target : document.body,\r\n      routes : {\r\n         \"/\" : ()=>{},\r\n         ...pairs\r\n      },\r\n      wrapper : tags.section()\r\n   })   \r\n}\r\nfunction customPath(inputPath, root = './src/pages', extensions = ['js', 'ts']) {\r\n   if(root.at(-1)===\"/\") root = root.slice(0, -1);\r\n   const normalizedPath = inputPath.replace(/\\\\/g, '/').replace(/\\[(\\w+)\\]/g, '$1/:$1');\r\n   const parts = normalizedPath.split('/');\r\n   const rootParts = root.split('/');\r\n   const rootIndex = parts.indexOf(rootParts.at(-1));\r\n   if (rootIndex !== -1) {\r\n       const subsequentParts = parts.slice(rootIndex + 1);\r\n       const lastPart = parts.at(-1);\r\n       const isIndexFile = lastPart === 'index.js' || lastPart === 'index.ts';\r\n    //    console.log({extensions, subsequentParts, lastPart, isIndexFile, rootParts, rootIndex, parts})\r\n       const hasValidExtension = extensions.some(ext => lastPart === `.${ext}` || lastPart.endsWith(`.${ext}`));\r\n       if (isIndexFile) {\r\n           return '/' + (subsequentParts.length > 1 ? subsequentParts.slice(0, -1).join('/') : '');\r\n       }\r\n       if (hasValidExtension) {\r\n           return '/' + subsequentParts.join('/').replace(/\\.(js|ts)$/, '');\r\n       }\r\n   }\r\n   return '';\r\n}\r\nfunction findCommonPath(paths) {\r\n   if (paths.length === 0) return '';\r\n   const splitPaths = paths.map(path => path.split('/'));\r\n   const minLength = Math.min(...splitPaths.map(parts => parts.length));\r\n   let commonParts = [];\r\n   for (let i = 0; i < minLength; i++) {\r\n       const part = splitPaths[0][i]; \r\n       if (splitPaths.every(parts => parts[i] === part || parts[i].startsWith('['))) {\r\n           commonParts.push(part);\r\n       } else {\r\n           break; \r\n       }\r\n   }\r\n   const commonPath = commonParts.join('/') + (commonParts.length ? '/' : '');\r\n   return commonPath;\r\n}\n\nfunction useDerived(deriveFn, sources) {\r\n    let value = deriveFn(...sources.map(s => s().value));\r\n    const subscribers = new Set();\r\n\r\n    sources.forEach(source => {\r\n        const srcValue = source();\r\n        srcValue._subscribe(() => {\r\n            {\r\n                const newVal = deriveFn(...sources.map(s => s().value));\r\n                if (newVal !== value) {\r\n                    value = newVal;\r\n                    subscribers.forEach(fn => fn(value));\r\n                }\r\n            }\r\n        }); \r\n    });\r\n    return () => ({\r\n        value,\r\n        isStateGetter : () => true,\r\n        _subscribe: (fn) => subscribers.add(fn)\r\n    })\r\n}\n\nconst useReactive = (nested_value) => mapfun(\r\n    n => {\r\n        const state = useState(n);\r\n        return {\r\n            get : state[0],\r\n            set : state[1],\r\n        }\r\n    }, \r\n    nested_value\r\n);\n\nclass UseThread {\r\n    #worker;\r\n    #callbacks = new Map();\r\n    #idCounter = 0;\r\n\r\n    constructor() {\r\n        const workerCode = `\r\n            this.onmessage = function(e) {\r\n                const { id, funStr, args, close } = e.data;\r\n                try {\r\n                    const func = new Function(\"return \" + funStr)();\r\n                    const result = func(...args);\r\n                    postMessage({ id, result });\r\n                } catch (error) {\r\n                    postMessage({ id, error: error.message });\r\n                } finally {\r\n                    if (close) self.close();\r\n                }\r\n            }\r\n        `;\r\n        const blob = new Blob([workerCode], { type: \"text/javascript\" });\r\n        this.#worker = new Worker(URL.createObjectURL(blob));\r\n\r\n        this.#worker.addEventListener(\"message\", (e) => {\r\n            const { id, result, error } = e.data;\r\n            const callback = this.#callbacks.get(id);\r\n            if (!callback) return;\r\n\r\n            callback(result, error);\r\n            this.#callbacks.delete(id);\r\n        });\r\n    }\r\n    call(func, callback, args = [], close = true) {\r\n        if (typeof func !== \"function\") throw new TypeError(\"func must be a function\");\r\n        const id = ++this.#idCounter;\r\n        this.#callbacks.set(id, callback);\r\n\r\n        this.#worker.postMessage({\r\n            id,\r\n            funStr: func.toString(),\r\n            args,\r\n            close\r\n        });\r\n\r\n        return this;\r\n    }\r\n\r\n    terminate() {\r\n        this.#worker.terminate();\r\n    }\r\n}\r\n\r\nconst useThread = (func, callback, args = [], close = true) => new UseThread().call(func, callback, args, close);\n\nclass UseEventEmitter {\r\n    constructor(maxListeners = 10) {\r\n        this.events = {};\r\n        this.maxListeners = maxListeners;\r\n    }\r\n\r\n    on(event, listener) {\r\n        if (!this.events[event]) this.events[event] = [];\r\n        this.events[event].push(listener);\r\n        if (this.events[event].length > this.maxListeners) {\r\n            console.warn(`Warning: Possible memory leak. Event '${event}' has more than ${this.maxListeners} listeners.`);\r\n        }\r\n        return this;\r\n    }\r\n\r\n    once(event, listener) {\r\n        const wrapper = (...args) => {\r\n            this.off(event, wrapper);\r\n            listener(...args);\r\n        };\r\n        return this.on(event, wrapper);\r\n    }\r\n\r\n    off(event, listener) {\r\n        const listeners = this.events[event];\r\n        if (!listeners) return this;\r\n\r\n        const index = listeners.indexOf(listener);\r\n        if (index !== -1) {\r\n            listeners.splice(index, 1);\r\n        }\r\n\r\n        return this;\r\n    }\r\n\r\n    emit(event, data) {\r\n        const listeners = this.events[event];\r\n        if (!listeners) return false;\r\n\r\n        // Make a copy so removing listeners inside callbacks doesn't affect iteration\r\n        [...listeners].forEach(listener => {\r\n            try {\r\n                listener(data);\r\n            } catch (e) {\r\n                console.error(`Error in listener for '${event}':`, e);\r\n            }\r\n        });\r\n\r\n        return true;\r\n    }\r\n    remove(event){\r\n        delete this.events[event];  \r\n        return this; \r\n    }\r\n    clear() {\r\n        this.events = {};\r\n        return this;\r\n    }\r\n\r\n    setMaxListeners(max) {\r\n        this.maxListeners = max;\r\n        return this;\r\n    }\r\n}\r\n\r\nconst useEventEmitter = (maxListeners) => new UseEventEmitter(maxListeners);\n\n/*\r\n [\r\n    {\r\n        query: '(min-width: 600px)',\r\n        callback: () => console.log(1)\r\n    },\r\n    {\r\n        query: '(max-width: 300px)',\r\n        callback: () => console.log(2)\r\n    }\r\n ]\r\n*/\r\n\r\nclass UseMediaQuery {\r\n    #mediaQueryRules;\r\n    #fallback;\r\n    #lastCalledCallback = null;\r\n\r\n    constructor(mediaQueryRules = [], fallback = () => {}) {\r\n        this.#mediaQueryRules = mediaQueryRules;\r\n        this.#fallback = fallback;\r\n\r\n        this.#init();\r\n    }\r\n\r\n    // PRIVATE: check if ANY rule matches\r\n    #checkAllRules() {\r\n        return this.#mediaQueryRules.some(\r\n            ({ query }) => globalThis.matchMedia(query).matches\r\n        );\r\n    }\r\n\r\n    // PRIVATE: installs listeners and initial checks\r\n    #init() {\r\n        this.#mediaQueryRules.forEach(({ query, callback }) => {\r\n            const mediaQueryList = globalThis.matchMedia(query);\r\n\r\n            const checkMatches = () => {\r\n                const anyMatch = this.#checkAllRules();\r\n\r\n                if (mediaQueryList.matches) {\r\n                    callback();\r\n                    this.#lastCalledCallback = callback;\r\n                } else if (!anyMatch && this.#lastCalledCallback !== this.#fallback) {\r\n                    this.#fallback();\r\n                    this.#lastCalledCallback = this.#fallback;\r\n                }\r\n            };\r\n\r\n            checkMatches();\r\n            mediaQueryList.addEventListener(\"change\", checkMatches);\r\n        });\r\n    }\r\n}\r\n\r\nconst useMediaQuery = (mediaQueryRules, fallback) =>\r\n    new UseMediaQuery(mediaQueryRules, fallback);\n\nclass UseTitle {\r\n    constructor(title = document.title, withEmitter = true) {\r\n        this.cache = {\r\n            emitter: null\r\n        };\r\n\r\n        if (withEmitter) this.useEventEmitter();\r\n        this.set(title);\r\n    }\r\n\r\n    useEventEmitter() {\r\n        this.cache.emitter = useEventEmitter();\r\n        return this;\r\n    }\r\n\r\n    setTitle(title) {\r\n        if (title !== document.title) {\r\n            document.title = title;\r\n\r\n            if (this.cache.emitter) {\r\n                this.cache.emitter.emit(\"ziko:title-changed\", title);\r\n            }\r\n        }\r\n        return this;\r\n    }\r\n\r\n    get current() {\r\n        return document.title;\r\n    }\r\n\r\n    onChange(callback) {\r\n        if (this.cache.emitter) {\r\n            this.cache.emitter.on(\"ziko:title-changed\", callback);\r\n        }\r\n        return this;\r\n    }\r\n}\r\n\r\nconst useTitle = (title, withEmitter = true) => new UseTitle(title, withEmitter);\n\nclass UseRoot {\r\n    constructor(PropsMap, { namespace = 'Ziko', ValidateCssProps = false } = {}) {\r\n        this.currentPropsMap = PropsMap;\r\n        this.namespace = namespace;\r\n        this.ValidateCssProps = ValidateCssProps;\r\n        this.use(PropsMap);\r\n    }\r\n\r\n    use(PropsMap) {\r\n        if (this.ValidateCssProps) ValidateCssPropsFn(PropsMap);\r\n        this.currentPropsMap = PropsMap;\r\n        this.#maintain();\r\n        return this;\r\n    }\r\n\r\n    #maintain() {\r\n        const root = globalThis?.document?.documentElement?.style;\r\n        for (const prop in this.currentPropsMap) {\r\n            const cssProp = this.namespace ? `--${this.namespace}-${prop}` : `--${prop}`;\r\n            root.setProperty(cssProp, this.currentPropsMap[prop]);\r\n\r\n            Object.defineProperty(this, prop, {\r\n                value: `var(${cssProp})`,\r\n                writable: true,\r\n                configurable: true,\r\n                enumerable: false\r\n            });\r\n        }\r\n    }\r\n}\r\n\r\nfunction ValidateCssPropsFn(PropsMap) {\r\n    const validProps = new Set(Object.keys(document.documentElement.style));\r\n    for (const key in PropsMap) {\r\n        if (!validProps.has(key)) {\r\n            throw new Error(`Invalid CSS property: \"${key}\"`);\r\n        }\r\n    }\r\n}\r\n\r\nconst useRoot = (PropsMap, options = {}) => new UseRoot(PropsMap, options);\r\n\r\n\r\n// Usage \r\n\r\n/*\r\nconst Styles = {\r\n S1 : {\r\n  background : 'white',\r\n  color : 'darkblue'\r\n  border : '2px darkblue solid\"'\r\n },\r\n S2 : {\r\n  background : 'darkblue',\r\n  color : 'white'\r\n  border : '2px green solid\"'\r\n }\r\n}\r\nconst {use, border, background, color} = useRoot(Style.S1)\r\n\r\ntags.p(\"Test useRoot \").style({\r\n  border,\r\n  color,\r\n  background,\r\n  padding : '10px'\r\n})\r\n\r\n*/\n\nlet {sqrt, cos: cos$1, sin: sin$1, exp, log, cosh: cosh$1, sinh} = Math;\r\n// Math.abs = new Proxy(Math.abs, {\r\n//   apply(target, thisArg, args) {\r\n//     const x = args[0]\r\n//       if(typeof x === 'number') return target.apply(thisArg, args);\r\n//       if(x?.isComplex?.()){\r\n//         const {a, b, z, phi} = x\r\n//         const complex = (a, b) => new x.constructor(a, b) \r\n//         switch(target.name){\r\n//           case 'abs' : return a.z;\r\n//           case 'sqrt' : return complex(sqrt(z)*cos(phi/2),sqrt(z)*sin(phi/2));\r\n//         }\r\n//       }\r\n      \r\n//   }\r\n// });\r\n\r\n\r\nfor (const key of Object.getOwnPropertyNames(Math)) {\r\n  const fn = Math[key];\r\n  if (typeof fn === \"function\") {\r\n    Math[key] = new Proxy(fn, {\r\n      apply(target, thisArg, args) {\r\n        // console.log(target)\r\n        const x = args[0];\r\n        if(typeof x === 'number' || args.length === 0) return target.apply(thisArg, args);\r\n        if(x?.isComplex?.()){\r\n            const {a, b, z, phi} = x;\r\n            const complex = (a, b) => new x.constructor(a, b);\r\n            switch(target.name){\r\n                case 'abs' : return x.z;\r\n                case 'sqrt' : return complex(sqrt(z)*cos$1(phi/2),sqrt(z)*sin$1(phi/2));\r\n                case 'log' : return complex(log(z), phi);\r\n                case 'exp' : return complex(exp(a)*cos$1(b),exp(a)*sin$1(b));\r\n                case 'cos' : return complex(cos$1(a)*cosh$1(b),-(sin$1(a)*sinh(b)));\r\n                case 'sin' : return complex(sin$1(a)*cosh$1(b),cos$1(a)*sinh(b));\r\n                case 'tan' : {\r\n                    const DEN = cos$1(2*a)+cosh$1(2*b);\r\n                    return complex(sin$1(2*a) /DEN, sinh(2*b)/DEN);\r\n                }\r\n                case 'cosh' : return complex(cosh$1(a)*cos$1(b),sinh(a)*sin$1(b));\r\n                case 'sinh' : return complex(sinh(a)*cos$1(b),cosh$1(a)*sin$1(b));\r\n                case 'tanh' : {\r\n                    const DEN=cosh$1(2*a)+cos$1(2*b);\r\n                    return complex(sinh(2*a)/DEN,sin$1(2*b)/DEN)\r\n                }\r\n                default : return target.apply(thisArg, args)\r\n             }\r\n        }\r\n        // if( x.isMatrix?.()){\r\n        //     const {rows, cols, arr} = x\r\n        //     // return new x.constructor(rows, cols, arr.flat(1).map(n=>));\r\n        // }\r\n        throw new TypeError(`Math.${key} expects only numbers`);\r\n      }\r\n    });\r\n  }\r\n}\n\nif(globalThis?.document){\r\n    document?.addEventListener(\"DOMContentLoaded\", __Ziko__.__Config__.init());\r\n}\n\nexport { App, ClickAwayEvent, ClickListeners, Clock, CloneElement, Complex, E, EPSILON, EventController, FileBasedRouting, Flex, HTMLWrapper, KeyListeners, Matrix, PI$1 as PI, PtrListeners, Random, SPA, SVGWrapper, Scheduler, Suspense, SwipeEvent, Switch, Tick, TimeAnimation, TimeLoop, TimeScheduler, UIElement$1 as UIElement, UIFlex, UIHTMLWrapper, UINode, UISVGWrapper, UISwitch, UIView, UseRoot, UseThread, Utils, View, ViewEvent, ViewListeners, ZikoApp, ZikoSPA, ZikoUISuspense, ZikoUIText, abs, accum_prod, accum_sum, acos$1 as acos, acosh, acot, add, add_class, add_vendor_prefix, and, animation, apply_fun, arange, arc, arr2str, asin, asinh, atan, atan2, atanh, back, binomial, call_with_optional_props, cartesianProduct, cbrt, ceil, clamp, clock, cloneUI, complex, cos$3 as cos, cosh$2 as cosh, coth, croot, csv2arr, csv2json, csv2matrix, csv2object, csv2sql, debounce, defineParamsGetter, define_wc, deg2rad, discret, div, elastic, exp$1 as exp, floor, fract, geomspace, hypot, inRange, in_back, in_bounce, in_circ, in_cubic, in_elastic, in_expo, in_out_back, in_out_bounce, in_out_circ, in_out_cubic, in_out_elastic, in_out_expo, in_out_quad, in_out_quart, in_out_quint, in_out_sin, in_quad, in_quart, in_quint, in_sin, isApproximatlyEqual, isPrimitive, isStateGetter, json2arr, json2css, json2csv, json2csvFile, json2xml, json2xmlFile, json2yml, json2ymlFile, lerp, linear, linkStyle, linspace, ln, logspace, loop, map$1 as map, mapfun, matrix, matrix2, matrix3, matrix4, max, mean, median, min, modulo, mul, nand, nor, norm, normalize_css_value, nthr, nums, obj2str, ones, or, out_back, out_bounce, out_circ, out_cubic, out_elastic, out_expo, out_quad, out_quart, out_quint, out_sin, percentile, pgcd, pow$1 as pow, ppcm, rad2deg, register_click_away_event, register_swipe_event, register_view_event, remove_class, round, script, sec, sig, sign, sin$3 as sin, sinh$1 as sinh, sleep, sqrt$2 as sqrt, std, step, step_fps, style, sub, svg2ascii, svg2img, svg2imgUrl, svg2str, tags, tan, tanh, text, throttle, tick, timeTaken, time_memory_Taken, timeout, trunc, useDerived, useEventEmitter, useIPC, useLocaleStorage, useMediaQuery, useReactive, useRoot, useSessionStorage, useState, useThread, useTitle, variance, wait, waitElm, waitForUIElm, waitForUIElmSync, xnor, xor, zeros };\n"]}