From 388f90b98dca831e5b050e43ef573b3c8668b188 Mon Sep 17 00:00:00 2001 From: juyung Date: Thu, 12 Feb 2026 07:24:02 -0800 Subject: [PATCH] Upload --- .gitignore | 4 + .prettierignore | 1 + .prettierrc | 32 + README.md | 47 + __pycache__/app.cpython-310.pyc | Bin 0 -> 602 bytes __pycache__/app.cpython-311.pyc | Bin 0 -> 2059 bytes __pycache__/auth.cpython-311.pyc | Bin 0 -> 809 bytes __pycache__/home.cpython-311.pyc | Bin 0 -> 790 bytes __pycache__/kubeload.cpython-311.pyc | Bin 0 -> 2064 bytes kubeload.py | 35 + package-lock.json | 4602 ++++++ package.json | 26 + requirements.txt | 0 routes/__init__.py | 4 + routes/__pycache__/__init__.cpython-311.pyc | Bin 0 -> 324 bytes routes/__pycache__/account.cpython-311.pyc | Bin 0 -> 571 bytes routes/__pycache__/auth.cpython-311.pyc | Bin 0 -> 1067 bytes routes/__pycache__/home.cpython-311.pyc | Bin 0 -> 797 bytes routes/__pycache__/main.cpython-311.pyc | Bin 0 -> 542 bytes routes/__pycache__/products.cpython-311.pyc | Bin 0 -> 1622 bytes routes/__pycache__/user.cpython-311.pyc | Bin 0 -> 562 bytes routes/account.py | 8 + routes/auth.py | 15 + routes/main.py | 7 + routes/products.py | 23 + rsync.sh | 12 + src/styles/tailwind.css | 6 + src/stylus/index.styl | 22 + src/ts/Login.ts | 0 src/ts/Main.ts | 9 + static/css/index.css | 20 + static/css/tailwind.css | 3479 +++++ static/favicon.ico | Bin 0 -> 1150 bytes static/favicon.svg | 12 + static/js/bundle.js | 14329 ++++++++++++++++++ static/js/bundle.js.map | 7 + tailwind.config.js | 13 + templates/account/base.jinja | 33 + templates/account/console.jinja | 122 + templates/auth/base.jinja | 18 + templates/auth/login.jinja | 132 + templates/auth/recovery.jinja | 12 + templates/auth/register.jinja | 25 + templates/base.jinja | 20 + templates/index.jinja | 12 + templates/partials/_contacts.jinja | 135 + templates/partials/_cta.jinja | 14 + templates/partials/_features.jinja | 112 + templates/partials/_footer.jinja | 156 + templates/partials/_head.jinja | 11 + templates/partials/_header.jinja | 110 + templates/partials/_hero.jinja | 27 + templates/partials/_icons.jinja | 0 templates/partials/_sidebar.jinja | 218 + templates/products/ai.jinja | 418 + templates/products/cloud.jinja | 935 ++ templates/products/storage.jinja | 584 + 57 files changed, 25807 insertions(+) create mode 100644 .gitignore create mode 100644 .prettierignore create mode 100644 .prettierrc create mode 100644 README.md create mode 100644 __pycache__/app.cpython-310.pyc create mode 100644 __pycache__/app.cpython-311.pyc create mode 100644 __pycache__/auth.cpython-311.pyc create mode 100644 __pycache__/home.cpython-311.pyc create mode 100644 __pycache__/kubeload.cpython-311.pyc create mode 100644 kubeload.py create mode 100644 package-lock.json create mode 100644 package.json create mode 100644 requirements.txt create mode 100644 routes/__init__.py create mode 100644 routes/__pycache__/__init__.cpython-311.pyc create mode 100644 routes/__pycache__/account.cpython-311.pyc create mode 100644 routes/__pycache__/auth.cpython-311.pyc create mode 100644 routes/__pycache__/home.cpython-311.pyc create mode 100644 routes/__pycache__/main.cpython-311.pyc create mode 100644 routes/__pycache__/products.cpython-311.pyc create mode 100644 routes/__pycache__/user.cpython-311.pyc create mode 100644 routes/account.py create mode 100644 routes/auth.py create mode 100644 routes/main.py create mode 100644 routes/products.py create mode 100755 rsync.sh create mode 100644 src/styles/tailwind.css create mode 100644 src/stylus/index.styl create mode 100644 src/ts/Login.ts create mode 100644 src/ts/Main.ts create mode 100644 static/css/index.css create mode 100644 static/css/tailwind.css create mode 100644 static/favicon.ico create mode 100644 static/favicon.svg create mode 100644 static/js/bundle.js create mode 100644 static/js/bundle.js.map create mode 100644 tailwind.config.js create mode 100644 templates/account/base.jinja create mode 100644 templates/account/console.jinja create mode 100644 templates/auth/base.jinja create mode 100644 templates/auth/login.jinja create mode 100644 templates/auth/recovery.jinja create mode 100644 templates/auth/register.jinja create mode 100644 templates/base.jinja create mode 100644 templates/index.jinja create mode 100644 templates/partials/_contacts.jinja create mode 100644 templates/partials/_cta.jinja create mode 100644 templates/partials/_features.jinja create mode 100644 templates/partials/_footer.jinja create mode 100644 templates/partials/_head.jinja create mode 100644 templates/partials/_header.jinja create mode 100644 templates/partials/_hero.jinja create mode 100644 templates/partials/_icons.jinja create mode 100644 templates/partials/_sidebar.jinja create mode 100644 templates/products/ai.jinja create mode 100644 templates/products/cloud.jinja create mode 100644 templates/products/storage.jinja diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..2b20225 --- /dev/null +++ b/.gitignore @@ -0,0 +1,4 @@ +node_modules/ +.venv/ +.vscode/ + diff --git a/.prettierignore b/.prettierignore new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/.prettierignore @@ -0,0 +1 @@ + diff --git a/.prettierrc b/.prettierrc new file mode 100644 index 0000000..4f57bfc --- /dev/null +++ b/.prettierrc @@ -0,0 +1,32 @@ +{ + "arrowParens": "always", + "bracketSpacing": true, + "endOfLine": "lf", + "htmlWhitespaceSensitivity": "css", + "insertPragma": false, + "jsxBracketSameLine": false, + "jsxSingleQuote": true, + "overrides": [ + { + "files": "*.html", + "options": { + "tabWidth": 1 + } + }, + { + "files": "*.jinja", + "options": { + "tabWidth": 1 + } + } + ], + "printWidth": 80, + "proseWrap": "always", + "quoteProps": "as-needed", + "requirePragma": false, + "semi": true, + "singleQuote": true, + "tabWidth": 2, + "trailingComma": "all", + "useTabs": false +} diff --git a/README.md b/README.md new file mode 100644 index 0000000..d45933a --- /dev/null +++ b/README.md @@ -0,0 +1,47 @@ +# Kubeload + +Kubeload is an unfinished project that began with the goal of making cloud hosting more affordable and accessible in Korea, where prices tend to be higher than in the US or Europe, and there are fewer local competitors. + +## Prerequisites + +- **Python 3.x**: [Download Python](https://www.python.org/downloads/) +- **Node.js & npm**: [Download Node.js](https://nodejs.org/) + +## Setup Instructions + +### 1. Set up the Python Virtual Environment + +- **Linux/macOS**: + ```bash + python3 -m venv .venv + source .venv/bin/activate + ``` + +- **Windows**: + ```bash + python -m venv .venv + .\.venv\Scripts\activate + ``` + +### 2. Install Python Dependencies + +With the virtual environment activated, install the required Python packages: + +```bash +pip install -r requirements.txt +``` + +### 3. Start the Flask Server + +```bash +flask run +``` + +The Flask server will be available at: `http://127.0.0.1:5000/` + +### 4. Start the Front-end Development Server + +```bash +npm run develop +``` + diff --git a/__pycache__/app.cpython-310.pyc b/__pycache__/app.cpython-310.pyc new file mode 100644 index 0000000000000000000000000000000000000000..1ea568e13d2c78e857ac071af43c76e201d3c7f2 GIT binary patch literal 602 zcmZWlv2N5r5ZztdiO;z^B4`kQ;DWeEQG|p&SUERyoH?)88n2~XL>Jop1C;p| z8tQGSsOi$c>?VSf7;9!dZ)bMi8@pH(g6;YDZ<|^Q@gpSrmT~f$eSFUW1jtSpSxcj8 zB?U@MK=GH{CUuJGmkiRc5;8dWEN*0d5RpSha+pQrkn4-BqL-L{%;5;;w^9mNTtqLI zKY4~ImCxRG&A9c?M(jba$r=qU;mTRs`4rmGam`|MjcZqWZ972nPaK+|YaBiT_p(}r z*Y+*pPB6NGC8M|k?W%E0k2Lr&UAN@LiL@X86Pp+zo<6WU^R_M)pokX z&Nfgr!*DX}d=^{7vVJKJg`y)quIJV1(74U35YAS--@g|A|KsyXL_X?)59M4_N}q=A ze>^C#_wz^j1KF!x#$V{{Gzx}*Ea^W_6f`I s8QIBUB>wPDLQ}stH%^Je^HXDC>hLV67@u-D7E6_@Lgq>EW10T`1F?pNy8r+H literal 0 HcmV?d00001 diff --git a/__pycache__/app.cpython-311.pyc b/__pycache__/app.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..16a8f5cbebd469123eb9e6fc5e72868c7c3b8e6f GIT binary patch literal 2059 zcmbVM%}*Og6rcUJF~$y`B~n@|KwCpwSE|$|#W6yHkRSq4AX4Sa%6P|QjqSB&*C}yR zYEdN88;X!PRYFxoT7?5g{*2vdqoR=_Ayqx}=89WReY0j=J0G;_?9SJl_vU^5-aHA1 zI}o%Vj&AGUiwOPBHhz=N7N>JOLc2&q8dpF?F3lDBG+z|b0>@~4K}?I@ETttLVGhfh zpos_4zJSnE=#7?EG#M-TfWOz2BrLI*5Biin&k}#<&uttbpV~U(&V3FvL2ooIun+b= zh2CiCFjn@u{9WserF_KSx8K2`b7Z3bL*{}nqXiE-+U+}6S9en`^hUWJ|Gah9UX4h2 z6YT@T(y&#bHpgBnoe-mGROlOAwa}LwQ#Xq$XIxu%BGdE^ehefBs0#_aD%Ak zi~?}eh<|oQSfYJP)3>?^;%4Nbz2CNGB3Qcxr?B&J8J)?*d6%&)hYGoN0 zjEt55{!hveXeSWwW3^!~Vc6@1ZuY@YLw|(c{n2#a`}FWbCp7Mc#%*!@6b?}JQld2^ z|IN)K5Ck`w{8`I4UEXUt>7TLLlKioCdTW(^}c&$C;+5txTtd&iJYg>h4YDMuOw44?$6|y%7KEAQ4TG>Sr(u9JM7wvC-Ok6I&o6!a%bF9t;zqC3 zZoW{0n_q9OZ>(?YjuLZ~SRDz{$cxD3=R=p%mlTFmGr zRRxep8eXof#0RL9V}(T+6g>k8d&~(#0hNhSv9QVH7=Bfiu*Z?gS)-KGR|o?MVI@r! zs71!XI6c2qGQjBF1h0VSP@2ny3N919WKofsK*dZ20;Zgm5)JsZLnTkAheR(9R3Meo zugG)23(?C!vQdgDG735vhD;1&UEnzG7+tg9{vV@Y&HIi~xaNH)a;SzM-PpTvv}((< zjy&tivo)bEqYuVv!e)mZy6m7K*!K4Ce6gE+oZRDoR-QzDiW~-<*i|=n^(f`^%(^|Z zHi`llC;o=|pP~Nk`#ax&oQsBRG<1xFf1$1)j@qc-LDyW*^j3lI4#&Nt2^US+XaaQb z($?U{pdA`^xDl5dsq-9{tRooy5)l7>lM-k$jyl|!%Z=4}3AhmqjPau;r3;CjkE+jv hL0cF+5tXf(jhXG?+KeL(xZ;5A|8)t87lFe|!{31@yzBq~ literal 0 HcmV?d00001 diff --git a/__pycache__/auth.cpython-311.pyc b/__pycache__/auth.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..94e2e678219c4808b65ebdcfd22d89a4a202c32c GIT binary patch literal 809 zcmbtSJ#Q015S`uoCNfEiL{1PAN@MJx+#iT2sF0A-(78Ds*-h-^?$(;S1KE{@5Kz)3 z6{0{!QT~iiItg@DBt$`Hm7Hpjti@<%jb`DsO0PAhEuFd7bSvv13e#g$ z+tVwk+#pE8m=_(6Fo^d^`E_s9Z(%p>(%Om~}6^~ka`dXTaK?wN*55|A{E}WHN z|K0j&y>PZlXKQF)5bMq6%gwis3$j*{wFxEU{sg4?VE|oUAU052$2}=Xy(D!Nx2@u~ MRouokM8kT@U!5VPvH$=8 literal 0 HcmV?d00001 diff --git a/__pycache__/home.cpython-311.pyc b/__pycache__/home.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ef56b4d988c6cd635ecbfd25007e48b56cf60cec GIT binary patch literal 790 zcmbtRzfaph6n=NMV;h%0!0k#e-Y*{SBT_IpQ(Z!a4DFq}Lkr-e> z>XZuc&m>Z$R-Pgu2AG1fW$L?2f`FEZC*QmGp1=3wd-p4w9Rrl}tKZuXc;8BAB>K?k zHPE;K28;v{k`f7Ni4vf|38P$VP=Fge11afT|7nc8=Qqe3&xektXFRM8;wO4|KS4BCB(@%m&j0-R3VKwk$p6c6`koSqZ`P3N=ZFqWL z(71s3X-+`iFS}zOx^^&L#;SXZJLPD{za~O%>l%8fp+Dow4sKH8!re_acu?_~3N2Rm zQ$yv64+xZds!gD(!=0VGoNd{~wq0z}qL8n0V7W+Ovm9-`Z_wz&Wf6t~Wv}~tsJ5B1Sgf+)Xjqib9+ZA$Uig#*xUgU?|^Ms_78lsZKTv1dN zU$yI7OJRj20bdrM5iU1fJ3`gf2qAx9q4~eBV@}lf&!#SOEpx7I&ein}F;4P_`P0=O qh2uh(67sbRs2(+-lcPWeXhwm)wa9dvOiS3jgw0D>?nOj}6~(`BDxMku literal 0 HcmV?d00001 diff --git a/__pycache__/kubeload.cpython-311.pyc b/__pycache__/kubeload.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..7028dbe4a39b068ecdf44b2967c005f5cae8f463 GIT binary patch literal 2064 zcmb7E%}*Og6rcUJv5g%*OQkecfVPIVu2iW_ierQXAwdMHK%~l-mGO?r8ry5lu2bTs z)S^h_h$19Tl~7fYR&d~m@>i^*jfzH!gjDs=n*YS30Pt==l3|ft|uPl&216^kJ~!q;2sB-pf{T4+XH|1 zp*LD8gq7V+k7}KUmsD7jQDuL>|NhHG~-EPrrm= z2U#t9Ruhp3<(lh9s2xEID8|jj1i}uYLb_BUtYp9|pJ&iyXGULNiQhL0I9@g}iLaEG zaNbC3&BbS>hcpN~53t&BnlSM7KsS3~sG`3DAN*`OS3W=dxE2_50%Nu~b_yG)ayj0b zm;V;)5hy~eO#iIqnsM(oBlY&!Y{~ypZ)V^J?j0wwl)Tj*aqTE0y;jRBagiOsA_v*# z=VE-N^CsM8v}jn-EPz1Mx559IOnJkkBD-xW<_x_^BXjeUQ|g`h$$PVarpeoPsf<^3 z(=y%bit&U!C)CewN@Z#$3qBep?8P9=Eq54zg*gQSTtlR5TiFRd3BI`e>2IsG$TcT& zt$O>V;@|jgb8UTXORp(WM~T*vAPv6^Uwtw7#o@QLaMB4UZC~;vJYgpEm9nh52*ac6AYm^$VJM(7G0GM;nH~eNsuK1>QaNK3v-&b&AR(-- zsR9MbB$%WdmrD8>zl-2yh#cy3DPP7Vq8BYHG8d?FR!LM$mmzaLuYjoJ+H{fV=79>N zT>Krm0k|o8?MpQ3F-b)aKecNB{B%UO8`CpZ%;a|dszFPFU6TN") +def serve_static(filename): + return send_from_directory(app.static_folder, filename) # type: ignore + +# Serve files from node_modules +@app.route("/node_modules/") +def node_modules(filename): + file_path = os.path.join(NODE_MODULES_DIR, filename) + if os.path.exists(file_path): + return send_from_directory(NODE_MODULES_DIR, filename) + else: + return "File not found", 404 + +if __name__ == "__main__": + # Enable debug mode with reloader + app.run(debug=True) diff --git a/package-lock.json b/package-lock.json new file mode 100644 index 0000000..e54ac42 --- /dev/null +++ b/package-lock.json @@ -0,0 +1,4602 @@ +{ + "name": "kubeload", + "lockfileVersion": 2, + "requires": true, + "packages": { + "": { + "name": "kubeload", + "devDependencies": { + "@tailwindcss/cli": "^4.1.13", + "@tailwindcss/forms": "^0.5.10", + "autoprefixer": "^10.4.21", + "concurrently": "^8.2.2", + "esbuild": "^0.24.0", + "postcss": "^8.5.6", + "preline": "^3.2.3", + "prettier": "^3.6.2", + "stylus": "^0.64.0", + "tailwindcss": "^4.1.13", + "typescript": "^5.6.3" + } + }, + "node_modules/@adobe/css-tools": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", + "dev": true + }, + "node_modules/@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true, + "engines": { + "node": ">=6.9.0" + } + }, + "node_modules/@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "aix" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "cpu": [ + "loong64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "cpu": [ + "mips64el" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "cpu": [ + "ppc64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "cpu": [ + "riscv64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "cpu": [ + "s390x" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "netbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "openbsd" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "sunos" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">=18" + } + }, + "node_modules/@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "dev": true, + "dependencies": { + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "dev": true, + "dependencies": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "node_modules/@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "dev": true + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "dependencies": { + "minipass": "^7.0.4" + }, + "engines": { + "node": ">=18.0.0" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + }, + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1" + } + }, + "node_modules/@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "cpu": [ + "ia32" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@svgdotjs/svg.draggable.js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz", + "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==", + "dev": true, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@svgdotjs/svg.filter.js": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz", + "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==", + "dev": true, + "dependencies": { + "@svgdotjs/svg.js": "^3.2.4" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/@svgdotjs/svg.js": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.5.tgz", + "integrity": "sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/Fuzzyma" + } + }, + "node_modules/@svgdotjs/svg.resize.js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz", + "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==", + "dev": true, + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.select.js": "^4.0.1" + } + }, + "node_modules/@svgdotjs/svg.select.js": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz", + "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==", + "dev": true, + "engines": { + "node": ">= 14.18" + }, + "peerDependencies": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "node_modules/@swc/helpers": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.2.14.tgz", + "integrity": "sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==", + "dev": true + }, + "node_modules/@tailwindcss/cli": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.1.13.tgz", + "integrity": "sha512-KEu/iL4CYBzGza/2yZBLXqjCCZB/eRWkRLP8Vg2kkEWk4usC8HLGJW0QAhLS7U5DsAWumsisxgabuppE6NinLw==", + "dev": true, + "dependencies": { + "@parcel/watcher": "^2.5.1", + "@tailwindcss/node": "4.1.13", + "@tailwindcss/oxide": "4.1.13", + "enhanced-resolve": "^5.18.3", + "mri": "^1.2.0", + "picocolors": "^1.1.1", + "tailwindcss": "4.1.13" + }, + "bin": { + "tailwindcss": "dist/index.mjs" + } + }, + "node_modules/@tailwindcss/forms": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", + "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", + "dev": true, + "dependencies": { + "mini-svg-data-uri": "^1.2.3" + }, + "peerDependencies": { + "tailwindcss": ">=3.0.0 || >= 3.0.0-alpha.1 || >= 4.0.0-alpha.20 || >= 4.0.0-beta.1" + } + }, + "node_modules/@tailwindcss/node": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.13.tgz", + "integrity": "sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==", + "dev": true, + "dependencies": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.5.1", + "lightningcss": "1.30.1", + "magic-string": "^0.30.18", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.13" + } + }, + "node_modules/@tailwindcss/oxide": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.13.tgz", + "integrity": "sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==", + "dev": true, + "hasInstallScript": true, + "dependencies": { + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "engines": { + "node": ">= 10" + }, + "optionalDependencies": { + "@tailwindcss/oxide-android-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-x64": "4.1.13", + "@tailwindcss/oxide-freebsd-x64": "4.1.13", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.13", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.13", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-x64-musl": "4.1.13", + "@tailwindcss/oxide-wasm32-wasi": "4.1.13", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.13", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.13" + } + }, + "node_modules/@tailwindcss/oxide-android-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.13.tgz", + "integrity": "sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "android" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.13.tgz", + "integrity": "sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-darwin-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.13.tgz", + "integrity": "sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.13.tgz", + "integrity": "sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.13.tgz", + "integrity": "sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.13.tgz", + "integrity": "sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.13.tgz", + "integrity": "sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.13.tgz", + "integrity": "sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.13.tgz", + "integrity": "sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.13.tgz", + "integrity": "sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==", + "bundleDependencies": [ + "@napi-rs/wasm-runtime", + "@emnapi/core", + "@emnapi/runtime", + "@tybys/wasm-util", + "@emnapi/wasi-threads", + "tslib" + ], + "cpu": [ + "wasm32" + ], + "dev": true, + "optional": true, + "dependencies": { + "@emnapi/core": "^1.4.5", + "@emnapi/runtime": "^1.4.5", + "@emnapi/wasi-threads": "^1.0.4", + "@napi-rs/wasm-runtime": "^0.2.12", + "@tybys/wasm-util": "^0.10.0", + "tslib": "^2.8.0" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.13.tgz", + "integrity": "sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.13.tgz", + "integrity": "sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 10" + } + }, + "node_modules/@tailwindcss/oxide/node_modules/detect-libc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", + "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", + "dev": true + }, + "node_modules/ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/apexcharts": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.7.0.tgz", + "integrity": "sha512-iZSrrBGvVlL+nt2B1NpqfDuBZ9jX61X9I2+XV0hlYXHtTwhwLTHDKGXjNXAgFBDLuvSYCB/rq2nPWVPRv2DrGA==", + "dev": true, + "dependencies": { + "@svgdotjs/svg.draggable.js": "^3.0.4", + "@svgdotjs/svg.filter.js": "^3.0.8", + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.resize.js": "^2.0.2", + "@svgdotjs/svg.select.js": "^4.0.1", + "@yr/monotone-cubic-spline": "^1.0.3" + } + }, + "node_modules/autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/autoprefixer" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + }, + "bin": { + "autoprefixer": "bin/autoprefixer" + }, + "engines": { + "node": "^10 || ^12 || >=14" + }, + "peerDependencies": { + "postcss": "^8.1.0" + } + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/baseline-browser-mapping": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.5.tgz", + "integrity": "sha512-TiU4qUT9jdCuh4aVOG7H1QozyeI2sZRqoRPdqBIaslfNt4WUSanRBueAwl2x5jt4rXBMim3lIN2x6yT8PDi24Q==", + "dev": true, + "bin": { + "baseline-browser-mapping": "dist/cli.js" + } + }, + "node_modules/brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/browserslist": { + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", + "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001741", + "electron-to-chromium": "^1.5.218", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + }, + "bin": { + "browserslist": "cli.js" + }, + "engines": { + "node": "^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7" + } + }, + "node_modules/caniuse-lite": { + "version": "1.0.30001743", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", + "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/caniuse-lite" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ] + }, + "node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chalk/node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/concurrently": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", + "dev": true, + "dependencies": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + }, + "bin": { + "conc": "dist/bin/concurrently.js", + "concurrently": "dist/bin/concurrently.js" + }, + "engines": { + "node": "^14.13.0 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/open-cli-tools/concurrently?sponsor=1" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/datatables.net": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-2.3.4.tgz", + "integrity": "sha512-fKuRlrBIdpAl2uIFgl9enKecHB41QmFd/2nN9LBbOvItV/JalAxLcyqdZXex7wX4ZXjnJQEnv6xeS9veOpKzSw==", + "dev": true, + "dependencies": { + "jquery": ">=1.7" + } + }, + "node_modules/datatables.net-dt": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-2.3.4.tgz", + "integrity": "sha512-qOCnnUuFTiju4AOMM4xy4Lx87UfyHdIHIMYdbBXD4pAtvoWTH9wMzVTN/2gFNT4GlbrLkmGf5ZkU6uLRTTymMA==", + "dev": true, + "dependencies": { + "datatables.net": "2.3.4", + "jquery": ">=1.7" + } + }, + "node_modules/date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "dependencies": { + "@babel/runtime": "^7.21.0" + }, + "engines": { + "node": ">=0.11" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/date-fns" + } + }, + "node_modules/debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "dependencies": { + "ms": "^2.1.3" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true, + "bin": { + "detect-libc": "bin/detect-libc.js" + }, + "engines": { + "node": ">=0.10" + } + }, + "node_modules/dropzone": { + "version": "6.0.0-beta.2", + "resolved": "https://registry.npmjs.org/dropzone/-/dropzone-6.0.0-beta.2.tgz", + "integrity": "sha512-k44yLuFFhRk53M8zP71FaaNzJYIzr99SKmpbO/oZKNslDjNXQsBTdfLs+iONd0U0L94zzlFzRnFdqbLcs7h9fQ==", + "dev": true, + "dependencies": { + "@swc/helpers": "^0.2.13", + "just-extend": "^5.0.0" + } + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/electron-to-chromium": { + "version": "1.5.221", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.221.tgz", + "integrity": "sha512-/1hFJ39wkW01ogqSyYoA4goOXOtMRy6B+yvA1u42nnsEGtHzIzmk93aPISumVQeblj47JUHLC9coCjUxb1EvtQ==", + "dev": true + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "hasInstallScript": true, + "bin": { + "esbuild": "bin/esbuild" + }, + "engines": { + "node": ">=18" + }, + "optionalDependencies": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "node_modules/escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true, + "engines": { + "node": "*" + }, + "funding": { + "type": "patreon", + "url": "https://github.com/sponsors/rawify" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true, + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jiti": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "dev": true, + "bin": { + "jiti": "lib/jiti-cli.mjs" + } + }, + "node_modules/jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "dev": true + }, + "node_modules/just-extend": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-5.1.1.tgz", + "integrity": "sha512-b+z6yF1d4EOyDgylzQo5IminlUmzSeqR1hs/bzjBNjuGras4FXq/6TrzjxfN0j+TmI0ltJzTNlqXUMCniciwKQ==", + "dev": true + }, + "node_modules/lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "dev": true, + "dependencies": { + "detect-libc": "^2.0.3" + }, + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + }, + "optionalDependencies": { + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + } + }, + "node_modules/lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "freebsd" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "cpu": [ + "arm" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "linux" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "cpu": [ + "arm64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "cpu": [ + "x64" + ], + "dev": true, + "optional": true, + "os": [ + "win32" + ], + "engines": { + "node": ">= 12.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/parcel" + } + }, + "node_modules/lightningcss/node_modules/detect-libc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", + "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "node_modules/magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "dependencies": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "node_modules/micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true, + "bin": { + "mini-svg-data-uri": "cli.js" + } + }, + "node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "dev": true, + "dependencies": { + "minipass": "^7.1.2" + }, + "engines": { + "node": ">= 18" + } + }, + "node_modules/mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true, + "engines": { + "node": ">=4" + } + }, + "node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "node_modules/nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true + }, + "node_modules/node-releases": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "dev": true + }, + "node_modules/normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/nouislider": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.8.1.tgz", + "integrity": "sha512-93TweAi8kqntHJSPiSWQ1o/uZ29VWOmal9YKb6KKGGlCkugaNfAupT7o1qTHqdJvNQ7S0su5rO6qRFCjP8fxtw==", + "dev": true + }, + "node_modules/package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true, + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/preline": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/preline/-/preline-3.2.3.tgz", + "integrity": "sha512-S13MFdC/1FWFz3S+oW1PlyZ6Alo0SZxJ9HwaZRg5IQZjcbKqCFIOXAbAhQeX0izauqWJXIQdKofhfCWBizwleQ==", + "dev": true, + "dependencies": { + "@floating-ui/dom": "^1.6.13", + "apexcharts": "^4.5.0", + "datatables.net-dt": "^2.2.2", + "dropzone": "^6.0.0-beta.2", + "nouislider": "^15.8.1", + "vanilla-calendar-pro": "^3.0.4" + } + }, + "node_modules/prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true, + "bin": { + "prettier": "bin/prettier.cjs" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/prettier/prettier?sponsor=1" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "dependencies": { + "tslib": "^2.1.0" + } + }, + "node_modules/sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/stylus": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.64.0.tgz", + "integrity": "sha512-ZIdT8eUv8tegmqy1tTIdJv9We2DumkNZFdCF5mz/Kpq3OcTaxSuCAYZge6HKK2CmNC02G1eJig2RV7XTw5hQrA==", + "dev": true, + "dependencies": { + "@adobe/css-tools": "~4.3.3", + "debug": "^4.3.2", + "glob": "^10.4.5", + "sax": "~1.4.1", + "source-map": "^0.7.3" + }, + "bin": { + "stylus": "bin/stylus" + }, + "engines": { + "node": ">=16" + }, + "funding": { + "url": "https://opencollective.com/stylus" + } + }, + "node_modules/stylus/node_modules/source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true, + "engines": { + "node": ">= 12" + } + }, + "node_modules/supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/supports-color?sponsor=1" + } + }, + "node_modules/tailwindcss": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", + "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==", + "dev": true + }, + "node_modules/tapable": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", + "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", + "dev": true, + "engines": { + "node": ">=6" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/webpack" + } + }, + "node_modules/tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, + "dependencies": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "engines": { + "node": ">=18" + } + }, + "node_modules/tar/node_modules/mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true, + "bin": { + "mkdirp": "dist/cjs/src/bin.js" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true, + "bin": { + "tree-kill": "cli.js" + } + }, + "node_modules/tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "node_modules/typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true, + "bin": { + "tsc": "bin/tsc", + "tsserver": "bin/tsserver" + }, + "engines": { + "node": ">=14.17" + } + }, + "node_modules/update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/browserslist" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/browserslist" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + }, + "bin": { + "update-browserslist-db": "cli.js" + }, + "peerDependencies": { + "browserslist": ">= 4.21.0" + } + }, + "node_modules/vanilla-calendar-pro": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vanilla-calendar-pro/-/vanilla-calendar-pro-3.0.5.tgz", + "integrity": "sha512-4X9bmTo1/KzbZrB7B6mZXtvVXIhcKxaVSnFZuaVtps7tshKJDxgaIElkgdia6IjB5qWetWuu7kZ+ZaV1sPxy6w==", + "dev": true, + "funding": { + "type": "individual", + "url": "https://buymeacoffee.com/uvarov" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi/node_modules/ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true, + "engines": { + "node": ">=18" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + }, + "dependencies": { + "@adobe/css-tools": { + "version": "4.3.3", + "resolved": "https://registry.npmjs.org/@adobe/css-tools/-/css-tools-4.3.3.tgz", + "integrity": "sha512-rE0Pygv0sEZ4vBWHlAgJLGDU7Pm8xoO6p3wsEceb7GYAjScrOHpEo8KK/eVkAcnSM+slAEtXjA2JpdjLp4fJQQ==", + "dev": true + }, + "@babel/runtime": { + "version": "7.28.4", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.28.4.tgz", + "integrity": "sha512-Q/N6JNWvIvPnLDvjlE1OUBLPQHH6l3CltCEsHIujp45zQUSSh8K+gHnaEX45yAT1nyngnINhvWtzN+Nb9D8RAQ==", + "dev": true + }, + "@esbuild/aix-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/aix-ppc64/-/aix-ppc64-0.24.2.tgz", + "integrity": "sha512-thpVCb/rhxE/BnMLQ7GReQLLN8q9qbHmI55F4489/ByVg2aQaQ6kbcLb6FHkocZzQhxc4gx0sCk0tJkKBFzDhA==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm/-/android-arm-0.24.2.tgz", + "integrity": "sha512-tmwl4hJkCfNHwFB3nBa8z1Uy3ypZpxqxfTQOcHX+xRByyYgunVbZ9MzUUfb0RxaHIMnbHagwAxuTL+tnNM+1/Q==", + "dev": true, + "optional": true + }, + "@esbuild/android-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-arm64/-/android-arm64-0.24.2.tgz", + "integrity": "sha512-cNLgeqCqV8WxfcTIOeL4OAtSmL8JjcN6m09XIgro1Wi7cF4t/THaWEa7eL5CMoMBdjoHOTh/vwTO/o2TRXIyzg==", + "dev": true, + "optional": true + }, + "@esbuild/android-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/android-x64/-/android-x64-0.24.2.tgz", + "integrity": "sha512-B6Q0YQDqMx9D7rvIcsXfmJfvUYLoP722bgfBlO5cGvNVb5V/+Y7nhBE3mHV9OpxBf4eAS2S68KZztiPaWq4XYw==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-arm64/-/darwin-arm64-0.24.2.tgz", + "integrity": "sha512-kj3AnYWc+CekmZnS5IPu9D+HWtUI49hbnyqk0FLEJDbzCIQt7hg7ucF1SQAilhtYpIujfaHr6O0UHlzzSPdOeA==", + "dev": true, + "optional": true + }, + "@esbuild/darwin-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/darwin-x64/-/darwin-x64-0.24.2.tgz", + "integrity": "sha512-WeSrmwwHaPkNR5H3yYfowhZcbriGqooyu3zI/3GGpF8AyUdsrrP0X6KumITGA9WOyiJavnGZUwPGvxvwfWPHIA==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-arm64/-/freebsd-arm64-0.24.2.tgz", + "integrity": "sha512-UN8HXjtJ0k/Mj6a9+5u6+2eZ2ERD7Edt1Q9IZiB5UZAIdPnVKDoG7mdTVGhHJIeEml60JteamR3qhsr1r8gXvg==", + "dev": true, + "optional": true + }, + "@esbuild/freebsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/freebsd-x64/-/freebsd-x64-0.24.2.tgz", + "integrity": "sha512-TvW7wE/89PYW+IevEJXZ5sF6gJRDY/14hyIGFXdIucxCsbRmLUcjseQu1SyTko+2idmCw94TgyaEZi9HUSOe3Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm/-/linux-arm-0.24.2.tgz", + "integrity": "sha512-n0WRM/gWIdU29J57hJyUdIsk0WarGd6To0s+Y+LwvlC55wt+GT/OgkwoXCXvIue1i1sSNWblHEig00GBWiJgfA==", + "dev": true, + "optional": true + }, + "@esbuild/linux-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-arm64/-/linux-arm64-0.24.2.tgz", + "integrity": "sha512-7HnAD6074BW43YvvUmE/35Id9/NB7BeX5EoNkK9obndmZBUk8xmJJeU7DwmUeN7tkysslb2eSl6CTrYz6oEMQg==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ia32/-/linux-ia32-0.24.2.tgz", + "integrity": "sha512-sfv0tGPQhcZOgTKO3oBE9xpHuUqguHvSo4jl+wjnKwFpapx+vUDcawbwPNuBIAYdRAvIDBfZVvXprIj3HA+Ugw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-loong64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-loong64/-/linux-loong64-0.24.2.tgz", + "integrity": "sha512-CN9AZr8kEndGooS35ntToZLTQLHEjtVB5n7dl8ZcTZMonJ7CCfStrYhrzF97eAecqVbVJ7APOEe18RPI4KLhwQ==", + "dev": true, + "optional": true + }, + "@esbuild/linux-mips64el": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-mips64el/-/linux-mips64el-0.24.2.tgz", + "integrity": "sha512-iMkk7qr/wl3exJATwkISxI7kTcmHKE+BlymIAbHO8xanq/TjHaaVThFF6ipWzPHryoFsesNQJPE/3wFJw4+huw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-ppc64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-ppc64/-/linux-ppc64-0.24.2.tgz", + "integrity": "sha512-shsVrgCZ57Vr2L8mm39kO5PPIb+843FStGt7sGGoqiiWYconSxwTiuswC1VJZLCjNiMLAMh34jg4VSEQb+iEbw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-riscv64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-riscv64/-/linux-riscv64-0.24.2.tgz", + "integrity": "sha512-4eSFWnU9Hhd68fW16GD0TINewo1L6dRrB+oLNNbYyMUAeOD2yCK5KXGK1GH4qD/kT+bTEXjsyTCiJGHPZ3eM9Q==", + "dev": true, + "optional": true + }, + "@esbuild/linux-s390x": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-s390x/-/linux-s390x-0.24.2.tgz", + "integrity": "sha512-S0Bh0A53b0YHL2XEXC20bHLuGMOhFDO6GN4b3YjRLK//Ep3ql3erpNcPlEFed93hsQAjAQDNsvcK+hV90FubSw==", + "dev": true, + "optional": true + }, + "@esbuild/linux-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/linux-x64/-/linux-x64-0.24.2.tgz", + "integrity": "sha512-8Qi4nQcCTbLnK9WoMjdC9NiTG6/E38RNICU6sUNqK0QFxCYgoARqVqxdFmWkdonVsvGqWhmm7MO0jyTqLqwj0Q==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-arm64/-/netbsd-arm64-0.24.2.tgz", + "integrity": "sha512-wuLK/VztRRpMt9zyHSazyCVdCXlpHkKm34WUyinD2lzK07FAHTq0KQvZZlXikNWkDGoT6x3TD51jKQ7gMVpopw==", + "dev": true, + "optional": true + }, + "@esbuild/netbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/netbsd-x64/-/netbsd-x64-0.24.2.tgz", + "integrity": "sha512-VefFaQUc4FMmJuAxmIHgUmfNiLXY438XrL4GDNV1Y1H/RW3qow68xTwjZKfj/+Plp9NANmzbH5R40Meudu8mmw==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-arm64/-/openbsd-arm64-0.24.2.tgz", + "integrity": "sha512-YQbi46SBct6iKnszhSvdluqDmxCJA+Pu280Av9WICNwQmMxV7nLRHZfjQzwbPs3jeWnuAhE9Jy0NrnJ12Oz+0A==", + "dev": true, + "optional": true + }, + "@esbuild/openbsd-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/openbsd-x64/-/openbsd-x64-0.24.2.tgz", + "integrity": "sha512-+iDS6zpNM6EnJyWv0bMGLWSWeXGN/HTaF/LXHXHwejGsVi+ooqDfMCCTerNFxEkM3wYVcExkeGXNqshc9iMaOA==", + "dev": true, + "optional": true + }, + "@esbuild/sunos-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/sunos-x64/-/sunos-x64-0.24.2.tgz", + "integrity": "sha512-hTdsW27jcktEvpwNHJU4ZwWFGkz2zRJUz8pvddmXPtXDzVKTTINmlmga3ZzwcuMpUvLw7JkLy9QLKyGpD2Yxig==", + "dev": true, + "optional": true + }, + "@esbuild/win32-arm64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-arm64/-/win32-arm64-0.24.2.tgz", + "integrity": "sha512-LihEQ2BBKVFLOC9ZItT9iFprsE9tqjDjnbulhHoFxYQtQfai7qfluVODIYxt1PgdoyQkz23+01rzwNwYfutxUQ==", + "dev": true, + "optional": true + }, + "@esbuild/win32-ia32": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-ia32/-/win32-ia32-0.24.2.tgz", + "integrity": "sha512-q+iGUwfs8tncmFC9pcnD5IvRHAzmbwQ3GPS5/ceCyHdjXubwQWI12MKWSNSMYLJMq23/IUCvJMS76PDqXe1fxA==", + "dev": true, + "optional": true + }, + "@esbuild/win32-x64": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/@esbuild/win32-x64/-/win32-x64-0.24.2.tgz", + "integrity": "sha512-7VTgWzgMGvup6aSqDPLiW5zHaxYJGTO4OokMjIlrCtf+VpEL+cXKtCvg723iguPYI5oaUNdS+/V7OU2gvXVWEg==", + "dev": true, + "optional": true + }, + "@floating-ui/core": { + "version": "1.7.3", + "resolved": "https://registry.npmjs.org/@floating-ui/core/-/core-1.7.3.tgz", + "integrity": "sha512-sGnvb5dmrJaKEZ+LDIpguvdX3bDlEllmv4/ClQ9awcmCZrlx5jQyyMWFM5kBI+EyNOCDDiKk8il0zeuX3Zlg/w==", + "dev": true, + "requires": { + "@floating-ui/utils": "^0.2.10" + } + }, + "@floating-ui/dom": { + "version": "1.7.4", + "resolved": "https://registry.npmjs.org/@floating-ui/dom/-/dom-1.7.4.tgz", + "integrity": "sha512-OOchDgh4F2CchOX94cRVqhvy7b3AFb+/rQXyswmzmGakRfkMgoWVjfnLWkRirfLEfuD4ysVW16eXzwt3jHIzKA==", + "dev": true, + "requires": { + "@floating-ui/core": "^1.7.3", + "@floating-ui/utils": "^0.2.10" + } + }, + "@floating-ui/utils": { + "version": "0.2.10", + "resolved": "https://registry.npmjs.org/@floating-ui/utils/-/utils-0.2.10.tgz", + "integrity": "sha512-aGTxbpbg8/b5JfU1HXSrbH3wXZuLPJcNEcZQFMxLs3oSzgtVu6nFPkbbGGUvBcUjKV2YyB9Wxxabo+HEH9tcRQ==", + "dev": true + }, + "@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "requires": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + } + }, + "@isaacs/fs-minipass": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/@isaacs/fs-minipass/-/fs-minipass-4.0.1.tgz", + "integrity": "sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==", + "dev": true, + "requires": { + "minipass": "^7.0.4" + } + }, + "@jridgewell/gen-mapping": { + "version": "0.3.13", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.13.tgz", + "integrity": "sha512-2kkt/7niJ6MgEPxF0bYdQ6etZaA+fQvDcLKckhy1yIQOzaoKjBBjSj63/aLVjYE3qhRt5dvM+uUyfCg6UKCBbA==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.0", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/remapping": { + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/remapping/-/remapping-2.3.5.tgz", + "integrity": "sha512-LI9u/+laYG4Ds1TDKSJW2YPrIlcVYOwi2fUC6xB43lueCjgxV4lffOCZCtYFiH6TNOX+tQKXx97T4IKHbhyHEQ==", + "dev": true, + "requires": { + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" + } + }, + "@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true + }, + "@jridgewell/sourcemap-codec": { + "version": "1.5.5", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.5.5.tgz", + "integrity": "sha512-cYQ9310grqxueWbl+WuIUIaiUaDcj7WOq5fVhEljNVgRfOUhY9fy2zTvfoqWsnebh8Sl70VScFbICvJnLKB0Og==", + "dev": true + }, + "@jridgewell/trace-mapping": { + "version": "0.3.31", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.31.tgz", + "integrity": "sha512-zzNR+SdQSDJzc8joaeP8QQoCQr8NuYx2dIIytl1QeBEZHJ9uW6hebsrYgbz8hJwUQao3TWCMtmfV8Nu1twOLAw==", + "dev": true, + "requires": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "@parcel/watcher": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher/-/watcher-2.5.1.tgz", + "integrity": "sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==", + "dev": true, + "requires": { + "@parcel/watcher-android-arm64": "2.5.1", + "@parcel/watcher-darwin-arm64": "2.5.1", + "@parcel/watcher-darwin-x64": "2.5.1", + "@parcel/watcher-freebsd-x64": "2.5.1", + "@parcel/watcher-linux-arm-glibc": "2.5.1", + "@parcel/watcher-linux-arm-musl": "2.5.1", + "@parcel/watcher-linux-arm64-glibc": "2.5.1", + "@parcel/watcher-linux-arm64-musl": "2.5.1", + "@parcel/watcher-linux-x64-glibc": "2.5.1", + "@parcel/watcher-linux-x64-musl": "2.5.1", + "@parcel/watcher-win32-arm64": "2.5.1", + "@parcel/watcher-win32-ia32": "2.5.1", + "@parcel/watcher-win32-x64": "2.5.1", + "detect-libc": "^1.0.3", + "is-glob": "^4.0.3", + "micromatch": "^4.0.5", + "node-addon-api": "^7.0.0" + } + }, + "@parcel/watcher-android-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-android-arm64/-/watcher-android-arm64-2.5.1.tgz", + "integrity": "sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-arm64/-/watcher-darwin-arm64-2.5.1.tgz", + "integrity": "sha512-eAzPv5osDmZyBhou8PoF4i6RQXAfeKL9tjb3QzYuccXFMQU0ruIc/POh30ePnaOyD1UXdlKguHBmsTs53tVoPw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-darwin-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-darwin-x64/-/watcher-darwin-x64-2.5.1.tgz", + "integrity": "sha512-1ZXDthrnNmwv10A0/3AJNZ9JGlzrF82i3gNQcWOzd7nJ8aj+ILyW1MTxVk35Db0u91oD5Nlk9MBiujMlwmeXZg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-freebsd-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-freebsd-x64/-/watcher-freebsd-x64-2.5.1.tgz", + "integrity": "sha512-SI4eljM7Flp9yPuKi8W0ird8TI/JK6CSxju3NojVI6BjHsTyK7zxA9urjVjEKJ5MBYC+bLmMcbAWlZ+rFkLpJQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-glibc/-/watcher-linux-arm-glibc-2.5.1.tgz", + "integrity": "sha512-RCdZlEyTs8geyBkkcnPWvtXLY44BCeZKmGYRtSgtwwnHR4dxfHRG3gR99XdMEdQ7KeiDdasJwwvNSF5jKtDwdA==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm-musl/-/watcher-linux-arm-musl-2.5.1.tgz", + "integrity": "sha512-6E+m/Mm1t1yhB8X412stiKFG3XykmgdIOqhjWj+VL8oHkKABfu/gjFj8DvLrYVHSBNC+/u5PeNrujiSQ1zwd1Q==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-glibc/-/watcher-linux-arm64-glibc-2.5.1.tgz", + "integrity": "sha512-LrGp+f02yU3BN9A+DGuY3v3bmnFUggAITBGriZHUREfNEzZh/GO06FF5u2kx8x+GBEUYfyTGamol4j3m9ANe8w==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-arm64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-arm64-musl/-/watcher-linux-arm64-musl-2.5.1.tgz", + "integrity": "sha512-cFOjABi92pMYRXS7AcQv9/M1YuKRw8SZniCDw0ssQb/noPkRzA+HBDkwmyOJYp5wXcsTrhxO0zq1U11cK9jsFg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-glibc": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-glibc/-/watcher-linux-x64-glibc-2.5.1.tgz", + "integrity": "sha512-GcESn8NZySmfwlTsIur+49yDqSny2IhPeZfXunQi48DMugKeZ7uy1FX83pO0X22sHntJ4Ub+9k34XQCX+oHt2A==", + "dev": true, + "optional": true + }, + "@parcel/watcher-linux-x64-musl": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-linux-x64-musl/-/watcher-linux-x64-musl-2.5.1.tgz", + "integrity": "sha512-n0E2EQbatQ3bXhcH2D1XIAANAcTZkQICBPVaxMeaCVBtOpBZpWJuf7LwyWPSBDITb7In8mqQgJ7gH8CILCURXg==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-arm64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-arm64/-/watcher-win32-arm64-2.5.1.tgz", + "integrity": "sha512-RFzklRvmc3PkjKjry3hLF9wD7ppR4AKcWNzH7kXR7GUe0Igb3Nz8fyPwtZCSquGrhU5HhUNDr/mKBqj7tqA2Vw==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-ia32": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-ia32/-/watcher-win32-ia32-2.5.1.tgz", + "integrity": "sha512-c2KkcVN+NJmuA7CGlaGD1qJh1cLfDnQsHjE89E60vUEMlqduHGCdCLJCID5geFVM0dOtA3ZiIO8BoEQmzQVfpQ==", + "dev": true, + "optional": true + }, + "@parcel/watcher-win32-x64": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/@parcel/watcher-win32-x64/-/watcher-win32-x64-2.5.1.tgz", + "integrity": "sha512-9lHBdJITeNR++EvSQVUcaZoWupyHfXe1jZvGZ06O/5MflPcuPLtEphScIBL+AiCWBO46tDSHzWyD0uDmmZqsgA==", + "dev": true, + "optional": true + }, + "@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true + }, + "@svgdotjs/svg.draggable.js": { + "version": "3.0.6", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.draggable.js/-/svg.draggable.js-3.0.6.tgz", + "integrity": "sha512-7iJFm9lL3C40HQcqzEfezK2l+dW2CpoVY3b77KQGqc8GXWa6LhhmX5Ckv7alQfUXBuZbjpICZ+Dvq1czlGx7gA==", + "dev": true, + "requires": {} + }, + "@svgdotjs/svg.filter.js": { + "version": "3.0.9", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.filter.js/-/svg.filter.js-3.0.9.tgz", + "integrity": "sha512-/69XMRCDoam2HgC4ldHIaDgeQf1ViHIsa0Ld4uWgiXtZ+E24DWHe/9Ib6kbNiZ7WRIdlVokUDR1Fg0kjIpkfbw==", + "dev": true, + "requires": { + "@svgdotjs/svg.js": "^3.2.4" + } + }, + "@svgdotjs/svg.js": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.js/-/svg.js-3.2.5.tgz", + "integrity": "sha512-/VNHWYhNu+BS7ktbYoVGrCmsXDh+chFMaONMwGNdIBcFHrWqk2jY8fNyr3DLdtQUIalvkPfM554ZSFa3dm3nxQ==", + "dev": true + }, + "@svgdotjs/svg.resize.js": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.resize.js/-/svg.resize.js-2.0.5.tgz", + "integrity": "sha512-4heRW4B1QrJeENfi7326lUPYBCevj78FJs8kfeDxn5st0IYPIRXoTtOSYvTzFWgaWWXd3YCDE6ao4fmv91RthA==", + "dev": true, + "requires": {} + }, + "@svgdotjs/svg.select.js": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/@svgdotjs/svg.select.js/-/svg.select.js-4.0.3.tgz", + "integrity": "sha512-qkMgso1sd2hXKd1FZ1weO7ANq12sNmQJeGDjs46QwDVsxSRcHmvWKL2NDF7Yimpwf3sl5esOLkPqtV2bQ3v/Jg==", + "dev": true, + "requires": {} + }, + "@swc/helpers": { + "version": "0.2.14", + "resolved": "https://registry.npmjs.org/@swc/helpers/-/helpers-0.2.14.tgz", + "integrity": "sha512-wpCQMhf5p5GhNg2MmGKXzUNwxe7zRiCsmqYsamez2beP7mKPCSiu+BjZcdN95yYSzO857kr0VfQewmGpS77nqA==", + "dev": true + }, + "@tailwindcss/cli": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/cli/-/cli-4.1.13.tgz", + "integrity": "sha512-KEu/iL4CYBzGza/2yZBLXqjCCZB/eRWkRLP8Vg2kkEWk4usC8HLGJW0QAhLS7U5DsAWumsisxgabuppE6NinLw==", + "dev": true, + "requires": { + "@parcel/watcher": "^2.5.1", + "@tailwindcss/node": "4.1.13", + "@tailwindcss/oxide": "4.1.13", + "enhanced-resolve": "^5.18.3", + "mri": "^1.2.0", + "picocolors": "^1.1.1", + "tailwindcss": "4.1.13" + } + }, + "@tailwindcss/forms": { + "version": "0.5.10", + "resolved": "https://registry.npmjs.org/@tailwindcss/forms/-/forms-0.5.10.tgz", + "integrity": "sha512-utI1ONF6uf/pPNO68kmN1b8rEwNXv3czukalo8VtJH8ksIkZXr3Q3VYudZLkCsDd4Wku120uF02hYK25XGPorw==", + "dev": true, + "requires": { + "mini-svg-data-uri": "^1.2.3" + } + }, + "@tailwindcss/node": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/node/-/node-4.1.13.tgz", + "integrity": "sha512-eq3ouolC1oEFOAvOMOBAmfCIqZBJuvWvvYWh5h5iOYfe1HFC6+GZ6EIL0JdM3/niGRJmnrOc+8gl9/HGUaaptw==", + "dev": true, + "requires": { + "@jridgewell/remapping": "^2.3.4", + "enhanced-resolve": "^5.18.3", + "jiti": "^2.5.1", + "lightningcss": "1.30.1", + "magic-string": "^0.30.18", + "source-map-js": "^1.2.1", + "tailwindcss": "4.1.13" + } + }, + "@tailwindcss/oxide": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide/-/oxide-4.1.13.tgz", + "integrity": "sha512-CPgsM1IpGRa880sMbYmG1s4xhAy3xEt1QULgTJGQmZUeNgXFR7s1YxYygmJyBGtou4SyEosGAGEeYqY7R53bIA==", + "dev": true, + "requires": { + "@tailwindcss/oxide-android-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-arm64": "4.1.13", + "@tailwindcss/oxide-darwin-x64": "4.1.13", + "@tailwindcss/oxide-freebsd-x64": "4.1.13", + "@tailwindcss/oxide-linux-arm-gnueabihf": "4.1.13", + "@tailwindcss/oxide-linux-arm64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-arm64-musl": "4.1.13", + "@tailwindcss/oxide-linux-x64-gnu": "4.1.13", + "@tailwindcss/oxide-linux-x64-musl": "4.1.13", + "@tailwindcss/oxide-wasm32-wasi": "4.1.13", + "@tailwindcss/oxide-win32-arm64-msvc": "4.1.13", + "@tailwindcss/oxide-win32-x64-msvc": "4.1.13", + "detect-libc": "^2.0.4", + "tar": "^7.4.3" + }, + "dependencies": { + "detect-libc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", + "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", + "dev": true + } + } + }, + "@tailwindcss/oxide-android-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-android-arm64/-/oxide-android-arm64-4.1.13.tgz", + "integrity": "sha512-BrpTrVYyejbgGo57yc8ieE+D6VT9GOgnNdmh5Sac6+t0m+v+sKQevpFVpwX3pBrM2qKrQwJ0c5eDbtjouY/+ew==", + "dev": true, + "optional": true + }, + "@tailwindcss/oxide-darwin-arm64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-arm64/-/oxide-darwin-arm64-4.1.13.tgz", + "integrity": "sha512-YP+Jksc4U0KHcu76UhRDHq9bx4qtBftp9ShK/7UGfq0wpaP96YVnnjFnj3ZFrUAjc5iECzODl/Ts0AN7ZPOANQ==", + "dev": true, + "optional": true + }, + "@tailwindcss/oxide-darwin-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-darwin-x64/-/oxide-darwin-x64-4.1.13.tgz", + "integrity": "sha512-aAJ3bbwrn/PQHDxCto9sxwQfT30PzyYJFG0u/BWZGeVXi5Hx6uuUOQEI2Fa43qvmUjTRQNZnGqe9t0Zntexeuw==", + "dev": true, + "optional": true + }, + "@tailwindcss/oxide-freebsd-x64": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-freebsd-x64/-/oxide-freebsd-x64-4.1.13.tgz", + "integrity": "sha512-Wt8KvASHwSXhKE/dJLCCWcTSVmBj3xhVhp/aF3RpAhGeZ3sVo7+NTfgiN8Vey/Fi8prRClDs6/f0KXPDTZE6nQ==", + "dev": true, + "optional": true + }, + "@tailwindcss/oxide-linux-arm-gnueabihf": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm-gnueabihf/-/oxide-linux-arm-gnueabihf-4.1.13.tgz", + "integrity": "sha512-mbVbcAsW3Gkm2MGwA93eLtWrwajz91aXZCNSkGTx/R5eb6KpKD5q8Ueckkh9YNboU8RH7jiv+ol/I7ZyQ9H7Bw==", + "dev": true, + "optional": true + }, + "@tailwindcss/oxide-linux-arm64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-gnu/-/oxide-linux-arm64-gnu-4.1.13.tgz", + "integrity": "sha512-wdtfkmpXiwej/yoAkrCP2DNzRXCALq9NVLgLELgLim1QpSfhQM5+ZxQQF8fkOiEpuNoKLp4nKZ6RC4kmeFH0HQ==", + "dev": true, + "optional": true + }, + "@tailwindcss/oxide-linux-arm64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-arm64-musl/-/oxide-linux-arm64-musl-4.1.13.tgz", + "integrity": "sha512-hZQrmtLdhyqzXHB7mkXfq0IYbxegaqTmfa1p9MBj72WPoDD3oNOh1Lnxf6xZLY9C3OV6qiCYkO1i/LrzEdW2mg==", + "dev": true, + "optional": true + }, + "@tailwindcss/oxide-linux-x64-gnu": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-gnu/-/oxide-linux-x64-gnu-4.1.13.tgz", + "integrity": "sha512-uaZTYWxSXyMWDJZNY1Ul7XkJTCBRFZ5Fo6wtjrgBKzZLoJNrG+WderJwAjPzuNZOnmdrVg260DKwXCFtJ/hWRQ==", + "dev": true, + "optional": true + }, + "@tailwindcss/oxide-linux-x64-musl": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-linux-x64-musl/-/oxide-linux-x64-musl-4.1.13.tgz", + "integrity": "sha512-oXiPj5mi4Hdn50v5RdnuuIms0PVPI/EG4fxAfFiIKQh5TgQgX7oSuDWntHW7WNIi/yVLAiS+CRGW4RkoGSSgVQ==", + "dev": true, + "optional": true + }, + "@tailwindcss/oxide-wasm32-wasi": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-wasm32-wasi/-/oxide-wasm32-wasi-4.1.13.tgz", + "integrity": "sha512-+LC2nNtPovtrDwBc/nqnIKYh/W2+R69FA0hgoeOn64BdCX522u19ryLh3Vf3F8W49XBcMIxSe665kwy21FkhvA==", + "dev": true, + "optional": true, + "requires": { + "@emnapi/core": "^1.4.5", + "@emnapi/runtime": "^1.4.5", + "@emnapi/wasi-threads": "^1.0.4", + "@napi-rs/wasm-runtime": "^0.2.12", + "@tybys/wasm-util": "^0.10.0", + "tslib": "^2.8.0" + } + }, + "@tailwindcss/oxide-win32-arm64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-arm64-msvc/-/oxide-win32-arm64-msvc-4.1.13.tgz", + "integrity": "sha512-dziTNeQXtoQ2KBXmrjCxsuPk3F3CQ/yb7ZNZNA+UkNTeiTGgfeh+gH5Pi7mRncVgcPD2xgHvkFCh/MhZWSgyQg==", + "dev": true, + "optional": true + }, + "@tailwindcss/oxide-win32-x64-msvc": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/@tailwindcss/oxide-win32-x64-msvc/-/oxide-win32-x64-msvc-4.1.13.tgz", + "integrity": "sha512-3+LKesjXydTkHk5zXX01b5KMzLV1xl2mcktBJkje7rhFUpUlYJy7IMOLqjIRQncLTa1WZZiFY/foAeB5nmaiTw==", + "dev": true, + "optional": true + }, + "@yr/monotone-cubic-spline": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/@yr/monotone-cubic-spline/-/monotone-cubic-spline-1.0.3.tgz", + "integrity": "sha512-FQXkOta0XBSUPHndIKON2Y9JeQz5ZeMqLYZVVK93FliNBFm7LNMIZmY6FrMEB9XPcDbE2bekMbZD6kzDkxwYjA==", + "dev": true + }, + "ansi-regex": { + "version": "6.2.2", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.2.2.tgz", + "integrity": "sha512-Bq3SmSpyFHaWjPk8If9yc6svM8c56dB5BAtW4Qbw5jHTwwXXcTLoRMkpDJp6VL0XzlWaCHTXrkFURMYmD0sLqg==", + "dev": true + }, + "ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "requires": { + "color-convert": "^2.0.1" + } + }, + "apexcharts": { + "version": "4.7.0", + "resolved": "https://registry.npmjs.org/apexcharts/-/apexcharts-4.7.0.tgz", + "integrity": "sha512-iZSrrBGvVlL+nt2B1NpqfDuBZ9jX61X9I2+XV0hlYXHtTwhwLTHDKGXjNXAgFBDLuvSYCB/rq2nPWVPRv2DrGA==", + "dev": true, + "requires": { + "@svgdotjs/svg.draggable.js": "^3.0.4", + "@svgdotjs/svg.filter.js": "^3.0.8", + "@svgdotjs/svg.js": "^3.2.4", + "@svgdotjs/svg.resize.js": "^2.0.2", + "@svgdotjs/svg.select.js": "^4.0.1", + "@yr/monotone-cubic-spline": "^1.0.3" + } + }, + "autoprefixer": { + "version": "10.4.21", + "resolved": "https://registry.npmjs.org/autoprefixer/-/autoprefixer-10.4.21.tgz", + "integrity": "sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==", + "dev": true, + "requires": { + "browserslist": "^4.24.4", + "caniuse-lite": "^1.0.30001702", + "fraction.js": "^4.3.7", + "normalize-range": "^0.1.2", + "picocolors": "^1.1.1", + "postcss-value-parser": "^4.2.0" + } + }, + "balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "baseline-browser-mapping": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/baseline-browser-mapping/-/baseline-browser-mapping-2.8.5.tgz", + "integrity": "sha512-TiU4qUT9jdCuh4aVOG7H1QozyeI2sZRqoRPdqBIaslfNt4WUSanRBueAwl2x5jt4rXBMim3lIN2x6yT8PDi24Q==", + "dev": true + }, + "brace-expansion": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.2.tgz", + "integrity": "sha512-Jt0vHyM+jmUBqojB7E1NIYadt0vI0Qxjxd2TErW94wDz+E2LAm5vKMXXwg6ZZBTHPuUlDgQHKXvjGBdfcF1ZDQ==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dev": true, + "requires": { + "fill-range": "^7.1.1" + } + }, + "browserslist": { + "version": "4.26.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.26.2.tgz", + "integrity": "sha512-ECFzp6uFOSB+dcZ5BK/IBaGWssbSYBHvuMeMt3MMFyhI0Z8SqGgEkBLARgpRH3hutIgPVsALcMwbDrJqPxQ65A==", + "dev": true, + "requires": { + "baseline-browser-mapping": "^2.8.3", + "caniuse-lite": "^1.0.30001741", + "electron-to-chromium": "^1.5.218", + "node-releases": "^2.0.21", + "update-browserslist-db": "^1.1.3" + } + }, + "caniuse-lite": { + "version": "1.0.30001743", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001743.tgz", + "integrity": "sha512-e6Ojr7RV14Un7dz6ASD0aZDmQPT/A+eZU+nuTNfjqmRrmkmQlnTNWH0SKmqagx9PeW87UVqapSurtAXifmtdmw==", + "dev": true + }, + "chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "requires": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "dependencies": { + "supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + } + } + }, + "chownr": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/chownr/-/chownr-3.0.0.tgz", + "integrity": "sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==", + "dev": true + }, + "cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "requires": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + }, + "wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + } + } + } + }, + "color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "requires": { + "color-name": "~1.1.4" + } + }, + "color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "concurrently": { + "version": "8.2.2", + "resolved": "https://registry.npmjs.org/concurrently/-/concurrently-8.2.2.tgz", + "integrity": "sha512-1dP4gpXFhei8IOtlXRE/T/4H88ElHgTiUzh71YUmtjTEHMSRS2Z/fgOxHSxxusGHogsRfxNq1vyAwxSC+EVyDg==", + "dev": true, + "requires": { + "chalk": "^4.1.2", + "date-fns": "^2.30.0", + "lodash": "^4.17.21", + "rxjs": "^7.8.1", + "shell-quote": "^1.8.1", + "spawn-command": "0.0.2", + "supports-color": "^8.1.1", + "tree-kill": "^1.2.2", + "yargs": "^17.7.2" + } + }, + "cross-spawn": { + "version": "7.0.6", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.6.tgz", + "integrity": "sha512-uV2QOWP2nWzsy2aMp8aRibhi9dlzF5Hgh5SHaB9OiTGEyDTiJJyx0uy51QXdyWbtAHNua4XJzUKca3OzKUd3vA==", + "dev": true, + "requires": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + } + }, + "datatables.net": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/datatables.net/-/datatables.net-2.3.4.tgz", + "integrity": "sha512-fKuRlrBIdpAl2uIFgl9enKecHB41QmFd/2nN9LBbOvItV/JalAxLcyqdZXex7wX4ZXjnJQEnv6xeS9veOpKzSw==", + "dev": true, + "requires": { + "jquery": ">=1.7" + } + }, + "datatables.net-dt": { + "version": "2.3.4", + "resolved": "https://registry.npmjs.org/datatables.net-dt/-/datatables.net-dt-2.3.4.tgz", + "integrity": "sha512-qOCnnUuFTiju4AOMM4xy4Lx87UfyHdIHIMYdbBXD4pAtvoWTH9wMzVTN/2gFNT4GlbrLkmGf5ZkU6uLRTTymMA==", + "dev": true, + "requires": { + "datatables.net": "2.3.4", + "jquery": ">=1.7" + } + }, + "date-fns": { + "version": "2.30.0", + "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-2.30.0.tgz", + "integrity": "sha512-fnULvOpxnC5/Vg3NCiWelDsLiUc9bRwAPs/+LfTLNvetFCtCTN+yQz15C/fs4AwX1R9K5GLtLfn8QW+dWisaAw==", + "dev": true, + "requires": { + "@babel/runtime": "^7.21.0" + } + }, + "debug": { + "version": "4.4.3", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.4.3.tgz", + "integrity": "sha512-RGwwWnwQvkVfavKVt22FGLw+xYSdzARwm0ru6DhTVA3umU5hZc28V3kO4stgYryrTlLpuvgI9GiijltAjNbcqA==", + "dev": true, + "requires": { + "ms": "^2.1.3" + } + }, + "detect-libc": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-1.0.3.tgz", + "integrity": "sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==", + "dev": true + }, + "dropzone": { + "version": "6.0.0-beta.2", + "resolved": "https://registry.npmjs.org/dropzone/-/dropzone-6.0.0-beta.2.tgz", + "integrity": "sha512-k44yLuFFhRk53M8zP71FaaNzJYIzr99SKmpbO/oZKNslDjNXQsBTdfLs+iONd0U0L94zzlFzRnFdqbLcs7h9fQ==", + "dev": true, + "requires": { + "@swc/helpers": "^0.2.13", + "just-extend": "^5.0.0" + } + }, + "eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "electron-to-chromium": { + "version": "1.5.221", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.221.tgz", + "integrity": "sha512-/1hFJ39wkW01ogqSyYoA4goOXOtMRy6B+yvA1u42nnsEGtHzIzmk93aPISumVQeblj47JUHLC9coCjUxb1EvtQ==", + "dev": true + }, + "emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "enhanced-resolve": { + "version": "5.18.3", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.18.3.tgz", + "integrity": "sha512-d4lC8xfavMeBjzGr2vECC3fsGXziXZQyJxD868h2M/mBI3PwAuODxAkLkq5HYuvrPYcUtiLzsTo8U3PgX3Ocww==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, + "esbuild": { + "version": "0.24.2", + "resolved": "https://registry.npmjs.org/esbuild/-/esbuild-0.24.2.tgz", + "integrity": "sha512-+9egpBW8I3CD5XPe0n6BfT5fxLzxrlDzqydF3aviG+9ni1lDC/OvMHcxqEFV0+LANZG5R1bFMWfUrjVsdwxJvA==", + "dev": true, + "requires": { + "@esbuild/aix-ppc64": "0.24.2", + "@esbuild/android-arm": "0.24.2", + "@esbuild/android-arm64": "0.24.2", + "@esbuild/android-x64": "0.24.2", + "@esbuild/darwin-arm64": "0.24.2", + "@esbuild/darwin-x64": "0.24.2", + "@esbuild/freebsd-arm64": "0.24.2", + "@esbuild/freebsd-x64": "0.24.2", + "@esbuild/linux-arm": "0.24.2", + "@esbuild/linux-arm64": "0.24.2", + "@esbuild/linux-ia32": "0.24.2", + "@esbuild/linux-loong64": "0.24.2", + "@esbuild/linux-mips64el": "0.24.2", + "@esbuild/linux-ppc64": "0.24.2", + "@esbuild/linux-riscv64": "0.24.2", + "@esbuild/linux-s390x": "0.24.2", + "@esbuild/linux-x64": "0.24.2", + "@esbuild/netbsd-arm64": "0.24.2", + "@esbuild/netbsd-x64": "0.24.2", + "@esbuild/openbsd-arm64": "0.24.2", + "@esbuild/openbsd-x64": "0.24.2", + "@esbuild/sunos-x64": "0.24.2", + "@esbuild/win32-arm64": "0.24.2", + "@esbuild/win32-ia32": "0.24.2", + "@esbuild/win32-x64": "0.24.2" + } + }, + "escalade": { + "version": "3.2.0", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.2.0.tgz", + "integrity": "sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==", + "dev": true + }, + "fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dev": true, + "requires": { + "to-regex-range": "^5.0.1" + } + }, + "foreground-child": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.3.1.tgz", + "integrity": "sha512-gIXjKqtFuWEgzFRJA9WCQeSJLZDjgJUOMCMzxtvFq/37KojM1BFGufqsCy0r4qSQmYLsZYMeyRqzIWOMup03sw==", + "dev": true, + "requires": { + "cross-spawn": "^7.0.6", + "signal-exit": "^4.0.1" + } + }, + "fraction.js": { + "version": "4.3.7", + "resolved": "https://registry.npmjs.org/fraction.js/-/fraction.js-4.3.7.tgz", + "integrity": "sha512-ZsDfxO51wGAXREY55a7la9LScWpwv9RxIrYABrlvOFBlH/ShPnrtsXeuUIfXKKOVicNxQ+o8JTbJvjS4M89yew==", + "dev": true + }, + "get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true + }, + "glob": { + "version": "10.4.5", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.5.tgz", + "integrity": "sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==", + "dev": true, + "requires": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "package-json-from-dist": "^1.0.0", + "path-scurry": "^1.11.1" + } + }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, + "has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true + }, + "is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "dev": true + }, + "is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true + }, + "is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dev": true, + "requires": { + "is-extglob": "^2.1.1" + } + }, + "is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "dev": true + }, + "isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "jackspeak": { + "version": "3.4.3", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.3.tgz", + "integrity": "sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==", + "dev": true, + "requires": { + "@isaacs/cliui": "^8.0.2", + "@pkgjs/parseargs": "^0.11.0" + } + }, + "jiti": { + "version": "2.5.1", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-2.5.1.tgz", + "integrity": "sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==", + "dev": true + }, + "jquery": { + "version": "3.7.1", + "resolved": "https://registry.npmjs.org/jquery/-/jquery-3.7.1.tgz", + "integrity": "sha512-m4avr8yL8kmFN8psrbFFFmB/If14iN5o9nw/NgnnM+kybDJpRsAynV2BsfpTYrTRysYUdADVD7CkUUizgkpLfg==", + "dev": true + }, + "just-extend": { + "version": "5.1.1", + "resolved": "https://registry.npmjs.org/just-extend/-/just-extend-5.1.1.tgz", + "integrity": "sha512-b+z6yF1d4EOyDgylzQo5IminlUmzSeqR1hs/bzjBNjuGras4FXq/6TrzjxfN0j+TmI0ltJzTNlqXUMCniciwKQ==", + "dev": true + }, + "lightningcss": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss/-/lightningcss-1.30.1.tgz", + "integrity": "sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==", + "dev": true, + "requires": { + "detect-libc": "^2.0.3", + "lightningcss-darwin-arm64": "1.30.1", + "lightningcss-darwin-x64": "1.30.1", + "lightningcss-freebsd-x64": "1.30.1", + "lightningcss-linux-arm-gnueabihf": "1.30.1", + "lightningcss-linux-arm64-gnu": "1.30.1", + "lightningcss-linux-arm64-musl": "1.30.1", + "lightningcss-linux-x64-gnu": "1.30.1", + "lightningcss-linux-x64-musl": "1.30.1", + "lightningcss-win32-arm64-msvc": "1.30.1", + "lightningcss-win32-x64-msvc": "1.30.1" + }, + "dependencies": { + "detect-libc": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/detect-libc/-/detect-libc-2.1.0.tgz", + "integrity": "sha512-vEtk+OcP7VBRtQZ1EJ3bdgzSfBjgnEalLTp5zjJrS+2Z1w2KZly4SBdac/WDU3hhsNAZ9E8SC96ME4Ey8MZ7cg==", + "dev": true + } + } + }, + "lightningcss-darwin-arm64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-arm64/-/lightningcss-darwin-arm64-1.30.1.tgz", + "integrity": "sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==", + "dev": true, + "optional": true + }, + "lightningcss-darwin-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-darwin-x64/-/lightningcss-darwin-x64-1.30.1.tgz", + "integrity": "sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==", + "dev": true, + "optional": true + }, + "lightningcss-freebsd-x64": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-freebsd-x64/-/lightningcss-freebsd-x64-1.30.1.tgz", + "integrity": "sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm-gnueabihf": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm-gnueabihf/-/lightningcss-linux-arm-gnueabihf-1.30.1.tgz", + "integrity": "sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-gnu/-/lightningcss-linux-arm64-gnu-1.30.1.tgz", + "integrity": "sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==", + "dev": true, + "optional": true + }, + "lightningcss-linux-arm64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-arm64-musl/-/lightningcss-linux-arm64-musl-1.30.1.tgz", + "integrity": "sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-gnu": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-gnu/-/lightningcss-linux-x64-gnu-1.30.1.tgz", + "integrity": "sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==", + "dev": true, + "optional": true + }, + "lightningcss-linux-x64-musl": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-linux-x64-musl/-/lightningcss-linux-x64-musl-1.30.1.tgz", + "integrity": "sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==", + "dev": true, + "optional": true + }, + "lightningcss-win32-arm64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-arm64-msvc/-/lightningcss-win32-arm64-msvc-1.30.1.tgz", + "integrity": "sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==", + "dev": true, + "optional": true + }, + "lightningcss-win32-x64-msvc": { + "version": "1.30.1", + "resolved": "https://registry.npmjs.org/lightningcss-win32-x64-msvc/-/lightningcss-win32-x64-msvc-1.30.1.tgz", + "integrity": "sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==", + "dev": true, + "optional": true + }, + "lodash": { + "version": "4.17.21", + "resolved": "https://registry.npmjs.org/lodash/-/lodash-4.17.21.tgz", + "integrity": "sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg==", + "dev": true + }, + "lru-cache": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.4.3.tgz", + "integrity": "sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==", + "dev": true + }, + "magic-string": { + "version": "0.30.19", + "resolved": "https://registry.npmjs.org/magic-string/-/magic-string-0.30.19.tgz", + "integrity": "sha512-2N21sPY9Ws53PZvsEpVtNuSW+ScYbQdp4b9qUaL+9QkHUrGFKo56Lg9Emg5s9V/qrtNBmiR01sYhUOwu3H+VOw==", + "dev": true, + "requires": { + "@jridgewell/sourcemap-codec": "^1.5.5" + } + }, + "micromatch": { + "version": "4.0.8", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.8.tgz", + "integrity": "sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==", + "dev": true, + "requires": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + } + }, + "mini-svg-data-uri": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/mini-svg-data-uri/-/mini-svg-data-uri-1.4.4.tgz", + "integrity": "sha512-r9deDe9p5FJUPZAk3A59wGH7Ii9YrjjWw0jmw/liSbHl2CHiyXj6FcDXDu2K3TjVAXqiJdaw3xxwlZZr9E6nHg==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + }, + "minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true + }, + "minizlib": { + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/minizlib/-/minizlib-3.0.2.tgz", + "integrity": "sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==", + "dev": true, + "requires": { + "minipass": "^7.1.2" + } + }, + "mri": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/mri/-/mri-1.2.0.tgz", + "integrity": "sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==", + "dev": true + }, + "ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==", + "dev": true + }, + "nanoid": { + "version": "3.3.11", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.11.tgz", + "integrity": "sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==", + "dev": true + }, + "node-addon-api": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/node-addon-api/-/node-addon-api-7.1.1.tgz", + "integrity": "sha512-5m3bsyrjFWE1xf7nz7YXdN4udnVtXK6/Yfgn5qnahL6bCkf2yKt4k3nuTKAtT4r3IG8JNR2ncsIMdZuAzJjHQQ==", + "dev": true + }, + "node-releases": { + "version": "2.0.21", + "resolved": "https://registry.npmjs.org/node-releases/-/node-releases-2.0.21.tgz", + "integrity": "sha512-5b0pgg78U3hwXkCM8Z9b2FJdPZlr9Psr9V2gQPESdGHqbntyFJKFW4r5TeWGFzafGY3hzs1JC62VEQMbl1JFkw==", + "dev": true + }, + "normalize-range": { + "version": "0.1.2", + "resolved": "https://registry.npmjs.org/normalize-range/-/normalize-range-0.1.2.tgz", + "integrity": "sha512-bdok/XvKII3nUpklnV6P2hxtMNrCboOjAcyBuQnWEhO665FwrSNRxU+AqpsyvO6LgGYPspN+lu5CLtw4jPRKNA==", + "dev": true + }, + "nouislider": { + "version": "15.8.1", + "resolved": "https://registry.npmjs.org/nouislider/-/nouislider-15.8.1.tgz", + "integrity": "sha512-93TweAi8kqntHJSPiSWQ1o/uZ29VWOmal9YKb6KKGGlCkugaNfAupT7o1qTHqdJvNQ7S0su5rO6qRFCjP8fxtw==", + "dev": true + }, + "package-json-from-dist": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/package-json-from-dist/-/package-json-from-dist-1.0.1.tgz", + "integrity": "sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==", + "dev": true + }, + "path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true + }, + "path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "requires": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + } + }, + "picocolors": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.1.1.tgz", + "integrity": "sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==", + "dev": true + }, + "picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "dev": true + }, + "postcss": { + "version": "8.5.6", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.5.6.tgz", + "integrity": "sha512-3Ybi1tAuwAP9s0r1UQ2J4n5Y0G05bJkpUIO0/bI9MhwmD70S5aTWbXGBwxHrelT+XM1k6dM0pk+SwNkpTRN7Pg==", + "dev": true, + "requires": { + "nanoid": "^3.3.11", + "picocolors": "^1.1.1", + "source-map-js": "^1.2.1" + } + }, + "postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "preline": { + "version": "3.2.3", + "resolved": "https://registry.npmjs.org/preline/-/preline-3.2.3.tgz", + "integrity": "sha512-S13MFdC/1FWFz3S+oW1PlyZ6Alo0SZxJ9HwaZRg5IQZjcbKqCFIOXAbAhQeX0izauqWJXIQdKofhfCWBizwleQ==", + "dev": true, + "requires": { + "@floating-ui/dom": "^1.6.13", + "apexcharts": "^4.5.0", + "datatables.net-dt": "^2.2.2", + "dropzone": "^6.0.0-beta.2", + "nouislider": "^15.8.1", + "vanilla-calendar-pro": "^3.0.4" + } + }, + "prettier": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/prettier/-/prettier-3.6.2.tgz", + "integrity": "sha512-I7AIg5boAr5R0FFtJ6rCfD+LFsWHp81dolrFD8S79U9tb8Az2nGrJncnMSnys+bpQJfRUzqs9hnA81OAA3hCuQ==", + "dev": true + }, + "require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true + }, + "rxjs": { + "version": "7.8.2", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-7.8.2.tgz", + "integrity": "sha512-dhKf903U/PQZY6boNNtAGdWbG85WAbjT/1xYoZIC7FAY0yWapOBQVsVrDl58W86//e1VpMNBtRV4MaXfdMySFA==", + "dev": true, + "requires": { + "tslib": "^2.1.0" + } + }, + "sax": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/sax/-/sax-1.4.1.tgz", + "integrity": "sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==", + "dev": true + }, + "shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "requires": { + "shebang-regex": "^3.0.0" + } + }, + "shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true + }, + "shell-quote": { + "version": "1.8.3", + "resolved": "https://registry.npmjs.org/shell-quote/-/shell-quote-1.8.3.tgz", + "integrity": "sha512-ObmnIF4hXNg1BqhnHmgbDETF8dLPCggZWBjkQfhZpbszZnYur5DUljTcCHii5LC3J5E0yeO/1LIMyH+UvHQgyw==", + "dev": true + }, + "signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true + }, + "source-map-js": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.1.tgz", + "integrity": "sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==", + "dev": true + }, + "spawn-command": { + "version": "0.0.2", + "resolved": "https://registry.npmjs.org/spawn-command/-/spawn-command-0.0.2.tgz", + "integrity": "sha512-zC8zGoGkmc8J9ndvml8Xksr1Amk9qBujgbF0JAIWO7kXr43w0h/0GJNM/Vustixu+YE8N/MTrQ7N31FvHUACxQ==", + "dev": true + }, + "string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "requires": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + } + }, + "string-width-cjs": { + "version": "npm:string-width@4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "strip-ansi": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.2.tgz", + "integrity": "sha512-gmBGslpoQJtgnMAvOVqGZpEz9dyoKTCzy2nfz/n8aIFhN/jCE/rCmcxabB6jOOHV+0WNnylOxaxBQPSvcWklhA==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, + "strip-ansi-cjs": { + "version": "npm:strip-ansi@6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + } + } + }, + "stylus": { + "version": "0.64.0", + "resolved": "https://registry.npmjs.org/stylus/-/stylus-0.64.0.tgz", + "integrity": "sha512-ZIdT8eUv8tegmqy1tTIdJv9We2DumkNZFdCF5mz/Kpq3OcTaxSuCAYZge6HKK2CmNC02G1eJig2RV7XTw5hQrA==", + "dev": true, + "requires": { + "@adobe/css-tools": "~4.3.3", + "debug": "^4.3.2", + "glob": "^10.4.5", + "sax": "~1.4.1", + "source-map": "^0.7.3" + }, + "dependencies": { + "source-map": { + "version": "0.7.6", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.7.6.tgz", + "integrity": "sha512-i5uvt8C3ikiWeNZSVZNWcfZPItFQOsYTUAOkcUPGd8DqDy1uOUikjt5dG+uRlwyvR108Fb9DOd4GvXfT0N2/uQ==", + "dev": true + } + } + }, + "supports-color": { + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-8.1.1.tgz", + "integrity": "sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q==", + "dev": true, + "requires": { + "has-flag": "^4.0.0" + } + }, + "tailwindcss": { + "version": "4.1.13", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-4.1.13.tgz", + "integrity": "sha512-i+zidfmTqtwquj4hMEwdjshYYgMbOrPzb9a0M3ZgNa0JMoZeFC6bxZvO8yr8ozS6ix2SDz0+mvryPeBs2TFE+w==", + "dev": true + }, + "tapable": { + "version": "2.2.3", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.3.tgz", + "integrity": "sha512-ZL6DDuAlRlLGghwcfmSn9sK3Hr6ArtyudlSAiCqQ6IfE+b+HHbydbYDIG15IfS5do+7XQQBdBiubF/cV2dnDzg==", + "dev": true + }, + "tar": { + "version": "7.4.3", + "resolved": "https://registry.npmjs.org/tar/-/tar-7.4.3.tgz", + "integrity": "sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==", + "dev": true, + "requires": { + "@isaacs/fs-minipass": "^4.0.0", + "chownr": "^3.0.0", + "minipass": "^7.1.2", + "minizlib": "^3.0.1", + "mkdirp": "^3.0.1", + "yallist": "^5.0.0" + }, + "dependencies": { + "mkdirp": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/mkdirp/-/mkdirp-3.0.1.tgz", + "integrity": "sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==", + "dev": true + } + } + }, + "to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dev": true, + "requires": { + "is-number": "^7.0.0" + } + }, + "tree-kill": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/tree-kill/-/tree-kill-1.2.2.tgz", + "integrity": "sha512-L0Orpi8qGpRG//Nd+H90vFB+3iHnue1zSSGmNOOCh1GLJ7rUKVwV2HvijphGQS2UmhUZewS9VgvxYIdgr+fG1A==", + "dev": true + }, + "tslib": { + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/tslib/-/tslib-2.8.1.tgz", + "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", + "dev": true + }, + "typescript": { + "version": "5.9.2", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.9.2.tgz", + "integrity": "sha512-CWBzXQrc/qOkhidw1OzBTQuYRbfyxDXJMVJ1XNwUHGROVmuaeiEm3OslpZ1RV96d7SKKjZKrSJu3+t/xlw3R9A==", + "dev": true + }, + "update-browserslist-db": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.3.tgz", + "integrity": "sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==", + "dev": true, + "requires": { + "escalade": "^3.2.0", + "picocolors": "^1.1.1" + } + }, + "vanilla-calendar-pro": { + "version": "3.0.5", + "resolved": "https://registry.npmjs.org/vanilla-calendar-pro/-/vanilla-calendar-pro-3.0.5.tgz", + "integrity": "sha512-4X9bmTo1/KzbZrB7B6mZXtvVXIhcKxaVSnFZuaVtps7tshKJDxgaIElkgdia6IjB5qWetWuu7kZ+ZaV1sPxy6w==", + "dev": true + }, + "which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "requires": { + "isexe": "^2.0.0" + } + }, + "wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "requires": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "dependencies": { + "ansi-styles": { + "version": "6.2.3", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.3.tgz", + "integrity": "sha512-4Dj6M28JB+oAH8kFkTLUo+a2jwOFkuqb3yucU0CANcRRUbxS0cP0nZYCGjcc3BNXwRIsUVmDGgzawme7zvJHvg==", + "dev": true + } + } + }, + "wrap-ansi-cjs": { + "version": "npm:wrap-ansi@7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "requires": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true + }, + "yallist": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/yallist/-/yallist-5.0.0.tgz", + "integrity": "sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==", + "dev": true + }, + "yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "requires": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "dependencies": { + "ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true + }, + "emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "requires": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + } + }, + "strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "requires": { + "ansi-regex": "^5.0.1" + } + } + } + }, + "yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true + } + } +} diff --git a/package.json b/package.json new file mode 100644 index 0000000..4480fd0 --- /dev/null +++ b/package.json @@ -0,0 +1,26 @@ +{ + "name": "kubeload", + "scripts": { + "watch": "concurrently \"npm:watch:*\"", + "watch:tailwind": "npx tailwindcss -i src/styles/tailwind.css -o static/css/tailwind.css --watch", + "watch:stylus": "stylus src/stylus -o static/css -w", + "watch:ts": "esbuild src/ts/Main.ts --bundle --outfile=static/js/bundle.js --format=esm --sourcemap --watch", + "build": "concurrently \"npm:build:*\"", + "build:tailwind": "tailwindcss -i src/styles/tailwind.css -o static/css/tailwind.css --minify", + "build:stylus": "stylus src/stylus -o static/css", + "build:ts": "esbuild src/ts/Main.ts --bundle --outfile=static/js/bundle.js --format=esm --sourcemap --minify" + }, + "devDependencies": { + "@tailwindcss/cli": "^4.1.13", + "@tailwindcss/forms": "^0.5.10", + "autoprefixer": "^10.4.21", + "concurrently": "^8.2.2", + "esbuild": "^0.24.0", + "postcss": "^8.5.6", + "preline": "^3.2.3", + "prettier": "^3.6.2", + "stylus": "^0.64.0", + "tailwindcss": "^4.1.13", + "typescript": "^5.6.3" + } +} diff --git a/requirements.txt b/requirements.txt new file mode 100644 index 0000000..e69de29 diff --git a/routes/__init__.py b/routes/__init__.py new file mode 100644 index 0000000..0ffd2db --- /dev/null +++ b/routes/__init__.py @@ -0,0 +1,4 @@ +from .main import main +from .account import account +from .auth import auth +from .products import products diff --git a/routes/__pycache__/__init__.cpython-311.pyc b/routes/__pycache__/__init__.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..66eba6d4232c260cb8832ad10c4d256e73b689e2 GIT binary patch literal 324 zcmZ3^%ge<81Uq-7W@Z8D#~=<2FhLog&47&Q3@HpLj5!Rs3{eb>AU0DDV=iM9Bbd#c z!<5Su#RO)vX#O$7U^e~CZ*=&C#L8Z z<(HPE7VF2yXXa&=#K-FuRQ}?y$pxC1lWJE4@*Bwh;$R^0ftit!@dks~1ypo{LFNJ~ Q!lp*<0s|IQ!~rxH09W5o1poj5 literal 0 HcmV?d00001 diff --git a/routes/__pycache__/account.cpython-311.pyc b/routes/__pycache__/account.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..06cf4389ad0ac4b67cb21883241821671ed6d07b GIT binary patch literal 571 zcmZutJxc>Y5S`siyt_aY5kVsX8zBdhGuC2ZXJccR!sE=Yn0Oyy?+!GTh@hpNc3MRw zy@kIbffRC8KrHMc=~6j+xda7=owqZOoq4nKoX_U~?eUG*U-ABs$<#7wFlu0M4-6P_ zz$I1U(kdlDffGi#(xw0%^odn7JoA*DX1{NyvNU@usMIVZ0!?$GEUU?lv7ePs(`=v zI|nM#gVu7|Z`!TgsCy0DAVO~81xAQ4-Y`#nmzz<*g?SbobH}%tDf}qpftl8qn-{T~ zP9)@Rn1oLBe*gxpfUy7o literal 0 HcmV?d00001 diff --git a/routes/__pycache__/auth.cpython-311.pyc b/routes/__pycache__/auth.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..ca24362d8c0175b105901db5118b9dadfc883e01 GIT binary patch literal 1067 zcmb_azi-n(6n=O9c}0OBXq9$C*&;%&e?Y~+goMYzkB+=_r7~~9~zA{5cZ}RxX%#47rCiT zy$FiWA~*pD9OQwI`pCz9i~s{e4ra;}1I)y#tgkZly;koo{~cv2I?TkX%u!##RD`oS z0e$^iuC~I}uW*fPxyB0Dyuvjd@)SC2-=vZb&dDP$VMFc)aej-lz+v2qnLqUGnB}US z#QS5Ndf~tg_LkB`pj@oto(N7LULF+0;C_`Ln&I7XQ&ioV#;o-bZ z_d}o2Bx0N%CeN7{+79Jm60?X(YHv8owNeMaA@FkO(QV--@RhXYoA*=F%}95SyPSyZ zm{86JZWJ^AZ?f-{vg=xva&CwY+>}oC;_^}DW{u$uv6cDalDu9@Xh!H9)1UJ8!Xw5< z|3_X`>(BBk3~vf)QX;=8ofNv;A-VR#v!g>UueH3E+_bE~_L*gIIqF<1uc91%dBC#F z$_&oU9Y1suk3Hmf1xG%K=%a881tIhay7S+CXGU`}db{zil^X5LXiwBLq#bX)+Y5S`t-OLB$~Z6pLFk|qWu_Xos6`!sg3I8JxPOYSaV?+%Prlz^6YNof_4 z`~?3*1Pi$;AQpC!biu;e%Lfr0c4pr^X6Eg%PnpaHp#8jXyN~yWOqQlDz_gB_2Mic- zz$G=}(i$Z|ffGi#GN1rM^tshku0CqZZ2e}+fM6y1+?d*h0m9*ufLelSCs0m&Nv2FA z{m2PvgvXo^tmt^;Tdq$qW4&D2-^9>? zPd(S)dDTmAdTB&ULPxS%PDa{=WBCms-xv!;Dbw^Umz$=L&5;%lkB5nrERu~ve$Om* z;5J$4@I#TsRBq*;Vwfm|kayT0{ddO6%})DayPtba7T=P^jyfjVUH&$Ie|%Hu7ABOC Ry$N9WR)B7;6EPc${{j%$biV)q literal 0 HcmV?d00001 diff --git a/routes/__pycache__/products.cpython-311.pyc b/routes/__pycache__/products.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..6c3acf1b80bc031283cf0231f2151e00f94e6da5 GIT binary patch literal 1622 zcmbu8Jx|*}7{~9E}^HbmXo=&d~enNwzPA|a|u0d zR_+ryhv{W6Kx&1N-u!^KFyt+c^cDxa`jA&2>E#37(vX*r^p*#_6GPsTRe4KR9{k1= zSYa`LZFgi_H61^mRMN4es{69lwoPBgdRw_xr{Q}?1<|nGj@8JH4JKN*-z>r8l=#^p z6S%ay7_cGRJ(}*NOOqJ~P3OS8pbGE&g51DJZkNS-w&6#DYYs>W~JkR zdnhdESXXkt>G@Kr3M?_+kF^%^YQ(DntEO1G@O)R9`*J+CnT)NQ?jFEmSE43?4H^6S zHbTA`@y&p3rhGYJIo^0|4>LAMbq|*YpB3I9_I{>n$c=~_0W(sjiokl@ZMbxBAN#{E@bNrDnm6f1LLhhHH&d`h%S$) CS~+k4 literal 0 HcmV?d00001 diff --git a/routes/__pycache__/user.cpython-311.pyc b/routes/__pycache__/user.cpython-311.pyc new file mode 100644 index 0000000000000000000000000000000000000000..c6eb4c71ae01bac857a0e8a033b5c36a8c9575f9 GIT binary patch literal 562 zcmZutJ5K^Z5T4z;^EeZH6@pZTjzsVNfU&T&ps}Oyae!c7%<|3 zM=Hdl6-s~tCya8XO96W5GpndvebyG)-rCZei*pCx)i}cnfqiPgAPQ?mVhg)4uS1x zxwRw37E)%t=GUDP5pw@mm>|NmXk7&!x6-=n_=3BE!z>ZR5f4++Y%~*nK8uiFD!(Ay zMrgyAk?-#v4h(Z>n0;!B46@~to@ke@6J85BZQ3iz*tYL@+_r^$ooK0kswQ+QMGV?g*(faX`2lurBq0(2^TA^-pY literal 0 HcmV?d00001 diff --git a/routes/account.py b/routes/account.py new file mode 100644 index 0000000..fb1ea4f --- /dev/null +++ b/routes/account.py @@ -0,0 +1,8 @@ +from flask import Blueprint, render_template + +account = Blueprint("account", __name__) + +@account.route("/console") +def console(): + return render_template("account/console.jinja") + \ No newline at end of file diff --git a/routes/auth.py b/routes/auth.py new file mode 100644 index 0000000..e567a7b --- /dev/null +++ b/routes/auth.py @@ -0,0 +1,15 @@ +from flask import Blueprint, render_template + +auth = Blueprint("auth", __name__) + +@auth.route("/login") +def login(): + return render_template("auth/login.jinja") + +@auth.route("/register") +def register(): + return render_template("auth/register.jinja") + +@auth.route("/recovery") +def recovery(): + return render_template("auth/recovery.jinja") diff --git a/routes/main.py b/routes/main.py new file mode 100644 index 0000000..dd71093 --- /dev/null +++ b/routes/main.py @@ -0,0 +1,7 @@ +from flask import Blueprint, render_template + +main = Blueprint("main", __name__) + +@main.route("/") +def index(): + return render_template("index.jinja") diff --git a/routes/products.py b/routes/products.py new file mode 100644 index 0000000..2a550b8 --- /dev/null +++ b/routes/products.py @@ -0,0 +1,23 @@ +from flask import Blueprint, render_template + +products = Blueprint("products", __name__) + +@products.route("/cloud") +def login(): + return render_template("products/cloud.jinja") + +@products.route("/ai") +def register(): + return render_template("products/ai.jinja") + +@products.route("/storage") +def storage(): + return render_template("products/storage.jinja") + +@products.route("/dns") +def dns(): + return render_template("products/dns.jinja") + +@products.route("/loadbalancer") +def loadbalancer(): + return render_template("products/loadbalancer.jinja") diff --git a/rsync.sh b/rsync.sh new file mode 100755 index 0000000..f2d1d5f --- /dev/null +++ b/rsync.sh @@ -0,0 +1,12 @@ +#!/bin/bash + +while true; do + rsync -avz -e "ssh -p 2222" --delete \ + --exclude 'app.db' \ + --exclude 'init.sql' \ + --exclude '__pycache__/' \ + --exclude '.venv/' \ + ./ user@142.132.183.45:/var/www/app/kubeload + + sleep 10 +done diff --git a/src/styles/tailwind.css b/src/styles/tailwind.css new file mode 100644 index 0000000..0b07d71 --- /dev/null +++ b/src/styles/tailwind.css @@ -0,0 +1,6 @@ +@import "tailwindcss"; +/* Preline UI */ +@source "../../node_modules/preline/dist/*.js"; +@import "../../node_modules/preline/variants.css"; +/* Plugins */ +@plugin "@tailwindcss/forms"; diff --git a/src/stylus/index.styl b/src/stylus/index.styl new file mode 100644 index 0000000..56bfb3e --- /dev/null +++ b/src/stylus/index.styl @@ -0,0 +1,22 @@ +body + background: #fafaf8; // + +@theme + --color-blue: oklch(0.707 0.165 254.624); + --color-purple: oklch(0.714 0.203 305.504); + --color-pink: oklch(0.718 0.202 349.761); + --color-orange: oklch(0.75 0.183 55.934); + --color-green: oklch(0.792 0.209 151.711); + --color-yellow: oklch(0.852 0.199 91.936); + --color-gray-dark: oklch(0.13 0.028 261.692); + --color-gray: oklch(0.707 0.022 261.325); + --color-gray-light: oklch(0.985 0.002 247.839); + + --font-sans: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif"; + --font-serif: "Merriweather", "serif"; + --columns: 14; + + --spacing-8xl: 96rem; + --spacing-9xl: 128rem; + + --radius-4xl: 2rem; diff --git a/src/ts/Login.ts b/src/ts/Login.ts new file mode 100644 index 0000000..e69de29 diff --git a/src/ts/Main.ts b/src/ts/Main.ts new file mode 100644 index 0000000..acbd24f --- /dev/null +++ b/src/ts/Main.ts @@ -0,0 +1,9 @@ +import "preline"; + +export class Main { + static init() { + console.log("Main initialized!"); + } +} + +Main.init(); diff --git a/static/css/index.css b/static/css/index.css new file mode 100644 index 0000000..105503a --- /dev/null +++ b/static/css/index.css @@ -0,0 +1,20 @@ +body { + background: #fafaf8; +} +@theme { + --color-blue: oklch(0.707 0.165 254.624); + --color-purple: oklch(0.714 0.203 305.504); + --color-pink: oklch(0.718 0.202 349.761); + --color-orange: oklch(0.75 0.183 55.934); + --color-green: oklch(0.792 0.209 151.711); + --color-yellow: oklch(0.852 0.199 91.936); + --color-gray-dark: oklch(0.13 0.028 261.692); + --color-gray: oklch(0.707 0.022 261.325); + --color-gray-light: oklch(0.985 0.002 247.839); + --font-sans: "Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, Segoe UI, Roboto, Helvetica Neue, Arial, Noto Sans, sans-serif"; + --font-serif: "Merriweather", "serif"; + --columns: 14; + --spacing-8xl: 96rem; + --spacing-9xl: 128rem; + --radius-4xl: 2rem; +} diff --git a/static/css/tailwind.css b/static/css/tailwind.css new file mode 100644 index 0000000..e6f1e2e --- /dev/null +++ b/static/css/tailwind.css @@ -0,0 +1,3479 @@ +/*! tailwindcss v4.1.13 | MIT License | https://tailwindcss.com */ +@layer properties; +@layer theme, base, components, utilities; +@layer theme { + :root, :host { + --font-sans: ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", + "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"; + --font-mono: ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", + "Courier New", monospace; + --color-red-500: oklch(63.7% 0.237 25.331); + --color-red-600: oklch(57.7% 0.245 27.325); + --color-green-600: oklch(62.7% 0.194 149.214); + --color-blue-50: oklch(97% 0.014 254.604); + --color-blue-100: oklch(93.2% 0.032 255.585); + --color-blue-200: oklch(88.2% 0.059 254.128); + --color-blue-300: oklch(80.9% 0.105 251.813); + --color-blue-400: oklch(70.7% 0.165 254.624); + --color-blue-500: oklch(62.3% 0.214 259.815); + --color-blue-600: oklch(54.6% 0.245 262.881); + --color-blue-700: oklch(48.8% 0.243 264.376); + --color-blue-800: oklch(42.4% 0.199 265.638); + --color-gray-50: oklch(98.5% 0.002 247.839); + --color-gray-100: oklch(96.7% 0.003 264.542); + --color-gray-200: oklch(92.8% 0.006 264.531); + --color-gray-300: oklch(87.2% 0.01 258.338); + --color-gray-400: oklch(70.7% 0.022 261.325); + --color-gray-500: oklch(55.1% 0.027 264.364); + --color-gray-600: oklch(44.6% 0.03 256.802); + --color-gray-700: oklch(37.3% 0.034 259.733); + --color-gray-800: oklch(27.8% 0.033 256.848); + --color-gray-900: oklch(21% 0.034 264.665); + --color-neutral-50: oklch(98.5% 0 0); + --color-neutral-100: oklch(97% 0 0); + --color-neutral-200: oklch(92.2% 0 0); + --color-neutral-300: oklch(87% 0 0); + --color-neutral-400: oklch(70.8% 0 0); + --color-neutral-500: oklch(55.6% 0 0); + --color-neutral-600: oklch(43.9% 0 0); + --color-neutral-700: oklch(37.1% 0 0); + --color-neutral-800: oklch(26.9% 0 0); + --color-neutral-900: oklch(20.5% 0 0); + --color-stone-100: oklch(97% 0.001 106.424); + --color-stone-200: oklch(92.3% 0.003 48.717); + --color-black: #000; + --color-white: #fff; + --spacing: 0.25rem; + --breakpoint-xl: 80rem; + --container-xs: 20rem; + --container-md: 28rem; + --container-2xl: 42rem; + --container-3xl: 48rem; + --container-5xl: 64rem; + --container-6xl: 72rem; + --text-xs: 0.75rem; + --text-xs--line-height: calc(1 / 0.75); + --text-sm: 0.875rem; + --text-sm--line-height: calc(1.25 / 0.875); + --text-base: 1rem; + --text-base--line-height: calc(1.5 / 1); + --text-lg: 1.125rem; + --text-lg--line-height: calc(1.75 / 1.125); + --text-xl: 1.25rem; + --text-xl--line-height: calc(1.75 / 1.25); + --text-2xl: 1.5rem; + --text-2xl--line-height: calc(2 / 1.5); + --text-3xl: 1.875rem; + --text-3xl--line-height: calc(2.25 / 1.875); + --text-4xl: 2.25rem; + --text-4xl--line-height: calc(2.5 / 2.25); + --text-5xl: 3rem; + --text-5xl--line-height: 1; + --font-weight-normal: 400; + --font-weight-medium: 500; + --font-weight-semibold: 600; + --font-weight-bold: 700; + --tracking-tight: -0.025em; + --leading-tight: 1.25; + --radius-xs: 0.125rem; + --radius-sm: 0.25rem; + --radius-md: 0.375rem; + --radius-lg: 0.5rem; + --radius-xl: 0.75rem; + --radius-2xl: 1rem; + --ease-in-out: cubic-bezier(0.4, 0, 0.2, 1); + --animate-spin: spin 1s linear infinite; + --default-transition-duration: 150ms; + --default-transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); + --default-font-family: var(--font-sans); + --default-mono-font-family: var(--font-mono); + } +} +@layer base { + *, ::after, ::before, ::backdrop, ::file-selector-button { + box-sizing: border-box; + margin: 0; + padding: 0; + border: 0 solid; + } + html, :host { + line-height: 1.5; + -webkit-text-size-adjust: 100%; + tab-size: 4; + font-family: var(--default-font-family, ui-sans-serif, system-ui, sans-serif, "Apple Color Emoji", "Segoe UI Emoji", "Segoe UI Symbol", "Noto Color Emoji"); + font-feature-settings: var(--default-font-feature-settings, normal); + font-variation-settings: var(--default-font-variation-settings, normal); + -webkit-tap-highlight-color: transparent; + } + hr { + height: 0; + color: inherit; + border-top-width: 1px; + } + abbr:where([title]) { + -webkit-text-decoration: underline dotted; + text-decoration: underline dotted; + } + h1, h2, h3, h4, h5, h6 { + font-size: inherit; + font-weight: inherit; + } + a { + color: inherit; + -webkit-text-decoration: inherit; + text-decoration: inherit; + } + b, strong { + font-weight: bolder; + } + code, kbd, samp, pre { + font-family: var(--default-mono-font-family, ui-monospace, SFMono-Regular, Menlo, Monaco, Consolas, "Liberation Mono", "Courier New", monospace); + font-feature-settings: var(--default-mono-font-feature-settings, normal); + font-variation-settings: var(--default-mono-font-variation-settings, normal); + font-size: 1em; + } + small { + font-size: 80%; + } + sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; + } + sub { + bottom: -0.25em; + } + sup { + top: -0.5em; + } + table { + text-indent: 0; + border-color: inherit; + border-collapse: collapse; + } + :-moz-focusring { + outline: auto; + } + progress { + vertical-align: baseline; + } + summary { + display: list-item; + } + ol, ul, menu { + list-style: none; + } + img, svg, video, canvas, audio, iframe, embed, object { + display: block; + vertical-align: middle; + } + img, video { + max-width: 100%; + height: auto; + } + button, input, select, optgroup, textarea, ::file-selector-button { + font: inherit; + font-feature-settings: inherit; + font-variation-settings: inherit; + letter-spacing: inherit; + color: inherit; + border-radius: 0; + background-color: transparent; + opacity: 1; + } + :where(select:is([multiple], [size])) optgroup { + font-weight: bolder; + } + :where(select:is([multiple], [size])) optgroup option { + padding-inline-start: 20px; + } + ::file-selector-button { + margin-inline-end: 4px; + } + ::placeholder { + opacity: 1; + } + @supports (not (-webkit-appearance: -apple-pay-button)) or (contain-intrinsic-size: 1px) { + ::placeholder { + color: currentcolor; + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, currentcolor 50%, transparent); + } + } + } + textarea { + resize: vertical; + } + ::-webkit-search-decoration { + -webkit-appearance: none; + } + ::-webkit-date-and-time-value { + min-height: 1lh; + text-align: inherit; + } + ::-webkit-datetime-edit { + display: inline-flex; + } + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + ::-webkit-datetime-edit, ::-webkit-datetime-edit-year-field, ::-webkit-datetime-edit-month-field, ::-webkit-datetime-edit-day-field, ::-webkit-datetime-edit-hour-field, ::-webkit-datetime-edit-minute-field, ::-webkit-datetime-edit-second-field, ::-webkit-datetime-edit-millisecond-field, ::-webkit-datetime-edit-meridiem-field { + padding-block: 0; + } + ::-webkit-calendar-picker-indicator { + line-height: 1; + } + :-moz-ui-invalid { + box-shadow: none; + } + button, input:where([type="button"], [type="reset"], [type="submit"]), ::file-selector-button { + appearance: button; + } + ::-webkit-inner-spin-button, ::-webkit-outer-spin-button { + height: auto; + } + [hidden]:where(:not([hidden="until-found"])) { + display: none !important; + } +} +@layer utilities { + .pointer-events-none { + pointer-events: none; + } + .collapse { + visibility: collapse; + } + .invisible { + visibility: hidden; + } + .visible { + visibility: visible; + } + .sr-only { + position: absolute; + width: 1px; + height: 1px; + padding: 0; + margin: -1px; + overflow: hidden; + clip-path: inset(50%); + white-space: nowrap; + border-width: 0; + } + .absolute { + position: absolute; + } + .fixed { + position: fixed; + } + .relative { + position: relative; + } + .static { + position: static; + } + .sticky { + position: sticky; + } + .inset-0 { + inset: calc(var(--spacing) * 0); + } + .inset-x-0 { + inset-inline: calc(var(--spacing) * 0); + } + .inset-y-0 { + inset-block: calc(var(--spacing) * 0); + } + .start-0 { + inset-inline-start: calc(var(--spacing) * 0); + } + .start-2 { + inset-inline-start: calc(var(--spacing) * 2); + } + .start-10 { + inset-inline-start: calc(var(--spacing) * 10); + } + .end-0 { + inset-inline-end: calc(var(--spacing) * 0); + } + .end-2 { + inset-inline-end: calc(var(--spacing) * 2); + } + .-top-6 { + top: calc(var(--spacing) * -6); + } + .top-0 { + top: calc(var(--spacing) * 0); + } + .top-1\.5 { + top: calc(var(--spacing) * 1.5); + } + .top-1\/2 { + top: calc(1/2 * 100%); + } + .top-2 { + top: calc(var(--spacing) * 2); + } + .top-full { + top: 100%; + } + .bottom-full { + bottom: 100%; + } + .z-10 { + z-index: 10; + } + .z-20 { + z-index: 20; + } + .z-50 { + z-index: 50; + } + .z-60 { + z-index: 60; + } + .col-span-1 { + grid-column: span 1 / span 1; + } + .col-span-2 { + grid-column: span 2 / span 2; + } + .col-span-3 { + grid-column: span 3 / span 3; + } + .container { + width: 100%; + @media (width >= 40rem) { + max-width: 40rem; + } + @media (width >= 48rem) { + max-width: 48rem; + } + @media (width >= 64rem) { + max-width: 64rem; + } + @media (width >= 80rem) { + max-width: 80rem; + } + @media (width >= 96rem) { + max-width: 96rem; + } + } + .-mx-2\.5 { + margin-inline: calc(var(--spacing) * -2.5); + } + .mx-1\.5 { + margin-inline: calc(var(--spacing) * 1.5); + } + .mx-4 { + margin-inline: calc(var(--spacing) * 4); + } + .mx-auto { + margin-inline: auto; + } + .my-2 { + margin-block: calc(var(--spacing) * 2); + } + .my-4 { + margin-block: calc(var(--spacing) * 4); + } + .\!ms-auto { + margin-inline-start: auto !important; + } + .ms-0\.5 { + margin-inline-start: calc(var(--spacing) * 0.5); + } + .ms-1 { + margin-inline-start: calc(var(--spacing) * 1); + } + .ms-2 { + margin-inline-start: calc(var(--spacing) * 2); + } + .ms-3 { + margin-inline-start: calc(var(--spacing) * 3); + } + .ms-auto { + margin-inline-start: auto; + } + .\!me-1\.5 { + margin-inline-end: calc(var(--spacing) * 1.5) !important; + } + .-mt-5 { + margin-top: calc(var(--spacing) * -5); + } + .-mt-9 { + margin-top: calc(var(--spacing) * -9); + } + .mt-0\.5 { + margin-top: calc(var(--spacing) * 0.5); + } + .mt-1 { + margin-top: calc(var(--spacing) * 1); + } + .mt-1\.5 { + margin-top: calc(var(--spacing) * 1.5); + } + .mt-2 { + margin-top: calc(var(--spacing) * 2); + } + .mt-3 { + margin-top: calc(var(--spacing) * 3); + } + .mt-4 { + margin-top: calc(var(--spacing) * 4); + } + .mt-5 { + margin-top: calc(var(--spacing) * 5); + } + .mt-7 { + margin-top: calc(var(--spacing) * 7); + } + .mt-12 { + margin-top: calc(var(--spacing) * 12); + } + .mt-auto { + margin-top: auto; + } + .-mr-1 { + margin-right: calc(var(--spacing) * -1); + } + .-mr-6 { + margin-right: calc(var(--spacing) * -6); + } + .mb-1 { + margin-bottom: calc(var(--spacing) * 1); + } + .mb-2 { + margin-bottom: calc(var(--spacing) * 2); + } + .mb-3 { + margin-bottom: calc(var(--spacing) * 3); + } + .mb-4 { + margin-bottom: calc(var(--spacing) * 4); + } + .mb-5 { + margin-bottom: calc(var(--spacing) * 5); + } + .mb-6 { + margin-bottom: calc(var(--spacing) * 6); + } + .mb-8 { + margin-bottom: calc(var(--spacing) * 8); + } + .mb-10 { + margin-bottom: calc(var(--spacing) * 10); + } + .mb-12 { + margin-bottom: calc(var(--spacing) * 12); + } + .-ml-2 { + margin-left: calc(var(--spacing) * -2); + } + .ml-2 { + margin-left: calc(var(--spacing) * 2); + } + .\!flex { + display: flex !important; + } + .block { + display: block; + } + .contents { + display: contents; + } + .flex { + display: flex; + } + .grid { + display: grid; + } + .hidden { + display: none; + } + .inline { + display: inline; + } + .inline-block { + display: inline-block; + } + .inline-flex { + display: inline-flex; + } + .table { + display: table; + } + .size-1\.5 { + width: calc(var(--spacing) * 1.5); + height: calc(var(--spacing) * 1.5); + } + .size-2\.5 { + width: calc(var(--spacing) * 2.5); + height: calc(var(--spacing) * 2.5); + } + .size-3 { + width: calc(var(--spacing) * 3); + height: calc(var(--spacing) * 3); + } + .size-3\.5 { + width: calc(var(--spacing) * 3.5); + height: calc(var(--spacing) * 3.5); + } + .size-4 { + width: calc(var(--spacing) * 4); + height: calc(var(--spacing) * 4); + } + .size-5 { + width: calc(var(--spacing) * 5); + height: calc(var(--spacing) * 5); + } + .size-6 { + width: calc(var(--spacing) * 6); + height: calc(var(--spacing) * 6); + } + .size-7 { + width: calc(var(--spacing) * 7); + height: calc(var(--spacing) * 7); + } + .size-8 { + width: calc(var(--spacing) * 8); + height: calc(var(--spacing) * 8); + } + .size-9 { + width: calc(var(--spacing) * 9); + height: calc(var(--spacing) * 9); + } + .size-11 { + width: calc(var(--spacing) * 11); + height: calc(var(--spacing) * 11); + } + .size-12 { + width: calc(var(--spacing) * 12); + height: calc(var(--spacing) * 12); + } + .size-20 { + width: calc(var(--spacing) * 20); + height: calc(var(--spacing) * 20); + } + .size-full { + width: 100%; + height: 100%; + } + .size-px { + width: 1px; + height: 1px; + } + .\!h-2\.5 { + height: calc(var(--spacing) * 2.5) !important; + } + .h-2 { + height: calc(var(--spacing) * 2); + } + .h-5 { + height: calc(var(--spacing) * 5); + } + .h-7 { + height: calc(var(--spacing) * 7); + } + .h-7\.5 { + height: calc(var(--spacing) * 7.5); + } + .h-9 { + height: calc(var(--spacing) * 9); + } + .h-9\.5 { + height: calc(var(--spacing) * 9.5); + } + .h-11\.5 { + height: calc(var(--spacing) * 11.5); + } + .h-72 { + height: calc(var(--spacing) * 72); + } + .h-auto { + height: auto; + } + .h-full { + height: 100%; + } + .max-h-60 { + max-height: calc(var(--spacing) * 60); + } + .max-h-72 { + max-height: calc(var(--spacing) * 72); + } + .max-h-\[75vh\] { + max-height: 75vh; + } + .max-h-full { + max-height: 100%; + } + .min-h-\[calc\(100vh-56px\)\] { + min-height: calc(100vh - 56px); + } + .min-h-screen { + min-height: 100vh; + } + .\!w-2\.5 { + width: calc(var(--spacing) * 2.5) !important; + } + .w-1\/4 { + width: calc(1/4 * 100%); + } + .w-3\/4 { + width: calc(3/4 * 100%); + } + .w-4 { + width: calc(var(--spacing) * 4); + } + .w-5 { + width: calc(var(--spacing) * 5); + } + .w-6 { + width: calc(var(--spacing) * 6); + } + .w-7 { + width: calc(var(--spacing) * 7); + } + .w-8 { + width: calc(var(--spacing) * 8); + } + .w-8\.5 { + width: calc(var(--spacing) * 8.5); + } + .w-10 { + width: calc(var(--spacing) * 10); + } + .w-20 { + width: calc(var(--spacing) * 20); + } + .w-24 { + width: calc(var(--spacing) * 24); + } + .w-32 { + width: calc(var(--spacing) * 32); + } + .w-65 { + width: calc(var(--spacing) * 65); + } + .w-\[calc\(100\%-32px\)\] { + width: calc(100% - 32px); + } + .w-full { + width: 100%; + } + .max-w-2xl { + max-width: var(--container-2xl); + } + .max-w-3xl { + max-width: var(--container-3xl); + } + .max-w-5xl { + max-width: var(--container-5xl); + } + .max-w-6xl { + max-width: var(--container-6xl); + } + .max-w-75 { + max-width: calc(var(--spacing) * 75); + } + .max-w-\[60\.5rem\] { + max-width: 60.5rem; + } + .max-w-\[85rem\] { + max-width: 85rem; + } + .max-w-full { + max-width: 100%; + } + .max-w-md { + max-width: var(--container-md); + } + .max-w-screen-xl { + max-width: var(--breakpoint-xl); + } + .max-w-xs { + max-width: var(--container-xs); + } + .min-w-5 { + min-width: calc(var(--spacing) * 5); + } + .min-w-24 { + min-width: calc(var(--spacing) * 24); + } + .min-w-full { + min-width: 100%; + } + .flex-none { + flex: none; + } + .shrink-0 { + flex-shrink: 0; + } + .grow { + flex-grow: 1; + } + .basis-full { + flex-basis: 100%; + } + .-translate-x-full { + --tw-translate-x: -100%; + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .-translate-y-1\/2 { + --tw-translate-y: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .transform { + transform: var(--tw-rotate-x,) var(--tw-rotate-y,) var(--tw-rotate-z,) var(--tw-skew-x,) var(--tw-skew-y,); + } + .animate-spin { + animation: var(--animate-spin); + } + .cursor-pointer { + cursor: pointer; + } + .resize { + resize: both; + } + .grid-cols-1 { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + .grid-cols-2 { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + .grid-cols-5 { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + .flex-col { + flex-direction: column; + } + .flex-row { + flex-direction: row; + } + .flex-nowrap { + flex-wrap: nowrap; + } + .flex-wrap { + flex-wrap: wrap; + } + .items-center { + align-items: center; + } + .items-start { + align-items: flex-start; + } + .\!justify-between { + justify-content: space-between !important; + } + .justify-between { + justify-content: space-between; + } + .justify-center { + justify-content: center; + } + .justify-end { + justify-content: flex-end; + } + .gap-1 { + gap: calc(var(--spacing) * 1); + } + .gap-1\.5 { + gap: calc(var(--spacing) * 1.5); + } + .gap-2 { + gap: calc(var(--spacing) * 2); + } + .gap-3 { + gap: calc(var(--spacing) * 3); + } + .gap-4 { + gap: calc(var(--spacing) * 4); + } + .gap-5 { + gap: calc(var(--spacing) * 5); + } + .gap-12 { + gap: calc(var(--spacing) * 12); + } + .space-y-0\.5 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 0.5) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 0.5) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-1 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 1) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 1) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-4 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 4) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-5 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 5) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 5) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-6 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 6) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 6) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-10 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse))); + } + } + .space-y-14 { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 14) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 14) * calc(1 - var(--tw-space-y-reverse))); + } + } + .gap-x-0\.5 { + column-gap: calc(var(--spacing) * 0.5); + } + .gap-x-1 { + column-gap: calc(var(--spacing) * 1); + } + .gap-x-1\.5 { + column-gap: calc(var(--spacing) * 1.5); + } + .gap-x-2 { + column-gap: calc(var(--spacing) * 2); + } + .gap-x-3 { + column-gap: calc(var(--spacing) * 3); + } + .gap-x-4 { + column-gap: calc(var(--spacing) * 4); + } + .gap-x-5 { + column-gap: calc(var(--spacing) * 5); + } + .gap-x-10 { + column-gap: calc(var(--spacing) * 10); + } + .gap-y-1 { + row-gap: calc(var(--spacing) * 1); + } + .gap-y-4 { + row-gap: calc(var(--spacing) * 4); + } + .gap-y-6 { + row-gap: calc(var(--spacing) * 6); + } + .gap-y-10 { + row-gap: calc(var(--spacing) * 10); + } + .gap-y-px { + row-gap: 1px; + } + .divide-x { + :where(& > :not(:last-child)) { + --tw-divide-x-reverse: 0; + border-inline-style: var(--tw-border-style); + border-inline-start-width: calc(1px * var(--tw-divide-x-reverse)); + border-inline-end-width: calc(1px * calc(1 - var(--tw-divide-x-reverse))); + } + } + .divide-y { + :where(& > :not(:last-child)) { + --tw-divide-y-reverse: 0; + border-bottom-style: var(--tw-border-style); + border-top-style: var(--tw-border-style); + border-top-width: calc(1px * var(--tw-divide-y-reverse)); + border-bottom-width: calc(1px * calc(1 - var(--tw-divide-y-reverse))); + } + } + .divide-gray-200 { + :where(& > :not(:last-child)) { + border-color: var(--color-gray-200); + } + } + .divide-gray-300 { + :where(& > :not(:last-child)) { + border-color: var(--color-gray-300); + } + } + .self-center { + align-self: center; + } + .truncate { + overflow: hidden; + text-overflow: ellipsis; + white-space: nowrap; + } + .overflow-hidden { + overflow: hidden; + } + .overflow-x-auto { + overflow-x: auto; + } + .overflow-y-auto { + overflow-y: auto; + } + .\!rounded-xs { + border-radius: var(--radius-xs) !important; + } + .rounded { + border-radius: 0.25rem; + } + .rounded-2xl { + border-radius: var(--radius-2xl); + } + .rounded-full { + border-radius: calc(infinity * 1px); + } + .rounded-lg { + border-radius: var(--radius-lg); + } + .rounded-md { + border-radius: var(--radius-md); + } + .rounded-sm { + border-radius: var(--radius-sm); + } + .rounded-xl { + border-radius: var(--radius-xl); + } + .rounded-t-lg { + border-top-left-radius: var(--radius-lg); + border-top-right-radius: var(--radius-lg); + } + .border { + border-style: var(--tw-border-style); + border-width: 1px; + } + .border-3 { + border-style: var(--tw-border-style); + border-width: 3px; + } + .border-e { + border-inline-end-style: var(--tw-border-style); + border-inline-end-width: 1px; + } + .border-b { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 1px; + } + .border-none { + --tw-border-style: none; + border-style: none; + } + .border-solid { + --tw-border-style: solid; + border-style: solid; + } + .\!border-gray-200 { + border-color: var(--color-gray-200) !important; + } + .border-blue-200 { + border-color: var(--color-blue-200); + } + .border-current { + border-color: currentcolor; + } + .border-gray-200 { + border-color: var(--color-gray-200); + } + .border-gray-300 { + border-color: var(--color-gray-300); + } + .border-neutral-200 { + border-color: var(--color-neutral-200); + } + .border-transparent { + border-color: transparent; + } + .border-t-transparent { + border-top-color: transparent; + } + .\!bg-white { + background-color: var(--color-white) !important; + } + .bg-blue-50 { + background-color: var(--color-blue-50); + } + .bg-blue-100 { + background-color: var(--color-blue-100); + } + .bg-blue-600 { + background-color: var(--color-blue-600); + } + .bg-blue-700 { + background-color: var(--color-blue-700); + } + .bg-blue-800 { + background-color: var(--color-blue-800); + } + .bg-gray-100 { + background-color: var(--color-gray-100); + } + .bg-gray-200 { + background-color: var(--color-gray-200); + } + .bg-gray-900\/50 { + background-color: color-mix(in srgb, oklch(21% 0.034 264.665) 50%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-gray-900) 50%, transparent); + } + } + .bg-neutral-50 { + background-color: var(--color-neutral-50); + } + .bg-neutral-100 { + background-color: var(--color-neutral-100); + } + .bg-transparent { + background-color: transparent; + } + .bg-white { + background-color: var(--color-white); + } + .bg-none { + background-image: none; + } + .bg-\[length\:10px_10px\] { + background-size: 10px 10px; + } + .fill-black { + fill: var(--color-black); + } + .fill-blue-200 { + fill: var(--color-blue-200); + } + .fill-blue-300 { + fill: var(--color-blue-300); + } + .fill-blue-400 { + fill: var(--color-blue-400); + } + .fill-blue-500 { + fill: var(--color-blue-500); + } + .fill-blue-600 { + fill: var(--color-blue-600); + } + .fill-gray-200 { + fill: var(--color-gray-200); + } + .p-0\.5 { + padding: calc(var(--spacing) * 0.5); + } + .p-1 { + padding: calc(var(--spacing) * 1); + } + .p-1\.5 { + padding: calc(var(--spacing) * 1.5); + } + .p-2 { + padding: calc(var(--spacing) * 2); + } + .p-3 { + padding: calc(var(--spacing) * 3); + } + .p-4 { + padding: calc(var(--spacing) * 4); + } + .p-6 { + padding: calc(var(--spacing) * 6); + } + .px-0\.5 { + padding-inline: calc(var(--spacing) * 0.5); + } + .px-1 { + padding-inline: calc(var(--spacing) * 1); + } + .px-2 { + padding-inline: calc(var(--spacing) * 2); + } + .px-2\.5 { + padding-inline: calc(var(--spacing) * 2.5); + } + .px-3 { + padding-inline: calc(var(--spacing) * 3); + } + .px-3\.5 { + padding-inline: calc(var(--spacing) * 3.5); + } + .px-4 { + padding-inline: calc(var(--spacing) * 4); + } + .px-5 { + padding-inline: calc(var(--spacing) * 5); + } + .\!py-0\.5 { + padding-block: calc(var(--spacing) * 0.5) !important; + } + .py-1 { + padding-block: calc(var(--spacing) * 1); + } + .py-1\.5 { + padding-block: calc(var(--spacing) * 1.5); + } + .py-2 { + padding-block: calc(var(--spacing) * 2); + } + .py-2\.5 { + padding-block: calc(var(--spacing) * 2.5); + } + .py-3 { + padding-block: calc(var(--spacing) * 3); + } + .py-4 { + padding-block: calc(var(--spacing) * 4); + } + .py-6 { + padding-block: calc(var(--spacing) * 6); + } + .py-10 { + padding-block: calc(var(--spacing) * 10); + } + .py-16 { + padding-block: calc(var(--spacing) * 16); + } + .py-px { + padding-block: 1px; + } + .ps-3 { + padding-inline-start: calc(var(--spacing) * 3); + } + .ps-5 { + padding-inline-start: calc(var(--spacing) * 5); + } + .ps-6 { + padding-inline-start: calc(var(--spacing) * 6); + } + .pe-2 { + padding-inline-end: calc(var(--spacing) * 2); + } + .pe-3 { + padding-inline-end: calc(var(--spacing) * 3); + } + .pe-3\.5 { + padding-inline-end: calc(var(--spacing) * 3.5); + } + .pe-4 { + padding-inline-end: calc(var(--spacing) * 4); + } + .pe-6 { + padding-inline-end: calc(var(--spacing) * 6); + } + .pt-3 { + padding-top: calc(var(--spacing) * 3); + } + .pt-8 { + padding-top: calc(var(--spacing) * 8); + } + .pt-10 { + padding-top: calc(var(--spacing) * 10); + } + .pt-15 { + padding-top: calc(var(--spacing) * 15); + } + .pt-16 { + padding-top: calc(var(--spacing) * 16); + } + .pt-20 { + padding-top: calc(var(--spacing) * 20); + } + .pb-3 { + padding-bottom: calc(var(--spacing) * 3); + } + .pb-6 { + padding-bottom: calc(var(--spacing) * 6); + } + .pb-10 { + padding-bottom: calc(var(--spacing) * 10); + } + .text-center { + text-align: center; + } + .text-end { + text-align: end; + } + .text-start { + text-align: start; + } + .align-bottom { + vertical-align: bottom; + } + .align-middle { + vertical-align: middle; + } + .font-mono { + font-family: var(--font-mono); + } + .\!text-sm { + font-size: var(--text-sm) !important; + line-height: var(--tw-leading, var(--text-sm--line-height)) !important; + } + .text-2xl { + font-size: var(--text-2xl); + line-height: var(--tw-leading, var(--text-2xl--line-height)); + } + .text-3xl { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + .text-base { + font-size: var(--text-base); + line-height: var(--tw-leading, var(--text-base--line-height)); + } + .text-sm { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + .text-xl { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + .text-xs { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + .text-\[13px\] { + font-size: 13px; + } + .leading-none { + --tw-leading: 1; + line-height: 1; + } + .\!font-medium { + --tw-font-weight: var(--font-weight-medium) !important; + font-weight: var(--font-weight-medium) !important; + } + .font-bold { + --tw-font-weight: var(--font-weight-bold); + font-weight: var(--font-weight-bold); + } + .font-medium { + --tw-font-weight: var(--font-weight-medium); + font-weight: var(--font-weight-medium); + } + .font-normal { + --tw-font-weight: var(--font-weight-normal); + font-weight: var(--font-weight-normal); + } + .font-semibold { + --tw-font-weight: var(--font-weight-semibold); + font-weight: var(--font-weight-semibold); + } + .tracking-tight { + --tw-tracking: var(--tracking-tight); + letter-spacing: var(--tracking-tight); + } + .text-nowrap { + text-wrap: nowrap; + } + .whitespace-nowrap { + white-space: nowrap; + } + .text-blue-600 { + color: var(--color-blue-600); + } + .text-blue-800 { + color: var(--color-blue-800); + } + .text-gray-400 { + color: var(--color-gray-400); + } + .text-gray-500 { + color: var(--color-gray-500); + } + .text-gray-600 { + color: var(--color-gray-600); + } + .text-gray-800 { + color: var(--color-gray-800); + } + .text-gray-900 { + color: var(--color-gray-900); + } + .text-green-600 { + color: var(--color-green-600); + } + .text-neutral-400 { + color: var(--color-neutral-400); + } + .text-neutral-500 { + color: var(--color-neutral-500); + } + .text-neutral-600 { + color: var(--color-neutral-600); + } + .text-neutral-900 { + color: var(--color-neutral-900); + } + .text-red-500 { + color: var(--color-red-500); + } + .text-red-600 { + color: var(--color-red-600); + } + .text-transparent { + color: transparent; + } + .text-white { + color: var(--color-white); + } + .text-white\/80 { + color: color-mix(in srgb, #fff 80%, transparent); + @supports (color: color-mix(in lab, red, red)) { + color: color-mix(in oklab, var(--color-white) 80%, transparent); + } + } + .lowercase { + text-transform: lowercase; + } + .uppercase { + text-transform: uppercase; + } + .not-italic { + font-style: normal; + } + .underline { + text-decoration-line: underline; + } + .decoration-2 { + text-decoration-thickness: 2px; + } + .opacity-0 { + opacity: 0%; + } + .opacity-100 { + opacity: 100%; + } + .shadow { + --tw-shadow: 0 1px 3px 0 var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 1px 2px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-2xs { + --tw-shadow: 0 1px var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-lg { + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-md { + --tw-shadow: 0 4px 6px -1px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 2px 4px -2px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + .shadow-stone-200 { + --tw-shadow-color: oklch(92.3% 0.003 48.717); + @supports (color: color-mix(in lab, red, red)) { + --tw-shadow-color: color-mix(in oklab, var(--color-stone-200) var(--tw-shadow-alpha), transparent); + } + } + .outline { + outline-style: var(--tw-outline-style); + outline-width: 1px; + } + .blur { + --tw-blur: blur(8px); + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .filter { + filter: var(--tw-blur,) var(--tw-brightness,) var(--tw-contrast,) var(--tw-grayscale,) var(--tw-hue-rotate,) var(--tw-invert,) var(--tw-saturate,) var(--tw-sepia,) var(--tw-drop-shadow,); + } + .transition { + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-\[opacity\,margin\] { + transition-property: opacity,margin; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .transition-all { + transition-property: all; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + .duration-100 { + --tw-duration: 100ms; + transition-duration: 100ms; + } + .duration-300 { + --tw-duration: 300ms; + transition-duration: 300ms; + } + .duration-500 { + --tw-duration: 500ms; + transition-duration: 500ms; + } + .duration-\[0\.1ms\] { + --tw-duration: 0.1ms; + transition-duration: 0.1ms; + } + .ease-in-out { + --tw-ease: var(--ease-in-out); + transition-timing-function: var(--ease-in-out); + } + .\[--adaptive\:none\] { + --adaptive: none; + } + .\[--auto-close\:lg\] { + --auto-close: lg; + } + .\[--strategy\:static\] { + --strategy: static; + } + .not-placeholder-shown\:pt-6 { + &:not(*:placeholder-shown) { + padding-top: calc(var(--spacing) * 6); + } + } + .not-placeholder-shown\:pb-2 { + &:not(*:placeholder-shown) { + padding-bottom: calc(var(--spacing) * 2); + } + } + .group-hover\:translate-x-0\.5 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + --tw-translate-x: calc(var(--spacing) * 0.5); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + .group-hover\:translate-x-1 { + &:is(:where(.group):hover *) { + @media (hover: hover) { + --tw-translate-x: calc(var(--spacing) * 1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + } + .group-focus\:translate-x-0\.5 { + &:is(:where(.group):focus *) { + --tw-translate-x: calc(var(--spacing) * 0.5); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .group-focus\:translate-x-1 { + &:is(:where(.group):focus *) { + --tw-translate-x: calc(var(--spacing) * 1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .peer-not-placeholder-shown\:-translate-y-1\.5 { + &:is(:where(.peer):not(*:placeholder-shown) ~ *) { + --tw-translate-y: calc(var(--spacing) * -1.5); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .peer-not-placeholder-shown\:text-xs { + &:is(:where(.peer):not(*:placeholder-shown) ~ *) { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + } + .peer-not-placeholder-shown\:text-neutral-500 { + &:is(:where(.peer):not(*:placeholder-shown) ~ *) { + color: var(--color-neutral-500); + } + } + .peer-focus\:-translate-y-1\.5 { + &:is(:where(.peer):focus ~ *) { + --tw-translate-y: calc(var(--spacing) * -1.5); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .peer-focus\:text-xs { + &:is(:where(.peer):focus ~ *) { + font-size: var(--text-xs); + line-height: var(--tw-leading, var(--text-xs--line-height)); + } + } + .peer-focus\:text-blue-500 { + &:is(:where(.peer):focus ~ *) { + color: var(--color-blue-500); + } + } + .peer-disabled\:pointer-events-none { + &:is(:where(.peer):disabled ~ *) { + pointer-events: none; + } + } + .peer-disabled\:cursor-default { + &:is(:where(.peer):disabled ~ *) { + cursor: default; + } + } + .peer-disabled\:opacity-50 { + &:is(:where(.peer):disabled ~ *) { + opacity: 50%; + } + } + .placeholder\:text-transparent { + &::placeholder { + color: transparent; + } + } + .before\:absolute { + &::before { + content: var(--tw-content); + position: absolute; + } + } + .before\:inset-0 { + &::before { + content: var(--tw-content); + inset: calc(var(--spacing) * 0); + } + } + .before\:start-0 { + &::before { + content: var(--tw-content); + inset-inline-start: calc(var(--spacing) * 0); + } + } + .before\:-top-4 { + &::before { + content: var(--tw-content); + top: calc(var(--spacing) * -4); + } + } + .before\:z-1 { + &::before { + content: var(--tw-content); + z-index: 1; + } + } + .before\:z-10 { + &::before { + content: var(--tw-content); + z-index: 10; + } + } + .before\:me-6 { + &::before { + content: var(--tw-content); + margin-inline-end: calc(var(--spacing) * 6); + } + } + .before\:size-full { + &::before { + content: var(--tw-content); + width: 100%; + height: 100%; + } + } + .before\:h-5 { + &::before { + content: var(--tw-content); + height: calc(var(--spacing) * 5); + } + } + .before\:w-full { + &::before { + content: var(--tw-content); + width: 100%; + } + } + .before\:flex-1 { + &::before { + content: var(--tw-content); + flex: 1; + } + } + .before\:rounded-full { + &::before { + content: var(--tw-content); + border-radius: calc(infinity * 1px); + } + } + .before\:rounded-xl { + &::before { + content: var(--tw-content); + border-radius: var(--radius-xl); + } + } + .before\:border { + &::before { + content: var(--tw-content); + border-style: var(--tw-border-style); + border-width: 1px; + } + } + .before\:border-t { + &::before { + content: var(--tw-content); + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + } + .before\:border-gray-200 { + &::before { + content: var(--tw-content); + border-color: var(--color-gray-200); + } + } + .before\:transition { + &::before { + content: var(--tw-content); + transition-property: color, background-color, border-color, outline-color, text-decoration-color, fill, stroke, --tw-gradient-from, --tw-gradient-via, --tw-gradient-to, opacity, box-shadow, transform, translate, scale, rotate, filter, -webkit-backdrop-filter, backdrop-filter, display, content-visibility, overlay, pointer-events; + transition-timing-function: var(--tw-ease, var(--default-transition-timing-function)); + transition-duration: var(--tw-duration, var(--default-transition-duration)); + } + } + .after\:absolute { + &::after { + content: var(--tw-content); + position: absolute; + } + } + .after\:start-4\.5 { + &::after { + content: var(--tw-content); + inset-inline-start: calc(var(--spacing) * 4.5); + } + } + .after\:end-0 { + &::after { + content: var(--tw-content); + inset-inline-end: calc(var(--spacing) * 0); + } + } + .after\:top-1 { + &::after { + content: var(--tw-content); + top: calc(var(--spacing) * 1); + } + } + .after\:top-1\/2 { + &::after { + content: var(--tw-content); + top: calc(1/2 * 100%); + } + } + .after\:ms-6 { + &::after { + content: var(--tw-content); + margin-inline-start: calc(var(--spacing) * 6); + } + } + .after\:inline-block { + &::after { + content: var(--tw-content); + display: inline-block; + } + } + .after\:size-\[3px\] { + &::after { + content: var(--tw-content); + width: 3px; + height: 3px; + } + } + .after\:h-\[calc\(100\%-4px\)\] { + &::after { + content: var(--tw-content); + height: calc(100% - 4px); + } + } + .after\:w-0\.5 { + &::after { + content: var(--tw-content); + width: calc(var(--spacing) * 0.5); + } + } + .after\:flex-1 { + &::after { + content: var(--tw-content); + flex: 1; + } + } + .after\:-translate-y-1\/2 { + &::after { + content: var(--tw-content); + --tw-translate-y: calc(calc(1/2 * 100%) * -1); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .after\:rounded-full { + &::after { + content: var(--tw-content); + border-radius: calc(infinity * 1px); + } + } + .after\:border-t { + &::after { + content: var(--tw-content); + border-top-style: var(--tw-border-style); + border-top-width: 1px; + } + } + .after\:border-gray-200 { + &::after { + content: var(--tw-content); + border-color: var(--color-gray-200); + } + } + .after\:bg-gray-400 { + &::after { + content: var(--tw-content); + background-color: var(--color-gray-400); + } + } + .after\:bg-stone-100 { + &::after { + content: var(--tw-content); + background-color: var(--color-stone-100); + } + } + .last\:pe-0 { + &:last-child { + padding-inline-end: calc(var(--spacing) * 0); + } + } + .last\:after\:hidden { + &:last-child { + &::after { + content: var(--tw-content); + display: none; + } + } + } + .checked\:bg-none { + &:checked { + background-image: none; + } + } + .checked\:before\:bg-white { + &:checked { + &::before { + content: var(--tw-content); + background-color: var(--color-white); + } + } + } + .checked\:before\:shadow-2xs { + &:checked { + &::before { + content: var(--tw-content); + --tw-shadow: 0 1px var(--tw-shadow-color, rgb(0 0 0 / 0.05)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + .autofill\:pt-6 { + &:autofill { + padding-top: calc(var(--spacing) * 6); + } + } + .autofill\:pb-2 { + &:autofill { + padding-bottom: calc(var(--spacing) * 2); + } + } + .hover\:bg-blue-700 { + &:hover { + @media (hover: hover) { + background-color: var(--color-blue-700); + } + } + } + .hover\:bg-blue-800 { + &:hover { + @media (hover: hover) { + background-color: var(--color-blue-800); + } + } + } + .hover\:bg-gray-50 { + &:hover { + @media (hover: hover) { + background-color: var(--color-gray-50); + } + } + } + .hover\:bg-gray-100 { + &:hover { + @media (hover: hover) { + background-color: var(--color-gray-100); + } + } + } + .hover\:bg-white\/10 { + &:hover { + @media (hover: hover) { + background-color: color-mix(in srgb, #fff 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 10%, transparent); + } + } + } + } + .hover\:text-blue-600 { + &:hover { + @media (hover: hover) { + color: var(--color-blue-600); + } + } + } + .hover\:text-gray-600 { + &:hover { + @media (hover: hover) { + color: var(--color-gray-600); + } + } + } + .hover\:text-gray-800 { + &:hover { + @media (hover: hover) { + color: var(--color-gray-800); + } + } + } + .hover\:text-neutral-800 { + &:hover { + @media (hover: hover) { + color: var(--color-neutral-800); + } + } + } + .hover\:underline { + &:hover { + @media (hover: hover) { + text-decoration-line: underline; + } + } + } + .hover\:shadow-none { + &:hover { + @media (hover: hover) { + --tw-shadow: 0 0 #0000; + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + .hover\:before\:border-2 { + &:hover { + @media (hover: hover) { + &::before { + content: var(--tw-content); + border-style: var(--tw-border-style); + border-width: 2px; + } + } + } + } + .hover\:before\:border-blue-600 { + &:hover { + @media (hover: hover) { + &::before { + content: var(--tw-content); + border-color: var(--color-blue-600); + } + } + } + } + .hover\:before\:shadow-lg { + &:hover { + @media (hover: hover) { + &::before { + content: var(--tw-content); + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + } + .focus\:border-blue-500 { + &:focus { + border-color: var(--color-blue-500); + } + } + .focus\:bg-blue-700 { + &:focus { + background-color: var(--color-blue-700); + } + } + .focus\:bg-gray-50 { + &:focus { + background-color: var(--color-gray-50); + } + } + .focus\:bg-gray-100 { + &:focus { + background-color: var(--color-gray-100); + } + } + .focus\:bg-white\/10 { + &:focus { + background-color: color-mix(in srgb, #fff 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 10%, transparent); + } + } + } + .focus\:pt-6 { + &:focus { + padding-top: calc(var(--spacing) * 6); + } + } + .focus\:pb-2 { + &:focus { + padding-bottom: calc(var(--spacing) * 2); + } + } + .focus\:text-blue-600 { + &:focus { + color: var(--color-blue-600); + } + } + .focus\:text-gray-600 { + &:focus { + color: var(--color-gray-600); + } + } + .focus\:text-gray-800 { + &:focus { + color: var(--color-gray-800); + } + } + .focus\:text-neutral-800 { + &:focus { + color: var(--color-neutral-800); + } + } + .focus\:underline { + &:focus { + text-decoration-line: underline; + } + } + .focus\:opacity-80 { + &:focus { + opacity: 80%; + } + } + .focus\:shadow-none { + &:focus { + --tw-shadow: 0 0 #0000; + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus\:ring-0 { + &:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(0px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus\:ring-2 { + &:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus\:ring-4 { + &:focus { + --tw-ring-shadow: var(--tw-ring-inset,) 0 0 0 calc(4px + var(--tw-ring-offset-width)) var(--tw-ring-color, currentcolor); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .focus\:ring-blue-300 { + &:focus { + --tw-ring-color: var(--color-blue-300); + } + } + .focus\:ring-blue-500 { + &:focus { + --tw-ring-color: var(--color-blue-500); + } + } + .focus\:ring-gray-100 { + &:focus { + --tw-ring-color: var(--color-gray-100); + } + } + .focus\:ring-transparent { + &:focus { + --tw-ring-color: transparent; + } + } + .focus\:ring-offset-0 { + &:focus { + --tw-ring-offset-width: 0px; + --tw-ring-offset-shadow: var(--tw-ring-inset,) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + } + } + .focus\:outline-hidden { + &:focus { + --tw-outline-style: none; + outline-style: none; + @media (forced-colors: active) { + outline: 2px solid transparent; + outline-offset: 2px; + } + } + } + .focus\:before\:border-2 { + &:focus { + &::before { + content: var(--tw-content); + border-style: var(--tw-border-style); + border-width: 2px; + } + } + } + .focus\:before\:border-blue-600 { + &:focus { + &::before { + content: var(--tw-content); + border-color: var(--color-blue-600); + } + } + } + .focus\:before\:shadow-lg { + &:focus { + &::before { + content: var(--tw-content); + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + .disabled\:pointer-events-none { + &:disabled { + pointer-events: none; + } + } + .disabled\:opacity-50 { + &:disabled { + opacity: 50%; + } + } + .sm\:ms-2 { + @media (width >= 40rem) { + margin-inline-start: calc(var(--spacing) * 2); + } + } + .sm\:mb-8 { + @media (width >= 40rem) { + margin-bottom: calc(var(--spacing) * 8); + } + } + .sm\:flex { + @media (width >= 40rem) { + display: flex; + } + } + .sm\:min-h-\[calc\(100vh-40px\)\] { + @media (width >= 40rem) { + min-height: calc(100vh - 40px); + } + } + .sm\:grid-cols-1 { + @media (width >= 40rem) { + grid-template-columns: repeat(1, minmax(0, 1fr)); + } + } + .sm\:grid-cols-2 { + @media (width >= 40rem) { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + .sm\:flex-row { + @media (width >= 40rem) { + flex-direction: row; + } + } + .sm\:justify-center { + @media (width >= 40rem) { + justify-content: center; + } + } + .sm\:gap-8 { + @media (width >= 40rem) { + gap: calc(var(--spacing) * 8); + } + } + .sm\:space-y-0 { + @media (width >= 40rem) { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 0) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 0) * calc(1 - var(--tw-space-y-reverse))); + } + } + } + .sm\:gap-x-5 { + @media (width >= 40rem) { + column-gap: calc(var(--spacing) * 5); + } + } + .sm\:gap-x-8 { + @media (width >= 40rem) { + column-gap: calc(var(--spacing) * 8); + } + } + .sm\:space-x-4 { + @media (width >= 40rem) { + :where(& > :not(:last-child)) { + --tw-space-x-reverse: 0; + margin-inline-start: calc(calc(var(--spacing) * 4) * var(--tw-space-x-reverse)); + margin-inline-end: calc(calc(var(--spacing) * 4) * calc(1 - var(--tw-space-x-reverse))); + } + } + } + .sm\:gap-y-0 { + @media (width >= 40rem) { + row-gap: calc(var(--spacing) * 0); + } + } + .sm\:p-4 { + @media (width >= 40rem) { + padding: calc(var(--spacing) * 4); + } + } + .sm\:p-5 { + @media (width >= 40rem) { + padding: calc(var(--spacing) * 5); + } + } + .sm\:p-6 { + @media (width >= 40rem) { + padding: calc(var(--spacing) * 6); + } + } + .sm\:p-7 { + @media (width >= 40rem) { + padding: calc(var(--spacing) * 7); + } + } + .sm\:px-5 { + @media (width >= 40rem) { + padding-inline: calc(var(--spacing) * 5); + } + } + .sm\:px-6 { + @media (width >= 40rem) { + padding-inline: calc(var(--spacing) * 6); + } + } + .sm\:px-16 { + @media (width >= 40rem) { + padding-inline: calc(var(--spacing) * 16); + } + } + .sm\:py-0 { + @media (width >= 40rem) { + padding-block: calc(var(--spacing) * 0); + } + } + .sm\:py-3 { + @media (width >= 40rem) { + padding-block: calc(var(--spacing) * 3); + } + } + .sm\:text-3xl { + @media (width >= 40rem) { + font-size: var(--text-3xl); + line-height: var(--tw-leading, var(--text-3xl--line-height)); + } + } + .sm\:text-4xl { + @media (width >= 40rem) { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + .sm\:text-lg { + @media (width >= 40rem) { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + } + .sm\:text-sm { + @media (width >= 40rem) { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + } + .md\:order-2 { + @media (width >= 48rem) { + order: 2; + } + } + .md\:order-3 { + @media (width >= 48rem) { + order: 3; + } + } + .md\:col-span-1 { + @media (width >= 48rem) { + grid-column: span 1 / span 1; + } + } + .md\:-mx-4 { + @media (width >= 48rem) { + margin-inline: calc(var(--spacing) * -4); + } + } + .md\:mb-0 { + @media (width >= 48rem) { + margin-bottom: calc(var(--spacing) * 0); + } + } + .md\:mb-3 { + @media (width >= 48rem) { + margin-bottom: calc(var(--spacing) * 3); + } + } + .md\:mb-14 { + @media (width >= 48rem) { + margin-bottom: calc(var(--spacing) * 14); + } + } + .md\:block { + @media (width >= 48rem) { + display: block; + } + } + .md\:hidden { + @media (width >= 48rem) { + display: none; + } + } + .md\:inline-block { + @media (width >= 48rem) { + display: inline-block; + } + } + .md\:size-9 { + @media (width >= 48rem) { + width: calc(var(--spacing) * 9); + height: calc(var(--spacing) * 9); + } + } + .md\:h-96 { + @media (width >= 48rem) { + height: calc(var(--spacing) * 96); + } + } + .md\:w-52 { + @media (width >= 48rem) { + width: calc(var(--spacing) * 52); + } + } + .md\:w-auto { + @media (width >= 48rem) { + width: auto; + } + } + .md\:grid-cols-2 { + @media (width >= 48rem) { + grid-template-columns: repeat(2, minmax(0, 1fr)); + } + } + .md\:grid-cols-3 { + @media (width >= 48rem) { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + .md\:grid-cols-5 { + @media (width >= 48rem) { + grid-template-columns: repeat(5, minmax(0, 1fr)); + } + } + .md\:flex-col { + @media (width >= 48rem) { + flex-direction: column; + } + } + .md\:flex-row { + @media (width >= 48rem) { + flex-direction: row; + } + } + .md\:flex-nowrap { + @media (width >= 48rem) { + flex-wrap: nowrap; + } + } + .md\:justify-start { + @media (width >= 48rem) { + justify-content: flex-start; + } + } + .md\:space-y-2 { + @media (width >= 48rem) { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 2) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 2) * calc(1 - var(--tw-space-y-reverse))); + } + } + } + .md\:gap-x-1 { + @media (width >= 48rem) { + column-gap: calc(var(--spacing) * 1); + } + } + .md\:gap-x-5 { + @media (width >= 48rem) { + column-gap: calc(var(--spacing) * 5); + } + } + .md\:gap-y-0 { + @media (width >= 48rem) { + row-gap: calc(var(--spacing) * 0); + } + } + .md\:rounded-lg { + @media (width >= 48rem) { + border-radius: var(--radius-lg); + } + } + .md\:border-b-0 { + @media (width >= 48rem) { + border-bottom-style: var(--tw-border-style); + border-bottom-width: 0px; + } + } + .md\:p-0 { + @media (width >= 48rem) { + padding: calc(var(--spacing) * 0); + } + } + .md\:p-6 { + @media (width >= 48rem) { + padding: calc(var(--spacing) * 6); + } + } + .md\:px-4 { + @media (width >= 48rem) { + padding-inline: calc(var(--spacing) * 4); + } + } + .md\:py-2\.5 { + @media (width >= 48rem) { + padding-block: calc(var(--spacing) * 2.5); + } + } + .md\:py-12 { + @media (width >= 48rem) { + padding-block: calc(var(--spacing) * 12); + } + } + .md\:ps-0 { + @media (width >= 48rem) { + padding-inline-start: calc(var(--spacing) * 0); + } + } + .md\:pt-5 { + @media (width >= 48rem) { + padding-top: calc(var(--spacing) * 5); + } + } + .md\:pb-0 { + @media (width >= 48rem) { + padding-bottom: calc(var(--spacing) * 0); + } + } + .md\:text-4xl { + @media (width >= 48rem) { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + .md\:text-5xl { + @media (width >= 48rem) { + font-size: var(--text-5xl); + line-height: var(--tw-leading, var(--text-5xl--line-height)); + } + } + .md\:text-lg { + @media (width >= 48rem) { + font-size: var(--text-lg); + line-height: var(--tw-leading, var(--text-lg--line-height)); + } + } + .md\:text-sm { + @media (width >= 48rem) { + font-size: var(--text-sm); + line-height: var(--tw-leading, var(--text-sm--line-height)); + } + } + .md\:leading-tight { + @media (width >= 48rem) { + --tw-leading: var(--leading-tight); + line-height: var(--leading-tight); + } + } + .md\:shadow-xl { + @media (width >= 48rem) { + --tw-shadow: 0 20px 25px -5px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 8px 10px -6px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + .md\:duration-\[150ms\] { + @media (width >= 48rem) { + --tw-duration: 150ms; + transition-duration: 150ms; + } + } + .md\:\[--adaptive\:adaptive\] { + @media (width >= 48rem) { + --adaptive: adaptive; + } + } + .md\:\[--strategy\:fixed\] { + @media (width >= 48rem) { + --strategy: fixed; + } + } + .md\:\[--trigger\:hover\] { + @media (width >= 48rem) { + --trigger: hover; + } + } + .md\:after\:hidden { + @media (width >= 48rem) { + &::after { + content: var(--tw-content); + display: none; + } + } + } + .lg\:end-auto { + @media (width >= 64rem) { + inset-inline-end: auto; + } + } + .lg\:bottom-0 { + @media (width >= 64rem) { + bottom: calc(var(--spacing) * 0); + } + } + .lg\:mx-auto { + @media (width >= 64rem) { + margin-inline: auto; + } + } + .lg\:ms-65 { + @media (width >= 64rem) { + margin-inline-start: calc(var(--spacing) * 65); + } + } + .lg\:mb-14 { + @media (width >= 64rem) { + margin-bottom: calc(var(--spacing) * 14); + } + } + .lg\:mb-16 { + @media (width >= 64rem) { + margin-bottom: calc(var(--spacing) * 16); + } + } + .lg\:block { + @media (width >= 64rem) { + display: block; + } + } + .lg\:hidden { + @media (width >= 64rem) { + display: none; + } + } + .lg\:w-3\/4 { + @media (width >= 64rem) { + width: calc(3/4 * 100%); + } + } + .lg\:max-w-full { + @media (width >= 64rem) { + max-width: 100%; + } + } + .lg\:translate-x-0 { + @media (width >= 64rem) { + --tw-translate-x: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .lg\:grid-cols-3 { + @media (width >= 64rem) { + grid-template-columns: repeat(3, minmax(0, 1fr)); + } + } + .lg\:space-y-10 { + @media (width >= 64rem) { + :where(& > :not(:last-child)) { + --tw-space-y-reverse: 0; + margin-block-start: calc(calc(var(--spacing) * 10) * var(--tw-space-y-reverse)); + margin-block-end: calc(calc(var(--spacing) * 10) * calc(1 - var(--tw-space-y-reverse))); + } + } + } + .lg\:gap-x-12 { + @media (width >= 64rem) { + column-gap: calc(var(--spacing) * 12); + } + } + .lg\:gap-x-16 { + @media (width >= 64rem) { + column-gap: calc(var(--spacing) * 16); + } + } + .lg\:gap-y-5 { + @media (width >= 64rem) { + row-gap: calc(var(--spacing) * 5); + } + } + .lg\:px-4 { + @media (width >= 64rem) { + padding-inline: calc(var(--spacing) * 4); + } + } + .lg\:px-5 { + @media (width >= 64rem) { + padding-inline: calc(var(--spacing) * 5); + } + } + .lg\:px-8 { + @media (width >= 64rem) { + padding-inline: calc(var(--spacing) * 8); + } + } + .lg\:px-12 { + @media (width >= 64rem) { + padding-inline: calc(var(--spacing) * 12); + } + } + .lg\:py-14 { + @media (width >= 64rem) { + padding-block: calc(var(--spacing) * 14); + } + } + .lg\:py-20 { + @media (width >= 64rem) { + padding-block: calc(var(--spacing) * 20); + } + } + .lg\:ps-8 { + @media (width >= 64rem) { + padding-inline-start: calc(var(--spacing) * 8); + } + } + .lg\:ps-65 { + @media (width >= 64rem) { + padding-inline-start: calc(var(--spacing) * 65); + } + } + .lg\:pt-0 { + @media (width >= 64rem) { + padding-top: calc(var(--spacing) * 0); + } + } + .lg\:pt-16 { + @media (width >= 64rem) { + padding-top: calc(var(--spacing) * 16); + } + } + .lg\:pt-20 { + @media (width >= 64rem) { + padding-top: calc(var(--spacing) * 20); + } + } + .lg\:pb-16 { + @media (width >= 64rem) { + padding-bottom: calc(var(--spacing) * 16); + } + } + .lg\:pb-20 { + @media (width >= 64rem) { + padding-bottom: calc(var(--spacing) * 20); + } + } + .lg\:text-4xl { + @media (width >= 64rem) { + font-size: var(--text-4xl); + line-height: var(--tw-leading, var(--text-4xl--line-height)); + } + } + .lg\:text-5xl { + @media (width >= 64rem) { + font-size: var(--text-5xl); + line-height: var(--tw-leading, var(--text-5xl--line-height)); + } + } + .lg\:text-xl { + @media (width >= 64rem) { + font-size: var(--text-xl); + line-height: var(--tw-leading, var(--text-xl--line-height)); + } + } + .xl\:-mx-20 { + @media (width >= 80rem) { + margin-inline: calc(var(--spacing) * -20); + } + } + .xl\:size-16 { + @media (width >= 80rem) { + width: calc(var(--spacing) * 16); + height: calc(var(--spacing) * 16); + } + } + .xl\:h-7 { + @media (width >= 80rem) { + height: calc(var(--spacing) * 7); + } + } + .xl\:w-7 { + @media (width >= 80rem) { + width: calc(var(--spacing) * 7); + } + } + .xl\:p-20 { + @media (width >= 80rem) { + padding: calc(var(--spacing) * 20); + } + } + .xl\:px-0 { + @media (width >= 80rem) { + padding-inline: calc(var(--spacing) * 0); + } + } + .xl\:px-10 { + @media (width >= 80rem) { + padding-inline: calc(var(--spacing) * 10); + } + } + .xl\:px-48 { + @media (width >= 80rem) { + padding-inline: calc(var(--spacing) * 48); + } + } + .\32 xl\:grid-cols-4 { + @media (width >= 96rem) { + grid-template-columns: repeat(4, minmax(0, 1fr)); + } + } + .\32 xl\:gap-6 { + @media (width >= 96rem) { + gap: calc(var(--spacing) * 6); + } + } + .dark\:divide-neutral-700 { + @media (prefers-color-scheme: dark) { + :where(& > :not(:last-child)) { + border-color: var(--color-neutral-700); + } + } + } + .dark\:\!border-neutral-700 { + @media (prefers-color-scheme: dark) { + border-color: var(--color-neutral-700) !important; + } + } + .dark\:border-neutral-600 { + @media (prefers-color-scheme: dark) { + border-color: var(--color-neutral-600); + } + } + .dark\:border-neutral-700 { + @media (prefers-color-scheme: dark) { + border-color: var(--color-neutral-700); + } + } + .dark\:\!bg-neutral-800 { + @media (prefers-color-scheme: dark) { + background-color: var(--color-neutral-800) !important; + } + } + .dark\:bg-blue-500 { + @media (prefers-color-scheme: dark) { + background-color: var(--color-blue-500); + } + } + .dark\:bg-blue-500\/10 { + @media (prefers-color-scheme: dark) { + background-color: color-mix(in srgb, oklch(62.3% 0.214 259.815) 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-blue-500) 10%, transparent); + } + } + } + .dark\:bg-neutral-700 { + @media (prefers-color-scheme: dark) { + background-color: var(--color-neutral-700); + } + } + .dark\:bg-neutral-800 { + @media (prefers-color-scheme: dark) { + background-color: var(--color-neutral-800); + } + } + .dark\:bg-neutral-900 { + @media (prefers-color-scheme: dark) { + background-color: var(--color-neutral-900); + } + } + .dark\:bg-neutral-900\/80 { + @media (prefers-color-scheme: dark) { + background-color: color-mix(in srgb, oklch(20.5% 0 0) 80%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-neutral-900) 80%, transparent); + } + } + } + .dark\:fill-neutral-200 { + @media (prefers-color-scheme: dark) { + fill: var(--color-neutral-200); + } + } + .dark\:text-blue-500 { + @media (prefers-color-scheme: dark) { + color: var(--color-blue-500); + } + } + .dark\:text-neutral-200 { + @media (prefers-color-scheme: dark) { + color: var(--color-neutral-200); + } + } + .dark\:text-neutral-300 { + @media (prefers-color-scheme: dark) { + color: var(--color-neutral-300); + } + } + .dark\:text-neutral-400 { + @media (prefers-color-scheme: dark) { + color: var(--color-neutral-400); + } + } + .dark\:text-neutral-500 { + @media (prefers-color-scheme: dark) { + color: var(--color-neutral-500); + } + } + .dark\:text-white { + @media (prefers-color-scheme: dark) { + color: var(--color-white); + } + } + .dark\:placeholder-neutral-500 { + @media (prefers-color-scheme: dark) { + &::placeholder { + color: var(--color-neutral-500); + } + } + } + .dark\:before\:border-neutral-600 { + @media (prefers-color-scheme: dark) { + &::before { + content: var(--tw-content); + border-color: var(--color-neutral-600); + } + } + } + .dark\:after\:border-neutral-600 { + @media (prefers-color-scheme: dark) { + &::after { + content: var(--tw-content); + border-color: var(--color-neutral-600); + } + } + } + .dark\:checked\:border-blue-500 { + @media (prefers-color-scheme: dark) { + &:checked { + border-color: var(--color-blue-500); + } + } + } + .dark\:checked\:bg-blue-500 { + @media (prefers-color-scheme: dark) { + &:checked { + background-color: var(--color-blue-500); + } + } + } + .dark\:hover\:bg-neutral-700 { + @media (prefers-color-scheme: dark) { + &:hover { + @media (hover: hover) { + background-color: var(--color-neutral-700); + } + } + } + } + .dark\:hover\:bg-neutral-800 { + @media (prefers-color-scheme: dark) { + &:hover { + @media (hover: hover) { + background-color: var(--color-neutral-800); + } + } + } + } + .dark\:hover\:text-neutral-200 { + @media (prefers-color-scheme: dark) { + &:hover { + @media (hover: hover) { + color: var(--color-neutral-200); + } + } + } + } + .dark\:hover\:text-neutral-300 { + @media (prefers-color-scheme: dark) { + &:hover { + @media (hover: hover) { + color: var(--color-neutral-300); + } + } + } + } + .dark\:focus\:bg-neutral-700 { + @media (prefers-color-scheme: dark) { + &:focus { + background-color: var(--color-neutral-700); + } + } + } + .dark\:focus\:bg-neutral-800 { + @media (prefers-color-scheme: dark) { + &:focus { + background-color: var(--color-neutral-800); + } + } + } + .dark\:focus\:text-neutral-300 { + @media (prefers-color-scheme: dark) { + &:focus { + color: var(--color-neutral-300); + } + } + } + .dark\:focus\:ring-neutral-600 { + @media (prefers-color-scheme: dark) { + &:focus { + --tw-ring-color: var(--color-neutral-600); + } + } + } + .dark\:focus\:ring-offset-gray-800 { + @media (prefers-color-scheme: dark) { + &:focus { + --tw-ring-offset-color: var(--color-gray-800); + } + } + } + .hs-dropdown-open\:opacity-100 { + &.hs-dropdown-menu.open { + opacity: 100%; + } + .hs-dropdown.open>& { + opacity: 100%; + } + .hs-dropdown.open>.hs-dropdown-toggle & { + opacity: 100%; + } + .hs-dropdown.open>.hs-dropdown-menu>& { + opacity: 100%; + } + } + .hs-removing\:-translate-y-full { + &.hs-removing { + --tw-translate-y: -100%; + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .hs-tab-active\:bg-gray-50 { + &[data-hs-tab].active { + background-color: var(--color-gray-50); + } + [data-hs-tab].active & { + background-color: var(--color-gray-50); + } + } + .hs-tab-active\:hover\:shadow-lg { + &[data-hs-tab].active { + &:hover { + @media (hover: hover) { + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + [data-hs-tab].active & { + &:hover { + @media (hover: hover) { + --tw-shadow: 0 10px 15px -3px var(--tw-shadow-color, rgb(0 0 0 / 0.1)), 0 4px 6px -4px var(--tw-shadow-color, rgb(0 0 0 / 0.1)); + box-shadow: var(--tw-inset-shadow), var(--tw-inset-ring-shadow), var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + } + } + } + .hs-overlay-open\:translate-x-0 { + &.open { + --tw-translate-x: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + .open & { + --tw-translate-x: calc(var(--spacing) * 0); + translate: var(--tw-translate-x) var(--tw-translate-y); + } + } + .hs-selected\:block { + &.selected { + display: block; + } + .selected & { + display: block; + } + } + .hs-selected\:bg-gray-100 { + &.selected { + background-color: var(--color-gray-100); + } + .selected & { + background-color: var(--color-gray-100); + } + } + .dark\:hs-selected\:bg-gray-700 { + @media (prefers-color-scheme: dark) { + &.selected { + background-color: var(--color-gray-700); + } + .selected & { + background-color: var(--color-gray-700); + } + } + } + .dark\:hs-selected\:bg-neutral-800 { + @media (prefers-color-scheme: dark) { + &.selected { + background-color: var(--color-neutral-800); + } + .selected & { + background-color: var(--color-neutral-800); + } + } + } + .hs-select-disabled\:pointer-events-none { + &.disabled { + pointer-events: none; + } + .disabled & { + pointer-events: none; + } + } + .hs-select-disabled\:opacity-50 { + &.disabled { + opacity: 50%; + } + .disabled & { + opacity: 50%; + } + } + .hs-combo-box-selected\:block { + &.selected { + display: block; + } + .selected & { + display: block; + } + } + .hs-file-upload-complete\:bg-green-600 { + &.complete { + background-color: var(--color-green-600); + } + .complete & { + background-color: var(--color-green-600); + } + } + .\[\&\:\:-webkit-scrollbar\]\:h-2 { + &::-webkit-scrollbar { + height: calc(var(--spacing) * 2); + } + } + .\[\&\:\:-webkit-scrollbar\]\:w-2 { + &::-webkit-scrollbar { + width: calc(var(--spacing) * 2); + } + } + .\[\&\:\:-webkit-scrollbar-thumb\]\:rounded-full { + &::-webkit-scrollbar-thumb { + border-radius: calc(infinity * 1px); + } + } + .\[\&\:\:-webkit-scrollbar-thumb\]\:bg-gray-300 { + &::-webkit-scrollbar-thumb { + background-color: var(--color-gray-300); + } + } + .\[\&\:\:-webkit-scrollbar-thumb\]\:bg-white\/30 { + &::-webkit-scrollbar-thumb { + background-color: color-mix(in srgb, #fff 30%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 30%, transparent); + } + } + } + .dark\:\[\&\:\:-webkit-scrollbar-thumb\]\:bg-neutral-500 { + @media (prefers-color-scheme: dark) { + &::-webkit-scrollbar-thumb { + background-color: var(--color-neutral-500); + } + } + } + .\[\&\:\:-webkit-scrollbar-track\]\:bg-gray-100 { + &::-webkit-scrollbar-track { + background-color: var(--color-gray-100); + } + } + .\[\&\:\:-webkit-scrollbar-track\]\:bg-white\/10 { + &::-webkit-scrollbar-track { + background-color: color-mix(in srgb, #fff 10%, transparent); + @supports (color: color-mix(in lab, red, red)) { + background-color: color-mix(in oklab, var(--color-white) 10%, transparent); + } + } + } + .dark\:\[\&\:\:-webkit-scrollbar-track\]\:bg-neutral-700 { + @media (prefers-color-scheme: dark) { + &::-webkit-scrollbar-track { + background-color: var(--color-neutral-700); + } + } + } +} +@layer base { + [type='text'],input:where(:not([type])),[type='email'],[type='url'],[type='password'],[type='number'],[type='date'],[type='datetime-local'],[type='month'],[type='search'],[type='tel'],[type='time'],[type='week'],[multiple],textarea,select { + appearance: none; + background-color: #fff; + border-color: oklch(55.1% 0.027 264.364); + border-width: 1px; + border-radius: 0px; + padding-top: 0.5rem; + padding-right: 0.75rem; + padding-bottom: 0.5rem; + padding-left: 0.75rem; + font-size: 1rem; + line-height: 1.5rem; + --tw-shadow: 0 0 #0000; + &:focus { + outline: 2px solid transparent; + outline-offset: 2px; + --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-color: oklch(54.6% 0.245 262.881); + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(1px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + border-color: oklch(54.6% 0.245 262.881); + } + } + input::placeholder,textarea::placeholder { + color: oklch(55.1% 0.027 264.364); + opacity: 1; + } + ::-webkit-datetime-edit-fields-wrapper { + padding: 0; + } + ::-webkit-date-and-time-value { + min-height: 1.5em; + } + ::-webkit-date-and-time-value { + text-align: inherit; + } + ::-webkit-datetime-edit { + display: inline-flex; + } + ::-webkit-datetime-edit,::-webkit-datetime-edit-year-field,::-webkit-datetime-edit-month-field,::-webkit-datetime-edit-day-field,::-webkit-datetime-edit-hour-field,::-webkit-datetime-edit-minute-field,::-webkit-datetime-edit-second-field,::-webkit-datetime-edit-millisecond-field,::-webkit-datetime-edit-meridiem-field { + padding-top: 0; + padding-bottom: 0; + } + select { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 20 20'%3e%3cpath stroke='oklch(55.1%25 0.027 264.364)' stroke-linecap='round' stroke-linejoin='round' stroke-width='1.5' d='M6 8l4 4 4-4'/%3e%3c/svg%3e"); + background-position: right 0.5rem center; + background-repeat: no-repeat; + background-size: 1.5em 1.5em; + padding-right: 2.5rem; + print-color-adjust: exact; + } + [multiple],[size]:where(select:not([size="1"])) { + background-image: initial; + background-position: initial; + background-repeat: unset; + background-size: initial; + padding-right: 0.75rem; + print-color-adjust: unset; + } + [type='checkbox'],[type='radio'] { + appearance: none; + padding: 0; + print-color-adjust: exact; + display: inline-block; + vertical-align: middle; + background-origin: border-box; + user-select: none; + flex-shrink: 0; + height: 1rem; + width: 1rem; + color: oklch(54.6% 0.245 262.881); + background-color: #fff; + border-color: oklch(55.1% 0.027 264.364); + border-width: 1px; + --tw-shadow: 0 0 #0000; + } + [type='checkbox'] { + border-radius: 0px; + } + [type='radio'] { + border-radius: 100%; + } + [type='checkbox']:focus,[type='radio']:focus { + outline: 2px solid transparent; + outline-offset: 2px; + --tw-ring-inset: var(--tw-empty,/*!*/ /*!*/); + --tw-ring-offset-width: 2px; + --tw-ring-offset-color: #fff; + --tw-ring-color: oklch(54.6% 0.245 262.881); + --tw-ring-offset-shadow: var(--tw-ring-inset) 0 0 0 var(--tw-ring-offset-width) var(--tw-ring-offset-color); + --tw-ring-shadow: var(--tw-ring-inset) 0 0 0 calc(2px + var(--tw-ring-offset-width)) var(--tw-ring-color); + box-shadow: var(--tw-ring-offset-shadow), var(--tw-ring-shadow), var(--tw-shadow); + } + [type='checkbox']:checked,[type='radio']:checked { + border-color: transparent; + background-color: currentColor; + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; + } + [type='checkbox']:checked { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3cpath d='M12.207 4.793a1 1 0 010 1.414l-5 5a1 1 0 01-1.414 0l-2-2a1 1 0 011.414-1.414L6.5 9.086l4.293-4.293a1 1 0 011.414 0z'/%3e%3c/svg%3e"); + @media (forced-colors: active) { + appearance: auto; + } + } + [type='radio']:checked { + background-image: url("data:image/svg+xml,%3csvg viewBox='0 0 16 16' fill='white' xmlns='http://www.w3.org/2000/svg'%3e%3ccircle cx='8' cy='8' r='3'/%3e%3c/svg%3e"); + @media (forced-colors: active) { + appearance: auto; + } + } + [type='checkbox']:checked:hover,[type='checkbox']:checked:focus,[type='radio']:checked:hover,[type='radio']:checked:focus { + border-color: transparent; + background-color: currentColor; + } + [type='checkbox']:indeterminate { + background-image: url("data:image/svg+xml,%3csvg xmlns='http://www.w3.org/2000/svg' fill='none' viewBox='0 0 16 16'%3e%3cpath stroke='white' stroke-linecap='round' stroke-linejoin='round' stroke-width='2' d='M4 8h8'/%3e%3c/svg%3e"); + border-color: transparent; + background-color: currentColor; + background-size: 100% 100%; + background-position: center; + background-repeat: no-repeat; + @media (forced-colors: active) { + appearance: auto; + } + } + [type='checkbox']:indeterminate:hover,[type='checkbox']:indeterminate:focus { + border-color: transparent; + background-color: currentColor; + } + [type='file'] { + background: unset; + border-color: inherit; + border-width: 0; + border-radius: 0; + padding: 0; + font-size: unset; + line-height: inherit; + } + [type='file']:focus { + outline: 1px solid ButtonText; + outline: 1px auto -webkit-focus-ring-color; + } +} +@property --tw-translate-x { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-y { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-translate-z { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-rotate-x { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-y { + syntax: "*"; + inherits: false; +} +@property --tw-rotate-z { + syntax: "*"; + inherits: false; +} +@property --tw-skew-x { + syntax: "*"; + inherits: false; +} +@property --tw-skew-y { + syntax: "*"; + inherits: false; +} +@property --tw-space-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-divide-x-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-border-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-divide-y-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@property --tw-leading { + syntax: "*"; + inherits: false; +} +@property --tw-font-weight { + syntax: "*"; + inherits: false; +} +@property --tw-tracking { + syntax: "*"; + inherits: false; +} +@property --tw-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-inset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-inset-ring-color { + syntax: "*"; + inherits: false; +} +@property --tw-inset-ring-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-ring-inset { + syntax: "*"; + inherits: false; +} +@property --tw-ring-offset-width { + syntax: ""; + inherits: false; + initial-value: 0px; +} +@property --tw-ring-offset-color { + syntax: "*"; + inherits: false; + initial-value: #fff; +} +@property --tw-ring-offset-shadow { + syntax: "*"; + inherits: false; + initial-value: 0 0 #0000; +} +@property --tw-outline-style { + syntax: "*"; + inherits: false; + initial-value: solid; +} +@property --tw-blur { + syntax: "*"; + inherits: false; +} +@property --tw-brightness { + syntax: "*"; + inherits: false; +} +@property --tw-contrast { + syntax: "*"; + inherits: false; +} +@property --tw-grayscale { + syntax: "*"; + inherits: false; +} +@property --tw-hue-rotate { + syntax: "*"; + inherits: false; +} +@property --tw-invert { + syntax: "*"; + inherits: false; +} +@property --tw-opacity { + syntax: "*"; + inherits: false; +} +@property --tw-saturate { + syntax: "*"; + inherits: false; +} +@property --tw-sepia { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-color { + syntax: "*"; + inherits: false; +} +@property --tw-drop-shadow-alpha { + syntax: ""; + inherits: false; + initial-value: 100%; +} +@property --tw-drop-shadow-size { + syntax: "*"; + inherits: false; +} +@property --tw-duration { + syntax: "*"; + inherits: false; +} +@property --tw-ease { + syntax: "*"; + inherits: false; +} +@property --tw-content { + syntax: "*"; + initial-value: ""; + inherits: false; +} +@property --tw-space-x-reverse { + syntax: "*"; + inherits: false; + initial-value: 0; +} +@keyframes spin { + to { + transform: rotate(360deg); + } +} +@layer properties { + @supports ((-webkit-hyphens: none) and (not (margin-trim: inline))) or ((-moz-orient: inline) and (not (color:rgb(from red r g b)))) { + *, ::before, ::after, ::backdrop { + --tw-translate-x: 0; + --tw-translate-y: 0; + --tw-translate-z: 0; + --tw-rotate-x: initial; + --tw-rotate-y: initial; + --tw-rotate-z: initial; + --tw-skew-x: initial; + --tw-skew-y: initial; + --tw-space-y-reverse: 0; + --tw-divide-x-reverse: 0; + --tw-border-style: solid; + --tw-divide-y-reverse: 0; + --tw-leading: initial; + --tw-font-weight: initial; + --tw-tracking: initial; + --tw-shadow: 0 0 #0000; + --tw-shadow-color: initial; + --tw-shadow-alpha: 100%; + --tw-inset-shadow: 0 0 #0000; + --tw-inset-shadow-color: initial; + --tw-inset-shadow-alpha: 100%; + --tw-ring-color: initial; + --tw-ring-shadow: 0 0 #0000; + --tw-inset-ring-color: initial; + --tw-inset-ring-shadow: 0 0 #0000; + --tw-ring-inset: initial; + --tw-ring-offset-width: 0px; + --tw-ring-offset-color: #fff; + --tw-ring-offset-shadow: 0 0 #0000; + --tw-outline-style: solid; + --tw-blur: initial; + --tw-brightness: initial; + --tw-contrast: initial; + --tw-grayscale: initial; + --tw-hue-rotate: initial; + --tw-invert: initial; + --tw-opacity: initial; + --tw-saturate: initial; + --tw-sepia: initial; + --tw-drop-shadow: initial; + --tw-drop-shadow-color: initial; + --tw-drop-shadow-alpha: 100%; + --tw-drop-shadow-size: initial; + --tw-duration: initial; + --tw-ease: initial; + --tw-content: ""; + --tw-space-x-reverse: 0; + } + } +} diff --git a/static/favicon.ico b/static/favicon.ico new file mode 100644 index 0000000000000000000000000000000000000000..843e74f314b3421fa63725e9d86a58bd03f50344 GIT binary patch literal 1150 zcmds#y-EW?6ot>KAQr(Onp7r&O)7hBENs%*S|q)`MGCusg`J?Ft&d=1zz4AK0Ze5r z0l^}&`R?xAFfLo{wqg0^%>6mDJ2NXKJk6#U4|KU9wIua`6q!7aNYoCGa fwK7dp$@yNFrinCxQG{$xZM2;;>C$&9{o-8!GlhJ) literal 0 HcmV?d00001 diff --git a/static/favicon.svg b/static/favicon.svg new file mode 100644 index 0000000..268f86d --- /dev/null +++ b/static/favicon.svg @@ -0,0 +1,12 @@ + + + + + + + + + + + + diff --git a/static/js/bundle.js b/static/js/bundle.js new file mode 100644 index 0000000..ac9bd86 --- /dev/null +++ b/static/js/bundle.js @@ -0,0 +1,14329 @@ +var __defProp = Object.defineProperty; +var __getOwnPropDesc = Object.getOwnPropertyDescriptor; +var __getOwnPropNames = Object.getOwnPropertyNames; +var __hasOwnProp = Object.prototype.hasOwnProperty; +var __esm = (fn, res) => function __init() { + return fn && (res = (0, fn[__getOwnPropNames(fn)[0]])(fn = 0)), res; +}; +var __export = (target, all) => { + for (var name in all) + __defProp(target, name, { get: all[name], enumerable: true }); +}; +var __copyProps = (to, from, except, desc) => { + if (from && typeof from === "object" || typeof from === "function") { + for (let key of __getOwnPropNames(from)) + if (!__hasOwnProp.call(to, key) && key !== except) + __defProp(to, key, { get: () => from[key], enumerable: !(desc = __getOwnPropDesc(from, key)) || desc.enumerable }); + } + return to; +}; +var __toCommonJS = (mod) => __copyProps(__defProp({}, "__esModule", { value: true }), mod); + +// node_modules/preline/src/plugins/accessibility-manager/index.ts +var HSAccessibilityObserver, accessibility_manager_default; +var init_accessibility_manager = __esm({ + "node_modules/preline/src/plugins/accessibility-manager/index.ts"() { + HSAccessibilityObserver = class { + components = []; + currentlyOpenedComponents = []; + activeComponent = null; + allowedKeybindings = /* @__PURE__ */ new Set([ + "Escape", + "Enter", + " ", + "Space", + "ArrowDown", + "ArrowUp", + "ArrowLeft", + "ArrowRight", + "Tab", + "Home", + "End" + ]); + constructor() { + this.initGlobalListeners(); + } + initGlobalListeners() { + document.addEventListener( + "keydown", + (evt) => this.handleGlobalKeydown(evt) + ); + document.addEventListener( + "focusin", + (evt) => this.handleGlobalFocusin(evt) + ); + } + isAllowedKeybinding(evt) { + if (this.allowedKeybindings.has(evt.key)) { + return true; + } + if (evt.key.length === 1 && /^[a-zA-Z]$/.test(evt.key) && !evt.metaKey && !evt.ctrlKey && !evt.altKey && !evt.shiftKey) { + return true; + } + return false; + } + getActiveComponent(el) { + if (!el) return null; + const containingComponents = this.components.filter( + (comp) => comp.wrapper.contains(el) || comp.context && comp.context.contains(el) + ); + if (containingComponents.length === 0) return null; + if (containingComponents.length === 1) return containingComponents[0]; + let closestComponent = null; + let minDistance = Number.MAX_SAFE_INTEGER; + for (const comp of containingComponents) { + let distance = 0; + let current = el; + while (current && current !== comp.wrapper && current !== comp.context) { + distance++; + current = current.parentElement; + } + if (distance < minDistance) { + minDistance = distance; + closestComponent = comp; + } + } + return closestComponent; + } + handleGlobalFocusin(evt) { + const target = evt.target; + this.activeComponent = this.getActiveComponent(target); + } + handleGlobalKeydown(evt) { + const target = evt.target; + this.activeComponent = this.getActiveComponent(target); + if (!this.activeComponent) return; + if (!this.isAllowedKeybinding(evt)) { + return; + } + switch (evt.key) { + case "Escape": + if (!this.activeComponent.isOpened) { + const closestOpenParent = this.findClosestOpenParent(target); + if (closestOpenParent?.handlers.onEsc) { + closestOpenParent.handlers.onEsc(); + evt.preventDefault(); + evt.stopPropagation(); + } + } else if (this.activeComponent.handlers.onEsc) { + this.activeComponent.handlers.onEsc(); + evt.preventDefault(); + evt.stopPropagation(); + } + break; + case "Enter": + if (this.activeComponent.handlers.onEnter) { + this.activeComponent.handlers.onEnter(); + evt.preventDefault(); + evt.stopPropagation(); + } + break; + case " ": + case "Space": + if (target.tagName === "INPUT" || target.tagName === "TEXTAREA") { + return; + } + if (this.activeComponent.handlers.onSpace) { + this.activeComponent.handlers.onSpace(); + evt.preventDefault(); + evt.stopPropagation(); + } + break; + case "ArrowDown": + case "ArrowUp": + case "ArrowLeft": + case "ArrowRight": + if (this.activeComponent.handlers.onArrow) { + if (evt.metaKey || evt.ctrlKey || evt.altKey || evt.shiftKey) { + return; + } + this.activeComponent.handlers.onArrow(evt); + evt.preventDefault(); + evt.stopPropagation(); + } + break; + case "Tab": + if (!this.activeComponent.handlers.onTab) break; + const handler = evt.shiftKey ? this.activeComponent.handlers.onShiftTab : this.activeComponent.handlers.onTab; + if (handler) handler(); + break; + case "Home": + if (this.activeComponent.handlers.onHome) { + this.activeComponent.handlers.onHome(); + evt.preventDefault(); + evt.stopPropagation(); + } + break; + case "End": + if (this.activeComponent.handlers.onEnd) { + this.activeComponent.handlers.onEnd(); + evt.preventDefault(); + evt.stopPropagation(); + } + break; + default: + if (this.activeComponent.handlers.onFirstLetter && evt.key.length === 1 && /^[a-zA-Z]$/.test(evt.key)) { + this.activeComponent.handlers.onFirstLetter(evt.key); + evt.preventDefault(); + evt.stopPropagation(); + } + break; + } + } + findClosestOpenParent(target) { + let current = target.parentElement; + while (current) { + const parentComponent = this.currentlyOpenedComponents.find( + (comp) => comp.wrapper === current && comp !== this.activeComponent + ); + if (parentComponent) { + return parentComponent; + } + current = current.parentElement; + } + return null; + } + registerComponent(wrapper, handlers, isOpened = true, name = "", selector = "", context) { + const component = { + wrapper, + handlers, + isOpened, + name, + selector, + context, + isRegistered: true + }; + this.components.push(component); + return component; + } + updateComponentState(component, isOpened) { + component.isOpened = isOpened; + if (isOpened) { + if (!this.currentlyOpenedComponents.includes(component)) { + this.currentlyOpenedComponents.push(component); + } + } else { + this.currentlyOpenedComponents = this.currentlyOpenedComponents.filter( + (comp) => comp !== component + ); + } + } + unregisterComponent(component) { + this.components = this.components.filter((comp) => comp !== component); + this.currentlyOpenedComponents = this.currentlyOpenedComponents.filter( + (comp) => comp !== component + ); + } + addAllowedKeybinding(key) { + this.allowedKeybindings.add(key); + } + removeAllowedKeybinding(key) { + this.allowedKeybindings.delete(key); + } + getAllowedKeybindings() { + return Array.from(this.allowedKeybindings); + } + }; + accessibility_manager_default = HSAccessibilityObserver; + } +}); + +// node_modules/preline/src/utils/index.ts +var stringToBoolean, getClassProperty, getClassPropertyAlt, isDirectChild, isEnoughSpace, isFormElement, isIOS, isIpadOS, isJson, debounce, dispatch, afterTransition, htmlToElement, classToClassList; +var init_utils = __esm({ + "node_modules/preline/src/utils/index.ts"() { + stringToBoolean = (string) => { + return string === "true" ? true : false; + }; + getClassProperty = (el, prop, val = "") => { + return (window.getComputedStyle(el).getPropertyValue(prop) || val).replace( + " ", + "" + ); + }; + getClassPropertyAlt = (el, prop, val = "") => { + let targetClass = ""; + el.classList.forEach((c) => { + if (c.includes(prop)) { + targetClass = c; + } + }); + return targetClass.match(/:(.*)]/) ? targetClass.match(/:(.*)]/)[1] : val; + }; + isDirectChild = (parent, child) => { + const children = parent.children; + for (let i = 0; i < children.length; i++) { + if (children[i] === child) return true; + } + return false; + }; + isEnoughSpace = (el, toggle, preferredPosition = "auto", space = 10, wrapper = null) => { + const referenceRect = toggle.getBoundingClientRect(); + const wrapperRect = wrapper ? wrapper.getBoundingClientRect() : null; + const viewportHeight = window.innerHeight; + const spaceAbove = wrapperRect ? referenceRect.top - wrapperRect.top : referenceRect.top; + const spaceBelow = (wrapper ? wrapperRect.bottom : viewportHeight) - referenceRect.bottom; + const minimumSpaceRequired = el.clientHeight + space; + if (preferredPosition === "bottom") { + return spaceBelow >= minimumSpaceRequired; + } else if (preferredPosition === "top") { + return spaceAbove >= minimumSpaceRequired; + } else { + return spaceAbove >= minimumSpaceRequired || spaceBelow >= minimumSpaceRequired; + } + }; + isFormElement = (target) => { + return target instanceof HTMLInputElement || target instanceof HTMLTextAreaElement || target instanceof HTMLSelectElement; + }; + isIOS = () => { + if (/iPad|iPhone|iPod/.test(navigator.platform)) { + return true; + } else { + return navigator.maxTouchPoints && navigator.maxTouchPoints > 2 && /MacIntel/.test(navigator.platform); + } + }; + isIpadOS = () => { + return navigator.maxTouchPoints && navigator.maxTouchPoints > 2 && /MacIntel/.test(navigator.platform); + }; + isJson = (str) => { + if (typeof str !== "string") return false; + const firstChar = str.trim()[0]; + const lastChar = str.trim().slice(-1); + if (firstChar === "{" && lastChar === "}" || firstChar === "[" && lastChar === "]") { + try { + JSON.parse(str); + return true; + } catch { + return false; + } + } + return false; + }; + debounce = (func, timeout = 200) => { + let timer; + return (...args) => { + clearTimeout(timer); + timer = setTimeout(() => { + func.apply(void 0, args); + }, timeout); + }; + }; + dispatch = (evt, element, payload = null) => { + const event = new CustomEvent(evt, { + detail: { payload }, + bubbles: true, + cancelable: true, + composed: false + }); + element.dispatchEvent(event); + }; + afterTransition = (el, callback) => { + const handleEvent = () => { + callback(); + el.removeEventListener("transitionend", handleEvent, true); + }; + const computedStyle = window.getComputedStyle(el); + const transitionDuration = computedStyle.getPropertyValue( + "transition-duration" + ); + const transitionProperty = computedStyle.getPropertyValue( + "transition-property" + ); + const hasTransition = transitionProperty !== "none" && parseFloat(transitionDuration) > 0; + if (hasTransition) el.addEventListener("transitionend", handleEvent, true); + else callback(); + }; + htmlToElement = (html) => { + const template = document.createElement("template"); + html = html.trim(); + template.innerHTML = html; + return template.content.firstChild; + }; + classToClassList = (classes, target, splitter = " ", action = "add") => { + const classesToArray = classes.split(splitter); + classesToArray.forEach((cl) => { + if (cl.trim()) { + action === "add" ? target.classList.add(cl) : target.classList.remove(cl); + } + }); + }; + } +}); + +// node_modules/preline/src/plugins/base-plugin/index.ts +var HSBasePlugin; +var init_base_plugin = __esm({ + "node_modules/preline/src/plugins/base-plugin/index.ts"() { + HSBasePlugin = class { + constructor(el, options, events) { + this.el = el; + this.options = options; + this.events = events; + this.el = el; + this.options = options; + this.events = {}; + } + createCollection(collection, element) { + collection.push({ + id: element?.el?.id || collection.length + 1, + element + }); + } + fireEvent(evt, payload = null) { + if (this.events.hasOwnProperty(evt)) return this.events[evt](payload); + } + on(evt, cb) { + this.events[evt] = cb; + } + }; + } +}); + +// node_modules/preline/src/constants.ts +var POSITIONS, BREAKPOINTS; +var init_constants = __esm({ + "node_modules/preline/src/constants.ts"() { + POSITIONS = { + auto: "auto", + "auto-start": "auto-start", + "auto-end": "auto-end", + top: "top", + "top-left": "top-start", + "top-right": "top-end", + bottom: "bottom", + "bottom-left": "bottom-start", + "bottom-right": "bottom-end", + right: "right", + "right-start": "right-start", + "right-end": "right-end", + left: "left", + "left-start": "left-start", + "left-end": "left-end" + }; + BREAKPOINTS = { + xs: 0, + sm: 640, + md: 768, + lg: 1024, + xl: 1280, + "2xl": 1536 + }; + } +}); + +// node_modules/preline/src/plugins/select/index.ts +var HSSelect, select_default; +var init_select = __esm({ + "node_modules/preline/src/plugins/select/index.ts"() { + init_utils(); + init_base_plugin(); + init_accessibility_manager(); + init_constants(); + HSSelect = class _HSSelect extends HSBasePlugin { + accessibilityComponent; + value; + placeholder; + hasSearch; + minSearchLength; + preventSearchFocus; + mode; + viewport; + _isOpened; + isMultiple; + isDisabled; + selectedItems; + apiUrl; + apiQuery; + apiOptions; + apiDataPart; + apiSearchQueryKey; + apiLoadMore; + apiFieldsMap; + apiIconTag; + apiSelectedValues; + toggleTag; + toggleClasses; + toggleSeparators; + toggleCountText; + toggleCountTextPlacement; + toggleCountTextMinItems; + toggleCountTextMode; + wrapperClasses; + tagsItemTemplate; + tagsItemClasses; + tagsInputId; + tagsInputClasses; + dropdownTag; + dropdownClasses; + dropdownDirectionClasses; + dropdownSpace; + dropdownPlacement; + dropdownAutoPlacement; + dropdownVerticalFixedPlacement; + dropdownScope; + searchTemplate; + searchWrapperTemplate; + searchPlaceholder; + searchId; + searchLimit; + isSearchDirectMatch; + searchClasses; + searchWrapperClasses; + searchNoResultTemplate; + searchNoResultText; + searchNoResultClasses; + optionAllowEmptyOption; + optionTag; + optionTemplate; + optionClasses; + descriptionClasses; + iconClasses; + animationInProcess; + currentPage; + isLoading; + hasMore; + wrapper; + toggle; + toggleTextWrapper; + tagsInput; + dropdown; + floatingUIInstance; + searchWrapper; + search; + searchNoResult; + selectOptions; + extraMarkup; + isAddTagOnEnter; + tagsInputHelper; + remoteOptions; + disabledObserver = null; + optionId = 0; + onWrapperClickListener; + onToggleClickListener; + onTagsInputFocusListener; + onTagsInputInputListener; + onTagsInputInputSecondListener; + onTagsInputKeydownListener; + onSearchInputListener; + isSelectedOptionOnTop; + constructor(el, options) { + super(el, options); + const data = el.getAttribute("data-hs-select"); + const dataOptions = data ? JSON.parse(data) : {}; + const concatOptions = { + ...dataOptions, + ...options + }; + this.value = concatOptions?.value || this.el.value || null; + this.placeholder = concatOptions?.placeholder || "Select..."; + this.hasSearch = concatOptions?.hasSearch || false; + this.minSearchLength = concatOptions?.minSearchLength ?? 0; + this.preventSearchFocus = concatOptions?.preventSearchFocus || false; + this.mode = concatOptions?.mode || "default"; + this.viewport = typeof concatOptions?.viewport !== "undefined" ? document.querySelector(concatOptions?.viewport) : null; + this._isOpened = Boolean(concatOptions?.isOpened) || false; + this.isMultiple = this.el.hasAttribute("multiple") || false; + this.isDisabled = this.el.hasAttribute("disabled") || false; + this.selectedItems = []; + this.apiUrl = concatOptions?.apiUrl || null; + this.apiQuery = concatOptions?.apiQuery || null; + this.apiOptions = concatOptions?.apiOptions || null; + this.apiSearchQueryKey = concatOptions?.apiSearchQueryKey || null; + this.apiDataPart = concatOptions?.apiDataPart || null; + this.apiLoadMore = concatOptions?.apiLoadMore === true ? { + perPage: 10, + scrollThreshold: 100 + } : typeof concatOptions?.apiLoadMore === "object" && concatOptions?.apiLoadMore !== null ? { + perPage: concatOptions.apiLoadMore.perPage || 10, + scrollThreshold: concatOptions.apiLoadMore.scrollThreshold || 100 + } : false; + this.apiFieldsMap = concatOptions?.apiFieldsMap || null; + this.apiIconTag = concatOptions?.apiIconTag || null; + this.apiSelectedValues = concatOptions?.apiSelectedValues || null; + this.currentPage = 0; + this.isLoading = false; + this.hasMore = true; + this.wrapperClasses = concatOptions?.wrapperClasses || null; + this.toggleTag = concatOptions?.toggleTag || null; + this.toggleClasses = concatOptions?.toggleClasses || null; + this.toggleCountText = typeof concatOptions?.toggleCountText === void 0 ? null : concatOptions.toggleCountText; + this.toggleCountTextPlacement = concatOptions?.toggleCountTextPlacement || "postfix"; + this.toggleCountTextMinItems = concatOptions?.toggleCountTextMinItems || 1; + this.toggleCountTextMode = concatOptions?.toggleCountTextMode || "countAfterLimit"; + this.toggleSeparators = { + items: concatOptions?.toggleSeparators?.items || ", ", + betweenItemsAndCounter: concatOptions?.toggleSeparators?.betweenItemsAndCounter || "and" + }; + this.tagsItemTemplate = concatOptions?.tagsItemTemplate || null; + this.tagsItemClasses = concatOptions?.tagsItemClasses || null; + this.tagsInputId = concatOptions?.tagsInputId || null; + this.tagsInputClasses = concatOptions?.tagsInputClasses || null; + this.dropdownTag = concatOptions?.dropdownTag || null; + this.dropdownClasses = concatOptions?.dropdownClasses || null; + this.dropdownDirectionClasses = concatOptions?.dropdownDirectionClasses || null; + this.dropdownSpace = concatOptions?.dropdownSpace || 10; + this.dropdownPlacement = concatOptions?.dropdownPlacement || null; + this.dropdownVerticalFixedPlacement = concatOptions?.dropdownVerticalFixedPlacement || null; + this.dropdownScope = concatOptions?.dropdownScope || "parent"; + this.dropdownAutoPlacement = concatOptions?.dropdownAutoPlacement || false; + this.searchTemplate = concatOptions?.searchTemplate || null; + this.searchWrapperTemplate = concatOptions?.searchWrapperTemplate || null; + this.searchWrapperClasses = concatOptions?.searchWrapperClasses || "bg-white p-2 sticky top-0"; + this.searchId = concatOptions?.searchId || null; + this.searchLimit = concatOptions?.searchLimit || Infinity; + this.isSearchDirectMatch = typeof concatOptions?.isSearchDirectMatch !== "undefined" ? concatOptions?.isSearchDirectMatch : true; + this.searchClasses = concatOptions?.searchClasses || "block w-[calc(100%-32px)] text-sm border-gray-200 rounded-md focus:border-blue-500 focus:ring-blue-500 dark:bg-neutral-900 dark:border-neutral-700 dark:text-neutral-400 py-2 px-3 my-2 mx-4"; + this.searchPlaceholder = concatOptions?.searchPlaceholder || "Search..."; + this.searchNoResultTemplate = concatOptions?.searchNoResultTemplate || ""; + this.searchNoResultText = concatOptions?.searchNoResultText || "No results found"; + this.searchNoResultClasses = concatOptions?.searchNoResultClasses || "px-4 text-sm text-gray-800 dark:text-neutral-200"; + this.optionAllowEmptyOption = typeof concatOptions?.optionAllowEmptyOption !== "undefined" ? concatOptions?.optionAllowEmptyOption : false; + this.optionTemplate = concatOptions?.optionTemplate || null; + this.optionTag = concatOptions?.optionTag || null; + this.optionClasses = concatOptions?.optionClasses || null; + this.extraMarkup = concatOptions?.extraMarkup || null; + this.descriptionClasses = concatOptions?.descriptionClasses || null; + this.iconClasses = concatOptions?.iconClasses || null; + this.isAddTagOnEnter = concatOptions?.isAddTagOnEnter ?? true; + this.isSelectedOptionOnTop = concatOptions?.isSelectedOptionOnTop ?? false; + this.animationInProcess = false; + this.selectOptions = []; + this.remoteOptions = []; + this.tagsInputHelper = null; + this.disabledObserver = new MutationObserver((muts) => { + if (muts.some((m) => m.attributeName === "disabled")) { + this.setDisabledState(this.el.hasAttribute("disabled")); + } + }); + this.disabledObserver.observe(this.el, { + attributes: true, + attributeFilter: ["disabled"] + }); + this.init(); + } + wrapperClick(evt) { + if (!evt.target.closest("[data-hs-select-dropdown]") && !evt.target.closest("[data-tag-value]")) { + this.tagsInput.focus(); + } + } + toggleClick() { + if (this.isDisabled) return false; + this.toggleFn(); + } + tagsInputFocus() { + if (!this._isOpened) this.open(); + } + tagsInputInput() { + this.calculateInputWidth(); + } + tagsInputInputSecond(evt) { + if (!this.apiUrl) { + this.searchOptions(evt.target.value); + } + } + tagsInputKeydown(evt) { + if (evt.key === "Enter" && this.isAddTagOnEnter) { + const val = evt.target.value; + if (this.selectOptions.find((el) => el.val === val)) { + return false; + } + this.addSelectOption(val, val); + this.buildOption(val, val); + this.buildOriginalOption(val, val); + this.dropdown.querySelector(`[data-value="${val}"]`).click(); + this.resetTagsInputField(); + } + } + searchInput(evt) { + const newVal = evt.target.value; + if (this.apiUrl) this.remoteSearch(newVal); + else this.searchOptions(newVal); + } + setValue(val) { + this.value = val; + this.clearSelections(); + if (Array.isArray(val)) { + if (this.mode === "tags") { + this.unselectMultipleItems(); + this.selectMultipleItems(); + this.selectedItems = []; + const existingTags = this.wrapper.querySelectorAll("[data-tag-value]"); + existingTags.forEach((tag) => tag.remove()); + this.setTagsItems(); + this.reassignTagsInputPlaceholder( + this.hasValue() ? "" : this.placeholder + ); + } else { + this.toggleTextWrapper.innerHTML = this.hasValue() ? this.stringFromValue() : this.placeholder; + this.unselectMultipleItems(); + this.selectMultipleItems(); + } + } else { + this.setToggleTitle(); + if (this.toggle.querySelector("[data-icon]")) this.setToggleIcon(); + if (this.toggle.querySelector("[data-title]")) this.setToggleTitle(); + this.selectSingleItem(); + } + } + setDisabledState(isDisabled) { + this.isDisabled = isDisabled; + const target = this.mode === "tags" ? this.wrapper : this.toggle; + target?.classList.toggle("disabled", isDisabled); + if (isDisabled && this.isOpened()) this.close(); + } + hasValue() { + if (!this.isMultiple) { + return this.value !== null && this.value !== void 0 && this.value !== ""; + } + return Array.isArray(this.value) && this.value.length > 0 && this.value.some((val) => val !== null && val !== void 0 && val !== ""); + } + init() { + this.createCollection(window.$hsSelectCollection, this); + this.build(); + if (typeof window !== "undefined") { + if (!window.HSAccessibilityObserver) { + window.HSAccessibilityObserver = new accessibility_manager_default(); + } + this.setupAccessibility(); + } + } + build() { + this.el.style.display = "none"; + if (this.el.children) { + Array.from(this.el.children).filter( + (el) => this.optionAllowEmptyOption || !this.optionAllowEmptyOption && el.value && el.value !== "" + ).forEach((el) => { + const data = el.getAttribute("data-hs-select-option"); + this.selectOptions = [ + ...this.selectOptions, + { + title: el.textContent, + val: el.value, + disabled: el.disabled, + options: data !== "undefined" ? JSON.parse(data) : null + } + ]; + }); + } + if (this.optionAllowEmptyOption && !this.value) { + this.value = ""; + } + if (this.isMultiple) { + const selectedOptions = Array.from(this.el.children).filter( + (el) => el.selected + ); + const values = []; + selectedOptions.forEach((el) => { + values.push(el.value); + }); + this.value = values; + } + this.buildWrapper(); + if (this.mode === "tags") this.buildTags(); + else this.buildToggle(); + this.buildDropdown(); + if (this.extraMarkup) this.buildExtraMarkup(); + } + buildWrapper() { + this.wrapper = document.createElement("div"); + this.wrapper.classList.add("hs-select", "relative"); + this.setDisabledState(this.isDisabled); + if (this.mode === "tags") { + this.onWrapperClickListener = (evt) => this.wrapperClick(evt); + this.wrapper.addEventListener("click", this.onWrapperClickListener); + } + if (this.wrapperClasses) { + classToClassList(this.wrapperClasses, this.wrapper); + } + this.el.before(this.wrapper); + this.wrapper.append(this.el); + } + buildExtraMarkup() { + const appendMarkup = (markup) => { + const el = htmlToElement(markup); + this.wrapper.append(el); + return el; + }; + const clickHandle = (el) => { + if (!el.classList.contains("--prevent-click")) { + el.addEventListener("click", (evt) => { + evt.stopPropagation(); + if (!this.isDisabled) this.toggleFn(); + }); + } + }; + if (Array.isArray(this.extraMarkup)) { + this.extraMarkup.forEach((el) => { + const newEl = appendMarkup(el); + clickHandle(newEl); + }); + } else { + const newEl = appendMarkup(this.extraMarkup); + clickHandle(newEl); + } + } + buildToggle() { + let icon, title; + this.toggleTextWrapper = document.createElement("span"); + this.toggleTextWrapper.classList.add("truncate"); + this.toggle = htmlToElement(this.toggleTag || "
"); + icon = this.toggle.querySelector("[data-icon]"); + title = this.toggle.querySelector("[data-title]"); + if (!this.isMultiple && icon) this.setToggleIcon(); + if (!this.isMultiple && title) this.setToggleTitle(); + if (this.isMultiple) { + this.toggleTextWrapper.innerHTML = this.hasValue() ? this.stringFromValue() : this.placeholder; + } else { + this.toggleTextWrapper.innerHTML = this.getItemByValue(this.value)?.title || this.placeholder; + } + if (!title) this.toggle.append(this.toggleTextWrapper); + if (this.toggleClasses) classToClassList(this.toggleClasses, this.toggle); + if (this.isDisabled) this.toggle.classList.add("disabled"); + if (this.wrapper) this.wrapper.append(this.toggle); + if (this.toggle?.ariaExpanded) { + if (this._isOpened) this.toggle.ariaExpanded = "true"; + else this.toggle.ariaExpanded = "false"; + } + this.onToggleClickListener = () => this.toggleClick(); + this.toggle.addEventListener("click", this.onToggleClickListener); + } + setToggleIcon() { + const item = this.getItemByValue(this.value); + const icon = this.toggle.querySelector("[data-icon]"); + if (icon) { + icon.innerHTML = ""; + const img = htmlToElement( + this.apiUrl && this.apiIconTag ? this.apiIconTag || "" : item?.options?.icon || "" + ); + if (this.value && this.apiUrl && this.apiIconTag && item[this.apiFieldsMap.icon]) { + img.src = item[this.apiFieldsMap.icon] || ""; + } + icon.append(img); + if (!img?.src) icon.classList.add("hidden"); + else icon.classList.remove("hidden"); + } + } + setToggleTitle() { + const title = this.toggle.querySelector("[data-title]"); + let value = this.placeholder; + if (this.optionAllowEmptyOption && this.value === "") { + const emptyOption = this.selectOptions.find( + (el) => el.val === "" + ); + value = emptyOption?.title || this.placeholder; + } else if (this.value) { + if (this.apiUrl) { + const selectedOption = this.remoteOptions.find( + (el) => `${el[this.apiFieldsMap.val]}` === this.value || `${el[this.apiFieldsMap.title]}` === this.value + ); + if (selectedOption) { + value = selectedOption[this.apiFieldsMap.title]; + } + } else { + const selectedOption = this.selectOptions.find( + (el) => el.val === this.value + ); + if (selectedOption) { + value = selectedOption.title; + } + } + } + if (title) { + title.innerHTML = value; + title.classList.add("truncate"); + this.toggle.append(title); + } else { + this.toggleTextWrapper.innerHTML = value; + } + } + buildTags() { + if (this.isDisabled) this.wrapper.classList.add("disabled"); + this.wrapper.setAttribute("tabindex", "0"); + this.buildTagsInput(); + this.setTagsItems(); + } + reassignTagsInputPlaceholder(placeholder) { + this.tagsInput.placeholder = placeholder; + this.tagsInputHelper.innerHTML = placeholder; + this.calculateInputWidth(); + } + buildTagsItem(val) { + const item = this.getItemByValue(val); + let template, title, remove, icon; + const newItem = document.createElement("div"); + newItem.setAttribute("data-tag-value", val); + if (this.tagsItemClasses) classToClassList(this.tagsItemClasses, newItem); + if (this.tagsItemTemplate) { + template = htmlToElement(this.tagsItemTemplate); + newItem.append(template); + } + if (item?.options?.icon || this.apiIconTag) { + const img = htmlToElement( + this.apiUrl && this.apiIconTag ? this.apiIconTag : item?.options?.icon + ); + if (this.apiUrl && this.apiIconTag && item[this.apiFieldsMap.icon]) { + img.src = item[this.apiFieldsMap.icon] || ""; + } + icon = template ? template.querySelector("[data-icon]") : document.createElement("span"); + icon.append(img); + if (!template) newItem.append(icon); + } + if (template && template.querySelector("[data-icon]") && !item?.options?.icon && !this.apiUrl && !this.apiIconTag && !item[this.apiFieldsMap?.icon]) { + template.querySelector("[data-icon]").classList.add("hidden"); + } + title = template ? template.querySelector("[data-title]") : document.createElement("span"); + if (this.apiUrl && this.apiFieldsMap?.title && item[this.apiFieldsMap.title]) { + title.textContent = item[this.apiFieldsMap.title]; + } else { + title.textContent = item.title || ""; + } + if (!template) newItem.append(title); + if (template) { + remove = template.querySelector("[data-remove]"); + } else { + remove = document.createElement("span"); + remove.textContent = "X"; + newItem.append(remove); + } + remove.addEventListener("click", () => { + this.value = this.value.filter((el) => el !== val); + this.selectedItems = this.selectedItems.filter((el) => el !== val); + if (!this.hasValue()) { + this.reassignTagsInputPlaceholder(this.placeholder); + } + this.unselectMultipleItems(); + this.selectMultipleItems(); + newItem.remove(); + this.triggerChangeEventForNativeSelect(); + }); + this.wrapper.append(newItem); + } + getItemByValue(val) { + const value = this.apiUrl ? this.remoteOptions.find( + (el) => `${el[this.apiFieldsMap.val]}` === val || el[this.apiFieldsMap.title] === val + ) : this.selectOptions.find((el) => el.val === val); + return value; + } + setTagsItems() { + if (this.value) { + const values = Array.isArray(this.value) ? this.value : this.value != null ? [this.value] : []; + values.forEach((val) => { + if (!this.selectedItems.includes(val)) this.buildTagsItem(val); + this.selectedItems = !this.selectedItems.includes(val) ? [...this.selectedItems, val] : this.selectedItems; + }); + } + if (this._isOpened && this.floatingUIInstance) { + this.floatingUIInstance.update(); + } + } + buildTagsInput() { + this.tagsInput = document.createElement("input"); + if (this.tagsInputId) this.tagsInput.id = this.tagsInputId; + if (this.tagsInputClasses) { + classToClassList(this.tagsInputClasses, this.tagsInput); + } + this.tagsInput.setAttribute("tabindex", "-1"); + this.onTagsInputFocusListener = () => this.tagsInputFocus(); + this.onTagsInputInputListener = () => this.tagsInputInput(); + this.onTagsInputInputSecondListener = debounce( + (evt) => this.tagsInputInputSecond(evt) + ); + this.onTagsInputKeydownListener = (evt) => this.tagsInputKeydown(evt); + this.tagsInput.addEventListener("focus", this.onTagsInputFocusListener); + this.tagsInput.addEventListener("input", this.onTagsInputInputListener); + this.tagsInput.addEventListener( + "input", + this.onTagsInputInputSecondListener + ); + this.tagsInput.addEventListener("keydown", this.onTagsInputKeydownListener); + this.wrapper.append(this.tagsInput); + setTimeout(() => { + this.adjustInputWidth(); + this.reassignTagsInputPlaceholder( + this.hasValue() ? "" : this.placeholder + ); + }); + } + buildDropdown() { + this.dropdown = htmlToElement(this.dropdownTag || "
"); + this.dropdown.setAttribute("data-hs-select-dropdown", ""); + if (this.dropdownScope === "parent") { + this.dropdown.classList.add("absolute"); + if (!this.dropdownVerticalFixedPlacement) { + this.dropdown.classList.add("top-full"); + } + } + this.dropdown.role = "listbox"; + this.dropdown.tabIndex = -1; + this.dropdown.ariaOrientation = "vertical"; + if (!this._isOpened) this.dropdown.classList.add("hidden"); + if (this.dropdownClasses) { + classToClassList(this.dropdownClasses, this.dropdown); + } + if (this.wrapper) this.wrapper.append(this.dropdown); + if (this.dropdown && this.hasSearch) this.buildSearch(); + if (this.selectOptions) { + this.selectOptions.forEach( + (props, i) => this.buildOption( + props.title, + props.val, + props.disabled, + props.selected, + props.options, + `${i}` + ) + ); + } + if (this.apiUrl) this.optionsFromRemoteData(); + if (!this.apiUrl) { + this.sortElements(this.el, "option"); + this.sortElements(this.dropdown, "[data-value]"); + } + if (this.dropdownScope === "window") this.buildFloatingUI(); + if (this.dropdown && this.apiLoadMore) this.setupInfiniteScroll(); + } + setupInfiniteScroll() { + this.dropdown.addEventListener("scroll", this.handleScroll.bind(this)); + } + async handleScroll() { + if (!this.dropdown || this.isLoading || !this.hasMore || !this.apiLoadMore) return; + const { scrollTop, scrollHeight, clientHeight } = this.dropdown; + const scrollThreshold = typeof this.apiLoadMore === "object" ? this.apiLoadMore.scrollThreshold : 100; + const isNearBottom = scrollHeight - scrollTop - clientHeight < scrollThreshold; + if (isNearBottom) await this.loadMore(); + } + async loadMore() { + if (!this.apiUrl || this.isLoading || !this.hasMore || !this.apiLoadMore) { + return; + } + this.isLoading = true; + try { + const url = new URL(this.apiUrl); + const paginationParam = this.apiFieldsMap?.page || this.apiFieldsMap?.offset || "page"; + const isOffsetBased = !!this.apiFieldsMap?.offset; + const perPage = typeof this.apiLoadMore === "object" ? this.apiLoadMore.perPage : 10; + if (isOffsetBased) { + const offset3 = this.currentPage * perPage; + url.searchParams.set(paginationParam, offset3.toString()); + this.currentPage++; + } else { + this.currentPage++; + url.searchParams.set(paginationParam, this.currentPage.toString()); + } + url.searchParams.set( + this.apiFieldsMap?.limit || "limit", + perPage.toString() + ); + const response = await fetch(url.toString(), this.apiOptions || {}); + const data = await response.json(); + const items = this.apiDataPart ? data[this.apiDataPart] : data.results; + const total = data.count || 0; + const currentOffset = this.currentPage * perPage; + if (items && items.length > 0) { + this.remoteOptions = [...this.remoteOptions || [], ...items]; + this.buildOptionsFromRemoteData(items); + this.hasMore = currentOffset < total; + } else { + this.hasMore = false; + } + } catch (error) { + this.hasMore = false; + console.error("Error loading more options:", error); + } finally { + this.isLoading = false; + } + } + buildFloatingUI() { + if (typeof FloatingUIDOM !== "undefined" && FloatingUIDOM.computePosition) { + document.body.appendChild(this.dropdown); + const reference = this.mode === "tags" ? this.wrapper : this.toggle; + const middleware = [ + FloatingUIDOM.offset([0, 5]) + ]; + if (this.dropdownAutoPlacement && typeof FloatingUIDOM.flip === "function") { + middleware.push(FloatingUIDOM.flip({ + fallbackPlacements: [ + "bottom-start", + "bottom-end", + "top-start", + "top-end" + ] + })); + } + const options = { + placement: POSITIONS[this.dropdownPlacement] || "bottom", + strategy: "fixed", + middleware + }; + const update2 = () => { + FloatingUIDOM.computePosition(reference, this.dropdown, options).then( + ({ x, y, placement: computedPlacement }) => { + Object.assign(this.dropdown.style, { + position: "fixed", + left: `${x}px`, + top: `${y}px`, + [`margin${computedPlacement === "bottom" ? "Top" : computedPlacement === "top" ? "Bottom" : computedPlacement === "right" ? "Left" : "Right"}`]: `${this.dropdownSpace}px` + }); + this.dropdown.setAttribute("data-placement", computedPlacement); + } + ); + }; + update2(); + const cleanup = FloatingUIDOM.autoUpdate( + reference, + this.dropdown, + update2 + ); + this.floatingUIInstance = { + update: update2, + destroy: cleanup + }; + } else { + console.error("FloatingUIDOM not found! Please enable it on the page."); + } + } + updateDropdownWidth() { + const toggle = this.mode === "tags" ? this.wrapper : this.toggle; + this.dropdown.style.width = `${toggle.clientWidth}px`; + } + buildSearch() { + let input; + this.searchWrapper = htmlToElement( + this.searchWrapperTemplate || "
" + ); + if (this.searchWrapperClasses) { + classToClassList(this.searchWrapperClasses, this.searchWrapper); + } + input = this.searchWrapper.querySelector("[data-input]"); + const search = htmlToElement( + this.searchTemplate || '' + ); + this.search = search.tagName === "INPUT" ? search : search.querySelector(":scope input"); + this.search.placeholder = this.searchPlaceholder; + if (this.searchClasses) classToClassList(this.searchClasses, this.search); + if (this.searchId) this.search.id = this.searchId; + this.onSearchInputListener = debounce( + (evt) => this.searchInput(evt) + ); + this.search.addEventListener("input", this.onSearchInputListener); + if (input) input.append(search); + else this.searchWrapper.append(search); + this.dropdown.append(this.searchWrapper); + } + buildOption(title, val, disabled = false, selected = false, options, index = "1", id) { + let template = null; + let titleWrapper = null; + let iconWrapper = null; + let descriptionWrapper = null; + const option = htmlToElement(this.optionTag || "
"); + option.setAttribute("data-value", val); + option.setAttribute("data-title-value", title); + option.setAttribute("tabIndex", index); + option.classList.add("cursor-pointer"); + option.setAttribute("data-id", id || `${this.optionId}`); + if (!id) this.optionId++; + if (disabled) option.classList.add("disabled"); + if (selected) { + if (this.isMultiple) this.value = [...this.value, val]; + else this.value = val; + } + if (this.optionTemplate) { + template = htmlToElement(this.optionTemplate); + option.append(template); + } + if (template) { + titleWrapper = template.querySelector("[data-title]"); + titleWrapper.textContent = title || ""; + } else { + option.textContent = title || ""; + } + if (options) { + if (options.icon) { + const img = htmlToElement(this.apiIconTag ?? options.icon); + img.classList.add("max-w-full"); + if (this.apiUrl) { + img.setAttribute("alt", title); + img.setAttribute("src", options.icon); + } + if (template) { + iconWrapper = template.querySelector("[data-icon]"); + iconWrapper.append(img); + } else { + const icon = htmlToElement("
"); + if (this.iconClasses) classToClassList(this.iconClasses, icon); + icon.append(img); + option.append(icon); + } + } + if (options.description) { + if (template) { + descriptionWrapper = template.querySelector("[data-description]"); + if (descriptionWrapper) { + descriptionWrapper.append(options.description); + } + } else { + const description = htmlToElement("
"); + description.textContent = options.description; + if (this.descriptionClasses) { + classToClassList(this.descriptionClasses, description); + } + option.append(description); + } + } + } + if (template && template.querySelector("[data-icon]") && !options && !options?.icon) { + template.querySelector("[data-icon]").classList.add("hidden"); + } + if (this.value && (this.isMultiple ? this.value.includes(val) : this.value === val)) { + option.classList.add("selected"); + } + if (!disabled) { + option.addEventListener("click", () => this.onSelectOption(val)); + } + if (this.optionClasses) classToClassList(this.optionClasses, option); + if (this.dropdown) this.dropdown.append(option); + if (selected) this.setNewValue(); + } + buildOptionFromRemoteData(title, val, disabled = false, selected = false, index = "1", id, options) { + if (index) { + this.buildOption(title, val, disabled, selected, options, index, id); + } else { + alert( + "ID parameter is required for generating remote options! Please check your API endpoint have it." + ); + } + } + buildOptionsFromRemoteData(data) { + data.forEach((el, i) => { + let id = null; + let title = ""; + let value = ""; + const options = { + id: "", + val: "", + title: "", + icon: null, + description: null, + rest: {} + }; + Object.keys(el).forEach((key) => { + if (el[this.apiFieldsMap.id]) id = el[this.apiFieldsMap.id]; + if (el[this.apiFieldsMap.val]) { + value = `${el[this.apiFieldsMap.val]}`; + } + if (el[this.apiFieldsMap.title]) { + title = el[this.apiFieldsMap.title]; + if (!el[this.apiFieldsMap.val]) { + value = title; + } + } + if (el[this.apiFieldsMap.icon]) { + options.icon = el[this.apiFieldsMap.icon]; + } + if (el[this.apiFieldsMap?.description]) { + options.description = el[this.apiFieldsMap.description]; + } + options.rest[key] = el[key]; + }); + const existingOption = this.dropdown.querySelector( + `[data-value="${value}"]` + ); + if (!existingOption) { + const isSelected = this.apiSelectedValues ? Array.isArray(this.apiSelectedValues) ? this.apiSelectedValues.includes(value) : this.apiSelectedValues === value : false; + this.buildOriginalOption( + title, + value, + id, + false, + isSelected, + options + ); + this.buildOptionFromRemoteData( + title, + value, + false, + isSelected, + `${i}`, + id, + options + ); + if (isSelected) { + if (this.isMultiple) { + if (!this.value) this.value = []; + if (Array.isArray(this.value)) { + this.value = [...this.value, value]; + } + } else { + this.value = value; + } + } + } + }); + this.sortElements(this.el, "option"); + this.sortElements(this.dropdown, "[data-value]"); + } + async optionsFromRemoteData(val = "") { + const res = await this.apiRequest(val); + this.remoteOptions = res; + if (res.length) this.buildOptionsFromRemoteData(this.remoteOptions); + else console.log("There is no data were responded!"); + } + async apiRequest(val = "") { + try { + const url = new URL(this.apiUrl); + const queryParams = new URLSearchParams(this.apiQuery ?? ""); + const options = this.apiOptions ?? {}; + const key = this.apiSearchQueryKey ?? "q"; + const trimmed = (val ?? "").trim().toLowerCase(); + if (trimmed !== "") queryParams.set(key, encodeURIComponent(trimmed)); + if (this.apiLoadMore) { + const perPage = typeof this.apiLoadMore === "object" ? this.apiLoadMore.perPage : 10; + const pageKey = this.apiFieldsMap?.page ?? this.apiFieldsMap?.offset ?? "page"; + const limitKey = this.apiFieldsMap?.limit ?? "limit"; + const isOffset = Boolean(this.apiFieldsMap?.offset); + queryParams.delete(pageKey); + queryParams.delete(limitKey); + queryParams.set(pageKey, isOffset ? "0" : "1"); + queryParams.set(limitKey, String(perPage)); + } + url.search = queryParams.toString(); + const res = await fetch(url.toString(), options); + const json = await res.json(); + return this.apiDataPart ? json[this.apiDataPart] : json; + } catch (err) { + console.error(err); + } + } + sortElements(container, selector) { + const items = Array.from(container.querySelectorAll(selector)); + if (this.isSelectedOptionOnTop) { + items.sort((a, b) => { + const isASelected = a.classList.contains("selected") || a.hasAttribute("selected"); + const isBSelected = b.classList.contains("selected") || b.hasAttribute("selected"); + if (isASelected && !isBSelected) return -1; + if (!isASelected && isBSelected) return 1; + return 0; + }); + } + items.forEach((item) => container.appendChild(item)); + } + async remoteSearch(val) { + if (val.length <= this.minSearchLength) { + const res2 = await this.apiRequest(""); + this.remoteOptions = res2; + Array.from(this.dropdown.querySelectorAll("[data-value]")).forEach( + (el) => el.remove() + ); + Array.from(this.el.querySelectorAll("option[value]")).forEach( + (el) => { + el.remove(); + } + ); + if (res2.length) this.buildOptionsFromRemoteData(res2); + else console.log("No data responded!"); + return false; + } + const res = await this.apiRequest(val); + this.remoteOptions = res; + let newIds = res.map((item) => `${item.id}`); + let restOptions = null; + const pseudoOptions = this.dropdown.querySelectorAll("[data-value]"); + const options = this.el.querySelectorAll("[data-hs-select-option]"); + options.forEach((el) => { + const dataId = el.getAttribute("data-id"); + if (!newIds.includes(dataId) && !this.value?.includes(el.value)) { + this.destroyOriginalOption(el.value); + } + }); + pseudoOptions.forEach((el) => { + const dataId = el.getAttribute("data-id"); + if (!newIds.includes(dataId) && !this.value?.includes(el.getAttribute("data-value"))) { + this.destroyOption(el.getAttribute("data-value")); + } else newIds = newIds.filter((item) => item !== dataId); + }); + restOptions = res.filter( + (item) => newIds.includes(`${item.id}`) + ); + if (restOptions.length) this.buildOptionsFromRemoteData(restOptions); + else console.log("No data responded!"); + } + destroyOption(val) { + const option = this.dropdown.querySelector(`[data-value="${val}"]`); + if (!option) return false; + option.remove(); + } + buildOriginalOption(title, val, id, disabled, selected, options) { + const option = htmlToElement(""); + option.setAttribute("value", val); + if (disabled) option.setAttribute("disabled", "disabled"); + if (selected) option.setAttribute("selected", "selected"); + if (id) option.setAttribute("data-id", id); + option.setAttribute("data-hs-select-option", JSON.stringify(options)); + option.innerText = title; + this.el.append(option); + } + destroyOriginalOption(val) { + const option = this.el.querySelector(`[value="${val}"]`); + if (!option) return false; + option.remove(); + } + buildTagsInputHelper() { + this.tagsInputHelper = document.createElement("span"); + this.tagsInputHelper.style.fontSize = window.getComputedStyle( + this.tagsInput + ).fontSize; + this.tagsInputHelper.style.fontFamily = window.getComputedStyle( + this.tagsInput + ).fontFamily; + this.tagsInputHelper.style.fontWeight = window.getComputedStyle( + this.tagsInput + ).fontWeight; + this.tagsInputHelper.style.letterSpacing = window.getComputedStyle( + this.tagsInput + ).letterSpacing; + this.tagsInputHelper.style.visibility = "hidden"; + this.tagsInputHelper.style.whiteSpace = "pre"; + this.tagsInputHelper.style.position = "absolute"; + this.wrapper.appendChild(this.tagsInputHelper); + } + calculateInputWidth() { + this.tagsInputHelper.textContent = this.tagsInput.value || this.tagsInput.placeholder; + const inputPadding = parseInt(window.getComputedStyle(this.tagsInput).paddingLeft) + parseInt(window.getComputedStyle(this.tagsInput).paddingRight); + const inputBorder = parseInt(window.getComputedStyle(this.tagsInput).borderLeftWidth) + parseInt(window.getComputedStyle(this.tagsInput).borderRightWidth); + const newWidth = this.tagsInputHelper.offsetWidth + inputPadding + inputBorder; + const maxWidth = this.wrapper.offsetWidth - (parseInt(window.getComputedStyle(this.wrapper).paddingLeft) + parseInt(window.getComputedStyle(this.wrapper).paddingRight)); + this.tagsInput.style.width = `${Math.min(newWidth, maxWidth) + 2}px`; + } + adjustInputWidth() { + this.buildTagsInputHelper(); + this.calculateInputWidth(); + } + onSelectOption(val) { + this.clearSelections(); + if (this.isMultiple) { + if (!Array.isArray(this.value)) this.value = []; + this.value = this.value.includes(val) ? this.value.filter((el) => el !== val) : [...this.value, val]; + this.selectMultipleItems(); + this.setNewValue(); + } else { + this.value = val; + this.selectSingleItem(); + this.setNewValue(); + } + this.fireEvent("change", this.value); + if (this.mode === "tags") { + const intersection = this.selectedItems.filter( + (x) => !this.value.includes(x) + ); + if (intersection.length) { + intersection.forEach((el) => { + this.selectedItems = this.selectedItems.filter((elI) => elI !== el); + this.wrapper.querySelector(`[data-tag-value="${el}"]`).remove(); + }); + } + this.resetTagsInputField(); + } + if (!this.isMultiple) { + if (this.toggle.querySelector("[data-icon]")) this.setToggleIcon(); + if (this.toggle.querySelector("[data-title]")) this.setToggleTitle(); + this.close(true); + } + if (!this.hasValue() && this.mode === "tags") { + this.reassignTagsInputPlaceholder(this.placeholder); + } + if (this._isOpened && this.mode === "tags" && this.tagsInput) { + this.tagsInput.focus(); + } + this.triggerChangeEventForNativeSelect(); + } + triggerChangeEventForNativeSelect() { + const selectChangeEvent = new Event("change", { bubbles: true }); + this.el.dispatchEvent(selectChangeEvent); + dispatch("change.hs.select", this.el, this.value); + } + addSelectOption(title, val, disabled, selected, options) { + this.selectOptions = [ + ...this.selectOptions, + { + title, + val, + disabled, + selected, + options + } + ]; + } + removeSelectOption(val, isArray = false) { + const hasOption = !!this.selectOptions.some( + (el) => el.val === val + ); + if (!hasOption) return false; + this.selectOptions = this.selectOptions.filter( + (el) => el.val !== val + ); + this.value = isArray ? this.value.filter((item) => item !== val) : val; + } + resetTagsInputField() { + this.tagsInput.value = ""; + this.reassignTagsInputPlaceholder(""); + this.searchOptions(""); + } + clearSelections() { + Array.from(this.dropdown.children).forEach((el) => { + if (el.classList.contains("selected")) el.classList.remove("selected"); + }); + Array.from(this.el.children).forEach((el) => { + if (el.selected) { + el.selected = false; + } + }); + } + setNewValue() { + if (this.mode === "tags") { + this.setTagsItems(); + } else { + if (this.optionAllowEmptyOption && this.value === "") { + const emptyOption = this.selectOptions.find( + (el) => el.val === "" + ); + this.toggleTextWrapper.innerHTML = emptyOption?.title || this.placeholder; + } else { + if (this.hasValue()) { + if (this.apiUrl) { + const selectedItem = this.dropdown.querySelector( + `[data-value="${this.value}"]` + ); + if (selectedItem) { + this.toggleTextWrapper.innerHTML = selectedItem.getAttribute("data-title-value") || this.placeholder; + } else { + const selectedOption = this.remoteOptions.find( + (el) => { + const val = el[this.apiFieldsMap.val] ? `${el[this.apiFieldsMap.val]}` : el[this.apiFieldsMap.title]; + return val === this.value; + } + ); + this.toggleTextWrapper.innerHTML = selectedOption ? `${selectedOption[this.apiFieldsMap.title]}` : this.stringFromValue(); + } + } else { + this.toggleTextWrapper.innerHTML = this.stringFromValue(); + } + } else { + this.toggleTextWrapper.innerHTML = this.placeholder; + } + } + } + } + stringFromValueBasic(options) { + const value = []; + let title = ""; + options.forEach((el) => { + if (this.isMultiple) { + if (Array.isArray(this.value) && this.value.includes(el.val)) { + value.push(el.title); + } + } else { + if (this.value === el.val) value.push(el.title); + } + }); + if (this.toggleCountText !== void 0 && this.toggleCountText !== null && value.length >= this.toggleCountTextMinItems) { + if (this.toggleCountTextMode === "nItemsAndCount") { + const nItems = value.slice(0, this.toggleCountTextMinItems - 1); + const tempTitle = [nItems.join(this.toggleSeparators.items)]; + const count = `${value.length - nItems.length}`; + if (this?.toggleSeparators?.betweenItemsAndCounter) { + tempTitle.push(this.toggleSeparators.betweenItemsAndCounter); + } + if (this.toggleCountText) { + switch (this.toggleCountTextPlacement) { + case "postfix-no-space": + tempTitle.push(`${count}${this.toggleCountText}`); + break; + case "prefix-no-space": + tempTitle.push(`${this.toggleCountText}${count}`); + break; + case "prefix": + tempTitle.push(`${this.toggleCountText} ${count}`); + break; + default: + tempTitle.push(`${count} ${this.toggleCountText}`); + break; + } + } + title = tempTitle.join(" "); + } else { + title = `${value.length} ${this.toggleCountText}`; + } + } else { + title = value.join(this.toggleSeparators.items); + } + return title; + } + stringFromValueRemoteData() { + const options = this.dropdown.querySelectorAll("[data-title-value]"); + const value = []; + let title = ""; + options.forEach((el) => { + const dataValue = el.getAttribute("data-value"); + const dataTitleValue = el.getAttribute("data-title-value"); + if (this.isMultiple) { + if (Array.isArray(this.value) && this.value.includes(dataValue)) { + value.push(dataTitleValue); + } + } else { + if (this.value === dataValue) value.push(dataTitleValue); + } + }); + if (this.toggleCountText && this.toggleCountText !== "" && value.length >= this.toggleCountTextMinItems) { + if (this.toggleCountTextMode === "nItemsAndCount") { + const nItems = value.slice(0, this.toggleCountTextMinItems - 1); + title = `${nItems.join(this.toggleSeparators.items)} ${this.toggleSeparators.betweenItemsAndCounter} ${value.length - nItems.length} ${this.toggleCountText}`; + } else { + title = `${value.length} ${this.toggleCountText}`; + } + } else { + title = value.join(this.toggleSeparators.items); + } + return title; + } + stringFromValue() { + const result = this.apiUrl ? this.stringFromValueRemoteData() : this.stringFromValueBasic(this.selectOptions); + return result; + } + selectSingleItem() { + const selectedOption = Array.from(this.el.children).find( + (el) => this.value === el.value + ); + selectedOption.selected = true; + const selectedItem = Array.from(this.dropdown.children).find( + (el) => this.value === el.getAttribute("data-value") + ); + if (selectedItem) selectedItem.classList.add("selected"); + this.sortElements(this.el, "option"); + this.sortElements(this.dropdown, "[data-value]"); + } + selectMultipleItems() { + if (!Array.isArray(this.value)) return; + Array.from(this.dropdown.children).filter((el) => this.value.includes(el.getAttribute("data-value"))).forEach((el) => el.classList.add("selected")); + Array.from(this.el.children).filter((el) => this.value.includes(el.value)).forEach((el) => el.selected = true); + this.sortElements(this.el, "option"); + this.sortElements(this.dropdown, "[data-value]"); + } + unselectMultipleItems() { + Array.from(this.dropdown.children).forEach( + (el) => el.classList.remove("selected") + ); + Array.from(this.el.children).forEach( + (el) => el.selected = false + ); + this.sortElements(this.el, "option"); + this.sortElements(this.dropdown, "[data-value]"); + } + searchOptions(val) { + if (val.length <= this.minSearchLength) { + if (this.searchNoResult) { + this.searchNoResult.remove(); + this.searchNoResult = null; + } + const options2 = this.dropdown.querySelectorAll("[data-value]"); + options2.forEach((el) => { + el.classList.remove("hidden"); + }); + return false; + } + if (this.searchNoResult) { + this.searchNoResult.remove(); + this.searchNoResult = null; + } + this.searchNoResult = htmlToElement(this.searchNoResultTemplate); + this.searchNoResult.innerText = this.searchNoResultText; + classToClassList(this.searchNoResultClasses, this.searchNoResult); + const options = this.dropdown.querySelectorAll("[data-value]"); + let hasItems = false; + let countLimit; + if (this.searchLimit) countLimit = 0; + options.forEach((el) => { + const optionVal = el.getAttribute("data-title-value").toLocaleLowerCase(); + const directMatch = this.isSearchDirectMatch; + let condition; + if (directMatch) { + condition = !optionVal.includes(val.toLowerCase()) || this.searchLimit && countLimit >= this.searchLimit; + } else { + const regexSafeVal = val ? val.split("").map((char) => /\w/.test(char) ? `${char}[\\W_]*` : "\\W*").join("") : ""; + const regex = new RegExp(regexSafeVal, "i"); + condition = !regex.test(optionVal.trim()) || this.searchLimit && countLimit >= this.searchLimit; + } + if (condition) { + el.classList.add("hidden"); + } else { + el.classList.remove("hidden"); + hasItems = true; + if (this.searchLimit) countLimit++; + } + }); + if (!hasItems) this.dropdown.append(this.searchNoResult); + } + eraseToggleIcon() { + const icon = this.toggle.querySelector("[data-icon]"); + if (icon) { + icon.innerHTML = null; + icon.classList.add("hidden"); + } + } + eraseToggleTitle() { + const title = this.toggle.querySelector("[data-title]"); + if (title) { + title.innerHTML = this.placeholder; + } else { + this.toggleTextWrapper.innerHTML = this.placeholder; + } + } + toggleFn() { + if (this._isOpened) this.close(); + else this.open(); + } + // Accessibility methods + setupAccessibility() { + this.accessibilityComponent = window.HSAccessibilityObserver.registerComponent( + this.wrapper, + { + onEnter: () => { + if (!this._isOpened) { + this.open(); + } else { + const highlighted = this.dropdown.querySelector( + ".hs-select-option-highlighted" + ); + if (highlighted) { + this.onSelectOption( + highlighted.getAttribute("data-value") || "" + ); + if (this._isOpened) { + highlighted.focus(); + } + } + } + }, + onSpace: () => { + if (!this._isOpened) { + this.open(); + } else { + const highlighted = this.dropdown.querySelector( + ".hs-select-option-highlighted" + ); + if (highlighted) { + this.onSelectOption( + highlighted.getAttribute("data-value") || "" + ); + if (this._isOpened) { + highlighted.focus(); + } + } + } + }, + onEsc: () => { + if (this._isOpened) { + this.close(true); + } + }, + onArrow: (evt) => { + if (evt.metaKey) return; + if (!this._isOpened && evt.key === "ArrowDown") { + this.open(); + return; + } + if (this._isOpened) { + switch (evt.key) { + case "ArrowDown": + this.focusMenuItem("next"); + break; + case "ArrowUp": + this.focusMenuItem("prev"); + break; + case "Home": + this.onStartEnd(true); + break; + case "End": + this.onStartEnd(false); + break; + } + } + }, + onHome: () => { + if (this._isOpened) this.onStartEnd(true); + }, + onEnd: () => { + if (this._isOpened) this.onStartEnd(false); + }, + onTab: () => { + if (this._isOpened) this.close(); + } + }, + this._isOpened, + "Select", + ".hs-select", + this.dropdown + ); + } + focusMenuItem(direction) { + const options = Array.from( + this.dropdown.querySelectorAll(":scope > *:not(.hidden)") + ).filter( + (el) => !el.classList.contains("disabled") + ); + if (!options.length) return; + const current = this.dropdown.querySelector( + ".hs-select-option-highlighted" + ); + const currentIndex = current ? options.indexOf(current) : -1; + const nextIndex = direction === "next" ? (currentIndex + 1) % options.length : (currentIndex - 1 + options.length) % options.length; + if (current) current.classList.remove("hs-select-option-highlighted"); + options[nextIndex].classList.add("hs-select-option-highlighted"); + options[nextIndex].focus(); + } + onStartEnd(isStart = true) { + if (!this.dropdown) return; + const options = Array.from( + this.dropdown.querySelectorAll(":scope > *:not(.hidden)") + ).filter( + (el) => !el.classList.contains("disabled") + ); + if (!options.length) return; + const current = this.dropdown.querySelector( + ".hs-select-option-highlighted" + ); + if (current) current.classList.remove("hs-select-option-highlighted"); + const index = isStart ? 0 : options.length - 1; + options[index].classList.add("hs-select-option-highlighted"); + options[index].focus(); + } + // Public methods + destroy() { + if (this.wrapper) { + this.wrapper.removeEventListener("click", this.onWrapperClickListener); + } + if (this.toggle) { + this.toggle.removeEventListener("click", this.onToggleClickListener); + } + if (this.tagsInput) { + this.tagsInput.removeEventListener( + "focus", + this.onTagsInputFocusListener + ); + this.tagsInput.removeEventListener( + "input", + this.onTagsInputInputListener + ); + this.tagsInput.removeEventListener( + "input", + this.onTagsInputInputSecondListener + ); + this.tagsInput.removeEventListener( + "keydown", + this.onTagsInputKeydownListener + ); + } + if (this.search) { + this.search.removeEventListener("input", this.onSearchInputListener); + } + const parent = this.el.parentElement.parentElement; + this.el.classList.add("hidden"); + this.el.style.display = ""; + parent.prepend(this.el); + parent.querySelector(".hs-select").remove(); + this.wrapper = null; + this.disabledObserver?.disconnect(); + this.disabledObserver = null; + window.$hsSelectCollection = window.$hsSelectCollection.filter( + ({ element }) => element.el !== this.el + ); + } + open() { + const currentlyOpened = window?.$hsSelectCollection?.find((el) => el.element.isOpened()) || null; + if (currentlyOpened) currentlyOpened.element.close(); + if (this.animationInProcess) return false; + this.animationInProcess = true; + if (this.dropdownScope === "window") { + this.dropdown.classList.add("invisible"); + } + this.dropdown.classList.remove("hidden"); + if (this.dropdownScope !== "window") this.recalculateDirection(); + setTimeout(() => { + if (this?.toggle?.ariaExpanded) this.toggle.ariaExpanded = "true"; + this.wrapper.classList.add("active"); + this.dropdown.classList.add("opened"); + if (this.dropdown.classList.contains("w-full") && this.dropdownScope === "window") { + this.updateDropdownWidth(); + } + if (this.floatingUIInstance && this.dropdownScope === "window") { + this.floatingUIInstance.update(); + this.dropdown.classList.remove("invisible"); + } + if (this.hasSearch && !this.preventSearchFocus) this.search.focus(); + this.animationInProcess = false; + }); + this._isOpened = true; + if (window.HSAccessibilityObserver && this.accessibilityComponent) { + window.HSAccessibilityObserver.updateComponentState( + this.accessibilityComponent, + this._isOpened + ); + } + } + close(forceFocus = false) { + if (this.animationInProcess) return false; + this.animationInProcess = true; + if (this?.toggle?.ariaExpanded) this.toggle.ariaExpanded = "false"; + this.wrapper.classList.remove("active"); + this.dropdown.classList.remove("opened", "bottom-full", "top-full"); + if (this.dropdownDirectionClasses?.bottom) { + this.dropdown.classList.remove(this.dropdownDirectionClasses.bottom); + } + if (this.dropdownDirectionClasses?.top) { + this.dropdown.classList.remove(this.dropdownDirectionClasses.top); + } + this.dropdown.style.marginTop = ""; + this.dropdown.style.marginBottom = ""; + afterTransition(this.dropdown, () => { + this.dropdown.classList.add("hidden"); + if (this.hasSearch) { + this.search.value = ""; + if (!this.apiUrl) { + this.search.dispatchEvent(new Event("input", { bubbles: true })); + } + this.search.blur(); + } + if (forceFocus) { + if (this.mode?.includes("tags")) this.wrapper.focus(); + else this.toggle.focus(); + } + this.animationInProcess = false; + }); + this.dropdown.querySelector(".hs-select-option-highlighted")?.classList.remove("hs-select-option-highlighted"); + this._isOpened = false; + if (window.HSAccessibilityObserver && this.accessibilityComponent) { + window.HSAccessibilityObserver.updateComponentState( + this.accessibilityComponent, + this._isOpened + ); + } + } + addOption(items) { + let i = `${this.selectOptions.length}`; + const addOption = (option) => { + const { title, val, disabled, selected, options } = option; + const hasOption = !!this.selectOptions.some( + (el) => el.val === val + ); + if (!hasOption) { + this.addSelectOption(title, val, disabled, selected, options); + this.buildOption(title, val, disabled, selected, options, i); + this.buildOriginalOption(title, val, null, disabled, selected, options); + if (selected && !this.isMultiple) this.onSelectOption(val); + } + }; + if (Array.isArray(items)) { + items.forEach((option) => { + addOption(option); + }); + } else { + addOption(items); + } + this.sortElements(this.el, "option"); + this.sortElements(this.dropdown, "[data-value]"); + } + removeOption(values) { + const removeOption = (val, isArray = false) => { + const hasOption = !!this.selectOptions.some( + (el) => el.val === val + ); + if (hasOption) { + this.removeSelectOption(val, isArray); + this.destroyOption(val); + this.destroyOriginalOption(val); + if (this.value === val) { + this.value = null; + this.eraseToggleTitle(); + this.eraseToggleIcon(); + } + } + }; + if (Array.isArray(values)) { + values.forEach((val) => { + removeOption(val, this.isMultiple); + }); + } else { + removeOption(values, this.isMultiple); + } + this.setNewValue(); + this.sortElements(this.el, "option"); + this.sortElements(this.dropdown, "[data-value]"); + } + recalculateDirection() { + if (this?.dropdownVerticalFixedPlacement && (this.dropdown.classList.contains("bottom-full") || this.dropdown.classList.contains("top-full"))) return false; + if (this?.dropdownVerticalFixedPlacement === "top") { + this.dropdown.classList.add("bottom-full"); + this.dropdown.style.marginBottom = `${this.dropdownSpace}px`; + } else if (this?.dropdownVerticalFixedPlacement === "bottom") { + this.dropdown.classList.add("top-full"); + this.dropdown.style.marginTop = `${this.dropdownSpace}px`; + } else if (isEnoughSpace( + this.dropdown, + this.toggle || this.tagsInput, + "bottom", + this.dropdownSpace, + this.viewport + )) { + this.dropdown.classList.remove("bottom-full"); + if (this.dropdownDirectionClasses?.bottom) { + this.dropdown.classList.remove(this.dropdownDirectionClasses.bottom); + } + this.dropdown.style.marginBottom = ""; + this.dropdown.classList.add("top-full"); + if (this.dropdownDirectionClasses?.top) { + this.dropdown.classList.add(this.dropdownDirectionClasses.top); + } + this.dropdown.style.marginTop = `${this.dropdownSpace}px`; + } else { + this.dropdown.classList.remove("top-full"); + if (this.dropdownDirectionClasses?.top) { + this.dropdown.classList.remove(this.dropdownDirectionClasses.top); + } + this.dropdown.style.marginTop = ""; + this.dropdown.classList.add("bottom-full"); + if (this.dropdownDirectionClasses?.bottom) { + this.dropdown.classList.add(this.dropdownDirectionClasses.bottom); + } + this.dropdown.style.marginBottom = `${this.dropdownSpace}px`; + } + } + isOpened() { + return this._isOpened || false; + } + containsElement(element) { + return this.wrapper?.contains(element) || false; + } + // Static methods + static findInCollection(target) { + return window.$hsSelectCollection.find((el) => { + if (target instanceof _HSSelect) return el.element.el === target.el; + else if (typeof target === "string") { + return el.element.el === document.querySelector(target); + } else return el.element.el === target; + }) || null; + } + static getInstance(target, isInstance) { + const elInCollection = window.$hsSelectCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + return elInCollection ? isInstance ? elInCollection : elInCollection.element : null; + } + static autoInit() { + if (!window.$hsSelectCollection) { + window.$hsSelectCollection = []; + window.addEventListener("click", (evt) => { + const evtTarget = evt.target; + _HSSelect.closeCurrentlyOpened(evtTarget); + }); + } + if (window.$hsSelectCollection) { + window.$hsSelectCollection = window.$hsSelectCollection.filter( + ({ element }) => document.contains(element.el) + ); + } + document.querySelectorAll("[data-hs-select]:not(.--prevent-on-load-init)").forEach((el) => { + if (!window.$hsSelectCollection.find( + (elC) => elC?.element?.el === el + )) { + const data = el.getAttribute("data-hs-select"); + const options = data ? JSON.parse(data) : {}; + new _HSSelect(el, options); + } + }); + } + static open(target) { + const instance = _HSSelect.findInCollection(target); + if (instance && !instance.element.isOpened()) instance.element.open(); + } + static close(target) { + const instance = _HSSelect.findInCollection(target); + if (instance && instance.element.isOpened()) instance.element.close(); + } + static closeCurrentlyOpened(evtTarget = null) { + if (!evtTarget.closest(".hs-select.active") && !evtTarget.closest("[data-hs-select-dropdown].opened")) { + const currentlyOpened = window.$hsSelectCollection.filter( + (el) => el.element.isOpened() + ) || null; + if (currentlyOpened) { + currentlyOpened.forEach((el) => { + el.element.close(); + }); + } + } + } + }; + window.addEventListener("load", () => { + HSSelect.autoInit(); + }); + document.addEventListener("scroll", () => { + if (!window.$hsSelectCollection) return false; + const target = window.$hsSelectCollection.find((el) => el.element.isOpened()); + if (target) target.element.recalculateDirection(); + }); + if (typeof window !== "undefined") { + window.HSSelect = HSSelect; + } + select_default = HSSelect; + } +}); + +// node_modules/preline/src/plugins/datatable/index.ts +var datatable_exports = {}; +__export(datatable_exports, { + default: () => datatable_default +}); +var HSDataTable, datatable_default; +var init_datatable = __esm({ + "node_modules/preline/src/plugins/datatable/index.ts"() { + init_utils(); + init_base_plugin(); + HSDataTable = class _HSDataTable extends HSBasePlugin { + concatOptions; + dataTable; + table; + searches; + pageEntitiesList; + pagingList; + pagingPagesList; + pagingPrevList; + pagingNextList; + infoList; + rowSelectingAll; + rowSelectingIndividual; + maxPagesToShow; + isRowSelecting; + pageBtnClasses; + onSearchInputListener; + onPageEntitiesChangeListener; + onSinglePagingClickListener; + onPagingPrevClickListener; + onPagingNextClickListener; + onRowSelectingAllChangeListener; + constructor(el, options, events) { + super(el, options, events); + this.el = typeof el === "string" ? document.querySelector(el) : el; + const columnDefs = []; + Array.from(this.el.querySelectorAll("thead th, thead td")).forEach( + (th, ind) => { + if (th.classList.contains("--exclude-from-ordering")) + columnDefs.push({ + targets: ind, + orderable: false + }); + } + ); + const data = this.el.getAttribute("data-hs-datatable"); + const dataOptions = data ? JSON.parse(data) : {}; + this.concatOptions = { + searching: true, + lengthChange: false, + order: [], + columnDefs: [...columnDefs], + ...dataOptions, + ...options + }; + this.table = this.el.querySelector("table"); + this.searches = Array.from(this.el.querySelectorAll("[data-hs-datatable-search]")) ?? null; + this.pageEntitiesList = Array.from(this.el.querySelectorAll("[data-hs-datatable-page-entities]")) ?? null; + this.pagingList = Array.from(this.el.querySelectorAll("[data-hs-datatable-paging]")) ?? null; + this.pagingPagesList = Array.from(this.el.querySelectorAll("[data-hs-datatable-paging-pages]")) ?? null; + this.pagingPrevList = Array.from(this.el.querySelectorAll("[data-hs-datatable-paging-prev]")) ?? null; + this.pagingNextList = Array.from(this.el.querySelectorAll("[data-hs-datatable-paging-next]")) ?? null; + this.infoList = Array.from(this.el.querySelectorAll("[data-hs-datatable-info]")) ?? null; + if (this.concatOptions?.rowSelectingOptions) + this.rowSelectingAll = (this.concatOptions?.rowSelectingOptions?.selectAllSelector ? document.querySelector( + this.concatOptions?.rowSelectingOptions?.selectAllSelector + ) : document.querySelector("[data-hs-datatable-row-selecting-all]")) ?? null; + if (this.concatOptions?.rowSelectingOptions) + this.rowSelectingIndividual = this.concatOptions?.rowSelectingOptions?.individualSelector ?? "[data-hs-datatable-row-selecting-individual]"; + if (this.pageEntitiesList.length) this.concatOptions.pageLength = parseInt(this.pageEntitiesList[0].value); + this.maxPagesToShow = 3; + this.isRowSelecting = !!this.concatOptions?.rowSelectingOptions; + this.pageBtnClasses = this.concatOptions?.pagingOptions?.pageBtnClasses ?? null; + this.onSearchInputListener = []; + this.onPageEntitiesChangeListener = []; + this.onSinglePagingClickListener = []; + this.onPagingPrevClickListener = []; + this.onPagingNextClickListener = []; + this.init(); + } + init() { + this.createCollection(window.$hsDataTableCollection, this); + this.initTable(); + if (this.searches.length) this.initSearch(); + if (this.pageEntitiesList.length) this.initPageEntities(); + if (this.pagingList.length) this.initPaging(); + if (this.pagingPagesList.length) this.buildPagingPages(); + if (this.pagingPrevList.length) this.initPagingPrev(); + if (this.pagingNextList.length) this.initPagingNext(); + if (this.infoList.length) this.initInfo(); + if (this.isRowSelecting) this.initRowSelecting(); + } + initTable() { + this.dataTable = new DataTable(this.table, this.concatOptions); + if (this.isRowSelecting) this.triggerChangeEventToRow(); + this.dataTable.on("draw", () => { + if (this.isRowSelecting) this.updateSelectAllCheckbox(); + if (this.isRowSelecting) this.triggerChangeEventToRow(); + this.updateInfo(); + this.pagingPagesList.forEach((el) => this.updatePaging(el)); + }); + } + searchInput(evt) { + this.onSearchInput(evt.target.value); + } + pageEntitiesChange(evt) { + this.onEntitiesChange(parseInt(evt.target.value), evt.target); + } + pagingPrevClick() { + this.onPrevClick(); + } + pagingNextClick() { + this.onNextClick(); + } + rowSelectingAllChange() { + this.onSelectAllChange(); + } + singlePagingClick(count) { + this.onPageClick(count); + } + // Search + initSearch() { + this.searches.forEach((el) => { + this.onSearchInputListener.push({ + el, + fn: debounce((evt) => this.searchInput(evt)) + }); + el.addEventListener("input", this.onSearchInputListener.find((search) => search.el === el).fn); + }); + } + onSearchInput(val) { + this.dataTable.search(val).draw(); + } + // Page entities + initPageEntities() { + this.pageEntitiesList.forEach((el) => { + this.onPageEntitiesChangeListener.push({ + el, + fn: (evt) => this.pageEntitiesChange(evt) + }); + el.addEventListener("change", this.onPageEntitiesChangeListener.find((pageEntity) => pageEntity.el === el).fn); + }); + } + onEntitiesChange(entities, target) { + const otherEntities = this.pageEntitiesList.filter((el) => el !== target); + if (otherEntities.length) otherEntities.forEach((el) => { + if (window.HSSelect) { + const hsSelectInstance = window.HSSelect.getInstance(el, true); + if (hsSelectInstance) hsSelectInstance.element.setValue(`${entities}`); + } else el.value = `${entities}`; + }); + this.dataTable.page.len(entities).draw(); + } + // Info + initInfo() { + this.infoList.forEach((el) => { + this.initInfoFrom(el); + this.initInfoTo(el); + this.initInfoLength(el); + }); + } + initInfoFrom(el) { + const infoFrom = el.querySelector("[data-hs-datatable-info-from]") ?? null; + const { start } = this.dataTable.page.info(); + if (infoFrom) infoFrom.innerText = `${start + 1}`; + } + initInfoTo(el) { + const infoTo = el.querySelector("[data-hs-datatable-info-to]") ?? null; + const { end } = this.dataTable.page.info(); + if (infoTo) infoTo.innerText = `${end}`; + } + initInfoLength(el) { + const infoLength = el.querySelector("[data-hs-datatable-info-length]") ?? null; + const { recordsTotal } = this.dataTable.page.info(); + if (infoLength) infoLength.innerText = `${recordsTotal}`; + } + updateInfo() { + this.initInfo(); + } + // Paging + initPaging() { + this.pagingList.forEach((el) => this.hidePagingIfSinglePage(el)); + } + hidePagingIfSinglePage(el) { + const { pages } = this.dataTable.page.info(); + if (pages < 2) { + el.classList.add("hidden"); + el.style.display = "none"; + } else { + el.classList.remove("hidden"); + el.style.display = ""; + } + } + initPagingPrev() { + this.pagingPrevList.forEach((el) => { + this.onPagingPrevClickListener.push({ + el, + fn: () => this.pagingPrevClick() + }); + el.addEventListener("click", this.onPagingPrevClickListener.find((pagingPrev) => pagingPrev.el === el).fn); + }); + } + onPrevClick() { + this.dataTable.page("previous").draw("page"); + } + disablePagingArrow(el, statement) { + if (statement) { + el.classList.add("disabled"); + el.setAttribute("disabled", "disabled"); + } else { + el.classList.remove("disabled"); + el.removeAttribute("disabled"); + } + } + initPagingNext() { + this.pagingNextList.forEach((el) => { + this.onPagingNextClickListener.push({ + el, + fn: () => this.pagingNextClick() + }); + el.addEventListener("click", this.onPagingNextClickListener.find((pagingNext) => pagingNext.el === el).fn); + }); + } + onNextClick() { + this.dataTable.page("next").draw("page"); + } + buildPagingPages() { + this.pagingPagesList.forEach((el) => this.updatePaging(el)); + } + updatePaging(pagingPages) { + const { page, pages, length } = this.dataTable.page.info(); + const totalRecords = this.dataTable.rows({ search: "applied" }).count(); + const totalPages = Math.ceil(totalRecords / length); + const currentPage = page + 1; + let startPage = Math.max(1, currentPage - Math.floor(this.maxPagesToShow / 2)); + let endPage = Math.min(totalPages, startPage + (this.maxPagesToShow - 1)); + if (endPage - startPage + 1 < this.maxPagesToShow) { + startPage = Math.max(1, endPage - this.maxPagesToShow + 1); + } + pagingPages.innerHTML = ""; + if (startPage > 1) { + this.buildPagingPage(1, pagingPages); + if (startPage > 2) pagingPages.appendChild(htmlToElement(`...`)); + } + for (let i = startPage; i <= endPage; i++) { + this.buildPagingPage(i, pagingPages); + } + if (endPage < totalPages) { + if (endPage < totalPages - 1) pagingPages.appendChild(htmlToElement(`...`)); + this.buildPagingPage(totalPages, pagingPages); + } + this.pagingPrevList.forEach((el) => this.disablePagingArrow(el, page === 0)); + this.pagingNextList.forEach((el) => this.disablePagingArrow(el, page === pages - 1)); + this.pagingList.forEach((el) => this.hidePagingIfSinglePage(el)); + } + buildPagingPage(counter, target) { + const { page } = this.dataTable.page.info(); + const pageEl = htmlToElement(``); + pageEl.innerText = `${counter}`; + pageEl.setAttribute("data-page", `${counter}`); + if (this.pageBtnClasses) classToClassList(this.pageBtnClasses, pageEl); + if (page === counter - 1) pageEl.classList.add("active"); + this.onSinglePagingClickListener.push({ + el: pageEl, + fn: () => this.singlePagingClick(counter) + }); + pageEl.addEventListener("click", this.onSinglePagingClickListener.find((singlePaging) => singlePaging.el === pageEl).fn); + target.append(pageEl); + } + onPageClick(counter) { + this.dataTable.page(counter - 1).draw("page"); + } + // Select row + initRowSelecting() { + this.onRowSelectingAllChangeListener = () => this.rowSelectingAllChange(); + this.rowSelectingAll.addEventListener( + "change", + this.onRowSelectingAllChangeListener + ); + } + triggerChangeEventToRow() { + this.table.querySelectorAll(`tbody ${this.rowSelectingIndividual}`).forEach((el) => { + el.addEventListener("change", () => { + this.updateSelectAllCheckbox(); + }); + }); + } + onSelectAllChange() { + let isChecked = this.rowSelectingAll.checked; + const visibleRows = Array.from( + this.dataTable.rows({ page: "current", search: "applied" }).nodes() + ); + visibleRows.forEach((el) => { + const checkbox = el.querySelector(this.rowSelectingIndividual); + if (checkbox) checkbox.checked = isChecked; + }); + this.updateSelectAllCheckbox(); + } + updateSelectAllCheckbox() { + const searchRelatedItems = this.dataTable.rows({ search: "applied" }).count(); + if (!searchRelatedItems) { + this.rowSelectingAll.checked = false; + return false; + } + let isChecked = true; + const visibleRows = Array.from( + this.dataTable.rows({ + page: "current", + search: "applied" + }).nodes() + ); + visibleRows.forEach((el) => { + const checkbox = el.querySelector(this.rowSelectingIndividual); + if (checkbox && !checkbox.checked) { + isChecked = false; + return false; + } + }); + this.rowSelectingAll.checked = isChecked; + } + // Public methods + destroy() { + if (this.searches) { + this.onSearchInputListener.forEach(({ el, fn }) => el.removeEventListener("click", fn)); + } + if (this.pageEntitiesList) this.onPageEntitiesChangeListener.forEach(({ el, fn }) => el.removeEventListener("change", fn)); + if (this.pagingPagesList.length) { + this.onSinglePagingClickListener.forEach(({ el, fn }) => el.removeEventListener("click", fn)); + this.pagingPagesList.forEach((el) => el.innerHTML = ""); + } + if (this.pagingPrevList.length) this.onPagingPrevClickListener.forEach(({ el, fn }) => el.removeEventListener("click", fn)); + if (this.pagingNextList.length) this.onPagingNextClickListener.forEach(({ el, fn }) => el.removeEventListener("click", fn)); + if (this.rowSelectingAll) + this.rowSelectingAll.removeEventListener( + "change", + this.onRowSelectingAllChangeListener + ); + this.dataTable.destroy(); + this.rowSelectingAll = null; + this.rowSelectingIndividual = null; + window.$hsDataTableCollection = window.$hsDataTableCollection.filter(({ element }) => element.el !== this.el); + } + // Static methods + static getInstance(target, isInstance) { + const elInCollection = window.$hsDataTableCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + return elInCollection ? isInstance ? elInCollection : elInCollection.element.el : null; + } + static autoInit() { + if (!window.$hsDataTableCollection) window.$hsDataTableCollection = []; + if (window.$hsDataTableCollection) + window.$hsDataTableCollection = window.$hsDataTableCollection.filter( + ({ element }) => document.contains(element.el) + ); + document.querySelectorAll("[data-hs-datatable]:not(.--prevent-on-load-init)").forEach((el) => { + if (!window.$hsDataTableCollection.find( + (elC) => elC?.element?.el === el + )) + new _HSDataTable(el); + }); + } + }; + window.addEventListener("load", () => { + if (document.querySelectorAll( + "[data-hs-datatable]:not(.--prevent-on-load-init)" + ).length) { + if (typeof jQuery === "undefined") + console.error( + "HSDataTable: jQuery is not available, please add it to the page." + ); + if (typeof DataTable === "undefined") + console.error( + "HSDataTable: DataTable is not available, please add it to the page." + ); + } + if (typeof DataTable !== "undefined" && typeof jQuery !== "undefined") + HSDataTable.autoInit(); + }); + if (typeof window !== "undefined") { + window.HSDataTable = HSDataTable; + } + datatable_default = HSDataTable; + } +}); + +// node_modules/preline/src/plugins/file-upload/index.ts +var file_upload_exports = {}; +__export(file_upload_exports, { + default: () => file_upload_default +}); +var HSFileUpload, file_upload_default; +var init_file_upload = __esm({ + "node_modules/preline/src/plugins/file-upload/index.ts"() { + init_utils(); + init_base_plugin(); + if (typeof Dropzone !== "undefined") Dropzone.autoDiscover = false; + HSFileUpload = class _HSFileUpload extends HSBasePlugin { + concatOptions; + previewTemplate; + extensions = {}; + singleton; + dropzone; + onReloadButtonClickListener; + onTempFileInputChangeListener; + constructor(el, options, events) { + super(el, options, events); + this.el = typeof el === "string" ? document.querySelector(el) : el; + const data = this.el.getAttribute("data-hs-file-upload"); + const dataOptions = data ? JSON.parse(data) : {}; + this.previewTemplate = this.el.querySelector("[data-hs-file-upload-preview]")?.innerHTML || `
+
+
+ +
+

+ . +

+

+
+
+
+ +
+
+
+
+
+
+
+ + 0% + +
+
+
`; + this.extensions = _.merge( + { + default: { + icon: '', + class: "size-5" + }, + xls: { + icon: '', + class: "size-5" + }, + doc: { + icon: '', + class: "size-5" + }, + zip: { + icon: '', + class: "size-5" + } + }, + dataOptions.extensions + ); + this.singleton = dataOptions.singleton; + this.concatOptions = { + clickable: this.el.querySelector( + "[data-hs-file-upload-trigger]" + ), + previewsContainer: this.el.querySelector( + "[data-hs-file-upload-previews]" + ), + addRemoveLinks: false, + previewTemplate: this.previewTemplate, + autoHideTrigger: false, + ...dataOptions, + ...options + }; + this.onReloadButtonClickListener = []; + this.onTempFileInputChangeListener = []; + this.init(); + } + tempFileInputChange(event, file) { + const input = event.target; + const newFile = input.files?.[0]; + if (newFile) { + const dzNewFile = newFile; + dzNewFile.status = Dropzone.ADDED; + dzNewFile.accepted = true; + dzNewFile.previewElement = file.previewElement; + dzNewFile.previewTemplate = file.previewTemplate; + dzNewFile.previewsContainer = file.previewsContainer; + this.dropzone.removeFile(file); + this.dropzone.addFile(dzNewFile); + } + } + reloadButtonClick(evt, file) { + evt.preventDefault(); + evt.stopPropagation(); + const tempFileInput = document.createElement("input"); + tempFileInput.type = "file"; + this.onTempFileInputChangeListener.push({ + el: tempFileInput, + fn: (event) => this.tempFileInputChange(event, file) + }); + tempFileInput.click(); + tempFileInput.addEventListener( + "change", + this.onTempFileInputChangeListener.find((el) => el.el === tempFileInput).fn + ); + } + init() { + this.createCollection(window.$hsFileUploadCollection, this); + this.initDropzone(); + } + initDropzone() { + const clear = this.el.querySelector( + "[data-hs-file-upload-clear]" + ); + const pseudoTriggers = Array.from( + this.el.querySelectorAll("[data-hs-file-upload-pseudo-trigger]") + ); + this.dropzone = new Dropzone(this.el, this.concatOptions); + this.dropzone.on("addedfile", (file) => this.onAddFile(file)); + this.dropzone.on("removedfile", () => this.onRemoveFile()); + this.dropzone.on( + "uploadprogress", + (file, progress) => this.onUploadProgress(file, progress) + ); + this.dropzone.on("complete", (file) => this.onComplete(file)); + if (clear) + clear.onclick = () => { + if (this.dropzone.files.length) this.dropzone.removeAllFiles(true); + }; + if (pseudoTriggers.length) + pseudoTriggers.forEach((el) => { + el.onclick = () => { + if (this.concatOptions?.clickable) + (this.concatOptions?.clickable).click(); + }; + }); + } + // Public methods + destroy() { + this.onTempFileInputChangeListener.forEach((el) => { + el.el.removeEventListener("change", el.fn); + }); + this.onTempFileInputChangeListener = null; + this.onReloadButtonClickListener.forEach((el) => { + el.el.removeEventListener("click", el.fn); + }); + this.onReloadButtonClickListener = null; + this.dropzone.destroy(); + window.$hsFileUploadCollection = window.$hsFileUploadCollection.filter( + ({ element }) => element.el !== this.el + ); + } + onAddFile(file) { + const { previewElement } = file; + const reloadButton = file.previewElement.querySelector( + "[data-hs-file-upload-reload]" + ); + if (!previewElement) return false; + if (this.singleton && this.dropzone.files.length > 1) + this.dropzone.removeFile(this.dropzone.files[0]); + if (reloadButton) { + this.onReloadButtonClickListener.push({ + el: reloadButton, + fn: (evt) => this.reloadButtonClick(evt, file) + }); + reloadButton.addEventListener( + "click", + this.onReloadButtonClickListener.find((el) => el.el === reloadButton).fn + ); + } + this.previewAccepted(file); + } + previewAccepted(file) { + const { previewElement } = file; + const fileInfo = this.splitFileName(file.name); + const fileName = previewElement.querySelector( + "[data-hs-file-upload-file-name]" + ); + const fileExt = previewElement.querySelector( + "[data-hs-file-upload-file-ext]" + ); + const fileSize = previewElement.querySelector( + "[data-hs-file-upload-file-size]" + ); + const fileIcon = previewElement.querySelector( + "[data-hs-file-upload-file-icon]" + ); + const trigger = this.el.querySelector( + "[data-hs-file-upload-trigger]" + ); + const preview = previewElement.querySelector( + "[data-dz-thumbnail]" + ); + const remove = previewElement.querySelector( + "[data-hs-file-upload-remove]" + ); + if (fileName) fileName.textContent = fileInfo.name; + if (fileExt) fileExt.textContent = fileInfo.extension; + if (fileSize) fileSize.textContent = this.formatFileSize(file.size); + if (preview) { + if (file.type.includes("image/")) preview.classList.remove("hidden"); + else this.setIcon(fileInfo.extension, fileIcon); + } + if (this.dropzone.files.length > 0 && this.concatOptions.autoHideTrigger) + trigger.style.display = "none"; + if (remove) remove.onclick = () => this.dropzone.removeFile(file); + } + onRemoveFile() { + const trigger = this.el.querySelector( + "[data-hs-file-upload-trigger]" + ); + if (this.dropzone.files.length === 0 && this.concatOptions.autoHideTrigger) + trigger.style.display = ""; + } + onUploadProgress(file, progress) { + const { previewElement } = file; + if (!previewElement) return false; + const progressBar = previewElement.querySelector( + "[data-hs-file-upload-progress-bar]" + ); + const progressBarPane = previewElement.querySelector( + "[data-hs-file-upload-progress-bar-pane]" + ); + const progressBarValue = previewElement.querySelector( + "[data-hs-file-upload-progress-bar-value]" + ); + const currentProgress = Math.floor(progress); + if (progressBar) + progressBar.setAttribute("aria-valuenow", `${currentProgress}`); + if (progressBarPane) progressBarPane.style.width = `${currentProgress}%`; + if (progressBarValue) progressBarValue.innerText = `${currentProgress}`; + } + onComplete(file) { + const { previewElement } = file; + if (!previewElement) return false; + previewElement.classList.add("complete"); + } + setIcon(ext, file) { + const icon = this.createIcon(ext); + file.append(icon); + } + createIcon(ext) { + const icon = this.extensions[ext]?.icon ? htmlToElement(this.extensions[ext].icon) : htmlToElement(this.extensions.default.icon); + classToClassList( + this.extensions[ext]?.class ? this.extensions[ext].class : this.extensions.default.class, + icon + ); + return icon; + } + formatFileSize(size2) { + if (size2 < 1024) { + return size2.toFixed(2) + " B"; + } else if (size2 < 1024 * 1024) { + return (size2 / 1024).toFixed(2) + " KB"; + } else if (size2 < 1024 * 1024 * 1024) { + return (size2 / (1024 * 1024)).toFixed(2) + " MB"; + } else if (size2 < 1024 * 1024 * 1024 * 1024) { + return (size2 / (1024 * 1024 * 1024)).toFixed(2) + " GB"; + } else { + return (size2 / (1024 * 1024 * 1024 * 1024)).toFixed(2) + " TB"; + } + } + splitFileName(file) { + let dotIndex = file.lastIndexOf("."); + if (dotIndex == -1) return { name: file, extension: "" }; + return { + name: file.substring(0, dotIndex), + extension: file.substring(dotIndex + 1) + }; + } + // Static methods + static getInstance(target, isInstance) { + const elInCollection = window.$hsFileUploadCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + return elInCollection ? isInstance ? elInCollection : elInCollection.element.el : null; + } + static autoInit() { + if (!window.$hsFileUploadCollection) window.$hsFileUploadCollection = []; + if (window.$hsFileUploadCollection) + window.$hsFileUploadCollection = window.$hsFileUploadCollection.filter( + ({ element }) => document.contains(element.el) + ); + document.querySelectorAll("[data-hs-file-upload]:not(.--prevent-on-load-init)").forEach((el) => { + if (!window.$hsFileUploadCollection.find( + (elC) => elC?.element?.el === el + )) + new _HSFileUpload(el); + }); + } + }; + window.addEventListener("load", () => { + if (document.querySelectorAll( + "[data-hs-file-upload]:not(.--prevent-on-load-init)" + ).length) { + if (typeof _ === "undefined") + console.error( + "HSFileUpload: Lodash is not available, please add it to the page." + ); + if (typeof Dropzone === "undefined") + console.error( + "HSFileUpload: Dropzone is not available, please add it to the page." + ); + } + if (typeof _ !== "undefined" && typeof Dropzone !== "undefined") { + HSFileUpload.autoInit(); + } + }); + if (typeof window !== "undefined") { + window.HSFileUpload = HSFileUpload; + } + file_upload_default = HSFileUpload; + } +}); + +// node_modules/preline/src/plugins/range-slider/index.ts +var range_slider_exports = {}; +__export(range_slider_exports, { + default: () => range_slider_default +}); +var HSRangeSlider, range_slider_default; +var init_range_slider = __esm({ + "node_modules/preline/src/plugins/range-slider/index.ts"() { + init_base_plugin(); + HSRangeSlider = class _HSRangeSlider extends HSBasePlugin { + concatOptions; + wrapper; + currentValue; + format; + icons; + constructor(el, options, events) { + super(el, options, events); + const data = el.getAttribute("data-hs-range-slider"); + const dataOptions = data ? JSON.parse(data) : {}; + this.concatOptions = { + ...dataOptions, + ...options, + cssClasses: { + ...noUiSlider.cssClasses, + ...this.processClasses(dataOptions.cssClasses) + } + }; + this.wrapper = this.concatOptions.wrapper || el.closest(".hs-range-slider-wrapper") || null; + this.currentValue = this.concatOptions.currentValue ? Array.from(this.concatOptions.currentValue) : Array.from( + this.wrapper?.querySelectorAll(".hs-range-slider-current-value") || [] + ); + this.icons = this.concatOptions.icons || {}; + this.init(); + } + get formattedValue() { + const values = this.el.noUiSlider.get(); + if (Array.isArray(values) && this.format) { + const updateValues = []; + values.forEach((val) => { + updateValues.push(this.format.to(val)); + }); + return updateValues; + } else if (this.format) { + return this.format.to(values); + } else { + return values; + } + } + processClasses(cl) { + const mergedClasses = {}; + Object.keys(cl).forEach((key) => { + if (key) mergedClasses[key] = `${noUiSlider.cssClasses[key]} ${cl[key]}`; + }); + return mergedClasses; + } + init() { + this.createCollection(window.$hsRangeSliderCollection, this); + if (typeof this.concatOptions?.formatter === "object" ? this.concatOptions?.formatter?.type === "thousandsSeparatorAndDecimalPoints" : this.concatOptions?.formatter === "thousandsSeparatorAndDecimalPoints") { + this.thousandsSeparatorAndDecimalPointsFormatter(); + } else if (typeof this.concatOptions?.formatter === "object" ? this.concatOptions?.formatter?.type === "integer" : this.concatOptions?.formatter === "integer") { + this.integerFormatter(); + } else if (typeof this.concatOptions?.formatter === "object" && (this.concatOptions?.formatter?.prefix || this.concatOptions?.formatter?.postfix)) { + this.prefixOrPostfixFormatter(); + } + noUiSlider.create(this.el, this.concatOptions); + if (this.currentValue && this.currentValue.length > 0) { + this.el.noUiSlider.on( + "update", + (values) => { + this.updateCurrentValue(values); + } + ); + } + if (this.concatOptions.disabled) this.setDisabled(); + if (this.icons.handle) this.buildHandleIcon(); + } + formatValue(val) { + let result = ""; + if (typeof this.concatOptions?.formatter === "object") { + if (this.concatOptions?.formatter?.prefix) { + result += this.concatOptions?.formatter?.prefix; + } + result += val; + if (this.concatOptions?.formatter?.postfix) { + result += this.concatOptions?.formatter?.postfix; + } + } else result += val; + return result; + } + integerFormatter() { + this.format = { + to: (val) => this.formatValue(Math.round(val)), + from: (val) => Math.round(+val) + }; + if (this.concatOptions?.tooltips) this.concatOptions.tooltips = this.format; + } + prefixOrPostfixFormatter() { + this.format = { + to: (val) => this.formatValue(val), + from: (val) => +val + }; + if (this.concatOptions?.tooltips) this.concatOptions.tooltips = this.format; + } + thousandsSeparatorAndDecimalPointsFormatter() { + this.format = { + to: (val) => this.formatValue( + new Intl.NumberFormat("en-US", { + minimumFractionDigits: 2, + maximumFractionDigits: 2 + }).format(val) + ), + from: (val) => parseFloat(val.replace(/,/g, "")) + }; + if (this.concatOptions?.tooltips) this.concatOptions.tooltips = this.format; + } + setDisabled() { + this.el.setAttribute("disabled", "disabled"); + this.el.classList.add("disabled"); + } + buildHandleIcon() { + if (!this.icons.handle) return false; + const handle = this.el.querySelector(".noUi-handle"); + if (!handle) return false; + handle.innerHTML = this.icons.handle; + } + updateCurrentValue(values) { + if (!this.currentValue || this.currentValue.length === 0) return; + values.forEach((value, index) => { + const element = this.currentValue?.[index]; + if (!element) return; + const formattedValue = this.format ? this.format.to(value).toString() : value.toString(); + if (element instanceof HTMLInputElement) { + element.value = formattedValue; + } else { + element.textContent = formattedValue; + } + }); + } + // Public methods + destroy() { + this.el.noUiSlider.destroy(); + this.format = null; + window.$hsRangeSliderCollection = window.$hsRangeSliderCollection.filter( + ({ element }) => element.el !== this.el + ); + } + // Static methods + static getInstance(target, isInstance = false) { + const elInCollection = window.$hsRangeSliderCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + return elInCollection ? isInstance ? elInCollection : elInCollection.element.el : null; + } + static autoInit() { + if (!window.$hsRangeSliderCollection) window.$hsRangeSliderCollection = []; + if (window.$hsRangeSliderCollection) { + window.$hsRangeSliderCollection = window.$hsRangeSliderCollection.filter( + ({ element }) => document.contains(element.el) + ); + } + document.querySelectorAll("[data-hs-range-slider]:not(.--prevent-on-load-init)").forEach((el) => { + if (!window.$hsRangeSliderCollection.find( + (elC) => elC?.element?.el === el + )) { + new _HSRangeSlider(el); + } + }); + } + }; + window.addEventListener("load", () => { + HSRangeSlider.autoInit(); + }); + if (typeof window !== "undefined") { + window.HSRangeSlider = HSRangeSlider; + } + range_slider_default = HSRangeSlider; + } +}); + +// node_modules/vanilla-calendar-pro/index.mjs +function getOffset(e2) { + if (!e2 || !e2.getBoundingClientRect) return { top: 0, bottom: 0, left: 0, right: 0 }; + const t = e2.getBoundingClientRect(), n = document.documentElement; + return { bottom: t.bottom, right: t.right, top: t.top + window.scrollY - n.clientTop, left: t.left + window.scrollX - n.clientLeft }; +} +function getViewportDimensions() { + return { vw: Math.max(document.documentElement.clientWidth || 0, window.innerWidth || 0), vh: Math.max(document.documentElement.clientHeight || 0, window.innerHeight || 0) }; +} +function getWindowScrollPosition() { + return { left: window.scrollX || document.documentElement.scrollLeft || 0, top: window.scrollY || document.documentElement.scrollTop || 0 }; +} +function calculateAvailableSpace(e2) { + const { top: t, left: n } = getWindowScrollPosition(), { top: a, left: l } = getOffset(e2), { vh: o, vw: s } = getViewportDimensions(), i = a - t, r = l - n; + return { top: i, bottom: o - (i + e2.clientHeight), left: r, right: s - (r + e2.clientWidth) }; +} +function getAvailablePosition(e2, t, n = 5) { + const a = { top: true, bottom: true, left: true, right: true }, l = []; + if (!t || !e2) return { canShow: a, parentPositions: l }; + const { bottom: o, top: s } = calculateAvailableSpace(e2), { top: i, left: r } = getOffset(e2), { height: c, width: d } = t.getBoundingClientRect(), { vh: u, vw: m } = getViewportDimensions(), h = m / 2, p = u / 2; + return [{ condition: i < p, position: "top" }, { condition: i > p, position: "bottom" }, { condition: r < h, position: "left" }, { condition: r > h, position: "right" }].forEach(({ condition: e3, position: t2 }) => { + e3 && l.push(t2); + }), Object.assign(a, { top: c <= s - n, bottom: c <= o - n, left: d <= r, right: d <= m - r }), { canShow: a, parentPositions: l }; +} +function findBestPickerPosition(e2, t) { + const n = "left"; + if (!t || !e2) return n; + const { canShow: a, parentPositions: l } = getAvailablePosition(e2, t), o = a.left && a.right; + return (o && a.bottom ? "center" : o && a.top ? ["top", "center"] : Array.isArray(l) ? ["bottom" === l[0] ? "top" : "bottom", ...l.slice(1)] : l) || n; +} +var __defProp2, __defProps, __getOwnPropDescs, __getOwnPropSymbols, __hasOwnProp2, __propIsEnum, __defNormalProp, __spreadValues, __spreadProps, __publicField, errorMessages, setContext, destroy, hide2, handleDay, createDatePopup, getDate, getDateString, parseDates, updateAttribute, setDateModifier, getLocaleString, getWeekNumber, addWeekNumberForDate, setDaysAsDisabled, createDate, createDatesFromCurrentMonth, createDatesFromNextMonth, createDatesFromPrevMonth, createWeekNumbers, createDates, layoutDefault, layoutMonths, layoutMultiple, layoutYears, ArrowNext, ArrowPrev, ControlTime, DateRangeTooltip, Dates, Month, Months, Week, WeekNumbers, Year, Years, components, getComponent, parseLayout, parseMultipleLayout, createLayouts, setVisibilityArrows, handleDefaultType, handleYearType, visibilityArrows, visibilityHandler, visibilityTitle, setYearModifier, getColumnID, createMonthEl, createMonths, TimeInput, TimeRange, handleActions, transformTime24, handleClickKeepingTime, transformTime12, updateInputAndRange, updateKeepingTime$1, handleInput$1, updateInputAndTime, updateKeepingTime, handleRange, handleMouseOver, handleMouseOut, handleTime, createTime, createWeek, createYearEl, createYears, trackChangesHTMLElement, haveListener, setTheme, trackChangesThemeInSystemSettings, detectTheme, handleTheme, capitalizeFirstLetter, getLocaleWeekday, getLocaleMonth, getLocale, create, handleArrowKeys, handleMonth, handleClickArrow, canToggleSelection, handleSelectDate, createDateRangeTooltip, state, addHoverEffect, removeHoverEffect, handleHoverDatesEvent, handleHoverSelectedDatesRangeEvent, optimizedHoverHandler, optimizedHandleHoverDatesEvent, optimizedHandleHoverSelectedDatesRangeEvent, handleCancelSelectionDates, handleMouseLeave, updateDisabledDates, handleSelectDateRange, updateDateModifier, handleClickDate, typeClick, getValue, handleMultipleYearSelection, handleMultipleMonthSelection, handleItemClick, handleClickType, handleClickMonthOrYear, handleClickWeekNumber, handleClickWeekDay, handleClick, initMonthsCount, getLocalDate, resolveDate, initRange, initSelectedDates, displayClosestValidDate, setInitialContext, initSelectedMonthYear, initTime, initAllVariables, reset, createToInput, handleInput, init, update, replaceProperties, set, setPosition, show, labels, styles, OptionsCalendar, _Calendar, Calendar; +var init_vanilla_calendar_pro = __esm({ + "node_modules/vanilla-calendar-pro/index.mjs"() { + __defProp2 = Object.defineProperty; + __defProps = Object.defineProperties; + __getOwnPropDescs = Object.getOwnPropertyDescriptors; + __getOwnPropSymbols = Object.getOwnPropertySymbols; + __hasOwnProp2 = Object.prototype.hasOwnProperty; + __propIsEnum = Object.prototype.propertyIsEnumerable; + __defNormalProp = (e2, t, n) => t in e2 ? __defProp2(e2, t, { enumerable: true, configurable: true, writable: true, value: n }) : e2[t] = n; + __spreadValues = (e2, t) => { + for (var n in t || (t = {})) __hasOwnProp2.call(t, n) && __defNormalProp(e2, n, t[n]); + if (__getOwnPropSymbols) for (var n of __getOwnPropSymbols(t)) __propIsEnum.call(t, n) && __defNormalProp(e2, n, t[n]); + return e2; + }; + __spreadProps = (e2, t) => __defProps(e2, __getOwnPropDescs(t)); + __publicField = (e2, t, n) => (__defNormalProp(e2, "symbol" != typeof t ? t + "" : t, n), n); + errorMessages = { notFoundSelector: (e2) => `${e2} is not found, check the first argument passed to new Calendar.`, notInit: 'The calendar has not been initialized, please initialize it using the "init()" method first.', notLocale: "You specified an incorrect language label or did not specify the required number of values \u200B\u200Bfor \xABlocale.weekdays\xBB or \xABlocale.months\xBB.", incorrectTime: "The value of the time property can be: false, 12 or 24.", incorrectMonthsCount: "For the \xABmultiple\xBB calendar type, the \xABdisplayMonthsCount\xBB parameter can have a value from 2 to 12, and for all others it cannot be greater than 1." }; + setContext = (e2, t, n) => { + e2.context[t] = n; + }; + destroy = (e2) => { + var t, n, a, l, o; + if (!e2.context.isInit) throw new Error(errorMessages.notInit); + e2.inputMode ? (null == (t = e2.context.mainElement.parentElement) || t.removeChild(e2.context.mainElement), null == (a = null == (n = e2.context.inputElement) ? void 0 : n.replaceWith) || a.call(n, e2.context.originalElement), setContext(e2, "inputElement", void 0)) : null == (o = (l = e2.context.mainElement).replaceWith) || o.call(l, e2.context.originalElement), setContext(e2, "mainElement", e2.context.originalElement), e2.onDestroy && e2.onDestroy(e2); + }; + hide2 = (e2) => { + e2.context.isShowInInputMode && e2.context.currentType && (e2.context.mainElement.dataset.vcCalendarHidden = "", setContext(e2, "isShowInInputMode", false), e2.context.cleanupHandlers[0] && (e2.context.cleanupHandlers.forEach((e3) => e3()), setContext(e2, "cleanupHandlers", [])), e2.onHide && e2.onHide(e2)); + }; + handleDay = (e2, t, n, a) => { + var l; + const o = a.querySelector(`[data-vc-date="${t}"]`), s = null == o ? void 0 : o.querySelector("[data-vc-date-btn]"); + if (!o || !s) return; + if ((null == n ? void 0 : n.modifier) && s.classList.add(...n.modifier.trim().split(" ")), !(null == n ? void 0 : n.html)) return; + const i = document.createElement("div"); + i.className = e2.styles.datePopup, i.dataset.vcDatePopup = "", i.innerHTML = e2.sanitizerHTML(n.html), s.ariaExpanded = "true", s.ariaLabel = `${s.ariaLabel}, ${null == (l = null == i ? void 0 : i.textContent) ? void 0 : l.replace(/^\s+|\s+(?=\s)|\s+$/g, "").replace(/ /g, " ")}`, o.appendChild(i), requestAnimationFrame(() => { + if (!i) return; + const { canShow: e3 } = getAvailablePosition(o, i), t2 = e3.bottom ? o.offsetHeight : -i.offsetHeight, n2 = e3.left && !e3.right ? o.offsetWidth - i.offsetWidth / 2 : !e3.left && e3.right ? i.offsetWidth / 2 : 0; + Object.assign(i.style, { left: `${n2}px`, top: `${t2}px` }); + }); + }; + createDatePopup = (e2, t) => { + var n; + e2.popups && (null == (n = Object.entries(e2.popups)) || n.forEach(([n2, a]) => handleDay(e2, n2, a, t))); + }; + getDate = (e2) => /* @__PURE__ */ new Date(`${e2}T00:00:00`); + getDateString = (e2) => `${e2.getFullYear()}-${String(e2.getMonth() + 1).padStart(2, "0")}-${String(e2.getDate()).padStart(2, "0")}`; + parseDates = (e2) => e2.reduce((e3, t) => { + if (t instanceof Date || "number" == typeof t) { + const n = t instanceof Date ? t : new Date(t); + e3.push(n.toISOString().substring(0, 10)); + } else t.match(/^(\d{4}-\d{2}-\d{2})$/g) ? e3.push(t) : t.replace(/(\d{4}-\d{2}-\d{2}).*?(\d{4}-\d{2}-\d{2})/g, (t2, n, a) => { + const l = getDate(n), o = getDate(a), s = new Date(l.getTime()); + for (; s <= o; s.setDate(s.getDate() + 1)) e3.push(getDateString(s)); + return t2; + }); + return e3; + }, []); + updateAttribute = (e2, t, n, a = "") => { + t ? e2.setAttribute(n, a) : e2.getAttribute(n) === a && e2.removeAttribute(n); + }; + setDateModifier = (e2, t, n, a, l, o, s) => { + var i, r, c, d; + const u = getDate(e2.context.displayDateMin) > getDate(o) || getDate(e2.context.displayDateMax) < getDate(o) || (null == (i = e2.context.disableDates) ? void 0 : i.includes(o)) || !e2.selectionMonthsMode && "current" !== s || !e2.selectionYearsMode && getDate(o).getFullYear() !== t; + updateAttribute(n, u, "data-vc-date-disabled"), a && updateAttribute(a, u, "aria-disabled", "true"), a && updateAttribute(a, u, "tabindex", "-1"), updateAttribute(n, !e2.disableToday && e2.context.dateToday === o, "data-vc-date-today"), updateAttribute(n, !e2.disableToday && e2.context.dateToday === o, "aria-current", "date"), updateAttribute(n, null == (r = e2.selectedWeekends) ? void 0 : r.includes(l), "data-vc-date-weekend"); + const m = (null == (c = e2.selectedHolidays) ? void 0 : c[0]) ? parseDates(e2.selectedHolidays) : []; + if (updateAttribute(n, m.includes(o), "data-vc-date-holiday"), (null == (d = e2.context.selectedDates) ? void 0 : d.includes(o)) ? (n.setAttribute("data-vc-date-selected", ""), a && a.setAttribute("aria-selected", "true"), e2.context.selectedDates.length > 1 && "multiple-ranged" === e2.selectionDatesMode && (e2.context.selectedDates[0] === o && e2.context.selectedDates[e2.context.selectedDates.length - 1] === o ? n.setAttribute("data-vc-date-selected", "first-and-last") : e2.context.selectedDates[0] === o ? n.setAttribute("data-vc-date-selected", "first") : e2.context.selectedDates[e2.context.selectedDates.length - 1] === o && n.setAttribute("data-vc-date-selected", "last"), e2.context.selectedDates[0] !== o && e2.context.selectedDates[e2.context.selectedDates.length - 1] !== o && n.setAttribute("data-vc-date-selected", "middle"))) : n.hasAttribute("data-vc-date-selected") && (n.removeAttribute("data-vc-date-selected"), a && a.removeAttribute("aria-selected")), !e2.context.disableDates.includes(o) && e2.enableEdgeDatesOnly && e2.context.selectedDates.length > 1 && "multiple-ranged" === e2.selectionDatesMode) { + const t2 = getDate(e2.context.selectedDates[0]), a2 = getDate(e2.context.selectedDates[e2.context.selectedDates.length - 1]), l2 = getDate(o); + updateAttribute(n, l2 > t2 && l2 < a2, "data-vc-date-selected", "middle"); + } + }; + getLocaleString = (e2, t, n) => (/* @__PURE__ */ new Date(`${e2}T00:00:00.000Z`)).toLocaleString(t, n); + getWeekNumber = (e2, t) => { + const n = getDate(e2), a = (n.getDay() - t + 7) % 7; + n.setDate(n.getDate() + 4 - a); + const l = new Date(n.getFullYear(), 0, 1), o = Math.ceil(((+n - +l) / 864e5 + 1) / 7); + return { year: n.getFullYear(), week: o }; + }; + addWeekNumberForDate = (e2, t, n) => { + const a = getWeekNumber(n, e2.firstWeekday); + a && (t.dataset.vcDateWeekNumber = String(a.week)); + }; + setDaysAsDisabled = (e2, t, n) => { + var a, l, o, s, i; + const r = null == (a = e2.disableWeekdays) ? void 0 : a.includes(n), c = e2.disableAllDates && !!(null == (l = e2.context.enableDates) ? void 0 : l[0]); + !r && !c || (null == (o = e2.context.enableDates) ? void 0 : o.includes(t)) || (null == (s = e2.context.disableDates) ? void 0 : s.includes(t)) || (e2.context.disableDates.push(t), null == (i = e2.context.disableDates) || i.sort((e3, t2) => +new Date(e3) - +new Date(t2))); + }; + createDate = (e2, t, n, a, l, o) => { + const s = getDate(l).getDay(), i = "string" == typeof e2.locale && e2.locale.length ? e2.locale : "en", r = document.createElement("div"); + let c; + r.className = e2.styles.date, r.dataset.vcDate = l, r.dataset.vcDateMonth = o, r.dataset.vcDateWeekDay = String(s), ("current" === o || e2.displayDatesOutside) && (c = document.createElement("button"), c.className = e2.styles.dateBtn, c.type = "button", c.role = "gridcell", c.ariaLabel = getLocaleString(l, i, { dateStyle: "long", timeZone: "UTC" }), c.dataset.vcDateBtn = "", c.innerText = String(a), r.appendChild(c)), e2.enableWeekNumbers && addWeekNumberForDate(e2, r, l), setDaysAsDisabled(e2, l, s), setDateModifier(e2, t, r, c, s, l, o), n.appendChild(r), e2.onCreateDateEls && e2.onCreateDateEls(e2, r); + }; + createDatesFromCurrentMonth = (e2, t, n, a, l) => { + for (let o = 1; o <= n; o++) { + const n2 = new Date(a, l, o); + createDate(e2, a, t, o, getDateString(n2), "current"); + } + }; + createDatesFromNextMonth = (e2, t, n, a, l, o) => { + const s = o + n, i = 7 * Math.ceil(s / 7) - s, r = l + 1 === 12 ? a + 1 : a, c = l + 1 === 12 ? "01" : l + 2 < 10 ? `0${l + 2}` : l + 2; + for (let n2 = 1; n2 <= i; n2++) { + const l2 = n2 < 10 ? `0${n2}` : String(n2); + createDate(e2, a, t, n2, `${r}-${c}-${l2}`, "next"); + } + }; + createDatesFromPrevMonth = (e2, t, n, a, l) => { + let o = new Date(n, a, 0).getDate() - (l - 1); + const s = 0 === a ? n - 1 : n, i = 0 === a ? 12 : a < 10 ? `0${a}` : a; + for (let a2 = l; a2 > 0; a2--, o++) { + createDate(e2, n, t, o, `${s}-${i}-${o}`, "prev"); + } + }; + createWeekNumbers = (e2, t, n, a, l) => { + if (!e2.enableWeekNumbers) return; + a.textContent = ""; + const o = document.createElement("b"); + o.className = e2.styles.weekNumbersTitle, o.innerText = "#", o.dataset.vcWeekNumbers = "title", a.appendChild(o); + const s = document.createElement("div"); + s.className = e2.styles.weekNumbersContent, s.dataset.vcWeekNumbers = "content", a.appendChild(s); + const i = document.createElement("button"); + i.type = "button", i.className = e2.styles.weekNumber; + const r = l.querySelectorAll("[data-vc-date]"), c = Math.ceil((t + n) / 7); + for (let t2 = 0; t2 < c; t2++) { + const n2 = r[0 === t2 ? 6 : 7 * t2].dataset.vcDate, a2 = getWeekNumber(n2, e2.firstWeekday); + if (!a2) return; + const l2 = i.cloneNode(true); + l2.innerText = String(a2.week), l2.dataset.vcWeekNumber = String(a2.week), l2.dataset.vcWeekYear = String(a2.year), l2.role = "rowheader", l2.ariaLabel = `${a2.week}`, s.appendChild(l2); + } + }; + createDates = (e2) => { + const t = new Date(e2.context.selectedYear, e2.context.selectedMonth, 1), n = e2.context.mainElement.querySelectorAll('[data-vc="dates"]'), a = e2.context.mainElement.querySelectorAll('[data-vc-week="numbers"]'); + n.forEach((n2, l) => { + e2.selectionDatesMode || (n2.dataset.vcDatesDisabled = ""), n2.textContent = ""; + const o = new Date(t); + o.setMonth(o.getMonth() + l); + const s = o.getMonth(), i = o.getFullYear(), r = (new Date(i, s, 1).getDay() - e2.firstWeekday + 7) % 7, c = new Date(i, s + 1, 0).getDate(); + createDatesFromPrevMonth(e2, n2, i, s, r), createDatesFromCurrentMonth(e2, n2, c, i, s), createDatesFromNextMonth(e2, n2, c, i, s, r), createDatePopup(e2, n2), createWeekNumbers(e2, r, c, a[l], n2); + }); + }; + layoutDefault = (e2) => ` + +
+ <#WeekNumbers /> +
+ <#Week /> + <#Dates /> + <#DateRangeTooltip /> +
+
+ <#ControlTime /> +`; + layoutMonths = (e2) => ` + +
+
+ <#Months /> +
+
+`; + layoutMultiple = (e2) => ` + +
+ <#Multiple> +
+
+
+ <#Month /> + <#Year /> +
+
+
+ <#WeekNumbers /> +
+ <#Week /> + <#Dates /> +
+
+
+ <#/Multiple> + <#DateRangeTooltip /> +
+ <#ControlTime /> +`; + layoutYears = (e2) => ` + +
+
+ <#Years /> +
+
+`; + ArrowNext = (e2, t) => ``; + ArrowPrev = (e2, t) => ``; + ControlTime = (e2) => e2.selectionTimeMode ? `
` : ""; + DateRangeTooltip = (e2) => e2.onCreateDateRangeTooltip ? `
` : ""; + Dates = (e2) => `
`; + Month = (e2) => ``; + Months = (e2) => `
`; + Week = (e2) => `
`; + WeekNumbers = (e2) => e2.enableWeekNumbers ? `
` : ""; + Year = (e2) => ``; + Years = (e2) => `
`; + components = { ArrowNext, ArrowPrev, ControlTime, Dates, DateRangeTooltip, Month, Months, Week, WeekNumbers, Year, Years }; + getComponent = (e2) => components[e2]; + parseLayout = (e2, t) => t.replace(/[\n\t]/g, "").replace(/<#(?!\/?Multiple)(.*?)>/g, (t2, n) => { + const a = (n.match(/\[(.*?)\]/) || [])[1], l = n.replace(/[/\s\n\t]|\[(.*?)\]/g, ""), o = getComponent(l), s = o ? o(e2, null != a ? a : null) : ""; + return e2.sanitizerHTML(s); + }).replace(/[\n\t]/g, ""); + parseMultipleLayout = (e2, t) => t.replace(new RegExp("<#Multiple>(.*?)<#\\/Multiple>", "gs"), (t2, n) => { + const a = Array(e2.context.displayMonthsCount).fill(n).join(""); + return e2.sanitizerHTML(a); + }).replace(/[\n\t]/g, ""); + createLayouts = (e2, t) => { + const n = { default: layoutDefault, month: layoutMonths, year: layoutYears, multiple: layoutMultiple }; + if (Object.keys(n).forEach((t2) => { + const a = t2; + e2.layouts[a].length || (e2.layouts[a] = n[a](e2)); + }), e2.context.mainElement.className = e2.styles.calendar, e2.context.mainElement.dataset.vc = "calendar", e2.context.mainElement.dataset.vcType = e2.context.currentType, e2.context.mainElement.role = "application", e2.context.mainElement.tabIndex = 0, e2.context.mainElement.ariaLabel = e2.labels.application, "multiple" !== e2.context.currentType) { + if ("multiple" === e2.type && t) { + const n2 = e2.context.mainElement.querySelector('[data-vc="controls"]'), a = e2.context.mainElement.querySelector('[data-vc="grid"]'), l = t.closest('[data-vc="column"]'); + return n2 && e2.context.mainElement.removeChild(n2), a && (a.dataset.vcGrid = "hidden"), l && (l.dataset.vcColumn = e2.context.currentType), void (l && (l.innerHTML = e2.sanitizerHTML(parseLayout(e2, e2.layouts[e2.context.currentType])))); + } + e2.context.mainElement.innerHTML = e2.sanitizerHTML(parseLayout(e2, e2.layouts[e2.context.currentType])); + } else e2.context.mainElement.innerHTML = e2.sanitizerHTML(parseMultipleLayout(e2, parseLayout(e2, e2.layouts[e2.context.currentType]))); + }; + setVisibilityArrows = (e2, t, n, a) => { + e2.style.visibility = n ? "hidden" : "", t.style.visibility = a ? "hidden" : ""; + }; + handleDefaultType = (e2, t, n) => { + const a = getDate(getDateString(new Date(e2.context.selectedYear, e2.context.selectedMonth, 1))), l = new Date(a.getTime()), o = new Date(a.getTime()); + l.setMonth(l.getMonth() - e2.monthsToSwitch), o.setMonth(o.getMonth() + e2.monthsToSwitch); + const s = getDate(e2.context.dateMin), i = getDate(e2.context.dateMax); + e2.selectionYearsMode || (s.setFullYear(a.getFullYear()), i.setFullYear(a.getFullYear())); + const r = !e2.selectionMonthsMode || l.getFullYear() < s.getFullYear() || l.getFullYear() === s.getFullYear() && l.getMonth() < s.getMonth(), c = !e2.selectionMonthsMode || o.getFullYear() > i.getFullYear() || o.getFullYear() === i.getFullYear() && o.getMonth() > i.getMonth() - (e2.context.displayMonthsCount - 1); + setVisibilityArrows(t, n, r, c); + }; + handleYearType = (e2, t, n) => { + const a = getDate(e2.context.dateMin), l = getDate(e2.context.dateMax), o = !!(a.getFullYear() && e2.context.displayYear - 7 <= a.getFullYear()), s = !!(l.getFullYear() && e2.context.displayYear + 7 >= l.getFullYear()); + setVisibilityArrows(t, n, o, s); + }; + visibilityArrows = (e2) => { + if ("month" === e2.context.currentType) return; + const t = e2.context.mainElement.querySelector('[data-vc-arrow="prev"]'), n = e2.context.mainElement.querySelector('[data-vc-arrow="next"]'); + if (!t || !n) return; + ({ default: () => handleDefaultType(e2, t, n), year: () => handleYearType(e2, t, n) })["multiple" === e2.context.currentType ? "default" : e2.context.currentType](); + }; + visibilityHandler = (e2, t, n, a, l) => { + const o = new Date(a.setFullYear(e2.context.selectedYear, e2.context.selectedMonth + n)).getFullYear(), s = new Date(a.setMonth(e2.context.selectedMonth + n)).getMonth(), i = e2.context.locale.months.long[s], r = t.closest('[data-vc="column"]'); + r && (r.ariaLabel = `${i} ${o}`); + const c = { month: { id: s, label: i }, year: { id: o, label: o } }; + t.innerText = String(c[l].label), t.dataset[`vc${l.charAt(0).toUpperCase() + l.slice(1)}`] = String(c[l].id), t.ariaLabel = `${e2.labels[l]} ${c[l].label}`; + const d = { month: e2.selectionMonthsMode, year: e2.selectionYearsMode }, u = false === d[l] || "only-arrows" === d[l]; + u && (t.tabIndex = -1), t.disabled = u; + }; + visibilityTitle = (e2) => { + const t = e2.context.mainElement.querySelectorAll('[data-vc="month"]'), n = e2.context.mainElement.querySelectorAll('[data-vc="year"]'), a = new Date(e2.context.selectedYear, e2.context.selectedMonth, 1); + [t, n].forEach((t2) => null == t2 ? void 0 : t2.forEach((t3, n2) => visibilityHandler(e2, t3, n2, a, t3.dataset.vc))); + }; + setYearModifier = (e2, t, n, a, l) => { + var o; + const s = { month: "[data-vc-months-month]", year: "[data-vc-years-year]" }, i = { month: { selected: "data-vc-months-month-selected", aria: "aria-selected", value: "vcMonthsMonth", selectedProperty: "selectedMonth" }, year: { selected: "data-vc-years-year-selected", aria: "aria-selected", value: "vcYearsYear", selectedProperty: "selectedYear" } }; + l && (null == (o = e2.context.mainElement.querySelectorAll(s[n])) || o.forEach((e3) => { + e3.removeAttribute(i[n].selected), e3.removeAttribute(i[n].aria); + }), setContext(e2, i[n].selectedProperty, Number(t.dataset[i[n].value])), visibilityTitle(e2), "year" === n && visibilityArrows(e2)), a && (t.setAttribute(i[n].selected, ""), t.setAttribute(i[n].aria, "true")); + }; + getColumnID = (e2, t) => { + var n; + if ("multiple" !== e2.type) return { currentValue: null, columnID: 0 }; + const a = e2.context.mainElement.querySelectorAll('[data-vc="column"]'), l = Array.from(a).findIndex((e3) => e3.closest(`[data-vc-column="${t}"]`)); + return { currentValue: l >= 0 ? Number(null == (n = a[l].querySelector(`[data-vc="${t}"]`)) ? void 0 : n.getAttribute(`data-vc-${t}`)) : null, columnID: Math.max(l, 0) }; + }; + createMonthEl = (e2, t, n, a, l, o, s) => { + const i = t.cloneNode(false); + return i.className = e2.styles.monthsMonth, i.innerText = a, i.ariaLabel = l, i.role = "gridcell", i.dataset.vcMonthsMonth = `${s}`, o && (i.ariaDisabled = "true"), o && (i.tabIndex = -1), i.disabled = o, setYearModifier(e2, i, "month", n === s, false), i; + }; + createMonths = (e2, t) => { + var n, a; + const l = null == (n = null == t ? void 0 : t.closest('[data-vc="header"]')) ? void 0 : n.querySelector('[data-vc="year"]'), o = l ? Number(l.dataset.vcYear) : e2.context.selectedYear, s = (null == t ? void 0 : t.dataset.vcMonth) ? Number(t.dataset.vcMonth) : e2.context.selectedMonth; + setContext(e2, "currentType", "month"), createLayouts(e2, t), visibilityTitle(e2); + const i = e2.context.mainElement.querySelector('[data-vc="months"]'); + if (!e2.selectionMonthsMode || !i) return; + const r = e2.monthsToSwitch > 1 ? e2.context.locale.months.long.map((t2, n2) => s - e2.monthsToSwitch * n2).concat(e2.context.locale.months.long.map((t2, n2) => s + e2.monthsToSwitch * n2)).filter((e3) => e3 >= 0 && e3 <= 12) : Array.from(Array(12).keys()), c = document.createElement("button"); + c.type = "button"; + for (let t2 = 0; t2 < 12; t2++) { + const n2 = getDate(e2.context.dateMin), a2 = getDate(e2.context.dateMax), l2 = e2.context.displayMonthsCount - 1, { columnID: d } = getColumnID(e2, "month"), u = o <= n2.getFullYear() && t2 < n2.getMonth() + d || o >= a2.getFullYear() && t2 > a2.getMonth() - l2 + d || o > a2.getFullYear() || t2 !== s && !r.includes(t2), m = createMonthEl(e2, c, s, e2.context.locale.months.short[t2], e2.context.locale.months.long[t2], u, t2); + i.appendChild(m), e2.onCreateMonthEls && e2.onCreateMonthEls(e2, m); + } + null == (a = e2.context.mainElement.querySelector("[data-vc-months-month]:not([disabled])")) || a.focus(); + }; + TimeInput = (e2, t, n, a, l) => ` + +`; + TimeRange = (e2, t, n, a, l, o, s) => ` + +`; + handleActions = (e2, t, n, a) => { + ({ hour: () => setContext(e2, "selectedHours", n), minute: () => setContext(e2, "selectedMinutes", n) })[a](), setContext(e2, "selectedTime", `${e2.context.selectedHours}:${e2.context.selectedMinutes}${e2.context.selectedKeeping ? ` ${e2.context.selectedKeeping}` : ""}`), e2.onChangeTime && e2.onChangeTime(e2, t, false), e2.inputMode && e2.context.inputElement && e2.context.mainElement && e2.onChangeToInput && e2.onChangeToInput(e2, t); + }; + transformTime24 = (e2, t) => { + var n; + return (null == (n = { 0: { AM: "00", PM: "12" }, 1: { AM: "01", PM: "13" }, 2: { AM: "02", PM: "14" }, 3: { AM: "03", PM: "15" }, 4: { AM: "04", PM: "16" }, 5: { AM: "05", PM: "17" }, 6: { AM: "06", PM: "18" }, 7: { AM: "07", PM: "19" }, 8: { AM: "08", PM: "20" }, 9: { AM: "09", PM: "21" }, 10: { AM: "10", PM: "22" }, 11: { AM: "11", PM: "23" }, 12: { AM: "00", PM: "12" } }[Number(e2)]) ? void 0 : n[t]) || String(e2); + }; + handleClickKeepingTime = (e2, t, n, a, l) => { + const o = (o2) => { + const s = "AM" === e2.context.selectedKeeping ? "PM" : "AM", i = transformTime24(e2.context.selectedHours, s); + Number(i) <= a && Number(i) >= l ? (setContext(e2, "selectedKeeping", s), n.value = i, handleActions(e2, o2, e2.context.selectedHours, "hour"), t.ariaLabel = `${e2.labels.btnKeeping} ${e2.context.selectedKeeping}`, t.innerText = e2.context.selectedKeeping) : e2.onChangeTime && e2.onChangeTime(e2, o2, true); + }; + return t.addEventListener("click", o), () => { + t.removeEventListener("click", o); + }; + }; + transformTime12 = (e2) => ({ 0: "12", 13: "01", 14: "02", 15: "03", 16: "04", 17: "05", 18: "06", 19: "07", 20: "08", 21: "09", 22: "10", 23: "11" })[Number(e2)] || String(e2); + updateInputAndRange = (e2, t, n, a) => { + e2.value = n, t.value = a; + }; + updateKeepingTime$1 = (e2, t, n) => { + t && n && (setContext(e2, "selectedKeeping", n), t.innerText = n); + }; + handleInput$1 = (e2, t, n, a, l, o, s) => { + const i = { hour: (i2, r2, c) => { + if (!e2.selectionTimeMode) return; + ({ 12: () => { + if (!e2.context.selectedKeeping) return; + const d = Number(transformTime24(r2, e2.context.selectedKeeping)); + if (!(d <= o && d >= s)) return updateInputAndRange(n, t, e2.context.selectedHours, e2.context.selectedHours), void (e2.onChangeTime && e2.onChangeTime(e2, c, true)); + updateInputAndRange(n, t, transformTime12(r2), transformTime24(r2, e2.context.selectedKeeping)), i2 > 12 && updateKeepingTime$1(e2, a, "PM"), handleActions(e2, c, transformTime12(r2), l); + }, 24: () => { + if (!(i2 <= o && i2 >= s)) return updateInputAndRange(n, t, e2.context.selectedHours, e2.context.selectedHours), void (e2.onChangeTime && e2.onChangeTime(e2, c, true)); + updateInputAndRange(n, t, r2, r2), handleActions(e2, c, r2, l); + } })[e2.selectionTimeMode](); + }, minute: (a2, i2, r2) => { + if (!(a2 <= o && a2 >= s)) return n.value = e2.context.selectedMinutes, void (e2.onChangeTime && e2.onChangeTime(e2, r2, true)); + n.value = i2, t.value = i2, handleActions(e2, r2, i2, l); + } }, r = (e3) => { + const t2 = Number(n.value), a2 = n.value.padStart(2, "0"); + i[l] && i[l](t2, a2, e3); + }; + return n.addEventListener("change", r), () => { + n.removeEventListener("change", r); + }; + }; + updateInputAndTime = (e2, t, n, a, l) => { + t.value = l, handleActions(e2, n, l, a); + }; + updateKeepingTime = (e2, t, n) => { + t && (setContext(e2, "selectedKeeping", n), t.innerText = n); + }; + handleRange = (e2, t, n, a, l) => { + const o = (o2) => { + const s = Number(t.value), i = t.value.padStart(2, "0"), r = "hour" === l, c = 24 === e2.selectionTimeMode, d = s > 0 && s < 12; + r && !c && updateKeepingTime(e2, a, 0 === s || d ? "AM" : "PM"), updateInputAndTime(e2, n, o2, l, !r || c || d ? i : transformTime12(t.value)); + }; + return t.addEventListener("input", o), () => { + t.removeEventListener("input", o); + }; + }; + handleMouseOver = (e2) => e2.setAttribute("data-vc-input-focus", ""); + handleMouseOut = (e2) => e2.removeAttribute("data-vc-input-focus"); + handleTime = (e2, t) => { + const n = t.querySelector('[data-vc-time-range="hour"] input[name="hour"]'), a = t.querySelector('[data-vc-time-range="minute"] input[name="minute"]'), l = t.querySelector('[data-vc-time-input="hour"] input[name="hour"]'), o = t.querySelector('[data-vc-time-input="minute"] input[name="minute"]'), s = t.querySelector('[data-vc-time="keeping"]'); + if (!(n && a && l && o)) return; + const i = (e3) => { + e3.target === n && handleMouseOver(l), e3.target === a && handleMouseOver(o); + }, r = (e3) => { + e3.target === n && handleMouseOut(l), e3.target === a && handleMouseOut(o); + }; + return t.addEventListener("mouseover", i), t.addEventListener("mouseout", r), handleInput$1(e2, n, l, s, "hour", e2.timeMaxHour, e2.timeMinHour), handleInput$1(e2, a, o, s, "minute", e2.timeMaxMinute, e2.timeMinMinute), handleRange(e2, n, l, s, "hour"), handleRange(e2, a, o, s, "minute"), s && handleClickKeepingTime(e2, s, n, e2.timeMaxHour, e2.timeMinHour), () => { + t.removeEventListener("mouseover", i), t.removeEventListener("mouseout", r); + }; + }; + createTime = (e2) => { + const t = e2.context.mainElement.querySelector('[data-vc="time"]'); + if (!e2.selectionTimeMode || !t) return; + const [n, a] = [e2.timeMinHour, e2.timeMaxHour], [l, o] = [e2.timeMinMinute, e2.timeMaxMinute], s = e2.context.selectedKeeping ? transformTime24(e2.context.selectedHours, e2.context.selectedKeeping) : e2.context.selectedHours, i = "range" === e2.timeControls; + var r; + t.innerHTML = e2.sanitizerHTML(` +
+ ${TimeInput("hour", e2.styles.timeHour, e2.labels, e2.context.selectedHours, i)} + ${TimeInput("minute", e2.styles.timeMinute, e2.labels, e2.context.selectedMinutes, i)} + ${12 === e2.selectionTimeMode ? (r = e2.context.selectedKeeping, ``) : ""} +
+
+ ${TimeRange("hour", e2.styles.timeRange, e2.labels, n, a, e2.timeStepHour, s)} + ${TimeRange("minute", e2.styles.timeRange, e2.labels, l, o, e2.timeStepMinute, e2.context.selectedMinutes)} +
+ `), handleTime(e2, t); + }; + createWeek = (e2) => { + const t = e2.selectedWeekends ? [...e2.selectedWeekends] : [], n = [...e2.context.locale.weekdays.long].reduce((n2, a2, l) => [...n2, { id: l, titleShort: e2.context.locale.weekdays.short[l], titleLong: a2, isWeekend: t.includes(l) }], []), a = [...n.slice(e2.firstWeekday), ...n.slice(0, e2.firstWeekday)]; + e2.context.mainElement.querySelectorAll('[data-vc="week"]').forEach((t2) => { + const n2 = e2.onClickWeekDay ? document.createElement("button") : document.createElement("b"); + e2.onClickWeekDay && (n2.type = "button"), a.forEach((a2) => { + const l = n2.cloneNode(true); + l.innerText = a2.titleShort, l.className = e2.styles.weekDay, l.role = "columnheader", l.ariaLabel = a2.titleLong, l.dataset.vcWeekDay = String(a2.id), a2.isWeekend && (l.dataset.vcWeekDayOff = ""), t2.appendChild(l); + }); + }); + }; + createYearEl = (e2, t, n, a, l) => { + const o = t.cloneNode(false); + return o.className = e2.styles.yearsYear, o.innerText = String(l), o.ariaLabel = String(l), o.role = "gridcell", o.dataset.vcYearsYear = `${l}`, a && (o.ariaDisabled = "true"), a && (o.tabIndex = -1), o.disabled = a, setYearModifier(e2, o, "year", n === l, false), o; + }; + createYears = (e2, t) => { + var n; + const a = (null == t ? void 0 : t.dataset.vcYear) ? Number(t.dataset.vcYear) : e2.context.selectedYear; + setContext(e2, "currentType", "year"), createLayouts(e2, t), visibilityTitle(e2), visibilityArrows(e2); + const l = e2.context.mainElement.querySelector('[data-vc="years"]'); + if (!e2.selectionYearsMode || !l) return; + const o = "multiple" !== e2.type || e2.context.selectedYear === a ? 0 : 1, s = document.createElement("button"); + s.type = "button"; + for (let t2 = e2.context.displayYear - 7; t2 < e2.context.displayYear + 8; t2++) { + const n2 = t2 < getDate(e2.context.dateMin).getFullYear() + o || t2 > getDate(e2.context.dateMax).getFullYear(), i = createYearEl(e2, s, a, n2, t2); + l.appendChild(i), e2.onCreateYearEls && e2.onCreateYearEls(e2, i); + } + null == (n = e2.context.mainElement.querySelector("[data-vc-years-year]:not([disabled])")) || n.focus(); + }; + trackChangesHTMLElement = (e2, t, n) => { + new MutationObserver((e3) => { + for (let a = 0; a < e3.length; a++) { + if (e3[a].attributeName === t) { + n(); + break; + } + } + }).observe(e2, { attributes: true }); + }; + haveListener = { value: false, set: () => haveListener.value = true, check: () => haveListener.value }; + setTheme = (e2, t) => e2.dataset.vcTheme = t; + trackChangesThemeInSystemSettings = (e2, t) => { + if (setTheme(e2.context.mainElement, t.matches ? "dark" : "light"), "system" !== e2.selectedTheme || haveListener.check()) return; + const n = (e3) => { + const t2 = document.querySelectorAll('[data-vc="calendar"]'); + null == t2 || t2.forEach((t3) => setTheme(t3, e3.matches ? "dark" : "light")); + }; + t.addEventListener ? t.addEventListener("change", n) : t.addListener(n), haveListener.set(); + }; + detectTheme = (e2, t) => { + const n = e2.themeAttrDetect.length ? document.querySelector(e2.themeAttrDetect) : null, a = e2.themeAttrDetect.replace(/^.*\[(.+)\]/g, (e3, t2) => t2); + if (!n || "system" === n.getAttribute(a)) return void trackChangesThemeInSystemSettings(e2, t); + const l = n.getAttribute(a); + l ? (setTheme(e2.context.mainElement, l), trackChangesHTMLElement(n, a, () => { + const t2 = n.getAttribute(a); + t2 && setTheme(e2.context.mainElement, t2); + })) : trackChangesThemeInSystemSettings(e2, t); + }; + handleTheme = (e2) => { + "not all" !== window.matchMedia("(prefers-color-scheme)").media ? "system" === e2.selectedTheme ? detectTheme(e2, window.matchMedia("(prefers-color-scheme: dark)")) : setTheme(e2.context.mainElement, e2.selectedTheme) : setTheme(e2.context.mainElement, "light"); + }; + capitalizeFirstLetter = (e2) => e2.charAt(0).toUpperCase() + e2.slice(1).replace(/\./, ""); + getLocaleWeekday = (e2, t, n) => { + const a = /* @__PURE__ */ new Date(`1978-01-0${t + 1}T00:00:00.000Z`), l = a.toLocaleString(n, { weekday: "short", timeZone: "UTC" }), o = a.toLocaleString(n, { weekday: "long", timeZone: "UTC" }); + e2.context.locale.weekdays.short.push(capitalizeFirstLetter(l)), e2.context.locale.weekdays.long.push(capitalizeFirstLetter(o)); + }; + getLocaleMonth = (e2, t, n) => { + const a = /* @__PURE__ */ new Date(`1978-${String(t + 1).padStart(2, "0")}-01T00:00:00.000Z`), l = a.toLocaleString(n, { month: "short", timeZone: "UTC" }), o = a.toLocaleString(n, { month: "long", timeZone: "UTC" }); + e2.context.locale.months.short.push(capitalizeFirstLetter(l)), e2.context.locale.months.long.push(capitalizeFirstLetter(o)); + }; + getLocale = (e2) => { + var t, n, a, l, o, s, i, r; + if (!(e2.context.locale.weekdays.short[6] && e2.context.locale.weekdays.long[6] && e2.context.locale.months.short[11] && e2.context.locale.months.long[11])) if ("string" == typeof e2.locale) { + if ("string" == typeof e2.locale && !e2.locale.length) throw new Error(errorMessages.notLocale); + Array.from({ length: 7 }, (t2, n2) => getLocaleWeekday(e2, n2, e2.locale)), Array.from({ length: 12 }, (t2, n2) => getLocaleMonth(e2, n2, e2.locale)); + } else { + if (!((null == (n = null == (t = e2.locale) ? void 0 : t.weekdays) ? void 0 : n.short[6]) && (null == (l = null == (a = e2.locale) ? void 0 : a.weekdays) ? void 0 : l.long[6]) && (null == (s = null == (o = e2.locale) ? void 0 : o.months) ? void 0 : s.short[11]) && (null == (r = null == (i = e2.locale) ? void 0 : i.months) ? void 0 : r.long[11]))) throw new Error(errorMessages.notLocale); + setContext(e2, "locale", __spreadValues({}, e2.locale)); + } + }; + create = (e2) => { + const t = { default: () => { + createWeek(e2), createDates(e2); + }, multiple: () => { + createWeek(e2), createDates(e2); + }, month: () => createMonths(e2), year: () => createYears(e2) }; + handleTheme(e2), getLocale(e2), createLayouts(e2), visibilityTitle(e2), visibilityArrows(e2), createTime(e2), t[e2.context.currentType](); + }; + handleArrowKeys = (e2) => { + const t = (t2) => { + var n; + const a = t2.target; + if (!["ArrowUp", "ArrowDown", "ArrowLeft", "ArrowRight"].includes(t2.key) || "button" !== a.localName) return; + const l = Array.from(e2.context.mainElement.querySelectorAll('[data-vc="calendar"] button')), o = l.indexOf(a); + if (-1 === o) return; + const s = (i = l[o]).hasAttribute("data-vc-date-btn") ? 7 : i.hasAttribute("data-vc-months-month") ? 4 : i.hasAttribute("data-vc-years-year") ? 5 : 1; + var i; + const r = (0, { ArrowUp: () => Math.max(0, o - s), ArrowDown: () => Math.min(l.length - 1, o + s), ArrowLeft: () => Math.max(0, o - 1), ArrowRight: () => Math.min(l.length - 1, o + 1) }[t2.key])(); + null == (n = l[r]) || n.focus(); + }; + return e2.context.mainElement.addEventListener("keydown", t), () => e2.context.mainElement.removeEventListener("keydown", t); + }; + handleMonth = (e2, t) => { + const n = getDate(getDateString(new Date(e2.context.selectedYear, e2.context.selectedMonth, 1))); + ({ prev: () => n.setMonth(n.getMonth() - e2.monthsToSwitch), next: () => n.setMonth(n.getMonth() + e2.monthsToSwitch) })[t](), setContext(e2, "selectedMonth", n.getMonth()), setContext(e2, "selectedYear", n.getFullYear()), visibilityTitle(e2), visibilityArrows(e2), createDates(e2); + }; + handleClickArrow = (e2, t) => { + const n = t.target.closest("[data-vc-arrow]"); + if (n) { + if (["default", "multiple"].includes(e2.context.currentType)) handleMonth(e2, n.dataset.vcArrow); + else if ("year" === e2.context.currentType && void 0 !== e2.context.displayYear) { + const a = { prev: -15, next: 15 }[n.dataset.vcArrow]; + setContext(e2, "displayYear", e2.context.displayYear + a), createYears(e2, t.target); + } + e2.onClickArrow && e2.onClickArrow(e2, t); + } + }; + canToggleSelection = (e2) => void 0 === e2.enableDateToggle || ("function" == typeof e2.enableDateToggle ? e2.enableDateToggle(e2) : e2.enableDateToggle); + handleSelectDate = (e2, t, n) => { + const a = t.dataset.vcDate, l = t.closest("[data-vc-date][data-vc-date-selected]"), o = canToggleSelection(e2); + if (l && !o) return; + const s = l ? e2.context.selectedDates.filter((e3) => e3 !== a) : n ? [...e2.context.selectedDates, a] : [a]; + setContext(e2, "selectedDates", s); + }; + createDateRangeTooltip = (e2, t, n) => { + if (!t) return; + if (!n) return t.dataset.vcDateRangeTooltip = "hidden", void (t.textContent = ""); + const a = e2.context.mainElement.getBoundingClientRect(), l = n.getBoundingClientRect(); + t.style.left = l.left - a.left + l.width / 2 + "px", t.style.top = l.bottom - a.top - l.height + "px", t.dataset.vcDateRangeTooltip = "visible", t.innerHTML = e2.sanitizerHTML(e2.onCreateDateRangeTooltip(e2, n, t, l, a)); + }; + state = { self: null, lastDateEl: null, isHovering: false, rangeMin: void 0, rangeMax: void 0, tooltipEl: null, timeoutId: null }; + addHoverEffect = (e2, t, n) => { + var a, l, o; + if (!(null == (l = null == (a = state.self) ? void 0 : a.context) ? void 0 : l.selectedDates[0])) return; + const s = getDateString(e2); + (null == (o = state.self.context.disableDates) ? void 0 : o.includes(s)) || (state.self.context.mainElement.querySelectorAll(`[data-vc-date="${s}"]`).forEach((e3) => e3.dataset.vcDateHover = ""), t.forEach((e3) => e3.dataset.vcDateHover = "first"), n.forEach((e3) => { + "first" === e3.dataset.vcDateHover ? e3.dataset.vcDateHover = "first-and-last" : e3.dataset.vcDateHover = "last"; + })); + }; + removeHoverEffect = () => { + var e2, t; + if (!(null == (t = null == (e2 = state.self) ? void 0 : e2.context) ? void 0 : t.mainElement)) return; + state.self.context.mainElement.querySelectorAll("[data-vc-date-hover]").forEach((e3) => e3.removeAttribute("data-vc-date-hover")); + }; + handleHoverDatesEvent = (e2) => { + var t, n; + if (!e2 || !(null == (n = null == (t = state.self) ? void 0 : t.context) ? void 0 : n.selectedDates[0])) return; + if (!e2.closest('[data-vc="dates"]')) return state.lastDateEl = null, createDateRangeTooltip(state.self, state.tooltipEl, null), void removeHoverEffect(); + const a = e2.closest("[data-vc-date]"); + if (!a || state.lastDateEl === a) return; + state.lastDateEl = a, createDateRangeTooltip(state.self, state.tooltipEl, a), removeHoverEffect(); + const l = a.dataset.vcDate, o = getDate(state.self.context.selectedDates[0]), s = getDate(l), i = state.self.context.mainElement.querySelectorAll(`[data-vc-date="${state.self.context.selectedDates[0]}"]`), r = state.self.context.mainElement.querySelectorAll(`[data-vc-date="${l}"]`), [c, d] = o < s ? [i, r] : [r, i], [u, m] = o < s ? [o, s] : [s, o]; + for (let e3 = new Date(u); e3 <= m; e3.setDate(e3.getDate() + 1)) addHoverEffect(e3, c, d); + }; + handleHoverSelectedDatesRangeEvent = (e2) => { + const t = null == e2 ? void 0 : e2.closest("[data-vc-date-selected]"); + if (!t && state.lastDateEl) return state.lastDateEl = null, void createDateRangeTooltip(state.self, state.tooltipEl, null); + t && state.lastDateEl !== t && (state.lastDateEl = t, createDateRangeTooltip(state.self, state.tooltipEl, t)); + }; + optimizedHoverHandler = (e2) => (t) => { + const n = t.target; + state.isHovering || (state.isHovering = true, requestAnimationFrame(() => { + e2(n), state.isHovering = false; + })); + }; + optimizedHandleHoverDatesEvent = optimizedHoverHandler(handleHoverDatesEvent); + optimizedHandleHoverSelectedDatesRangeEvent = optimizedHoverHandler(handleHoverSelectedDatesRangeEvent); + handleCancelSelectionDates = (e2) => { + state.self && "Escape" === e2.key && (state.lastDateEl = null, setContext(state.self, "selectedDates", []), state.self.context.mainElement.removeEventListener("mousemove", optimizedHandleHoverDatesEvent), state.self.context.mainElement.removeEventListener("keydown", handleCancelSelectionDates), createDateRangeTooltip(state.self, state.tooltipEl, null), removeHoverEffect()); + }; + handleMouseLeave = () => { + null !== state.timeoutId && clearTimeout(state.timeoutId), state.timeoutId = setTimeout(() => { + state.lastDateEl = null, createDateRangeTooltip(state.self, state.tooltipEl, null), removeHoverEffect(); + }, 50); + }; + updateDisabledDates = () => { + var e2, t, n, a; + if (!(null == (n = null == (t = null == (e2 = state.self) ? void 0 : e2.context) ? void 0 : t.selectedDates) ? void 0 : n[0]) || !(null == (a = state.self.context.disableDates) ? void 0 : a[0])) return; + const l = getDate(state.self.context.selectedDates[0]), [o, s] = state.self.context.disableDates.map((e3) => getDate(e3)).reduce(([e3, t2], n2) => [l >= n2 ? n2 : e3, l < n2 && null === t2 ? n2 : t2], [null, null]); + o && setContext(state.self, "displayDateMin", getDateString(new Date(o.setDate(o.getDate() + 1)))), s && setContext(state.self, "displayDateMax", getDateString(new Date(s.setDate(s.getDate() - 1)))); + state.self.disableDatesPast && !state.self.disableAllDates && getDate(state.self.context.displayDateMin) < getDate(state.self.context.dateToday) && setContext(state.self, "displayDateMin", state.self.context.dateToday); + }; + handleSelectDateRange = (e2, t) => { + state.self = e2, state.lastDateEl = t, removeHoverEffect(), e2.disableDatesGaps && (state.rangeMin = state.rangeMin ? state.rangeMin : e2.context.displayDateMin, state.rangeMax = state.rangeMax ? state.rangeMax : e2.context.displayDateMax), e2.onCreateDateRangeTooltip && (state.tooltipEl = e2.context.mainElement.querySelector("[data-vc-date-range-tooltip]")); + const n = null == t ? void 0 : t.dataset.vcDate; + if (n) { + const t2 = 1 === e2.context.selectedDates.length && e2.context.selectedDates[0].includes(n), a = t2 && !canToggleSelection(e2) ? [n, n] : t2 && canToggleSelection(e2) ? [] : e2.context.selectedDates.length > 1 ? [n] : [...e2.context.selectedDates, n]; + setContext(e2, "selectedDates", a), e2.context.selectedDates.length > 1 && e2.context.selectedDates.sort((e3, t3) => +new Date(e3) - +new Date(t3)); + } + ({ set: () => (e2.disableDatesGaps && updateDisabledDates(), createDateRangeTooltip(state.self, state.tooltipEl, t), state.self.context.mainElement.removeEventListener("mousemove", optimizedHandleHoverSelectedDatesRangeEvent), state.self.context.mainElement.removeEventListener("mouseleave", handleMouseLeave), state.self.context.mainElement.removeEventListener("keydown", handleCancelSelectionDates), state.self.context.mainElement.addEventListener("mousemove", optimizedHandleHoverDatesEvent), state.self.context.mainElement.addEventListener("mouseleave", handleMouseLeave), state.self.context.mainElement.addEventListener("keydown", handleCancelSelectionDates), () => { + state.self.context.mainElement.removeEventListener("mousemove", optimizedHandleHoverDatesEvent), state.self.context.mainElement.removeEventListener("mouseleave", handleMouseLeave), state.self.context.mainElement.removeEventListener("keydown", handleCancelSelectionDates); + }), reset: () => { + const [n2, a] = [e2.context.selectedDates[0], e2.context.selectedDates[e2.context.selectedDates.length - 1]], l = e2.context.selectedDates[0] !== e2.context.selectedDates[e2.context.selectedDates.length - 1], o = parseDates([`${n2}:${a}`]).filter((t2) => !e2.context.disableDates.includes(t2)), s = l ? e2.enableEdgeDatesOnly ? [n2, a] : o : [e2.context.selectedDates[0], e2.context.selectedDates[0]]; + if (setContext(e2, "selectedDates", s), e2.disableDatesGaps && (setContext(e2, "displayDateMin", state.rangeMin), setContext(e2, "displayDateMax", state.rangeMax)), state.self.context.mainElement.removeEventListener("mousemove", optimizedHandleHoverDatesEvent), state.self.context.mainElement.removeEventListener("mouseleave", handleMouseLeave), state.self.context.mainElement.removeEventListener("keydown", handleCancelSelectionDates), e2.onCreateDateRangeTooltip) return e2.context.selectedDates[0] || (state.self.context.mainElement.removeEventListener("mousemove", optimizedHandleHoverSelectedDatesRangeEvent), state.self.context.mainElement.removeEventListener("mouseleave", handleMouseLeave), createDateRangeTooltip(state.self, state.tooltipEl, null)), e2.context.selectedDates[0] && (state.self.context.mainElement.addEventListener("mousemove", optimizedHandleHoverSelectedDatesRangeEvent), state.self.context.mainElement.addEventListener("mouseleave", handleMouseLeave), createDateRangeTooltip(state.self, state.tooltipEl, t)), () => { + state.self.context.mainElement.removeEventListener("mousemove", optimizedHandleHoverSelectedDatesRangeEvent), state.self.context.mainElement.removeEventListener("mouseleave", handleMouseLeave); + }; + } })[1 === e2.context.selectedDates.length ? "set" : "reset"](); + }; + updateDateModifier = (e2) => { + e2.context.mainElement.querySelectorAll("[data-vc-date]").forEach((t) => { + const n = t.querySelector("[data-vc-date-btn]"), a = t.dataset.vcDate, l = getDate(a).getDay(); + setDateModifier(e2, e2.context.selectedYear, t, n, l, a, "current"); + }); + }; + handleClickDate = (e2, t) => { + var n; + const a = t.target, l = a.closest("[data-vc-date-btn]"); + if (!e2.selectionDatesMode || !["single", "multiple", "multiple-ranged"].includes(e2.selectionDatesMode) || !l) return; + const o = l.closest("[data-vc-date]"); + ({ single: () => handleSelectDate(e2, o, false), multiple: () => handleSelectDate(e2, o, true), "multiple-ranged": () => handleSelectDateRange(e2, o) })[e2.selectionDatesMode](), null == (n = e2.context.selectedDates) || n.sort((e3, t2) => +new Date(e3) - +new Date(t2)), e2.onClickDate && e2.onClickDate(e2, t), e2.inputMode && e2.context.inputElement && e2.context.mainElement && e2.onChangeToInput && e2.onChangeToInput(e2, t); + const s = a.closest('[data-vc-date-month="prev"]'), i = a.closest('[data-vc-date-month="next"]'); + ({ prev: () => e2.enableMonthChangeOnDayClick ? handleMonth(e2, "prev") : updateDateModifier(e2), next: () => e2.enableMonthChangeOnDayClick ? handleMonth(e2, "next") : updateDateModifier(e2), current: () => updateDateModifier(e2) })[s ? "prev" : i ? "next" : "current"](); + }; + typeClick = ["month", "year"]; + getValue = (e2, t, n) => { + const { currentValue: a, columnID: l } = getColumnID(e2, t); + return "month" === e2.context.currentType && l >= 0 ? n - l : "year" === e2.context.currentType && e2.context.selectedYear !== a ? n - 1 : n; + }; + handleMultipleYearSelection = (e2, t) => { + const n = getValue(e2, "year", Number(t.dataset.vcYearsYear)), a = getDate(e2.context.dateMin), l = getDate(e2.context.dateMax), o = e2.context.displayMonthsCount - 1, { columnID: s } = getColumnID(e2, "year"), i = e2.context.selectedMonth < a.getMonth() && n <= a.getFullYear(), r = e2.context.selectedMonth > l.getMonth() - o + s && n >= l.getFullYear(), c = n < a.getFullYear(), d = n > l.getFullYear(), u = i || c ? a.getFullYear() : r || d ? l.getFullYear() : n, m = i || c ? a.getMonth() : r || d ? l.getMonth() - o + s : e2.context.selectedMonth; + setContext(e2, "selectedYear", u), setContext(e2, "selectedMonth", m); + }; + handleMultipleMonthSelection = (e2, t) => { + const n = t.closest('[data-vc-column="month"]').querySelector('[data-vc="year"]'), a = getValue(e2, "month", Number(t.dataset.vcMonthsMonth)), l = Number(n.dataset.vcYear), o = getDate(e2.context.dateMin), s = getDate(e2.context.dateMax), i = a < o.getMonth() && l <= o.getFullYear(), r = a > s.getMonth() && l >= s.getFullYear(); + setContext(e2, "selectedYear", l), setContext(e2, "selectedMonth", i ? o.getMonth() : r ? s.getMonth() : a); + }; + handleItemClick = (e2, t, n, a) => { + var l; + ({ year: () => { + if ("multiple" === e2.type) return handleMultipleYearSelection(e2, a); + setContext(e2, "selectedYear", Number(a.dataset.vcYearsYear)); + }, month: () => { + if ("multiple" === e2.type) return handleMultipleMonthSelection(e2, a); + setContext(e2, "selectedMonth", Number(a.dataset.vcMonthsMonth)); + } })[n](); + ({ year: () => { + var n2; + return null == (n2 = e2.onClickYear) ? void 0 : n2.call(e2, e2, t); + }, month: () => { + var n2; + return null == (n2 = e2.onClickMonth) ? void 0 : n2.call(e2, e2, t); + } })[n](), e2.context.currentType !== e2.type ? (setContext(e2, "currentType", e2.type), create(e2), null == (l = e2.context.mainElement.querySelector(`[data-vc="${n}"]`)) || l.focus()) : setYearModifier(e2, a, n, true, true); + }; + handleClickType = (e2, t, n) => { + var a; + const l = t.target, o = l.closest(`[data-vc="${n}"]`), s = { year: () => createYears(e2, l), month: () => createMonths(e2, l) }; + if (o && e2.onClickTitle && e2.onClickTitle(e2, t), o && e2.context.currentType !== n) return s[n](); + const i = l.closest(`[data-vc-${n}s-${n}]`); + if (i) return handleItemClick(e2, t, n, i); + const r = l.closest('[data-vc="grid"]'), c = l.closest('[data-vc="column"]'); + (e2.context.currentType === n && o || "multiple" === e2.type && e2.context.currentType === n && r && !c) && (setContext(e2, "currentType", e2.type), create(e2), null == (a = e2.context.mainElement.querySelector(`[data-vc="${n}"]`)) || a.focus()); + }; + handleClickMonthOrYear = (e2, t) => { + const n = { month: e2.selectionMonthsMode, year: e2.selectionYearsMode }; + typeClick.forEach((a) => { + n[a] && t.target && handleClickType(e2, t, a); + }); + }; + handleClickWeekNumber = (e2, t) => { + if (!e2.enableWeekNumbers || !e2.onClickWeekNumber) return; + const n = t.target.closest("[data-vc-week-number]"), a = e2.context.mainElement.querySelectorAll("[data-vc-date-week-number]"); + if (!n || !a[0]) return; + const l = Number(n.innerText), o = Number(n.dataset.vcWeekYear), s = Array.from(a).filter((e3) => Number(e3.dataset.vcDateWeekNumber) === l); + e2.onClickWeekNumber(e2, l, o, s, t); + }; + handleClickWeekDay = (e2, t) => { + if (!e2.onClickWeekDay) return; + const n = t.target.closest("[data-vc-week-day]"), a = t.target.closest('[data-vc="column"]'), l = a ? a.querySelectorAll("[data-vc-date-week-day]") : e2.context.mainElement.querySelectorAll("[data-vc-date-week-day]"); + if (!n || !l[0]) return; + const o = Number(n.dataset.vcWeekDay), s = Array.from(l).filter((e3) => Number(e3.dataset.vcDateWeekDay) === o); + e2.onClickWeekDay(e2, o, s, t); + }; + handleClick = (e2) => { + const t = (t2) => { + handleClickArrow(e2, t2), handleClickWeekDay(e2, t2), handleClickWeekNumber(e2, t2), handleClickDate(e2, t2), handleClickMonthOrYear(e2, t2); + }; + return e2.context.mainElement.addEventListener("click", t), () => e2.context.mainElement.removeEventListener("click", t); + }; + initMonthsCount = (e2) => { + if ("multiple" === e2.type && (e2.displayMonthsCount <= 1 || e2.displayMonthsCount > 12)) throw new Error(errorMessages.incorrectMonthsCount); + if ("multiple" !== e2.type && e2.displayMonthsCount > 1) throw new Error(errorMessages.incorrectMonthsCount); + setContext(e2, "displayMonthsCount", e2.displayMonthsCount ? e2.displayMonthsCount : "multiple" === e2.type ? 2 : 1); + }; + getLocalDate = () => { + const e2 = /* @__PURE__ */ new Date(); + return new Date(e2.getTime() - 6e4 * e2.getTimezoneOffset()).toISOString().substring(0, 10); + }; + resolveDate = (e2, t) => "today" === e2 ? getLocalDate() : e2 instanceof Date || "number" == typeof e2 || "string" == typeof e2 ? parseDates([e2])[0] : t; + initRange = (e2) => { + var t, n, a; + const l = resolveDate(e2.dateMin, e2.dateMin), o = resolveDate(e2.dateMax, e2.dateMax), s = resolveDate(e2.displayDateMin, l), i = resolveDate(e2.displayDateMax, o); + setContext(e2, "dateToday", resolveDate(e2.dateToday, e2.dateToday)), setContext(e2, "displayDateMin", s ? getDate(l) >= getDate(s) ? l : s : l), setContext(e2, "displayDateMax", i ? getDate(o) <= getDate(i) ? o : i : o); + const r = e2.disableDatesPast && !e2.disableAllDates && getDate(s) < getDate(e2.context.dateToday); + setContext(e2, "displayDateMin", r || e2.disableAllDates ? e2.context.dateToday : s), setContext(e2, "displayDateMax", e2.disableAllDates ? e2.context.dateToday : i), setContext(e2, "disableDates", e2.disableDates[0] && !e2.disableAllDates ? parseDates(e2.disableDates) : e2.disableAllDates ? [e2.context.displayDateMin] : []), e2.context.disableDates.length > 1 && e2.context.disableDates.sort((e3, t2) => +new Date(e3) - +new Date(t2)), setContext(e2, "enableDates", e2.enableDates[0] ? parseDates(e2.enableDates) : []), (null == (t = e2.context.enableDates) ? void 0 : t[0]) && (null == (n = e2.context.disableDates) ? void 0 : n[0]) && setContext(e2, "disableDates", e2.context.disableDates.filter((t2) => !e2.context.enableDates.includes(t2))), e2.context.enableDates.length > 1 && e2.context.enableDates.sort((e3, t2) => +new Date(e3) - +new Date(t2)), (null == (a = e2.context.enableDates) ? void 0 : a[0]) && e2.disableAllDates && (setContext(e2, "displayDateMin", e2.context.enableDates[0]), setContext(e2, "displayDateMax", e2.context.enableDates[e2.context.enableDates.length - 1])), setContext(e2, "dateMin", e2.displayDisabledDates ? l : e2.context.displayDateMin), setContext(e2, "dateMax", e2.displayDisabledDates ? o : e2.context.displayDateMax); + }; + initSelectedDates = (e2) => { + var t; + setContext(e2, "selectedDates", (null == (t = e2.selectedDates) ? void 0 : t[0]) ? parseDates(e2.selectedDates) : []); + }; + displayClosestValidDate = (e2) => { + const t = (t2) => { + const n2 = new Date(t2); + setInitialContext(e2, n2.getMonth(), n2.getFullYear()); + }; + if (e2.displayDateMin && "today" !== e2.displayDateMin && (n = e2.displayDateMin, a = /* @__PURE__ */ new Date(), new Date(n).getTime() > a.getTime())) { + const n2 = e2.selectedDates.length && e2.selectedDates[0] ? parseDates(e2.selectedDates)[0] : e2.displayDateMin; + return t(getDate(resolveDate(n2, e2.displayDateMin))), true; + } + var n, a; + if (e2.displayDateMax && "today" !== e2.displayDateMax && ((e3, t2) => new Date(e3).getTime() < t2.getTime())(e2.displayDateMax, /* @__PURE__ */ new Date())) { + const n2 = e2.selectedDates.length && e2.selectedDates[0] ? parseDates(e2.selectedDates)[0] : e2.displayDateMax; + return t(getDate(resolveDate(n2, e2.displayDateMax))), true; + } + return false; + }; + setInitialContext = (e2, t, n) => { + setContext(e2, "selectedMonth", t), setContext(e2, "selectedYear", n), setContext(e2, "displayYear", n); + }; + initSelectedMonthYear = (e2) => { + var t; + if (e2.enableJumpToSelectedDate && (null == (t = e2.selectedDates) ? void 0 : t[0]) && void 0 === e2.selectedMonth && void 0 === e2.selectedYear) { + const t2 = getDate(parseDates(e2.selectedDates)[0]); + return void setInitialContext(e2, t2.getMonth(), t2.getFullYear()); + } + if (displayClosestValidDate(e2)) return; + const n = void 0 !== e2.selectedMonth && Number(e2.selectedMonth) >= 0 && Number(e2.selectedMonth) < 12, a = void 0 !== e2.selectedYear && Number(e2.selectedYear) >= 0 && Number(e2.selectedYear) <= 9999; + setInitialContext(e2, n ? Number(e2.selectedMonth) : getDate(e2.context.dateToday).getMonth(), a ? Number(e2.selectedYear) : getDate(e2.context.dateToday).getFullYear()); + }; + initTime = (e2) => { + var t, n, a; + if (!e2.selectionTimeMode) return; + if (![12, 24].includes(e2.selectionTimeMode)) throw new Error(errorMessages.incorrectTime); + const l = 12 === e2.selectionTimeMode, o = l ? /^(0[1-9]|1[0-2]):([0-5][0-9]) ?(AM|PM)?$/i : /^([0-1]?[0-9]|2[0-3]):([0-5][0-9])$/; + let [s, i, r] = null != (a = null == (n = null == (t = e2.selectedTime) ? void 0 : t.match(o)) ? void 0 : n.slice(1)) ? a : []; + s ? l && !r && (r = "AM") : (s = l ? transformTime12(String(e2.timeMinHour)) : String(e2.timeMinHour), i = String(e2.timeMinMinute), r = l ? Number(transformTime12(String(e2.timeMinHour))) >= 12 ? "PM" : "AM" : null), setContext(e2, "selectedHours", s.padStart(2, "0")), setContext(e2, "selectedMinutes", i.padStart(2, "0")), setContext(e2, "selectedKeeping", r), setContext(e2, "selectedTime", `${e2.context.selectedHours}:${e2.context.selectedMinutes}${r ? ` ${r}` : ""}`); + }; + initAllVariables = (e2) => { + setContext(e2, "currentType", e2.type), initMonthsCount(e2), initRange(e2), initSelectedMonthYear(e2), initSelectedDates(e2), initTime(e2); + }; + reset = (e2, { year: t, month: n, dates: a, time: l, locale: o }, s = true) => { + var i; + const r = { year: e2.selectedYear, month: e2.selectedMonth, dates: e2.selectedDates, time: e2.selectedTime }; + if (e2.selectedYear = t ? r.year : e2.context.selectedYear, e2.selectedMonth = n ? r.month : e2.context.selectedMonth, e2.selectedTime = l ? r.time : e2.context.selectedTime, e2.selectedDates = "only-first" === a && (null == (i = e2.context.selectedDates) ? void 0 : i[0]) ? [e2.context.selectedDates[0]] : true === a ? r.dates : e2.context.selectedDates, o) { + setContext(e2, "locale", { months: { short: [], long: [] }, weekdays: { short: [], long: [] } }); + } + initAllVariables(e2), s && create(e2), e2.selectedYear = r.year, e2.selectedMonth = r.month, e2.selectedDates = r.dates, e2.selectedTime = r.time, "multiple-ranged" === e2.selectionDatesMode && a && handleSelectDateRange(e2, null); + }; + createToInput = (e2) => { + const t = document.createElement("div"); + return t.className = e2.styles.calendar, t.dataset.vc = "calendar", t.dataset.vcInput = "", t.dataset.vcCalendarHidden = "", setContext(e2, "inputModeInit", true), setContext(e2, "isShowInInputMode", false), setContext(e2, "mainElement", t), document.body.appendChild(e2.context.mainElement), reset(e2, { year: true, month: true, dates: true, time: true, locale: true }), setTimeout(() => show(e2)), e2.onInit && e2.onInit(e2), handleArrowKeys(e2), handleClick(e2); + }; + handleInput = (e2) => { + setContext(e2, "inputElement", e2.context.mainElement); + const t = () => { + e2.context.inputModeInit ? setTimeout(() => show(e2)) : createToInput(e2); + }; + return e2.context.inputElement.addEventListener("click", t), e2.context.inputElement.addEventListener("focus", t), () => { + e2.context.inputElement.removeEventListener("click", t), e2.context.inputElement.removeEventListener("focus", t); + }; + }; + init = (e2) => (setContext(e2, "originalElement", e2.context.mainElement.cloneNode(true)), setContext(e2, "isInit", true), e2.inputMode ? handleInput(e2) : (initAllVariables(e2), create(e2), e2.onInit && e2.onInit(e2), handleArrowKeys(e2), handleClick(e2))); + update = (e2, t) => { + if (!e2.context.isInit) throw new Error(errorMessages.notInit); + reset(e2, __spreadValues(__spreadValues({}, { year: true, month: true, dates: true, time: true, locale: true }), t), !(e2.inputMode && !e2.context.inputModeInit)), e2.onUpdate && e2.onUpdate(e2); + }; + replaceProperties = (e2, t) => { + const n = Object.keys(t); + for (let a = 0; a < n.length; a++) { + const l = n[a]; + "object" != typeof e2[l] || "object" != typeof t[l] || t[l] instanceof Date || Array.isArray(t[l]) ? void 0 !== t[l] && (e2[l] = t[l]) : replaceProperties(e2[l], t[l]); + } + }; + set = (e2, t, n) => { + replaceProperties(e2, t), e2.context.isInit && update(e2, n); + }; + setPosition = (e2, t, n) => { + if (!e2) return; + const a = "auto" === n ? findBestPickerPosition(e2, t) : n, l = { top: -t.offsetHeight, bottom: e2.offsetHeight, left: 0, center: e2.offsetWidth / 2 - t.offsetWidth / 2, right: e2.offsetWidth - t.offsetWidth }, o = Array.isArray(a) ? a[0] : "bottom", s = Array.isArray(a) ? a[1] : a; + t.dataset.vcPosition = o; + const { top: i, left: r } = getOffset(e2), c = i + l[o]; + let d = r + l[s]; + const { vw: u } = getViewportDimensions(); + if (d + t.clientWidth > u) { + const e3 = window.innerWidth - document.body.clientWidth; + d = u - t.clientWidth - e3; + } else d < 0 && (d = 0); + Object.assign(t.style, { left: `${d}px`, top: `${c}px` }); + }; + show = (e2) => { + if (e2.context.isShowInInputMode) return; + if (!e2.context.currentType) return void e2.context.mainElement.click(); + setContext(e2, "cleanupHandlers", []), setContext(e2, "isShowInInputMode", true), setPosition(e2.context.inputElement, e2.context.mainElement, e2.positionToInput), e2.context.mainElement.removeAttribute("data-vc-calendar-hidden"); + const t = () => { + setPosition(e2.context.inputElement, e2.context.mainElement, e2.positionToInput); + }; + window.addEventListener("resize", t), e2.context.cleanupHandlers.push(() => window.removeEventListener("resize", t)); + const n = (t2) => { + "Escape" === t2.key && hide2(e2); + }; + document.addEventListener("keydown", n), e2.context.cleanupHandlers.push(() => document.removeEventListener("keydown", n)); + const a = (t2) => { + t2.target === e2.context.inputElement || e2.context.mainElement.contains(t2.target) || hide2(e2); + }; + document.addEventListener("click", a, { capture: true }), e2.context.cleanupHandlers.push(() => document.removeEventListener("click", a, { capture: true })), e2.onShow && e2.onShow(e2); + }; + labels = { application: "Calendar", navigation: "Calendar Navigation", arrowNext: { month: "Next month", year: "Next list of years" }, arrowPrev: { month: "Previous month", year: "Previous list of years" }, month: "Select month, current selected month:", months: "List of months", year: "Select year, current selected year:", years: "List of years", week: "Days of the week", weekNumber: "Numbers of weeks in a year", dates: "Dates in the current month", selectingTime: "Selecting a time ", inputHour: "Hours", inputMinute: "Minutes", rangeHour: "Slider for selecting hours", rangeMinute: "Slider for selecting minutes", btnKeeping: "Switch AM/PM, current position:" }; + styles = { calendar: "vc", controls: "vc-controls", grid: "vc-grid", column: "vc-column", header: "vc-header", headerContent: "vc-header__content", month: "vc-month", year: "vc-year", arrowPrev: "vc-arrow vc-arrow_prev", arrowNext: "vc-arrow vc-arrow_next", wrapper: "vc-wrapper", content: "vc-content", months: "vc-months", monthsMonth: "vc-months__month", years: "vc-years", yearsYear: "vc-years__year", week: "vc-week", weekDay: "vc-week__day", weekNumbers: "vc-week-numbers", weekNumbersTitle: "vc-week-numbers__title", weekNumbersContent: "vc-week-numbers__content", weekNumber: "vc-week-number", dates: "vc-dates", date: "vc-date", dateBtn: "vc-date__btn", datePopup: "vc-date__popup", dateRangeTooltip: "vc-date-range-tooltip", time: "vc-time", timeContent: "vc-time__content", timeHour: "vc-time__hour", timeMinute: "vc-time__minute", timeKeeping: "vc-time__keeping", timeRanges: "vc-time__ranges", timeRange: "vc-time__range" }; + OptionsCalendar = class { + constructor() { + __publicField(this, "type", "default"), __publicField(this, "inputMode", false), __publicField(this, "positionToInput", "left"), __publicField(this, "firstWeekday", 1), __publicField(this, "monthsToSwitch", 1), __publicField(this, "themeAttrDetect", "html[data-theme]"), __publicField(this, "locale", "en"), __publicField(this, "dateToday", "today"), __publicField(this, "dateMin", "1970-01-01"), __publicField(this, "dateMax", "2470-12-31"), __publicField(this, "displayDateMin"), __publicField(this, "displayDateMax"), __publicField(this, "displayDatesOutside", true), __publicField(this, "displayDisabledDates", false), __publicField(this, "displayMonthsCount"), __publicField(this, "disableDates", []), __publicField(this, "disableAllDates", false), __publicField(this, "disableDatesPast", false), __publicField(this, "disableDatesGaps", false), __publicField(this, "disableWeekdays", []), __publicField(this, "disableToday", false), __publicField(this, "enableDates", []), __publicField(this, "enableEdgeDatesOnly", true), __publicField(this, "enableDateToggle", true), __publicField(this, "enableWeekNumbers", false), __publicField(this, "enableMonthChangeOnDayClick", true), __publicField(this, "enableJumpToSelectedDate", false), __publicField(this, "selectionDatesMode", "single"), __publicField(this, "selectionMonthsMode", true), __publicField(this, "selectionYearsMode", true), __publicField(this, "selectionTimeMode", false), __publicField(this, "selectedDates", []), __publicField(this, "selectedMonth"), __publicField(this, "selectedYear"), __publicField(this, "selectedHolidays", []), __publicField(this, "selectedWeekends", [0, 6]), __publicField(this, "selectedTime"), __publicField(this, "selectedTheme", "system"), __publicField(this, "timeMinHour", 0), __publicField(this, "timeMaxHour", 23), __publicField(this, "timeMinMinute", 0), __publicField(this, "timeMaxMinute", 59), __publicField(this, "timeControls", "all"), __publicField(this, "timeStepHour", 1), __publicField(this, "timeStepMinute", 1), __publicField(this, "sanitizerHTML", (e2) => e2), __publicField(this, "onClickDate"), __publicField(this, "onClickWeekDay"), __publicField(this, "onClickWeekNumber"), __publicField(this, "onClickTitle"), __publicField(this, "onClickMonth"), __publicField(this, "onClickYear"), __publicField(this, "onClickArrow"), __publicField(this, "onChangeTime"), __publicField(this, "onChangeToInput"), __publicField(this, "onCreateDateRangeTooltip"), __publicField(this, "onCreateDateEls"), __publicField(this, "onCreateMonthEls"), __publicField(this, "onCreateYearEls"), __publicField(this, "onInit"), __publicField(this, "onUpdate"), __publicField(this, "onDestroy"), __publicField(this, "onShow"), __publicField(this, "onHide"), __publicField(this, "popups", {}), __publicField(this, "labels", __spreadValues({}, labels)), __publicField(this, "layouts", { default: "", multiple: "", month: "", year: "" }), __publicField(this, "styles", __spreadValues({}, styles)); + } + }; + _Calendar = class e extends OptionsCalendar { + constructor(t, n) { + var a; + super(), __publicField(this, "init", () => init(this)), __publicField(this, "update", (e2) => update(this, e2)), __publicField(this, "destroy", () => destroy(this)), __publicField(this, "show", () => show(this)), __publicField(this, "hide", () => hide2(this)), __publicField(this, "set", (e2, t2) => set(this, e2, t2)), __publicField(this, "context"), this.context = __spreadProps(__spreadValues({}, this.context), { locale: { months: { short: [], long: [] }, weekdays: { short: [], long: [] } } }), setContext(this, "mainElement", "string" == typeof t ? null != (a = e.memoizedElements.get(t)) ? a : this.queryAndMemoize(t) : t), n && replaceProperties(this, n); + } + queryAndMemoize(t) { + const n = document.querySelector(t); + if (!n) throw new Error(errorMessages.notFoundSelector(t)); + return e.memoizedElements.set(t, n), n; + } + }; + __publicField(_Calendar, "memoizedElements", /* @__PURE__ */ new Map()); + Calendar = _Calendar; + } +}); + +// node_modules/preline/src/plugins/datepicker/vanilla-datepicker-pro.ts +var CustomVanillaCalendar, vanilla_datepicker_pro_default; +var init_vanilla_datepicker_pro = __esm({ + "node_modules/preline/src/plugins/datepicker/vanilla-datepicker-pro.ts"() { + init_vanilla_calendar_pro(); + CustomVanillaCalendar = class extends Calendar { + constructor(selector, options) { + super(selector, options); + const parentSet = this.set; + this.set = (options2, resetOptions) => { + if (parentSet) parentSet.call(this, options2, resetOptions); + if (options2.selectedTime && this.onChangeTime) { + this.onChangeTime(this, null, true); + } + if (options2.selectedMonth && this.onClickMonth) { + this.onClickMonth(this, null); + } + if (options2.selectedYear && this.onClickYear) { + this.onClickYear(this, null); + } + }; + } + static get defaultStyles() { + return { + calendar: "vc", + controls: "vc-controls", + grid: "vc-grid", + column: "vc-column", + header: "vc-header", + headerContent: "vc-header__content", + month: "vc-month", + year: "vc-year", + arrowPrev: "vc-arrow vc-arrow_prev", + arrowNext: "vc-arrow vc-arrow_next", + wrapper: "vc-wrapper", + content: "vc-content", + months: "vc-months", + monthsMonth: "vc-months__month", + years: "vc-years", + yearsYear: "vc-years__year", + week: "vc-week", + weekDay: "vc-week__day", + weekNumbers: "vc-week-numbers", + weekNumbersTitle: "vc-week-numbers__title", + weekNumbersContent: "vc-week-numbers__content", + weekNumber: "vc-week-number", + dates: "vc-dates", + date: "vc-date", + dateBtn: "vc-date__btn", + datePopup: "vc-date__popup", + dateRangeTooltip: "vc-date-range-tooltip", + time: "vc-time", + timeContent: "vc-time__content", + timeHour: "vc-time__hour", + timeMinute: "vc-time__minute", + timeKeeping: "vc-time__keeping", + timeRanges: "vc-time__ranges", + timeRange: "vc-time__range" + }; + } + logInfo() { + console.log("This log is from CustomVanillaCalendar!", this); + } + }; + vanilla_datepicker_pro_default = CustomVanillaCalendar; + } +}); + +// node_modules/preline/src/plugins/datepicker/templates.ts +var templates; +var init_templates = __esm({ + "node_modules/preline/src/plugins/datepicker/templates.ts"() { + templates = { + default: (theme = false) => `
+
+
+ <#CustomArrowPrev /> +
+
+ <#CustomMonth /> + / + <#CustomYear /> +
+
+ <#CustomArrowNext /> +
+
+
+
+ <#Week /> + <#Dates /> +
+
+
`, + multiple: (theme = false) => `
+
+ <#CustomArrowPrev /> +
+
+ <#CustomArrowNext /> +
+
+ <#Multiple> +
+
+
+ <#CustomMonth /> + / + <#CustomYear /> +
+
+
+
+ <#Week /> + <#Dates /> +
+
+
+ <#/Multiple> +
+
`, + year: (theme = false) => ` +
+
+ <#Years /> +
+
`, + month: (theme = false) => ` +
+
+ <#Months /> +
+
`, + // Custom + years: (options, theme = false) => { + return `
+ + +
`; + }, + months: (theme = false) => `
+ + +
`, + hours: (theme = false) => `
+ +
+ +
+
`, + minutes: (theme = false) => `
+ +
+ +
+
`, + meridiem: (theme = false) => `
+ +
+ +
+
` + }; + } +}); + +// node_modules/preline/src/plugins/datepicker/locale.ts +var todayTranslations; +var init_locale = __esm({ + "node_modules/preline/src/plugins/datepicker/locale.ts"() { + todayTranslations = { + "ru-RU": "\u0441\u0435\u0433\u043E\u0434\u043D\u044F", + "ru": "\u0441\u0435\u0433\u043E\u0434\u043D\u044F", + "de-DE": "Heute", + "de": "Heute", + "fr-FR": "Aujourd'hui", + "fr": "Aujourd'hui", + "es-ES": "Hoy", + "es": "Hoy", + "it-IT": "Oggi", + "it": "Oggi", + "pt-BR": "Hoje", + "pt": "Hoje", + "pl-PL": "Dzisiaj", + "pl": "Dzisiaj", + "uk-UA": "\u0421\u044C\u043E\u0433\u043E\u0434\u043D\u0456", + "uk": "\u0421\u044C\u043E\u0433\u043E\u0434\u043D\u0456", + "zh-CN": "\u4ECA\u5929", + "zh": "\u4ECA\u5929", + "ja-JP": "\u4ECA\u65E5", + "ja": "\u4ECA\u65E5", + "ko-KR": "\uC624\uB298", + "ko": "\uC624\uB298", + "ar-SA": "\u0627\u0644\u064A\u0648\u0645", + "ar": "\u0627\u0644\u064A\u0648\u0645", + "hi-IN": "\u0906\u091C", + "hi": "\u0906\u091C", + "tr-TR": "Bug\xFCn", + "tr": "Bug\xFCn", + "nl-NL": "Vandaag", + "nl": "Vandaag", + "sv-SE": "Idag", + "sv": "Idag", + "da-DK": "I dag", + "da": "I dag", + "no-NO": "I dag", + "no": "I dag", + "fi-FI": "T\xE4n\xE4\xE4n", + "fi": "T\xE4n\xE4\xE4n", + "cs-CZ": "Dnes", + "cs": "Dnes", + "sk-SK": "Dnes", + "sk": "Dnes", + "hu-HU": "Ma", + "hu": "Ma", + "ro-RO": "Ast\u0103zi", + "ro": "Ast\u0103zi", + "bg-BG": "\u0414\u043D\u0435\u0441", + "bg": "\u0414\u043D\u0435\u0441", + "hr-HR": "Danas", + "hr": "Danas", + "sr-RS": "\u0414\u0430\u043D\u0430\u0441", + "sr": "\u0414\u0430\u043D\u0430\u0441", + "sl-SI": "Danes", + "sl": "Danes", + "et-EE": "T\xE4na", + "et": "T\xE4na", + "lv-LV": "\u0160odien", + "lv": "\u0160odien", + "lt-LT": "\u0160iandien", + "lt": "\u0160iandien", + "el-GR": "\u03A3\u03AE\u03BC\u03B5\u03C1\u03B1", + "el": "\u03A3\u03AE\u03BC\u03B5\u03C1\u03B1", + "he-IL": "\u05D4\u05D9\u05D5\u05DD", + "he": "\u05D4\u05D9\u05D5\u05DD", + "th-TH": "\u0E27\u0E31\u0E19\u0E19\u0E35\u0E49", + "th": "\u0E27\u0E31\u0E19\u0E19\u0E35\u0E49", + "vi-VN": "H\xF4m nay", + "vi": "H\xF4m nay", + "id-ID": "Hari ini", + "id": "Hari ini", + "ms-MY": "Hari ini", + "ms": "Hari ini", + "fa-IR": "\u0627\u0645\u0631\u0648\u0632", + "fa": "\u0627\u0645\u0631\u0648\u0632", + "ur-PK": "\u0622\u062C", + "ur": "\u0622\u062C", + "bn-BD": "\u0986\u099C", + "bn": "\u0986\u099C", + "ta-IN": "\u0B87\u0BA9\u0BCD\u0BB1\u0BC1", + "ta": "\u0B87\u0BA9\u0BCD\u0BB1\u0BC1", + "te-IN": "\u0C28\u0C47\u0C21\u0C41", + "te": "\u0C28\u0C47\u0C21\u0C41", + "ml-IN": "\u0D07\u0D28\u0D4D\u0D28\u0D4D", + "ml": "\u0D07\u0D28\u0D4D\u0D28\u0D4D", + "kn-IN": "\u0C87\u0C82\u0CA6\u0CC1", + "kn": "\u0C87\u0C82\u0CA6\u0CC1", + "gu-IN": "\u0A86\u0A9C\u0AC7", + "gu": "\u0A86\u0A9C\u0AC7", + "pa-IN": "\u0A05\u0A71\u0A1C", + "pa": "\u0A05\u0A71\u0A1C", + "or-IN": "\u0B06\u0B1C\u0B3F", + "or": "\u0B06\u0B1C\u0B3F", + "as-IN": "\u0986\u099C\u09BF", + "as": "\u0986\u099C\u09BF", + "ne-NP": "\u0906\u091C", + "ne": "\u0906\u091C", + "si-LK": "\u0D85\u0DAF", + "si": "\u0D85\u0DAF", + "my-MM": "\u101A\u1014\u1031\u1037", + "my": "\u101A\u1014\u1031\u1037", + "km-KH": "\u1790\u17D2\u1784\u17C3\u1793\u17C1\u17C7", + "km": "\u1790\u17D2\u1784\u17C3\u1793\u17C1\u17C7", + "lo-LA": "\u0EA1\u0EB7\u0EC9\u0E99\u0EB5\u0EC9", + "lo": "\u0EA1\u0EB7\u0EC9\u0E99\u0EB5\u0EC9", + "mn-MN": "\u04E8\u043D\u04E9\u04E9\u0434\u04E9\u0440", + "mn": "\u04E8\u043D\u04E9\u04E9\u0434\u04E9\u0440", + "ka-GE": "\u10D3\u10E6\u10D4\u10E1", + "ka": "\u10D3\u10E6\u10D4\u10E1", + "hy-AM": "\u0531\u0575\u057D\u0585\u0580", + "hy": "\u0531\u0575\u057D\u0585\u0580", + "az-AZ": "Bu g\xFCn", + "az": "Bu g\xFCn", + "kk-KZ": "\u0411\u04AF\u0433\u0456\u043D", + "kk": "\u0411\u04AF\u0433\u0456\u043D", + "ky-KG": "\u0411\u04AF\u0433\u04AF\u043D", + "ky": "\u0411\u04AF\u0433\u04AF\u043D", + "uz-UZ": "Bugun", + "uz": "Bugun", + "tg-TJ": "\u0418\u043C\u0440\u04EF\u0437", + "tg": "\u0418\u043C\u0440\u04EF\u0437", + "ps-AF": "\u0646\u0646", + "ps": "\u0646\u0646", + "ku-IQ": "\u0626\u06D5\u0645\u0695\u06C6", + "ku": "\u0626\u06D5\u0645\u0695\u06C6", + "yi-IL": "\u05D4\u05D9\u05D9\u05E0\u05D8", + "yi": "\u05D4\u05D9\u05D9\u05E0\u05D8", + "lb-LU": "Haut", + "lb": "Haut", + "is-IS": "\xCD dag", + "is": "\xCD dag", + "mt-MT": "Illum", + "mt": "Illum", + "cy-GB": "Heddiw", + "cy": "Heddiw", + "ga-IE": "Inniu", + "ga": "Inniu", + "gd-GB": "An-diugh", + "gd": "An-diugh", + "kw-GB": "Hedhyw", + "kw": "Hedhyw", + "br-FR": "Hiziv", + "br": "Hiziv", + "oc-FR": "U\xE8i", + "oc": "U\xE8i", + "ca-ES": "Avui", + "ca": "Avui", + "eu-ES": "Gaur", + "eu": "Gaur", + "gl-ES": "Hoxe", + "gl": "Hoxe", + "ast-ES": "G\xFCei", + "ast": "G\xFCei", + "an-ES": "Hue", + "an": "Hue", + "fur-IT": "Vu\xEA", + "fur": "Vu\xEA", + "lij-IT": "Ancheu", + "lij": "Ancheu", + "pms-IT": "Ancheuj", + "pms": "Ancheuj", + "rm-CH": "Oz", + "rm": "Oz", + "gsw-CH": "H\xFCt", + "gsw": "H\xFCt", + "wae-CH": "H\xFCt", + "wae": "H\xFCt", + "bar-AT": "Heit", + "bar": "Heit", + "ksh-DE": "H\xFCck", + "ksh": "H\xFCck", + "nds-DE": "Vundaag", + "nds": "Vundaag", + "pfl-DE": "Haid", + "pfl": "Haid", + "pdc-US": "Heit", + "pdc": "Heit", + "af-ZA": "Vandag", + "af": "Vandag", + "zu-ZA": "Namhlanje", + "zu": "Namhlanje", + "xh-ZA": "Namhlanje", + "xh": "Namhlanje", + "st-ZA": "Kajeno", + "st": "Kajeno", + "tn-ZA": "Kajeno", + "tn": "Kajeno", + "ve-ZA": "Leno", + "ve": "Leno", + "nso-ZA": "Kajeno", + "nso": "Kajeno", + "ts-ZA": "Namuntlha", + "ts": "Namuntlha", + "ss-ZA": "Lamuhla", + "ss": "Lamuhla", + "nr-ZA": "Namhlanje", + "nr": "Namhlanje", + "ff-SN": "Hannde", + "ff": "Hannde", + "wo-SN": "Tey", + "wo": "Tey", + "ig-NG": "Taa", + "ig": "Taa", + "yo-NG": "L\xF3n\xEC\xED", + "yo": "L\xF3n\xEC\xED", + "ha-NG": "Yau", + "ha": "Yau", + "sw-KE": "Leo", + "sw": "Leo", + "am-ET": "\u12DB\u122C", + "am": "\u12DB\u122C", + "ti-ER": "\u120E\u121A", + "ti": "\u120E\u121A", + "so-SO": "Maanta", + "so": "Maanta", + "om-ET": "Har'a", + "om": "Har'a" + }; + } +}); + +// node_modules/preline/src/plugins/datepicker/index.ts +var datepicker_exports = {}; +__export(datepicker_exports, { + default: () => datepicker_default +}); +var HSDatepicker, datepicker_default; +var init_datepicker = __esm({ + "node_modules/preline/src/plugins/datepicker/index.ts"() { + init_utils(); + init_vanilla_datepicker_pro(); + init_templates(); + init_locale(); + init_utils(); + init_select(); + init_base_plugin(); + HSDatepicker = class _HSDatepicker extends HSBasePlugin { + dataOptions; + concatOptions; + updatedStyles; + vanillaCalendar; + constructor(el, options, events) { + super(el, options, events); + const dataOptions = el.getAttribute("data-hs-datepicker") ? JSON.parse(el.getAttribute("data-hs-datepicker")) : {}; + this.dataOptions = { + ...dataOptions, + ...options + }; + const removeDefaultStyles = typeof this.dataOptions?.removeDefaultStyles !== "undefined" ? this.dataOptions?.removeDefaultStyles : false; + this.updatedStyles = _.mergeWith( + removeDefaultStyles ? {} : vanilla_datepicker_pro_default.defaultStyles, + this.dataOptions?.styles || {}, + (a, b) => { + if (typeof a === "string" && typeof b === "string") { + return `${a} ${b}`; + } + } + ); + const today = /* @__PURE__ */ new Date(); + const defaults = { + selectedTheme: this.dataOptions.selectedTheme ?? "", + styles: this.updatedStyles, + dateMin: this.dataOptions.dateMin ?? today.toISOString().split("T")[0], + dateMax: this.dataOptions.dateMax ?? "2470-12-31", + mode: this.dataOptions.mode ?? "default", + inputMode: typeof this.dataOptions.inputMode !== "undefined" ? this.dataOptions.inputMode : true + }; + const chainCallbacks = (superCallback, customCallback) => (self) => { + superCallback?.(self); + customCallback?.(self); + }; + const initTime2 = (self) => { + if (this.hasTime(self)) this.initCustomTime(self); + }; + const _options = { + layouts: { + month: templates.month(defaults.selectedTheme) + }, + onInit: chainCallbacks(this.dataOptions.onInit, (self) => { + if (defaults.mode === "custom-select" && !this.dataOptions.inputMode) { + initTime2(self); + } + }), + onShow: chainCallbacks(this.dataOptions.onShow, (self) => { + if (defaults.mode === "custom-select") { + this.updateCustomSelects(self); + initTime2(self); + } + }), + onHide: chainCallbacks(this.dataOptions.onHide, (self) => { + if (defaults.mode === "custom-select") { + this.destroySelects(self.context.mainElement); + } + }), + onUpdate: chainCallbacks(this.dataOptions.onUpdate, (self) => { + this.updateCalendar(self.context.mainElement); + }), + onCreateDateEls: chainCallbacks( + this.dataOptions.onCreateDateEls, + (self) => { + if (defaults.mode === "custom-select") this.updateCustomSelects(self); + } + ), + onChangeToInput: chainCallbacks( + this.dataOptions.onChangeToInput, + (self) => { + if (!self.context.inputElement) return; + this.setInputValue( + self.context.inputElement, + self.context.selectedDates + ); + const data = { + selectedDates: self.context.selectedDates, + selectedTime: self.context.selectedTime, + rest: self.context + }; + this.fireEvent("change", data); + dispatch("change.hs.datepicker", this.el, data); + } + ), + onChangeTime: chainCallbacks(this.dataOptions.onChangeTime, initTime2), + onClickYear: chainCallbacks(this.dataOptions.onClickYear, initTime2), + onClickMonth: chainCallbacks(this.dataOptions.onClickMonth, initTime2), + onClickArrow: chainCallbacks(this.dataOptions.onClickArrow, (self) => { + if (defaults.mode === "custom-select") { + setTimeout(() => { + this.disableNav(); + this.disableOptions(); + this.updateCalendar(self.context.mainElement); + }); + } + }) + }; + this.concatOptions = _.merge(_options, this.dataOptions); + const processedOptions = { + ...defaults, + layouts: { + default: this.processCustomTemplate( + templates.default(defaults.selectedTheme), + "default" + ), + multiple: this.processCustomTemplate( + templates.multiple(defaults.selectedTheme), + "multiple" + ), + year: this.processCustomTemplate( + templates.year(defaults.selectedTheme), + "default" + ) + } + }; + this.concatOptions = _.merge(this.concatOptions, processedOptions); + this.vanillaCalendar = new vanilla_datepicker_pro_default( + this.el, + this.concatOptions + ); + this.init(); + } + init() { + this.createCollection(window.$hsDatepickerCollection, this); + this.vanillaCalendar.init(); + if (this.dataOptions?.selectedDates) { + this.setInputValue( + this.vanillaCalendar.context.inputElement, + this.formatDateArrayToIndividualDates(this.dataOptions?.selectedDates) + ); + } + } + getTimeParts(time) { + const [_time, meridiem] = time.split(" "); + const [hours, minutes] = _time.split(":"); + return [hours, minutes, meridiem]; + } + getCurrentMonthAndYear(el) { + const currentMonthHolder = el.querySelector('[data-vc="month"]'); + const currentYearHolder = el.querySelector('[data-vc="year"]'); + return { + month: +currentMonthHolder.getAttribute("data-vc-month"), + year: +currentYearHolder.getAttribute("data-vc-year") + }; + } + setInputValue(target, dates) { + const dateFormat = this.dataOptions?.dateFormat; + const dateSeparator = this.dataOptions?.inputModeOptions?.dateSeparator ?? "."; + const itemsSeparator = this.dataOptions?.inputModeOptions?.itemsSeparator ?? ", "; + const selectionDatesMode = this.dataOptions?.selectionDatesMode ?? "single"; + if (dates.length && dates.length > 1) { + if (selectionDatesMode === "multiple") { + const temp = []; + dates.forEach( + (date) => temp.push( + dateFormat ? this.formatDate(date, dateFormat) : this.changeDateSeparator(date, dateSeparator) + ) + ); + target.value = temp.join(itemsSeparator); + } else { + const formattedStart = dateFormat ? this.formatDate(dates[0], dateFormat) : this.changeDateSeparator(dates[0], dateSeparator); + const formattedEnd = dateFormat ? this.formatDate(dates[1], dateFormat) : this.changeDateSeparator(dates[1], dateSeparator); + target.value = [formattedStart, formattedEnd].join(itemsSeparator); + } + } else if (dates.length && dates.length === 1) { + target.value = dateFormat ? this.formatDate(dates[0], dateFormat) : this.changeDateSeparator(dates[0], dateSeparator); + } else target.value = ""; + } + getLocalizedTodayText(locale) { + return todayTranslations[locale] || "Today"; + } + changeDateSeparator(date, separator = ".", defaultSeparator = "-") { + const dateObj = new Date(date); + if (this.dataOptions?.replaceTodayWithText) { + const today = /* @__PURE__ */ new Date(); + const isToday = dateObj.toDateString() === today.toDateString(); + if (isToday) { + const dateLocale = this.dataOptions?.dateLocale; + return this.getLocalizedTodayText(dateLocale); + } + } + const newDate = date.split(defaultSeparator); + return newDate.join(separator); + } + formatDateArrayToIndividualDates(dates) { + const selectionDatesMode = this.dataOptions?.selectionDatesMode ?? "single"; + const expandDateRange = (start, end) => { + const startDate = new Date(start); + const endDate = new Date(end); + const result = []; + while (startDate <= endDate) { + result.push(startDate.toISOString().split("T")[0]); + startDate.setDate(startDate.getDate() + 1); + } + return result; + }; + const formatDate = (date) => { + if (typeof date === "string") { + if (date.toLowerCase() === "today") { + const today = /* @__PURE__ */ new Date(); + return [today.toISOString().split("T")[0]]; + } + const rangeMatch = date.match( + /^(\d{4}-\d{2}-\d{2})\s*[^a-zA-Z0-9]*\s*(\d{4}-\d{2}-\d{2})$/ + ); + if (rangeMatch) { + const [_2, start, end] = rangeMatch; + return selectionDatesMode === "multiple-ranged" ? [start, end] : expandDateRange(start.trim(), end.trim()); + } + return [date]; + } else if (typeof date === "number") { + return [new Date(date).toISOString().split("T")[0]]; + } else if (date instanceof Date) { + return [date.toISOString().split("T")[0]]; + } + return []; + }; + return dates.flatMap(formatDate); + } + hasTime(el) { + const { mainElement } = el.context; + const hours = mainElement.querySelector( + "[data-hs-select].--hours" + ); + const minutes = mainElement.querySelector( + "[data-hs-select].--minutes" + ); + const meridiem = mainElement.querySelector( + "[data-hs-select].--meridiem" + ); + return hours && minutes && meridiem; + } + createArrowFromTemplate(template, classes = false) { + if (!classes) return template; + const temp = htmlToElement(template); + classToClassList(classes, temp); + return temp.outerHTML; + } + concatObjectProperties(shared, other) { + const result = {}; + const allKeys = /* @__PURE__ */ new Set([ + ...Object.keys(shared || {}), + ...Object.keys(other || {}) + ]); + allKeys.forEach((key) => { + const sharedValue = shared[key] || ""; + const otherValue = other[key] || ""; + result[key] = `${sharedValue} ${otherValue}`.trim(); + }); + return result; + } + updateTemplate(template, shared, specific) { + if (!shared) return template; + const defaultOptions = JSON.parse( + template.match(/data-hs-select='([^']+)'/)[1] + ); + const concatOptions = this.concatObjectProperties(shared, specific); + const mergedOptions = _.merge(defaultOptions, concatOptions); + const updatedTemplate = template.replace( + /data-hs-select='[^']+'/, + `data-hs-select='${JSON.stringify(mergedOptions)}'` + ); + return updatedTemplate; + } + initCustomTime(self) { + const { mainElement } = self.context; + const timeParts = this.getTimeParts(self.selectedTime ?? "12:00 PM"); + const selectors = { + hours: mainElement.querySelector( + "[data-hs-select].--hours" + ), + minutes: mainElement.querySelector( + "[data-hs-select].--minutes" + ), + meridiem: mainElement.querySelector( + "[data-hs-select].--meridiem" + ) + }; + Object.entries(selectors).forEach(([key, element]) => { + if (!select_default.getInstance(element, true)) { + const instance = new select_default(element); + instance.setValue( + timeParts[key === "meridiem" ? 2 : key === "minutes" ? 1 : 0] + ); + instance.el.addEventListener("change.hs.select", (evt) => { + this.destroySelects(mainElement); + const updatedTime = { + hours: key === "hours" ? evt.detail.payload : timeParts[0], + minutes: key === "minutes" ? evt.detail.payload : timeParts[1], + meridiem: key === "meridiem" ? evt.detail.payload : timeParts[2] + }; + self.set({ + selectedTime: `${updatedTime.hours}:${updatedTime.minutes} ${updatedTime.meridiem}` + }, { + dates: false, + year: false, + month: false + }); + }); + } + }); + } + initCustomMonths(self) { + const { mainElement } = self.context; + const columns = Array.from(mainElement.querySelectorAll(".--single-month")); + if (columns.length) { + columns.forEach((column, idx) => { + const _month = column.querySelector( + "[data-hs-select].--month" + ); + const isInstanceExists = select_default.getInstance(_month, true); + if (isInstanceExists) return false; + const instance = new select_default(_month); + const { month, year } = this.getCurrentMonthAndYear(column); + instance.setValue(`${month}`); + instance.el.addEventListener("change.hs.select", (evt) => { + this.destroySelects(mainElement); + self.set({ + selectedMonth: +evt.detail.payload - idx < 0 ? 11 : +evt.detail.payload - idx, + selectedYear: +evt.detail.payload - idx < 0 ? +year - 1 : year + }, { + dates: false, + time: false + }); + }); + }); + } + } + initCustomYears(self) { + const { mainElement } = self.context; + const columns = Array.from(mainElement.querySelectorAll(".--single-month")); + if (columns.length) { + columns.forEach((column) => { + const _year = column.querySelector( + "[data-hs-select].--year" + ); + const isInstanceExists = select_default.getInstance(_year, true); + if (isInstanceExists) return false; + const instance = new select_default(_year); + const { month, year } = this.getCurrentMonthAndYear(column); + instance.setValue(`${year}`); + instance.el.addEventListener("change.hs.select", (evt) => { + const { dateMax, displayMonthsCount } = this.vanillaCalendar.context; + const maxYear = new Date(dateMax).getFullYear(); + const maxMonth = new Date(dateMax).getMonth(); + this.destroySelects(mainElement); + self.set({ + selectedMonth: month > maxMonth - displayMonthsCount && +evt.detail.payload === maxYear ? maxMonth - displayMonthsCount + 1 : month, + selectedYear: evt.detail.payload + }, { + dates: false, + time: false + }); + }); + }); + } + } + generateCustomTimeMarkup() { + const customSelectOptions = this.updatedStyles?.customSelect; + const hours = customSelectOptions ? this.updateTemplate( + templates.hours(this.concatOptions.selectedTheme), + customSelectOptions?.shared || {}, + customSelectOptions?.hours || {} + ) : templates.hours(this.concatOptions.selectedTheme); + const minutes = customSelectOptions ? this.updateTemplate( + templates.minutes(this.concatOptions.selectedTheme), + customSelectOptions?.shared || {}, + customSelectOptions?.minutes || {} + ) : templates.minutes(this.concatOptions.selectedTheme); + const meridiem = customSelectOptions ? this.updateTemplate( + templates.meridiem(this.concatOptions.selectedTheme), + customSelectOptions?.shared || {}, + customSelectOptions?.meridiem || {} + ) : templates.meridiem(this.concatOptions.selectedTheme); + const time = this?.dataOptions?.templates?.time ?? ` +
+ ${hours} + : + ${minutes} + ${meridiem} +
+ `; + return `
${time}
`; + } + generateCustomMonthMarkup() { + const mode = this?.dataOptions?.mode ?? "default"; + const customSelectOptions = this.updatedStyles?.customSelect; + const updatedTemplate = customSelectOptions ? this.updateTemplate( + templates.months(this.concatOptions.selectedTheme), + customSelectOptions?.shared || {}, + customSelectOptions?.months || {} + ) : templates.months(this.concatOptions.selectedTheme); + const month = mode === "custom-select" ? updatedTemplate : "<#Month />"; + return month; + } + generateCustomYearMarkup() { + const mode = this?.dataOptions?.mode ?? "default"; + if (mode === "custom-select") { + const today = /* @__PURE__ */ new Date(); + const dateMin = this?.dataOptions?.dateMin ?? today.toISOString().split("T")[0]; + const tempDateMax = this?.dataOptions?.dateMax ?? "2470-12-31"; + const dateMax = tempDateMax; + const startDate = new Date(dateMin); + const endDate = new Date(dateMax); + const startDateYear = startDate.getFullYear(); + const endDateYear = endDate.getFullYear(); + const generateOptions = () => { + let result = ""; + for (let i = startDateYear; i <= endDateYear; i++) { + result += ``; + } + return result; + }; + const years = templates.years( + generateOptions(), + this.concatOptions.selectedTheme + ); + const customSelectOptions = this.updatedStyles?.customSelect; + const updatedTemplate = customSelectOptions ? this.updateTemplate( + years, + customSelectOptions?.shared || {}, + customSelectOptions?.years || {} + ) : years; + return updatedTemplate; + } else { + return "<#Year />"; + } + } + generateCustomArrowPrevMarkup() { + const arrowPrev = this?.dataOptions?.templates?.arrowPrev ? this.createArrowFromTemplate( + this.dataOptions.templates.arrowPrev, + this.updatedStyles.arrowPrev + ) : "<#ArrowPrev [month] />"; + return arrowPrev; + } + generateCustomArrowNextMarkup() { + const arrowNext = this?.dataOptions?.templates?.arrowNext ? this.createArrowFromTemplate( + this.dataOptions.templates.arrowNext, + this.updatedStyles.arrowNext + ) : "<#ArrowNext [month] />"; + return arrowNext; + } + parseCustomTime(template) { + template = template.replace( + /<#CustomTime\s*\/>/g, + this.generateCustomTimeMarkup() + ); + return template; + } + parseCustomMonth(template) { + template = template.replace( + /<#CustomMonth\s*\/>/g, + this.generateCustomMonthMarkup() + ); + return template; + } + parseCustomYear(template) { + template = template.replace( + /<#CustomYear\s*\/>/g, + this.generateCustomYearMarkup() + ); + return template; + } + parseArrowPrev(template) { + template = template.replace( + /<#CustomArrowPrev\s*\/>/g, + this.generateCustomArrowPrevMarkup() + ); + return template; + } + parseArrowNext(template) { + template = template.replace( + /<#CustomArrowNext\s*\/>/g, + this.generateCustomArrowNextMarkup() + ); + return template; + } + processCustomTemplate(template, type) { + const templateAccordingToType = type === "default" ? this?.dataOptions?.layouts?.default : this?.dataOptions?.layouts?.multiple; + const processedCustomMonth = this.parseCustomMonth( + templateAccordingToType ?? template + ); + const processedCustomYear = this.parseCustomYear(processedCustomMonth); + const processedCustomTime = this.parseCustomTime(processedCustomYear); + const processedCustomArrowPrev = this.parseArrowPrev(processedCustomTime); + const processedCustomTemplate = this.parseArrowNext( + processedCustomArrowPrev + ); + return processedCustomTemplate; + } + disableOptions() { + const { mainElement, dateMax, displayMonthsCount } = this.vanillaCalendar.context; + const maxDate = new Date(dateMax); + const columns = Array.from(mainElement.querySelectorAll(".--single-month")); + columns.forEach((column, idx) => { + const year = +column.querySelector('[data-vc="year"]')?.getAttribute( + "data-vc-year" + ); + const monthOptions = column.querySelectorAll( + "[data-hs-select].--month option" + ); + const pseudoOptions = column.querySelectorAll( + "[data-hs-select-dropdown] [data-value]" + ); + const isDisabled = (option) => { + const value = +option.getAttribute("data-value"); + return value > maxDate.getMonth() - displayMonthsCount + idx + 1 && year === maxDate.getFullYear(); + }; + Array.from(monthOptions).forEach( + (option) => option.toggleAttribute("disabled", isDisabled(option)) + ); + Array.from(pseudoOptions).forEach( + (option) => option.classList.toggle("disabled", isDisabled(option)) + ); + }); + } + disableNav() { + const { + mainElement, + dateMax, + selectedYear, + selectedMonth, + displayMonthsCount + } = this.vanillaCalendar.context; + const maxYear = new Date(dateMax).getFullYear(); + const next = mainElement.querySelector( + '[data-vc-arrow="next"]' + ); + if (selectedYear === maxYear && selectedMonth + displayMonthsCount > 11) { + next.style.visibility = "hidden"; + } else next.style.visibility = ""; + } + destroySelects(container) { + const selects = Array.from(container.querySelectorAll("[data-hs-select]")); + selects.forEach((select) => { + const instance = select_default.getInstance(select, true); + if (instance) instance.element.destroy(); + }); + } + updateSelect(el, value) { + const instance = select_default.getInstance(el, true); + if (instance) instance.element.setValue(value); + } + updateCalendar(calendar) { + const columns = calendar.querySelectorAll(".--single-month"); + if (columns.length) { + columns.forEach((column) => { + const { month, year } = this.getCurrentMonthAndYear(column); + this.updateSelect( + column.querySelector("[data-hs-select].--month"), + `${month}` + ); + this.updateSelect( + column.querySelector("[data-hs-select].--year"), + `${year}` + ); + }); + } + } + updateCustomSelects(el) { + setTimeout(() => { + this.disableOptions(); + this.disableNav(); + this.initCustomMonths(el); + this.initCustomYears(el); + }); + } + // Public methods + getCurrentState() { + return { + selectedDates: this.vanillaCalendar.selectedDates, + selectedTime: this.vanillaCalendar.selectedTime + }; + } + formatDate(date, format) { + const dateFormat = format || this.dataOptions?.dateFormat; + const dateLocale = this.dataOptions?.dateLocale || void 0; + if (!dateFormat) { + const dateSeparator = this.dataOptions?.inputModeOptions?.dateSeparator ?? "."; + return this.changeDateSeparator(date, dateSeparator); + } + const dateObj = new Date(date); + if (isNaN(dateObj.getTime())) { + return this.changeDateSeparator(date); + } + let result = ""; + let i = 0; + while (i < dateFormat.length) { + if (dateFormat.slice(i, i + 4) === "YYYY") { + result += dateObj.getFullYear().toString(); + i += 4; + } else if (dateFormat.slice(i, i + 4) === "dddd") { + const dayName = dateObj.toLocaleDateString(dateLocale, { + weekday: "long" + }); + if (this.dataOptions?.replaceTodayWithText) { + const today = /* @__PURE__ */ new Date(); + const isToday = dateObj.toDateString() === today.toDateString(); + if (isToday) { + result += this.getLocalizedTodayText(dateLocale); + } else { + result += dayName; + } + } else { + result += dayName; + } + i += 4; + } else if (dateFormat.slice(i, i + 4) === "MMMM") { + result += dateObj.toLocaleDateString(dateLocale, { month: "long" }); + i += 4; + } else if (dateFormat.slice(i, i + 3) === "ddd") { + const dayName = dateObj.toLocaleDateString(dateLocale, { + weekday: "short" + }); + if (this.dataOptions?.replaceTodayWithText) { + const today = /* @__PURE__ */ new Date(); + const isToday = dateObj.toDateString() === today.toDateString(); + if (isToday) { + result += this.getLocalizedTodayText(dateLocale); + } else { + result += dayName; + } + } else { + result += dayName; + } + i += 3; + } else if (dateFormat.slice(i, i + 3) === "MMM") { + result += dateObj.toLocaleDateString(dateLocale, { month: "short" }); + i += 3; + } else if (dateFormat.slice(i, i + 2) === "YY") { + result += dateObj.getFullYear().toString().slice(-2); + i += 2; + } else if (dateFormat.slice(i, i + 2) === "MM") { + result += String(dateObj.getMonth() + 1).padStart(2, "0"); + i += 2; + } else if (dateFormat.slice(i, i + 2) === "DD") { + result += String(dateObj.getDate()).padStart(2, "0"); + i += 2; + } else if (dateFormat.slice(i, i + 2) === "HH") { + result += String(dateObj.getHours()).padStart(2, "0"); + i += 2; + } else if (dateFormat.slice(i, i + 2) === "mm") { + result += String(dateObj.getMinutes()).padStart(2, "0"); + i += 2; + } else if (dateFormat.slice(i, i + 2) === "ss") { + result += String(dateObj.getSeconds()).padStart(2, "0"); + i += 2; + } else if (dateFormat[i] === "Y") { + result += dateObj.getFullYear().toString(); + i += 1; + } else if (dateFormat[i] === "M") { + result += String(dateObj.getMonth() + 1); + i += 1; + } else if (dateFormat[i] === "D") { + result += String(dateObj.getDate()); + i += 1; + } else if (dateFormat[i] === "H") { + result += String(dateObj.getHours()); + i += 1; + } else if (dateFormat[i] === "m") { + result += String(dateObj.getMinutes()); + i += 1; + } else if (dateFormat[i] === "s") { + result += String(dateObj.getSeconds()); + i += 1; + } else { + result += dateFormat[i]; + i += 1; + } + } + return result; + } + destroy() { + if (this.vanillaCalendar) { + this.vanillaCalendar.destroy(); + this.vanillaCalendar = null; + } + window.$hsDatepickerCollection = window.$hsDatepickerCollection.filter( + ({ element }) => element.el !== this.el + ); + } + // Static methods + static getInstance(target, isInstance) { + const elInCollection = window.$hsDatepickerCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + return elInCollection ? isInstance ? elInCollection : elInCollection.element.el : null; + } + static autoInit() { + if (!window.$hsDatepickerCollection) window.$hsDatepickerCollection = []; + document.querySelectorAll(".hs-datepicker:not(.--prevent-on-load-init)").forEach((el) => { + if (!window.$hsDatepickerCollection.find( + (elC) => elC?.element?.el === el + )) { + new _HSDatepicker(el); + } + }); + } + }; + window.addEventListener("load", () => { + HSDatepicker.autoInit(); + }); + if (typeof window !== "undefined") { + window.HSDatepicker = HSDatepicker; + } + datepicker_default = HSDatepicker; + } +}); + +// node_modules/preline/src/index.ts +init_accessibility_manager(); + +// node_modules/preline/src/plugins/copy-markup/index.ts +init_utils(); +init_base_plugin(); +var HSCopyMarkup = class _HSCopyMarkup extends HSBasePlugin { + targetSelector; + wrapperSelector; + limit; + target; + wrapper; + items; + onElementClickListener; + onDeleteItemButtonClickListener; + constructor(el, options) { + super(el, options); + const data = el.getAttribute("data-hs-copy-markup"); + const dataOptions = data ? JSON.parse(data) : {}; + const concatOptions = { + ...dataOptions, + ...options + }; + this.targetSelector = concatOptions?.targetSelector || null; + this.wrapperSelector = concatOptions?.wrapperSelector || null; + this.limit = concatOptions?.limit || null; + this.items = []; + if (this.targetSelector) this.init(); + } + elementClick() { + this.copy(); + } + deleteItemButtonClick(item) { + this.delete(item); + } + init() { + this.createCollection(window.$hsCopyMarkupCollection, this); + this.onElementClickListener = () => this.elementClick(); + this.setTarget(); + this.setWrapper(); + this.addPredefinedItems(); + this.el.addEventListener("click", this.onElementClickListener); + } + copy() { + if (this.limit && this.items.length >= this.limit) return false; + if (this.el.hasAttribute("disabled")) this.el.setAttribute("disabled", ""); + const copiedElement = this.target.cloneNode(true); + this.addToItems(copiedElement); + if (this.limit && this.items.length >= this.limit) { + this.el.setAttribute("disabled", "disabled"); + } + this.fireEvent("copy", copiedElement); + dispatch("copy.hs.copyMarkup", copiedElement, copiedElement); + } + addPredefinedItems() { + Array.from(this.wrapper.children).filter( + (el) => !el.classList.contains("[--ignore-for-count]") + ).forEach((el) => { + this.addToItems(el); + }); + if (this.limit && this.items.length >= this.limit) { + this.el.setAttribute("disabled", "disabled"); + } + } + setTarget() { + const target = typeof this.targetSelector === "string" ? document.querySelector(this.targetSelector).cloneNode(true) : this.targetSelector.cloneNode(true); + target.removeAttribute("id"); + this.target = target; + } + setWrapper() { + this.wrapper = typeof this.wrapperSelector === "string" ? document.querySelector(this.wrapperSelector) : this.wrapperSelector; + } + addToItems(item) { + const deleteItemButton = item.querySelector( + "[data-hs-copy-markup-delete-item]" + ); + if (this.wrapper) this.wrapper.append(item); + else this.el.before(item); + if (deleteItemButton) { + this.onDeleteItemButtonClickListener = () => this.deleteItemButtonClick(item); + deleteItemButton.addEventListener( + "click", + this.onDeleteItemButtonClickListener + ); + } + this.items.push(item); + } + // Public methods + delete(target) { + const index = this.items.indexOf(target); + if (index !== -1) this.items.splice(index, 1); + target.remove(); + if (this.limit && this.items.length < this.limit) { + this.el.removeAttribute("disabled"); + } + this.fireEvent("delete", target); + dispatch("delete.hs.copyMarkup", target, target); + } + destroy() { + const deleteItemButtons = this.wrapper.querySelectorAll( + "[data-hs-copy-markup-delete-item]" + ); + this.el.removeEventListener("click", this.onElementClickListener); + if (deleteItemButtons.length) { + deleteItemButtons.forEach( + (el) => el.removeEventListener("click", this.onDeleteItemButtonClickListener) + ); + } + this.el.removeAttribute("disabled"); + this.target = null; + this.wrapper = null; + this.items = null; + window.$hsCopyMarkupCollection = window.$hsCopyMarkupCollection.filter( + ({ element }) => element.el !== this.el + ); + } + // Static method + static getInstance(target, isInstance) { + const elInCollection = window.$hsCopyMarkupCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + return elInCollection ? isInstance ? elInCollection : elInCollection.element : null; + } + static autoInit() { + if (!window.$hsCopyMarkupCollection) window.$hsCopyMarkupCollection = []; + if (window.$hsCopyMarkupCollection) { + window.$hsCopyMarkupCollection = window.$hsCopyMarkupCollection.filter( + ({ element }) => document.contains(element.el) + ); + } + document.querySelectorAll("[data-hs-copy-markup]:not(.--prevent-on-load-init)").forEach((el) => { + if (!window.$hsCopyMarkupCollection.find( + (elC) => elC?.element?.el === el + )) { + const data = el.getAttribute("data-hs-copy-markup"); + const options = data ? JSON.parse(data) : {}; + new _HSCopyMarkup(el, options); + } + }); + } +}; +window.addEventListener("load", () => { + HSCopyMarkup.autoInit(); +}); +if (typeof window !== "undefined") { + window.HSCopyMarkup = HSCopyMarkup; +} +var copy_markup_default = HSCopyMarkup; + +// node_modules/preline/src/plugins/accordion/index.ts +init_utils(); +init_base_plugin(); +var HSAccordion = class _HSAccordion extends HSBasePlugin { + toggle; + content; + group; + isAlwaysOpened; + keepOneOpen; + isToggleStopPropagated; + onToggleClickListener; + static selectable; + constructor(el, options, events) { + super(el, options, events); + this.toggle = this.el.querySelector(".hs-accordion-toggle") || null; + this.content = this.el.querySelector(".hs-accordion-content") || null; + this.group = this.el.closest(".hs-accordion-group") || null; + this.update(); + this.isToggleStopPropagated = stringToBoolean( + getClassProperty(this.toggle, "--stop-propagation", "false") || "false" + ); + this.keepOneOpen = this.group ? stringToBoolean( + getClassProperty(this.group, "--keep-one-open", "false") || "false" + ) : false; + if (this.toggle && this.content) this.init(); + } + init() { + this.createCollection(window.$hsAccordionCollection, this); + this.onToggleClickListener = (evt) => this.toggleClick(evt); + this.toggle.addEventListener("click", this.onToggleClickListener); + } + // Public methods + toggleClick(evt) { + if (this.el.classList.contains("active") && this.keepOneOpen) return false; + if (this.isToggleStopPropagated) evt.stopPropagation(); + if (this.el.classList.contains("active")) { + this.hide(); + } else { + this.show(); + } + } + show() { + if (this.group && !this.isAlwaysOpened && this.group.querySelector(":scope > .hs-accordion.active") && this.group.querySelector(":scope > .hs-accordion.active") !== this.el) { + const currentlyOpened = window.$hsAccordionCollection.find( + (el) => el.element.el === this.group.querySelector(":scope > .hs-accordion.active") + ); + currentlyOpened.element.hide(); + } + if (this.el.classList.contains("active")) return false; + this.el.classList.add("active"); + if (this?.toggle?.ariaExpanded) this.toggle.ariaExpanded = "true"; + this.fireEvent("beforeOpen", this.el); + dispatch("beforeOpen.hs.accordion", this.el, this.el); + this.content.style.display = "block"; + this.content.style.height = "0"; + setTimeout(() => { + this.content.style.height = `${this.content.scrollHeight}px`; + afterTransition(this.content, () => { + this.content.style.display = "block"; + this.content.style.height = ""; + this.fireEvent("open", this.el); + dispatch("open.hs.accordion", this.el, this.el); + }); + }); + } + hide() { + if (!this.el.classList.contains("active")) return false; + this.el.classList.remove("active"); + if (this?.toggle?.ariaExpanded) this.toggle.ariaExpanded = "false"; + this.fireEvent("beforeClose", this.el); + dispatch("beforeClose.hs.accordion", this.el, this.el); + this.content.style.height = `${this.content.scrollHeight}px`; + setTimeout(() => { + this.content.style.height = "0"; + }); + afterTransition(this.content, () => { + this.content.style.display = "none"; + this.content.style.height = ""; + this.fireEvent("close", this.el); + dispatch("close.hs.accordion", this.el, this.el); + }); + } + update() { + this.group = this.el.closest(".hs-accordion-group") || null; + if (!this.group) return false; + this.isAlwaysOpened = this.group.hasAttribute("data-hs-accordion-always-open") || false; + window.$hsAccordionCollection.map((el) => { + if (el.id === this.el.id) { + el.element.group = this.group; + el.element.isAlwaysOpened = this.isAlwaysOpened; + } + return el; + }); + } + destroy() { + if (_HSAccordion?.selectable?.length) { + _HSAccordion.selectable.forEach((item) => { + item.listeners.forEach(({ el, listener }) => { + el.removeEventListener("click", listener); + }); + }); + } + if (this.onToggleClickListener) { + this.toggle.removeEventListener("click", this.onToggleClickListener); + } + this.toggle = null; + this.content = null; + this.group = null; + this.onToggleClickListener = null; + window.$hsAccordionCollection = window.$hsAccordionCollection.filter( + ({ element }) => element.el !== this.el + ); + } + // Static methods + static findInCollection(target) { + return window.$hsAccordionCollection.find((el) => { + if (target instanceof _HSAccordion) return el.element.el === target.el; + else if (typeof target === "string") return el.element.el === document.querySelector(target); + else return el.element.el === target; + }) || null; + } + static autoInit() { + if (!window.$hsAccordionCollection) window.$hsAccordionCollection = []; + if (window.$hsAccordionCollection) { + window.$hsAccordionCollection = window.$hsAccordionCollection.filter( + ({ element }) => document.contains(element.el) + ); + } + document.querySelectorAll(".hs-accordion:not(.--prevent-on-load-init)").forEach((el) => { + if (!window.$hsAccordionCollection.find( + (elC) => elC?.element?.el === el + )) + new _HSAccordion(el); + }); + } + static getInstance(target, isInstance) { + const elInCollection = window.$hsAccordionCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + return elInCollection ? isInstance ? elInCollection : elInCollection.element.el : null; + } + static show(target) { + const instance = _HSAccordion.findInCollection(target); + if (instance && instance.element.content.style.display !== "block") instance.element.show(); + } + static hide(target) { + const instance = _HSAccordion.findInCollection(target); + const style = instance ? window.getComputedStyle(instance.element.content) : null; + if (instance && style.display !== "none") instance.element.hide(); + } + static onSelectableClick = (evt, item, el) => { + evt.stopPropagation(); + _HSAccordion.toggleSelected(item, el); + }; + static treeView() { + if (!document.querySelectorAll(".hs-accordion-treeview-root").length) + return false; + this.selectable = []; + document.querySelectorAll(".hs-accordion-treeview-root").forEach((el) => { + const data = el?.getAttribute("data-hs-accordion-options"); + const options = data ? JSON.parse(data) : {}; + this.selectable.push({ + el, + options: { ...options }, + listeners: [] + }); + }); + if (this.selectable.length) + this.selectable.forEach((item) => { + const { el } = item; + el.querySelectorAll(".hs-accordion-selectable").forEach( + (_el) => { + const listener = (evt) => this.onSelectableClick(evt, item, _el); + _el.addEventListener("click", listener); + item.listeners.push({ el: _el, listener }); + } + ); + }); + } + static toggleSelected(root, item) { + if (item.classList.contains("selected")) item.classList.remove("selected"); + else { + root.el.querySelectorAll(".hs-accordion-selectable").forEach((el) => el.classList.remove("selected")); + item.classList.add("selected"); + } + } + // Backward compatibility + static on(evt, target, cb) { + const instance = _HSAccordion.findInCollection(target); + if (instance) instance.element.events[evt] = cb; + } +}; +window.addEventListener("load", () => { + HSAccordion.autoInit(); + if (document.querySelectorAll(".hs-accordion-treeview-root").length) + HSAccordion.treeView(); +}); +if (typeof window !== "undefined") { + window.HSAccordion = HSAccordion; +} +var accordion_default = HSAccordion; + +// node_modules/preline/src/plugins/carousel/index.ts +init_utils(); +init_base_plugin(); +init_constants(); +var HSCarousel = class _HSCarousel extends HSBasePlugin { + currentIndex; + loadingClasses; + dotsItemClasses; + isAutoHeight; + isAutoPlay; + isCentered; + isDraggable; + isInfiniteLoop; + isRTL; + isSnap; + hasSnapSpacers; + slidesQty; + speed; + updateDelay; + loadingClassesRemove; + loadingClassesAdd; + afterLoadingClassesAdd; + container; + inner; + slides; + prev; + next; + dots; + dotsItems; + info; + infoTotal; + infoCurrent; + sliderWidth; + timer; + // Drag events' help variables + isScrolling; + isDragging; + dragStartX; + initialTranslateX; + // Touch events' help variables + touchX; + touchY; + // Resize events' help variables + resizeContainer; + resizeContainerWidth; + // Listeners + onPrevClickListener; + onNextClickListener; + onContainerScrollListener; + onElementTouchStartListener; + onElementTouchEndListener; + onInnerMouseDownListener; + onInnerTouchStartListener; + onDocumentMouseMoveListener; + onDocumentTouchMoveListener; + onDocumentMouseUpListener; + onDocumentTouchEndListener; + onDotClickListener; + constructor(el, options) { + super(el, options); + const data = el.getAttribute("data-hs-carousel"); + const dataOptions = data ? JSON.parse(data) : {}; + const concatOptions = { + ...dataOptions, + ...options + }; + this.currentIndex = concatOptions.currentIndex || 0; + this.loadingClasses = concatOptions.loadingClasses ? `${concatOptions.loadingClasses}`.split(",") : null; + this.dotsItemClasses = concatOptions.dotsItemClasses ? concatOptions.dotsItemClasses : null; + this.isAutoHeight = typeof concatOptions.isAutoHeight !== "undefined" ? concatOptions.isAutoHeight : false; + this.isAutoPlay = typeof concatOptions.isAutoPlay !== "undefined" ? concatOptions.isAutoPlay : false; + this.isCentered = typeof concatOptions.isCentered !== "undefined" ? concatOptions.isCentered : false; + this.isDraggable = typeof concatOptions.isDraggable !== "undefined" ? concatOptions.isDraggable : false; + this.isInfiniteLoop = typeof concatOptions.isInfiniteLoop !== "undefined" ? concatOptions.isInfiniteLoop : false; + this.isRTL = typeof concatOptions.isRTL !== "undefined" ? concatOptions.isRTL : false; + this.isSnap = typeof concatOptions.isSnap !== "undefined" ? concatOptions.isSnap : false; + this.hasSnapSpacers = typeof concatOptions.hasSnapSpacers !== "undefined" ? concatOptions.hasSnapSpacers : true; + this.speed = concatOptions.speed || 4e3; + this.updateDelay = concatOptions.updateDelay || 0; + this.slidesQty = concatOptions.slidesQty || 1; + this.loadingClassesRemove = this.loadingClasses?.[0] ? this.loadingClasses[0].split(" ") : "opacity-0"; + this.loadingClassesAdd = this.loadingClasses?.[1] ? this.loadingClasses[1].split(" ") : ""; + this.afterLoadingClassesAdd = this.loadingClasses?.[2] ? this.loadingClasses[2].split(" ") : ""; + this.container = this.el.querySelector(".hs-carousel") || null; + this.inner = this.el.querySelector(".hs-carousel-body") || null; + this.slides = this.el.querySelectorAll(".hs-carousel-slide") || []; + this.prev = this.el.querySelector(".hs-carousel-prev") || null; + this.next = this.el.querySelector(".hs-carousel-next") || null; + this.dots = this.el.querySelector(".hs-carousel-pagination") || null; + this.info = this.el.querySelector(".hs-carousel-info") || null; + this.infoTotal = this?.info?.querySelector(".hs-carousel-info-total") || null; + this.infoCurrent = this?.info?.querySelector(".hs-carousel-info-current") || null; + this.sliderWidth = this.el.getBoundingClientRect().width; + this.isDragging = false; + this.dragStartX = null; + this.initialTranslateX = null; + this.touchX = { + start: 0, + end: 0 + }; + this.touchY = { + start: 0, + end: 0 + }; + this.resizeContainer = document.querySelector("body"); + this.resizeContainerWidth = 0; + this.init(); + } + setIsSnap() { + const containerRect = this.container.getBoundingClientRect(); + const containerCenter = containerRect.left + containerRect.width / 2; + let closestElement = null; + let closestElementIndex = null; + let closestDistance = Infinity; + Array.from(this.inner.children).forEach((child) => { + const childRect = child.getBoundingClientRect(); + const innerContainerRect = this.inner.getBoundingClientRect(); + const childCenter = childRect.left + childRect.width / 2 - innerContainerRect.left; + const distance = Math.abs( + containerCenter - (innerContainerRect.left + childCenter) + ); + if (distance < closestDistance) { + closestDistance = distance; + closestElement = child; + } + }); + if (closestElement) { + closestElementIndex = Array.from(this.slides).findIndex( + (el) => el === closestElement + ); + } + this.setIndex(closestElementIndex); + if (this.dots) this.setCurrentDot(); + } + prevClick() { + this.goToPrev(); + if (this.isAutoPlay) { + this.resetTimer(); + this.setTimer(); + } + } + nextClick() { + this.goToNext(); + if (this.isAutoPlay) { + this.resetTimer(); + this.setTimer(); + } + } + containerScroll() { + clearTimeout(this.isScrolling); + this.isScrolling = setTimeout(() => { + this.setIsSnap(); + }, 100); + } + elementTouchStart(evt) { + this.touchX.start = evt.changedTouches[0].screenX; + this.touchY.start = evt.changedTouches[0].screenY; + } + elementTouchEnd(evt) { + this.touchX.end = evt.changedTouches[0].screenX; + this.touchY.end = evt.changedTouches[0].screenY; + this.detectDirection(); + } + innerMouseDown(evt) { + this.handleDragStart(evt); + } + innerTouchStart(evt) { + this.handleDragStart(evt); + } + documentMouseMove(evt) { + this.handleDragMove(evt); + } + documentTouchMove(evt) { + this.handleDragMove(evt); + } + documentMouseUp() { + this.handleDragEnd(); + } + documentTouchEnd() { + this.handleDragEnd(); + } + dotClick(ind) { + this.goTo(ind); + if (this.isAutoPlay) { + this.resetTimer(); + this.setTimer(); + } + } + init() { + this.createCollection(window.$hsCarouselCollection, this); + if (this.inner) { + this.calculateWidth(); + if (this.isDraggable && !this.isSnap) this.initDragHandling(); + } + if (this.prev) { + this.onPrevClickListener = () => this.prevClick(); + this.prev.addEventListener("click", this.onPrevClickListener); + } + if (this.next) { + this.onNextClickListener = () => this.nextClick(); + this.next.addEventListener("click", this.onNextClickListener); + } + if (this.dots) this.initDots(); + if (this.info) this.buildInfo(); + if (this.slides.length) { + this.addCurrentClass(); + if (!this.isInfiniteLoop) this.addDisabledClass(); + if (this.isAutoPlay) this.autoPlay(); + } + setTimeout(() => { + if (this.isSnap) this.setIsSnap(); + if (this.loadingClassesRemove) { + if (typeof this.loadingClassesRemove === "string") { + this.inner.classList.remove(this.loadingClassesRemove); + } else this.inner.classList.remove(...this.loadingClassesRemove); + } + if (this.loadingClassesAdd) { + if (typeof this.loadingClassesAdd === "string") { + this.inner.classList.add(this.loadingClassesAdd); + } else this.inner.classList.add(...this.loadingClassesAdd); + } + if (this.inner && this.afterLoadingClassesAdd) { + setTimeout(() => { + if (typeof this.afterLoadingClassesAdd === "string") { + this.inner.classList.add(this.afterLoadingClassesAdd); + } else this.inner.classList.add(...this.afterLoadingClassesAdd); + }); + } + }, 400); + if (this.isSnap) { + this.onContainerScrollListener = () => this.containerScroll(); + this.container.addEventListener("scroll", this.onContainerScrollListener); + } + this.el.classList.add("init"); + if (!this.isSnap) { + this.onElementTouchStartListener = (evt) => this.elementTouchStart(evt); + this.onElementTouchEndListener = (evt) => this.elementTouchEnd(evt); + this.el.addEventListener("touchstart", this.onElementTouchStartListener); + this.el.addEventListener("touchend", this.onElementTouchEndListener); + } + this.observeResize(); + } + initDragHandling() { + const scrollableElement = this.inner; + this.onInnerMouseDownListener = (evt) => this.innerMouseDown(evt); + this.onInnerTouchStartListener = (evt) => this.innerTouchStart(evt); + this.onDocumentMouseMoveListener = (evt) => this.documentMouseMove(evt); + this.onDocumentTouchMoveListener = (evt) => this.documentTouchMove(evt); + this.onDocumentMouseUpListener = () => this.documentMouseUp(); + this.onDocumentTouchEndListener = () => this.documentTouchEnd(); + if (scrollableElement) { + scrollableElement.addEventListener( + "mousedown", + this.onInnerMouseDownListener + ); + scrollableElement.addEventListener( + "touchstart", + this.onInnerTouchStartListener, + { passive: true } + ); + document.addEventListener("mousemove", this.onDocumentMouseMoveListener); + document.addEventListener("touchmove", this.onDocumentTouchMoveListener, { + passive: false + }); + document.addEventListener("mouseup", this.onDocumentMouseUpListener); + document.addEventListener("touchend", this.onDocumentTouchEndListener); + } + } + getTranslateXValue() { + const transformMatrix = window.getComputedStyle(this.inner).transform; + if (transformMatrix !== "none") { + const matrixValues = transformMatrix.match(/matrix.*\((.+)\)/)?.[1].split(", "); + if (matrixValues) { + let translateX = parseFloat( + matrixValues.length === 6 ? matrixValues[4] : matrixValues[12] + ); + if (this.isRTL) translateX = -translateX; + return isNaN(translateX) || translateX === 0 ? 0 : -translateX; + } + } + return 0; + } + removeClickEventWhileDragging(evt) { + evt.preventDefault(); + } + handleDragStart(evt) { + evt.preventDefault(); + this.isDragging = true; + this.dragStartX = this.getEventX(evt); + this.initialTranslateX = this.isRTL ? this.getTranslateXValue() : -this.getTranslateXValue(); + this.inner.classList.add("dragging"); + } + handleDragMove(evt) { + if (!this.isDragging) return; + this.inner.querySelectorAll("a:not(.prevented-click)").forEach((el) => { + el.classList.add("prevented-click"); + el.addEventListener("click", this.removeClickEventWhileDragging); + }); + const currentX = this.getEventX(evt); + let deltaX = currentX - this.dragStartX; + if (this.isRTL) deltaX = -deltaX; + const newTranslateX = this.initialTranslateX + deltaX; + const newTranslateXFunc = () => { + let calcWidth = this.sliderWidth * this.slides.length / this.getCurrentSlidesQty() - this.sliderWidth; + const containerWidth = this.sliderWidth; + const itemWidth = containerWidth / this.getCurrentSlidesQty(); + const centeredOffset = (containerWidth - itemWidth) / 2; + const limitStart = this.isCentered ? centeredOffset : 0; + if (this.isCentered) calcWidth = calcWidth + centeredOffset; + const limitEnd = -calcWidth; + if (this.isRTL) { + if (newTranslateX < limitStart) return limitStart; + if (newTranslateX > calcWidth) return limitEnd; + else return -newTranslateX; + } else { + if (newTranslateX > limitStart) return limitStart; + else if (newTranslateX < -calcWidth) return limitEnd; + else return newTranslateX; + } + }; + this.setTranslate(newTranslateXFunc()); + } + handleDragEnd() { + if (!this.isDragging) return; + this.isDragging = false; + const containerWidth = this.sliderWidth; + const itemWidth = containerWidth / this.getCurrentSlidesQty(); + const currentTranslateX = this.getTranslateXValue(); + let closestIndex = Math.round(currentTranslateX / itemWidth); + if (this.isRTL) closestIndex = Math.round(currentTranslateX / itemWidth); + this.inner.classList.remove("dragging"); + setTimeout(() => { + this.calculateTransform(closestIndex); + if (this.dots) this.setCurrentDot(); + this.dragStartX = null; + this.initialTranslateX = null; + this.inner.querySelectorAll("a.prevented-click").forEach((el) => { + el.classList.remove("prevented-click"); + el.removeEventListener("click", this.removeClickEventWhileDragging); + }); + }); + } + getEventX(event) { + return event instanceof MouseEvent ? event.clientX : event.touches[0].clientX; + } + getCurrentSlidesQty() { + if (typeof this.slidesQty === "object") { + const windowWidth = document.body.clientWidth; + let currentRes = 0; + Object.keys(this.slidesQty).forEach((key) => { + if (windowWidth >= (typeof key + 1 === "number" ? this.slidesQty[key] : BREAKPOINTS[key])) { + currentRes = this.slidesQty[key]; + } + }); + return currentRes; + } else { + return this.slidesQty; + } + } + buildSnapSpacers() { + const existingBefore = this.inner.querySelector(".hs-snap-before"); + const existingAfter = this.inner.querySelector(".hs-snap-after"); + if (existingBefore) existingBefore.remove(); + if (existingAfter) existingAfter.remove(); + const containerWidth = this.sliderWidth; + const itemWidth = containerWidth / this.getCurrentSlidesQty(); + const spacerWidth = containerWidth / 2 - itemWidth / 2; + const before = htmlToElement( + `
` + ); + const after = htmlToElement( + `
` + ); + this.inner.prepend(before); + this.inner.appendChild(after); + } + initDots() { + if (this.el.querySelectorAll(".hs-carousel-pagination-item").length) { + this.setDots(); + } else this.buildDots(); + if (this.dots) this.setCurrentDot(); + } + buildDots() { + this.dots.innerHTML = ""; + const slidesQty = !this.isCentered && this.slidesQty ? this.slides.length - (this.getCurrentSlidesQty() - 1) : this.slides.length; + for (let i = 0; i < slidesQty; i++) { + const singleDot = this.buildSingleDot(i); + this.dots.append(singleDot); + } + } + setDots() { + this.dotsItems = this.dots.querySelectorAll(".hs-carousel-pagination-item"); + this.dotsItems.forEach((dot, ind) => { + const targetIndex = dot.getAttribute( + "data-carousel-pagination-item-target" + ); + this.singleDotEvents(dot, targetIndex ? +targetIndex : ind); + }); + } + goToCurrentDot() { + const container = this.dots; + const containerRect = container.getBoundingClientRect(); + const containerScrollLeft = container.scrollLeft; + const containerScrollTop = container.scrollTop; + const containerWidth = container.clientWidth; + const containerHeight = container.clientHeight; + const item = this.dotsItems[this.currentIndex]; + const itemRect = item.getBoundingClientRect(); + const itemLeft = itemRect.left - containerRect.left + containerScrollLeft; + const itemRight = itemLeft + item.clientWidth; + const itemTop = itemRect.top - containerRect.top + containerScrollTop; + const itemBottom = itemTop + item.clientHeight; + let scrollLeft = containerScrollLeft; + let scrollTop = containerScrollTop; + if (itemLeft < containerScrollLeft || itemRight > containerScrollLeft + containerWidth) { + scrollLeft = itemRight - containerWidth; + } + if (itemTop < containerScrollTop || itemBottom > containerScrollTop + containerHeight) { + scrollTop = itemBottom - containerHeight; + } + container.scrollTo({ + left: scrollLeft, + top: scrollTop, + behavior: "smooth" + }); + } + buildInfo() { + if (this.infoTotal) this.setInfoTotal(); + if (this.infoCurrent) this.setInfoCurrent(); + } + setInfoTotal() { + this.infoTotal.innerText = `${this.slides.length}`; + } + setInfoCurrent() { + this.infoCurrent.innerText = `${this.currentIndex + 1}`; + } + buildSingleDot(ind) { + const singleDot = htmlToElement(""); + if (this.dotsItemClasses) classToClassList(this.dotsItemClasses, singleDot); + this.singleDotEvents(singleDot, ind); + return singleDot; + } + singleDotEvents(dot, ind) { + this.onDotClickListener = () => this.dotClick(ind); + dot.addEventListener("click", this.onDotClickListener); + } + observeResize() { + const resizeObserver = new ResizeObserver( + debounce((entries) => { + for (let entry of entries) { + const newWidth = entry.contentRect.width; + if (newWidth !== this.resizeContainerWidth) { + this.recalculateWidth(); + if (this.dots) this.initDots(); + this.addCurrentClass(); + this.resizeContainerWidth = newWidth; + } + } + }, this.updateDelay) + ); + resizeObserver.observe(this.resizeContainer); + } + calculateWidth() { + if (!this.isSnap) { + this.inner.style.width = `${this.sliderWidth * this.slides.length / this.getCurrentSlidesQty()}px`; + } + this.slides.forEach((el) => { + el.style.width = `${this.sliderWidth / this.getCurrentSlidesQty()}px`; + }); + this.calculateTransform(); + } + addCurrentClass() { + if (this.isSnap) { + const itemsQty = Math.floor(this.getCurrentSlidesQty() / 2); + for (let i = 0; i < this.slides.length; i++) { + const slide = this.slides[i]; + if (i <= this.currentIndex + itemsQty && i >= this.currentIndex - itemsQty) { + slide.classList.add("active"); + } else slide.classList.remove("active"); + } + } else { + const maxIndex = this.isCentered ? this.currentIndex + this.getCurrentSlidesQty() + (this.getCurrentSlidesQty() - 1) : this.currentIndex + this.getCurrentSlidesQty(); + this.slides.forEach((el, i) => { + if (i >= this.currentIndex && i < maxIndex) { + el.classList.add("active"); + } else { + el.classList.remove("active"); + } + }); + } + } + setCurrentDot() { + const toggleDotActive = (el, i) => { + let statement = false; + const itemsQty = Math.floor(this.getCurrentSlidesQty() / 2); + if (this.isSnap && !this.hasSnapSpacers) { + statement = i === (this.getCurrentSlidesQty() % 2 === 0 ? this.currentIndex - itemsQty + 1 : this.currentIndex - itemsQty); + } else statement = i === this.currentIndex; + if (statement) el.classList.add("active"); + else el.classList.remove("active"); + }; + if (this.dotsItems) { + this.dotsItems.forEach((el, i) => toggleDotActive(el, i)); + } else { + this.dots.querySelectorAll(":scope > *").forEach((el, i) => toggleDotActive(el, i)); + } + } + setElementToDisabled(el) { + el.classList.add("disabled"); + if (el.tagName === "BUTTON" || el.tagName === "INPUT") { + el.setAttribute("disabled", "disabled"); + } + } + unsetElementToDisabled(el) { + el.classList.remove("disabled"); + if (el.tagName === "BUTTON" || el.tagName === "INPUT") { + el.removeAttribute("disabled"); + } + } + addDisabledClass() { + if (!this.prev || !this.next) return false; + const gapValue = getComputedStyle(this.inner).getPropertyValue("gap"); + const itemsQty = Math.floor(this.getCurrentSlidesQty() / 2); + let currentIndex = 0; + let maxIndex = 0; + let statementPrev = false; + let statementNext = false; + if (this.isSnap) { + currentIndex = this.currentIndex; + maxIndex = this.hasSnapSpacers ? this.slides.length - 1 : this.slides.length - itemsQty - 1; + statementPrev = this.hasSnapSpacers ? currentIndex === 0 : this.getCurrentSlidesQty() % 2 === 0 ? currentIndex - itemsQty < 0 : currentIndex - itemsQty === 0; + statementNext = currentIndex >= maxIndex && this.container.scrollLeft + this.container.clientWidth + (parseFloat(gapValue) || 0) >= this.container.scrollWidth; + } else { + currentIndex = this.currentIndex; + maxIndex = this.isCentered ? this.slides.length - this.getCurrentSlidesQty() + (this.getCurrentSlidesQty() - 1) : this.slides.length - this.getCurrentSlidesQty(); + statementPrev = currentIndex === 0; + statementNext = currentIndex >= maxIndex; + } + if (statementPrev) { + this.unsetElementToDisabled(this.next); + this.setElementToDisabled(this.prev); + } else if (statementNext) { + this.unsetElementToDisabled(this.prev); + this.setElementToDisabled(this.next); + } else { + this.unsetElementToDisabled(this.prev); + this.unsetElementToDisabled(this.next); + } + } + autoPlay() { + this.setTimer(); + } + setTimer() { + this.timer = setInterval(() => { + if (this.currentIndex === this.slides.length - 1) this.goTo(0); + else this.goToNext(); + }, this.speed); + } + resetTimer() { + clearInterval(this.timer); + } + detectDirection() { + const deltaX = this.touchX.end - this.touchX.start; + const deltaY = this.touchY.end - this.touchY.start; + const absDeltaX = Math.abs(deltaX); + const absDeltaY = Math.abs(deltaY); + const SWIPE_THRESHOLD = 30; + if (absDeltaX < SWIPE_THRESHOLD || absDeltaX < absDeltaY) return; + const isSwipeToNext = this.isRTL ? deltaX > 0 : deltaX < 0; + if (!this.isInfiniteLoop) { + if (isSwipeToNext && this.currentIndex < this.slides.length - this.getCurrentSlidesQty()) { + this.goToNext(); + } + if (!isSwipeToNext && this.currentIndex > 0) { + this.goToPrev(); + } + } else { + if (isSwipeToNext) this.goToNext(); + else this.goToPrev(); + } + } + calculateTransform(currentIdx) { + if (currentIdx !== void 0) this.currentIndex = currentIdx; + const containerWidth = this.sliderWidth; + const itemWidth = containerWidth / this.getCurrentSlidesQty(); + let translateX = this.currentIndex * itemWidth; + if (this.isSnap && !this.isCentered) { + if (this.container.scrollLeft < containerWidth && this.container.scrollLeft + itemWidth / 2 > containerWidth) { + this.container.scrollLeft = this.container.scrollWidth; + } + } + if (this.isCentered && !this.isSnap) { + const centeredOffset = (containerWidth - itemWidth) / 2; + if (this.currentIndex === 0) translateX = -centeredOffset; + else if (this.currentIndex >= this.slides.length - this.getCurrentSlidesQty() + (this.getCurrentSlidesQty() - 1)) { + const totalSlideWidth = this.slides.length * itemWidth; + translateX = totalSlideWidth - containerWidth + centeredOffset; + } else translateX = this.currentIndex * itemWidth - centeredOffset; + } + if (!this.isSnap) this.setTransform(translateX); + if (this.isAutoHeight) { + this.inner.style.height = `${this.slides[this.currentIndex].clientHeight}px`; + } + if (this.dotsItems) this.goToCurrentDot(); + this.addCurrentClass(); + if (!this.isInfiniteLoop) this.addDisabledClass(); + if (this.isSnap && this.hasSnapSpacers) this.buildSnapSpacers(); + if (this.infoCurrent) this.setInfoCurrent(); + } + setTransform(val) { + if (this.slides.length > this.getCurrentSlidesQty()) { + this.inner.style.transform = this.isRTL ? `translate(${val}px, 0px)` : `translate(${-val}px, 0px)`; + } else this.inner.style.transform = "translate(0px, 0px)"; + } + setTranslate(val) { + this.inner.style.transform = this.isRTL ? `translate(${-val}px, 0px)` : `translate(${val}px, 0px)`; + } + setIndex(i) { + this.currentIndex = i; + this.addCurrentClass(); + if (!this.isInfiniteLoop) this.addDisabledClass(); + } + // Public methods + recalculateWidth() { + this.sliderWidth = this.inner.parentElement.getBoundingClientRect().width; + this.calculateWidth(); + if (this.sliderWidth !== this.inner.parentElement.getBoundingClientRect().width) { + this.recalculateWidth(); + } + } + goToPrev() { + if (this.currentIndex > 0) { + this.currentIndex--; + } else { + this.currentIndex = this.slides.length - this.getCurrentSlidesQty(); + } + this.fireEvent("update", this.currentIndex); + if (this.isSnap) { + const itemWidth = this.sliderWidth / this.getCurrentSlidesQty(); + this.container.scrollBy({ + left: Math.max(-this.container.scrollLeft, -itemWidth), + behavior: "smooth" + }); + this.addCurrentClass(); + if (!this.isInfiniteLoop) this.addDisabledClass(); + } else this.calculateTransform(); + if (this.dots) this.setCurrentDot(); + } + goToNext() { + const statement = this.isCentered ? this.slides.length - this.getCurrentSlidesQty() + (this.getCurrentSlidesQty() - 1) : this.slides.length - this.getCurrentSlidesQty(); + if (this.currentIndex < statement) { + this.currentIndex++; + } else { + this.currentIndex = 0; + } + this.fireEvent("update", this.currentIndex); + if (this.isSnap) { + const itemWidth = this.sliderWidth / this.getCurrentSlidesQty(); + const maxScrollLeft = this.container.scrollWidth - this.container.clientWidth; + this.container.scrollBy({ + left: Math.min(itemWidth, maxScrollLeft - this.container.scrollLeft), + behavior: "smooth" + }); + this.addCurrentClass(); + if (!this.isInfiniteLoop) this.addDisabledClass(); + } else this.calculateTransform(); + if (this.dots) this.setCurrentDot(); + } + goTo(i) { + const currentIndex = this.currentIndex; + this.currentIndex = i; + this.fireEvent("update", this.currentIndex); + if (this.isSnap) { + const itemWidth = this.sliderWidth / this.getCurrentSlidesQty(); + const index = currentIndex > this.currentIndex ? currentIndex - this.currentIndex : this.currentIndex - currentIndex; + const width = currentIndex > this.currentIndex ? -(itemWidth * index) : itemWidth * index; + this.container.scrollBy({ + left: width, + behavior: "smooth" + }); + this.addCurrentClass(); + if (!this.isInfiniteLoop) this.addDisabledClass(); + } else this.calculateTransform(); + if (this.dots) this.setCurrentDot(); + } + destroy() { + if (this.loadingClassesAdd) { + if (typeof this.loadingClassesAdd === "string") { + this.inner.classList.remove(this.loadingClassesAdd); + } else this.inner.classList.remove(...this.loadingClassesAdd); + } + if (this.inner && this.afterLoadingClassesAdd) { + setTimeout(() => { + if (typeof this.afterLoadingClassesAdd === "string") { + this.inner.classList.remove(this.afterLoadingClassesAdd); + } else this.inner.classList.remove(...this.afterLoadingClassesAdd); + }); + } + this.el.classList.remove("init"); + this.inner.classList.remove("dragging"); + this.slides.forEach((el) => el.classList.remove("active")); + if (this?.dotsItems?.length) { + this.dotsItems.forEach((el) => el.classList.remove("active")); + } + this.prev.classList.remove("disabled"); + this.next.classList.remove("disabled"); + this.inner.style.width = ""; + this.slides.forEach((el) => el.style.width = ""); + if (!this.isSnap) this.inner.style.transform = ""; + if (this.isAutoHeight) this.inner.style.height = ""; + this.prev.removeEventListener("click", this.onPrevClickListener); + this.next.removeEventListener("click", this.onNextClickListener); + this.container.removeEventListener( + "scroll", + this.onContainerScrollListener + ); + this.el.removeEventListener("touchstart", this.onElementTouchStartListener); + this.el.removeEventListener("touchend", this.onElementTouchEndListener); + this.inner.removeEventListener("mousedown", this.onInnerMouseDownListener); + this.inner.removeEventListener( + "touchstart", + this.onInnerTouchStartListener + ); + document.removeEventListener("mousemove", this.onDocumentMouseMoveListener); + document.removeEventListener("touchmove", this.onDocumentTouchMoveListener); + document.removeEventListener("mouseup", this.onDocumentMouseUpListener); + document.removeEventListener("touchend", this.onDocumentTouchEndListener); + this.inner.querySelectorAll("a:not(.prevented-click)").forEach((el) => { + el.classList.remove("prevented-click"); + el.removeEventListener("click", this.removeClickEventWhileDragging); + }); + if (this?.dotsItems?.length || this.dots.querySelectorAll(":scope > *").length) { + const dots = this?.dotsItems || this.dots.querySelectorAll(":scope > *"); + dots.forEach( + (el) => el.removeEventListener("click", this.onDotClickListener) + ); + this.dots.innerHTML = null; + } + this.inner.querySelector(".hs-snap-before").remove(); + this.inner.querySelector(".hs-snap-after").remove(); + this.dotsItems = null; + this.isDragging = false; + this.dragStartX = null; + this.initialTranslateX = null; + window.$hsCarouselCollection = window.$hsCarouselCollection.filter( + ({ element }) => element.el !== this.el + ); + } + // Static methods + static getInstance(target, isInstance) { + const elInCollection = window.$hsCarouselCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + return elInCollection ? isInstance ? elInCollection : elInCollection.element : null; + } + static autoInit() { + if (!window.$hsCarouselCollection) window.$hsCarouselCollection = []; + if (window.$hsCarouselCollection) { + window.$hsCarouselCollection = window.$hsCarouselCollection.filter( + ({ element }) => document.contains(element.el) + ); + } + document.querySelectorAll("[data-hs-carousel]:not(.--prevent-on-load-init)").forEach((el) => { + if (!window.$hsCarouselCollection.find( + (elC) => elC?.element?.el === el + )) { + new _HSCarousel(el); + } + }); + } +}; +window.addEventListener("load", () => { + HSCarousel.autoInit(); +}); +if (typeof window !== "undefined") { + window.HSCarousel = HSCarousel; +} +var carousel_default = HSCarousel; + +// node_modules/preline/src/plugins/collapse/index.ts +init_utils(); +init_base_plugin(); +var HSCollapse = class _HSCollapse extends HSBasePlugin { + contentId; + content; + animationInProcess; + onElementClickListener; + constructor(el, options, events) { + super(el, options, events); + this.contentId = this.el.dataset.hsCollapse; + this.content = document.querySelector(this.contentId); + this.animationInProcess = false; + if (this.content) this.init(); + } + elementClick() { + if (this.content.classList.contains("open")) { + this.hide(); + } else { + this.show(); + } + } + init() { + this.createCollection(window.$hsCollapseCollection, this); + this.onElementClickListener = () => this.elementClick(); + if (this?.el?.ariaExpanded) { + if (this.el.classList.contains("open")) this.el.ariaExpanded = "true"; + else this.el.ariaExpanded = "false"; + } + this.el.addEventListener("click", this.onElementClickListener); + } + hideAllMegaMenuItems() { + this.content.querySelectorAll(".hs-mega-menu-content.block").forEach((el) => { + el.classList.remove("block"); + el.classList.add("hidden"); + }); + } + // Public methods + show() { + if (this.animationInProcess || this.el.classList.contains("open")) + return false; + this.animationInProcess = true; + this.el.classList.add("open"); + if (this?.el?.ariaExpanded) this.el.ariaExpanded = "true"; + this.content.classList.add("open"); + this.content.classList.remove("hidden"); + this.content.style.height = "0"; + setTimeout(() => { + this.content.style.height = `${this.content.scrollHeight}px`; + this.fireEvent("beforeOpen", this.el); + dispatch("beforeOpen.hs.collapse", this.el, this.el); + }); + afterTransition(this.content, () => { + this.content.style.height = ""; + this.fireEvent("open", this.el); + dispatch("open.hs.collapse", this.el, this.el); + this.animationInProcess = false; + }); + } + hide() { + if (this.animationInProcess || !this.el.classList.contains("open")) + return false; + this.animationInProcess = true; + this.el.classList.remove("open"); + if (this?.el?.ariaExpanded) this.el.ariaExpanded = "false"; + this.content.style.height = `${this.content.scrollHeight}px`; + setTimeout(() => { + this.content.style.height = "0"; + }); + this.content.classList.remove("open"); + afterTransition(this.content, () => { + this.content.classList.add("hidden"); + this.content.style.height = ""; + this.fireEvent("hide", this.el); + dispatch("hide.hs.collapse", this.el, this.el); + this.animationInProcess = false; + }); + if (this.content.querySelectorAll(".hs-mega-menu-content.block").length) { + this.hideAllMegaMenuItems(); + } + } + destroy() { + this.el.removeEventListener("click", this.onElementClickListener); + this.content = null; + this.animationInProcess = false; + window.$hsCollapseCollection = window.$hsCollapseCollection.filter( + ({ element }) => element.el !== this.el + ); + } + // Static methods + static findInCollection(target) { + return window.$hsCollapseCollection.find((el) => { + if (target instanceof _HSCollapse) return el.element.el === target.el; + else if (typeof target === "string") return el.element.el === document.querySelector(target); + else return el.element.el === target; + }) || null; + } + static getInstance(target, isInstance = false) { + const elInCollection = window.$hsCollapseCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + return elInCollection ? isInstance ? elInCollection : elInCollection.element.el : null; + } + static autoInit() { + if (!window.$hsCollapseCollection) window.$hsCollapseCollection = []; + if (window.$hsCollapseCollection) + window.$hsCollapseCollection = window.$hsCollapseCollection.filter( + ({ element }) => document.contains(element.el) + ); + document.querySelectorAll(".hs-collapse-toggle:not(.--prevent-on-load-init)").forEach((el) => { + if (!window.$hsCollapseCollection.find( + (elC) => elC?.element?.el === el + )) + new _HSCollapse(el); + }); + } + static show(target) { + const instance = _HSCollapse.findInCollection(target); + if (instance && instance.element.content.classList.contains("hidden")) instance.element.show(); + } + static hide(target) { + const instance = _HSCollapse.findInCollection(target); + if (instance && !instance.element.content.classList.contains("hidden")) instance.element.hide(); + } + // Backward compatibility + static on(evt, target, cb) { + const instance = _HSCollapse.findInCollection(target); + if (instance) instance.element.events[evt] = cb; + } +}; +window.addEventListener("load", () => { + HSCollapse.autoInit(); +}); +if (typeof window !== "undefined") { + window.HSCollapse = HSCollapse; +} +var collapse_default = HSCollapse; + +// node_modules/preline/src/plugins/combobox/index.ts +init_utils(); +init_base_plugin(); +init_accessibility_manager(); +var HSComboBox = class _HSComboBox extends HSBasePlugin { + gap; + viewport; + preventVisibility; + minSearchLength; + apiUrl; + apiDataPart; + apiQuery; + apiSearchQuery; + apiSearchPath; + apiSearchDefaultPath; + apiHeaders; + apiGroupField; + outputItemTemplate; + outputEmptyTemplate; + outputLoaderTemplate; + groupingType; + groupingTitleTemplate; + tabsWrapperTemplate; + preventSelection; + preventAutoPosition; + preventClientFiltering; + isOpenOnFocus; + keepOriginalOrder; + preserveSelectionOnEmpty; + accessibilityComponent; + input; + output; + itemsWrapper; + items; + tabs; + toggle; + toggleClose; + toggleOpen; + outputPlaceholder; + outputLoader; + value; + selected; + currentData; + groups; + selectedGroup; + isOpened; + isCurrent; + animationInProcess; + isSearchLengthExceeded = false; + onInputFocusListener; + onInputInputListener; + onToggleClickListener; + onToggleCloseClickListener; + onToggleOpenClickListener; + constructor(el, options, events) { + super(el, options, events); + const data = el.getAttribute("data-hs-combo-box"); + const dataOptions = data ? JSON.parse(data) : {}; + const concatOptions = { + ...dataOptions, + ...options + }; + this.gap = 5; + this.viewport = (typeof concatOptions?.viewport === "string" ? document.querySelector(concatOptions?.viewport) : concatOptions?.viewport) ?? null; + this.preventVisibility = concatOptions?.preventVisibility ?? false; + this.minSearchLength = concatOptions?.minSearchLength ?? 0; + this.apiUrl = concatOptions?.apiUrl ?? null; + this.apiDataPart = concatOptions?.apiDataPart ?? null; + this.apiQuery = concatOptions?.apiQuery ?? null; + this.apiSearchQuery = concatOptions?.apiSearchQuery ?? null; + this.apiSearchPath = concatOptions?.apiSearchPath ?? null; + this.apiSearchDefaultPath = concatOptions?.apiSearchDefaultPath ?? null; + this.apiHeaders = concatOptions?.apiHeaders ?? {}; + this.apiGroupField = concatOptions?.apiGroupField ?? null; + this.outputItemTemplate = concatOptions?.outputItemTemplate ?? `
+
+ + +
+
`; + this.outputEmptyTemplate = concatOptions?.outputEmptyTemplate ?? `
Nothing found...
`; + this.outputLoaderTemplate = concatOptions?.outputLoaderTemplate ?? `
+
+ Loading... +
+
`; + this.groupingType = concatOptions?.groupingType ?? null; + this.groupingTitleTemplate = concatOptions?.groupingTitleTemplate ?? (this.groupingType === "default" ? `
` : ``); + this.tabsWrapperTemplate = concatOptions?.tabsWrapperTemplate ?? `
`; + this.preventSelection = concatOptions?.preventSelection ?? false; + this.preventAutoPosition = concatOptions?.preventAutoPosition ?? false; + this.preventClientFiltering = options?.preventClientFiltering ?? (!!concatOptions?.apiSearchQuery || !!concatOptions?.apiSearchPath); + this.isOpenOnFocus = concatOptions?.isOpenOnFocus ?? false; + this.keepOriginalOrder = concatOptions?.keepOriginalOrder ?? false; + this.preserveSelectionOnEmpty = concatOptions?.preserveSelectionOnEmpty ?? true; + this.input = this.el.querySelector("[data-hs-combo-box-input]") ?? null; + this.output = this.el.querySelector("[data-hs-combo-box-output]") ?? null; + this.itemsWrapper = this.el.querySelector("[data-hs-combo-box-output-items-wrapper]") ?? null; + this.items = Array.from(this.el.querySelectorAll("[data-hs-combo-box-output-item]")) ?? []; + this.tabs = []; + this.toggle = this.el.querySelector("[data-hs-combo-box-toggle]") ?? null; + this.toggleClose = this.el.querySelector("[data-hs-combo-box-close]") ?? null; + this.toggleOpen = this.el.querySelector("[data-hs-combo-box-open]") ?? null; + this.outputPlaceholder = null; + this.selected = this.value = this.el.querySelector("[data-hs-combo-box-input]").value ?? ""; + this.currentData = null; + this.isOpened = false; + this.isCurrent = false; + this.animationInProcess = false; + this.selectedGroup = "all"; + this.init(); + } + inputFocus() { + if (!this.isOpened) { + this.setResultAndRender(); + this.open(); + } + } + inputInput(evt) { + const val = evt.target.value.trim(); + if (val.length <= this.minSearchLength) this.setResultAndRender(""); + else this.setResultAndRender(val); + if (!this.preserveSelectionOnEmpty && val === "") { + this.selected = ""; + this.value = ""; + this.currentData = null; + } + if (this.input.value !== "") this.el.classList.add("has-value"); + else this.el.classList.remove("has-value"); + if (!this.isOpened) this.open(); + } + toggleClick() { + if (this.isOpened) this.close(); + else this.open(this.toggle.getAttribute("data-hs-combo-box-toggle")); + } + toggleCloseClick() { + this.close(); + } + toggleOpenClick() { + this.open(); + } + init() { + this.createCollection(window.$hsComboBoxCollection, this); + this.build(); + if (typeof window !== "undefined") { + if (!window.HSAccessibilityObserver) { + window.HSAccessibilityObserver = new accessibility_manager_default(); + } + this.setupAccessibility(); + } + } + build() { + this.buildInput(); + if (this.groupingType) this.setGroups(); + this.buildItems(); + if (this.preventVisibility) { + if (!this.preventAutoPosition) this.recalculateDirection(); + } + if (this.toggle) this.buildToggle(); + if (this.toggleClose) this.buildToggleClose(); + if (this.toggleOpen) this.buildToggleOpen(); + } + getNestedProperty(obj, path) { + return path.split(".").reduce( + (acc, key) => acc && acc[key], + obj + ); + } + setValue(val, data = null) { + this.selected = val; + this.value = val; + this.input.value = val; + if (data) this.currentData = data; + this.fireEvent("select", this.currentData); + dispatch("select.hs.combobox", this.el, this.currentData); + } + setValueAndOpen(val) { + this.value = val; + if (this.items.length) { + this.setItemsVisibility(); + } + } + setValueAndClear(val, data = null) { + if (val) this.setValue(val, data); + else this.setValue(this.selected, data); + if (this.outputPlaceholder) this.destroyOutputPlaceholder(); + } + setSelectedByValue(val) { + this.items.forEach((el) => { + const valueElement = el.querySelector("[data-hs-combo-box-value]"); + if (valueElement && val.includes(valueElement.textContent)) { + el.classList.add("selected"); + } else { + el.classList.remove("selected"); + } + }); + } + setResultAndRender(value = "") { + let _value = this.preventVisibility ? this.input.value : value; + this.setResults(_value); + if (this.apiSearchQuery || this.apiSearchPath || this.apiSearchDefaultPath) this.itemsFromJson(); + if (_value === "") this.isSearchLengthExceeded = true; + else this.isSearchLengthExceeded = false; + this.updatePlaceholderVisibility(); + } + setResults(val) { + this.value = val; + this.resultItems(); + this.updatePlaceholderVisibility(); + } + updatePlaceholderVisibility() { + if (this.hasVisibleItems()) this.destroyOutputPlaceholder(); + else this.buildOutputPlaceholder(); + } + setGroups() { + const groups = []; + this.items.forEach((item) => { + const { group } = JSON.parse( + item.getAttribute("data-hs-combo-box-output-item") + ); + if (!groups.some((el) => el?.name === group.name)) { + groups.push(group); + } + }); + this.groups = groups; + } + setApiGroups(items) { + const groups = []; + items.forEach((item) => { + const group = item[this.apiGroupField]; + if (!groups.some((el) => el.name === group)) { + groups.push({ + name: group, + title: group + }); + } + }); + this.groups = groups; + } + setItemsVisibility() { + if (this.preventClientFiltering) { + this.items.forEach((el) => { + el.style.display = ""; + }); + return false; + } + if (this.groupingType === "tabs" && this.selectedGroup !== "all") { + this.items.forEach((item) => { + item.style.display = "none"; + }); + } + const items = this.groupingType === "tabs" ? this.selectedGroup === "all" ? this.items : this.items.filter((f) => { + const { group } = JSON.parse( + f.getAttribute("data-hs-combo-box-output-item") + ); + return group.name === this.selectedGroup; + }) : this.items; + if (this.groupingType === "tabs" && this.selectedGroup !== "all") { + items.forEach((item) => { + item.style.display = "block"; + }); + } + items.forEach((item) => { + if (!this.isTextExistsAny(item, this.value)) { + item.style.display = "none"; + } else item.style.display = "block"; + }); + if (this.groupingType === "default") { + this.output.querySelectorAll("[data-hs-combo-box-group-title]").forEach((el) => { + const g = el.getAttribute("data-hs-combo-box-group-title"); + const items2 = this.items.filter((f) => { + const { group } = JSON.parse( + f.getAttribute("data-hs-combo-box-output-item") + ); + return group.name === g && f.style.display === "block"; + }); + if (items2.length) el.style.display = "block"; + else el.style.display = "none"; + }); + } + } + isTextExistsAny(el, val) { + return Array.from( + el.querySelectorAll("[data-hs-combo-box-search-text]") + ).some( + (elI) => elI.getAttribute("data-hs-combo-box-search-text").toLowerCase().includes(val.toLowerCase()) + ); + } + hasVisibleItems() { + if (!this.items.length) return false; + return this.items.some((el) => { + const style = window.getComputedStyle(el); + return style.display !== "none" && style.visibility !== "hidden"; + }); + } + valuesBySelector(el) { + return Array.from( + el.querySelectorAll("[data-hs-combo-box-search-text]") + ).reduce( + (acc, cur) => [ + ...acc, + cur.getAttribute("data-hs-combo-box-search-text") + ], + [] + ); + } + sortItems() { + if (this.keepOriginalOrder) return this.items; + const compareFn = (i1, i2) => { + const a = i1.querySelector("[data-hs-combo-box-value]").textContent; + const b = i2.querySelector("[data-hs-combo-box-value]").textContent; + if (a < b) { + return -1; + } else if (a > b) { + return 1; + } + return 0; + }; + return this.items.sort(compareFn); + } + buildInput() { + if (this.isOpenOnFocus) { + this.onInputFocusListener = () => this.inputFocus(); + this.input.addEventListener("focus", this.onInputFocusListener); + } + this.onInputInputListener = debounce( + (evt) => this.inputInput(evt) + ); + this.input.addEventListener("input", this.onInputInputListener); + } + async buildItems() { + this.output.role = "listbox"; + this.output.tabIndex = -1; + this.output.ariaOrientation = "vertical"; + if (this.apiUrl) await this.itemsFromJson(); + else { + if (this.itemsWrapper) this.itemsWrapper.innerHTML = ""; + else this.output.innerHTML = ""; + this.itemsFromHtml(); + } + if (this?.items.length && this.items[0].classList.contains("selected")) { + this.currentData = JSON.parse( + this.items[0].getAttribute("data-hs-combo-box-item-stored-data") + ); + } + } + buildOutputLoader() { + if (this.outputLoader) return false; + this.outputLoader = htmlToElement(this.outputLoaderTemplate); + if (this.items.length || this.outputPlaceholder) { + this.outputLoader.style.position = "absolute"; + this.outputLoader.style.top = "0"; + this.outputLoader.style.bottom = "0"; + this.outputLoader.style.left = "0"; + this.outputLoader.style.right = "0"; + this.outputLoader.style.zIndex = "2"; + } else { + this.outputLoader.style.position = ""; + this.outputLoader.style.top = ""; + this.outputLoader.style.bottom = ""; + this.outputLoader.style.left = ""; + this.outputLoader.style.right = ""; + this.outputLoader.style.zIndex = ""; + this.outputLoader.style.height = "30px"; + } + this.output.append(this.outputLoader); + } + buildToggle() { + if (this.isOpened) { + if (this?.toggle?.ariaExpanded) this.toggle.ariaExpanded = "true"; + if (this?.input?.ariaExpanded) this.input.ariaExpanded = "true"; + } else { + if (this?.toggle?.ariaExpanded) this.toggle.ariaExpanded = "false"; + if (this?.input?.ariaExpanded) this.input.ariaExpanded = "false"; + } + this.onToggleClickListener = () => this.toggleClick(); + this.toggle.addEventListener("click", this.onToggleClickListener); + } + buildToggleClose() { + this.onToggleCloseClickListener = () => this.toggleCloseClick(); + this.toggleClose.addEventListener("click", this.onToggleCloseClickListener); + } + buildToggleOpen() { + this.onToggleOpenClickListener = () => this.toggleOpenClick(); + this.toggleOpen.addEventListener("click", this.onToggleOpenClickListener); + } + buildOutputPlaceholder() { + if (!this.outputPlaceholder) { + this.outputPlaceholder = htmlToElement(this.outputEmptyTemplate); + } + this.appendItemsToWrapper(this.outputPlaceholder); + } + destroyOutputLoader() { + if (this.outputLoader) this.outputLoader.remove(); + this.outputLoader = null; + } + itemRender(item) { + const val = item.querySelector("[data-hs-combo-box-value]").textContent; + const data = JSON.parse(item.getAttribute("data-hs-combo-box-item-stored-data")) ?? null; + if (this.itemsWrapper) this.itemsWrapper.append(item); + else this.output.append(item); + if (!this.preventSelection) { + item.addEventListener("click", () => { + this.close(val, data); + this.setSelectedByValue(this.valuesBySelector(item)); + }); + } + } + plainRender(items) { + items.forEach((item) => { + this.itemRender(item); + }); + } + jsonItemsRender(items) { + items.forEach((item, index) => { + const newItem = htmlToElement(this.outputItemTemplate); + newItem.setAttribute( + "data-hs-combo-box-item-stored-data", + JSON.stringify(item) + ); + newItem.querySelectorAll("[data-hs-combo-box-output-item-field]").forEach((el) => { + const valueAttr = el.getAttribute( + "data-hs-combo-box-output-item-field" + ); + let value = ""; + try { + const fields = JSON.parse(valueAttr); + if (Array.isArray(fields)) { + value = fields.map((field) => this.getNestedProperty(item, field)).filter(Boolean).join(" "); + } else { + value = this.getNestedProperty(item, valueAttr); + } + } catch (e2) { + value = this.getNestedProperty(item, valueAttr); + } + el.textContent = value ?? ""; + if (!value && el.hasAttribute("data-hs-combo-box-output-item-hide-if-empty")) { + el.style.display = "none"; + } + }); + newItem.querySelectorAll("[data-hs-combo-box-search-text]").forEach((el) => { + const valueAttr = el.getAttribute( + "data-hs-combo-box-output-item-field" + ); + let value = ""; + try { + const fields = JSON.parse(valueAttr); + if (Array.isArray(fields)) { + value = fields.map((field) => this.getNestedProperty(item, field)).filter(Boolean).join(" "); + } else { + value = this.getNestedProperty(item, valueAttr); + } + } catch (e2) { + value = this.getNestedProperty(item, valueAttr); + } + el.setAttribute( + "data-hs-combo-box-search-text", + value ?? "" + ); + }); + newItem.querySelectorAll("[data-hs-combo-box-output-item-attr]").forEach((el) => { + const attributes = JSON.parse( + el.getAttribute("data-hs-combo-box-output-item-attr") + ); + attributes.forEach((attr) => { + let value = item[attr.valueFrom]; + if (attr.attr === "class" && el.className) { + el.className = `${el.className} ${value}`.trim(); + } else { + el.setAttribute(attr.attr, value); + } + }); + }); + newItem.setAttribute("tabIndex", `${index}`); + if (this.groupingType === "tabs" || this.groupingType === "default") { + newItem.setAttribute( + "data-hs-combo-box-output-item", + `{"group": {"name": "${item[this.apiGroupField]}", "title": "${item[this.apiGroupField]}"}}` + ); + } + this.items = [...this.items, newItem]; + if (!this.preventSelection) { + newItem.addEventListener("click", () => { + this.close( + newItem.querySelector("[data-hs-combo-box-value]").textContent, + JSON.parse(newItem.getAttribute("data-hs-combo-box-item-stored-data")) + ); + this.setSelectedByValue(this.valuesBySelector(newItem)); + }); + } + this.appendItemsToWrapper(newItem); + }); + } + groupDefaultRender() { + this.groups.forEach((el) => { + const title = htmlToElement(this.groupingTitleTemplate); + title.setAttribute("data-hs-combo-box-group-title", el.name); + title.classList.add("--exclude-accessibility"); + title.innerText = el.title; + if (this.itemsWrapper) this.itemsWrapper.append(title); + else this.output.append(title); + const items = this.sortItems().filter((f) => { + const { group } = JSON.parse( + f.getAttribute("data-hs-combo-box-output-item") + ); + return group.name === el.name; + }); + this.plainRender(items); + }); + } + groupTabsRender() { + const tabsScroll = htmlToElement(this.tabsWrapperTemplate); + const tabsWrapper = htmlToElement( + `
` + ); + tabsScroll.append(tabsWrapper); + this.output.insertBefore(tabsScroll, this.output.firstChild); + const tabDef = htmlToElement(this.groupingTitleTemplate); + tabDef.setAttribute("data-hs-combo-box-group-title", "all"); + tabDef.classList.add("--exclude-accessibility", "active"); + tabDef.innerText = "All"; + this.tabs = [...this.tabs, tabDef]; + tabsWrapper.append(tabDef); + tabDef.addEventListener("click", () => { + this.selectedGroup = "all"; + const selectedTab = this.tabs.find( + (elI) => elI.getAttribute("data-hs-combo-box-group-title") === this.selectedGroup + ); + this.tabs.forEach((el) => el.classList.remove("active")); + selectedTab.classList.add("active"); + this.setItemsVisibility(); + }); + this.groups.forEach((el) => { + const tab = htmlToElement(this.groupingTitleTemplate); + tab.setAttribute("data-hs-combo-box-group-title", el.name); + tab.classList.add("--exclude-accessibility"); + tab.innerText = el.title; + this.tabs = [...this.tabs, tab]; + tabsWrapper.append(tab); + tab.addEventListener("click", () => { + this.selectedGroup = el.name; + const selectedTab = this.tabs.find( + (elI) => elI.getAttribute("data-hs-combo-box-group-title") === this.selectedGroup + ); + this.tabs.forEach((el2) => el2.classList.remove("active")); + selectedTab.classList.add("active"); + this.setItemsVisibility(); + }); + }); + } + itemsFromHtml() { + if (this.groupingType === "default") { + this.groupDefaultRender(); + } else if (this.groupingType === "tabs") { + const items = this.sortItems(); + this.groupTabsRender(); + this.plainRender(items); + } else { + const items = this.sortItems(); + this.plainRender(items); + } + this.setResults(this.input.value); + } + async itemsFromJson() { + if (this.isSearchLengthExceeded) { + this.buildOutputPlaceholder(); + return false; + } + this.buildOutputLoader(); + try { + const query = `${this.apiQuery}`; + let searchQuery; + let searchPath; + let url = this.apiUrl; + if (!this.apiSearchQuery && this.apiSearchPath) { + if (this.apiSearchDefaultPath && this.value === "") { + searchPath = `/${this.apiSearchDefaultPath}`; + } else { + searchPath = `/${this.apiSearchPath}/${this.value.toLowerCase()}`; + } + if (this.apiSearchPath || this.apiSearchDefaultPath) { + url += searchPath; + } + } else { + searchQuery = `${this.apiSearchQuery}=${this.value.toLowerCase()}`; + if (this.apiQuery && this.apiSearchQuery) { + url += `?${searchQuery}&${query}`; + } else if (this.apiQuery) { + url += `?${query}`; + } else if (this.apiSearchQuery) { + url += `?${searchQuery}`; + } + } + const res = await fetch(url, this.apiHeaders); + if (!res.ok) { + this.items = []; + if (this.itemsWrapper) this.itemsWrapper.innerHTML = ""; + else this.output.innerHTML = ""; + this.setResults(this.input.value); + return; + } + let items = await res.json(); + if (this.apiDataPart) { + items = items[this.apiDataPart]; + } + if (!Array.isArray(items)) { + items = []; + } + if (this.apiSearchQuery || this.apiSearchPath) { + this.items = []; + } + if (this.itemsWrapper) { + this.itemsWrapper.innerHTML = ""; + } else { + this.output.innerHTML = ""; + } + if (this.groupingType === "tabs") { + this.setApiGroups(items); + this.groupTabsRender(); + this.jsonItemsRender(items); + } else if (this.groupingType === "default") { + this.setApiGroups(items); + this.groups.forEach((el) => { + const title = htmlToElement(this.groupingTitleTemplate); + title.setAttribute("data-hs-combo-box-group-title", el.name); + title.classList.add("--exclude-accessibility"); + title.innerText = el.title; + const newItems = items.filter( + (i) => i[this.apiGroupField] === el.name + ); + if (this.itemsWrapper) this.itemsWrapper.append(title); + else this.output.append(title); + this.jsonItemsRender(newItems); + }); + } else { + this.jsonItemsRender(items); + } + this.setResults( + this.input.value.length <= this.minSearchLength ? "" : this.input.value + ); + this.updatePlaceholderVisibility(); + } catch (err) { + console.error("Error fetching items:", err); + this.items = []; + if (this.itemsWrapper) { + this.itemsWrapper.innerHTML = ""; + } else { + this.output.innerHTML = ""; + } + this.setResults(this.input.value); + } finally { + this.destroyOutputLoader(); + } + } + appendItemsToWrapper(item) { + if (this.itemsWrapper) { + this.itemsWrapper.append(item); + } else { + this.output.append(item); + } + } + resultItems() { + if (!this.items.length) return false; + this.setItemsVisibility(); + this.setSelectedByValue([this.selected]); + } + destroyOutputPlaceholder() { + if (this.outputPlaceholder) this.outputPlaceholder.remove(); + this.outputPlaceholder = null; + } + getPreparedItems(isReversed = false, output) { + if (!output) return null; + const preparedItems = isReversed ? Array.from( + output.querySelectorAll(":scope > *:not(.--exclude-accessibility)") + ).filter((el) => el.style.display !== "none").reverse() : Array.from( + output.querySelectorAll(":scope > *:not(.--exclude-accessibility)") + ).filter((el) => el.style.display !== "none"); + const items = preparedItems.filter( + (el) => !el.classList.contains("disabled") + ); + return items; + } + setHighlighted(prev, current, input) { + current.focus(); + input.value = current.querySelector("[data-hs-combo-box-value]").getAttribute("data-hs-combo-box-search-text"); + if (prev) prev.classList.remove("hs-combo-box-output-item-highlighted"); + current.classList.add("hs-combo-box-output-item-highlighted"); + } + // Accessibility methods + setupAccessibility() { + const output = this.itemsWrapper ?? this.output; + this.accessibilityComponent = window.HSAccessibilityObserver.registerComponent( + this.el, + { + onEnter: () => this.onEnter(), + onSpace: () => this.onEnter(), + onEsc: () => { + if (this.isOpened) { + this.close(); + if (this.input) this.input.focus(); + } + }, + onArrow: (evt) => { + if (!this.isOpened && evt.key === "ArrowDown") { + this.open(); + return; + } + if (this.isOpened) { + switch (evt.key) { + case "ArrowDown": + this.focusMenuItem("next"); + break; + case "ArrowUp": + this.focusMenuItem("prev"); + break; + case "Home": + this.onStartEnd(true); + break; + case "End": + this.onStartEnd(false); + break; + } + } + } + // onTab: () => this.onTab(), + // onFirstLetter: (key: string) => this.onFirstLetter(key), + }, + this.isOpened, + "ComboBox", + "[data-hs-combo-box]", + output + ); + } + onEnter() { + if (!this.isOpened) { + this.open(); + } else { + const highlighted = this.output.querySelector( + ".hs-combo-box-output-item-highlighted" + ); + if (highlighted) { + this.close( + highlighted.querySelector("[data-hs-combo-box-value]")?.getAttribute( + "data-hs-combo-box-search-text" + ) ?? null, + JSON.parse( + highlighted.getAttribute("data-hs-combo-box-item-stored-data") + ) ?? null + ); + if (this.input) this.input.focus(); + } + } + } + focusMenuItem(direction) { + const output = this.itemsWrapper ?? this.output; + if (!output) return false; + const options = Array.from( + output.querySelectorAll(":scope > *:not(.--exclude-accessibility)") + ).filter((el) => el.style.display !== "none"); + if (!options.length) return false; + const current = output.querySelector( + ".hs-combo-box-output-item-highlighted" + ); + const currentIndex = current ? options.indexOf(current) : -1; + const nextIndex = direction === "next" ? (currentIndex + 1) % options.length : (currentIndex - 1 + options.length) % options.length; + if (current) { + current.classList.remove("hs-combo-box-output-item-highlighted"); + } + options[nextIndex].classList.add("hs-combo-box-output-item-highlighted"); + options[nextIndex].focus(); + this.input.value = options[nextIndex].querySelector("[data-hs-combo-box-value]").getAttribute("data-hs-combo-box-search-text"); + } + onStartEnd(isStart = true) { + const output = this.itemsWrapper ?? this.output; + if (!output) return false; + const options = Array.from( + output.querySelectorAll(":scope > *:not(.--exclude-accessibility)") + ).filter((el) => el.style.display !== "none"); + if (!options.length) return false; + const current = output.querySelector( + ".hs-combo-box-output-item-highlighted" + ); + this.setHighlighted( + current, + options[0], + this.input + ); + } + // Public methods + getCurrentData() { + return this.currentData; + } + setCurrent() { + if (window.$hsComboBoxCollection.length) { + window.$hsComboBoxCollection.map((el) => el.element.isCurrent = false); + this.isCurrent = true; + } + } + open(val) { + if (this.animationInProcess) return false; + if (typeof val !== "undefined") this.setValueAndOpen(val); + if (this.preventVisibility) return false; + this.animationInProcess = true; + this.output.style.display = "block"; + if (!this.preventAutoPosition) this.recalculateDirection(); + setTimeout(() => { + if (this?.input?.ariaExpanded) this.input.ariaExpanded = "true"; + if (this?.toggle?.ariaExpanded) this.toggle.ariaExpanded = "true"; + this.el.classList.add("active"); + this.animationInProcess = false; + }); + this.isOpened = true; + if (window.HSAccessibilityObserver && this.accessibilityComponent) { + window.HSAccessibilityObserver.updateComponentState( + this.accessibilityComponent, + true + ); + } + } + close(val, data = null) { + if (this.animationInProcess) return false; + if (this.preventVisibility) { + this.setValueAndClear(val, data); + if (this.input.value !== "") this.el.classList.add("has-value"); + else this.el.classList.remove("has-value"); + return false; + } + if (!this.preserveSelectionOnEmpty && this.input.value.trim() === "") { + this.selected = ""; + this.value = ""; + } + this.animationInProcess = true; + if (this?.input?.ariaExpanded) this.input.ariaExpanded = "false"; + if (this?.toggle?.ariaExpanded) this.toggle.ariaExpanded = "false"; + this.el.classList.remove("active"); + if (!this.preventAutoPosition) { + this.output.classList.remove("bottom-full", "top-full"); + this.output.style.marginTop = ""; + this.output.style.marginBottom = ""; + } + afterTransition(this.output, () => { + this.output.style.display = "none"; + this.setValueAndClear(val, data || null); + this.animationInProcess = false; + }); + if (this.input.value !== "") this.el.classList.add("has-value"); + else this.el.classList.remove("has-value"); + this.isOpened = false; + if (window.HSAccessibilityObserver && this.accessibilityComponent) { + window.HSAccessibilityObserver.updateComponentState( + this.accessibilityComponent, + false + ); + } + } + recalculateDirection() { + if (isEnoughSpace( + this.output, + this.input, + "bottom", + this.gap, + this.viewport + )) { + this.output.classList.remove("bottom-full"); + this.output.style.marginBottom = ""; + this.output.classList.add("top-full"); + this.output.style.marginTop = `${this.gap}px`; + } else { + this.output.classList.remove("top-full"); + this.output.style.marginTop = ""; + this.output.classList.add("bottom-full"); + this.output.style.marginBottom = `${this.gap}px`; + } + } + destroy() { + this.input.removeEventListener("focus", this.onInputFocusListener); + this.input.removeEventListener("input", this.onInputInputListener); + this.toggle.removeEventListener("click", this.onToggleClickListener); + if (this.toggleClose) { + this.toggleClose.removeEventListener( + "click", + this.onToggleCloseClickListener + ); + } + if (this.toggleOpen) { + this.toggleOpen.removeEventListener( + "click", + this.onToggleOpenClickListener + ); + } + this.el.classList.remove("has-value", "active"); + if (this.items.length) { + this.items.forEach((el) => { + el.classList.remove("selected"); + el.style.display = ""; + }); + } + this.output.removeAttribute("role"); + this.output.removeAttribute("tabindex"); + this.output.removeAttribute("aria-orientation"); + if (this.outputLoader) { + this.outputLoader.remove(); + this.outputLoader = null; + } + if (this.outputPlaceholder) { + this.outputPlaceholder.remove(); + this.outputPlaceholder = null; + } + if (this.apiUrl) { + this.output.innerHTML = ""; + } + this.items = []; + if (typeof window !== "undefined" && window.HSAccessibilityObserver) { + window.HSAccessibilityObserver.unregisterComponent( + this.accessibilityComponent + ); + } + window.$hsComboBoxCollection = window.$hsComboBoxCollection.filter( + ({ element }) => element.el !== this.el + ); + } + // Static methods + static getInstance(target, isInstance) { + const elInCollection = window.$hsComboBoxCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + return elInCollection ? isInstance ? elInCollection : elInCollection.element : null; + } + static autoInit() { + if (!window.$hsComboBoxCollection) { + window.$hsComboBoxCollection = []; + window.addEventListener("click", (evt) => { + const evtTarget = evt.target; + _HSComboBox.closeCurrentlyOpened(evtTarget); + }); + } + if (window.$hsComboBoxCollection) { + window.$hsComboBoxCollection = window.$hsComboBoxCollection.filter( + ({ element }) => document.contains(element.el) + ); + } + document.querySelectorAll("[data-hs-combo-box]:not(.--prevent-on-load-init)").forEach((el) => { + if (!window.$hsComboBoxCollection.find( + (elC) => elC?.element?.el === el + )) { + const data = el.getAttribute("data-hs-combo-box"); + const options = data ? JSON.parse(data) : {}; + new _HSComboBox(el, options); + } + }); + } + static close(target) { + const elInCollection = window.$hsComboBoxCollection.find( + (el) => el.element.el === (typeof target === "string" ? document.querySelector(target) : target) + ); + if (elInCollection && elInCollection.element.isOpened) { + elInCollection.element.close(); + } + } + static closeCurrentlyOpened(evtTarget = null) { + if (!evtTarget.closest("[data-hs-combo-box].active")) { + const currentlyOpened = window.$hsComboBoxCollection.filter( + (el) => el.element.isOpened + ) || null; + if (currentlyOpened) { + currentlyOpened.forEach((el) => { + el.element.close(); + }); + } + } + } +}; +window.addEventListener("load", () => { + HSComboBox.autoInit(); +}); +document.addEventListener("scroll", () => { + if (!window.$hsComboBoxCollection) return false; + const target = window.$hsComboBoxCollection.find((el) => el.element.isOpened); + if (target && !target.element.preventAutoPosition) { + target.element.recalculateDirection(); + } +}); +if (typeof window !== "undefined") { + window.HSComboBox = HSComboBox; +} +var combobox_default = HSComboBox; + +// node_modules/preline/src/plugins/dropdown/index.ts +init_utils(); + +// node_modules/@floating-ui/utils/dist/floating-ui.utils.mjs +var min = Math.min; +var max = Math.max; +var round = Math.round; +var floor = Math.floor; +var createCoords = (v) => ({ + x: v, + y: v +}); +var oppositeSideMap = { + left: "right", + right: "left", + bottom: "top", + top: "bottom" +}; +var oppositeAlignmentMap = { + start: "end", + end: "start" +}; +function evaluate(value, param) { + return typeof value === "function" ? value(param) : value; +} +function getSide(placement) { + return placement.split("-")[0]; +} +function getAlignment(placement) { + return placement.split("-")[1]; +} +function getOppositeAxis(axis) { + return axis === "x" ? "y" : "x"; +} +function getAxisLength(axis) { + return axis === "y" ? "height" : "width"; +} +var yAxisSides = /* @__PURE__ */ new Set(["top", "bottom"]); +function getSideAxis(placement) { + return yAxisSides.has(getSide(placement)) ? "y" : "x"; +} +function getAlignmentAxis(placement) { + return getOppositeAxis(getSideAxis(placement)); +} +function getAlignmentSides(placement, rects, rtl) { + if (rtl === void 0) { + rtl = false; + } + const alignment = getAlignment(placement); + const alignmentAxis = getAlignmentAxis(placement); + const length = getAxisLength(alignmentAxis); + let mainAlignmentSide = alignmentAxis === "x" ? alignment === (rtl ? "end" : "start") ? "right" : "left" : alignment === "start" ? "bottom" : "top"; + if (rects.reference[length] > rects.floating[length]) { + mainAlignmentSide = getOppositePlacement(mainAlignmentSide); + } + return [mainAlignmentSide, getOppositePlacement(mainAlignmentSide)]; +} +function getExpandedPlacements(placement) { + const oppositePlacement = getOppositePlacement(placement); + return [getOppositeAlignmentPlacement(placement), oppositePlacement, getOppositeAlignmentPlacement(oppositePlacement)]; +} +function getOppositeAlignmentPlacement(placement) { + return placement.replace(/start|end/g, (alignment) => oppositeAlignmentMap[alignment]); +} +var lrPlacement = ["left", "right"]; +var rlPlacement = ["right", "left"]; +var tbPlacement = ["top", "bottom"]; +var btPlacement = ["bottom", "top"]; +function getSideList(side, isStart, rtl) { + switch (side) { + case "top": + case "bottom": + if (rtl) return isStart ? rlPlacement : lrPlacement; + return isStart ? lrPlacement : rlPlacement; + case "left": + case "right": + return isStart ? tbPlacement : btPlacement; + default: + return []; + } +} +function getOppositeAxisPlacements(placement, flipAlignment, direction, rtl) { + const alignment = getAlignment(placement); + let list = getSideList(getSide(placement), direction === "start", rtl); + if (alignment) { + list = list.map((side) => side + "-" + alignment); + if (flipAlignment) { + list = list.concat(list.map(getOppositeAlignmentPlacement)); + } + } + return list; +} +function getOppositePlacement(placement) { + return placement.replace(/left|right|bottom|top/g, (side) => oppositeSideMap[side]); +} +function expandPaddingObject(padding) { + return { + top: 0, + right: 0, + bottom: 0, + left: 0, + ...padding + }; +} +function getPaddingObject(padding) { + return typeof padding !== "number" ? expandPaddingObject(padding) : { + top: padding, + right: padding, + bottom: padding, + left: padding + }; +} +function rectToClientRect(rect) { + const { + x, + y, + width, + height + } = rect; + return { + width, + height, + top: y, + left: x, + right: x + width, + bottom: y + height, + x, + y + }; +} + +// node_modules/@floating-ui/core/dist/floating-ui.core.mjs +function computeCoordsFromPlacement(_ref, placement, rtl) { + let { + reference, + floating + } = _ref; + const sideAxis = getSideAxis(placement); + const alignmentAxis = getAlignmentAxis(placement); + const alignLength = getAxisLength(alignmentAxis); + const side = getSide(placement); + const isVertical = sideAxis === "y"; + const commonX = reference.x + reference.width / 2 - floating.width / 2; + const commonY = reference.y + reference.height / 2 - floating.height / 2; + const commonAlign = reference[alignLength] / 2 - floating[alignLength] / 2; + let coords; + switch (side) { + case "top": + coords = { + x: commonX, + y: reference.y - floating.height + }; + break; + case "bottom": + coords = { + x: commonX, + y: reference.y + reference.height + }; + break; + case "right": + coords = { + x: reference.x + reference.width, + y: commonY + }; + break; + case "left": + coords = { + x: reference.x - floating.width, + y: commonY + }; + break; + default: + coords = { + x: reference.x, + y: reference.y + }; + } + switch (getAlignment(placement)) { + case "start": + coords[alignmentAxis] -= commonAlign * (rtl && isVertical ? -1 : 1); + break; + case "end": + coords[alignmentAxis] += commonAlign * (rtl && isVertical ? -1 : 1); + break; + } + return coords; +} +var computePosition = async (reference, floating, config) => { + const { + placement = "bottom", + strategy = "absolute", + middleware = [], + platform: platform2 + } = config; + const validMiddleware = middleware.filter(Boolean); + const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(floating)); + let rects = await platform2.getElementRects({ + reference, + floating, + strategy + }); + let { + x, + y + } = computeCoordsFromPlacement(rects, placement, rtl); + let statefulPlacement = placement; + let middlewareData = {}; + let resetCount = 0; + for (let i = 0; i < validMiddleware.length; i++) { + const { + name, + fn + } = validMiddleware[i]; + const { + x: nextX, + y: nextY, + data, + reset: reset2 + } = await fn({ + x, + y, + initialPlacement: placement, + placement: statefulPlacement, + strategy, + middlewareData, + rects, + platform: platform2, + elements: { + reference, + floating + } + }); + x = nextX != null ? nextX : x; + y = nextY != null ? nextY : y; + middlewareData = { + ...middlewareData, + [name]: { + ...middlewareData[name], + ...data + } + }; + if (reset2 && resetCount <= 50) { + resetCount++; + if (typeof reset2 === "object") { + if (reset2.placement) { + statefulPlacement = reset2.placement; + } + if (reset2.rects) { + rects = reset2.rects === true ? await platform2.getElementRects({ + reference, + floating, + strategy + }) : reset2.rects; + } + ({ + x, + y + } = computeCoordsFromPlacement(rects, statefulPlacement, rtl)); + } + i = -1; + } + } + return { + x, + y, + placement: statefulPlacement, + strategy, + middlewareData + }; +}; +async function detectOverflow(state2, options) { + var _await$platform$isEle; + if (options === void 0) { + options = {}; + } + const { + x, + y, + platform: platform2, + rects, + elements, + strategy + } = state2; + const { + boundary = "clippingAncestors", + rootBoundary = "viewport", + elementContext = "floating", + altBoundary = false, + padding = 0 + } = evaluate(options, state2); + const paddingObject = getPaddingObject(padding); + const altContext = elementContext === "floating" ? "reference" : "floating"; + const element = elements[altBoundary ? altContext : elementContext]; + const clippingClientRect = rectToClientRect(await platform2.getClippingRect({ + element: ((_await$platform$isEle = await (platform2.isElement == null ? void 0 : platform2.isElement(element))) != null ? _await$platform$isEle : true) ? element : element.contextElement || await (platform2.getDocumentElement == null ? void 0 : platform2.getDocumentElement(elements.floating)), + boundary, + rootBoundary, + strategy + })); + const rect = elementContext === "floating" ? { + x, + y, + width: rects.floating.width, + height: rects.floating.height + } : rects.reference; + const offsetParent = await (platform2.getOffsetParent == null ? void 0 : platform2.getOffsetParent(elements.floating)); + const offsetScale = await (platform2.isElement == null ? void 0 : platform2.isElement(offsetParent)) ? await (platform2.getScale == null ? void 0 : platform2.getScale(offsetParent)) || { + x: 1, + y: 1 + } : { + x: 1, + y: 1 + }; + const elementClientRect = rectToClientRect(platform2.convertOffsetParentRelativeRectToViewportRelativeRect ? await platform2.convertOffsetParentRelativeRectToViewportRelativeRect({ + elements, + rect, + offsetParent, + strategy + }) : rect); + return { + top: (clippingClientRect.top - elementClientRect.top + paddingObject.top) / offsetScale.y, + bottom: (elementClientRect.bottom - clippingClientRect.bottom + paddingObject.bottom) / offsetScale.y, + left: (clippingClientRect.left - elementClientRect.left + paddingObject.left) / offsetScale.x, + right: (elementClientRect.right - clippingClientRect.right + paddingObject.right) / offsetScale.x + }; +} +var flip = function(options) { + if (options === void 0) { + options = {}; + } + return { + name: "flip", + options, + async fn(state2) { + var _middlewareData$arrow, _middlewareData$flip; + const { + placement, + middlewareData, + rects, + initialPlacement, + platform: platform2, + elements + } = state2; + const { + mainAxis: checkMainAxis = true, + crossAxis: checkCrossAxis = true, + fallbackPlacements: specifiedFallbackPlacements, + fallbackStrategy = "bestFit", + fallbackAxisSideDirection = "none", + flipAlignment = true, + ...detectOverflowOptions + } = evaluate(options, state2); + if ((_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { + return {}; + } + const side = getSide(placement); + const initialSideAxis = getSideAxis(initialPlacement); + const isBasePlacement = getSide(initialPlacement) === initialPlacement; + const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating)); + const fallbackPlacements = specifiedFallbackPlacements || (isBasePlacement || !flipAlignment ? [getOppositePlacement(initialPlacement)] : getExpandedPlacements(initialPlacement)); + const hasFallbackAxisSideDirection = fallbackAxisSideDirection !== "none"; + if (!specifiedFallbackPlacements && hasFallbackAxisSideDirection) { + fallbackPlacements.push(...getOppositeAxisPlacements(initialPlacement, flipAlignment, fallbackAxisSideDirection, rtl)); + } + const placements2 = [initialPlacement, ...fallbackPlacements]; + const overflow = await detectOverflow(state2, detectOverflowOptions); + const overflows = []; + let overflowsData = ((_middlewareData$flip = middlewareData.flip) == null ? void 0 : _middlewareData$flip.overflows) || []; + if (checkMainAxis) { + overflows.push(overflow[side]); + } + if (checkCrossAxis) { + const sides2 = getAlignmentSides(placement, rects, rtl); + overflows.push(overflow[sides2[0]], overflow[sides2[1]]); + } + overflowsData = [...overflowsData, { + placement, + overflows + }]; + if (!overflows.every((side2) => side2 <= 0)) { + var _middlewareData$flip2, _overflowsData$filter; + const nextIndex = (((_middlewareData$flip2 = middlewareData.flip) == null ? void 0 : _middlewareData$flip2.index) || 0) + 1; + const nextPlacement = placements2[nextIndex]; + if (nextPlacement) { + const ignoreCrossAxisOverflow = checkCrossAxis === "alignment" ? initialSideAxis !== getSideAxis(nextPlacement) : false; + if (!ignoreCrossAxisOverflow || // We leave the current main axis only if every placement on that axis + // overflows the main axis. + overflowsData.every((d) => getSideAxis(d.placement) === initialSideAxis ? d.overflows[0] > 0 : true)) { + return { + data: { + index: nextIndex, + overflows: overflowsData + }, + reset: { + placement: nextPlacement + } + }; + } + } + let resetPlacement = (_overflowsData$filter = overflowsData.filter((d) => d.overflows[0] <= 0).sort((a, b) => a.overflows[1] - b.overflows[1])[0]) == null ? void 0 : _overflowsData$filter.placement; + if (!resetPlacement) { + switch (fallbackStrategy) { + case "bestFit": { + var _overflowsData$filter2; + const placement2 = (_overflowsData$filter2 = overflowsData.filter((d) => { + if (hasFallbackAxisSideDirection) { + const currentSideAxis = getSideAxis(d.placement); + return currentSideAxis === initialSideAxis || // Create a bias to the `y` side axis due to horizontal + // reading directions favoring greater width. + currentSideAxis === "y"; + } + return true; + }).map((d) => [d.placement, d.overflows.filter((overflow2) => overflow2 > 0).reduce((acc, overflow2) => acc + overflow2, 0)]).sort((a, b) => a[1] - b[1])[0]) == null ? void 0 : _overflowsData$filter2[0]; + if (placement2) { + resetPlacement = placement2; + } + break; + } + case "initialPlacement": + resetPlacement = initialPlacement; + break; + } + } + if (placement !== resetPlacement) { + return { + reset: { + placement: resetPlacement + } + }; + } + } + return {}; + } + }; +}; +var originSides = /* @__PURE__ */ new Set(["left", "top"]); +async function convertValueToCoords(state2, options) { + const { + placement, + platform: platform2, + elements + } = state2; + const rtl = await (platform2.isRTL == null ? void 0 : platform2.isRTL(elements.floating)); + const side = getSide(placement); + const alignment = getAlignment(placement); + const isVertical = getSideAxis(placement) === "y"; + const mainAxisMulti = originSides.has(side) ? -1 : 1; + const crossAxisMulti = rtl && isVertical ? -1 : 1; + const rawValue = evaluate(options, state2); + let { + mainAxis, + crossAxis, + alignmentAxis + } = typeof rawValue === "number" ? { + mainAxis: rawValue, + crossAxis: 0, + alignmentAxis: null + } : { + mainAxis: rawValue.mainAxis || 0, + crossAxis: rawValue.crossAxis || 0, + alignmentAxis: rawValue.alignmentAxis + }; + if (alignment && typeof alignmentAxis === "number") { + crossAxis = alignment === "end" ? alignmentAxis * -1 : alignmentAxis; + } + return isVertical ? { + x: crossAxis * crossAxisMulti, + y: mainAxis * mainAxisMulti + } : { + x: mainAxis * mainAxisMulti, + y: crossAxis * crossAxisMulti + }; +} +var offset = function(options) { + if (options === void 0) { + options = 0; + } + return { + name: "offset", + options, + async fn(state2) { + var _middlewareData$offse, _middlewareData$arrow; + const { + x, + y, + placement, + middlewareData + } = state2; + const diffCoords = await convertValueToCoords(state2, options); + if (placement === ((_middlewareData$offse = middlewareData.offset) == null ? void 0 : _middlewareData$offse.placement) && (_middlewareData$arrow = middlewareData.arrow) != null && _middlewareData$arrow.alignmentOffset) { + return {}; + } + return { + x: x + diffCoords.x, + y: y + diffCoords.y, + data: { + ...diffCoords, + placement + } + }; + } + }; +}; + +// node_modules/@floating-ui/utils/dist/floating-ui.utils.dom.mjs +function hasWindow() { + return typeof window !== "undefined"; +} +function getNodeName(node) { + if (isNode(node)) { + return (node.nodeName || "").toLowerCase(); + } + return "#document"; +} +function getWindow(node) { + var _node$ownerDocument; + return (node == null || (_node$ownerDocument = node.ownerDocument) == null ? void 0 : _node$ownerDocument.defaultView) || window; +} +function getDocumentElement(node) { + var _ref; + return (_ref = (isNode(node) ? node.ownerDocument : node.document) || window.document) == null ? void 0 : _ref.documentElement; +} +function isNode(value) { + if (!hasWindow()) { + return false; + } + return value instanceof Node || value instanceof getWindow(value).Node; +} +function isElement(value) { + if (!hasWindow()) { + return false; + } + return value instanceof Element || value instanceof getWindow(value).Element; +} +function isHTMLElement(value) { + if (!hasWindow()) { + return false; + } + return value instanceof HTMLElement || value instanceof getWindow(value).HTMLElement; +} +function isShadowRoot(value) { + if (!hasWindow() || typeof ShadowRoot === "undefined") { + return false; + } + return value instanceof ShadowRoot || value instanceof getWindow(value).ShadowRoot; +} +var invalidOverflowDisplayValues = /* @__PURE__ */ new Set(["inline", "contents"]); +function isOverflowElement(element) { + const { + overflow, + overflowX, + overflowY, + display + } = getComputedStyle2(element); + return /auto|scroll|overlay|hidden|clip/.test(overflow + overflowY + overflowX) && !invalidOverflowDisplayValues.has(display); +} +var tableElements = /* @__PURE__ */ new Set(["table", "td", "th"]); +function isTableElement(element) { + return tableElements.has(getNodeName(element)); +} +var topLayerSelectors = [":popover-open", ":modal"]; +function isTopLayer(element) { + return topLayerSelectors.some((selector) => { + try { + return element.matches(selector); + } catch (_e) { + return false; + } + }); +} +var transformProperties = ["transform", "translate", "scale", "rotate", "perspective"]; +var willChangeValues = ["transform", "translate", "scale", "rotate", "perspective", "filter"]; +var containValues = ["paint", "layout", "strict", "content"]; +function isContainingBlock(elementOrCss) { + const webkit = isWebKit(); + const css = isElement(elementOrCss) ? getComputedStyle2(elementOrCss) : elementOrCss; + return transformProperties.some((value) => css[value] ? css[value] !== "none" : false) || (css.containerType ? css.containerType !== "normal" : false) || !webkit && (css.backdropFilter ? css.backdropFilter !== "none" : false) || !webkit && (css.filter ? css.filter !== "none" : false) || willChangeValues.some((value) => (css.willChange || "").includes(value)) || containValues.some((value) => (css.contain || "").includes(value)); +} +function getContainingBlock(element) { + let currentNode = getParentNode(element); + while (isHTMLElement(currentNode) && !isLastTraversableNode(currentNode)) { + if (isContainingBlock(currentNode)) { + return currentNode; + } else if (isTopLayer(currentNode)) { + return null; + } + currentNode = getParentNode(currentNode); + } + return null; +} +function isWebKit() { + if (typeof CSS === "undefined" || !CSS.supports) return false; + return CSS.supports("-webkit-backdrop-filter", "none"); +} +var lastTraversableNodeNames = /* @__PURE__ */ new Set(["html", "body", "#document"]); +function isLastTraversableNode(node) { + return lastTraversableNodeNames.has(getNodeName(node)); +} +function getComputedStyle2(element) { + return getWindow(element).getComputedStyle(element); +} +function getNodeScroll(element) { + if (isElement(element)) { + return { + scrollLeft: element.scrollLeft, + scrollTop: element.scrollTop + }; + } + return { + scrollLeft: element.scrollX, + scrollTop: element.scrollY + }; +} +function getParentNode(node) { + if (getNodeName(node) === "html") { + return node; + } + const result = ( + // Step into the shadow DOM of the parent of a slotted node. + node.assignedSlot || // DOM Element detected. + node.parentNode || // ShadowRoot detected. + isShadowRoot(node) && node.host || // Fallback. + getDocumentElement(node) + ); + return isShadowRoot(result) ? result.host : result; +} +function getNearestOverflowAncestor(node) { + const parentNode = getParentNode(node); + if (isLastTraversableNode(parentNode)) { + return node.ownerDocument ? node.ownerDocument.body : node.body; + } + if (isHTMLElement(parentNode) && isOverflowElement(parentNode)) { + return parentNode; + } + return getNearestOverflowAncestor(parentNode); +} +function getOverflowAncestors(node, list, traverseIframes) { + var _node$ownerDocument2; + if (list === void 0) { + list = []; + } + if (traverseIframes === void 0) { + traverseIframes = true; + } + const scrollableAncestor = getNearestOverflowAncestor(node); + const isBody = scrollableAncestor === ((_node$ownerDocument2 = node.ownerDocument) == null ? void 0 : _node$ownerDocument2.body); + const win = getWindow(scrollableAncestor); + if (isBody) { + const frameElement = getFrameElement(win); + return list.concat(win, win.visualViewport || [], isOverflowElement(scrollableAncestor) ? scrollableAncestor : [], frameElement && traverseIframes ? getOverflowAncestors(frameElement) : []); + } + return list.concat(scrollableAncestor, getOverflowAncestors(scrollableAncestor, [], traverseIframes)); +} +function getFrameElement(win) { + return win.parent && Object.getPrototypeOf(win.parent) ? win.frameElement : null; +} + +// node_modules/@floating-ui/dom/dist/floating-ui.dom.mjs +function getCssDimensions(element) { + const css = getComputedStyle2(element); + let width = parseFloat(css.width) || 0; + let height = parseFloat(css.height) || 0; + const hasOffset = isHTMLElement(element); + const offsetWidth = hasOffset ? element.offsetWidth : width; + const offsetHeight = hasOffset ? element.offsetHeight : height; + const shouldFallback = round(width) !== offsetWidth || round(height) !== offsetHeight; + if (shouldFallback) { + width = offsetWidth; + height = offsetHeight; + } + return { + width, + height, + $: shouldFallback + }; +} +function unwrapElement(element) { + return !isElement(element) ? element.contextElement : element; +} +function getScale(element) { + const domElement = unwrapElement(element); + if (!isHTMLElement(domElement)) { + return createCoords(1); + } + const rect = domElement.getBoundingClientRect(); + const { + width, + height, + $ + } = getCssDimensions(domElement); + let x = ($ ? round(rect.width) : rect.width) / width; + let y = ($ ? round(rect.height) : rect.height) / height; + if (!x || !Number.isFinite(x)) { + x = 1; + } + if (!y || !Number.isFinite(y)) { + y = 1; + } + return { + x, + y + }; +} +var noOffsets = /* @__PURE__ */ createCoords(0); +function getVisualOffsets(element) { + const win = getWindow(element); + if (!isWebKit() || !win.visualViewport) { + return noOffsets; + } + return { + x: win.visualViewport.offsetLeft, + y: win.visualViewport.offsetTop + }; +} +function shouldAddVisualOffsets(element, isFixed, floatingOffsetParent) { + if (isFixed === void 0) { + isFixed = false; + } + if (!floatingOffsetParent || isFixed && floatingOffsetParent !== getWindow(element)) { + return false; + } + return isFixed; +} +function getBoundingClientRect(element, includeScale, isFixedStrategy, offsetParent) { + if (includeScale === void 0) { + includeScale = false; + } + if (isFixedStrategy === void 0) { + isFixedStrategy = false; + } + const clientRect = element.getBoundingClientRect(); + const domElement = unwrapElement(element); + let scale = createCoords(1); + if (includeScale) { + if (offsetParent) { + if (isElement(offsetParent)) { + scale = getScale(offsetParent); + } + } else { + scale = getScale(element); + } + } + const visualOffsets = shouldAddVisualOffsets(domElement, isFixedStrategy, offsetParent) ? getVisualOffsets(domElement) : createCoords(0); + let x = (clientRect.left + visualOffsets.x) / scale.x; + let y = (clientRect.top + visualOffsets.y) / scale.y; + let width = clientRect.width / scale.x; + let height = clientRect.height / scale.y; + if (domElement) { + const win = getWindow(domElement); + const offsetWin = offsetParent && isElement(offsetParent) ? getWindow(offsetParent) : offsetParent; + let currentWin = win; + let currentIFrame = getFrameElement(currentWin); + while (currentIFrame && offsetParent && offsetWin !== currentWin) { + const iframeScale = getScale(currentIFrame); + const iframeRect = currentIFrame.getBoundingClientRect(); + const css = getComputedStyle2(currentIFrame); + const left = iframeRect.left + (currentIFrame.clientLeft + parseFloat(css.paddingLeft)) * iframeScale.x; + const top = iframeRect.top + (currentIFrame.clientTop + parseFloat(css.paddingTop)) * iframeScale.y; + x *= iframeScale.x; + y *= iframeScale.y; + width *= iframeScale.x; + height *= iframeScale.y; + x += left; + y += top; + currentWin = getWindow(currentIFrame); + currentIFrame = getFrameElement(currentWin); + } + } + return rectToClientRect({ + width, + height, + x, + y + }); +} +function getWindowScrollBarX(element, rect) { + const leftScroll = getNodeScroll(element).scrollLeft; + if (!rect) { + return getBoundingClientRect(getDocumentElement(element)).left + leftScroll; + } + return rect.left + leftScroll; +} +function getHTMLOffset(documentElement, scroll) { + const htmlRect = documentElement.getBoundingClientRect(); + const x = htmlRect.left + scroll.scrollLeft - getWindowScrollBarX(documentElement, htmlRect); + const y = htmlRect.top + scroll.scrollTop; + return { + x, + y + }; +} +function convertOffsetParentRelativeRectToViewportRelativeRect(_ref) { + let { + elements, + rect, + offsetParent, + strategy + } = _ref; + const isFixed = strategy === "fixed"; + const documentElement = getDocumentElement(offsetParent); + const topLayer = elements ? isTopLayer(elements.floating) : false; + if (offsetParent === documentElement || topLayer && isFixed) { + return rect; + } + let scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + let scale = createCoords(1); + const offsets = createCoords(0); + const isOffsetParentAnElement = isHTMLElement(offsetParent); + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { + scroll = getNodeScroll(offsetParent); + } + if (isHTMLElement(offsetParent)) { + const offsetRect = getBoundingClientRect(offsetParent); + scale = getScale(offsetParent); + offsets.x = offsetRect.x + offsetParent.clientLeft; + offsets.y = offsetRect.y + offsetParent.clientTop; + } + } + const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); + return { + width: rect.width * scale.x, + height: rect.height * scale.y, + x: rect.x * scale.x - scroll.scrollLeft * scale.x + offsets.x + htmlOffset.x, + y: rect.y * scale.y - scroll.scrollTop * scale.y + offsets.y + htmlOffset.y + }; +} +function getClientRects(element) { + return Array.from(element.getClientRects()); +} +function getDocumentRect(element) { + const html = getDocumentElement(element); + const scroll = getNodeScroll(element); + const body = element.ownerDocument.body; + const width = max(html.scrollWidth, html.clientWidth, body.scrollWidth, body.clientWidth); + const height = max(html.scrollHeight, html.clientHeight, body.scrollHeight, body.clientHeight); + let x = -scroll.scrollLeft + getWindowScrollBarX(element); + const y = -scroll.scrollTop; + if (getComputedStyle2(body).direction === "rtl") { + x += max(html.clientWidth, body.clientWidth) - width; + } + return { + width, + height, + x, + y + }; +} +var SCROLLBAR_MAX = 25; +function getViewportRect(element, strategy) { + const win = getWindow(element); + const html = getDocumentElement(element); + const visualViewport = win.visualViewport; + let width = html.clientWidth; + let height = html.clientHeight; + let x = 0; + let y = 0; + if (visualViewport) { + width = visualViewport.width; + height = visualViewport.height; + const visualViewportBased = isWebKit(); + if (!visualViewportBased || visualViewportBased && strategy === "fixed") { + x = visualViewport.offsetLeft; + y = visualViewport.offsetTop; + } + } + const windowScrollbarX = getWindowScrollBarX(html); + if (windowScrollbarX <= 0) { + const doc = html.ownerDocument; + const body = doc.body; + const bodyStyles = getComputedStyle(body); + const bodyMarginInline = doc.compatMode === "CSS1Compat" ? parseFloat(bodyStyles.marginLeft) + parseFloat(bodyStyles.marginRight) || 0 : 0; + const clippingStableScrollbarWidth = Math.abs(html.clientWidth - body.clientWidth - bodyMarginInline); + if (clippingStableScrollbarWidth <= SCROLLBAR_MAX) { + width -= clippingStableScrollbarWidth; + } + } else if (windowScrollbarX <= SCROLLBAR_MAX) { + width += windowScrollbarX; + } + return { + width, + height, + x, + y + }; +} +var absoluteOrFixed = /* @__PURE__ */ new Set(["absolute", "fixed"]); +function getInnerBoundingClientRect(element, strategy) { + const clientRect = getBoundingClientRect(element, true, strategy === "fixed"); + const top = clientRect.top + element.clientTop; + const left = clientRect.left + element.clientLeft; + const scale = isHTMLElement(element) ? getScale(element) : createCoords(1); + const width = element.clientWidth * scale.x; + const height = element.clientHeight * scale.y; + const x = left * scale.x; + const y = top * scale.y; + return { + width, + height, + x, + y + }; +} +function getClientRectFromClippingAncestor(element, clippingAncestor, strategy) { + let rect; + if (clippingAncestor === "viewport") { + rect = getViewportRect(element, strategy); + } else if (clippingAncestor === "document") { + rect = getDocumentRect(getDocumentElement(element)); + } else if (isElement(clippingAncestor)) { + rect = getInnerBoundingClientRect(clippingAncestor, strategy); + } else { + const visualOffsets = getVisualOffsets(element); + rect = { + x: clippingAncestor.x - visualOffsets.x, + y: clippingAncestor.y - visualOffsets.y, + width: clippingAncestor.width, + height: clippingAncestor.height + }; + } + return rectToClientRect(rect); +} +function hasFixedPositionAncestor(element, stopNode) { + const parentNode = getParentNode(element); + if (parentNode === stopNode || !isElement(parentNode) || isLastTraversableNode(parentNode)) { + return false; + } + return getComputedStyle2(parentNode).position === "fixed" || hasFixedPositionAncestor(parentNode, stopNode); +} +function getClippingElementAncestors(element, cache) { + const cachedResult = cache.get(element); + if (cachedResult) { + return cachedResult; + } + let result = getOverflowAncestors(element, [], false).filter((el) => isElement(el) && getNodeName(el) !== "body"); + let currentContainingBlockComputedStyle = null; + const elementIsFixed = getComputedStyle2(element).position === "fixed"; + let currentNode = elementIsFixed ? getParentNode(element) : element; + while (isElement(currentNode) && !isLastTraversableNode(currentNode)) { + const computedStyle = getComputedStyle2(currentNode); + const currentNodeIsContaining = isContainingBlock(currentNode); + if (!currentNodeIsContaining && computedStyle.position === "fixed") { + currentContainingBlockComputedStyle = null; + } + const shouldDropCurrentNode = elementIsFixed ? !currentNodeIsContaining && !currentContainingBlockComputedStyle : !currentNodeIsContaining && computedStyle.position === "static" && !!currentContainingBlockComputedStyle && absoluteOrFixed.has(currentContainingBlockComputedStyle.position) || isOverflowElement(currentNode) && !currentNodeIsContaining && hasFixedPositionAncestor(element, currentNode); + if (shouldDropCurrentNode) { + result = result.filter((ancestor) => ancestor !== currentNode); + } else { + currentContainingBlockComputedStyle = computedStyle; + } + currentNode = getParentNode(currentNode); + } + cache.set(element, result); + return result; +} +function getClippingRect(_ref) { + let { + element, + boundary, + rootBoundary, + strategy + } = _ref; + const elementClippingAncestors = boundary === "clippingAncestors" ? isTopLayer(element) ? [] : getClippingElementAncestors(element, this._c) : [].concat(boundary); + const clippingAncestors = [...elementClippingAncestors, rootBoundary]; + const firstClippingAncestor = clippingAncestors[0]; + const clippingRect = clippingAncestors.reduce((accRect, clippingAncestor) => { + const rect = getClientRectFromClippingAncestor(element, clippingAncestor, strategy); + accRect.top = max(rect.top, accRect.top); + accRect.right = min(rect.right, accRect.right); + accRect.bottom = min(rect.bottom, accRect.bottom); + accRect.left = max(rect.left, accRect.left); + return accRect; + }, getClientRectFromClippingAncestor(element, firstClippingAncestor, strategy)); + return { + width: clippingRect.right - clippingRect.left, + height: clippingRect.bottom - clippingRect.top, + x: clippingRect.left, + y: clippingRect.top + }; +} +function getDimensions(element) { + const { + width, + height + } = getCssDimensions(element); + return { + width, + height + }; +} +function getRectRelativeToOffsetParent(element, offsetParent, strategy) { + const isOffsetParentAnElement = isHTMLElement(offsetParent); + const documentElement = getDocumentElement(offsetParent); + const isFixed = strategy === "fixed"; + const rect = getBoundingClientRect(element, true, isFixed, offsetParent); + let scroll = { + scrollLeft: 0, + scrollTop: 0 + }; + const offsets = createCoords(0); + function setLeftRTLScrollbarOffset() { + offsets.x = getWindowScrollBarX(documentElement); + } + if (isOffsetParentAnElement || !isOffsetParentAnElement && !isFixed) { + if (getNodeName(offsetParent) !== "body" || isOverflowElement(documentElement)) { + scroll = getNodeScroll(offsetParent); + } + if (isOffsetParentAnElement) { + const offsetRect = getBoundingClientRect(offsetParent, true, isFixed, offsetParent); + offsets.x = offsetRect.x + offsetParent.clientLeft; + offsets.y = offsetRect.y + offsetParent.clientTop; + } else if (documentElement) { + setLeftRTLScrollbarOffset(); + } + } + if (isFixed && !isOffsetParentAnElement && documentElement) { + setLeftRTLScrollbarOffset(); + } + const htmlOffset = documentElement && !isOffsetParentAnElement && !isFixed ? getHTMLOffset(documentElement, scroll) : createCoords(0); + const x = rect.left + scroll.scrollLeft - offsets.x - htmlOffset.x; + const y = rect.top + scroll.scrollTop - offsets.y - htmlOffset.y; + return { + x, + y, + width: rect.width, + height: rect.height + }; +} +function isStaticPositioned(element) { + return getComputedStyle2(element).position === "static"; +} +function getTrueOffsetParent(element, polyfill) { + if (!isHTMLElement(element) || getComputedStyle2(element).position === "fixed") { + return null; + } + if (polyfill) { + return polyfill(element); + } + let rawOffsetParent = element.offsetParent; + if (getDocumentElement(element) === rawOffsetParent) { + rawOffsetParent = rawOffsetParent.ownerDocument.body; + } + return rawOffsetParent; +} +function getOffsetParent(element, polyfill) { + const win = getWindow(element); + if (isTopLayer(element)) { + return win; + } + if (!isHTMLElement(element)) { + let svgOffsetParent = getParentNode(element); + while (svgOffsetParent && !isLastTraversableNode(svgOffsetParent)) { + if (isElement(svgOffsetParent) && !isStaticPositioned(svgOffsetParent)) { + return svgOffsetParent; + } + svgOffsetParent = getParentNode(svgOffsetParent); + } + return win; + } + let offsetParent = getTrueOffsetParent(element, polyfill); + while (offsetParent && isTableElement(offsetParent) && isStaticPositioned(offsetParent)) { + offsetParent = getTrueOffsetParent(offsetParent, polyfill); + } + if (offsetParent && isLastTraversableNode(offsetParent) && isStaticPositioned(offsetParent) && !isContainingBlock(offsetParent)) { + return win; + } + return offsetParent || getContainingBlock(element) || win; +} +var getElementRects = async function(data) { + const getOffsetParentFn = this.getOffsetParent || getOffsetParent; + const getDimensionsFn = this.getDimensions; + const floatingDimensions = await getDimensionsFn(data.floating); + return { + reference: getRectRelativeToOffsetParent(data.reference, await getOffsetParentFn(data.floating), data.strategy), + floating: { + x: 0, + y: 0, + width: floatingDimensions.width, + height: floatingDimensions.height + } + }; +}; +function isRTL(element) { + return getComputedStyle2(element).direction === "rtl"; +} +var platform = { + convertOffsetParentRelativeRectToViewportRelativeRect, + getDocumentElement, + getClippingRect, + getOffsetParent, + getElementRects, + getClientRects, + getDimensions, + getScale, + isElement, + isRTL +}; +function rectsAreEqual(a, b) { + return a.x === b.x && a.y === b.y && a.width === b.width && a.height === b.height; +} +function observeMove(element, onMove) { + let io = null; + let timeoutId; + const root = getDocumentElement(element); + function cleanup() { + var _io; + clearTimeout(timeoutId); + (_io = io) == null || _io.disconnect(); + io = null; + } + function refresh(skip, threshold) { + if (skip === void 0) { + skip = false; + } + if (threshold === void 0) { + threshold = 1; + } + cleanup(); + const elementRectForRootMargin = element.getBoundingClientRect(); + const { + left, + top, + width, + height + } = elementRectForRootMargin; + if (!skip) { + onMove(); + } + if (!width || !height) { + return; + } + const insetTop = floor(top); + const insetRight = floor(root.clientWidth - (left + width)); + const insetBottom = floor(root.clientHeight - (top + height)); + const insetLeft = floor(left); + const rootMargin = -insetTop + "px " + -insetRight + "px " + -insetBottom + "px " + -insetLeft + "px"; + const options = { + rootMargin, + threshold: max(0, min(1, threshold)) || 1 + }; + let isFirstUpdate = true; + function handleObserve(entries) { + const ratio = entries[0].intersectionRatio; + if (ratio !== threshold) { + if (!isFirstUpdate) { + return refresh(); + } + if (!ratio) { + timeoutId = setTimeout(() => { + refresh(false, 1e-7); + }, 1e3); + } else { + refresh(false, ratio); + } + } + if (ratio === 1 && !rectsAreEqual(elementRectForRootMargin, element.getBoundingClientRect())) { + refresh(); + } + isFirstUpdate = false; + } + try { + io = new IntersectionObserver(handleObserve, { + ...options, + // Handle