diff --git a/docs/package.json b/docs/package.json index c3632d81..ef241920 100644 --- a/docs/package.json +++ b/docs/package.json @@ -10,13 +10,13 @@ "copy_static": "cp ../tree.jquery.js . && cp ../jqtree.css ." }, "devDependencies": { - "@tailwindcss/typography": "^0.5.13", - "autoprefixer": "^10.4.19", - "postcss": "^8.4.40", + "@tailwindcss/typography": "^0.5.15", + "autoprefixer": "^10.4.20", + "postcss": "^8.4.47", "postcss-cli": "^11.0.0", "postcss-import": "^16.1.0", "postcss-load-config": "^6.0.1", "postcss-nested": "^6.2.0", - "tailwindcss": "^3.4.7" + "tailwindcss": "^3.4.14" } } diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 5aa03295..9b43b4cb 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -9,29 +9,29 @@ importers: .: devDependencies: '@tailwindcss/typography': - specifier: ^0.5.13 - version: 0.5.13(tailwindcss@3.4.7) + specifier: ^0.5.15 + version: 0.5.15(tailwindcss@3.4.14) autoprefixer: - specifier: ^10.4.19 - version: 10.4.19(postcss@8.4.40) + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.47) postcss: - specifier: ^8.4.40 - version: 8.4.40 + specifier: ^8.4.47 + version: 8.4.47 postcss-cli: specifier: ^11.0.0 - version: 11.0.0(jiti@1.21.6)(postcss@8.4.40) + version: 11.0.0(jiti@1.21.6)(postcss@8.4.47) postcss-import: specifier: ^16.1.0 - version: 16.1.0(postcss@8.4.40) + version: 16.1.0(postcss@8.4.47) postcss-load-config: specifier: ^6.0.1 - version: 6.0.1(jiti@1.21.6)(postcss@8.4.40)(yaml@2.5.0) + version: 6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.5.1) postcss-nested: specifier: ^6.2.0 - version: 6.2.0(postcss@8.4.40) + version: 6.2.0(postcss@8.4.47) tailwindcss: - specifier: ^3.4.7 - version: 3.4.7 + specifier: ^3.4.14 + version: 3.4.14 packages: @@ -81,17 +81,17 @@ packages: resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} engines: {node: '>=18'} - '@tailwindcss/typography@0.5.13': - resolution: {integrity: sha512-ADGcJ8dX21dVVHIwTRgzrcunY6YY9uSlAHHGVKvkA+vLc5qLwEszvKts40lx7z0qc4clpjclwLeK5rVCV2P/uw==} + '@tailwindcss/typography@0.5.15': + resolution: {integrity: sha512-AqhlCXl+8grUz8uqExv5OTtgpjuVIwFTSXTrh8y9/pw6q2ek7fJ+Y8ZEVw7EB2DCcuCOtEjf9w3+J3rzts01uA==} peerDependencies: - tailwindcss: '>=3.0.0 || insiders' + tailwindcss: '>=3.0.0 || insiders || >=4.0.0-alpha.20' ansi-regex@5.0.1: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-regex@6.0.1: - resolution: {integrity: sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==} + ansi-regex@6.1.0: + resolution: {integrity: sha512-7HSX4QQb4CspciLpVFwyRe79O3xsIZDDLER21kERQ71oaPodF8jL725AgJMFAYbooIqolJoRLuM81SpeUkpkvA==} engines: {node: '>=12'} ansi-styles@4.3.0: @@ -112,8 +112,8 @@ packages: arg@5.0.2: resolution: {integrity: sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==} - autoprefixer@10.4.19: - resolution: {integrity: sha512-BaENR2+zBZ8xXhM4pUaKUxlVdxZ0EZhjvbopwnXmxRUfqDmwSpC2lAi/QXvx7NRdPCo1WKEcEF6mV64si1z4Ew==} + autoprefixer@10.4.20: + resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -133,8 +133,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.2: - resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} + browserslist@4.24.0: + resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -142,8 +142,8 @@ packages: resolution: {integrity: sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==} engines: {node: '>= 6'} - caniuse-lite@1.0.30001646: - resolution: {integrity: sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==} + caniuse-lite@1.0.30001667: + resolution: {integrity: sha512-7LTwJjcRkzKFmtqGsibMeuXmvFDfZq/nzIjnmgCGzKKRVzjD72selLDK1oPF/Oxzmt4fNcPvTDvGqSDG4tCALw==} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} @@ -186,8 +186,8 @@ packages: eastasianwidth@0.2.0: resolution: {integrity: sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==} - electron-to-chromium@1.5.4: - resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==} + electron-to-chromium@1.5.32: + resolution: {integrity: sha512-M+7ph0VGBQqqpTT2YrabjNKSQ2fEl9PVx6AK3N558gDH9NO8O6XN9SXXFWRo9u9PbEg/bWq+tjXQr+eXmxubCw==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -195,8 +195,8 @@ packages: emoji-regex@9.2.2: resolution: {integrity: sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==} - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} fast-glob@3.3.2: @@ -210,8 +210,8 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - foreground-child@3.2.1: - resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} + foreground-child@3.3.0: + resolution: {integrity: sha512-Ld2g8rrAyMYFXBhEqMz8ZAHBi4J4uS1i/CxGMDnjyFWddMXLVcDp051DZfu+t7+ab7Wv6SMqpWmyFIj5UbfFvg==} engines: {node: '>=14'} fraction.js@4.3.7: @@ -260,16 +260,16 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - ignore@5.3.1: - resolution: {integrity: sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==} + ignore@5.3.2: + resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.15.0: - resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} is-extglob@2.1.1: @@ -367,8 +367,8 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} - package-json-from-dist@1.0.0: - resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + package-json-from-dist@1.0.1: + resolution: {integrity: sha512-UEZIS3/by4OC8vL3P2dTXRETpebLI2NiI5vIrjaD/5UtrkFX/tNbwjTSRAGC/+7CAo2pIcBaRgWmcBBHcsaCIw==} path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} @@ -385,8 +385,8 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} - picocolors@1.0.1: - resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} + picocolors@1.1.0: + resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} @@ -486,15 +486,15 @@ packages: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} - postcss-selector-parser@6.1.1: - resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} + postcss-selector-parser@6.1.2: + resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} engines: {node: '>=4'} postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.40: - resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} pretty-hrtime@1.0.3: @@ -542,8 +542,8 @@ packages: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} - source-map-js@1.2.0: - resolution: {integrity: sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==} + source-map-js@1.2.1: + resolution: {integrity: sha512-UXWMKhLOwVKb728IUtQPXxfYU+usdybtUrK/8uGE8CQMvrhOpwvzDBwj0QhSL7MQc7vIsISBG8VQ8+IDQxpfQA==} engines: {node: '>=0.10.0'} string-width@4.2.3: @@ -571,8 +571,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tailwindcss@3.4.7: - resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==} + tailwindcss@3.4.14: + resolution: {integrity: sha512-IcSvOcTRcUtQQ7ILQL5quRDg7Xs93PdJEk1ZLbhhvJc7uj/OAhYOnruEiwnGgBvUtaUAJ8/mhSw1o8L2jCiENA==} engines: {node: '>=14.0.0'} hasBin: true @@ -601,8 +601,8 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - update-browserslist-db@1.1.0: - resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} + update-browserslist-db@1.1.1: + resolution: {integrity: sha512-R8UzCaa9Az+38REPiJ1tXlImTJXlVfgHZsglwBD/k6nj76ctsH1E3q4doGrukiLQd3sGQYu56r5+lo5r94l29A==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -627,8 +627,8 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaml@2.5.0: - resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} engines: {node: '>= 14'} hasBin: true @@ -687,17 +687,17 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@tailwindcss/typography@0.5.13(tailwindcss@3.4.7)': + '@tailwindcss/typography@0.5.15(tailwindcss@3.4.14)': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 3.4.7 + tailwindcss: 3.4.14 ansi-regex@5.0.1: {} - ansi-regex@6.0.1: {} + ansi-regex@6.1.0: {} ansi-styles@4.3.0: dependencies: @@ -714,14 +714,14 @@ snapshots: arg@5.0.2: {} - autoprefixer@10.4.19(postcss@8.4.40): + autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.23.2 - caniuse-lite: 1.0.30001646 + browserslist: 4.24.0 + caniuse-lite: 1.0.30001667 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.1 - postcss: 8.4.40 + picocolors: 1.1.0 + postcss: 8.4.47 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -736,16 +736,16 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.2: + browserslist@4.24.0: dependencies: - caniuse-lite: 1.0.30001646 - electron-to-chromium: 1.5.4 + caniuse-lite: 1.0.30001667 + electron-to-chromium: 1.5.32 node-releases: 2.0.18 - update-browserslist-db: 1.1.0(browserslist@4.23.2) + update-browserslist-db: 1.1.1(browserslist@4.24.0) camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001646: {} + caniuse-lite@1.0.30001667: {} chokidar@3.6.0: dependencies: @@ -789,13 +789,13 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.5.4: {} + electron-to-chromium@1.5.32: {} emoji-regex@8.0.0: {} emoji-regex@9.2.2: {} - escalade@3.1.2: {} + escalade@3.2.0: {} fast-glob@3.3.2: dependencies: @@ -813,7 +813,7 @@ snapshots: dependencies: to-regex-range: 5.0.1 - foreground-child@3.2.1: + foreground-child@3.3.0: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 @@ -845,18 +845,18 @@ snapshots: glob@10.4.5: dependencies: - foreground-child: 3.2.1 + foreground-child: 3.3.0 jackspeak: 3.4.3 minimatch: 9.0.5 minipass: 7.1.2 - package-json-from-dist: 1.0.0 + package-json-from-dist: 1.0.1 path-scurry: 1.11.1 globby@14.0.2: dependencies: '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 path-type: 5.0.0 slash: 5.1.0 unicorn-magic: 0.1.0 @@ -867,13 +867,13 @@ snapshots: dependencies: function-bind: 1.1.2 - ignore@5.3.1: {} + ignore@5.3.2: {} is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 - is-core-module@2.15.0: + is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -948,7 +948,7 @@ snapshots: object-hash@3.0.0: {} - package-json-from-dist@1.0.0: {} + package-json-from-dist@1.0.1: {} path-key@3.1.1: {} @@ -961,7 +961,7 @@ snapshots: path-type@5.0.0: {} - picocolors@1.0.1: {} + picocolors@1.1.0: {} picomatch@2.3.1: {} @@ -969,17 +969,17 @@ snapshots: pirates@4.0.6: {} - postcss-cli@11.0.0(jiti@1.21.6)(postcss@8.4.40): + postcss-cli@11.0.0(jiti@1.21.6)(postcss@8.4.47): dependencies: chokidar: 3.6.0 dependency-graph: 0.11.0 fs-extra: 11.2.0 get-stdin: 9.0.0 globby: 14.0.2 - picocolors: 1.0.1 - postcss: 8.4.40 - postcss-load-config: 5.1.0(jiti@1.21.6)(postcss@8.4.40) - postcss-reporter: 7.1.0(postcss@8.4.40) + picocolors: 1.1.0 + postcss: 8.4.47 + postcss-load-config: 5.1.0(jiti@1.21.6)(postcss@8.4.47) + postcss-reporter: 7.1.0(postcss@8.4.47) pretty-hrtime: 1.0.3 read-cache: 1.0.0 slash: 5.1.0 @@ -988,57 +988,57 @@ snapshots: - jiti - tsx - postcss-import@15.1.0(postcss@8.4.40): + postcss-import@15.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.40 + postcss: 8.4.47 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-import@16.1.0(postcss@8.4.40): + postcss-import@16.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.40 + postcss: 8.4.47 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.40): + postcss-js@4.0.1(postcss@8.4.47): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.40 + postcss: 8.4.47 - postcss-load-config@4.0.2(postcss@8.4.40): + postcss-load-config@4.0.2(postcss@8.4.47): dependencies: lilconfig: 3.1.2 - yaml: 2.5.0 + yaml: 2.5.1 optionalDependencies: - postcss: 8.4.40 + postcss: 8.4.47 - postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.40): + postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.47): dependencies: lilconfig: 3.1.2 - yaml: 2.5.0 + yaml: 2.5.1 optionalDependencies: jiti: 1.21.6 - postcss: 8.4.40 + postcss: 8.4.47 - postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.40)(yaml@2.5.0): + postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.47)(yaml@2.5.1): dependencies: lilconfig: 3.1.2 optionalDependencies: jiti: 1.21.6 - postcss: 8.4.40 - yaml: 2.5.0 + postcss: 8.4.47 + yaml: 2.5.1 - postcss-nested@6.2.0(postcss@8.4.40): + postcss-nested@6.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.40 - postcss-selector-parser: 6.1.1 + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 - postcss-reporter@7.1.0(postcss@8.4.40): + postcss-reporter@7.1.0(postcss@8.4.47): dependencies: - picocolors: 1.0.1 - postcss: 8.4.40 + picocolors: 1.1.0 + postcss: 8.4.47 thenby: 1.3.4 postcss-selector-parser@6.0.10: @@ -1046,18 +1046,18 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@6.1.1: + postcss-selector-parser@6.1.2: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 postcss-value-parser@4.2.0: {} - postcss@8.4.40: + postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.0.1 - source-map-js: 1.2.0 + picocolors: 1.1.0 + source-map-js: 1.2.1 pretty-hrtime@1.0.3: {} @@ -1075,7 +1075,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.15.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -1095,7 +1095,7 @@ snapshots: slash@5.1.0: {} - source-map-js@1.2.0: {} + source-map-js@1.2.1: {} string-width@4.2.3: dependencies: @@ -1115,7 +1115,7 @@ snapshots: strip-ansi@7.1.0: dependencies: - ansi-regex: 6.0.1 + ansi-regex: 6.1.0 sucrase@3.35.0: dependencies: @@ -1129,7 +1129,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tailwindcss@3.4.7: + tailwindcss@3.4.14: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -1144,13 +1144,13 @@ snapshots: micromatch: 4.0.8 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.1 - postcss: 8.4.40 - postcss-import: 15.1.0(postcss@8.4.40) - postcss-js: 4.0.1(postcss@8.4.40) - postcss-load-config: 4.0.2(postcss@8.4.40) - postcss-nested: 6.2.0(postcss@8.4.40) - postcss-selector-parser: 6.1.1 + picocolors: 1.1.0 + postcss: 8.4.47 + postcss-import: 15.1.0(postcss@8.4.47) + postcss-js: 4.0.1(postcss@8.4.47) + postcss-load-config: 4.0.2(postcss@8.4.47) + postcss-nested: 6.2.0(postcss@8.4.47) + postcss-selector-parser: 6.1.2 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -1176,11 +1176,11 @@ snapshots: universalify@2.0.1: {} - update-browserslist-db@1.1.0(browserslist@4.23.2): + update-browserslist-db@1.1.1(browserslist@4.24.0): dependencies: - browserslist: 4.23.2 - escalade: 3.1.2 - picocolors: 1.0.1 + browserslist: 4.24.0 + escalade: 3.2.0 + picocolors: 1.1.0 util-deprecate@1.0.2: {} @@ -1202,14 +1202,14 @@ snapshots: y18n@5.0.8: {} - yaml@2.5.0: {} + yaml@2.5.1: {} yargs-parser@21.1.1: {} yargs@17.7.2: dependencies: cliui: 8.0.1 - escalade: 3.1.2 + escalade: 3.2.0 get-caller-file: 2.0.5 require-directory: 2.1.1 string-width: 4.2.3 diff --git a/docs/static/bower.json b/docs/static/bower.json index 58a51e31..d9af4cee 100644 --- a/docs/static/bower.json +++ b/docs/static/bower.json @@ -1,8 +1,8 @@ { "name": "jqtree-docs", "dependencies": { - "fontawesome": "6.3.0", - "jquery": "3.7.0", - "jquery-mockjax": "2.6.0" + "fontawesome": "^6.3.0", + "jquery": "^3.7.0", + "jquery-mockjax": "^2.6.0" } } diff --git a/docs/static/bower_components/fontawesome/css/all.min.css b/docs/static/bower_components/fontawesome/css/all.min.css index df7439bc..08cf8326 100644 --- a/docs/static/bower_components/fontawesome/css/all.min.css +++ b/docs/static/bower_components/fontawesome/css/all.min.css @@ -1,9 +1,9 @@ /*! - * Font Awesome Free 6.3.0 by @fontawesome - https://fontawesome.com + * Font Awesome Free 6.6.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2023 Fonticons, Inc. + * Copyright 2024 Fonticons, Inc. */ -.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{-webkit-animation-name:fa-beat;animation-name:fa-beat;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{-webkit-animation-name:fa-bounce;animation-name:fa-bounce;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{-webkit-animation-name:fa-fade;animation-name:fa-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{-webkit-animation-name:fa-beat-fade;animation-name:fa-beat-fade;-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1));animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{-webkit-animation-name:fa-flip;animation-name:fa-flip;-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,ease-in-out);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{-webkit-animation-name:fa-shake;animation-name:fa-shake;-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{-webkit-animation-delay:var(--fa-animation-delay,0s);animation-delay:var(--fa-animation-delay,0s);-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-duration:var(--fa-animation-duration,2s);animation-duration:var(--fa-animation-duration,2s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,linear);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{-webkit-animation-name:fa-spin;animation-name:fa-spin;-webkit-animation-direction:var(--fa-animation-direction,normal);animation-direction:var(--fa-animation-direction,normal);-webkit-animation-duration:var(--fa-animation-duration,1s);animation-duration:var(--fa-animation-duration,1s);-webkit-animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-iteration-count:var(--fa-animation-iteration-count,infinite);-webkit-animation-timing-function:var(--fa-animation-timing,steps(8));animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{-webkit-animation-delay:-1ms;animation-delay:-1ms;-webkit-animation-duration:1ms;animation-duration:1ms;-webkit-animation-iteration-count:1;animation-iteration-count:1;-webkit-transition-delay:0s;transition-delay:0s;-webkit-transition-duration:0s;transition-duration:0s}}@-webkit-keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-beat{0%,90%{-webkit-transform:scale(1);transform:scale(1)}45%{-webkit-transform:scale(var(--fa-beat-scale,1.25));transform:scale(var(--fa-beat-scale,1.25))}}@-webkit-keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@keyframes fa-bounce{0%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}10%{-webkit-transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0);transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{-webkit-transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em));transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{-webkit-transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0);transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{-webkit-transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em));transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}to{-webkit-transform:scale(1) translateY(0);transform:scale(1) translateY(0)}}@-webkit-keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@-webkit-keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);-webkit-transform:scale(1);transform:scale(1)}50%{opacity:1;-webkit-transform:scale(var(--fa-beat-fade-scale,1.125));transform:scale(var(--fa-beat-fade-scale,1.125))}}@-webkit-keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-flip{50%{-webkit-transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg));transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@-webkit-keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@keyframes fa-shake{0%{-webkit-transform:rotate(-15deg);transform:rotate(-15deg)}4%{-webkit-transform:rotate(15deg);transform:rotate(15deg)}8%,24%{-webkit-transform:rotate(-18deg);transform:rotate(-18deg)}12%,28%{-webkit-transform:rotate(18deg);transform:rotate(18deg)}16%{-webkit-transform:rotate(-22deg);transform:rotate(-22deg)}20%{-webkit-transform:rotate(22deg);transform:rotate(22deg)}32%{-webkit-transform:rotate(-12deg);transform:rotate(-12deg)}36%{-webkit-transform:rotate(12deg);transform:rotate(12deg)}40%,to{-webkit-transform:rotate(0deg);transform:rotate(0deg)}}@-webkit-keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}@keyframes fa-spin{0%{-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-webkit-transform:rotate(1turn);transform:rotate(1turn)}}.fa-rotate-90{-webkit-transform:rotate(90deg);transform:rotate(90deg)}.fa-rotate-180{-webkit-transform:rotate(180deg);transform:rotate(180deg)}.fa-rotate-270{-webkit-transform:rotate(270deg);transform:rotate(270deg)}.fa-flip-horizontal{-webkit-transform:scaleX(-1);transform:scaleX(-1)}.fa-flip-vertical{-webkit-transform:scaleY(-1);transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{-webkit-transform:scale(-1);transform:scale(-1)}.fa-rotate-by{-webkit-transform:rotate(var(--fa-rotate-angle,none));transform:rotate(var(--fa-rotate-angle,none))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} +.fa{font-family:var(--fa-style-family,"Font Awesome 6 Free");font-weight:var(--fa-style,900)}.fa,.fa-brands,.fa-classic,.fa-regular,.fa-sharp-solid,.fa-solid,.fab,.far,.fas{-moz-osx-font-smoothing:grayscale;-webkit-font-smoothing:antialiased;display:var(--fa-display,inline-block);font-style:normal;font-variant:normal;line-height:1;text-rendering:auto}.fa-classic,.fa-regular,.fa-solid,.far,.fas{font-family:"Font Awesome 6 Free"}.fa-brands,.fab{font-family:"Font Awesome 6 Brands"}.fa-1x{font-size:1em}.fa-2x{font-size:2em}.fa-3x{font-size:3em}.fa-4x{font-size:4em}.fa-5x{font-size:5em}.fa-6x{font-size:6em}.fa-7x{font-size:7em}.fa-8x{font-size:8em}.fa-9x{font-size:9em}.fa-10x{font-size:10em}.fa-2xs{font-size:.625em;line-height:.1em;vertical-align:.225em}.fa-xs{font-size:.75em;line-height:.08333em;vertical-align:.125em}.fa-sm{font-size:.875em;line-height:.07143em;vertical-align:.05357em}.fa-lg{font-size:1.25em;line-height:.05em;vertical-align:-.075em}.fa-xl{font-size:1.5em;line-height:.04167em;vertical-align:-.125em}.fa-2xl{font-size:2em;line-height:.03125em;vertical-align:-.1875em}.fa-fw{text-align:center;width:1.25em}.fa-ul{list-style-type:none;margin-left:var(--fa-li-margin,2.5em);padding-left:0}.fa-ul>li{position:relative}.fa-li{left:calc(var(--fa-li-width, 2em)*-1);position:absolute;text-align:center;width:var(--fa-li-width,2em);line-height:inherit}.fa-border{border-radius:var(--fa-border-radius,.1em);border:var(--fa-border-width,.08em) var(--fa-border-style,solid) var(--fa-border-color,#eee);padding:var(--fa-border-padding,.2em .25em .15em)}.fa-pull-left{float:left;margin-right:var(--fa-pull-margin,.3em)}.fa-pull-right{float:right;margin-left:var(--fa-pull-margin,.3em)}.fa-beat{animation-name:fa-beat;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-bounce{animation-name:fa-bounce;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.28,.84,.42,1))}.fa-fade{animation-name:fa-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-beat-fade,.fa-fade{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s)}.fa-beat-fade{animation-name:fa-beat-fade;animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,cubic-bezier(.4,0,.6,1))}.fa-flip{animation-name:fa-flip;animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,ease-in-out)}.fa-shake{animation-name:fa-shake;animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-shake,.fa-spin{animation-delay:var(--fa-animation-delay,0s);animation-direction:var(--fa-animation-direction,normal)}.fa-spin{animation-name:fa-spin;animation-duration:var(--fa-animation-duration,2s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,linear)}.fa-spin-reverse{--fa-animation-direction:reverse}.fa-pulse,.fa-spin-pulse{animation-name:fa-spin;animation-direction:var(--fa-animation-direction,normal);animation-duration:var(--fa-animation-duration,1s);animation-iteration-count:var(--fa-animation-iteration-count,infinite);animation-timing-function:var(--fa-animation-timing,steps(8))}@media (prefers-reduced-motion:reduce){.fa-beat,.fa-beat-fade,.fa-bounce,.fa-fade,.fa-flip,.fa-pulse,.fa-shake,.fa-spin,.fa-spin-pulse{animation-delay:-1ms;animation-duration:1ms;animation-iteration-count:1;transition-delay:0s;transition-duration:0s}}@keyframes fa-beat{0%,90%{transform:scale(1)}45%{transform:scale(var(--fa-beat-scale,1.25))}}@keyframes fa-bounce{0%{transform:scale(1) translateY(0)}10%{transform:scale(var(--fa-bounce-start-scale-x,1.1),var(--fa-bounce-start-scale-y,.9)) translateY(0)}30%{transform:scale(var(--fa-bounce-jump-scale-x,.9),var(--fa-bounce-jump-scale-y,1.1)) translateY(var(--fa-bounce-height,-.5em))}50%{transform:scale(var(--fa-bounce-land-scale-x,1.05),var(--fa-bounce-land-scale-y,.95)) translateY(0)}57%{transform:scale(1) translateY(var(--fa-bounce-rebound,-.125em))}64%{transform:scale(1) translateY(0)}to{transform:scale(1) translateY(0)}}@keyframes fa-fade{50%{opacity:var(--fa-fade-opacity,.4)}}@keyframes fa-beat-fade{0%,to{opacity:var(--fa-beat-fade-opacity,.4);transform:scale(1)}50%{opacity:1;transform:scale(var(--fa-beat-fade-scale,1.125))}}@keyframes fa-flip{50%{transform:rotate3d(var(--fa-flip-x,0),var(--fa-flip-y,1),var(--fa-flip-z,0),var(--fa-flip-angle,-180deg))}}@keyframes fa-shake{0%{transform:rotate(-15deg)}4%{transform:rotate(15deg)}8%,24%{transform:rotate(-18deg)}12%,28%{transform:rotate(18deg)}16%{transform:rotate(-22deg)}20%{transform:rotate(22deg)}32%{transform:rotate(-12deg)}36%{transform:rotate(12deg)}40%,to{transform:rotate(0deg)}}@keyframes fa-spin{0%{transform:rotate(0deg)}to{transform:rotate(1turn)}}.fa-rotate-90{transform:rotate(90deg)}.fa-rotate-180{transform:rotate(180deg)}.fa-rotate-270{transform:rotate(270deg)}.fa-flip-horizontal{transform:scaleX(-1)}.fa-flip-vertical{transform:scaleY(-1)}.fa-flip-both,.fa-flip-horizontal.fa-flip-vertical{transform:scale(-1)}.fa-rotate-by{transform:rotate(var(--fa-rotate-angle,0))}.fa-stack{display:inline-block;height:2em;line-height:2em;position:relative;vertical-align:middle;width:2.5em}.fa-stack-1x,.fa-stack-2x{left:0;position:absolute;text-align:center;width:100%;z-index:var(--fa-stack-z-index,auto)}.fa-stack-1x{line-height:inherit}.fa-stack-2x{font-size:2em}.fa-inverse{color:var(--fa-inverse,#fff)} -.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-arrow-turn-right:before,.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} -.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file +.fa-0:before{content:"\30"}.fa-1:before{content:"\31"}.fa-2:before{content:"\32"}.fa-3:before{content:"\33"}.fa-4:before{content:"\34"}.fa-5:before{content:"\35"}.fa-6:before{content:"\36"}.fa-7:before{content:"\37"}.fa-8:before{content:"\38"}.fa-9:before{content:"\39"}.fa-fill-drip:before{content:"\f576"}.fa-arrows-to-circle:before{content:"\e4bd"}.fa-chevron-circle-right:before,.fa-circle-chevron-right:before{content:"\f138"}.fa-at:before{content:"\40"}.fa-trash-alt:before,.fa-trash-can:before{content:"\f2ed"}.fa-text-height:before{content:"\f034"}.fa-user-times:before,.fa-user-xmark:before{content:"\f235"}.fa-stethoscope:before{content:"\f0f1"}.fa-comment-alt:before,.fa-message:before{content:"\f27a"}.fa-info:before{content:"\f129"}.fa-compress-alt:before,.fa-down-left-and-up-right-to-center:before{content:"\f422"}.fa-explosion:before{content:"\e4e9"}.fa-file-alt:before,.fa-file-lines:before,.fa-file-text:before{content:"\f15c"}.fa-wave-square:before{content:"\f83e"}.fa-ring:before{content:"\f70b"}.fa-building-un:before{content:"\e4d9"}.fa-dice-three:before{content:"\f527"}.fa-calendar-alt:before,.fa-calendar-days:before{content:"\f073"}.fa-anchor-circle-check:before{content:"\e4aa"}.fa-building-circle-arrow-right:before{content:"\e4d1"}.fa-volleyball-ball:before,.fa-volleyball:before{content:"\f45f"}.fa-arrows-up-to-line:before{content:"\e4c2"}.fa-sort-desc:before,.fa-sort-down:before{content:"\f0dd"}.fa-circle-minus:before,.fa-minus-circle:before{content:"\f056"}.fa-door-open:before{content:"\f52b"}.fa-right-from-bracket:before,.fa-sign-out-alt:before{content:"\f2f5"}.fa-atom:before{content:"\f5d2"}.fa-soap:before{content:"\e06e"}.fa-heart-music-camera-bolt:before,.fa-icons:before{content:"\f86d"}.fa-microphone-alt-slash:before,.fa-microphone-lines-slash:before{content:"\f539"}.fa-bridge-circle-check:before{content:"\e4c9"}.fa-pump-medical:before{content:"\e06a"}.fa-fingerprint:before{content:"\f577"}.fa-hand-point-right:before{content:"\f0a4"}.fa-magnifying-glass-location:before,.fa-search-location:before{content:"\f689"}.fa-forward-step:before,.fa-step-forward:before{content:"\f051"}.fa-face-smile-beam:before,.fa-smile-beam:before{content:"\f5b8"}.fa-flag-checkered:before{content:"\f11e"}.fa-football-ball:before,.fa-football:before{content:"\f44e"}.fa-school-circle-exclamation:before{content:"\e56c"}.fa-crop:before{content:"\f125"}.fa-angle-double-down:before,.fa-angles-down:before{content:"\f103"}.fa-users-rectangle:before{content:"\e594"}.fa-people-roof:before{content:"\e537"}.fa-people-line:before{content:"\e534"}.fa-beer-mug-empty:before,.fa-beer:before{content:"\f0fc"}.fa-diagram-predecessor:before{content:"\e477"}.fa-arrow-up-long:before,.fa-long-arrow-up:before{content:"\f176"}.fa-burn:before,.fa-fire-flame-simple:before{content:"\f46a"}.fa-male:before,.fa-person:before{content:"\f183"}.fa-laptop:before{content:"\f109"}.fa-file-csv:before{content:"\f6dd"}.fa-menorah:before{content:"\f676"}.fa-truck-plane:before{content:"\e58f"}.fa-record-vinyl:before{content:"\f8d9"}.fa-face-grin-stars:before,.fa-grin-stars:before{content:"\f587"}.fa-bong:before{content:"\f55c"}.fa-pastafarianism:before,.fa-spaghetti-monster-flying:before{content:"\f67b"}.fa-arrow-down-up-across-line:before{content:"\e4af"}.fa-spoon:before,.fa-utensil-spoon:before{content:"\f2e5"}.fa-jar-wheat:before{content:"\e517"}.fa-envelopes-bulk:before,.fa-mail-bulk:before{content:"\f674"}.fa-file-circle-exclamation:before{content:"\e4eb"}.fa-circle-h:before,.fa-hospital-symbol:before{content:"\f47e"}.fa-pager:before{content:"\f815"}.fa-address-book:before,.fa-contact-book:before{content:"\f2b9"}.fa-strikethrough:before{content:"\f0cc"}.fa-k:before{content:"\4b"}.fa-landmark-flag:before{content:"\e51c"}.fa-pencil-alt:before,.fa-pencil:before{content:"\f303"}.fa-backward:before{content:"\f04a"}.fa-caret-right:before{content:"\f0da"}.fa-comments:before{content:"\f086"}.fa-file-clipboard:before,.fa-paste:before{content:"\f0ea"}.fa-code-pull-request:before{content:"\e13c"}.fa-clipboard-list:before{content:"\f46d"}.fa-truck-loading:before,.fa-truck-ramp-box:before{content:"\f4de"}.fa-user-check:before{content:"\f4fc"}.fa-vial-virus:before{content:"\e597"}.fa-sheet-plastic:before{content:"\e571"}.fa-blog:before{content:"\f781"}.fa-user-ninja:before{content:"\f504"}.fa-person-arrow-up-from-line:before{content:"\e539"}.fa-scroll-torah:before,.fa-torah:before{content:"\f6a0"}.fa-broom-ball:before,.fa-quidditch-broom-ball:before,.fa-quidditch:before{content:"\f458"}.fa-toggle-off:before{content:"\f204"}.fa-archive:before,.fa-box-archive:before{content:"\f187"}.fa-person-drowning:before{content:"\e545"}.fa-arrow-down-9-1:before,.fa-sort-numeric-desc:before,.fa-sort-numeric-down-alt:before{content:"\f886"}.fa-face-grin-tongue-squint:before,.fa-grin-tongue-squint:before{content:"\f58a"}.fa-spray-can:before{content:"\f5bd"}.fa-truck-monster:before{content:"\f63b"}.fa-w:before{content:"\57"}.fa-earth-africa:before,.fa-globe-africa:before{content:"\f57c"}.fa-rainbow:before{content:"\f75b"}.fa-circle-notch:before{content:"\f1ce"}.fa-tablet-alt:before,.fa-tablet-screen-button:before{content:"\f3fa"}.fa-paw:before{content:"\f1b0"}.fa-cloud:before{content:"\f0c2"}.fa-trowel-bricks:before{content:"\e58a"}.fa-face-flushed:before,.fa-flushed:before{content:"\f579"}.fa-hospital-user:before{content:"\f80d"}.fa-tent-arrow-left-right:before{content:"\e57f"}.fa-gavel:before,.fa-legal:before{content:"\f0e3"}.fa-binoculars:before{content:"\f1e5"}.fa-microphone-slash:before{content:"\f131"}.fa-box-tissue:before{content:"\e05b"}.fa-motorcycle:before{content:"\f21c"}.fa-bell-concierge:before,.fa-concierge-bell:before{content:"\f562"}.fa-pen-ruler:before,.fa-pencil-ruler:before{content:"\f5ae"}.fa-people-arrows-left-right:before,.fa-people-arrows:before{content:"\e068"}.fa-mars-and-venus-burst:before{content:"\e523"}.fa-caret-square-right:before,.fa-square-caret-right:before{content:"\f152"}.fa-cut:before,.fa-scissors:before{content:"\f0c4"}.fa-sun-plant-wilt:before{content:"\e57a"}.fa-toilets-portable:before{content:"\e584"}.fa-hockey-puck:before{content:"\f453"}.fa-table:before{content:"\f0ce"}.fa-magnifying-glass-arrow-right:before{content:"\e521"}.fa-digital-tachograph:before,.fa-tachograph-digital:before{content:"\f566"}.fa-users-slash:before{content:"\e073"}.fa-clover:before{content:"\e139"}.fa-mail-reply:before,.fa-reply:before{content:"\f3e5"}.fa-star-and-crescent:before{content:"\f699"}.fa-house-fire:before{content:"\e50c"}.fa-minus-square:before,.fa-square-minus:before{content:"\f146"}.fa-helicopter:before{content:"\f533"}.fa-compass:before{content:"\f14e"}.fa-caret-square-down:before,.fa-square-caret-down:before{content:"\f150"}.fa-file-circle-question:before{content:"\e4ef"}.fa-laptop-code:before{content:"\f5fc"}.fa-swatchbook:before{content:"\f5c3"}.fa-prescription-bottle:before{content:"\f485"}.fa-bars:before,.fa-navicon:before{content:"\f0c9"}.fa-people-group:before{content:"\e533"}.fa-hourglass-3:before,.fa-hourglass-end:before{content:"\f253"}.fa-heart-broken:before,.fa-heart-crack:before{content:"\f7a9"}.fa-external-link-square-alt:before,.fa-square-up-right:before{content:"\f360"}.fa-face-kiss-beam:before,.fa-kiss-beam:before{content:"\f597"}.fa-film:before{content:"\f008"}.fa-ruler-horizontal:before{content:"\f547"}.fa-people-robbery:before{content:"\e536"}.fa-lightbulb:before{content:"\f0eb"}.fa-caret-left:before{content:"\f0d9"}.fa-circle-exclamation:before,.fa-exclamation-circle:before{content:"\f06a"}.fa-school-circle-xmark:before{content:"\e56d"}.fa-arrow-right-from-bracket:before,.fa-sign-out:before{content:"\f08b"}.fa-chevron-circle-down:before,.fa-circle-chevron-down:before{content:"\f13a"}.fa-unlock-alt:before,.fa-unlock-keyhole:before{content:"\f13e"}.fa-cloud-showers-heavy:before{content:"\f740"}.fa-headphones-alt:before,.fa-headphones-simple:before{content:"\f58f"}.fa-sitemap:before{content:"\f0e8"}.fa-circle-dollar-to-slot:before,.fa-donate:before{content:"\f4b9"}.fa-memory:before{content:"\f538"}.fa-road-spikes:before{content:"\e568"}.fa-fire-burner:before{content:"\e4f1"}.fa-flag:before{content:"\f024"}.fa-hanukiah:before{content:"\f6e6"}.fa-feather:before{content:"\f52d"}.fa-volume-down:before,.fa-volume-low:before{content:"\f027"}.fa-comment-slash:before{content:"\f4b3"}.fa-cloud-sun-rain:before{content:"\f743"}.fa-compress:before{content:"\f066"}.fa-wheat-alt:before,.fa-wheat-awn:before{content:"\e2cd"}.fa-ankh:before{content:"\f644"}.fa-hands-holding-child:before{content:"\e4fa"}.fa-asterisk:before{content:"\2a"}.fa-check-square:before,.fa-square-check:before{content:"\f14a"}.fa-peseta-sign:before{content:"\e221"}.fa-header:before,.fa-heading:before{content:"\f1dc"}.fa-ghost:before{content:"\f6e2"}.fa-list-squares:before,.fa-list:before{content:"\f03a"}.fa-phone-square-alt:before,.fa-square-phone-flip:before{content:"\f87b"}.fa-cart-plus:before{content:"\f217"}.fa-gamepad:before{content:"\f11b"}.fa-circle-dot:before,.fa-dot-circle:before{content:"\f192"}.fa-dizzy:before,.fa-face-dizzy:before{content:"\f567"}.fa-egg:before{content:"\f7fb"}.fa-house-medical-circle-xmark:before{content:"\e513"}.fa-campground:before{content:"\f6bb"}.fa-folder-plus:before{content:"\f65e"}.fa-futbol-ball:before,.fa-futbol:before,.fa-soccer-ball:before{content:"\f1e3"}.fa-paint-brush:before,.fa-paintbrush:before{content:"\f1fc"}.fa-lock:before{content:"\f023"}.fa-gas-pump:before{content:"\f52f"}.fa-hot-tub-person:before,.fa-hot-tub:before{content:"\f593"}.fa-map-location:before,.fa-map-marked:before{content:"\f59f"}.fa-house-flood-water:before{content:"\e50e"}.fa-tree:before{content:"\f1bb"}.fa-bridge-lock:before{content:"\e4cc"}.fa-sack-dollar:before{content:"\f81d"}.fa-edit:before,.fa-pen-to-square:before{content:"\f044"}.fa-car-side:before{content:"\f5e4"}.fa-share-alt:before,.fa-share-nodes:before{content:"\f1e0"}.fa-heart-circle-minus:before{content:"\e4ff"}.fa-hourglass-2:before,.fa-hourglass-half:before{content:"\f252"}.fa-microscope:before{content:"\f610"}.fa-sink:before{content:"\e06d"}.fa-bag-shopping:before,.fa-shopping-bag:before{content:"\f290"}.fa-arrow-down-z-a:before,.fa-sort-alpha-desc:before,.fa-sort-alpha-down-alt:before{content:"\f881"}.fa-mitten:before{content:"\f7b5"}.fa-person-rays:before{content:"\e54d"}.fa-users:before{content:"\f0c0"}.fa-eye-slash:before{content:"\f070"}.fa-flask-vial:before{content:"\e4f3"}.fa-hand-paper:before,.fa-hand:before{content:"\f256"}.fa-om:before{content:"\f679"}.fa-worm:before{content:"\e599"}.fa-house-circle-xmark:before{content:"\e50b"}.fa-plug:before{content:"\f1e6"}.fa-chevron-up:before{content:"\f077"}.fa-hand-spock:before{content:"\f259"}.fa-stopwatch:before{content:"\f2f2"}.fa-face-kiss:before,.fa-kiss:before{content:"\f596"}.fa-bridge-circle-xmark:before{content:"\e4cb"}.fa-face-grin-tongue:before,.fa-grin-tongue:before{content:"\f589"}.fa-chess-bishop:before{content:"\f43a"}.fa-face-grin-wink:before,.fa-grin-wink:before{content:"\f58c"}.fa-deaf:before,.fa-deafness:before,.fa-ear-deaf:before,.fa-hard-of-hearing:before{content:"\f2a4"}.fa-road-circle-check:before{content:"\e564"}.fa-dice-five:before{content:"\f523"}.fa-rss-square:before,.fa-square-rss:before{content:"\f143"}.fa-land-mine-on:before{content:"\e51b"}.fa-i-cursor:before{content:"\f246"}.fa-stamp:before{content:"\f5bf"}.fa-stairs:before{content:"\e289"}.fa-i:before{content:"\49"}.fa-hryvnia-sign:before,.fa-hryvnia:before{content:"\f6f2"}.fa-pills:before{content:"\f484"}.fa-face-grin-wide:before,.fa-grin-alt:before{content:"\f581"}.fa-tooth:before{content:"\f5c9"}.fa-v:before{content:"\56"}.fa-bangladeshi-taka-sign:before{content:"\e2e6"}.fa-bicycle:before{content:"\f206"}.fa-rod-asclepius:before,.fa-rod-snake:before,.fa-staff-aesculapius:before,.fa-staff-snake:before{content:"\e579"}.fa-head-side-cough-slash:before{content:"\e062"}.fa-ambulance:before,.fa-truck-medical:before{content:"\f0f9"}.fa-wheat-awn-circle-exclamation:before{content:"\e598"}.fa-snowman:before{content:"\f7d0"}.fa-mortar-pestle:before{content:"\f5a7"}.fa-road-barrier:before{content:"\e562"}.fa-school:before{content:"\f549"}.fa-igloo:before{content:"\f7ae"}.fa-joint:before{content:"\f595"}.fa-angle-right:before{content:"\f105"}.fa-horse:before{content:"\f6f0"}.fa-q:before{content:"\51"}.fa-g:before{content:"\47"}.fa-notes-medical:before{content:"\f481"}.fa-temperature-2:before,.fa-temperature-half:before,.fa-thermometer-2:before,.fa-thermometer-half:before{content:"\f2c9"}.fa-dong-sign:before{content:"\e169"}.fa-capsules:before{content:"\f46b"}.fa-poo-bolt:before,.fa-poo-storm:before{content:"\f75a"}.fa-face-frown-open:before,.fa-frown-open:before{content:"\f57a"}.fa-hand-point-up:before{content:"\f0a6"}.fa-money-bill:before{content:"\f0d6"}.fa-bookmark:before{content:"\f02e"}.fa-align-justify:before{content:"\f039"}.fa-umbrella-beach:before{content:"\f5ca"}.fa-helmet-un:before{content:"\e503"}.fa-bullseye:before{content:"\f140"}.fa-bacon:before{content:"\f7e5"}.fa-hand-point-down:before{content:"\f0a7"}.fa-arrow-up-from-bracket:before{content:"\e09a"}.fa-folder-blank:before,.fa-folder:before{content:"\f07b"}.fa-file-medical-alt:before,.fa-file-waveform:before{content:"\f478"}.fa-radiation:before{content:"\f7b9"}.fa-chart-simple:before{content:"\e473"}.fa-mars-stroke:before{content:"\f229"}.fa-vial:before{content:"\f492"}.fa-dashboard:before,.fa-gauge-med:before,.fa-gauge:before,.fa-tachometer-alt-average:before{content:"\f624"}.fa-magic-wand-sparkles:before,.fa-wand-magic-sparkles:before{content:"\e2ca"}.fa-e:before{content:"\45"}.fa-pen-alt:before,.fa-pen-clip:before{content:"\f305"}.fa-bridge-circle-exclamation:before{content:"\e4ca"}.fa-user:before{content:"\f007"}.fa-school-circle-check:before{content:"\e56b"}.fa-dumpster:before{content:"\f793"}.fa-shuttle-van:before,.fa-van-shuttle:before{content:"\f5b6"}.fa-building-user:before{content:"\e4da"}.fa-caret-square-left:before,.fa-square-caret-left:before{content:"\f191"}.fa-highlighter:before{content:"\f591"}.fa-key:before{content:"\f084"}.fa-bullhorn:before{content:"\f0a1"}.fa-globe:before{content:"\f0ac"}.fa-synagogue:before{content:"\f69b"}.fa-person-half-dress:before{content:"\e548"}.fa-road-bridge:before{content:"\e563"}.fa-location-arrow:before{content:"\f124"}.fa-c:before{content:"\43"}.fa-tablet-button:before{content:"\f10a"}.fa-building-lock:before{content:"\e4d6"}.fa-pizza-slice:before{content:"\f818"}.fa-money-bill-wave:before{content:"\f53a"}.fa-area-chart:before,.fa-chart-area:before{content:"\f1fe"}.fa-house-flag:before{content:"\e50d"}.fa-person-circle-minus:before{content:"\e540"}.fa-ban:before,.fa-cancel:before{content:"\f05e"}.fa-camera-rotate:before{content:"\e0d8"}.fa-air-freshener:before,.fa-spray-can-sparkles:before{content:"\f5d0"}.fa-star:before{content:"\f005"}.fa-repeat:before{content:"\f363"}.fa-cross:before{content:"\f654"}.fa-box:before{content:"\f466"}.fa-venus-mars:before{content:"\f228"}.fa-arrow-pointer:before,.fa-mouse-pointer:before{content:"\f245"}.fa-expand-arrows-alt:before,.fa-maximize:before{content:"\f31e"}.fa-charging-station:before{content:"\f5e7"}.fa-shapes:before,.fa-triangle-circle-square:before{content:"\f61f"}.fa-random:before,.fa-shuffle:before{content:"\f074"}.fa-person-running:before,.fa-running:before{content:"\f70c"}.fa-mobile-retro:before{content:"\e527"}.fa-grip-lines-vertical:before{content:"\f7a5"}.fa-spider:before{content:"\f717"}.fa-hands-bound:before{content:"\e4f9"}.fa-file-invoice-dollar:before{content:"\f571"}.fa-plane-circle-exclamation:before{content:"\e556"}.fa-x-ray:before{content:"\f497"}.fa-spell-check:before{content:"\f891"}.fa-slash:before{content:"\f715"}.fa-computer-mouse:before,.fa-mouse:before{content:"\f8cc"}.fa-arrow-right-to-bracket:before,.fa-sign-in:before{content:"\f090"}.fa-shop-slash:before,.fa-store-alt-slash:before{content:"\e070"}.fa-server:before{content:"\f233"}.fa-virus-covid-slash:before{content:"\e4a9"}.fa-shop-lock:before{content:"\e4a5"}.fa-hourglass-1:before,.fa-hourglass-start:before{content:"\f251"}.fa-blender-phone:before{content:"\f6b6"}.fa-building-wheat:before{content:"\e4db"}.fa-person-breastfeeding:before{content:"\e53a"}.fa-right-to-bracket:before,.fa-sign-in-alt:before{content:"\f2f6"}.fa-venus:before{content:"\f221"}.fa-passport:before{content:"\f5ab"}.fa-thumb-tack-slash:before,.fa-thumbtack-slash:before{content:"\e68f"}.fa-heart-pulse:before,.fa-heartbeat:before{content:"\f21e"}.fa-people-carry-box:before,.fa-people-carry:before{content:"\f4ce"}.fa-temperature-high:before{content:"\f769"}.fa-microchip:before{content:"\f2db"}.fa-crown:before{content:"\f521"}.fa-weight-hanging:before{content:"\f5cd"}.fa-xmarks-lines:before{content:"\e59a"}.fa-file-prescription:before{content:"\f572"}.fa-weight-scale:before,.fa-weight:before{content:"\f496"}.fa-user-friends:before,.fa-user-group:before{content:"\f500"}.fa-arrow-up-a-z:before,.fa-sort-alpha-up:before{content:"\f15e"}.fa-chess-knight:before{content:"\f441"}.fa-face-laugh-squint:before,.fa-laugh-squint:before{content:"\f59b"}.fa-wheelchair:before{content:"\f193"}.fa-arrow-circle-up:before,.fa-circle-arrow-up:before{content:"\f0aa"}.fa-toggle-on:before{content:"\f205"}.fa-person-walking:before,.fa-walking:before{content:"\f554"}.fa-l:before{content:"\4c"}.fa-fire:before{content:"\f06d"}.fa-bed-pulse:before,.fa-procedures:before{content:"\f487"}.fa-shuttle-space:before,.fa-space-shuttle:before{content:"\f197"}.fa-face-laugh:before,.fa-laugh:before{content:"\f599"}.fa-folder-open:before{content:"\f07c"}.fa-heart-circle-plus:before{content:"\e500"}.fa-code-fork:before{content:"\e13b"}.fa-city:before{content:"\f64f"}.fa-microphone-alt:before,.fa-microphone-lines:before{content:"\f3c9"}.fa-pepper-hot:before{content:"\f816"}.fa-unlock:before{content:"\f09c"}.fa-colon-sign:before{content:"\e140"}.fa-headset:before{content:"\f590"}.fa-store-slash:before{content:"\e071"}.fa-road-circle-xmark:before{content:"\e566"}.fa-user-minus:before{content:"\f503"}.fa-mars-stroke-up:before,.fa-mars-stroke-v:before{content:"\f22a"}.fa-champagne-glasses:before,.fa-glass-cheers:before{content:"\f79f"}.fa-clipboard:before{content:"\f328"}.fa-house-circle-exclamation:before{content:"\e50a"}.fa-file-arrow-up:before,.fa-file-upload:before{content:"\f574"}.fa-wifi-3:before,.fa-wifi-strong:before,.fa-wifi:before{content:"\f1eb"}.fa-bath:before,.fa-bathtub:before{content:"\f2cd"}.fa-underline:before{content:"\f0cd"}.fa-user-edit:before,.fa-user-pen:before{content:"\f4ff"}.fa-signature:before{content:"\f5b7"}.fa-stroopwafel:before{content:"\f551"}.fa-bold:before{content:"\f032"}.fa-anchor-lock:before{content:"\e4ad"}.fa-building-ngo:before{content:"\e4d7"}.fa-manat-sign:before{content:"\e1d5"}.fa-not-equal:before{content:"\f53e"}.fa-border-style:before,.fa-border-top-left:before{content:"\f853"}.fa-map-location-dot:before,.fa-map-marked-alt:before{content:"\f5a0"}.fa-jedi:before{content:"\f669"}.fa-poll:before,.fa-square-poll-vertical:before{content:"\f681"}.fa-mug-hot:before{content:"\f7b6"}.fa-battery-car:before,.fa-car-battery:before{content:"\f5df"}.fa-gift:before{content:"\f06b"}.fa-dice-two:before{content:"\f528"}.fa-chess-queen:before{content:"\f445"}.fa-glasses:before{content:"\f530"}.fa-chess-board:before{content:"\f43c"}.fa-building-circle-check:before{content:"\e4d2"}.fa-person-chalkboard:before{content:"\e53d"}.fa-mars-stroke-h:before,.fa-mars-stroke-right:before{content:"\f22b"}.fa-hand-back-fist:before,.fa-hand-rock:before{content:"\f255"}.fa-caret-square-up:before,.fa-square-caret-up:before{content:"\f151"}.fa-cloud-showers-water:before{content:"\e4e4"}.fa-bar-chart:before,.fa-chart-bar:before{content:"\f080"}.fa-hands-bubbles:before,.fa-hands-wash:before{content:"\e05e"}.fa-less-than-equal:before{content:"\f537"}.fa-train:before{content:"\f238"}.fa-eye-low-vision:before,.fa-low-vision:before{content:"\f2a8"}.fa-crow:before{content:"\f520"}.fa-sailboat:before{content:"\e445"}.fa-window-restore:before{content:"\f2d2"}.fa-plus-square:before,.fa-square-plus:before{content:"\f0fe"}.fa-torii-gate:before{content:"\f6a1"}.fa-frog:before{content:"\f52e"}.fa-bucket:before{content:"\e4cf"}.fa-image:before{content:"\f03e"}.fa-microphone:before{content:"\f130"}.fa-cow:before{content:"\f6c8"}.fa-caret-up:before{content:"\f0d8"}.fa-screwdriver:before{content:"\f54a"}.fa-folder-closed:before{content:"\e185"}.fa-house-tsunami:before{content:"\e515"}.fa-square-nfi:before{content:"\e576"}.fa-arrow-up-from-ground-water:before{content:"\e4b5"}.fa-glass-martini-alt:before,.fa-martini-glass:before{content:"\f57b"}.fa-rotate-back:before,.fa-rotate-backward:before,.fa-rotate-left:before,.fa-undo-alt:before{content:"\f2ea"}.fa-columns:before,.fa-table-columns:before{content:"\f0db"}.fa-lemon:before{content:"\f094"}.fa-head-side-mask:before{content:"\e063"}.fa-handshake:before{content:"\f2b5"}.fa-gem:before{content:"\f3a5"}.fa-dolly-box:before,.fa-dolly:before{content:"\f472"}.fa-smoking:before{content:"\f48d"}.fa-compress-arrows-alt:before,.fa-minimize:before{content:"\f78c"}.fa-monument:before{content:"\f5a6"}.fa-snowplow:before{content:"\f7d2"}.fa-angle-double-right:before,.fa-angles-right:before{content:"\f101"}.fa-cannabis:before{content:"\f55f"}.fa-circle-play:before,.fa-play-circle:before{content:"\f144"}.fa-tablets:before{content:"\f490"}.fa-ethernet:before{content:"\f796"}.fa-eur:before,.fa-euro-sign:before,.fa-euro:before{content:"\f153"}.fa-chair:before{content:"\f6c0"}.fa-check-circle:before,.fa-circle-check:before{content:"\f058"}.fa-circle-stop:before,.fa-stop-circle:before{content:"\f28d"}.fa-compass-drafting:before,.fa-drafting-compass:before{content:"\f568"}.fa-plate-wheat:before{content:"\e55a"}.fa-icicles:before{content:"\f7ad"}.fa-person-shelter:before{content:"\e54f"}.fa-neuter:before{content:"\f22c"}.fa-id-badge:before{content:"\f2c1"}.fa-marker:before{content:"\f5a1"}.fa-face-laugh-beam:before,.fa-laugh-beam:before{content:"\f59a"}.fa-helicopter-symbol:before{content:"\e502"}.fa-universal-access:before{content:"\f29a"}.fa-chevron-circle-up:before,.fa-circle-chevron-up:before{content:"\f139"}.fa-lari-sign:before{content:"\e1c8"}.fa-volcano:before{content:"\f770"}.fa-person-walking-dashed-line-arrow-right:before{content:"\e553"}.fa-gbp:before,.fa-pound-sign:before,.fa-sterling-sign:before{content:"\f154"}.fa-viruses:before{content:"\e076"}.fa-square-person-confined:before{content:"\e577"}.fa-user-tie:before{content:"\f508"}.fa-arrow-down-long:before,.fa-long-arrow-down:before{content:"\f175"}.fa-tent-arrow-down-to-line:before{content:"\e57e"}.fa-certificate:before{content:"\f0a3"}.fa-mail-reply-all:before,.fa-reply-all:before{content:"\f122"}.fa-suitcase:before{content:"\f0f2"}.fa-person-skating:before,.fa-skating:before{content:"\f7c5"}.fa-filter-circle-dollar:before,.fa-funnel-dollar:before{content:"\f662"}.fa-camera-retro:before{content:"\f083"}.fa-arrow-circle-down:before,.fa-circle-arrow-down:before{content:"\f0ab"}.fa-arrow-right-to-file:before,.fa-file-import:before{content:"\f56f"}.fa-external-link-square:before,.fa-square-arrow-up-right:before{content:"\f14c"}.fa-box-open:before{content:"\f49e"}.fa-scroll:before{content:"\f70e"}.fa-spa:before{content:"\f5bb"}.fa-location-pin-lock:before{content:"\e51f"}.fa-pause:before{content:"\f04c"}.fa-hill-avalanche:before{content:"\e507"}.fa-temperature-0:before,.fa-temperature-empty:before,.fa-thermometer-0:before,.fa-thermometer-empty:before{content:"\f2cb"}.fa-bomb:before{content:"\f1e2"}.fa-registered:before{content:"\f25d"}.fa-address-card:before,.fa-contact-card:before,.fa-vcard:before{content:"\f2bb"}.fa-balance-scale-right:before,.fa-scale-unbalanced-flip:before{content:"\f516"}.fa-subscript:before{content:"\f12c"}.fa-diamond-turn-right:before,.fa-directions:before{content:"\f5eb"}.fa-burst:before{content:"\e4dc"}.fa-house-laptop:before,.fa-laptop-house:before{content:"\e066"}.fa-face-tired:before,.fa-tired:before{content:"\f5c8"}.fa-money-bills:before{content:"\e1f3"}.fa-smog:before{content:"\f75f"}.fa-crutch:before{content:"\f7f7"}.fa-cloud-arrow-up:before,.fa-cloud-upload-alt:before,.fa-cloud-upload:before{content:"\f0ee"}.fa-palette:before{content:"\f53f"}.fa-arrows-turn-right:before{content:"\e4c0"}.fa-vest:before{content:"\e085"}.fa-ferry:before{content:"\e4ea"}.fa-arrows-down-to-people:before{content:"\e4b9"}.fa-seedling:before,.fa-sprout:before{content:"\f4d8"}.fa-arrows-alt-h:before,.fa-left-right:before{content:"\f337"}.fa-boxes-packing:before{content:"\e4c7"}.fa-arrow-circle-left:before,.fa-circle-arrow-left:before{content:"\f0a8"}.fa-group-arrows-rotate:before{content:"\e4f6"}.fa-bowl-food:before{content:"\e4c6"}.fa-candy-cane:before{content:"\f786"}.fa-arrow-down-wide-short:before,.fa-sort-amount-asc:before,.fa-sort-amount-down:before{content:"\f160"}.fa-cloud-bolt:before,.fa-thunderstorm:before{content:"\f76c"}.fa-remove-format:before,.fa-text-slash:before{content:"\f87d"}.fa-face-smile-wink:before,.fa-smile-wink:before{content:"\f4da"}.fa-file-word:before{content:"\f1c2"}.fa-file-powerpoint:before{content:"\f1c4"}.fa-arrows-h:before,.fa-arrows-left-right:before{content:"\f07e"}.fa-house-lock:before{content:"\e510"}.fa-cloud-arrow-down:before,.fa-cloud-download-alt:before,.fa-cloud-download:before{content:"\f0ed"}.fa-children:before{content:"\e4e1"}.fa-blackboard:before,.fa-chalkboard:before{content:"\f51b"}.fa-user-alt-slash:before,.fa-user-large-slash:before{content:"\f4fa"}.fa-envelope-open:before{content:"\f2b6"}.fa-handshake-alt-slash:before,.fa-handshake-simple-slash:before{content:"\e05f"}.fa-mattress-pillow:before{content:"\e525"}.fa-guarani-sign:before{content:"\e19a"}.fa-arrows-rotate:before,.fa-refresh:before,.fa-sync:before{content:"\f021"}.fa-fire-extinguisher:before{content:"\f134"}.fa-cruzeiro-sign:before{content:"\e152"}.fa-greater-than-equal:before{content:"\f532"}.fa-shield-alt:before,.fa-shield-halved:before{content:"\f3ed"}.fa-atlas:before,.fa-book-atlas:before{content:"\f558"}.fa-virus:before{content:"\e074"}.fa-envelope-circle-check:before{content:"\e4e8"}.fa-layer-group:before{content:"\f5fd"}.fa-arrows-to-dot:before{content:"\e4be"}.fa-archway:before{content:"\f557"}.fa-heart-circle-check:before{content:"\e4fd"}.fa-house-chimney-crack:before,.fa-house-damage:before{content:"\f6f1"}.fa-file-archive:before,.fa-file-zipper:before{content:"\f1c6"}.fa-square:before{content:"\f0c8"}.fa-glass-martini:before,.fa-martini-glass-empty:before{content:"\f000"}.fa-couch:before{content:"\f4b8"}.fa-cedi-sign:before{content:"\e0df"}.fa-italic:before{content:"\f033"}.fa-table-cells-column-lock:before{content:"\e678"}.fa-church:before{content:"\f51d"}.fa-comments-dollar:before{content:"\f653"}.fa-democrat:before{content:"\f747"}.fa-z:before{content:"\5a"}.fa-person-skiing:before,.fa-skiing:before{content:"\f7c9"}.fa-road-lock:before{content:"\e567"}.fa-a:before{content:"\41"}.fa-temperature-arrow-down:before,.fa-temperature-down:before{content:"\e03f"}.fa-feather-alt:before,.fa-feather-pointed:before{content:"\f56b"}.fa-p:before{content:"\50"}.fa-snowflake:before{content:"\f2dc"}.fa-newspaper:before{content:"\f1ea"}.fa-ad:before,.fa-rectangle-ad:before{content:"\f641"}.fa-arrow-circle-right:before,.fa-circle-arrow-right:before{content:"\f0a9"}.fa-filter-circle-xmark:before{content:"\e17b"}.fa-locust:before{content:"\e520"}.fa-sort:before,.fa-unsorted:before{content:"\f0dc"}.fa-list-1-2:before,.fa-list-numeric:before,.fa-list-ol:before{content:"\f0cb"}.fa-person-dress-burst:before{content:"\e544"}.fa-money-check-alt:before,.fa-money-check-dollar:before{content:"\f53d"}.fa-vector-square:before{content:"\f5cb"}.fa-bread-slice:before{content:"\f7ec"}.fa-language:before{content:"\f1ab"}.fa-face-kiss-wink-heart:before,.fa-kiss-wink-heart:before{content:"\f598"}.fa-filter:before{content:"\f0b0"}.fa-question:before{content:"\3f"}.fa-file-signature:before{content:"\f573"}.fa-arrows-alt:before,.fa-up-down-left-right:before{content:"\f0b2"}.fa-house-chimney-user:before{content:"\e065"}.fa-hand-holding-heart:before{content:"\f4be"}.fa-puzzle-piece:before{content:"\f12e"}.fa-money-check:before{content:"\f53c"}.fa-star-half-alt:before,.fa-star-half-stroke:before{content:"\f5c0"}.fa-code:before{content:"\f121"}.fa-glass-whiskey:before,.fa-whiskey-glass:before{content:"\f7a0"}.fa-building-circle-exclamation:before{content:"\e4d3"}.fa-magnifying-glass-chart:before{content:"\e522"}.fa-arrow-up-right-from-square:before,.fa-external-link:before{content:"\f08e"}.fa-cubes-stacked:before{content:"\e4e6"}.fa-krw:before,.fa-won-sign:before,.fa-won:before{content:"\f159"}.fa-virus-covid:before{content:"\e4a8"}.fa-austral-sign:before{content:"\e0a9"}.fa-f:before{content:"\46"}.fa-leaf:before{content:"\f06c"}.fa-road:before{content:"\f018"}.fa-cab:before,.fa-taxi:before{content:"\f1ba"}.fa-person-circle-plus:before{content:"\e541"}.fa-chart-pie:before,.fa-pie-chart:before{content:"\f200"}.fa-bolt-lightning:before{content:"\e0b7"}.fa-sack-xmark:before{content:"\e56a"}.fa-file-excel:before{content:"\f1c3"}.fa-file-contract:before{content:"\f56c"}.fa-fish-fins:before{content:"\e4f2"}.fa-building-flag:before{content:"\e4d5"}.fa-face-grin-beam:before,.fa-grin-beam:before{content:"\f582"}.fa-object-ungroup:before{content:"\f248"}.fa-poop:before{content:"\f619"}.fa-location-pin:before,.fa-map-marker:before{content:"\f041"}.fa-kaaba:before{content:"\f66b"}.fa-toilet-paper:before{content:"\f71e"}.fa-hard-hat:before,.fa-hat-hard:before,.fa-helmet-safety:before{content:"\f807"}.fa-eject:before{content:"\f052"}.fa-arrow-alt-circle-right:before,.fa-circle-right:before{content:"\f35a"}.fa-plane-circle-check:before{content:"\e555"}.fa-face-rolling-eyes:before,.fa-meh-rolling-eyes:before{content:"\f5a5"}.fa-object-group:before{content:"\f247"}.fa-chart-line:before,.fa-line-chart:before{content:"\f201"}.fa-mask-ventilator:before{content:"\e524"}.fa-arrow-right:before{content:"\f061"}.fa-map-signs:before,.fa-signs-post:before{content:"\f277"}.fa-cash-register:before{content:"\f788"}.fa-person-circle-question:before{content:"\e542"}.fa-h:before{content:"\48"}.fa-tarp:before{content:"\e57b"}.fa-screwdriver-wrench:before,.fa-tools:before{content:"\f7d9"}.fa-arrows-to-eye:before{content:"\e4bf"}.fa-plug-circle-bolt:before{content:"\e55b"}.fa-heart:before{content:"\f004"}.fa-mars-and-venus:before{content:"\f224"}.fa-home-user:before,.fa-house-user:before{content:"\e1b0"}.fa-dumpster-fire:before{content:"\f794"}.fa-house-crack:before{content:"\e3b1"}.fa-cocktail:before,.fa-martini-glass-citrus:before{content:"\f561"}.fa-face-surprise:before,.fa-surprise:before{content:"\f5c2"}.fa-bottle-water:before{content:"\e4c5"}.fa-circle-pause:before,.fa-pause-circle:before{content:"\f28b"}.fa-toilet-paper-slash:before{content:"\e072"}.fa-apple-alt:before,.fa-apple-whole:before{content:"\f5d1"}.fa-kitchen-set:before{content:"\e51a"}.fa-r:before{content:"\52"}.fa-temperature-1:before,.fa-temperature-quarter:before,.fa-thermometer-1:before,.fa-thermometer-quarter:before{content:"\f2ca"}.fa-cube:before{content:"\f1b2"}.fa-bitcoin-sign:before{content:"\e0b4"}.fa-shield-dog:before{content:"\e573"}.fa-solar-panel:before{content:"\f5ba"}.fa-lock-open:before{content:"\f3c1"}.fa-elevator:before{content:"\e16d"}.fa-money-bill-transfer:before{content:"\e528"}.fa-money-bill-trend-up:before{content:"\e529"}.fa-house-flood-water-circle-arrow-right:before{content:"\e50f"}.fa-poll-h:before,.fa-square-poll-horizontal:before{content:"\f682"}.fa-circle:before{content:"\f111"}.fa-backward-fast:before,.fa-fast-backward:before{content:"\f049"}.fa-recycle:before{content:"\f1b8"}.fa-user-astronaut:before{content:"\f4fb"}.fa-plane-slash:before{content:"\e069"}.fa-trademark:before{content:"\f25c"}.fa-basketball-ball:before,.fa-basketball:before{content:"\f434"}.fa-satellite-dish:before{content:"\f7c0"}.fa-arrow-alt-circle-up:before,.fa-circle-up:before{content:"\f35b"}.fa-mobile-alt:before,.fa-mobile-screen-button:before{content:"\f3cd"}.fa-volume-high:before,.fa-volume-up:before{content:"\f028"}.fa-users-rays:before{content:"\e593"}.fa-wallet:before{content:"\f555"}.fa-clipboard-check:before{content:"\f46c"}.fa-file-audio:before{content:"\f1c7"}.fa-burger:before,.fa-hamburger:before{content:"\f805"}.fa-wrench:before{content:"\f0ad"}.fa-bugs:before{content:"\e4d0"}.fa-rupee-sign:before,.fa-rupee:before{content:"\f156"}.fa-file-image:before{content:"\f1c5"}.fa-circle-question:before,.fa-question-circle:before{content:"\f059"}.fa-plane-departure:before{content:"\f5b0"}.fa-handshake-slash:before{content:"\e060"}.fa-book-bookmark:before{content:"\e0bb"}.fa-code-branch:before{content:"\f126"}.fa-hat-cowboy:before{content:"\f8c0"}.fa-bridge:before{content:"\e4c8"}.fa-phone-alt:before,.fa-phone-flip:before{content:"\f879"}.fa-truck-front:before{content:"\e2b7"}.fa-cat:before{content:"\f6be"}.fa-anchor-circle-exclamation:before{content:"\e4ab"}.fa-truck-field:before{content:"\e58d"}.fa-route:before{content:"\f4d7"}.fa-clipboard-question:before{content:"\e4e3"}.fa-panorama:before{content:"\e209"}.fa-comment-medical:before{content:"\f7f5"}.fa-teeth-open:before{content:"\f62f"}.fa-file-circle-minus:before{content:"\e4ed"}.fa-tags:before{content:"\f02c"}.fa-wine-glass:before{content:"\f4e3"}.fa-fast-forward:before,.fa-forward-fast:before{content:"\f050"}.fa-face-meh-blank:before,.fa-meh-blank:before{content:"\f5a4"}.fa-parking:before,.fa-square-parking:before{content:"\f540"}.fa-house-signal:before{content:"\e012"}.fa-bars-progress:before,.fa-tasks-alt:before{content:"\f828"}.fa-faucet-drip:before{content:"\e006"}.fa-cart-flatbed:before,.fa-dolly-flatbed:before{content:"\f474"}.fa-ban-smoking:before,.fa-smoking-ban:before{content:"\f54d"}.fa-terminal:before{content:"\f120"}.fa-mobile-button:before{content:"\f10b"}.fa-house-medical-flag:before{content:"\e514"}.fa-basket-shopping:before,.fa-shopping-basket:before{content:"\f291"}.fa-tape:before{content:"\f4db"}.fa-bus-alt:before,.fa-bus-simple:before{content:"\f55e"}.fa-eye:before{content:"\f06e"}.fa-face-sad-cry:before,.fa-sad-cry:before{content:"\f5b3"}.fa-audio-description:before{content:"\f29e"}.fa-person-military-to-person:before{content:"\e54c"}.fa-file-shield:before{content:"\e4f0"}.fa-user-slash:before{content:"\f506"}.fa-pen:before{content:"\f304"}.fa-tower-observation:before{content:"\e586"}.fa-file-code:before{content:"\f1c9"}.fa-signal-5:before,.fa-signal-perfect:before,.fa-signal:before{content:"\f012"}.fa-bus:before{content:"\f207"}.fa-heart-circle-xmark:before{content:"\e501"}.fa-home-lg:before,.fa-house-chimney:before{content:"\e3af"}.fa-window-maximize:before{content:"\f2d0"}.fa-face-frown:before,.fa-frown:before{content:"\f119"}.fa-prescription:before{content:"\f5b1"}.fa-shop:before,.fa-store-alt:before{content:"\f54f"}.fa-floppy-disk:before,.fa-save:before{content:"\f0c7"}.fa-vihara:before{content:"\f6a7"}.fa-balance-scale-left:before,.fa-scale-unbalanced:before{content:"\f515"}.fa-sort-asc:before,.fa-sort-up:before{content:"\f0de"}.fa-comment-dots:before,.fa-commenting:before{content:"\f4ad"}.fa-plant-wilt:before{content:"\e5aa"}.fa-diamond:before{content:"\f219"}.fa-face-grin-squint:before,.fa-grin-squint:before{content:"\f585"}.fa-hand-holding-dollar:before,.fa-hand-holding-usd:before{content:"\f4c0"}.fa-bacterium:before{content:"\e05a"}.fa-hand-pointer:before{content:"\f25a"}.fa-drum-steelpan:before{content:"\f56a"}.fa-hand-scissors:before{content:"\f257"}.fa-hands-praying:before,.fa-praying-hands:before{content:"\f684"}.fa-arrow-right-rotate:before,.fa-arrow-rotate-forward:before,.fa-arrow-rotate-right:before,.fa-redo:before{content:"\f01e"}.fa-biohazard:before{content:"\f780"}.fa-location-crosshairs:before,.fa-location:before{content:"\f601"}.fa-mars-double:before{content:"\f227"}.fa-child-dress:before{content:"\e59c"}.fa-users-between-lines:before{content:"\e591"}.fa-lungs-virus:before{content:"\e067"}.fa-face-grin-tears:before,.fa-grin-tears:before{content:"\f588"}.fa-phone:before{content:"\f095"}.fa-calendar-times:before,.fa-calendar-xmark:before{content:"\f273"}.fa-child-reaching:before{content:"\e59d"}.fa-head-side-virus:before{content:"\e064"}.fa-user-cog:before,.fa-user-gear:before{content:"\f4fe"}.fa-arrow-up-1-9:before,.fa-sort-numeric-up:before{content:"\f163"}.fa-door-closed:before{content:"\f52a"}.fa-shield-virus:before{content:"\e06c"}.fa-dice-six:before{content:"\f526"}.fa-mosquito-net:before{content:"\e52c"}.fa-bridge-water:before{content:"\e4ce"}.fa-person-booth:before{content:"\f756"}.fa-text-width:before{content:"\f035"}.fa-hat-wizard:before{content:"\f6e8"}.fa-pen-fancy:before{content:"\f5ac"}.fa-digging:before,.fa-person-digging:before{content:"\f85e"}.fa-trash:before{content:"\f1f8"}.fa-gauge-simple-med:before,.fa-gauge-simple:before,.fa-tachometer-average:before{content:"\f629"}.fa-book-medical:before{content:"\f7e6"}.fa-poo:before{content:"\f2fe"}.fa-quote-right-alt:before,.fa-quote-right:before{content:"\f10e"}.fa-shirt:before,.fa-t-shirt:before,.fa-tshirt:before{content:"\f553"}.fa-cubes:before{content:"\f1b3"}.fa-divide:before{content:"\f529"}.fa-tenge-sign:before,.fa-tenge:before{content:"\f7d7"}.fa-headphones:before{content:"\f025"}.fa-hands-holding:before{content:"\f4c2"}.fa-hands-clapping:before{content:"\e1a8"}.fa-republican:before{content:"\f75e"}.fa-arrow-left:before{content:"\f060"}.fa-person-circle-xmark:before{content:"\e543"}.fa-ruler:before{content:"\f545"}.fa-align-left:before{content:"\f036"}.fa-dice-d6:before{content:"\f6d1"}.fa-restroom:before{content:"\f7bd"}.fa-j:before{content:"\4a"}.fa-users-viewfinder:before{content:"\e595"}.fa-file-video:before{content:"\f1c8"}.fa-external-link-alt:before,.fa-up-right-from-square:before{content:"\f35d"}.fa-table-cells:before,.fa-th:before{content:"\f00a"}.fa-file-pdf:before{content:"\f1c1"}.fa-bible:before,.fa-book-bible:before{content:"\f647"}.fa-o:before{content:"\4f"}.fa-medkit:before,.fa-suitcase-medical:before{content:"\f0fa"}.fa-user-secret:before{content:"\f21b"}.fa-otter:before{content:"\f700"}.fa-female:before,.fa-person-dress:before{content:"\f182"}.fa-comment-dollar:before{content:"\f651"}.fa-briefcase-clock:before,.fa-business-time:before{content:"\f64a"}.fa-table-cells-large:before,.fa-th-large:before{content:"\f009"}.fa-book-tanakh:before,.fa-tanakh:before{content:"\f827"}.fa-phone-volume:before,.fa-volume-control-phone:before{content:"\f2a0"}.fa-hat-cowboy-side:before{content:"\f8c1"}.fa-clipboard-user:before{content:"\f7f3"}.fa-child:before{content:"\f1ae"}.fa-lira-sign:before{content:"\f195"}.fa-satellite:before{content:"\f7bf"}.fa-plane-lock:before{content:"\e558"}.fa-tag:before{content:"\f02b"}.fa-comment:before{content:"\f075"}.fa-birthday-cake:before,.fa-cake-candles:before,.fa-cake:before{content:"\f1fd"}.fa-envelope:before{content:"\f0e0"}.fa-angle-double-up:before,.fa-angles-up:before{content:"\f102"}.fa-paperclip:before{content:"\f0c6"}.fa-arrow-right-to-city:before{content:"\e4b3"}.fa-ribbon:before{content:"\f4d6"}.fa-lungs:before{content:"\f604"}.fa-arrow-up-9-1:before,.fa-sort-numeric-up-alt:before{content:"\f887"}.fa-litecoin-sign:before{content:"\e1d3"}.fa-border-none:before{content:"\f850"}.fa-circle-nodes:before{content:"\e4e2"}.fa-parachute-box:before{content:"\f4cd"}.fa-indent:before{content:"\f03c"}.fa-truck-field-un:before{content:"\e58e"}.fa-hourglass-empty:before,.fa-hourglass:before{content:"\f254"}.fa-mountain:before{content:"\f6fc"}.fa-user-doctor:before,.fa-user-md:before{content:"\f0f0"}.fa-circle-info:before,.fa-info-circle:before{content:"\f05a"}.fa-cloud-meatball:before{content:"\f73b"}.fa-camera-alt:before,.fa-camera:before{content:"\f030"}.fa-square-virus:before{content:"\e578"}.fa-meteor:before{content:"\f753"}.fa-car-on:before{content:"\e4dd"}.fa-sleigh:before{content:"\f7cc"}.fa-arrow-down-1-9:before,.fa-sort-numeric-asc:before,.fa-sort-numeric-down:before{content:"\f162"}.fa-hand-holding-droplet:before,.fa-hand-holding-water:before{content:"\f4c1"}.fa-water:before{content:"\f773"}.fa-calendar-check:before{content:"\f274"}.fa-braille:before{content:"\f2a1"}.fa-prescription-bottle-alt:before,.fa-prescription-bottle-medical:before{content:"\f486"}.fa-landmark:before{content:"\f66f"}.fa-truck:before{content:"\f0d1"}.fa-crosshairs:before{content:"\f05b"}.fa-person-cane:before{content:"\e53c"}.fa-tent:before{content:"\e57d"}.fa-vest-patches:before{content:"\e086"}.fa-check-double:before{content:"\f560"}.fa-arrow-down-a-z:before,.fa-sort-alpha-asc:before,.fa-sort-alpha-down:before{content:"\f15d"}.fa-money-bill-wheat:before{content:"\e52a"}.fa-cookie:before{content:"\f563"}.fa-arrow-left-rotate:before,.fa-arrow-rotate-back:before,.fa-arrow-rotate-backward:before,.fa-arrow-rotate-left:before,.fa-undo:before{content:"\f0e2"}.fa-hard-drive:before,.fa-hdd:before{content:"\f0a0"}.fa-face-grin-squint-tears:before,.fa-grin-squint-tears:before{content:"\f586"}.fa-dumbbell:before{content:"\f44b"}.fa-list-alt:before,.fa-rectangle-list:before{content:"\f022"}.fa-tarp-droplet:before{content:"\e57c"}.fa-house-medical-circle-check:before{content:"\e511"}.fa-person-skiing-nordic:before,.fa-skiing-nordic:before{content:"\f7ca"}.fa-calendar-plus:before{content:"\f271"}.fa-plane-arrival:before{content:"\f5af"}.fa-arrow-alt-circle-left:before,.fa-circle-left:before{content:"\f359"}.fa-subway:before,.fa-train-subway:before{content:"\f239"}.fa-chart-gantt:before{content:"\e0e4"}.fa-indian-rupee-sign:before,.fa-indian-rupee:before,.fa-inr:before{content:"\e1bc"}.fa-crop-alt:before,.fa-crop-simple:before{content:"\f565"}.fa-money-bill-1:before,.fa-money-bill-alt:before{content:"\f3d1"}.fa-left-long:before,.fa-long-arrow-alt-left:before{content:"\f30a"}.fa-dna:before{content:"\f471"}.fa-virus-slash:before{content:"\e075"}.fa-minus:before,.fa-subtract:before{content:"\f068"}.fa-chess:before{content:"\f439"}.fa-arrow-left-long:before,.fa-long-arrow-left:before{content:"\f177"}.fa-plug-circle-check:before{content:"\e55c"}.fa-street-view:before{content:"\f21d"}.fa-franc-sign:before{content:"\e18f"}.fa-volume-off:before{content:"\f026"}.fa-american-sign-language-interpreting:before,.fa-asl-interpreting:before,.fa-hands-american-sign-language-interpreting:before,.fa-hands-asl-interpreting:before{content:"\f2a3"}.fa-cog:before,.fa-gear:before{content:"\f013"}.fa-droplet-slash:before,.fa-tint-slash:before{content:"\f5c7"}.fa-mosque:before{content:"\f678"}.fa-mosquito:before{content:"\e52b"}.fa-star-of-david:before{content:"\f69a"}.fa-person-military-rifle:before{content:"\e54b"}.fa-cart-shopping:before,.fa-shopping-cart:before{content:"\f07a"}.fa-vials:before{content:"\f493"}.fa-plug-circle-plus:before{content:"\e55f"}.fa-place-of-worship:before{content:"\f67f"}.fa-grip-vertical:before{content:"\f58e"}.fa-arrow-turn-up:before,.fa-level-up:before{content:"\f148"}.fa-u:before{content:"\55"}.fa-square-root-alt:before,.fa-square-root-variable:before{content:"\f698"}.fa-clock-four:before,.fa-clock:before{content:"\f017"}.fa-backward-step:before,.fa-step-backward:before{content:"\f048"}.fa-pallet:before{content:"\f482"}.fa-faucet:before{content:"\e005"}.fa-baseball-bat-ball:before{content:"\f432"}.fa-s:before{content:"\53"}.fa-timeline:before{content:"\e29c"}.fa-keyboard:before{content:"\f11c"}.fa-caret-down:before{content:"\f0d7"}.fa-clinic-medical:before,.fa-house-chimney-medical:before{content:"\f7f2"}.fa-temperature-3:before,.fa-temperature-three-quarters:before,.fa-thermometer-3:before,.fa-thermometer-three-quarters:before{content:"\f2c8"}.fa-mobile-android-alt:before,.fa-mobile-screen:before{content:"\f3cf"}.fa-plane-up:before{content:"\e22d"}.fa-piggy-bank:before{content:"\f4d3"}.fa-battery-3:before,.fa-battery-half:before{content:"\f242"}.fa-mountain-city:before{content:"\e52e"}.fa-coins:before{content:"\f51e"}.fa-khanda:before{content:"\f66d"}.fa-sliders-h:before,.fa-sliders:before{content:"\f1de"}.fa-folder-tree:before{content:"\f802"}.fa-network-wired:before{content:"\f6ff"}.fa-map-pin:before{content:"\f276"}.fa-hamsa:before{content:"\f665"}.fa-cent-sign:before{content:"\e3f5"}.fa-flask:before{content:"\f0c3"}.fa-person-pregnant:before{content:"\e31e"}.fa-wand-sparkles:before{content:"\f72b"}.fa-ellipsis-v:before,.fa-ellipsis-vertical:before{content:"\f142"}.fa-ticket:before{content:"\f145"}.fa-power-off:before{content:"\f011"}.fa-long-arrow-alt-right:before,.fa-right-long:before{content:"\f30b"}.fa-flag-usa:before{content:"\f74d"}.fa-laptop-file:before{content:"\e51d"}.fa-teletype:before,.fa-tty:before{content:"\f1e4"}.fa-diagram-next:before{content:"\e476"}.fa-person-rifle:before{content:"\e54e"}.fa-house-medical-circle-exclamation:before{content:"\e512"}.fa-closed-captioning:before{content:"\f20a"}.fa-hiking:before,.fa-person-hiking:before{content:"\f6ec"}.fa-venus-double:before{content:"\f226"}.fa-images:before{content:"\f302"}.fa-calculator:before{content:"\f1ec"}.fa-people-pulling:before{content:"\e535"}.fa-n:before{content:"\4e"}.fa-cable-car:before,.fa-tram:before{content:"\f7da"}.fa-cloud-rain:before{content:"\f73d"}.fa-building-circle-xmark:before{content:"\e4d4"}.fa-ship:before{content:"\f21a"}.fa-arrows-down-to-line:before{content:"\e4b8"}.fa-download:before{content:"\f019"}.fa-face-grin:before,.fa-grin:before{content:"\f580"}.fa-backspace:before,.fa-delete-left:before{content:"\f55a"}.fa-eye-dropper-empty:before,.fa-eye-dropper:before,.fa-eyedropper:before{content:"\f1fb"}.fa-file-circle-check:before{content:"\e5a0"}.fa-forward:before{content:"\f04e"}.fa-mobile-android:before,.fa-mobile-phone:before,.fa-mobile:before{content:"\f3ce"}.fa-face-meh:before,.fa-meh:before{content:"\f11a"}.fa-align-center:before{content:"\f037"}.fa-book-dead:before,.fa-book-skull:before{content:"\f6b7"}.fa-drivers-license:before,.fa-id-card:before{content:"\f2c2"}.fa-dedent:before,.fa-outdent:before{content:"\f03b"}.fa-heart-circle-exclamation:before{content:"\e4fe"}.fa-home-alt:before,.fa-home-lg-alt:before,.fa-home:before,.fa-house:before{content:"\f015"}.fa-calendar-week:before{content:"\f784"}.fa-laptop-medical:before{content:"\f812"}.fa-b:before{content:"\42"}.fa-file-medical:before{content:"\f477"}.fa-dice-one:before{content:"\f525"}.fa-kiwi-bird:before{content:"\f535"}.fa-arrow-right-arrow-left:before,.fa-exchange:before{content:"\f0ec"}.fa-redo-alt:before,.fa-rotate-forward:before,.fa-rotate-right:before{content:"\f2f9"}.fa-cutlery:before,.fa-utensils:before{content:"\f2e7"}.fa-arrow-up-wide-short:before,.fa-sort-amount-up:before{content:"\f161"}.fa-mill-sign:before{content:"\e1ed"}.fa-bowl-rice:before{content:"\e2eb"}.fa-skull:before{content:"\f54c"}.fa-broadcast-tower:before,.fa-tower-broadcast:before{content:"\f519"}.fa-truck-pickup:before{content:"\f63c"}.fa-long-arrow-alt-up:before,.fa-up-long:before{content:"\f30c"}.fa-stop:before{content:"\f04d"}.fa-code-merge:before{content:"\f387"}.fa-upload:before{content:"\f093"}.fa-hurricane:before{content:"\f751"}.fa-mound:before{content:"\e52d"}.fa-toilet-portable:before{content:"\e583"}.fa-compact-disc:before{content:"\f51f"}.fa-file-arrow-down:before,.fa-file-download:before{content:"\f56d"}.fa-caravan:before{content:"\f8ff"}.fa-shield-cat:before{content:"\e572"}.fa-bolt:before,.fa-zap:before{content:"\f0e7"}.fa-glass-water:before{content:"\e4f4"}.fa-oil-well:before{content:"\e532"}.fa-vault:before{content:"\e2c5"}.fa-mars:before{content:"\f222"}.fa-toilet:before{content:"\f7d8"}.fa-plane-circle-xmark:before{content:"\e557"}.fa-cny:before,.fa-jpy:before,.fa-rmb:before,.fa-yen-sign:before,.fa-yen:before{content:"\f157"}.fa-rouble:before,.fa-rub:before,.fa-ruble-sign:before,.fa-ruble:before{content:"\f158"}.fa-sun:before{content:"\f185"}.fa-guitar:before{content:"\f7a6"}.fa-face-laugh-wink:before,.fa-laugh-wink:before{content:"\f59c"}.fa-horse-head:before{content:"\f7ab"}.fa-bore-hole:before{content:"\e4c3"}.fa-industry:before{content:"\f275"}.fa-arrow-alt-circle-down:before,.fa-circle-down:before{content:"\f358"}.fa-arrows-turn-to-dots:before{content:"\e4c1"}.fa-florin-sign:before{content:"\e184"}.fa-arrow-down-short-wide:before,.fa-sort-amount-desc:before,.fa-sort-amount-down-alt:before{content:"\f884"}.fa-less-than:before{content:"\3c"}.fa-angle-down:before{content:"\f107"}.fa-car-tunnel:before{content:"\e4de"}.fa-head-side-cough:before{content:"\e061"}.fa-grip-lines:before{content:"\f7a4"}.fa-thumbs-down:before{content:"\f165"}.fa-user-lock:before{content:"\f502"}.fa-arrow-right-long:before,.fa-long-arrow-right:before{content:"\f178"}.fa-anchor-circle-xmark:before{content:"\e4ac"}.fa-ellipsis-h:before,.fa-ellipsis:before{content:"\f141"}.fa-chess-pawn:before{content:"\f443"}.fa-first-aid:before,.fa-kit-medical:before{content:"\f479"}.fa-person-through-window:before{content:"\e5a9"}.fa-toolbox:before{content:"\f552"}.fa-hands-holding-circle:before{content:"\e4fb"}.fa-bug:before{content:"\f188"}.fa-credit-card-alt:before,.fa-credit-card:before{content:"\f09d"}.fa-automobile:before,.fa-car:before{content:"\f1b9"}.fa-hand-holding-hand:before{content:"\e4f7"}.fa-book-open-reader:before,.fa-book-reader:before{content:"\f5da"}.fa-mountain-sun:before{content:"\e52f"}.fa-arrows-left-right-to-line:before{content:"\e4ba"}.fa-dice-d20:before{content:"\f6cf"}.fa-truck-droplet:before{content:"\e58c"}.fa-file-circle-xmark:before{content:"\e5a1"}.fa-temperature-arrow-up:before,.fa-temperature-up:before{content:"\e040"}.fa-medal:before{content:"\f5a2"}.fa-bed:before{content:"\f236"}.fa-h-square:before,.fa-square-h:before{content:"\f0fd"}.fa-podcast:before{content:"\f2ce"}.fa-temperature-4:before,.fa-temperature-full:before,.fa-thermometer-4:before,.fa-thermometer-full:before{content:"\f2c7"}.fa-bell:before{content:"\f0f3"}.fa-superscript:before{content:"\f12b"}.fa-plug-circle-xmark:before{content:"\e560"}.fa-star-of-life:before{content:"\f621"}.fa-phone-slash:before{content:"\f3dd"}.fa-paint-roller:before{content:"\f5aa"}.fa-hands-helping:before,.fa-handshake-angle:before{content:"\f4c4"}.fa-location-dot:before,.fa-map-marker-alt:before{content:"\f3c5"}.fa-file:before{content:"\f15b"}.fa-greater-than:before{content:"\3e"}.fa-person-swimming:before,.fa-swimmer:before{content:"\f5c4"}.fa-arrow-down:before{content:"\f063"}.fa-droplet:before,.fa-tint:before{content:"\f043"}.fa-eraser:before{content:"\f12d"}.fa-earth-america:before,.fa-earth-americas:before,.fa-earth:before,.fa-globe-americas:before{content:"\f57d"}.fa-person-burst:before{content:"\e53b"}.fa-dove:before{content:"\f4ba"}.fa-battery-0:before,.fa-battery-empty:before{content:"\f244"}.fa-socks:before{content:"\f696"}.fa-inbox:before{content:"\f01c"}.fa-section:before{content:"\e447"}.fa-gauge-high:before,.fa-tachometer-alt-fast:before,.fa-tachometer-alt:before{content:"\f625"}.fa-envelope-open-text:before{content:"\f658"}.fa-hospital-alt:before,.fa-hospital-wide:before,.fa-hospital:before{content:"\f0f8"}.fa-wine-bottle:before{content:"\f72f"}.fa-chess-rook:before{content:"\f447"}.fa-bars-staggered:before,.fa-reorder:before,.fa-stream:before{content:"\f550"}.fa-dharmachakra:before{content:"\f655"}.fa-hotdog:before{content:"\f80f"}.fa-blind:before,.fa-person-walking-with-cane:before{content:"\f29d"}.fa-drum:before{content:"\f569"}.fa-ice-cream:before{content:"\f810"}.fa-heart-circle-bolt:before{content:"\e4fc"}.fa-fax:before{content:"\f1ac"}.fa-paragraph:before{content:"\f1dd"}.fa-check-to-slot:before,.fa-vote-yea:before{content:"\f772"}.fa-star-half:before{content:"\f089"}.fa-boxes-alt:before,.fa-boxes-stacked:before,.fa-boxes:before{content:"\f468"}.fa-chain:before,.fa-link:before{content:"\f0c1"}.fa-assistive-listening-systems:before,.fa-ear-listen:before{content:"\f2a2"}.fa-tree-city:before{content:"\e587"}.fa-play:before{content:"\f04b"}.fa-font:before{content:"\f031"}.fa-table-cells-row-lock:before{content:"\e67a"}.fa-rupiah-sign:before{content:"\e23d"}.fa-magnifying-glass:before,.fa-search:before{content:"\f002"}.fa-ping-pong-paddle-ball:before,.fa-table-tennis-paddle-ball:before,.fa-table-tennis:before{content:"\f45d"}.fa-diagnoses:before,.fa-person-dots-from-line:before{content:"\f470"}.fa-trash-can-arrow-up:before,.fa-trash-restore-alt:before{content:"\f82a"}.fa-naira-sign:before{content:"\e1f6"}.fa-cart-arrow-down:before{content:"\f218"}.fa-walkie-talkie:before{content:"\f8ef"}.fa-file-edit:before,.fa-file-pen:before{content:"\f31c"}.fa-receipt:before{content:"\f543"}.fa-pen-square:before,.fa-pencil-square:before,.fa-square-pen:before{content:"\f14b"}.fa-suitcase-rolling:before{content:"\f5c1"}.fa-person-circle-exclamation:before{content:"\e53f"}.fa-chevron-down:before{content:"\f078"}.fa-battery-5:before,.fa-battery-full:before,.fa-battery:before{content:"\f240"}.fa-skull-crossbones:before{content:"\f714"}.fa-code-compare:before{content:"\e13a"}.fa-list-dots:before,.fa-list-ul:before{content:"\f0ca"}.fa-school-lock:before{content:"\e56f"}.fa-tower-cell:before{content:"\e585"}.fa-down-long:before,.fa-long-arrow-alt-down:before{content:"\f309"}.fa-ranking-star:before{content:"\e561"}.fa-chess-king:before{content:"\f43f"}.fa-person-harassing:before{content:"\e549"}.fa-brazilian-real-sign:before{content:"\e46c"}.fa-landmark-alt:before,.fa-landmark-dome:before{content:"\f752"}.fa-arrow-up:before{content:"\f062"}.fa-television:before,.fa-tv-alt:before,.fa-tv:before{content:"\f26c"}.fa-shrimp:before{content:"\e448"}.fa-list-check:before,.fa-tasks:before{content:"\f0ae"}.fa-jug-detergent:before{content:"\e519"}.fa-circle-user:before,.fa-user-circle:before{content:"\f2bd"}.fa-user-shield:before{content:"\f505"}.fa-wind:before{content:"\f72e"}.fa-car-burst:before,.fa-car-crash:before{content:"\f5e1"}.fa-y:before{content:"\59"}.fa-person-snowboarding:before,.fa-snowboarding:before{content:"\f7ce"}.fa-shipping-fast:before,.fa-truck-fast:before{content:"\f48b"}.fa-fish:before{content:"\f578"}.fa-user-graduate:before{content:"\f501"}.fa-adjust:before,.fa-circle-half-stroke:before{content:"\f042"}.fa-clapperboard:before{content:"\e131"}.fa-circle-radiation:before,.fa-radiation-alt:before{content:"\f7ba"}.fa-baseball-ball:before,.fa-baseball:before{content:"\f433"}.fa-jet-fighter-up:before{content:"\e518"}.fa-diagram-project:before,.fa-project-diagram:before{content:"\f542"}.fa-copy:before{content:"\f0c5"}.fa-volume-mute:before,.fa-volume-times:before,.fa-volume-xmark:before{content:"\f6a9"}.fa-hand-sparkles:before{content:"\e05d"}.fa-grip-horizontal:before,.fa-grip:before{content:"\f58d"}.fa-share-from-square:before,.fa-share-square:before{content:"\f14d"}.fa-child-combatant:before,.fa-child-rifle:before{content:"\e4e0"}.fa-gun:before{content:"\e19b"}.fa-phone-square:before,.fa-square-phone:before{content:"\f098"}.fa-add:before,.fa-plus:before{content:"\2b"}.fa-expand:before{content:"\f065"}.fa-computer:before{content:"\e4e5"}.fa-close:before,.fa-multiply:before,.fa-remove:before,.fa-times:before,.fa-xmark:before{content:"\f00d"}.fa-arrows-up-down-left-right:before,.fa-arrows:before{content:"\f047"}.fa-chalkboard-teacher:before,.fa-chalkboard-user:before{content:"\f51c"}.fa-peso-sign:before{content:"\e222"}.fa-building-shield:before{content:"\e4d8"}.fa-baby:before{content:"\f77c"}.fa-users-line:before{content:"\e592"}.fa-quote-left-alt:before,.fa-quote-left:before{content:"\f10d"}.fa-tractor:before{content:"\f722"}.fa-trash-arrow-up:before,.fa-trash-restore:before{content:"\f829"}.fa-arrow-down-up-lock:before{content:"\e4b0"}.fa-lines-leaning:before{content:"\e51e"}.fa-ruler-combined:before{content:"\f546"}.fa-copyright:before{content:"\f1f9"}.fa-equals:before{content:"\3d"}.fa-blender:before{content:"\f517"}.fa-teeth:before{content:"\f62e"}.fa-ils:before,.fa-shekel-sign:before,.fa-shekel:before,.fa-sheqel-sign:before,.fa-sheqel:before{content:"\f20b"}.fa-map:before{content:"\f279"}.fa-rocket:before{content:"\f135"}.fa-photo-film:before,.fa-photo-video:before{content:"\f87c"}.fa-folder-minus:before{content:"\f65d"}.fa-store:before{content:"\f54e"}.fa-arrow-trend-up:before{content:"\e098"}.fa-plug-circle-minus:before{content:"\e55e"}.fa-sign-hanging:before,.fa-sign:before{content:"\f4d9"}.fa-bezier-curve:before{content:"\f55b"}.fa-bell-slash:before{content:"\f1f6"}.fa-tablet-android:before,.fa-tablet:before{content:"\f3fb"}.fa-school-flag:before{content:"\e56e"}.fa-fill:before{content:"\f575"}.fa-angle-up:before{content:"\f106"}.fa-drumstick-bite:before{content:"\f6d7"}.fa-holly-berry:before{content:"\f7aa"}.fa-chevron-left:before{content:"\f053"}.fa-bacteria:before{content:"\e059"}.fa-hand-lizard:before{content:"\f258"}.fa-notdef:before{content:"\e1fe"}.fa-disease:before{content:"\f7fa"}.fa-briefcase-medical:before{content:"\f469"}.fa-genderless:before{content:"\f22d"}.fa-chevron-right:before{content:"\f054"}.fa-retweet:before{content:"\f079"}.fa-car-alt:before,.fa-car-rear:before{content:"\f5de"}.fa-pump-soap:before{content:"\e06b"}.fa-video-slash:before{content:"\f4e2"}.fa-battery-2:before,.fa-battery-quarter:before{content:"\f243"}.fa-radio:before{content:"\f8d7"}.fa-baby-carriage:before,.fa-carriage-baby:before{content:"\f77d"}.fa-traffic-light:before{content:"\f637"}.fa-thermometer:before{content:"\f491"}.fa-vr-cardboard:before{content:"\f729"}.fa-hand-middle-finger:before{content:"\f806"}.fa-percent:before,.fa-percentage:before{content:"\25"}.fa-truck-moving:before{content:"\f4df"}.fa-glass-water-droplet:before{content:"\e4f5"}.fa-display:before{content:"\e163"}.fa-face-smile:before,.fa-smile:before{content:"\f118"}.fa-thumb-tack:before,.fa-thumbtack:before{content:"\f08d"}.fa-trophy:before{content:"\f091"}.fa-person-praying:before,.fa-pray:before{content:"\f683"}.fa-hammer:before{content:"\f6e3"}.fa-hand-peace:before{content:"\f25b"}.fa-rotate:before,.fa-sync-alt:before{content:"\f2f1"}.fa-spinner:before{content:"\f110"}.fa-robot:before{content:"\f544"}.fa-peace:before{content:"\f67c"}.fa-cogs:before,.fa-gears:before{content:"\f085"}.fa-warehouse:before{content:"\f494"}.fa-arrow-up-right-dots:before{content:"\e4b7"}.fa-splotch:before{content:"\f5bc"}.fa-face-grin-hearts:before,.fa-grin-hearts:before{content:"\f584"}.fa-dice-four:before{content:"\f524"}.fa-sim-card:before{content:"\f7c4"}.fa-transgender-alt:before,.fa-transgender:before{content:"\f225"}.fa-mercury:before{content:"\f223"}.fa-arrow-turn-down:before,.fa-level-down:before{content:"\f149"}.fa-person-falling-burst:before{content:"\e547"}.fa-award:before{content:"\f559"}.fa-ticket-alt:before,.fa-ticket-simple:before{content:"\f3ff"}.fa-building:before{content:"\f1ad"}.fa-angle-double-left:before,.fa-angles-left:before{content:"\f100"}.fa-qrcode:before{content:"\f029"}.fa-clock-rotate-left:before,.fa-history:before{content:"\f1da"}.fa-face-grin-beam-sweat:before,.fa-grin-beam-sweat:before{content:"\f583"}.fa-arrow-right-from-file:before,.fa-file-export:before{content:"\f56e"}.fa-shield-blank:before,.fa-shield:before{content:"\f132"}.fa-arrow-up-short-wide:before,.fa-sort-amount-up-alt:before{content:"\f885"}.fa-house-medical:before{content:"\e3b2"}.fa-golf-ball-tee:before,.fa-golf-ball:before{content:"\f450"}.fa-chevron-circle-left:before,.fa-circle-chevron-left:before{content:"\f137"}.fa-house-chimney-window:before{content:"\e00d"}.fa-pen-nib:before{content:"\f5ad"}.fa-tent-arrow-turn-left:before{content:"\e580"}.fa-tents:before{content:"\e582"}.fa-magic:before,.fa-wand-magic:before{content:"\f0d0"}.fa-dog:before{content:"\f6d3"}.fa-carrot:before{content:"\f787"}.fa-moon:before{content:"\f186"}.fa-wine-glass-alt:before,.fa-wine-glass-empty:before{content:"\f5ce"}.fa-cheese:before{content:"\f7ef"}.fa-yin-yang:before{content:"\f6ad"}.fa-music:before{content:"\f001"}.fa-code-commit:before{content:"\f386"}.fa-temperature-low:before{content:"\f76b"}.fa-biking:before,.fa-person-biking:before{content:"\f84a"}.fa-broom:before{content:"\f51a"}.fa-shield-heart:before{content:"\e574"}.fa-gopuram:before{content:"\f664"}.fa-earth-oceania:before,.fa-globe-oceania:before{content:"\e47b"}.fa-square-xmark:before,.fa-times-square:before,.fa-xmark-square:before{content:"\f2d3"}.fa-hashtag:before{content:"\23"}.fa-expand-alt:before,.fa-up-right-and-down-left-from-center:before{content:"\f424"}.fa-oil-can:before{content:"\f613"}.fa-t:before{content:"\54"}.fa-hippo:before{content:"\f6ed"}.fa-chart-column:before{content:"\e0e3"}.fa-infinity:before{content:"\f534"}.fa-vial-circle-check:before{content:"\e596"}.fa-person-arrow-down-to-line:before{content:"\e538"}.fa-voicemail:before{content:"\f897"}.fa-fan:before{content:"\f863"}.fa-person-walking-luggage:before{content:"\e554"}.fa-arrows-alt-v:before,.fa-up-down:before{content:"\f338"}.fa-cloud-moon-rain:before{content:"\f73c"}.fa-calendar:before{content:"\f133"}.fa-trailer:before{content:"\e041"}.fa-bahai:before,.fa-haykal:before{content:"\f666"}.fa-sd-card:before{content:"\f7c2"}.fa-dragon:before{content:"\f6d5"}.fa-shoe-prints:before{content:"\f54b"}.fa-circle-plus:before,.fa-plus-circle:before{content:"\f055"}.fa-face-grin-tongue-wink:before,.fa-grin-tongue-wink:before{content:"\f58b"}.fa-hand-holding:before{content:"\f4bd"}.fa-plug-circle-exclamation:before{content:"\e55d"}.fa-chain-broken:before,.fa-chain-slash:before,.fa-link-slash:before,.fa-unlink:before{content:"\f127"}.fa-clone:before{content:"\f24d"}.fa-person-walking-arrow-loop-left:before{content:"\e551"}.fa-arrow-up-z-a:before,.fa-sort-alpha-up-alt:before{content:"\f882"}.fa-fire-alt:before,.fa-fire-flame-curved:before{content:"\f7e4"}.fa-tornado:before{content:"\f76f"}.fa-file-circle-plus:before{content:"\e494"}.fa-book-quran:before,.fa-quran:before{content:"\f687"}.fa-anchor:before{content:"\f13d"}.fa-border-all:before{content:"\f84c"}.fa-angry:before,.fa-face-angry:before{content:"\f556"}.fa-cookie-bite:before{content:"\f564"}.fa-arrow-trend-down:before{content:"\e097"}.fa-feed:before,.fa-rss:before{content:"\f09e"}.fa-draw-polygon:before{content:"\f5ee"}.fa-balance-scale:before,.fa-scale-balanced:before{content:"\f24e"}.fa-gauge-simple-high:before,.fa-tachometer-fast:before,.fa-tachometer:before{content:"\f62a"}.fa-shower:before{content:"\f2cc"}.fa-desktop-alt:before,.fa-desktop:before{content:"\f390"}.fa-m:before{content:"\4d"}.fa-table-list:before,.fa-th-list:before{content:"\f00b"}.fa-comment-sms:before,.fa-sms:before{content:"\f7cd"}.fa-book:before{content:"\f02d"}.fa-user-plus:before{content:"\f234"}.fa-check:before{content:"\f00c"}.fa-battery-4:before,.fa-battery-three-quarters:before{content:"\f241"}.fa-house-circle-check:before{content:"\e509"}.fa-angle-left:before{content:"\f104"}.fa-diagram-successor:before{content:"\e47a"}.fa-truck-arrow-right:before{content:"\e58b"}.fa-arrows-split-up-and-left:before{content:"\e4bc"}.fa-fist-raised:before,.fa-hand-fist:before{content:"\f6de"}.fa-cloud-moon:before{content:"\f6c3"}.fa-briefcase:before{content:"\f0b1"}.fa-person-falling:before{content:"\e546"}.fa-image-portrait:before,.fa-portrait:before{content:"\f3e0"}.fa-user-tag:before{content:"\f507"}.fa-rug:before{content:"\e569"}.fa-earth-europe:before,.fa-globe-europe:before{content:"\f7a2"}.fa-cart-flatbed-suitcase:before,.fa-luggage-cart:before{content:"\f59d"}.fa-rectangle-times:before,.fa-rectangle-xmark:before,.fa-times-rectangle:before,.fa-window-close:before{content:"\f410"}.fa-baht-sign:before{content:"\e0ac"}.fa-book-open:before{content:"\f518"}.fa-book-journal-whills:before,.fa-journal-whills:before{content:"\f66a"}.fa-handcuffs:before{content:"\e4f8"}.fa-exclamation-triangle:before,.fa-triangle-exclamation:before,.fa-warning:before{content:"\f071"}.fa-database:before{content:"\f1c0"}.fa-mail-forward:before,.fa-share:before{content:"\f064"}.fa-bottle-droplet:before{content:"\e4c4"}.fa-mask-face:before{content:"\e1d7"}.fa-hill-rockslide:before{content:"\e508"}.fa-exchange-alt:before,.fa-right-left:before{content:"\f362"}.fa-paper-plane:before{content:"\f1d8"}.fa-road-circle-exclamation:before{content:"\e565"}.fa-dungeon:before{content:"\f6d9"}.fa-align-right:before{content:"\f038"}.fa-money-bill-1-wave:before,.fa-money-bill-wave-alt:before{content:"\f53b"}.fa-life-ring:before{content:"\f1cd"}.fa-hands:before,.fa-sign-language:before,.fa-signing:before{content:"\f2a7"}.fa-calendar-day:before{content:"\f783"}.fa-ladder-water:before,.fa-swimming-pool:before,.fa-water-ladder:before{content:"\f5c5"}.fa-arrows-up-down:before,.fa-arrows-v:before{content:"\f07d"}.fa-face-grimace:before,.fa-grimace:before{content:"\f57f"}.fa-wheelchair-alt:before,.fa-wheelchair-move:before{content:"\e2ce"}.fa-level-down-alt:before,.fa-turn-down:before{content:"\f3be"}.fa-person-walking-arrow-right:before{content:"\e552"}.fa-envelope-square:before,.fa-square-envelope:before{content:"\f199"}.fa-dice:before{content:"\f522"}.fa-bowling-ball:before{content:"\f436"}.fa-brain:before{content:"\f5dc"}.fa-band-aid:before,.fa-bandage:before{content:"\f462"}.fa-calendar-minus:before{content:"\f272"}.fa-circle-xmark:before,.fa-times-circle:before,.fa-xmark-circle:before{content:"\f057"}.fa-gifts:before{content:"\f79c"}.fa-hotel:before{content:"\f594"}.fa-earth-asia:before,.fa-globe-asia:before{content:"\f57e"}.fa-id-card-alt:before,.fa-id-card-clip:before{content:"\f47f"}.fa-magnifying-glass-plus:before,.fa-search-plus:before{content:"\f00e"}.fa-thumbs-up:before{content:"\f164"}.fa-user-clock:before{content:"\f4fd"}.fa-allergies:before,.fa-hand-dots:before{content:"\f461"}.fa-file-invoice:before{content:"\f570"}.fa-window-minimize:before{content:"\f2d1"}.fa-coffee:before,.fa-mug-saucer:before{content:"\f0f4"}.fa-brush:before{content:"\f55d"}.fa-mask:before{content:"\f6fa"}.fa-magnifying-glass-minus:before,.fa-search-minus:before{content:"\f010"}.fa-ruler-vertical:before{content:"\f548"}.fa-user-alt:before,.fa-user-large:before{content:"\f406"}.fa-train-tram:before{content:"\e5b4"}.fa-user-nurse:before{content:"\f82f"}.fa-syringe:before{content:"\f48e"}.fa-cloud-sun:before{content:"\f6c4"}.fa-stopwatch-20:before{content:"\e06f"}.fa-square-full:before{content:"\f45c"}.fa-magnet:before{content:"\f076"}.fa-jar:before{content:"\e516"}.fa-note-sticky:before,.fa-sticky-note:before{content:"\f249"}.fa-bug-slash:before{content:"\e490"}.fa-arrow-up-from-water-pump:before{content:"\e4b6"}.fa-bone:before{content:"\f5d7"}.fa-table-cells-row-unlock:before{content:"\e691"}.fa-user-injured:before{content:"\f728"}.fa-face-sad-tear:before,.fa-sad-tear:before{content:"\f5b4"}.fa-plane:before{content:"\f072"}.fa-tent-arrows-down:before{content:"\e581"}.fa-exclamation:before{content:"\21"}.fa-arrows-spin:before{content:"\e4bb"}.fa-print:before{content:"\f02f"}.fa-try:before,.fa-turkish-lira-sign:before,.fa-turkish-lira:before{content:"\e2bb"}.fa-dollar-sign:before,.fa-dollar:before,.fa-usd:before{content:"\24"}.fa-x:before{content:"\58"}.fa-magnifying-glass-dollar:before,.fa-search-dollar:before{content:"\f688"}.fa-users-cog:before,.fa-users-gear:before{content:"\f509"}.fa-person-military-pointing:before{content:"\e54a"}.fa-bank:before,.fa-building-columns:before,.fa-institution:before,.fa-museum:before,.fa-university:before{content:"\f19c"}.fa-umbrella:before{content:"\f0e9"}.fa-trowel:before{content:"\e589"}.fa-d:before{content:"\44"}.fa-stapler:before{content:"\e5af"}.fa-masks-theater:before,.fa-theater-masks:before{content:"\f630"}.fa-kip-sign:before{content:"\e1c4"}.fa-hand-point-left:before{content:"\f0a5"}.fa-handshake-alt:before,.fa-handshake-simple:before{content:"\f4c6"}.fa-fighter-jet:before,.fa-jet-fighter:before{content:"\f0fb"}.fa-share-alt-square:before,.fa-square-share-nodes:before{content:"\f1e1"}.fa-barcode:before{content:"\f02a"}.fa-plus-minus:before{content:"\e43c"}.fa-video-camera:before,.fa-video:before{content:"\f03d"}.fa-graduation-cap:before,.fa-mortar-board:before{content:"\f19d"}.fa-hand-holding-medical:before{content:"\e05c"}.fa-person-circle-check:before{content:"\e53e"}.fa-level-up-alt:before,.fa-turn-up:before{content:"\f3bf"} +.fa-sr-only,.fa-sr-only-focusable:not(:focus),.sr-only,.sr-only-focusable:not(:focus){position:absolute;width:1px;height:1px;padding:0;margin:-1px;overflow:hidden;clip:rect(0,0,0,0);white-space:nowrap;border-width:0}:host,:root{--fa-style-family-brands:"Font Awesome 6 Brands";--fa-font-brands:normal 400 1em/1 "Font Awesome 6 Brands"}@font-face{font-family:"Font Awesome 6 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}.fa-brands,.fab{font-weight:400}.fa-monero:before{content:"\f3d0"}.fa-hooli:before{content:"\f427"}.fa-yelp:before{content:"\f1e9"}.fa-cc-visa:before{content:"\f1f0"}.fa-lastfm:before{content:"\f202"}.fa-shopware:before{content:"\f5b5"}.fa-creative-commons-nc:before{content:"\f4e8"}.fa-aws:before{content:"\f375"}.fa-redhat:before{content:"\f7bc"}.fa-yoast:before{content:"\f2b1"}.fa-cloudflare:before{content:"\e07d"}.fa-ups:before{content:"\f7e0"}.fa-pixiv:before{content:"\e640"}.fa-wpexplorer:before{content:"\f2de"}.fa-dyalog:before{content:"\f399"}.fa-bity:before{content:"\f37a"}.fa-stackpath:before{content:"\f842"}.fa-buysellads:before{content:"\f20d"}.fa-first-order:before{content:"\f2b0"}.fa-modx:before{content:"\f285"}.fa-guilded:before{content:"\e07e"}.fa-vnv:before{content:"\f40b"}.fa-js-square:before,.fa-square-js:before{content:"\f3b9"}.fa-microsoft:before{content:"\f3ca"}.fa-qq:before{content:"\f1d6"}.fa-orcid:before{content:"\f8d2"}.fa-java:before{content:"\f4e4"}.fa-invision:before{content:"\f7b0"}.fa-creative-commons-pd-alt:before{content:"\f4ed"}.fa-centercode:before{content:"\f380"}.fa-glide-g:before{content:"\f2a6"}.fa-drupal:before{content:"\f1a9"}.fa-jxl:before{content:"\e67b"}.fa-dart-lang:before{content:"\e693"}.fa-hire-a-helper:before{content:"\f3b0"}.fa-creative-commons-by:before{content:"\f4e7"}.fa-unity:before{content:"\e049"}.fa-whmcs:before{content:"\f40d"}.fa-rocketchat:before{content:"\f3e8"}.fa-vk:before{content:"\f189"}.fa-untappd:before{content:"\f405"}.fa-mailchimp:before{content:"\f59e"}.fa-css3-alt:before{content:"\f38b"}.fa-reddit-square:before,.fa-square-reddit:before{content:"\f1a2"}.fa-vimeo-v:before{content:"\f27d"}.fa-contao:before{content:"\f26d"}.fa-square-font-awesome:before{content:"\e5ad"}.fa-deskpro:before{content:"\f38f"}.fa-brave:before{content:"\e63c"}.fa-sistrix:before{content:"\f3ee"}.fa-instagram-square:before,.fa-square-instagram:before{content:"\e055"}.fa-battle-net:before{content:"\f835"}.fa-the-red-yeti:before{content:"\f69d"}.fa-hacker-news-square:before,.fa-square-hacker-news:before{content:"\f3af"}.fa-edge:before{content:"\f282"}.fa-threads:before{content:"\e618"}.fa-napster:before{content:"\f3d2"}.fa-snapchat-square:before,.fa-square-snapchat:before{content:"\f2ad"}.fa-google-plus-g:before{content:"\f0d5"}.fa-artstation:before{content:"\f77a"}.fa-markdown:before{content:"\f60f"}.fa-sourcetree:before{content:"\f7d3"}.fa-google-plus:before{content:"\f2b3"}.fa-diaspora:before{content:"\f791"}.fa-foursquare:before{content:"\f180"}.fa-stack-overflow:before{content:"\f16c"}.fa-github-alt:before{content:"\f113"}.fa-phoenix-squadron:before{content:"\f511"}.fa-pagelines:before{content:"\f18c"}.fa-algolia:before{content:"\f36c"}.fa-red-river:before{content:"\f3e3"}.fa-creative-commons-sa:before{content:"\f4ef"}.fa-safari:before{content:"\f267"}.fa-google:before{content:"\f1a0"}.fa-font-awesome-alt:before,.fa-square-font-awesome-stroke:before{content:"\f35c"}.fa-atlassian:before{content:"\f77b"}.fa-linkedin-in:before{content:"\f0e1"}.fa-digital-ocean:before{content:"\f391"}.fa-nimblr:before{content:"\f5a8"}.fa-chromecast:before{content:"\f838"}.fa-evernote:before{content:"\f839"}.fa-hacker-news:before{content:"\f1d4"}.fa-creative-commons-sampling:before{content:"\f4f0"}.fa-adversal:before{content:"\f36a"}.fa-creative-commons:before{content:"\f25e"}.fa-watchman-monitoring:before{content:"\e087"}.fa-fonticons:before{content:"\f280"}.fa-weixin:before{content:"\f1d7"}.fa-shirtsinbulk:before{content:"\f214"}.fa-codepen:before{content:"\f1cb"}.fa-git-alt:before{content:"\f841"}.fa-lyft:before{content:"\f3c3"}.fa-rev:before{content:"\f5b2"}.fa-windows:before{content:"\f17a"}.fa-wizards-of-the-coast:before{content:"\f730"}.fa-square-viadeo:before,.fa-viadeo-square:before{content:"\f2aa"}.fa-meetup:before{content:"\f2e0"}.fa-centos:before{content:"\f789"}.fa-adn:before{content:"\f170"}.fa-cloudsmith:before{content:"\f384"}.fa-opensuse:before{content:"\e62b"}.fa-pied-piper-alt:before{content:"\f1a8"}.fa-dribbble-square:before,.fa-square-dribbble:before{content:"\f397"}.fa-codiepie:before{content:"\f284"}.fa-node:before{content:"\f419"}.fa-mix:before{content:"\f3cb"}.fa-steam:before{content:"\f1b6"}.fa-cc-apple-pay:before{content:"\f416"}.fa-scribd:before{content:"\f28a"}.fa-debian:before{content:"\e60b"}.fa-openid:before{content:"\f19b"}.fa-instalod:before{content:"\e081"}.fa-expeditedssl:before{content:"\f23e"}.fa-sellcast:before{content:"\f2da"}.fa-square-twitter:before,.fa-twitter-square:before{content:"\f081"}.fa-r-project:before{content:"\f4f7"}.fa-delicious:before{content:"\f1a5"}.fa-freebsd:before{content:"\f3a4"}.fa-vuejs:before{content:"\f41f"}.fa-accusoft:before{content:"\f369"}.fa-ioxhost:before{content:"\f208"}.fa-fonticons-fi:before{content:"\f3a2"}.fa-app-store:before{content:"\f36f"}.fa-cc-mastercard:before{content:"\f1f1"}.fa-itunes-note:before{content:"\f3b5"}.fa-golang:before{content:"\e40f"}.fa-kickstarter:before,.fa-square-kickstarter:before{content:"\f3bb"}.fa-grav:before{content:"\f2d6"}.fa-weibo:before{content:"\f18a"}.fa-uncharted:before{content:"\e084"}.fa-firstdraft:before{content:"\f3a1"}.fa-square-youtube:before,.fa-youtube-square:before{content:"\f431"}.fa-wikipedia-w:before{content:"\f266"}.fa-rendact:before,.fa-wpressr:before{content:"\f3e4"}.fa-angellist:before{content:"\f209"}.fa-galactic-republic:before{content:"\f50c"}.fa-nfc-directional:before{content:"\e530"}.fa-skype:before{content:"\f17e"}.fa-joget:before{content:"\f3b7"}.fa-fedora:before{content:"\f798"}.fa-stripe-s:before{content:"\f42a"}.fa-meta:before{content:"\e49b"}.fa-laravel:before{content:"\f3bd"}.fa-hotjar:before{content:"\f3b1"}.fa-bluetooth-b:before{content:"\f294"}.fa-square-letterboxd:before{content:"\e62e"}.fa-sticker-mule:before{content:"\f3f7"}.fa-creative-commons-zero:before{content:"\f4f3"}.fa-hips:before{content:"\f452"}.fa-behance:before{content:"\f1b4"}.fa-reddit:before{content:"\f1a1"}.fa-discord:before{content:"\f392"}.fa-chrome:before{content:"\f268"}.fa-app-store-ios:before{content:"\f370"}.fa-cc-discover:before{content:"\f1f2"}.fa-wpbeginner:before{content:"\f297"}.fa-confluence:before{content:"\f78d"}.fa-shoelace:before{content:"\e60c"}.fa-mdb:before{content:"\f8ca"}.fa-dochub:before{content:"\f394"}.fa-accessible-icon:before{content:"\f368"}.fa-ebay:before{content:"\f4f4"}.fa-amazon:before{content:"\f270"}.fa-unsplash:before{content:"\e07c"}.fa-yarn:before{content:"\f7e3"}.fa-square-steam:before,.fa-steam-square:before{content:"\f1b7"}.fa-500px:before{content:"\f26e"}.fa-square-vimeo:before,.fa-vimeo-square:before{content:"\f194"}.fa-asymmetrik:before{content:"\f372"}.fa-font-awesome-flag:before,.fa-font-awesome-logo-full:before,.fa-font-awesome:before{content:"\f2b4"}.fa-gratipay:before{content:"\f184"}.fa-apple:before{content:"\f179"}.fa-hive:before{content:"\e07f"}.fa-gitkraken:before{content:"\f3a6"}.fa-keybase:before{content:"\f4f5"}.fa-apple-pay:before{content:"\f415"}.fa-padlet:before{content:"\e4a0"}.fa-amazon-pay:before{content:"\f42c"}.fa-github-square:before,.fa-square-github:before{content:"\f092"}.fa-stumbleupon:before{content:"\f1a4"}.fa-fedex:before{content:"\f797"}.fa-phoenix-framework:before{content:"\f3dc"}.fa-shopify:before{content:"\e057"}.fa-neos:before{content:"\f612"}.fa-square-threads:before{content:"\e619"}.fa-hackerrank:before{content:"\f5f7"}.fa-researchgate:before{content:"\f4f8"}.fa-swift:before{content:"\f8e1"}.fa-angular:before{content:"\f420"}.fa-speakap:before{content:"\f3f3"}.fa-angrycreative:before{content:"\f36e"}.fa-y-combinator:before{content:"\f23b"}.fa-empire:before{content:"\f1d1"}.fa-envira:before{content:"\f299"}.fa-google-scholar:before{content:"\e63b"}.fa-gitlab-square:before,.fa-square-gitlab:before{content:"\e5ae"}.fa-studiovinari:before{content:"\f3f8"}.fa-pied-piper:before{content:"\f2ae"}.fa-wordpress:before{content:"\f19a"}.fa-product-hunt:before{content:"\f288"}.fa-firefox:before{content:"\f269"}.fa-linode:before{content:"\f2b8"}.fa-goodreads:before{content:"\f3a8"}.fa-odnoklassniki-square:before,.fa-square-odnoklassniki:before{content:"\f264"}.fa-jsfiddle:before{content:"\f1cc"}.fa-sith:before{content:"\f512"}.fa-themeisle:before{content:"\f2b2"}.fa-page4:before{content:"\f3d7"}.fa-hashnode:before{content:"\e499"}.fa-react:before{content:"\f41b"}.fa-cc-paypal:before{content:"\f1f4"}.fa-squarespace:before{content:"\f5be"}.fa-cc-stripe:before{content:"\f1f5"}.fa-creative-commons-share:before{content:"\f4f2"}.fa-bitcoin:before{content:"\f379"}.fa-keycdn:before{content:"\f3ba"}.fa-opera:before{content:"\f26a"}.fa-itch-io:before{content:"\f83a"}.fa-umbraco:before{content:"\f8e8"}.fa-galactic-senate:before{content:"\f50d"}.fa-ubuntu:before{content:"\f7df"}.fa-draft2digital:before{content:"\f396"}.fa-stripe:before{content:"\f429"}.fa-houzz:before{content:"\f27c"}.fa-gg:before{content:"\f260"}.fa-dhl:before{content:"\f790"}.fa-pinterest-square:before,.fa-square-pinterest:before{content:"\f0d3"}.fa-xing:before{content:"\f168"}.fa-blackberry:before{content:"\f37b"}.fa-creative-commons-pd:before{content:"\f4ec"}.fa-playstation:before{content:"\f3df"}.fa-quinscape:before{content:"\f459"}.fa-less:before{content:"\f41d"}.fa-blogger-b:before{content:"\f37d"}.fa-opencart:before{content:"\f23d"}.fa-vine:before{content:"\f1ca"}.fa-signal-messenger:before{content:"\e663"}.fa-paypal:before{content:"\f1ed"}.fa-gitlab:before{content:"\f296"}.fa-typo3:before{content:"\f42b"}.fa-reddit-alien:before{content:"\f281"}.fa-yahoo:before{content:"\f19e"}.fa-dailymotion:before{content:"\e052"}.fa-affiliatetheme:before{content:"\f36b"}.fa-pied-piper-pp:before{content:"\f1a7"}.fa-bootstrap:before{content:"\f836"}.fa-odnoklassniki:before{content:"\f263"}.fa-nfc-symbol:before{content:"\e531"}.fa-mintbit:before{content:"\e62f"}.fa-ethereum:before{content:"\f42e"}.fa-speaker-deck:before{content:"\f83c"}.fa-creative-commons-nc-eu:before{content:"\f4e9"}.fa-patreon:before{content:"\f3d9"}.fa-avianex:before{content:"\f374"}.fa-ello:before{content:"\f5f1"}.fa-gofore:before{content:"\f3a7"}.fa-bimobject:before{content:"\f378"}.fa-brave-reverse:before{content:"\e63d"}.fa-facebook-f:before{content:"\f39e"}.fa-google-plus-square:before,.fa-square-google-plus:before{content:"\f0d4"}.fa-web-awesome:before{content:"\e682"}.fa-mandalorian:before{content:"\f50f"}.fa-first-order-alt:before{content:"\f50a"}.fa-osi:before{content:"\f41a"}.fa-google-wallet:before{content:"\f1ee"}.fa-d-and-d-beyond:before{content:"\f6ca"}.fa-periscope:before{content:"\f3da"}.fa-fulcrum:before{content:"\f50b"}.fa-cloudscale:before{content:"\f383"}.fa-forumbee:before{content:"\f211"}.fa-mizuni:before{content:"\f3cc"}.fa-schlix:before{content:"\f3ea"}.fa-square-xing:before,.fa-xing-square:before{content:"\f169"}.fa-bandcamp:before{content:"\f2d5"}.fa-wpforms:before{content:"\f298"}.fa-cloudversify:before{content:"\f385"}.fa-usps:before{content:"\f7e1"}.fa-megaport:before{content:"\f5a3"}.fa-magento:before{content:"\f3c4"}.fa-spotify:before{content:"\f1bc"}.fa-optin-monster:before{content:"\f23c"}.fa-fly:before{content:"\f417"}.fa-aviato:before{content:"\f421"}.fa-itunes:before{content:"\f3b4"}.fa-cuttlefish:before{content:"\f38c"}.fa-blogger:before{content:"\f37c"}.fa-flickr:before{content:"\f16e"}.fa-viber:before{content:"\f409"}.fa-soundcloud:before{content:"\f1be"}.fa-digg:before{content:"\f1a6"}.fa-tencent-weibo:before{content:"\f1d5"}.fa-letterboxd:before{content:"\e62d"}.fa-symfony:before{content:"\f83d"}.fa-maxcdn:before{content:"\f136"}.fa-etsy:before{content:"\f2d7"}.fa-facebook-messenger:before{content:"\f39f"}.fa-audible:before{content:"\f373"}.fa-think-peaks:before{content:"\f731"}.fa-bilibili:before{content:"\e3d9"}.fa-erlang:before{content:"\f39d"}.fa-x-twitter:before{content:"\e61b"}.fa-cotton-bureau:before{content:"\f89e"}.fa-dashcube:before{content:"\f210"}.fa-42-group:before,.fa-innosoft:before{content:"\e080"}.fa-stack-exchange:before{content:"\f18d"}.fa-elementor:before{content:"\f430"}.fa-pied-piper-square:before,.fa-square-pied-piper:before{content:"\e01e"}.fa-creative-commons-nd:before{content:"\f4eb"}.fa-palfed:before{content:"\f3d8"}.fa-superpowers:before{content:"\f2dd"}.fa-resolving:before{content:"\f3e7"}.fa-xbox:before{content:"\f412"}.fa-square-web-awesome-stroke:before{content:"\e684"}.fa-searchengin:before{content:"\f3eb"}.fa-tiktok:before{content:"\e07b"}.fa-facebook-square:before,.fa-square-facebook:before{content:"\f082"}.fa-renren:before{content:"\f18b"}.fa-linux:before{content:"\f17c"}.fa-glide:before{content:"\f2a5"}.fa-linkedin:before{content:"\f08c"}.fa-hubspot:before{content:"\f3b2"}.fa-deploydog:before{content:"\f38e"}.fa-twitch:before{content:"\f1e8"}.fa-flutter:before{content:"\e694"}.fa-ravelry:before{content:"\f2d9"}.fa-mixer:before{content:"\e056"}.fa-lastfm-square:before,.fa-square-lastfm:before{content:"\f203"}.fa-vimeo:before{content:"\f40a"}.fa-mendeley:before{content:"\f7b3"}.fa-uniregistry:before{content:"\f404"}.fa-figma:before{content:"\f799"}.fa-creative-commons-remix:before{content:"\f4ee"}.fa-cc-amazon-pay:before{content:"\f42d"}.fa-dropbox:before{content:"\f16b"}.fa-instagram:before{content:"\f16d"}.fa-cmplid:before{content:"\e360"}.fa-upwork:before{content:"\e641"}.fa-facebook:before{content:"\f09a"}.fa-gripfire:before{content:"\f3ac"}.fa-jedi-order:before{content:"\f50e"}.fa-uikit:before{content:"\f403"}.fa-fort-awesome-alt:before{content:"\f3a3"}.fa-phabricator:before{content:"\f3db"}.fa-ussunnah:before{content:"\f407"}.fa-earlybirds:before{content:"\f39a"}.fa-trade-federation:before{content:"\f513"}.fa-autoprefixer:before{content:"\f41c"}.fa-whatsapp:before{content:"\f232"}.fa-square-upwork:before{content:"\e67c"}.fa-slideshare:before{content:"\f1e7"}.fa-google-play:before{content:"\f3ab"}.fa-viadeo:before{content:"\f2a9"}.fa-line:before{content:"\f3c0"}.fa-google-drive:before{content:"\f3aa"}.fa-servicestack:before{content:"\f3ec"}.fa-simplybuilt:before{content:"\f215"}.fa-bitbucket:before{content:"\f171"}.fa-imdb:before{content:"\f2d8"}.fa-deezer:before{content:"\e077"}.fa-raspberry-pi:before{content:"\f7bb"}.fa-jira:before{content:"\f7b1"}.fa-docker:before{content:"\f395"}.fa-screenpal:before{content:"\e570"}.fa-bluetooth:before{content:"\f293"}.fa-gitter:before{content:"\f426"}.fa-d-and-d:before{content:"\f38d"}.fa-microblog:before{content:"\e01a"}.fa-cc-diners-club:before{content:"\f24c"}.fa-gg-circle:before{content:"\f261"}.fa-pied-piper-hat:before{content:"\f4e5"}.fa-kickstarter-k:before{content:"\f3bc"}.fa-yandex:before{content:"\f413"}.fa-readme:before{content:"\f4d5"}.fa-html5:before{content:"\f13b"}.fa-sellsy:before{content:"\f213"}.fa-square-web-awesome:before{content:"\e683"}.fa-sass:before{content:"\f41e"}.fa-wirsindhandwerk:before,.fa-wsh:before{content:"\e2d0"}.fa-buromobelexperte:before{content:"\f37f"}.fa-salesforce:before{content:"\f83b"}.fa-octopus-deploy:before{content:"\e082"}.fa-medapps:before{content:"\f3c6"}.fa-ns8:before{content:"\f3d5"}.fa-pinterest-p:before{content:"\f231"}.fa-apper:before{content:"\f371"}.fa-fort-awesome:before{content:"\f286"}.fa-waze:before{content:"\f83f"}.fa-bluesky:before{content:"\e671"}.fa-cc-jcb:before{content:"\f24b"}.fa-snapchat-ghost:before,.fa-snapchat:before{content:"\f2ab"}.fa-fantasy-flight-games:before{content:"\f6dc"}.fa-rust:before{content:"\e07a"}.fa-wix:before{content:"\f5cf"}.fa-behance-square:before,.fa-square-behance:before{content:"\f1b5"}.fa-supple:before{content:"\f3f9"}.fa-webflow:before{content:"\e65c"}.fa-rebel:before{content:"\f1d0"}.fa-css3:before{content:"\f13c"}.fa-staylinked:before{content:"\f3f5"}.fa-kaggle:before{content:"\f5fa"}.fa-space-awesome:before{content:"\e5ac"}.fa-deviantart:before{content:"\f1bd"}.fa-cpanel:before{content:"\f388"}.fa-goodreads-g:before{content:"\f3a9"}.fa-git-square:before,.fa-square-git:before{content:"\f1d2"}.fa-square-tumblr:before,.fa-tumblr-square:before{content:"\f174"}.fa-trello:before{content:"\f181"}.fa-creative-commons-nc-jp:before{content:"\f4ea"}.fa-get-pocket:before{content:"\f265"}.fa-perbyte:before{content:"\e083"}.fa-grunt:before{content:"\f3ad"}.fa-weebly:before{content:"\f5cc"}.fa-connectdevelop:before{content:"\f20e"}.fa-leanpub:before{content:"\f212"}.fa-black-tie:before{content:"\f27e"}.fa-themeco:before{content:"\f5c6"}.fa-python:before{content:"\f3e2"}.fa-android:before{content:"\f17b"}.fa-bots:before{content:"\e340"}.fa-free-code-camp:before{content:"\f2c5"}.fa-hornbill:before{content:"\f592"}.fa-js:before{content:"\f3b8"}.fa-ideal:before{content:"\e013"}.fa-git:before{content:"\f1d3"}.fa-dev:before{content:"\f6cc"}.fa-sketch:before{content:"\f7c6"}.fa-yandex-international:before{content:"\f414"}.fa-cc-amex:before{content:"\f1f3"}.fa-uber:before{content:"\f402"}.fa-github:before{content:"\f09b"}.fa-php:before{content:"\f457"}.fa-alipay:before{content:"\f642"}.fa-youtube:before{content:"\f167"}.fa-skyatlas:before{content:"\f216"}.fa-firefox-browser:before{content:"\e007"}.fa-replyd:before{content:"\f3e6"}.fa-suse:before{content:"\f7d6"}.fa-jenkins:before{content:"\f3b6"}.fa-twitter:before{content:"\f099"}.fa-rockrms:before{content:"\f3e9"}.fa-pinterest:before{content:"\f0d2"}.fa-buffer:before{content:"\f837"}.fa-npm:before{content:"\f3d4"}.fa-yammer:before{content:"\f840"}.fa-btc:before{content:"\f15a"}.fa-dribbble:before{content:"\f17d"}.fa-stumbleupon-circle:before{content:"\f1a3"}.fa-internet-explorer:before{content:"\f26b"}.fa-stubber:before{content:"\e5c7"}.fa-telegram-plane:before,.fa-telegram:before{content:"\f2c6"}.fa-old-republic:before{content:"\f510"}.fa-odysee:before{content:"\e5c6"}.fa-square-whatsapp:before,.fa-whatsapp-square:before{content:"\f40c"}.fa-node-js:before{content:"\f3d3"}.fa-edge-legacy:before{content:"\e078"}.fa-slack-hash:before,.fa-slack:before{content:"\f198"}.fa-medrt:before{content:"\f3c8"}.fa-usb:before{content:"\f287"}.fa-tumblr:before{content:"\f173"}.fa-vaadin:before{content:"\f408"}.fa-quora:before{content:"\f2c4"}.fa-square-x-twitter:before{content:"\e61a"}.fa-reacteurope:before{content:"\f75d"}.fa-medium-m:before,.fa-medium:before{content:"\f23a"}.fa-amilia:before{content:"\f36d"}.fa-mixcloud:before{content:"\f289"}.fa-flipboard:before{content:"\f44d"}.fa-viacoin:before{content:"\f237"}.fa-critical-role:before{content:"\f6c9"}.fa-sitrox:before{content:"\e44a"}.fa-discourse:before{content:"\f393"}.fa-joomla:before{content:"\f1aa"}.fa-mastodon:before{content:"\f4f6"}.fa-airbnb:before{content:"\f834"}.fa-wolf-pack-battalion:before{content:"\f514"}.fa-buy-n-large:before{content:"\f8a6"}.fa-gulp:before{content:"\f3ae"}.fa-creative-commons-sampling-plus:before{content:"\f4f1"}.fa-strava:before{content:"\f428"}.fa-ember:before{content:"\f423"}.fa-canadian-maple-leaf:before{content:"\f785"}.fa-teamspeak:before{content:"\f4f9"}.fa-pushed:before{content:"\f3e1"}.fa-wordpress-simple:before{content:"\f411"}.fa-nutritionix:before{content:"\f3d6"}.fa-wodu:before{content:"\e088"}.fa-google-pay:before{content:"\e079"}.fa-intercom:before{content:"\f7af"}.fa-zhihu:before{content:"\f63f"}.fa-korvue:before{content:"\f42f"}.fa-pix:before{content:"\e43a"}.fa-steam-symbol:before{content:"\f3f6"}:host,:root{--fa-font-regular:normal 400 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}.fa-regular,.far{font-weight:400}:host,:root{--fa-style-family-classic:"Font Awesome 6 Free";--fa-font-solid:normal 900 1em/1 "Font Awesome 6 Free"}@font-face{font-family:"Font Awesome 6 Free";font-style:normal;font-weight:900;font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}.fa-solid,.fas{font-weight:900}@font-face{font-family:"Font Awesome 5 Brands";font-display:block;font-weight:400;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:900;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"Font Awesome 5 Free";font-display:block;font-weight:400;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-solid-900.woff2) format("woff2"),url(../webfonts/fa-solid-900.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-brands-400.woff2) format("woff2"),url(../webfonts/fa-brands-400.ttf) format("truetype")}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-regular-400.woff2) format("woff2"),url(../webfonts/fa-regular-400.ttf) format("truetype");unicode-range:u+f003,u+f006,u+f014,u+f016-f017,u+f01a-f01b,u+f01d,u+f022,u+f03e,u+f044,u+f046,u+f05c-f05d,u+f06e,u+f070,u+f087-f088,u+f08a,u+f094,u+f096-f097,u+f09d,u+f0a0,u+f0a2,u+f0a4-f0a7,u+f0c5,u+f0c7,u+f0e5-f0e6,u+f0eb,u+f0f6-f0f8,u+f10c,u+f114-f115,u+f118-f11a,u+f11c-f11d,u+f133,u+f147,u+f14e,u+f150-f152,u+f185-f186,u+f18e,u+f190-f192,u+f196,u+f1c1-f1c9,u+f1d9,u+f1db,u+f1e3,u+f1ea,u+f1f7,u+f1f9,u+f20a,u+f247-f248,u+f24a,u+f24d,u+f255-f25b,u+f25d,u+f271-f274,u+f278,u+f27b,u+f28c,u+f28e,u+f29c,u+f2b5,u+f2b7,u+f2ba,u+f2bc,u+f2be,u+f2c0-f2c1,u+f2c3,u+f2d0,u+f2d2,u+f2d4,u+f2dc}@font-face{font-family:"FontAwesome";font-display:block;src:url(../webfonts/fa-v4compatibility.woff2) format("woff2"),url(../webfonts/fa-v4compatibility.ttf) format("truetype");unicode-range:u+f041,u+f047,u+f065-f066,u+f07d-f07e,u+f080,u+f08b,u+f08e,u+f090,u+f09a,u+f0ac,u+f0ae,u+f0b2,u+f0d0,u+f0d6,u+f0e4,u+f0ec,u+f10a-f10b,u+f123,u+f13e,u+f148-f149,u+f14c,u+f156,u+f15e,u+f160-f161,u+f163,u+f175-f178,u+f195,u+f1f8,u+f219,u+f27a} \ No newline at end of file diff --git a/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.ttf b/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.ttf index 911775ec..38f72c3b 100644 Binary files a/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.ttf and b/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.ttf differ diff --git a/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 b/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 index ffec3955..2f101cad 100644 Binary files a/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 and b/docs/static/bower_components/fontawesome/webfonts/fa-brands-400.woff2 differ diff --git a/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.ttf b/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.ttf index 7c7df7fa..5ebf3794 100644 Binary files a/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.ttf and b/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.ttf differ diff --git a/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 b/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 index eccc8c8f..a32eda28 100644 Binary files a/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 and b/docs/static/bower_components/fontawesome/webfonts/fa-regular-400.woff2 differ diff --git a/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.ttf b/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.ttf index 94135a20..cee3c5bb 100644 Binary files a/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.ttf and b/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.ttf differ diff --git a/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 b/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 index 7e62f26e..13fe8df5 100644 Binary files a/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 and b/docs/static/bower_components/fontawesome/webfonts/fa-solid-900.woff2 differ diff --git a/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.ttf b/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.ttf index 9cc7d017..8e945afc 100644 Binary files a/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.ttf and b/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.ttf differ diff --git a/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.woff2 b/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.woff2 index 87600727..ec917b6e 100644 Binary files a/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.woff2 and b/docs/static/bower_components/fontawesome/webfonts/fa-v4compatibility.woff2 differ diff --git a/docs/static/bower_components/jquery-mockjax/dist/jquery.mockjax.js b/docs/static/bower_components/jquery-mockjax/dist/jquery.mockjax.js index cfdb6ae0..73fbaf79 100644 --- a/docs/static/bower_components/jquery-mockjax/dist/jquery.mockjax.js +++ b/docs/static/bower_components/jquery-mockjax/dist/jquery.mockjax.js @@ -3,11 +3,10 @@ * * Version: 2.6.0 * Home: https://github.com/jakerella/jquery-mockjax - * Copyright (c) 2020 Jordan Kasper, formerly appendTo; + * Copyright (c) 2024 Jordan Kasper, formerly appendTo; * NOTE: This repository was taken over by Jordan Kasper (@jakerella) October, 2014 * - * Dual licensed under the MIT or GPL licenses. - * http://opensource.org/licenses/MIT OR http://www.gnu.org/licenses/gpl-2.0.html + * Licensed under the MIT license: http://opensource.org/licenses/MIT */ (function(root, factory) { 'use strict'; diff --git a/docs/static/bower_components/jquery/dist/jquery.js b/docs/static/bower_components/jquery/dist/jquery.js index 5f5c9cae..1a86433c 100644 --- a/docs/static/bower_components/jquery/dist/jquery.js +++ b/docs/static/bower_components/jquery/dist/jquery.js @@ -1,12 +1,12 @@ /*! - * jQuery JavaScript Library v3.7.0 + * jQuery JavaScript Library v3.7.1 * https://jquery.com/ * * Copyright OpenJS Foundation and other contributors * Released under the MIT license * https://jquery.org/license * - * Date: 2023-05-11T18:29Z + * Date: 2023-08-28T13:37Z */ ( function( global, factory ) { @@ -147,7 +147,7 @@ function toType( obj ) { -var version = "3.7.0", +var version = "3.7.1", rhtmlSuffix = /HTML$/i, @@ -411,9 +411,14 @@ jQuery.extend( { // Do not traverse comment nodes ret += jQuery.text( node ); } - } else if ( nodeType === 1 || nodeType === 9 || nodeType === 11 ) { + } + if ( nodeType === 1 || nodeType === 11 ) { return elem.textContent; - } else if ( nodeType === 3 || nodeType === 4 ) { + } + if ( nodeType === 9 ) { + return elem.documentElement.textContent; + } + if ( nodeType === 3 || nodeType === 4 ) { return elem.nodeValue; } @@ -1126,12 +1131,17 @@ function setDocument( node ) { documentElement.msMatchesSelector; // Support: IE 9 - 11+, Edge 12 - 18+ - // Accessing iframe documents after unload throws "permission denied" errors (see trac-13936) - // Support: IE 11+, Edge 17 - 18+ - // IE/Edge sometimes throw a "Permission denied" error when strict-comparing - // two documents; shallow comparisons work. - // eslint-disable-next-line eqeqeq - if ( preferredDoc != document && + // Accessing iframe documents after unload throws "permission denied" errors + // (see trac-13936). + // Limit the fix to IE & Edge Legacy; despite Edge 15+ implementing `matches`, + // all IE 9+ and Edge Legacy versions implement `msMatchesSelector` as well. + if ( documentElement.msMatchesSelector && + + // Support: IE 11+, Edge 17 - 18+ + // IE/Edge sometimes throw a "Permission denied" error when strict-comparing + // two documents; shallow comparisons work. + // eslint-disable-next-line eqeqeq + preferredDoc != document && ( subWindow = document.defaultView ) && subWindow.top !== subWindow ) { // Support: IE 9 - 11+, Edge 12 - 18+ @@ -2694,12 +2704,12 @@ jQuery.find = find; jQuery.expr[ ":" ] = jQuery.expr.pseudos; jQuery.unique = jQuery.uniqueSort; -// These have always been private, but they used to be documented -// as part of Sizzle so let's maintain them in the 3.x line -// for backwards compatibility purposes. +// These have always been private, but they used to be documented as part of +// Sizzle so let's maintain them for now for backwards compatibility purposes. find.compile = compile; find.select = select; find.setDocument = setDocument; +find.tokenize = tokenize; find.escape = jQuery.escapeSelector; find.getText = jQuery.text; @@ -5913,7 +5923,7 @@ function domManip( collection, args, callback, ignored ) { if ( hasScripts ) { doc = scripts[ scripts.length - 1 ].ownerDocument; - // Reenable scripts + // Re-enable scripts jQuery.map( scripts, restoreScript ); // Evaluate executable scripts on first document insertion @@ -6370,7 +6380,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); trChild = document.createElement( "div" ); table.style.cssText = "position:absolute;left:-11111px;border-collapse:separate"; - tr.style.cssText = "border:1px solid"; + tr.style.cssText = "box-sizing:content-box;border:1px solid"; // Support: Chrome 86+ // Height set through cssText does not get applied. @@ -6382,7 +6392,7 @@ var rboxStyle = new RegExp( cssExpand.join( "|" ), "i" ); // In our bodyBackground.html iframe, // display for all div elements is set to "inline", // which causes a problem only in Android 8 Chrome 86. - // Ensuring the div is display: block + // Ensuring the div is `display: block` // gets around this issue. trChild.style.display = "block"; @@ -10550,7 +10560,9 @@ jQuery.fn.extend( { }, hover: function( fnOver, fnOut ) { - return this.mouseenter( fnOver ).mouseleave( fnOut || fnOver ); + return this + .on( "mouseenter", fnOver ) + .on( "mouseleave", fnOut || fnOver ); } } ); diff --git a/docs/static/bower_components/jquery/dist/jquery.min.js b/docs/static/bower_components/jquery/dist/jquery.min.js index e7e29d5b..7f37b5d9 100644 --- a/docs/static/bower_components/jquery/dist/jquery.min.js +++ b/docs/static/bower_components/jquery/dist/jquery.min.js @@ -1,2 +1,2 @@ -/*! jQuery v3.7.0 | (c) OpenJS Foundation and other contributors | jquery.org/license */ -!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof window?window:this,function(ie,e){"use strict";var oe=[],r=Object.getPrototypeOf,ae=oe.slice,g=oe.flat?function(e){return oe.flat.call(e)}:function(e){return oe.concat.apply([],e)},s=oe.push,se=oe.indexOf,n={},i=n.toString,ue=n.hasOwnProperty,o=ue.toString,a=o.call(Object),le={},v=function(e){return"function"==typeof e&&"number"!=typeof e.nodeType&&"function"!=typeof e.item},y=function(e){return null!=e&&e===e.window},C=ie.document,u={type:!0,src:!0,nonce:!0,noModule:!0};function m(e,t,n){var r,i,o=(n=n||C).createElement("script");if(o.text=e,t)for(r in u)(i=t[r]||t.getAttribute&&t.getAttribute(r))&&o.setAttribute(r,i);n.head.appendChild(o).parentNode.removeChild(o)}function x(e){return null==e?e+"":"object"==typeof e||"function"==typeof e?n[i.call(e)]||"object":typeof e}var t="3.7.0",l=/HTML$/i,ce=function(e,t){return new ce.fn.init(e,t)};function c(e){var t=!!e&&"length"in e&&e.length,n=x(e);return!v(e)&&!y(e)&&("array"===n||0===t||"number"==typeof t&&0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},R=function(){V()},M=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&z(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function X(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&M(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function U(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function z(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",R),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Me(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return R(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return R(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.mouseenter(e).mouseleave(t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0+~]|"+ge+")"+ge+"*"),x=new RegExp(ge+"|>"),j=new RegExp(g),A=new RegExp("^"+t+"$"),D={ID:new RegExp("^#("+t+")"),CLASS:new RegExp("^\\.("+t+")"),TAG:new RegExp("^("+t+"|[*])"),ATTR:new RegExp("^"+p),PSEUDO:new RegExp("^"+g),CHILD:new RegExp("^:(only|first|last|nth|nth-last)-(child|of-type)(?:\\("+ge+"*(even|odd|(([+-]|)(\\d*)n|)"+ge+"*(?:([+-]|)"+ge+"*(\\d+)|))"+ge+"*\\)|)","i"),bool:new RegExp("^(?:"+f+")$","i"),needsContext:new RegExp("^"+ge+"*[>+~]|:(even|odd|eq|gt|lt|nth|first|last)(?:\\("+ge+"*((?:-\\d)?\\d*)"+ge+"*\\)|)(?=[^-]|$)","i")},N=/^(?:input|select|textarea|button)$/i,q=/^h\d$/i,L=/^(?:#([\w-]+)|(\w+)|\.([\w-]+))$/,H=/[+~]/,O=new RegExp("\\\\[\\da-fA-F]{1,6}"+ge+"?|\\\\([^\\r\\n\\f])","g"),P=function(e,t){var n="0x"+e.slice(1)-65536;return t||(n<0?String.fromCharCode(n+65536):String.fromCharCode(n>>10|55296,1023&n|56320))},M=function(){V()},R=J(function(e){return!0===e.disabled&&fe(e,"fieldset")},{dir:"parentNode",next:"legend"});try{k.apply(oe=ae.call(ye.childNodes),ye.childNodes),oe[ye.childNodes.length].nodeType}catch(e){k={apply:function(e,t){me.apply(e,ae.call(t))},call:function(e){me.apply(e,ae.call(arguments,1))}}}function I(t,e,n,r){var i,o,a,s,u,l,c,f=e&&e.ownerDocument,p=e?e.nodeType:9;if(n=n||[],"string"!=typeof t||!t||1!==p&&9!==p&&11!==p)return n;if(!r&&(V(e),e=e||T,C)){if(11!==p&&(u=L.exec(t)))if(i=u[1]){if(9===p){if(!(a=e.getElementById(i)))return n;if(a.id===i)return k.call(n,a),n}else if(f&&(a=f.getElementById(i))&&I.contains(e,a)&&a.id===i)return k.call(n,a),n}else{if(u[2])return k.apply(n,e.getElementsByTagName(t)),n;if((i=u[3])&&e.getElementsByClassName)return k.apply(n,e.getElementsByClassName(i)),n}if(!(h[t+" "]||d&&d.test(t))){if(c=t,f=e,1===p&&(x.test(t)||m.test(t))){(f=H.test(t)&&U(e.parentNode)||e)==e&&le.scope||((s=e.getAttribute("id"))?s=ce.escapeSelector(s):e.setAttribute("id",s=S)),o=(l=Y(t)).length;while(o--)l[o]=(s?"#"+s:":scope")+" "+Q(l[o]);c=l.join(",")}try{return k.apply(n,f.querySelectorAll(c)),n}catch(e){h(t,!0)}finally{s===S&&e.removeAttribute("id")}}}return re(t.replace(ve,"$1"),e,n,r)}function W(){var r=[];return function e(t,n){return r.push(t+" ")>b.cacheLength&&delete e[r.shift()],e[t+" "]=n}}function F(e){return e[S]=!0,e}function $(e){var t=T.createElement("fieldset");try{return!!e(t)}catch(e){return!1}finally{t.parentNode&&t.parentNode.removeChild(t),t=null}}function B(t){return function(e){return fe(e,"input")&&e.type===t}}function _(t){return function(e){return(fe(e,"input")||fe(e,"button"))&&e.type===t}}function z(t){return function(e){return"form"in e?e.parentNode&&!1===e.disabled?"label"in e?"label"in e.parentNode?e.parentNode.disabled===t:e.disabled===t:e.isDisabled===t||e.isDisabled!==!t&&R(e)===t:e.disabled===t:"label"in e&&e.disabled===t}}function X(a){return F(function(o){return o=+o,F(function(e,t){var n,r=a([],e.length,o),i=r.length;while(i--)e[n=r[i]]&&(e[n]=!(t[n]=e[n]))})})}function U(e){return e&&"undefined"!=typeof e.getElementsByTagName&&e}function V(e){var t,n=e?e.ownerDocument||e:ye;return n!=T&&9===n.nodeType&&n.documentElement&&(r=(T=n).documentElement,C=!ce.isXMLDoc(T),i=r.matches||r.webkitMatchesSelector||r.msMatchesSelector,r.msMatchesSelector&&ye!=T&&(t=T.defaultView)&&t.top!==t&&t.addEventListener("unload",M),le.getById=$(function(e){return r.appendChild(e).id=ce.expando,!T.getElementsByName||!T.getElementsByName(ce.expando).length}),le.disconnectedMatch=$(function(e){return i.call(e,"*")}),le.scope=$(function(){return T.querySelectorAll(":scope")}),le.cssHas=$(function(){try{return T.querySelector(":has(*,:jqfake)"),!1}catch(e){return!0}}),le.getById?(b.filter.ID=function(e){var t=e.replace(O,P);return function(e){return e.getAttribute("id")===t}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n=t.getElementById(e);return n?[n]:[]}}):(b.filter.ID=function(e){var n=e.replace(O,P);return function(e){var t="undefined"!=typeof e.getAttributeNode&&e.getAttributeNode("id");return t&&t.value===n}},b.find.ID=function(e,t){if("undefined"!=typeof t.getElementById&&C){var n,r,i,o=t.getElementById(e);if(o){if((n=o.getAttributeNode("id"))&&n.value===e)return[o];i=t.getElementsByName(e),r=0;while(o=i[r++])if((n=o.getAttributeNode("id"))&&n.value===e)return[o]}return[]}}),b.find.TAG=function(e,t){return"undefined"!=typeof t.getElementsByTagName?t.getElementsByTagName(e):t.querySelectorAll(e)},b.find.CLASS=function(e,t){if("undefined"!=typeof t.getElementsByClassName&&C)return t.getElementsByClassName(e)},d=[],$(function(e){var t;r.appendChild(e).innerHTML="",e.querySelectorAll("[selected]").length||d.push("\\["+ge+"*(?:value|"+f+")"),e.querySelectorAll("[id~="+S+"-]").length||d.push("~="),e.querySelectorAll("a#"+S+"+*").length||d.push(".#.+[+~]"),e.querySelectorAll(":checked").length||d.push(":checked"),(t=T.createElement("input")).setAttribute("type","hidden"),e.appendChild(t).setAttribute("name","D"),r.appendChild(e).disabled=!0,2!==e.querySelectorAll(":disabled").length&&d.push(":enabled",":disabled"),(t=T.createElement("input")).setAttribute("name",""),e.appendChild(t),e.querySelectorAll("[name='']").length||d.push("\\["+ge+"*name"+ge+"*="+ge+"*(?:''|\"\")")}),le.cssHas||d.push(":has"),d=d.length&&new RegExp(d.join("|")),l=function(e,t){if(e===t)return a=!0,0;var n=!e.compareDocumentPosition-!t.compareDocumentPosition;return n||(1&(n=(e.ownerDocument||e)==(t.ownerDocument||t)?e.compareDocumentPosition(t):1)||!le.sortDetached&&t.compareDocumentPosition(e)===n?e===T||e.ownerDocument==ye&&I.contains(ye,e)?-1:t===T||t.ownerDocument==ye&&I.contains(ye,t)?1:o?se.call(o,e)-se.call(o,t):0:4&n?-1:1)}),T}for(e in I.matches=function(e,t){return I(e,null,null,t)},I.matchesSelector=function(e,t){if(V(e),C&&!h[t+" "]&&(!d||!d.test(t)))try{var n=i.call(e,t);if(n||le.disconnectedMatch||e.document&&11!==e.document.nodeType)return n}catch(e){h(t,!0)}return 0":{dir:"parentNode",first:!0}," ":{dir:"parentNode"},"+":{dir:"previousSibling",first:!0},"~":{dir:"previousSibling"}},preFilter:{ATTR:function(e){return e[1]=e[1].replace(O,P),e[3]=(e[3]||e[4]||e[5]||"").replace(O,P),"~="===e[2]&&(e[3]=" "+e[3]+" "),e.slice(0,4)},CHILD:function(e){return e[1]=e[1].toLowerCase(),"nth"===e[1].slice(0,3)?(e[3]||I.error(e[0]),e[4]=+(e[4]?e[5]+(e[6]||1):2*("even"===e[3]||"odd"===e[3])),e[5]=+(e[7]+e[8]||"odd"===e[3])):e[3]&&I.error(e[0]),e},PSEUDO:function(e){var t,n=!e[6]&&e[2];return D.CHILD.test(e[0])?null:(e[3]?e[2]=e[4]||e[5]||"":n&&j.test(n)&&(t=Y(n,!0))&&(t=n.indexOf(")",n.length-t)-n.length)&&(e[0]=e[0].slice(0,t),e[2]=n.slice(0,t)),e.slice(0,3))}},filter:{TAG:function(e){var t=e.replace(O,P).toLowerCase();return"*"===e?function(){return!0}:function(e){return fe(e,t)}},CLASS:function(e){var t=s[e+" "];return t||(t=new RegExp("(^|"+ge+")"+e+"("+ge+"|$)"))&&s(e,function(e){return t.test("string"==typeof e.className&&e.className||"undefined"!=typeof e.getAttribute&&e.getAttribute("class")||"")})},ATTR:function(n,r,i){return function(e){var t=I.attr(e,n);return null==t?"!="===r:!r||(t+="","="===r?t===i:"!="===r?t!==i:"^="===r?i&&0===t.indexOf(i):"*="===r?i&&-1:\x20\t\r\n\f]*)[\x20\t\r\n\f]*\/?>(?:<\/\1>|)$/i;function T(e,n,r){return v(n)?ce.grep(e,function(e,t){return!!n.call(e,t,e)!==r}):n.nodeType?ce.grep(e,function(e){return e===n!==r}):"string"!=typeof n?ce.grep(e,function(e){return-1)[^>]*|#([\w-]+))$/;(ce.fn.init=function(e,t,n){var r,i;if(!e)return this;if(n=n||k,"string"==typeof e){if(!(r="<"===e[0]&&">"===e[e.length-1]&&3<=e.length?[null,e,null]:S.exec(e))||!r[1]&&t)return!t||t.jquery?(t||n).find(e):this.constructor(t).find(e);if(r[1]){if(t=t instanceof ce?t[0]:t,ce.merge(this,ce.parseHTML(r[1],t&&t.nodeType?t.ownerDocument||t:C,!0)),w.test(r[1])&&ce.isPlainObject(t))for(r in t)v(this[r])?this[r](t[r]):this.attr(r,t[r]);return this}return(i=C.getElementById(r[2]))&&(this[0]=i,this.length=1),this}return e.nodeType?(this[0]=e,this.length=1,this):v(e)?void 0!==n.ready?n.ready(e):e(ce):ce.makeArray(e,this)}).prototype=ce.fn,k=ce(C);var E=/^(?:parents|prev(?:Until|All))/,j={children:!0,contents:!0,next:!0,prev:!0};function A(e,t){while((e=e[t])&&1!==e.nodeType);return e}ce.fn.extend({has:function(e){var t=ce(e,this),n=t.length;return this.filter(function(){for(var e=0;e\x20\t\r\n\f]*)/i,Ce=/^$|^module$|\/(?:java|ecma)script/i;xe=C.createDocumentFragment().appendChild(C.createElement("div")),(be=C.createElement("input")).setAttribute("type","radio"),be.setAttribute("checked","checked"),be.setAttribute("name","t"),xe.appendChild(be),le.checkClone=xe.cloneNode(!0).cloneNode(!0).lastChild.checked,xe.innerHTML="",le.noCloneChecked=!!xe.cloneNode(!0).lastChild.defaultValue,xe.innerHTML="",le.option=!!xe.lastChild;var ke={thead:[1,"","
"],col:[2,"","
"],tr:[2,"","
"],td:[3,"","
"],_default:[0,"",""]};function Se(e,t){var n;return n="undefined"!=typeof e.getElementsByTagName?e.getElementsByTagName(t||"*"):"undefined"!=typeof e.querySelectorAll?e.querySelectorAll(t||"*"):[],void 0===t||t&&fe(e,t)?ce.merge([e],n):n}function Ee(e,t){for(var n=0,r=e.length;n",""]);var je=/<|&#?\w+;/;function Ae(e,t,n,r,i){for(var o,a,s,u,l,c,f=t.createDocumentFragment(),p=[],d=0,h=e.length;d\s*$/g;function Re(e,t){return fe(e,"table")&&fe(11!==t.nodeType?t:t.firstChild,"tr")&&ce(e).children("tbody")[0]||e}function Ie(e){return e.type=(null!==e.getAttribute("type"))+"/"+e.type,e}function We(e){return"true/"===(e.type||"").slice(0,5)?e.type=e.type.slice(5):e.removeAttribute("type"),e}function Fe(e,t){var n,r,i,o,a,s;if(1===t.nodeType){if(_.hasData(e)&&(s=_.get(e).events))for(i in _.remove(t,"handle events"),s)for(n=0,r=s[i].length;n").attr(n.scriptAttrs||{}).prop({charset:n.scriptCharset,src:n.url}).on("load error",i=function(e){r.remove(),i=null,e&&t("error"===e.type?404:200,e.type)}),C.head.appendChild(r[0])},abort:function(){i&&i()}}});var Jt,Kt=[],Zt=/(=)\?(?=&|$)|\?\?/;ce.ajaxSetup({jsonp:"callback",jsonpCallback:function(){var e=Kt.pop()||ce.expando+"_"+jt.guid++;return this[e]=!0,e}}),ce.ajaxPrefilter("json jsonp",function(e,t,n){var r,i,o,a=!1!==e.jsonp&&(Zt.test(e.url)?"url":"string"==typeof e.data&&0===(e.contentType||"").indexOf("application/x-www-form-urlencoded")&&Zt.test(e.data)&&"data");if(a||"jsonp"===e.dataTypes[0])return r=e.jsonpCallback=v(e.jsonpCallback)?e.jsonpCallback():e.jsonpCallback,a?e[a]=e[a].replace(Zt,"$1"+r):!1!==e.jsonp&&(e.url+=(At.test(e.url)?"&":"?")+e.jsonp+"="+r),e.converters["script json"]=function(){return o||ce.error(r+" was not called"),o[0]},e.dataTypes[0]="json",i=ie[r],ie[r]=function(){o=arguments},n.always(function(){void 0===i?ce(ie).removeProp(r):ie[r]=i,e[r]&&(e.jsonpCallback=t.jsonpCallback,Kt.push(r)),o&&v(i)&&i(o[0]),o=i=void 0}),"script"}),le.createHTMLDocument=((Jt=C.implementation.createHTMLDocument("").body).innerHTML="
",2===Jt.childNodes.length),ce.parseHTML=function(e,t,n){return"string"!=typeof e?[]:("boolean"==typeof t&&(n=t,t=!1),t||(le.createHTMLDocument?((r=(t=C.implementation.createHTMLDocument("")).createElement("base")).href=C.location.href,t.head.appendChild(r)):t=C),o=!n&&[],(i=w.exec(e))?[t.createElement(i[1])]:(i=Ae([e],t,o),o&&o.length&&ce(o).remove(),ce.merge([],i.childNodes)));var r,i,o},ce.fn.load=function(e,t,n){var r,i,o,a=this,s=e.indexOf(" ");return-1").append(ce.parseHTML(e)).find(r):e)}).always(n&&function(e,t){a.each(function(){n.apply(this,o||[e.responseText,t,e])})}),this},ce.expr.pseudos.animated=function(t){return ce.grep(ce.timers,function(e){return t===e.elem}).length},ce.offset={setOffset:function(e,t,n){var r,i,o,a,s,u,l=ce.css(e,"position"),c=ce(e),f={};"static"===l&&(e.style.position="relative"),s=c.offset(),o=ce.css(e,"top"),u=ce.css(e,"left"),("absolute"===l||"fixed"===l)&&-1<(o+u).indexOf("auto")?(a=(r=c.position()).top,i=r.left):(a=parseFloat(o)||0,i=parseFloat(u)||0),v(t)&&(t=t.call(e,n,ce.extend({},s))),null!=t.top&&(f.top=t.top-s.top+a),null!=t.left&&(f.left=t.left-s.left+i),"using"in t?t.using.call(e,f):c.css(f)}},ce.fn.extend({offset:function(t){if(arguments.length)return void 0===t?this:this.each(function(e){ce.offset.setOffset(this,t,e)});var e,n,r=this[0];return r?r.getClientRects().length?(e=r.getBoundingClientRect(),n=r.ownerDocument.defaultView,{top:e.top+n.pageYOffset,left:e.left+n.pageXOffset}):{top:0,left:0}:void 0},position:function(){if(this[0]){var e,t,n,r=this[0],i={top:0,left:0};if("fixed"===ce.css(r,"position"))t=r.getBoundingClientRect();else{t=this.offset(),n=r.ownerDocument,e=r.offsetParent||n.documentElement;while(e&&(e===n.body||e===n.documentElement)&&"static"===ce.css(e,"position"))e=e.parentNode;e&&e!==r&&1===e.nodeType&&((i=ce(e).offset()).top+=ce.css(e,"borderTopWidth",!0),i.left+=ce.css(e,"borderLeftWidth",!0))}return{top:t.top-i.top-ce.css(r,"marginTop",!0),left:t.left-i.left-ce.css(r,"marginLeft",!0)}}},offsetParent:function(){return this.map(function(){var e=this.offsetParent;while(e&&"static"===ce.css(e,"position"))e=e.offsetParent;return e||J})}}),ce.each({scrollLeft:"pageXOffset",scrollTop:"pageYOffset"},function(t,i){var o="pageYOffset"===i;ce.fn[t]=function(e){return M(this,function(e,t,n){var r;if(y(e)?r=e:9===e.nodeType&&(r=e.defaultView),void 0===n)return r?r[i]:e[t];r?r.scrollTo(o?r.pageXOffset:n,o?n:r.pageYOffset):e[t]=n},t,e,arguments.length)}}),ce.each(["top","left"],function(e,n){ce.cssHooks[n]=Ye(le.pixelPosition,function(e,t){if(t)return t=Ge(e,n),_e.test(t)?ce(e).position()[n]+"px":t})}),ce.each({Height:"height",Width:"width"},function(a,s){ce.each({padding:"inner"+a,content:s,"":"outer"+a},function(r,o){ce.fn[o]=function(e,t){var n=arguments.length&&(r||"boolean"!=typeof e),i=r||(!0===e||!0===t?"margin":"border");return M(this,function(e,t,n){var r;return y(e)?0===o.indexOf("outer")?e["inner"+a]:e.document.documentElement["client"+a]:9===e.nodeType?(r=e.documentElement,Math.max(e.body["scroll"+a],r["scroll"+a],e.body["offset"+a],r["offset"+a],r["client"+a])):void 0===n?ce.css(e,t,i):ce.style(e,t,n,i)},s,n?e:void 0,n)}})}),ce.each(["ajaxStart","ajaxStop","ajaxComplete","ajaxError","ajaxSuccess","ajaxSend"],function(e,t){ce.fn[t]=function(e){return this.on(t,e)}}),ce.fn.extend({bind:function(e,t,n){return this.on(e,null,t,n)},unbind:function(e,t){return this.off(e,null,t)},delegate:function(e,t,n,r){return this.on(t,e,n,r)},undelegate:function(e,t,n){return 1===arguments.length?this.off(e,"**"):this.off(t,e||"**",n)},hover:function(e,t){return this.on("mouseenter",e).on("mouseleave",t||e)}}),ce.each("blur focus focusin focusout resize scroll click dblclick mousedown mouseup mousemove mouseover mouseout mouseenter mouseleave change select submit keydown keypress keyup contextmenu".split(" "),function(e,n){ce.fn[n]=function(e,t){return 0=6.0.0'} - '@babel/cli@7.25.7': - resolution: {integrity: sha512-vQw4QjrqjLSuL0Tt3gfVXbxEHOfsCcHN8tKyTclpSMYLq3Bp0BTzWYZfMKBs3PQ+to8q3BnumBIAsMdOqDJ6nw==} + '@babel/cli@7.25.9': + resolution: {integrity: sha512-I+02IfrTiSanpxJBlZQYb18qCxB6c2Ih371cVpfgIrPQrjAYkf45XxomTJOG8JBWX5GY35/+TmhCMdJ4ZPkL8Q==} engines: {node: '>=6.9.0'} hasBin: true peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/code-frame@7.25.7': - resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} + '@babel/code-frame@7.26.2': + resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.25.7': - resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} + '@babel/compat-data@7.26.2': + resolution: {integrity: sha512-Z0WgzSEa+aUcdiJuCIqgujCshpMWgUpgOxXotrYPSA53hA3qopNaqcJpyr0hVb1FeWdnqFA35/fUtXgBK8srQg==} engines: {node: '>=6.9.0'} - '@babel/core@7.25.7': - resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} + '@babel/core@7.26.0': + resolution: {integrity: sha512-i1SLeK+DzNnQ3LL/CswPCa/E5u4lh1k6IAEphON8F+cXt0t9euTshDru0q7/IqMa1PMPz5RnHuHscF8/ZJsStg==} engines: {node: '>=6.9.0'} - '@babel/generator@7.25.7': - resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} + '@babel/generator@7.26.2': + resolution: {integrity: sha512-zevQbhbau95nkoxSq3f/DC/SC+EEOUZd3DYqfSkMhY2/wfSeaHV1Ew4vk8e+x8lja31IbyuUa2uQ3JONqKbysw==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.7': - resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} + '@babel/helper-annotate-as-pure@7.25.9': + resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': - resolution: {integrity: sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==} + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': + resolution: {integrity: sha512-C47lC7LIDCnz0h4vai/tpNOI95tCd5ZT3iBt/DBH5lXKHZsyNQv18yf1wIIg2ntiQNgmAvA+DgZ82iW8Qdym8g==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.25.7': - resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} + '@babel/helper-compilation-targets@7.25.9': + resolution: {integrity: sha512-j9Db8Suy6yV/VHa4qzrj9yZfZxhLWQdVnRlXxmKLYlhWUVB1sB2G5sxuWYXk/whHD9iW76PmNzxZ4UCnTQTVEQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.25.7': - resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} + '@babel/helper-create-class-features-plugin@7.25.9': + resolution: {integrity: sha512-UTZQMvt0d/rSz6KI+qdu7GQze5TIajwTS++GUozlw8VBJDEOAqSXwm1WvmYEZwqdqSGQshRocPDqrt4HBZB3fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.25.7': - resolution: {integrity: sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==} + '@babel/helper-create-regexp-features-plugin@7.25.9': + resolution: {integrity: sha512-ORPNZ3h6ZRkOyAa/SaHU+XsLZr0UQzRwuDQ0cczIA17nAzZ+85G5cVkOJIj7QavLZGSe8QXUmNFxSZzjcZF9bw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -212,103 +209,99 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-member-expression-to-functions@7.25.7': - resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} + '@babel/helper-member-expression-to-functions@7.25.9': + resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.7': - resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} + '@babel/helper-module-imports@7.25.9': + resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.25.7': - resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} + '@babel/helper-module-transforms@7.26.0': + resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.25.7': - resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} + '@babel/helper-optimise-call-expression@7.25.9': + resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.25.7': - resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} + '@babel/helper-plugin-utils@7.25.9': + resolution: {integrity: sha512-kSMlyUVdWe25rEsRGviIgOWnoT/nfABVWlqt9N19/dIPWViAOW2s9wznP5tURbs/IDuNk4gPy3YdYRgH3uxhBw==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.25.7': - resolution: {integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==} + '@babel/helper-remap-async-to-generator@7.25.9': + resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.25.7': - resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} + '@babel/helper-replace-supers@7.25.9': + resolution: {integrity: sha512-IiDqTOTBQy0sWyeXyGSC5TBJpGFXBkRynjBeXsvbhQFKj2viwJC76Epz35YLU1fpe/Am6Vppb7W7zM4fPQzLsQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.25.7': - resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} + '@babel/helper-simple-access@7.25.9': + resolution: {integrity: sha512-c6WHXuiaRsJTyHYLJV75t9IqsmTbItYfdj99PnzYGQZkYKvan5/2jKJ7gu31J3/BJ/A18grImSPModuyG/Eo0Q==} engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.25.7': - resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.7': - resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} + '@babel/helper-string-parser@7.25.9': + resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.7': - resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} + '@babel/helper-validator-identifier@7.25.9': + resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.7': - resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} + '@babel/helper-validator-option@7.25.9': + resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.25.7': - resolution: {integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==} + '@babel/helper-wrap-function@7.25.9': + resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.25.7': - resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} + '@babel/helpers@7.26.0': + resolution: {integrity: sha512-tbhNuIxNcVb21pInl3ZSjksLCvgdZy9KwJ8brv993QtIVKJBBkYXz4q4ZbAv31GdnC+R90np23L5FbEBlthAEw==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.25.7': - resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.25.7': - resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} + '@babel/parser@7.26.2': + resolution: {integrity: sha512-DWMCZH9WA4Maitz2q21SRKHo9QXZxkDsbNZoVD62gusNtNBBqDg9i7uOhASfTfIGNzW+O+r7+jAlM8dwphcJKQ==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7': - resolution: {integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': + resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7': - resolution: {integrity: sha512-GDDWeVLNxRIkQTnJn2pDOM1pkCgYdSqPeT1a9vh9yIqu2uzzgw1zcqEb+IJOhy+dTBMlNdThrDIksr2o09qrrQ==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': + resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7': - resolution: {integrity: sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': + resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7': - resolution: {integrity: sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': + resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7': - resolution: {integrity: sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': + resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -340,24 +333,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-dynamic-import@7.8.3': - resolution: {integrity: sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-export-namespace-from@7.8.3': - resolution: {integrity: sha512-MXf5laXo6c1IbEbegDmzGPwGNTsHZmEy6QGznu5Sh2UCWvueywb2ee+CCE4zQiZstxU9BMoQO9i6zUFSY0Kj0Q==} - peerDependencies: - '@babel/core': ^7.0.0-0 - - '@babel/plugin-syntax-import-assertions@7.25.7': - resolution: {integrity: sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==} + '@babel/plugin-syntax-import-assertions@7.26.0': + resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.25.7': - resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} + '@babel/plugin-syntax-import-attributes@7.26.0': + resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -372,8 +355,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.25.7': - resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} + '@babel/plugin-syntax-jsx@7.25.9': + resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -420,8 +403,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.25.7': - resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} + '@babel/plugin-syntax-typescript@7.25.9': + resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -432,308 +415,314 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.25.7': - resolution: {integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==} + '@babel/plugin-transform-arrow-functions@7.25.9': + resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.25.7': - resolution: {integrity: sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==} + '@babel/plugin-transform-async-generator-functions@7.25.9': + resolution: {integrity: sha512-RXV6QAzTBbhDMO9fWwOmwwTuYaiPbggWQ9INdZqAYeSHyG7FzQ+nOZaUUjNwKv9pV3aE4WFqFm1Hnbci5tBCAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.25.7': - resolution: {integrity: sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==} + '@babel/plugin-transform-async-to-generator@7.25.9': + resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.25.7': - resolution: {integrity: sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==} + '@babel/plugin-transform-block-scoped-functions@7.25.9': + resolution: {integrity: sha512-toHc9fzab0ZfenFpsyYinOX0J/5dgJVA2fm64xPewu7CoYHWEivIWKxkK2rMi4r3yQqLnVmheMXRdG+k239CgA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.25.7': - resolution: {integrity: sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==} + '@babel/plugin-transform-block-scoping@7.25.9': + resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.25.7': - resolution: {integrity: sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==} + '@babel/plugin-transform-class-properties@7.25.9': + resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.25.7': - resolution: {integrity: sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==} + '@babel/plugin-transform-class-static-block@7.26.0': + resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.25.7': - resolution: {integrity: sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==} + '@babel/plugin-transform-classes@7.25.9': + resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.25.7': - resolution: {integrity: sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==} + '@babel/plugin-transform-computed-properties@7.25.9': + resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.25.7': - resolution: {integrity: sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==} + '@babel/plugin-transform-destructuring@7.25.9': + resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.25.7': - resolution: {integrity: sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==} + '@babel/plugin-transform-dotall-regex@7.25.9': + resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.25.7': - resolution: {integrity: sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==} + '@babel/plugin-transform-duplicate-keys@7.25.9': + resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7': - resolution: {integrity: sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-dynamic-import@7.25.7': - resolution: {integrity: sha512-UvcLuual4h7/GfylKm2IAA3aph9rwvAM2XBA0uPKU3lca+Maai4jBjjEVUS568ld6kJcgbouuumCBhMd/Yz17w==} + '@babel/plugin-transform-dynamic-import@7.25.9': + resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.25.7': - resolution: {integrity: sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==} + '@babel/plugin-transform-exponentiation-operator@7.25.9': + resolution: {integrity: sha512-KRhdhlVk2nObA5AYa7QMgTMTVJdfHprfpAk4DjZVtllqRg9qarilstTKEhpVjyt+Npi8ThRyiV8176Am3CodPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.25.7': - resolution: {integrity: sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==} + '@babel/plugin-transform-export-namespace-from@7.25.9': + resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.25.7': - resolution: {integrity: sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==} + '@babel/plugin-transform-for-of@7.25.9': + resolution: {integrity: sha512-LqHxduHoaGELJl2uhImHwRQudhCM50pT46rIBNvtT/Oql3nqiS3wOwP+5ten7NpYSXrrVLgtZU3DZmPtWZo16A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.25.7': - resolution: {integrity: sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==} + '@babel/plugin-transform-function-name@7.25.9': + resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.25.7': - resolution: {integrity: sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==} + '@babel/plugin-transform-json-strings@7.25.9': + resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.25.7': - resolution: {integrity: sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==} + '@babel/plugin-transform-literals@7.25.9': + resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.25.7': - resolution: {integrity: sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==} + '@babel/plugin-transform-logical-assignment-operators@7.25.9': + resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.25.7': - resolution: {integrity: sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==} + '@babel/plugin-transform-member-expression-literals@7.25.9': + resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.25.7': - resolution: {integrity: sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==} + '@babel/plugin-transform-modules-amd@7.25.9': + resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.25.7': - resolution: {integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==} + '@babel/plugin-transform-modules-commonjs@7.25.9': + resolution: {integrity: sha512-dwh2Ol1jWwL2MgkCzUSOvfmKElqQcuswAZypBSUsScMXvgdT8Ekq5YA6TtqpTVWH+4903NmboMuH1o9i8Rxlyg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.25.7': - resolution: {integrity: sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==} + '@babel/plugin-transform-modules-systemjs@7.25.9': + resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.25.7': - resolution: {integrity: sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==} + '@babel/plugin-transform-modules-umd@7.25.9': + resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.25.7': - resolution: {integrity: sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==} + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': + resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.25.7': - resolution: {integrity: sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==} + '@babel/plugin-transform-new-target@7.25.9': + resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.7': - resolution: {integrity: sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==} + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9': + resolution: {integrity: sha512-ENfftpLZw5EItALAD4WsY/KUWvhUlZndm5GC7G3evUsVeSJB6p0pBeLQUnRnBCBx7zV0RKQjR9kCuwrsIrjWog==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.25.7': - resolution: {integrity: sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==} + '@babel/plugin-transform-numeric-separator@7.25.9': + resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.25.7': - resolution: {integrity: sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==} + '@babel/plugin-transform-object-rest-spread@7.25.9': + resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.25.7': - resolution: {integrity: sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==} + '@babel/plugin-transform-object-super@7.25.9': + resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.25.7': - resolution: {integrity: sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==} + '@babel/plugin-transform-optional-catch-binding@7.25.9': + resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.25.7': - resolution: {integrity: sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==} + '@babel/plugin-transform-optional-chaining@7.25.9': + resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.25.7': - resolution: {integrity: sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==} + '@babel/plugin-transform-parameters@7.25.9': + resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.25.7': - resolution: {integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==} + '@babel/plugin-transform-private-methods@7.25.9': + resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.25.7': - resolution: {integrity: sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==} + '@babel/plugin-transform-private-property-in-object@7.25.9': + resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.25.7': - resolution: {integrity: sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==} + '@babel/plugin-transform-property-literals@7.25.9': + resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.25.7': - resolution: {integrity: sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==} + '@babel/plugin-transform-regenerator@7.25.9': + resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.25.7': - resolution: {integrity: sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==} + '@babel/plugin-transform-regexp-modifiers@7.26.0': + resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + engines: {node: '>=6.9.0'} + peerDependencies: + '@babel/core': ^7.0.0 + + '@babel/plugin-transform-reserved-words@7.25.9': + resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.25.7': - resolution: {integrity: sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==} + '@babel/plugin-transform-shorthand-properties@7.25.9': + resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.25.7': - resolution: {integrity: sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==} + '@babel/plugin-transform-spread@7.25.9': + resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.25.7': - resolution: {integrity: sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==} + '@babel/plugin-transform-sticky-regex@7.25.9': + resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.25.7': - resolution: {integrity: sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==} + '@babel/plugin-transform-template-literals@7.25.9': + resolution: {integrity: sha512-o97AE4syN71M/lxrCtQByzphAdlYluKPDBzDVzMmfCobUjjhAryZV0AIpRPrxN0eAkxXO6ZLEScmt+PNhj2OTw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.25.7': - resolution: {integrity: sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==} + '@babel/plugin-transform-typeof-symbol@7.25.9': + resolution: {integrity: sha512-v61XqUMiueJROUv66BVIOi0Fv/CUuZuZMl5NkRoCVxLAnMexZ0A3kMe7vvZ0nulxMuMp0Mk6S5hNh48yki08ZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.25.7': - resolution: {integrity: sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==} + '@babel/plugin-transform-typescript@7.25.9': + resolution: {integrity: sha512-7PbZQZP50tzv2KGGnhh82GSyMB01yKY9scIjf1a+GfZCtInOWqUH5+1EBU4t9fyR5Oykkkc9vFTs4OHrhHXljQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.25.7': - resolution: {integrity: sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==} + '@babel/plugin-transform-unicode-escapes@7.25.9': + resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.25.7': - resolution: {integrity: sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==} + '@babel/plugin-transform-unicode-property-regex@7.25.9': + resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.25.7': - resolution: {integrity: sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==} + '@babel/plugin-transform-unicode-regex@7.25.9': + resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.25.7': - resolution: {integrity: sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==} + '@babel/plugin-transform-unicode-sets-regex@7.25.9': + resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.25.7': - resolution: {integrity: sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==} + '@babel/preset-env@7.26.0': + resolution: {integrity: sha512-H84Fxq0CQJNdPFT2DrfnylZ3cf5K43rGfWK4LJGPpjKHiZlk0/RzwEus3PDDZZg+/Er7lCA03MVacueUuXdzfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -743,33 +732,33 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-typescript@7.25.7': - resolution: {integrity: sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==} + '@babel/preset-typescript@7.26.0': + resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.25.7': - resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} + '@babel/runtime@7.26.0': + resolution: {integrity: sha512-FDSOghenHTiToteC/QRlv2q3DhPZ/oOXTBoirfWNx1Cx3TMVcGWQtMMmQcSvb/JjpNeGzx8Pq/b4fKEJuWm1sw==} engines: {node: '>=6.9.0'} - '@babel/template@7.25.7': - resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} + '@babel/template@7.25.9': + resolution: {integrity: sha512-9DGttpmPvIxBb/2uwpVo3dqJ+O6RooAFOS+lB+xDqoE2PVCE8nfoHMdZLpfCQRLwvohzXISPZcgxt80xLfsuwg==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.25.7': - resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} + '@babel/traverse@7.25.9': + resolution: {integrity: sha512-ZCuvfwOwlz/bawvAuvcj8rrithP2/N55Tzz342AkTvq4qaWbGfmCk/tKhNaV2cthijKrPAA8SRJV5WWe7IBMJw==} engines: {node: '>=6.9.0'} - '@babel/types@7.25.7': - resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} + '@babel/types@7.26.0': + resolution: {integrity: sha512-Z/yiTPj+lDVnF7lWeKCIJzaIkI0vYO87dMpZ4bg4TDrFe4XXLFWL1TbXU27gBP3QccxV9mZICCrnjnYlJjXHOA==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==} - '@bundled-es-modules/cookie@2.0.0': - resolution: {integrity: sha512-Or6YHg/kamKHpxULAdSqhGqnWFneIXu1NKvvfBBzKGwpVsYuFIQ5aBPHDnnoR3ghW1nvSkALd+EF9iMtY7Vjxw==} + '@bundled-es-modules/cookie@2.0.1': + resolution: {integrity: sha512-8o+5fRPLNbjbdGRRmJj3h6Hh1AQJf2dk3qQ/5ZFb+PXkRNiSoMGGUKlsgLfrxneb72axVJyIYji64E2+nNfYyw==} '@bundled-es-modules/statuses@1.0.1': resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} @@ -777,50 +766,46 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} - '@eslint-community/eslint-utils@4.4.0': - resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + '@eslint-community/eslint-utils@4.4.1': + resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 - '@eslint-community/regexpp@4.11.1': - resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/config-array@0.18.0': resolution: {integrity: sha512-fTxvnS1sRMu3+JjXwJG0j/i4RT9u4qJ+lqS/yCGap4lH4zZGzQ7tu+xZqQmcMZq5OBZDL4QRxQzRjkWcGt8IVw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.6.0': - resolution: {integrity: sha512-8I2Q8ykA4J0x0o7cg67FPVnehcqWTBehu/lmY+bolPFHGjh49YzGBMXTvpqVgEbBdvNCSxj6iFgiIyHzf03lzg==} + '@eslint/core@0.7.0': + resolution: {integrity: sha512-xp5Jirz5DyPYlPiKat8jaq0EmYvDXKKpzTbxXMpT9eqlRJkRKIz9AGMdlvYjih+im+QlhWrpvVjl8IPC/lHlUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/eslintrc@3.1.0': resolution: {integrity: sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.12.0': - resolution: {integrity: sha512-eohesHH8WFRUprDNyEREgqP6beG6htMeUYeCpkEgBCieCMme5r9zFWjzAJp//9S+Kub4rqE+jXe9Cp1a7IYIIA==} + '@eslint/js@9.14.0': + resolution: {integrity: sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.4': resolution: {integrity: sha512-BsWiH1yFGjXXS2yvrf5LyuoSIIbPrGUWob917o+BTKuZ7qJdxX8aJLRxs1fS9n6r7vESrq1OUqb68dANcFXuQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.0': - resolution: {integrity: sha512-vH9PiIMMwvhCx31Af3HiGzsVNULDbyVkHXwlemn/B0TFj/00ho3y55efXrUZTfQipxoHC5u4xq6zblww1zm1Ig==} + '@eslint/plugin-kit@0.2.2': + resolution: {integrity: sha512-CXtq5nR4Su+2I47WPOlWud98Y5Lv8Kyxp2ukhgFx/eW6Blm18VXJO5WuQylPugRo8nbluoi6GvvxBLqHcvqUUw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@fastify/busboy@2.1.1': - resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} - engines: {node: '>=14'} - - '@humanfs/core@0.19.0': - resolution: {integrity: sha512-2cbWIHbZVEweE853g8jymffCA+NCMiuqeECeBBLm8dg2oFdjuGJhgN4UAbI+6v0CKbbhvtXA4qV8YR5Ji86nmw==} + '@humanfs/core@0.19.1': + resolution: {integrity: sha512-5DyQ4+1JEUzejeK1JGICcideyfUbGixgS9jNgex5nqkW+cY7WZhxBigmieN5Qnw9ZosSNVC9KQKyb+GUaGyKUA==} engines: {node: '>=18.18.0'} - '@humanfs/node@0.16.5': - resolution: {integrity: sha512-KSPA4umqSG4LHYRodq31VDwKAvaTF4xmVlzM8Aeh4PlU1JQ3IG0wiA8C25d3RQ9nJyM3mBHyI53K06VVL/oFFg==} + '@humanfs/node@0.16.6': + resolution: {integrity: sha512-YuI2ZHQL78Q5HbhDiBA1X4LmYdXCKCMQIfw0pw7piHJwyREFebJUvrQN4cMssyES6x+vfUbx1CIpaQUKYdQZOw==} engines: {node: '>=18.18.0'} '@humanwhocodes/module-importer@1.0.1': @@ -831,25 +816,29 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@inquirer/confirm@3.2.0': - resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} - engines: {node: '>=18'} + '@humanwhocodes/retry@0.4.1': + resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + engines: {node: '>=18.18'} - '@inquirer/core@9.2.1': - resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} + '@inquirer/confirm@5.0.1': + resolution: {integrity: sha512-6ycMm7k7NUApiMGfVc32yIPp28iPKxhGRMqoNDiUjq2RyTAkbs5Fx0TdzBqhabcKvniDdAAvHCmsRjnNfTsogw==} engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' - '@inquirer/figures@1.0.6': - resolution: {integrity: sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ==} + '@inquirer/core@10.0.1': + resolution: {integrity: sha512-KKTgjViBQUi3AAssqjUFMnMO3CM3qwCHvePV9EW+zTKGKafFGFF01sc1yOIYjLJ7QU52G/FbzKc+c01WLzXmVQ==} engines: {node: '>=18'} - '@inquirer/type@1.5.5': - resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} + '@inquirer/figures@1.0.7': + resolution: {integrity: sha512-m+Trk77mp54Zma6xLkLuY+mvanPxlE4A7yNKs2HBiyZ4UkVs28Mv5c/pgWrHeInx+USHeX/WEPzjrWrcJiQgjw==} engines: {node: '>=18'} - '@inquirer/type@2.0.0': - resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} + '@inquirer/type@3.0.0': + resolution: {integrity: sha512-YYykfbw/lefC7yKj7nanzQXILM7r3suIvyFlCcMskc99axmsSewXWkAfXKwMbgxL76iAFVmRwmYdwNZNc8gjog==} engines: {node: '>=18'} + peerDependencies: + '@types/node': '>=18' '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} @@ -946,8 +935,8 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@mswjs/interceptors@0.35.9': - resolution: {integrity: sha512-SSnyl/4ni/2ViHKkiZb8eajA/eN1DNFaHjhGiLUdZvDz6PKF4COSf/17xqSz64nOo2Ia29SA6B2KNCsyCbVmaQ==} + '@mswjs/interceptors@0.36.10': + resolution: {integrity: sha512-GXrJgakgJW3DWKueebkvtYgGKkxA7s0u5B0P5syJM5rvQUnrpLPigvci8Hukl7yEM+sU06l+er2Fgvx/gmiRgg==} engines: {node: '>=18'} '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': @@ -974,8 +963,8 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@playwright/test@1.47.2': - resolution: {integrity: sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==} + '@playwright/test@1.48.2': + resolution: {integrity: sha512-54w1xCWfXuax7dz4W2M9uw0gDyh+ti/0K/MxcCUxChFh37kkdxPdfZDw5QBbuPUJHr1CiHJ1hXgSs+GgeQc5Zw==} engines: {node: '>=18'} hasBin: true @@ -1010,8 +999,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.2': - resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} + '@rollup/pluginutils@5.1.3': + resolution: {integrity: sha512-Pnsb6f32CD2W3uCaLZIzDmeFyQ2b8UWMFI7xtwUezpcGBDVDW6y9XgAWIlARiGAo6eNF5FK5aQTr0LFyNyqq5A==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1019,83 +1008,93 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.24.0': - resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} + '@rollup/rollup-android-arm-eabi@4.24.4': + resolution: {integrity: sha512-jfUJrFct/hTA0XDM5p/htWKoNNTbDLY0KRwEt6pyOA6k2fmk0WVwl65PdUdJZgzGEHWx+49LilkcSaumQRyNQw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.24.0': - resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} + '@rollup/rollup-android-arm64@4.24.4': + resolution: {integrity: sha512-j4nrEO6nHU1nZUuCfRKoCcvh7PIywQPUCBa2UsootTHvTHIoIu2BzueInGJhhvQO/2FTRdNYpf63xsgEqH9IhA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.24.0': - resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} + '@rollup/rollup-darwin-arm64@4.24.4': + resolution: {integrity: sha512-GmU/QgGtBTeraKyldC7cDVVvAJEOr3dFLKneez/n7BvX57UdhOqDsVwzU7UOnYA7AAOt+Xb26lk79PldDHgMIQ==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.24.0': - resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} + '@rollup/rollup-darwin-x64@4.24.4': + resolution: {integrity: sha512-N6oDBiZCBKlwYcsEPXGDE4g9RoxZLK6vT98M8111cW7VsVJFpNEqvJeIPfsCzbf0XEakPslh72X0gnlMi4Ddgg==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.24.0': - resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} + '@rollup/rollup-freebsd-arm64@4.24.4': + resolution: {integrity: sha512-py5oNShCCjCyjWXCZNrRGRpjWsF0ic8f4ieBNra5buQz0O/U6mMXCpC1LvrHuhJsNPgRt36tSYMidGzZiJF6mw==} + cpu: [arm64] + os: [freebsd] + + '@rollup/rollup-freebsd-x64@4.24.4': + resolution: {integrity: sha512-L7VVVW9FCnTTp4i7KrmHeDsDvjB4++KOBENYtNYAiYl96jeBThFfhP6HVxL74v4SiZEVDH/1ILscR5U9S4ms4g==} + cpu: [x64] + os: [freebsd] + + '@rollup/rollup-linux-arm-gnueabihf@4.24.4': + resolution: {integrity: sha512-10ICosOwYChROdQoQo589N5idQIisxjaFE/PAnX2i0Zr84mY0k9zul1ArH0rnJ/fpgiqfu13TFZR5A5YJLOYZA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.24.0': - resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} + '@rollup/rollup-linux-arm-musleabihf@4.24.4': + resolution: {integrity: sha512-ySAfWs69LYC7QhRDZNKqNhz2UKN8LDfbKSMAEtoEI0jitwfAG2iZwVqGACJT+kfYvvz3/JgsLlcBP+WWoKCLcw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.24.0': - resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} + '@rollup/rollup-linux-arm64-gnu@4.24.4': + resolution: {integrity: sha512-uHYJ0HNOI6pGEeZ/5mgm5arNVTI0nLlmrbdph+pGXpC9tFHFDQmDMOEqkmUObRfosJqpU8RliYoGz06qSdtcjg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.24.0': - resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} + '@rollup/rollup-linux-arm64-musl@4.24.4': + resolution: {integrity: sha512-38yiWLemQf7aLHDgTg85fh3hW9stJ0Muk7+s6tIkSUOMmi4Xbv5pH/5Bofnsb6spIwD5FJiR+jg71f0CH5OzoA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': - resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} + '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': + resolution: {integrity: sha512-q73XUPnkwt9ZNF2xRS4fvneSuaHw2BXuV5rI4cw0fWYVIWIBeDZX7c7FWhFQPNTnE24172K30I+dViWRVD9TwA==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.24.0': - resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} + '@rollup/rollup-linux-riscv64-gnu@4.24.4': + resolution: {integrity: sha512-Aie/TbmQi6UXokJqDZdmTJuZBCU3QBDA8oTKRGtd4ABi/nHgXICulfg1KI6n9/koDsiDbvHAiQO3YAUNa/7BCw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.24.0': - resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} + '@rollup/rollup-linux-s390x-gnu@4.24.4': + resolution: {integrity: sha512-P8MPErVO/y8ohWSP9JY7lLQ8+YMHfTI4bAdtCi3pC2hTeqFJco2jYspzOzTUB8hwUWIIu1xwOrJE11nP+0JFAQ==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.24.0': - resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} + '@rollup/rollup-linux-x64-gnu@4.24.4': + resolution: {integrity: sha512-K03TljaaoPK5FOyNMZAAEmhlyO49LaE4qCsr0lYHUKyb6QacTNF9pnfPpXnFlFD3TXuFbFbz7tJ51FujUXkXYA==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.24.0': - resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} + '@rollup/rollup-linux-x64-musl@4.24.4': + resolution: {integrity: sha512-VJYl4xSl/wqG2D5xTYncVWW+26ICV4wubwN9Gs5NrqhJtayikwCXzPL8GDsLnaLU3WwhQ8W02IinYSFJfyo34Q==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.24.0': - resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} + '@rollup/rollup-win32-arm64-msvc@4.24.4': + resolution: {integrity: sha512-ku2GvtPwQfCqoPFIJCqZ8o7bJcj+Y54cZSr43hHca6jLwAiCbZdBUOrqE6y29QFajNAzzpIOwsckaTFmN6/8TA==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.24.0': - resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} + '@rollup/rollup-win32-ia32-msvc@4.24.4': + resolution: {integrity: sha512-V3nCe+eTt/W6UYNr/wGvO1fLpHUrnlirlypZfKCT1fG6hWfqhPgQV/K/mRBXBpxc0eKLIF18pIOFVPh0mqHjlg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.24.0': - resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} + '@rollup/rollup-win32-x64-msvc@4.24.4': + resolution: {integrity: sha512-LTw1Dfd0mBIEqUVCxbvTE/LLo+9ZxVC9k99v1v4ahg9Aak6FpqOfNu5kRkeTAn0wphoC4JU7No1/rL+bBCEwhg==} cpu: [x64] os: [win32] @@ -1119,8 +1118,8 @@ packages: resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} - '@testing-library/jest-dom@6.6.2': - resolution: {integrity: sha512-P6GJD4yqc9jZLbe98j/EkyQDTPgqftohZF5FBkHY5BUERZmcf4HeO2k0XaefEg329ux2p21i1A1DmyQ1kKw2Jw==} + '@testing-library/jest-dom@6.6.3': + resolution: {integrity: sha512-IteBhl4XqYNkM54f4ejhLRJiZNqcSCoXUOG2CPK7qbD322KjQozM4kHQOfkG2oln9b9HTYqs+Sae8vBATubxxA==} engines: {node: '>=14', npm: '>=6', yarn: '>=1'} '@testing-library/user-event@14.5.2': @@ -1172,11 +1171,11 @@ packages: '@types/jest-axe@3.5.9': resolution: {integrity: sha512-z98CzR0yVDalCEuhGXXO4/zN4HHuSebAukXDjTLJyjEAgoUf1H1i+sr7SUB/mz8CRS/03/XChsx0dcLjHkndoQ==} - '@types/jest@29.5.13': - resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==} + '@types/jest@29.5.14': + resolution: {integrity: sha512-ZN+4sdnLUbo8EVvVc2ao0GFW6oVrQRPn4K2lglySj7APvSrgzxHiNNK99us4WDMi57xxA2yggblIAMNhXOotLQ==} - '@types/jquery@3.5.31': - resolution: {integrity: sha512-rf/iB+cPJ/YZfMwr+FVuQbm7IaWC4y3FVYfVDxRGqmUCFjjPII0HWaP0vTPJGp6m4o13AXySCcMbWfrWtBFAKw==} + '@types/jquery@3.5.32': + resolution: {integrity: sha512-b9Xbf4CkMqS02YH8zACqN1xzdxc3cO735Qe5AbSUFmyOiaWAbcpqh9Wna+Uk0vgACvoQHpWDg2rGdHkYPLmCiQ==} '@types/jsdom@20.0.1': resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} @@ -1190,17 +1189,14 @@ packages: '@types/ms@0.7.34': resolution: {integrity: sha512-nG96G3Wp6acyAgJqGasjODb+acrI7KltPiRxzHPXnP3NgI28bpQDRv53olbqGXbfcgF5aiiHmO3xpwEpS5Ld9g==} - '@types/mute-stream@0.0.4': - resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} - - '@types/node@22.7.4': - resolution: {integrity: sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==} + '@types/node@22.9.0': + resolution: {integrity: sha512-vuyHg81vvWA1Z1ELfvLko2c8f34gyA0zaic0+Rllc5lbCnbSyuvb2Oxpm6TAUAC/2xZN3QGqxBNggD1nNR2AfQ==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} - '@types/sizzle@2.3.8': - resolution: {integrity: sha512-0vWLNK2D5MT9dg0iOo8GlKguPAU02QjmZitPEsXRuJXU/OGIOt9vT9Fc26wtYuavLxtO45v9PGleoL9Z0k1LHg==} + '@types/sizzle@2.3.9': + resolution: {integrity: sha512-xzLEyKB50yqCUPUJkIsrVvoWNfFUbIZI+RspLWt8u+tIW/BetMBZtgV2LY/2o+tYH8dRvQ+eoPf3NdhQCcLE2w==} '@types/stack-utils@2.0.3': resolution: {integrity: sha512-9aEbYZ3TbYMznPdcdr3SmIrLXwC/AKZXQeCf9Pgao5CKb8CyHuEX5jzWPTkvregvhRJHcpRO6BFoGW9ycaOkYw==} @@ -1211,17 +1207,14 @@ packages: '@types/tough-cookie@4.0.5': resolution: {integrity: sha512-/Ad8+nIOV7Rl++6f1BdKxFSMgmoqEoYbHRpPcx3JEfv8VRsQe9Z4mCXeJBzxs7mbHY/XOZZuXlRNfhpVPbs6ZA==} - '@types/wrap-ansi@3.0.0': - resolution: {integrity: sha512-ltIpx+kM7g/MLRZfkbL7EsCEjfzCcScLpkg37eXEtx5kmrAKBkTJwd1GIAjDSL8wTpM6Hzn5YO4pSb91BEwu1g==} - '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.8.0': - resolution: {integrity: sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==} + '@typescript-eslint/eslint-plugin@8.13.0': + resolution: {integrity: sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 @@ -1231,8 +1224,8 @@ packages: typescript: optional: true - '@typescript-eslint/parser@8.8.0': - resolution: {integrity: sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==} + '@typescript-eslint/parser@8.13.0': + resolution: {integrity: sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 @@ -1241,12 +1234,12 @@ packages: typescript: optional: true - '@typescript-eslint/scope-manager@8.8.0': - resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==} + '@typescript-eslint/scope-manager@8.13.0': + resolution: {integrity: sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.8.0': - resolution: {integrity: sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==} + '@typescript-eslint/type-utils@8.13.0': + resolution: {integrity: sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1254,12 +1247,12 @@ packages: typescript: optional: true - '@typescript-eslint/types@8.8.0': - resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==} + '@typescript-eslint/types@8.13.0': + resolution: {integrity: sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.8.0': - resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==} + '@typescript-eslint/typescript-estree@8.13.0': + resolution: {integrity: sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -1267,14 +1260,14 @@ packages: typescript: optional: true - '@typescript-eslint/utils@8.8.0': - resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==} + '@typescript-eslint/utils@8.13.0': + resolution: {integrity: sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - '@typescript-eslint/visitor-keys@8.8.0': - resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==} + '@typescript-eslint/visitor-keys@8.13.0': + resolution: {integrity: sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} abab@2.0.6: @@ -1293,8 +1286,8 @@ packages: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.12.1: - resolution: {integrity: sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==} + acorn@8.14.0: + resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} engines: {node: '>=0.4.0'} hasBin: true @@ -1313,10 +1306,6 @@ packages: resolution: {integrity: sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==} engines: {node: '>=8'} - ansi-styles@3.2.1: - resolution: {integrity: sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==} - engines: {node: '>=4'} - ansi-styles@4.3.0: resolution: {integrity: sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==} engines: {node: '>=8'} @@ -1338,6 +1327,10 @@ packages: aria-query@5.3.0: resolution: {integrity: sha512-b0P0sZPKtyu8HkeRAfCq0IfURZK+SuwMjY1UXGBU27wpAiTwQAIlq56IbIO+ytk/JjS1fMR14ee5WBBfKi5J6A==} + aria-query@5.3.2: + resolution: {integrity: sha512-COROpnaoap1E2F000S62r6A60uHZnmlvomhfyT2DlTcrY1OrBKn2UhH7qn5wTC9zMvD0AY7csdPSNwKP+7WiQw==} + engines: {node: '>= 0.4'} + array-buffer-byte-length@1.0.1: resolution: {integrity: sha512-ahC5W1xgou+KTXix4sAO8Ki12Q+jf4i0+tmk3sC+zgcynshkHxzpXdImBehiUYKKKDwvfFiJl1tZt6ewscS1Mg==} engines: {node: '>= 0.4'} @@ -1445,8 +1438,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.0: - resolution: {integrity: sha512-Rmb62sR1Zpjql25eSanFGEhAxcFwfA1K0GuQcLoaJBAcENegrQut3hYdhXFF1obQfiDyqIW/cLM5HSJ/9k884A==} + browserslist@4.24.2: + resolution: {integrity: sha512-ZIc+Q62revdMcqC6aChtW4jz3My3klmCO1fEmINZY/8J3EpBg5/A/D0AKmBveUh6pgoeycoMkVMko84tuYS+Gg==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1472,12 +1465,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001666: - resolution: {integrity: sha512-gD14ICmoV5ZZM1OdzPWmpx+q4GyefaK06zi8hmfHV5xe4/2nOQX3+Dw5o+fSqOws2xVwL9j+anOPFwHzdEdV4g==} - - chalk@2.4.2: - resolution: {integrity: sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==} - engines: {node: '>=4'} + caniuse-lite@1.0.30001678: + resolution: {integrity: sha512-RR+4U/05gNtps58PEBDZcPWTgEO2MBeoPZ96aQcjmfkBWRIDfN451fW2qyDA9/+HohLLIL5GqiMwA+IB1pWarw==} chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} @@ -1517,16 +1506,10 @@ packages: collect-v8-coverage@1.0.2: resolution: {integrity: sha512-lHl4d5/ONEbLlJvaJNtsF/Lz+WvB07u2ycqTYbdrq7UypDXailES4valYb2eWiJFxZlVmpGekfqoxQhzyFdT4Q==} - color-convert@1.9.3: - resolution: {integrity: sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==} - color-convert@2.0.1: resolution: {integrity: sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==} engines: {node: '>=7.0.0'} - color-name@1.1.3: - resolution: {integrity: sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==} - color-name@1.1.4: resolution: {integrity: sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==} @@ -1547,12 +1530,12 @@ packages: convert-source-map@2.0.0: resolution: {integrity: sha512-Kvp459HrV2FEJ1CAsi1Ku+MY3kasH19TFykTz2xWmMeq6bk2NU3XXvfJ+Q61m0xktWwt+1HSYf3JZsTms3aRJg==} - cookie@0.5.0: - resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} + cookie@0.7.2: + resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - core-js-compat@3.38.1: - resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} + core-js-compat@3.39.0: + resolution: {integrity: sha512-VgEUx3VwlExr5no0tXlBt+silBvhTryPwCXRI2Id1PN8WTKu7MreethvddqOubrYxkFdv/RnYrqlv1sFNAUelw==} create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} @@ -1675,8 +1658,8 @@ packages: engines: {node: '>=12'} deprecated: Use your platform's native DOMException instead - electron-to-chromium@1.5.31: - resolution: {integrity: sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==} + electron-to-chromium@1.5.52: + resolution: {integrity: sha512-xtoijJTZ+qeucLBDNztDOuQBE1ksqjvNjvqFoST3nGC7fSpqJ+X6BdTBaY5BHG+IhWWmpc6b/KfpeuEDupEPOQ==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -1723,10 +1706,6 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - escape-string-regexp@1.0.5: - resolution: {integrity: sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==} - engines: {node: '>=0.8.0'} - escape-string-regexp@2.0.0: resolution: {integrity: sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w==} engines: {node: '>=8'} @@ -1784,8 +1763,8 @@ packages: '@testing-library/dom': optional: true - eslint-plugin-jest@28.8.3: - resolution: {integrity: sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==} + eslint-plugin-jest@28.9.0: + resolution: {integrity: sha512-rLu1s1Wf96TgUUxSw6loVIkNtUjq1Re7A9QdCCHSohnvXEBAjuL420h0T/fMmkQlNsQP2GhQzEUpYHPfxBkvYQ==} engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} peerDependencies: '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 @@ -1797,8 +1776,8 @@ packages: jest: optional: true - eslint-plugin-perfectionist@3.8.0: - resolution: {integrity: sha512-BYJWbQVOjvIGK9V1xUfn790HuvkePjxti8epOi1H6sdzo0N4RehBmQ8coHPbgA/f12BUG1NIoDtQhI9mUm+o2A==} + eslint-plugin-perfectionist@3.9.1: + resolution: {integrity: sha512-9WRzf6XaAxF4Oi5t/3TqKP5zUjERhasHmLFHin2Yw6ZAp/EP/EVA2dr3BhQrrHWCm5SzTMZf0FcjDnBkO2xFkA==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: astro-eslint-parser: ^1.0.2 @@ -1816,30 +1795,26 @@ packages: vue-eslint-parser: optional: true - eslint-plugin-playwright@1.6.2: - resolution: {integrity: sha512-mraN4Em3b5jLt01q7qWPyLg0Q5v3KAWfJSlEWwldyUXoa7DSPrBR4k6B6LROLqipsG8ndkwWMdjl1Ffdh15tag==} + eslint-plugin-playwright@2.0.1: + resolution: {integrity: sha512-f4a73xgCOK5Ug/5dtC82BVvND62lLqlMqgGkZn42teyvk6ccSyybHZXRHkpE7vKZSCjV57bnbR+3ucwItOhXlA==} engines: {node: '>=16.6.0'} peerDependencies: eslint: '>=8.40.0' - eslint-plugin-jest: '>=25' - peerDependenciesMeta: - eslint-plugin-jest: - optional: true - eslint-scope@8.1.0: - resolution: {integrity: sha512-14dSvlhaVhKKsa9Fx1l8A17s7ah7Ef7wCakJ10LYk6+GYmP9yDti2oq2SEwcyndt6knfcZyhyxwY3i9yL78EQw==} + eslint-scope@8.2.0: + resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint-visitor-keys@4.1.0: - resolution: {integrity: sha512-Q7lok0mqMUSf5a/AdAZkA5a/gHcO6snwQClVNNvFKCAVlxXucdU8pKydU5ZVZjBx5xr37vGbFFWtLQYreLzrZg==} + eslint-visitor-keys@4.2.0: + resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.12.0: - resolution: {integrity: sha512-UVIOlTEWxwIopRL1wgSQYdnVDcEvs2wyaO6DGo5mXqe3r16IoCNWkR29iHhyaP4cICWjbgbmFUGAhh0GJRuGZw==} + eslint@9.14.0: + resolution: {integrity: sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1848,8 +1823,8 @@ packages: jiti: optional: true - espree@10.2.0: - resolution: {integrity: sha512-upbkBJbckcCNBDBDXEbuhjbP68n+scUd3k/U2EkyM9nw+I/jPiL4cLF/Al06CF96wRltFda16sxDFrxsI1v0/g==} + espree@10.3.0: + resolution: {integrity: sha512-0QYC8b24HWY8zjRnDTL6RiHfDbAWn63qb4LMj1Z4b076A4une81+z03Kg7l7mn/48PUTqoLptSXez8oknU8Clg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} esprima@4.0.1: @@ -1933,8 +1908,8 @@ packages: for-each@0.3.3: resolution: {integrity: sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw==} - form-data@4.0.0: - resolution: {integrity: sha512-ETEklSGi5t0QMZuiXoA/Q6vcnxcLQP5vdugSpuAyi6SVGi2clPPp+xgEhuMaHC+zGgn31Kd235W35f7Hykkaww==} + form-data@4.0.1: + resolution: {integrity: sha512-tzN8e4TX8+kkxGPK8D5u0FNmjPUjw3lwC9lSLxxoB/+GtsJG91CO8bSWy73APlgAZzZbXEYZJuxjkHH2w+Ezhw==} engines: {node: '>= 6'} fraction.js@4.3.7: @@ -2049,10 +2024,6 @@ packages: has-bigints@1.0.2: resolution: {integrity: sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ==} - has-flag@3.0.0: - resolution: {integrity: sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==} - engines: {node: '>=4'} - has-flag@4.0.0: resolution: {integrity: sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==} engines: {node: '>=8'} @@ -2330,8 +2301,8 @@ packages: jest: optional: true - jest-fixed-jsdom@0.0.4: - resolution: {integrity: sha512-P9BVuU55UMoOSqNRTLKajmfFNNP/4W4P+fJYGpgmSkTJbyMzNwjNVBMDoUmFZkvWo4oi1/NXTyF0+hTO1yShBA==} + jest-fixed-jsdom@0.0.8: + resolution: {integrity: sha512-Pf7y5Px6MV8EwDtqJsYMJsiUi/Iu99hjMaqTrxGu/2j4kCz9wbz6iJ+NAIkbALKLlFxq7jpP8xJZbEVjCbih6A==} engines: {node: '>=18.0.0'} peerDependencies: jest-environment-jsdom: '>=28.0.0' @@ -2577,8 +2548,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.4.9: - resolution: {integrity: sha512-1m8xccT6ipN4PTqLinPwmzhxQREuxaEJYdx4nIbggxP8aM7r1e71vE7RtOUSQoAm1LydjGfZKy7370XD/tsuYg==} + msw@2.6.2: + resolution: {integrity: sha512-RdRgPvjfuzMIACkWv7VOVAeSRYMU3ofokLv1w0RsbFX960qnj/tFEyOFXY0G2GTUd9trA6rHuHciM/FKpBp6/A==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -2587,9 +2558,9 @@ packages: typescript: optional: true - mute-stream@1.0.0: - resolution: {integrity: sha512-avsJQhyd+680gKXyG/sQc0nXaC6rBkPOfyHYcFb9+hdkqQkR9bdnkJ0AMZhke0oesPqIO+mFFJ+IdBc7mst4IA==} - engines: {node: ^14.17.0 || ^16.13.0 || >=18.0.0} + mute-stream@2.0.0: + resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} + engines: {node: ^18.17.0 || >=20.5.0} nanoid@3.3.7: resolution: {integrity: sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==} @@ -2693,8 +2664,8 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse5@7.1.2: - resolution: {integrity: sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==} + parse5@7.2.1: + resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -2718,13 +2689,17 @@ packages: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} - picocolors@1.1.0: - resolution: {integrity: sha512-TQ92mBOW0l3LeMeyLV6mzy/kWr8lkd/hp3mTg7wYK7zJhuBStmGMBG0BdeDZS/dZx1IukaX6Bk11zcln25o1Aw==} + picocolors@1.1.1: + resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} picomatch@2.3.1: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} @@ -2741,13 +2716,13 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.47.2: - resolution: {integrity: sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==} + playwright-core@1.48.2: + resolution: {integrity: sha512-sjjw+qrLFlriJo64du+EK0kJgZzoQPsabGF4lBvsid+3CNIZIYLgnMj9V6JY5VhM2Peh20DJWIVpVljLLnlawA==} engines: {node: '>=18'} hasBin: true - playwright@1.47.2: - resolution: {integrity: sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==} + playwright@1.48.2: + resolution: {integrity: sha512-NjYvYgp4BPmiwfe31j4gHLa3J7bD2WiBz8Lk2RoSsmX38SVIARZ18VYjxLjAcDsAhA+F4iSEXTSGgjua0rrlgQ==} engines: {node: '>=18'} hasBin: true @@ -2801,9 +2776,9 @@ packages: yaml: optional: true - postcss-nested@6.2.0: - resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} - engines: {node: '>=12.0'} + postcss-nested@7.0.2: + resolution: {integrity: sha512-5osppouFc0VR9/VYzYxO03VaDa3e8F23Kfd6/9qcZTUI8P58GIYlArOET2Wq0ywSl2o2PjELhYOFI4W7l5QHKw==} + engines: {node: '>=18.0'} peerDependencies: postcss: ^8.2.14 @@ -2813,8 +2788,8 @@ packages: peerDependencies: postcss: ^8.1.0 - postcss-selector-parser@6.1.2: - resolution: {integrity: sha512-Q8qQfPiZ+THO/3ZrOrO0cJJKfpYCagtMUkXbnEfmgUjwXg6z/WBeOyS9APBBPCTSiDV+s4SwQGu8yFsiMRIudg==} + postcss-selector-parser@7.0.0: + resolution: {integrity: sha512-9RbEr1Y7FFfptd/1eEdntyjMwLeghW1bHX9GWjXo19vx4ytPQhANltvVxDggzJl7mnWM+dX28kb6cyS/4iQjlQ==} engines: {node: '>=4'} postcss-value-parser@4.2.0: @@ -2909,8 +2884,8 @@ packages: regjsgen@0.8.0: resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} - regjsparser@0.11.0: - resolution: {integrity: sha512-vTbzVAjQDzwQdKuvj7qEq6OlAprCjE656khuGQ4QaBLg7abQ9I9ISpmLuc6inWe7zP75AECjqUa4g4sdQvOXhg==} + regjsparser@0.11.2: + resolution: {integrity: sha512-3OGZZ4HoLJkkAZx/48mTXJNlmqTGOzc0o9OWQPuWpkOlXXPbyN6OafCcoXUnBqE2D3f/T5L+pWc1kdEmnfnRsA==} hasBin: true require-directory@2.1.1: @@ -2951,8 +2926,8 @@ packages: rollup-plugin-serve@3.0.0: resolution: {integrity: sha512-DjVRhbwC0OgP1Q1sj8Lvx12ee60UTZM767kkjT61sYKHw/wLpANAw3VZN5ZMa5NlvO8bYpfTaqiUrW+icAjXFg==} - rollup@4.24.0: - resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} + rollup@4.24.4: + resolution: {integrity: sha512-vGorVWIsWfX3xbcyAS+I047kFKapHYivmkaT63Smj77XwvLSJos6M1xGqZnBPFQFBRZDOcG1QnYEIxAvTr/HjA==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3109,10 +3084,6 @@ packages: resolution: {integrity: sha512-6fPc+R4ihwqP6N/aIv2f1gMH8lOVtWQHoqC4yK6oSDVVocumAsfCqjkXnqiYMhmMwS/mEHLp7Vehlt3ql6lEig==} engines: {node: '>=8'} - supports-color@5.5.0: - resolution: {integrity: sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==} - engines: {node: '>=4'} - supports-color@7.2.0: resolution: {integrity: sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==} engines: {node: '>=8'} @@ -3128,8 +3099,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - terser@5.34.1: - resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} + terser@5.36.0: + resolution: {integrity: sha512-IYV9eNMuFAV4THUspIRXkLakHnV6XO7FEdtKjf/mDyrnqUg9LnlOn6/RwRvM9SZjR4GUq8Nk8zj67FzVARr74w==} engines: {node: '>=10'} hasBin: true @@ -3146,10 +3117,6 @@ packages: tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} - to-fast-properties@2.0.0: - resolution: {integrity: sha512-/OaKK0xYrs3DmxRYqL/yDc+FxFUVYhDlXMhRmv3z915w2HF1tnN1omB354j8VUGO/hbRzyD6Y3sA7v7GS/ceog==} - engines: {node: '>=4'} - to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} @@ -3162,8 +3129,8 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} - ts-api-utils@1.3.0: - resolution: {integrity: sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==} + ts-api-utils@1.4.0: + resolution: {integrity: sha512-032cPxaEKwM+GT3vA5JXNzIaizx388rhsSW79vGRNGXfRRAdEAn2mvk36PvK5HnOchyWZ7afLEXqYCvPCrzuzQ==} engines: {node: '>=16'} peerDependencies: typescript: '>=4.2.0' @@ -3171,8 +3138,8 @@ packages: tsconfig-paths@3.15.0: resolution: {integrity: sha512-2Ac2RgzDe/cn48GvOe3M+o82pEFewD3UPbyoUHHdKasHwJKjds4fLXWf/Ux5kATBKN20oaFGu+jbElp1pos0mg==} - tslib@2.7.0: - resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} + tslib@2.8.1: + resolution: {integrity: sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==} type-check@0.4.0: resolution: {integrity: sha512-XleUoc9uwGXqjWwXaUTZAmzMcFZ5858QA2vvx1Ur5xIcixXIP+8LnFDgRplU30us6teqdlskFfu+ae4K79Ooew==} @@ -3210,8 +3177,8 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typescript-eslint@8.8.0: - resolution: {integrity: sha512-BjIT/VwJ8+0rVO01ZQ2ZVnjE1svFBiRczcpr1t1Yxt7sT25VSbPfrJtDsQ8uQTy2pilX5nI9gwxhUyLULNentw==} + typescript-eslint@8.13.0: + resolution: {integrity: sha512-vIMpDRJrQd70au2G8w34mPps0ezFSPMEX4pXkTzUkrNbRX+36ais2ksGWN0esZL+ZMaFJEneOBHzCgSqle7DHw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' @@ -3219,8 +3186,8 @@ packages: typescript: optional: true - typescript@5.6.2: - resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} + typescript@5.6.3: + resolution: {integrity: sha512-hjcS1mhfuyi4WW8IWtjP7brDrG2cuDZukyrYrSauoXGNgx0S7zceP07adYkJycEr56BOUTNPzbInooiN3fn1qw==} engines: {node: '>=14.17'} hasBin: true @@ -3230,10 +3197,6 @@ packages: undici-types@6.19.8: resolution: {integrity: sha512-ve2KP6f/JnbPBFyobGHuerC9g1FYGn/F8n1LWTwNxCEzd6IfqTwUQcNXgEtmmQ6DlRrC1hrSrBnCZPokRrDHjw==} - undici@5.28.4: - resolution: {integrity: sha512-72RFADWFqKmUb2hmmvNODKL3p9hcB6Gt2DOQMis1SEBaV6a4MH8soBvzg+95CYhCKPFedut2JY9bMfrDl9D23g==} - engines: {node: '>=14.0'} - unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} @@ -3361,8 +3324,8 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@2.5.1: - resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} + yaml@2.6.0: + resolution: {integrity: sha512-a6ae//JvKDEra2kdi1qzCyrJW/WZCgFi8ydDV+eXExl95t+5R+ijnqHJbz9tmMh8FUjx3iv2fCQ4dclAQlO2UQ==} engines: {node: '>= 14'} hasBin: true @@ -3391,9 +3354,9 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@babel/cli@7.25.7(@babel/core@7.25.7)': + '@babel/cli@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.0 '@jridgewell/trace-mapping': 0.3.25 commander: 6.2.1 convert-source-map: 2.0.0 @@ -3405,25 +3368,26 @@ snapshots: '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 chokidar: 3.6.0 - '@babel/code-frame@7.25.7': + '@babel/code-frame@7.26.2': dependencies: - '@babel/highlight': 7.25.7 - picocolors: 1.1.0 + '@babel/helper-validator-identifier': 7.25.9 + js-tokens: 4.0.0 + picocolors: 1.1.1 - '@babel/compat-data@7.25.7': {} + '@babel/compat-data@7.26.2': {} - '@babel/core@7.25.7': + '@babel/core@7.26.0': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helpers': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/template': 7.25.7 - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helpers': 7.26.0 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 convert-source-map: 2.0.0 debug: 4.3.7 gensync: 1.0.0-beta.2 @@ -3432,780 +3396,742 @@ snapshots: transitivePeerDependencies: - supports-color - '@babel/generator@7.25.7': + '@babel/generator@7.26.2': dependencies: - '@babel/types': 7.25.7 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.25.7': + '@babel/helper-annotate-as-pure@7.25.9': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.0 - '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.9': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/helper-compilation-targets@7.25.7': + '@babel/helper-compilation-targets@7.25.9': dependencies: - '@babel/compat-data': 7.25.7 - '@babel/helper-validator-option': 7.25.7 - browserslist: 4.24.0 + '@babel/compat-data': 7.26.2 + '@babel/helper-validator-option': 7.25.9 + browserslist: 4.24.2 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.7)': + '@babel/helper-create-class-features-plugin@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/traverse': 7.25.9 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.25.7)': + '@babel/helper-create-regexp-features-plugin@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 regexpu-core: 6.1.1 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.7)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - '@babel/helper-member-expression-to-functions@7.25.7': + '@babel/helper-member-expression-to-functions@7.25.9': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.7': + '@babel/helper-module-imports@7.25.9': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': + '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-simple-access': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.25.7': + '@babel/helper-optimise-call-expression@7.25.9': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.0 - '@babel/helper-plugin-utils@7.25.7': {} + '@babel/helper-plugin-utils@7.25.9': {} - '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.25.7)': + '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-wrap-function': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-wrap-function': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.25.7(@babel/core@7.25.7)': + '@babel/helper-replace-supers@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-member-expression-to-functions': 7.25.7 - '@babel/helper-optimise-call-expression': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-member-expression-to-functions': 7.25.9 + '@babel/helper-optimise-call-expression': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/helper-simple-access@7.25.7': + '@babel/helper-simple-access@7.25.9': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.25.7': + '@babel/helper-skip-transparent-expression-wrappers@7.25.9': dependencies: - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.7': {} + '@babel/helper-string-parser@7.25.9': {} - '@babel/helper-validator-identifier@7.25.7': {} + '@babel/helper-validator-identifier@7.25.9': {} - '@babel/helper-validator-option@7.25.7': {} + '@babel/helper-validator-option@7.25.9': {} - '@babel/helper-wrap-function@7.25.7': + '@babel/helper-wrap-function@7.25.9': dependencies: - '@babel/template': 7.25.7 - '@babel/traverse': 7.25.7 - '@babel/types': 7.25.7 + '@babel/template': 7.25.9 + '@babel/traverse': 7.25.9 + '@babel/types': 7.26.0 transitivePeerDependencies: - supports-color - '@babel/helpers@7.25.7': + '@babel/helpers@7.26.0': dependencies: - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 - '@babel/highlight@7.25.7': + '@babel/parser@7.26.2': dependencies: - '@babel/helper-validator-identifier': 7.25.7 - chalk: 2.4.2 - js-tokens: 4.0.0 - picocolors: 1.1.0 - - '@babel/parser@7.25.7': - dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.0 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.7)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.7)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.7)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.7)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.7)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.7)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.7)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-async-generator-functions@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-async-generator-functions@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-remap-async-to-generator': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-block-scoped-functions@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-class-properties@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) + '@babel/traverse': 7.25.9 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/template': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/template': 7.25.9 - '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-dynamic-import@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-exponentiation-operator@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-exponentiation-operator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-export-namespace-from@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-for-of@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-for-of@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-literals@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-logical-assignment-operators@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-modules-amd@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-commonjs@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-simple-access': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-simple-access': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - '@babel/traverse': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 + '@babel/traverse': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-new-target@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-nullish-coalescing-operator@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-nullish-coalescing-operator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-numeric-separator@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-object-rest-spread@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) - '@babel/plugin-transform-object-super@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-replace-supers': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-optional-chaining@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-regenerator@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-spread@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-template-literals@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-typeof-symbol@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 - '@babel/plugin-transform-typescript@7.25.7(@babel/core@7.25.7)': + '@babel/plugin-transform-typescript@7.25.9(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-annotate-as-pure': 7.25.7 - '@babel/helper-create-class-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 - '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/helper-create-class-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-unicode-property-regex@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-unicode-regex@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/plugin-transform-unicode-sets-regex@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/core': 7.25.7 - '@babel/helper-create-regexp-features-plugin': 7.25.7(@babel/core@7.25.7) - '@babel/helper-plugin-utils': 7.25.7 - - '@babel/preset-env@7.25.7(@babel/core@7.25.7)': - dependencies: - '@babel/compat-data': 7.25.7 - '@babel/core': 7.25.7 - '@babel/helper-compilation-targets': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-validator-option': 7.25.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-import-assertions': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.25.7) - '@babel/plugin-transform-arrow-functions': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-async-generator-functions': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-async-to-generator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-block-scoped-functions': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-block-scoping': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-class-properties': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-class-static-block': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-classes': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-computed-properties': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-destructuring': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-dotall-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-duplicate-keys': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-dynamic-import': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-exponentiation-operator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-export-namespace-from': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-for-of': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-function-name': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-json-strings': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-literals': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-logical-assignment-operators': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-member-expression-literals': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-amd': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-systemjs': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-umd': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-new-target': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-nullish-coalescing-operator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-numeric-separator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-object-rest-spread': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-object-super': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-optional-catch-binding': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-optional-chaining': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-parameters': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-private-methods': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-private-property-in-object': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-property-literals': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-regenerator': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-reserved-words': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-shorthand-properties': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-spread': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-sticky-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-template-literals': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-typeof-symbol': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-escapes': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-property-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-regex': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-unicode-sets-regex': 7.25.7(@babel/core@7.25.7) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.25.7) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.25.7) - babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.25.7) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.25.7) - core-js-compat: 3.38.1 + '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.0)': + dependencies: + '@babel/core': 7.26.0 + '@babel/helper-create-regexp-features-plugin': 7.25.9(@babel/core@7.26.0) + '@babel/helper-plugin-utils': 7.25.9 + + '@babel/preset-env@7.26.0(@babel/core@7.26.0)': + dependencies: + '@babel/compat-data': 7.26.2 + '@babel/core': 7.26.0 + '@babel/helper-compilation-targets': 7.25.9 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.0) + '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.0) + '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-generator-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoped-functions': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-exponentiation-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-for-of': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-nullish-coalescing-operator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-template-literals': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typeof-symbol': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.0) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.0) + babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.26.0) + babel-plugin-polyfill-corejs3: 0.10.6(@babel/core@7.26.0) + babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.26.0) + core-js-compat: 3.39.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.7)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/types': 7.25.7 + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/types': 7.26.0 esutils: 2.0.3 - '@babel/preset-typescript@7.25.7(@babel/core@7.25.7)': + '@babel/preset-typescript@7.26.0(@babel/core@7.26.0)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-plugin-utils': 7.25.7 - '@babel/helper-validator-option': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-modules-commonjs': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-transform-typescript': 7.25.7(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-plugin-utils': 7.25.9 + '@babel/helper-validator-option': 7.25.9 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-modules-commonjs': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-transform-typescript': 7.25.9(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - '@babel/runtime@7.25.7': + '@babel/runtime@7.26.0': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.25.7': + '@babel/template@7.25.9': dependencies: - '@babel/code-frame': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/code-frame': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 - '@babel/traverse@7.25.7': + '@babel/traverse@7.25.9': dependencies: - '@babel/code-frame': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/parser': 7.25.7 - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 + '@babel/code-frame': 7.26.2 + '@babel/generator': 7.26.2 + '@babel/parser': 7.26.2 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.25.7': + '@babel/types@7.26.0': dependencies: - '@babel/helper-string-parser': 7.25.7 - '@babel/helper-validator-identifier': 7.25.7 - to-fast-properties: 2.0.0 + '@babel/helper-string-parser': 7.25.9 + '@babel/helper-validator-identifier': 7.25.9 '@bcoe/v8-coverage@0.2.3': {} - '@bundled-es-modules/cookie@2.0.0': + '@bundled-es-modules/cookie@2.0.1': dependencies: - cookie: 0.5.0 + cookie: 0.7.2 '@bundled-es-modules/statuses@1.0.1': dependencies: @@ -4216,12 +4142,12 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 - '@eslint-community/eslint-utils@4.4.0(eslint@9.12.0)': + '@eslint-community/eslint-utils@4.4.1(eslint@9.14.0)': dependencies: - eslint: 9.12.0 + eslint: 9.14.0 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.1': {} + '@eslint-community/regexpp@4.12.1': {} '@eslint/config-array@0.18.0': dependencies: @@ -4231,13 +4157,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/core@0.6.0': {} + '@eslint/core@0.7.0': {} '@eslint/eslintrc@3.1.0': dependencies: ajv: 6.12.6 debug: 4.3.7 - espree: 10.2.0 + espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 import-fresh: 3.3.0 @@ -4247,56 +4173,52 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.12.0': {} + '@eslint/js@9.14.0': {} '@eslint/object-schema@2.1.4': {} - '@eslint/plugin-kit@0.2.0': + '@eslint/plugin-kit@0.2.2': dependencies: levn: 0.4.1 - '@fastify/busboy@2.1.1': {} + '@humanfs/core@0.19.1': {} - '@humanfs/core@0.19.0': {} - - '@humanfs/node@0.16.5': + '@humanfs/node@0.16.6': dependencies: - '@humanfs/core': 0.19.0 + '@humanfs/core': 0.19.1 '@humanwhocodes/retry': 0.3.1 '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/retry@0.3.1': {} - '@inquirer/confirm@3.2.0': + '@humanwhocodes/retry@0.4.1': {} + + '@inquirer/confirm@5.0.1(@types/node@22.9.0)': dependencies: - '@inquirer/core': 9.2.1 - '@inquirer/type': 1.5.5 + '@inquirer/core': 10.0.1(@types/node@22.9.0) + '@inquirer/type': 3.0.0(@types/node@22.9.0) + '@types/node': 22.9.0 - '@inquirer/core@9.2.1': + '@inquirer/core@10.0.1(@types/node@22.9.0)': dependencies: - '@inquirer/figures': 1.0.6 - '@inquirer/type': 2.0.0 - '@types/mute-stream': 0.0.4 - '@types/node': 22.7.4 - '@types/wrap-ansi': 3.0.0 + '@inquirer/figures': 1.0.7 + '@inquirer/type': 3.0.0(@types/node@22.9.0) ansi-escapes: 4.3.2 cli-width: 4.1.0 - mute-stream: 1.0.0 + mute-stream: 2.0.0 signal-exit: 4.1.0 strip-ansi: 6.0.1 wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 + transitivePeerDependencies: + - '@types/node' - '@inquirer/figures@1.0.6': {} - - '@inquirer/type@1.5.5': - dependencies: - mute-stream: 1.0.0 + '@inquirer/figures@1.0.7': {} - '@inquirer/type@2.0.0': + '@inquirer/type@3.0.0(@types/node@22.9.0)': dependencies: - mute-stream: 1.0.0 + '@types/node': 22.9.0 '@istanbuljs/load-nyc-config@1.1.0': dependencies: @@ -4311,7 +4233,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.4 + '@types/node': 22.9.0 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -4324,14 +4246,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.4 + '@types/node': 22.9.0 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.7.4) + jest-config: 29.7.0(@types/node@22.9.0) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -4356,7 +4278,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.4 + '@types/node': 22.9.0 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -4374,7 +4296,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.7.4 + '@types/node': 22.9.0 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -4396,7 +4318,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.7.4 + '@types/node': 22.9.0 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -4443,7 +4365,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -4466,7 +4388,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.7.4 + '@types/node': 22.9.0 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -4492,7 +4414,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@mswjs/interceptors@0.35.9': + '@mswjs/interceptors@0.36.10': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -4525,93 +4447,99 @@ snapshots: '@open-draft/until@2.1.0': {} - '@playwright/test@1.47.2': + '@playwright/test@1.48.2': dependencies: - playwright: 1.47.2 + playwright: 1.48.2 - '@rollup/plugin-babel@6.0.4(@babel/core@7.25.7)(@types/babel__core@7.20.5)(rollup@4.24.0)': + '@rollup/plugin-babel@6.0.4(@babel/core@7.26.0)(@types/babel__core@7.20.5)(rollup@4.24.4)': dependencies: - '@babel/core': 7.25.7 - '@babel/helper-module-imports': 7.25.7 - '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@babel/core': 7.26.0 + '@babel/helper-module-imports': 7.25.9 + '@rollup/pluginutils': 5.1.3(rollup@4.24.4) optionalDependencies: '@types/babel__core': 7.20.5 - rollup: 4.24.0 + rollup: 4.24.4 transitivePeerDependencies: - supports-color - '@rollup/plugin-node-resolve@15.3.0(rollup@4.24.0)': + '@rollup/plugin-node-resolve@15.3.0(rollup@4.24.4)': dependencies: - '@rollup/pluginutils': 5.1.2(rollup@4.24.0) + '@rollup/pluginutils': 5.1.3(rollup@4.24.4) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.8 optionalDependencies: - rollup: 4.24.0 + rollup: 4.24.4 - '@rollup/plugin-terser@0.4.4(rollup@4.24.0)': + '@rollup/plugin-terser@0.4.4(rollup@4.24.4)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.34.1 + terser: 5.36.0 optionalDependencies: - rollup: 4.24.0 + rollup: 4.24.4 - '@rollup/pluginutils@5.1.2(rollup@4.24.0)': + '@rollup/pluginutils@5.1.3(rollup@4.24.4)': dependencies: '@types/estree': 1.0.6 estree-walker: 2.0.2 - picomatch: 2.3.1 + picomatch: 4.0.2 optionalDependencies: - rollup: 4.24.0 + rollup: 4.24.4 + + '@rollup/rollup-android-arm-eabi@4.24.4': + optional: true - '@rollup/rollup-android-arm-eabi@4.24.0': + '@rollup/rollup-android-arm64@4.24.4': optional: true - '@rollup/rollup-android-arm64@4.24.0': + '@rollup/rollup-darwin-arm64@4.24.4': optional: true - '@rollup/rollup-darwin-arm64@4.24.0': + '@rollup/rollup-darwin-x64@4.24.4': optional: true - '@rollup/rollup-darwin-x64@4.24.0': + '@rollup/rollup-freebsd-arm64@4.24.4': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + '@rollup/rollup-freebsd-x64@4.24.4': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.24.0': + '@rollup/rollup-linux-arm-gnueabihf@4.24.4': optional: true - '@rollup/rollup-linux-arm64-gnu@4.24.0': + '@rollup/rollup-linux-arm-musleabihf@4.24.4': optional: true - '@rollup/rollup-linux-arm64-musl@4.24.0': + '@rollup/rollup-linux-arm64-gnu@4.24.4': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + '@rollup/rollup-linux-arm64-musl@4.24.4': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.24.0': + '@rollup/rollup-linux-powerpc64le-gnu@4.24.4': optional: true - '@rollup/rollup-linux-s390x-gnu@4.24.0': + '@rollup/rollup-linux-riscv64-gnu@4.24.4': optional: true - '@rollup/rollup-linux-x64-gnu@4.24.0': + '@rollup/rollup-linux-s390x-gnu@4.24.4': optional: true - '@rollup/rollup-linux-x64-musl@4.24.0': + '@rollup/rollup-linux-x64-gnu@4.24.4': optional: true - '@rollup/rollup-win32-arm64-msvc@4.24.0': + '@rollup/rollup-linux-x64-musl@4.24.4': optional: true - '@rollup/rollup-win32-ia32-msvc@4.24.0': + '@rollup/rollup-win32-arm64-msvc@4.24.4': optional: true - '@rollup/rollup-win32-x64-msvc@4.24.0': + '@rollup/rollup-win32-ia32-msvc@4.24.4': + optional: true + + '@rollup/rollup-win32-x64-msvc@4.24.4': optional: true '@rtsao/scc@1.1.0': {} @@ -4630,8 +4558,8 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: - '@babel/code-frame': 7.25.7 - '@babel/runtime': 7.25.7 + '@babel/code-frame': 7.26.2 + '@babel/runtime': 7.26.0 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -4639,10 +4567,10 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/jest-dom@6.6.2': + '@testing-library/jest-dom@6.6.3': dependencies: '@adobe/css-tools': 4.4.0 - aria-query: 5.3.0 + aria-query: 5.3.2 chalk: 3.0.0 css.escape: 1.5.1 dom-accessibility-api: 0.6.3 @@ -4659,24 +4587,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@types/babel__generator': 7.6.8 '@types/babel__template': 7.4.4 '@types/babel__traverse': 7.20.6 '@types/babel__generator@7.6.8': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.0 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.25.7 - '@babel/types': 7.25.7 + '@babel/parser': 7.26.2 + '@babel/types': 7.26.0 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.25.7 + '@babel/types': 7.26.0 '@types/cookie@0.6.0': {} @@ -4688,7 +4616,7 @@ snapshots: '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.7.4 + '@types/node': 22.9.0 '@types/istanbul-lib-coverage@2.0.6': {} @@ -4702,23 +4630,23 @@ snapshots: '@types/jest-axe@3.5.9': dependencies: - '@types/jest': 29.5.13 + '@types/jest': 29.5.14 axe-core: 3.5.6 - '@types/jest@29.5.13': + '@types/jest@29.5.14': dependencies: expect: 29.7.0 pretty-format: 29.7.0 - '@types/jquery@3.5.31': + '@types/jquery@3.5.32': dependencies: - '@types/sizzle': 2.3.8 + '@types/sizzle': 2.3.9 '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.7.4 + '@types/node': 22.9.0 '@types/tough-cookie': 4.0.5 - parse5: 7.1.2 + parse5: 7.2.1 '@types/json-schema@7.0.15': {} @@ -4726,17 +4654,13 @@ snapshots: '@types/ms@0.7.34': {} - '@types/mute-stream@0.0.4': - dependencies: - '@types/node': 22.7.4 - - '@types/node@22.7.4': + '@types/node@22.9.0': dependencies: undici-types: 6.19.8 '@types/resolve@1.20.2': {} - '@types/sizzle@2.3.8': {} + '@types/sizzle@2.3.9': {} '@types/stack-utils@2.0.3': {} @@ -4744,111 +4668,109 @@ snapshots: '@types/tough-cookie@4.0.5': {} - '@types/wrap-ansi@3.0.0': {} - '@types/yargs-parser@21.0.3': {} '@types/yargs@17.0.33': dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2)': + '@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3)': dependencies: - '@eslint-community/regexpp': 4.11.1 - '@typescript-eslint/parser': 8.8.0(eslint@9.12.0)(typescript@5.6.2) - '@typescript-eslint/scope-manager': 8.8.0 - '@typescript-eslint/type-utils': 8.8.0(eslint@9.12.0)(typescript@5.6.2) - '@typescript-eslint/utils': 8.8.0(eslint@9.12.0)(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 8.8.0 - eslint: 9.12.0 + '@eslint-community/regexpp': 4.12.1 + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/type-utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.13.0 + eslint: 9.14.0 graphemer: 1.4.0 ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.6.2) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.8.0(eslint@9.12.0)(typescript@5.6.2)': + '@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/scope-manager': 8.8.0 - '@typescript-eslint/types': 8.8.0 - '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) - '@typescript-eslint/visitor-keys': 8.8.0 + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) + '@typescript-eslint/visitor-keys': 8.13.0 debug: 4.3.7 - eslint: 9.12.0 + eslint: 9.14.0 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.8.0': + '@typescript-eslint/scope-manager@8.13.0': dependencies: - '@typescript-eslint/types': 8.8.0 - '@typescript-eslint/visitor-keys': 8.8.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/visitor-keys': 8.13.0 - '@typescript-eslint/type-utils@8.8.0(eslint@9.12.0)(typescript@5.6.2)': + '@typescript-eslint/type-utils@8.13.0(eslint@9.14.0)(typescript@5.6.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) - '@typescript-eslint/utils': 8.8.0(eslint@9.12.0)(typescript@5.6.2) + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) debug: 4.3.7 - ts-api-utils: 1.3.0(typescript@5.6.2) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - eslint - supports-color - '@typescript-eslint/types@8.8.0': {} + '@typescript-eslint/types@8.13.0': {} - '@typescript-eslint/typescript-estree@8.8.0(typescript@5.6.2)': + '@typescript-eslint/typescript-estree@8.13.0(typescript@5.6.3)': dependencies: - '@typescript-eslint/types': 8.8.0 - '@typescript-eslint/visitor-keys': 8.8.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/visitor-keys': 8.13.0 debug: 4.3.7 fast-glob: 3.3.2 is-glob: 4.0.3 minimatch: 9.0.5 semver: 7.6.3 - ts-api-utils: 1.3.0(typescript@5.6.2) + ts-api-utils: 1.4.0(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.8.0(eslint@9.12.0)(typescript@5.6.2)': + '@typescript-eslint/utils@8.13.0(eslint@9.14.0)(typescript@5.6.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) - '@typescript-eslint/scope-manager': 8.8.0 - '@typescript-eslint/types': 8.8.0 - '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) - eslint: 9.12.0 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0) + '@typescript-eslint/scope-manager': 8.13.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/typescript-estree': 8.13.0(typescript@5.6.3) + eslint: 9.14.0 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/visitor-keys@8.8.0': + '@typescript-eslint/visitor-keys@8.13.0': dependencies: - '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/types': 8.13.0 eslint-visitor-keys: 3.4.3 abab@2.0.6: {} acorn-globals@7.0.1: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 acorn-walk: 8.3.4 - acorn-jsx@5.3.2(acorn@8.12.1): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.12.1 + acorn: 8.14.0 acorn-walk@8.3.4: dependencies: - acorn: 8.12.1 + acorn: 8.14.0 - acorn@8.12.1: {} + acorn@8.14.0: {} agent-base@6.0.2: dependencies: @@ -4869,10 +4791,6 @@ snapshots: ansi-regex@5.0.1: {} - ansi-styles@3.2.1: - dependencies: - color-convert: 1.9.3 - ansi-styles@4.3.0: dependencies: color-convert: 2.0.1 @@ -4894,6 +4812,8 @@ snapshots: dependencies: dequal: 2.0.3 + aria-query@5.3.2: {} + array-buffer-byte-length@1.0.1: dependencies: call-bind: 1.0.7 @@ -4946,11 +4866,11 @@ snapshots: autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.24.0 - caniuse-lite: 1.0.30001666 + browserslist: 4.24.2 + caniuse-lite: 1.0.30001678 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.1.0 + picocolors: 1.1.1 postcss: 8.4.47 postcss-value-parser: 4.2.0 @@ -4962,13 +4882,13 @@ snapshots: axe-core@4.9.1: {} - babel-jest@29.7.0(@babel/core@7.25.7): + babel-jest@29.7.0(@babel/core@7.26.0): dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.0 '@jest/transform': 29.7.0 '@types/babel__core': 7.20.5 babel-plugin-istanbul: 6.1.1 - babel-preset-jest: 29.6.3(@babel/core@7.25.7) + babel-preset-jest: 29.6.3(@babel/core@7.26.0) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -4977,7 +4897,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -4987,7 +4907,7 @@ snapshots: babel-plugin-istanbul@7.0.0: dependencies: - '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-plugin-utils': 7.25.9 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 6.0.3 @@ -4997,59 +4917,59 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.25.7 - '@babel/types': 7.25.7 + '@babel/template': 7.25.9 + '@babel/types': 7.26.0 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.7): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.26.0): dependencies: - '@babel/compat-data': 7.25.7 - '@babel/core': 7.25.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) + '@babel/compat-data': 7.26.2 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.7): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.26.0): dependencies: - '@babel/core': 7.25.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) - core-js-compat: 3.38.1 + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) + core-js-compat: 3.39.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.7): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.26.0): dependencies: - '@babel/core': 7.25.7 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) + '@babel/core': 7.26.0 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.26.0) transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.1.0(@babel/core@7.25.7): - dependencies: - '@babel/core': 7.25.7 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.25.7) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.25.7) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-import-attributes': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.25.7) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.25.7) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.25.7) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.25.7) - - babel-preset-jest@29.6.3(@babel/core@7.25.7): - dependencies: - '@babel/core': 7.25.7 + babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.0) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.0) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.0) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.0) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.0) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.0) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.0) + + babel-preset-jest@29.6.3(@babel/core@7.26.0): + dependencies: + '@babel/core': 7.26.0 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) balanced-match@1.0.2: {} @@ -5068,12 +4988,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.0: + browserslist@4.24.2: dependencies: - caniuse-lite: 1.0.30001666 - electron-to-chromium: 1.5.31 + caniuse-lite: 1.0.30001678 + electron-to-chromium: 1.5.52 node-releases: 2.0.18 - update-browserslist-db: 1.1.1(browserslist@4.24.0) + update-browserslist-db: 1.1.1(browserslist@4.24.2) bser@2.1.1: dependencies: @@ -5095,13 +5015,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001666: {} - - chalk@2.4.2: - dependencies: - ansi-styles: 3.2.1 - escape-string-regexp: 1.0.5 - supports-color: 5.5.0 + caniuse-lite@1.0.30001678: {} chalk@3.0.0: dependencies: @@ -5143,16 +5057,10 @@ snapshots: collect-v8-coverage@1.0.2: {} - color-convert@1.9.3: - dependencies: - color-name: 1.1.3 - color-convert@2.0.1: dependencies: color-name: 1.1.4 - color-name@1.1.3: {} - color-name@1.1.4: {} combined-stream@1.0.8: @@ -5167,19 +5075,19 @@ snapshots: convert-source-map@2.0.0: {} - cookie@0.5.0: {} + cookie@0.7.2: {} - core-js-compat@3.38.1: + core-js-compat@3.39.0: dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 - create-jest@29.7.0(@types/node@22.7.4): + create-jest@29.7.0(@types/node@22.9.0): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.7.4) + jest-config: 29.7.0(@types/node@22.9.0) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5280,7 +5188,7 @@ snapshots: dependencies: webidl-conversions: 7.0.0 - electron-to-chromium@1.5.31: {} + electron-to-chromium@1.5.52: {} emittery@0.13.1: {} @@ -5369,8 +5277,6 @@ snapshots: escalade@3.2.0: {} - escape-string-regexp@1.0.5: {} - escape-string-regexp@2.0.0: {} escape-string-regexp@4.0.0: {} @@ -5391,17 +5297,17 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.14.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.8.0(eslint@9.12.0)(typescript@5.6.2) - eslint: 9.12.0 + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + eslint: 9.14.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 @@ -5410,9 +5316,9 @@ snapshots: array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.12.0 + eslint: 9.14.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@9.12.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint-import-resolver-node@0.3.9)(eslint@9.14.0) hasown: 2.0.2 is-core-module: 2.15.1 is-glob: 4.0.3 @@ -5424,70 +5330,68 @@ snapshots: string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.8.0(eslint@9.12.0)(typescript@5.6.2) + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0)(typescript@5.6.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest-dom@5.4.0(@testing-library/dom@10.4.0)(eslint@9.12.0): + eslint-plugin-jest-dom@5.4.0(@testing-library/dom@10.4.0)(eslint@9.14.0): dependencies: - '@babel/runtime': 7.25.7 - eslint: 9.12.0 + '@babel/runtime': 7.26.0 + eslint: 9.14.0 requireindex: 1.2.0 optionalDependencies: '@testing-library/dom': 10.4.0 - eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.4))(typescript@5.6.2): + eslint-plugin-jest@28.9.0(@typescript-eslint/eslint-plugin@8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(jest@29.7.0(@types/node@22.9.0))(typescript@5.6.3): dependencies: - '@typescript-eslint/utils': 8.8.0(eslint@9.12.0)(typescript@5.6.2) - eslint: 9.12.0 + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + eslint: 9.14.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2) - jest: 29.7.0(@types/node@22.7.4) + '@typescript-eslint/eslint-plugin': 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3) + jest: 29.7.0(@types/node@22.9.0) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-perfectionist@3.8.0(eslint@9.12.0)(typescript@5.6.2): + eslint-plugin-perfectionist@3.9.1(eslint@9.14.0)(typescript@5.6.3): dependencies: - '@typescript-eslint/types': 8.8.0 - '@typescript-eslint/utils': 8.8.0(eslint@9.12.0)(typescript@5.6.2) - eslint: 9.12.0 + '@typescript-eslint/types': 8.13.0 + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + eslint: 9.14.0 minimatch: 9.0.5 natural-compare-lite: 1.4.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-playwright@1.6.2(eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.4))(typescript@5.6.2))(eslint@9.12.0): + eslint-plugin-playwright@2.0.1(eslint@9.14.0): dependencies: - eslint: 9.12.0 + eslint: 9.14.0 globals: 13.24.0 - optionalDependencies: - eslint-plugin-jest: 28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(jest@29.7.0(@types/node@22.7.4))(typescript@5.6.2) - eslint-scope@8.1.0: + eslint-scope@8.2.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 eslint-visitor-keys@3.4.3: {} - eslint-visitor-keys@4.1.0: {} + eslint-visitor-keys@4.2.0: {} - eslint@9.12.0: + eslint@9.14.0: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@9.12.0) - '@eslint-community/regexpp': 4.11.1 + '@eslint-community/eslint-utils': 4.4.1(eslint@9.14.0) + '@eslint-community/regexpp': 4.12.1 '@eslint/config-array': 0.18.0 - '@eslint/core': 0.6.0 + '@eslint/core': 0.7.0 '@eslint/eslintrc': 3.1.0 - '@eslint/js': 9.12.0 - '@eslint/plugin-kit': 0.2.0 - '@humanfs/node': 0.16.5 + '@eslint/js': 9.14.0 + '@eslint/plugin-kit': 0.2.2 + '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.3.1 + '@humanwhocodes/retry': 0.4.1 '@types/estree': 1.0.6 '@types/json-schema': 7.0.15 ajv: 6.12.6 @@ -5495,9 +5399,9 @@ snapshots: cross-spawn: 7.0.3 debug: 4.3.7 escape-string-regexp: 4.0.0 - eslint-scope: 8.1.0 - eslint-visitor-keys: 4.1.0 - espree: 10.2.0 + eslint-scope: 8.2.0 + eslint-visitor-keys: 4.2.0 + espree: 10.3.0 esquery: 1.6.0 esutils: 2.0.3 fast-deep-equal: 3.1.3 @@ -5516,11 +5420,11 @@ snapshots: transitivePeerDependencies: - supports-color - espree@10.2.0: + espree@10.3.0: dependencies: - acorn: 8.12.1 - acorn-jsx: 5.3.2(acorn@8.12.1) - eslint-visitor-keys: 4.1.0 + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} @@ -5611,7 +5515,7 @@ snapshots: dependencies: is-callable: 1.2.7 - form-data@4.0.0: + form-data@4.0.1: dependencies: asynckit: 0.4.0 combined-stream: 1.0.8 @@ -5723,8 +5627,6 @@ snapshots: has-bigints@1.0.2: {} - has-flag@3.0.0: {} - has-flag@4.0.0: {} has-property-descriptors@1.0.2: @@ -5894,8 +5796,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.25.7 - '@babel/parser': 7.25.7 + '@babel/core': 7.26.0 + '@babel/parser': 7.26.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -5904,8 +5806,8 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.25.7 - '@babel/parser': 7.25.7 + '@babel/core': 7.26.0 + '@babel/parser': 7.26.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.3 @@ -5950,7 +5852,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.4 + '@types/node': 22.9.0 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -5970,16 +5872,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.7.4): + jest-cli@29.7.0(@types/node@22.9.0): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.7.4) + create-jest: 29.7.0(@types/node@22.9.0) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.7.4) + jest-config: 29.7.0(@types/node@22.9.0) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -5989,12 +5891,12 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.7.4): + jest-config@29.7.0(@types/node@22.9.0): dependencies: - '@babel/core': 7.25.7 + '@babel/core': 7.26.0 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.25.7) + babel-jest: 29.7.0(@babel/core@7.26.0) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -6014,7 +5916,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.7.4 + '@types/node': 22.9.0 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -6044,7 +5946,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 22.7.4 + '@types/node': 22.9.0 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -6058,18 +5960,18 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.4 + '@types/node': 22.9.0 jest-mock: 29.7.0 jest-util: 29.7.0 - jest-extended@4.0.2(jest@29.7.0(@types/node@22.7.4)): + jest-extended@4.0.2(jest@29.7.0(@types/node@22.9.0)): dependencies: jest-diff: 29.7.0 jest-get-type: 29.6.3 optionalDependencies: - jest: 29.7.0(@types/node@22.7.4) + jest: 29.7.0(@types/node@22.9.0) - jest-fixed-jsdom@0.0.4(jest-environment-jsdom@29.7.0): + jest-fixed-jsdom@0.0.8(jest-environment-jsdom@29.7.0): dependencies: jest-environment-jsdom: 29.7.0 @@ -6079,7 +5981,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.7.4 + '@types/node': 22.9.0 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6112,7 +6014,7 @@ snapshots: jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.26.2 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -6125,7 +6027,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.4 + '@types/node': 22.9.0 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -6160,7 +6062,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.4 + '@types/node': 22.9.0 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6188,7 +6090,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.4 + '@types/node': 22.9.0 chalk: 4.1.2 cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 @@ -6208,15 +6110,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.25.7 - '@babel/generator': 7.25.7 - '@babel/plugin-syntax-jsx': 7.25.7(@babel/core@7.25.7) - '@babel/plugin-syntax-typescript': 7.25.7(@babel/core@7.25.7) - '@babel/types': 7.25.7 + '@babel/core': 7.26.0 + '@babel/generator': 7.26.2 + '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.0) + '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.0) + '@babel/types': 7.26.0 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.0) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -6234,7 +6136,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.7.4 + '@types/node': 22.9.0 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6253,7 +6155,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.7.4 + '@types/node': 22.9.0 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6262,17 +6164,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.7.4 + '@types/node': 22.9.0 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.7.4): + jest@29.7.0(@types/node@22.9.0): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.7.4) + jest-cli: 29.7.0(@types/node@22.9.0) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6295,7 +6197,7 @@ snapshots: jsdom@20.0.3: dependencies: abab: 2.0.6 - acorn: 8.12.1 + acorn: 8.14.0 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -6303,13 +6205,13 @@ snapshots: decimal.js: 10.4.3 domexception: 4.0.0 escodegen: 2.1.0 - form-data: 4.0.0 + form-data: 4.0.1 html-encoding-sniffer: 3.0.0 http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 nwsapi: 2.2.13 - parse5: 7.1.2 + parse5: 7.2.1 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.4 @@ -6430,13 +6332,14 @@ snapshots: ms@2.1.3: {} - msw@2.4.9(typescript@5.6.2): + msw@2.6.2(@types/node@22.9.0)(typescript@5.6.3): dependencies: - '@bundled-es-modules/cookie': 2.0.0 + '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 3.2.0 - '@mswjs/interceptors': 0.35.9 + '@inquirer/confirm': 5.0.1(@types/node@22.9.0) + '@mswjs/interceptors': 0.36.10 + '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 '@types/statuses': 2.0.5 @@ -6450,9 +6353,11 @@ snapshots: type-fest: 4.26.1 yargs: 17.7.2 optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 + transitivePeerDependencies: + - '@types/node' - mute-stream@1.0.0: {} + mute-stream@2.0.0: {} nanoid@3.3.7: {} @@ -6549,12 +6454,12 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.25.7 + '@babel/code-frame': 7.26.2 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse5@7.1.2: + parse5@7.2.1: dependencies: entities: 4.5.0 @@ -6570,10 +6475,12 @@ snapshots: path-type@5.0.0: {} - picocolors@1.1.0: {} + picocolors@1.1.1: {} picomatch@2.3.1: {} + picomatch@4.0.2: {} + pify@2.3.0: {} pify@4.0.1: {} @@ -6584,11 +6491,11 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.47.2: {} + playwright-core@1.48.2: {} - playwright@1.47.2: + playwright@1.48.2: dependencies: - playwright-core: 1.47.2 + playwright-core: 1.48.2 optionalDependencies: fsevents: 2.3.2 @@ -6601,7 +6508,7 @@ snapshots: fs-extra: 11.2.0 get-stdin: 9.0.0 globby: 14.0.2 - picocolors: 1.1.0 + picocolors: 1.1.1 postcss: 8.4.47 postcss-load-config: 5.1.0(postcss@8.4.47) postcss-reporter: 7.1.0(postcss@8.4.47) @@ -6623,29 +6530,29 @@ snapshots: postcss-load-config@5.1.0(postcss@8.4.47): dependencies: lilconfig: 3.1.2 - yaml: 2.5.1 + yaml: 2.6.0 optionalDependencies: postcss: 8.4.47 - postcss-load-config@6.0.1(postcss@8.4.47)(yaml@2.5.1): + postcss-load-config@6.0.1(postcss@8.4.47)(yaml@2.6.0): dependencies: lilconfig: 3.1.2 optionalDependencies: postcss: 8.4.47 - yaml: 2.5.1 + yaml: 2.6.0 - postcss-nested@6.2.0(postcss@8.4.47): + postcss-nested@7.0.2(postcss@8.4.47): dependencies: postcss: 8.4.47 - postcss-selector-parser: 6.1.2 + postcss-selector-parser: 7.0.0 postcss-reporter@7.1.0(postcss@8.4.47): dependencies: - picocolors: 1.1.0 + picocolors: 1.1.1 postcss: 8.4.47 thenby: 1.3.4 - postcss-selector-parser@6.1.2: + postcss-selector-parser@7.0.0: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 @@ -6655,7 +6562,7 @@ snapshots: postcss@8.4.47: dependencies: nanoid: 3.3.7 - picocolors: 1.1.0 + picocolors: 1.1.1 source-map-js: 1.2.1 prelude-ls@1.2.1: {} @@ -6722,7 +6629,7 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.25.7 + '@babel/runtime': 7.26.0 regexp.prototype.flags@1.5.3: dependencies: @@ -6736,13 +6643,13 @@ snapshots: regenerate: 1.4.2 regenerate-unicode-properties: 10.2.0 regjsgen: 0.8.0 - regjsparser: 0.11.0 + regjsparser: 0.11.2 unicode-match-property-ecmascript: 2.0.0 unicode-match-property-value-ecmascript: 2.2.0 regjsgen@0.8.0: {} - regjsparser@0.11.0: + regjsparser@0.11.2: dependencies: jsesc: 3.0.2 @@ -6775,26 +6682,28 @@ snapshots: mime: 4.0.4 opener: 1.5.2 - rollup@4.24.0: + rollup@4.24.4: dependencies: '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.24.0 - '@rollup/rollup-android-arm64': 4.24.0 - '@rollup/rollup-darwin-arm64': 4.24.0 - '@rollup/rollup-darwin-x64': 4.24.0 - '@rollup/rollup-linux-arm-gnueabihf': 4.24.0 - '@rollup/rollup-linux-arm-musleabihf': 4.24.0 - '@rollup/rollup-linux-arm64-gnu': 4.24.0 - '@rollup/rollup-linux-arm64-musl': 4.24.0 - '@rollup/rollup-linux-powerpc64le-gnu': 4.24.0 - '@rollup/rollup-linux-riscv64-gnu': 4.24.0 - '@rollup/rollup-linux-s390x-gnu': 4.24.0 - '@rollup/rollup-linux-x64-gnu': 4.24.0 - '@rollup/rollup-linux-x64-musl': 4.24.0 - '@rollup/rollup-win32-arm64-msvc': 4.24.0 - '@rollup/rollup-win32-ia32-msvc': 4.24.0 - '@rollup/rollup-win32-x64-msvc': 4.24.0 + '@rollup/rollup-android-arm-eabi': 4.24.4 + '@rollup/rollup-android-arm64': 4.24.4 + '@rollup/rollup-darwin-arm64': 4.24.4 + '@rollup/rollup-darwin-x64': 4.24.4 + '@rollup/rollup-freebsd-arm64': 4.24.4 + '@rollup/rollup-freebsd-x64': 4.24.4 + '@rollup/rollup-linux-arm-gnueabihf': 4.24.4 + '@rollup/rollup-linux-arm-musleabihf': 4.24.4 + '@rollup/rollup-linux-arm64-gnu': 4.24.4 + '@rollup/rollup-linux-arm64-musl': 4.24.4 + '@rollup/rollup-linux-powerpc64le-gnu': 4.24.4 + '@rollup/rollup-linux-riscv64-gnu': 4.24.4 + '@rollup/rollup-linux-s390x-gnu': 4.24.4 + '@rollup/rollup-linux-x64-gnu': 4.24.4 + '@rollup/rollup-linux-x64-musl': 4.24.4 + '@rollup/rollup-win32-arm64-msvc': 4.24.4 + '@rollup/rollup-win32-ia32-msvc': 4.24.4 + '@rollup/rollup-win32-x64-msvc': 4.24.4 fsevents: 2.3.3 run-parallel@1.2.0: @@ -6945,10 +6854,6 @@ snapshots: strip-json-comments@3.1.1: {} - supports-color@5.5.0: - dependencies: - has-flag: 3.0.0 - supports-color@7.2.0: dependencies: has-flag: 4.0.0 @@ -6961,10 +6866,10 @@ snapshots: symbol-tree@3.2.4: {} - terser@5.34.1: + terser@5.36.0: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.12.1 + acorn: 8.14.0 commander: 2.20.3 source-map-support: 0.5.21 @@ -6980,8 +6885,6 @@ snapshots: tmpl@1.0.5: {} - to-fast-properties@2.0.0: {} - to-regex-range@5.0.1: dependencies: is-number: 7.0.0 @@ -6997,9 +6900,9 @@ snapshots: dependencies: punycode: 2.3.1 - ts-api-utils@1.3.0(typescript@5.6.2): + ts-api-utils@1.4.0(typescript@5.6.3): dependencies: - typescript: 5.6.2 + typescript: 5.6.3 tsconfig-paths@3.15.0: dependencies: @@ -7008,7 +6911,7 @@ snapshots: minimist: 1.2.8 strip-bom: 3.0.0 - tslib@2.7.0: {} + tslib@2.8.1: {} type-check@0.4.0: dependencies: @@ -7054,18 +6957,18 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript-eslint@8.8.0(eslint@9.12.0)(typescript@5.6.2): + typescript-eslint@8.13.0(eslint@9.14.0)(typescript@5.6.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@9.12.0)(typescript@5.6.2))(eslint@9.12.0)(typescript@5.6.2) - '@typescript-eslint/parser': 8.8.0(eslint@9.12.0)(typescript@5.6.2) - '@typescript-eslint/utils': 8.8.0(eslint@9.12.0)(typescript@5.6.2) + '@typescript-eslint/eslint-plugin': 8.13.0(@typescript-eslint/parser@8.13.0(eslint@9.14.0)(typescript@5.6.3))(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/parser': 8.13.0(eslint@9.14.0)(typescript@5.6.3) + '@typescript-eslint/utils': 8.13.0(eslint@9.14.0)(typescript@5.6.3) optionalDependencies: - typescript: 5.6.2 + typescript: 5.6.3 transitivePeerDependencies: - eslint - supports-color - typescript@5.6.2: {} + typescript@5.6.3: {} unbox-primitive@1.0.2: dependencies: @@ -7076,10 +6979,6 @@ snapshots: undici-types@6.19.8: {} - undici@5.28.4: - dependencies: - '@fastify/busboy': 2.1.1 - unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: @@ -7097,11 +6996,11 @@ snapshots: universalify@2.0.1: {} - update-browserslist-db@1.1.1(browserslist@4.24.0): + update-browserslist-db@1.1.1(browserslist@4.24.2): dependencies: - browserslist: 4.24.0 + browserslist: 4.24.2 escalade: 3.2.0 - picocolors: 1.1.0 + picocolors: 1.1.1 uri-js@4.4.1: dependencies: @@ -7192,7 +7091,7 @@ snapshots: yallist@3.1.1: {} - yaml@2.5.1: {} + yaml@2.6.0: {} yargs-parser@21.1.1: {} diff --git a/src/keyHandler.ts b/src/keyHandler.ts index 1195068f..8a686e12 100644 --- a/src/keyHandler.ts +++ b/src/keyHandler.ts @@ -34,16 +34,16 @@ export default class KeyHandler { isKeyHandled = this.moveDown(selectedNode); break; - case "ArrowUp": - isKeyHandled = this.moveUp(selectedNode); + case "ArrowLeft": + isKeyHandled = this.moveLeft(selectedNode); break; case "ArrowRight": isKeyHandled = this.moveRight(selectedNode); break; - case "ArrowLeft": - isKeyHandled = this.moveLeft(selectedNode); + case "ArrowUp": + isKeyHandled = this.moveUp(selectedNode); break; } } diff --git a/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-darwin.png b/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-darwin.png index 79e12448..a6be0ce7 100644 Binary files a/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-darwin.png and b/src/playwright/playwright.test.ts-snapshots/with-dragAndDrop-moves-a-node-1-Chromium-darwin.png differ diff --git a/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-darwin.png b/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-darwin.png index 6e7d19ce..31bf964d 100644 Binary files a/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-darwin.png and b/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-displays-a-tree-1-Chromium-darwin.png differ diff --git a/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-darwin.png b/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-darwin.png index 31653630..bcb3788d 100644 Binary files a/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-darwin.png and b/src/playwright/playwright.test.ts-snapshots/without-dragAndDrop-selects-a-node-1-Chromium-darwin.png differ diff --git a/src/test/support/setupTests.ts b/src/test/support/setupTests.ts index 282b5e5e..ca930412 100644 --- a/src/test/support/setupTests.ts +++ b/src/test/support/setupTests.ts @@ -7,6 +7,7 @@ declare global { interface Window { $: JQueryStatic; jQuery: JQueryStatic; + TransformStream: any; } } diff --git a/tree.jquery.debug.js b/tree.jquery.debug.js index 95645926..f66debf8 100644 --- a/tree.jquery.debug.js +++ b/tree.jquery.debug.js @@ -902,14 +902,14 @@ var jqtree = (function (exports) { case "ArrowDown": isKeyHandled = this.moveDown(selectedNode); break; - case "ArrowUp": - isKeyHandled = this.moveUp(selectedNode); + case "ArrowLeft": + isKeyHandled = this.moveLeft(selectedNode); break; case "ArrowRight": isKeyHandled = this.moveRight(selectedNode); break; - case "ArrowLeft": - isKeyHandled = this.moveLeft(selectedNode); + case "ArrowUp": + isKeyHandled = this.moveUp(selectedNode); break; } } @@ -1863,14 +1863,14 @@ var jqtree = (function (exports) { class NodeElement { constructor(_ref) { let { - $treeElement, getScrollLeft, node, - tabIndex + tabIndex, + treeElement } = _ref; this.getScrollLeft = getScrollLeft; this.tabIndex = tabIndex; - this.$treeElement = $treeElement; + this.treeElement = treeElement; this.init(node); } getTitleSpan() { @@ -1899,14 +1899,9 @@ var jqtree = (function (exports) { init(node) { this.node = node; if (!node.element) { - const element = this.$treeElement.get(0); - if (element) { - node.element = element; - } - } - if (node.element) { - this.element = node.element; + node.element = this.treeElement; } + this.element = node.element; } select(mustSetFocus) { this.element.classList.add("jqtree-selected"); @@ -1927,19 +1922,19 @@ var jqtree = (function (exports) { class FolderElement extends NodeElement { constructor(_ref) { let { - $treeElement, closedIconElement, getScrollLeft, node, openedIconElement, tabIndex, + treeElement, triggerEvent } = _ref; super({ - $treeElement, getScrollLeft, node, - tabIndex + tabIndex, + treeElement }); this.closedIconElement = closedIconElement; this.openedIconElement = openedIconElement; @@ -2919,27 +2914,27 @@ var jqtree = (function (exports) { const getScrollLeft = this.scrollHandler.getScrollLeft.bind(this.scrollHandler); const openedIconElement = this.renderer.openedIconElement; const tabIndex = this.options.tabIndex; - const $treeElement = this.element; + const treeElement = this.element.get(0); const triggerEvent = this.triggerEvent.bind(this); return new FolderElement({ - $treeElement, closedIconElement, getScrollLeft, node, openedIconElement, tabIndex, + treeElement, triggerEvent }); } createNodeElement(node) { const getScrollLeft = this.scrollHandler.getScrollLeft.bind(this.scrollHandler); const tabIndex = this.options.tabIndex; - const $treeElement = this.element; + const treeElement = this.element.get(0); return new NodeElement({ - $treeElement, getScrollLeft, node, - tabIndex + tabIndex, + treeElement }); } deselectCurrentNode() { diff --git a/tree.jquery.debug.js.map b/tree.jquery.debug.js.map index db70053b..be2b1910 100644 --- a/tree.jquery.debug.js.map +++ b/tree.jquery.debug.js.map @@ -1 +1 @@ -{"version":3,"file":"tree.jquery.debug.js","sources":["src/dataLoader.ts","src/position.ts","src/util.ts","src/dragAndDropHandler/dragElement.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/elementsRenderer.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.ts","src/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/saveStateHandler.ts","src/scrollHandler/containerScrollParent.ts","src/scrollHandler/documentScrollParent.ts","src/scrollHandler/createScrollParent.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/simple.widget.ts","src/version.ts","src/tree.jquery.ts"],"sourcesContent":["import { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\n\nexport type HandleFinishedLoading = () => void;\n\ninterface DataLoaderParams {\n dataFilter?: DataFilter;\n loadData: LoadData;\n onLoadFailed?: OnLoadFailed;\n onLoading?: OnLoading;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private onLoadFailed?: OnLoadFailed;\n private onLoading?: OnLoading;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.onLoadFailed = onLoadFailed;\n this.onLoading = onLoading;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode?.element) {\n return parentNode.element;\n } else {\n return this.treeElement;\n }\n }\n\n private notifyLoading(\n isLoading: boolean,\n node: Node | null,\n element: HTMLElement,\n ): void {\n const $el = jQuery(element);\n\n if (this.onLoading) {\n this.onLoading(isLoading, node, $el);\n }\n\n this.triggerEvent(\"tree.loading_data\", {\n $el,\n isLoading,\n node,\n });\n }\n\n private parseData(data: NodeData[] | string): NodeData[] {\n const getParsedData = () => {\n if (typeof data === \"string\") {\n return JSON.parse(data) as NodeData[];\n } else {\n return data;\n }\n };\n\n const parsedData = getParsedData();\n\n if (this.dataFilter) {\n return this.dataFilter(parsedData);\n } else {\n return parsedData;\n }\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private submitRequest(\n urlInfoInput: JQuery.AjaxSettings | string,\n handleSuccess: JQuery.Ajax.SuccessCallback,\n handleError: JQuery.Ajax.ErrorCallback,\n ): void {\n const urlInfo =\n typeof urlInfoInput === \"string\"\n ? { url: urlInfoInput }\n : urlInfoInput;\n\n const ajaxSettings: JQuery.AjaxSettings = {\n cache: false,\n dataType: \"json\",\n error: handleError,\n method: \"GET\",\n success: handleSuccess,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n\n public loadFromUrl(\n urlInfo: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const element = this.getDomElement(parentNode);\n this.addLoadingClass(element);\n this.notifyLoading(true, parentNode, element);\n\n const stopLoading = (): void => {\n this.removeLoadingClass(element);\n this.notifyLoading(false, parentNode, element);\n };\n\n const handleSuccess = (data: NodeData[] | string): void => {\n stopLoading();\n this.loadData(this.parseData(data), parentNode);\n\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n\n const handleError = (jqXHR: JQuery.jqXHR): void => {\n stopLoading();\n\n if (this.onLoadFailed) {\n this.onLoadFailed(jqXHR);\n }\n };\n\n this.submitRequest(urlInfo, handleSuccess, handleError);\n }\n}\n","export enum Position {\n Before = 1,\n After,\n Inside,\n None,\n}\n\nconst positionNames: Record = {\n after: Position.After,\n before: Position.Before,\n inside: Position.Inside,\n none: Position.None,\n};\n\nexport const getPositionName = (position: Position): string => {\n for (const name in positionNames) {\n if (Object.prototype.hasOwnProperty.call(positionNames, name)) {\n if (positionNames[name] === position) {\n return name;\n }\n }\n }\n\n return \"\";\n};\n\nexport const getPosition = (name: string): Position | undefined =>\n positionNames[name];\n","export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const isFunction = (v: unknown): boolean => typeof v === \"function\";\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n\nexport const getOffsetTop = (element: HTMLElement) =>\n getElementPosition(element).top;\n\nexport const getElementPosition = (element: HTMLElement) => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape);\n\n treeElement.appendChild(this.element);\n }\n\n private createElement(nodeName: string, autoEscape: boolean) {\n const element = document.createElement(\"span\");\n element.classList.add(\"jqtree-title\", \"jqtree-dragging\");\n\n if (autoEscape) {\n element.textContent = nodeName;\n } else {\n element.innerHTML = nodeName;\n }\n\n element.style.position = \"absolute\";\n\n return element;\n }\n\n public move(pageX: number, pageY: number): void {\n this.element.style.left = `${pageX - this.offsetX}px`;\n this.element.style.top = `${pageY - this.offsetY}px`;\n }\n\n public remove(): void {\n this.element.remove();\n }\n}\n\nexport default DragElement;\n","import { Node } from \"../node\";\n\ninterface Options {\n handleAfterOpenFolder: (node: Node, nextNode: Node | null) => void;\n handleClosedFolder: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n handleFirstNode: (node: Node) => void;\n handleNode: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n handleOpenFolder: (node: Node, element: HTMLElement) => boolean;\n}\n\nconst iterateVisibleNodes = (\n tree: Node,\n {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n }: Options,\n) => {\n let isFirstNode = true;\n\n const iterate = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open || !node.element) && node.hasChildren();\n\n let element: HTMLElement | null = null;\n\n // Is the element visible?\n if (node.element?.offsetParent) {\n element = node.element;\n\n if (isFirstNode) {\n handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n handleNode(node, nextNode, node.element);\n } else if (node.is_open) {\n if (!handleOpenFolder(node, node.element)) {\n mustIterateInside = false;\n }\n } else {\n handleClosedFolder(node, nextNode, element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n const child = node.children[i];\n\n if (child) {\n if (i === childrenLength - 1) {\n iterate(child, null);\n } else {\n const nextChild = node.children[i + 1];\n\n if (nextChild) {\n iterate(child, nextChild);\n }\n }\n }\n });\n\n if (node.is_open && element) {\n handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n iterate(tree, null);\n};\n\nexport default iterateVisibleNodes;\n","import { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\nimport { HitArea } from \"./types\";\n\ninterface HitPosition {\n node: Node;\n position: Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (node: Node, position: number, top: number) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, Position.None, lastTop);\n } else {\n addHitPosition(node, Position.After, lastTop);\n }\n };\n\n const handleClosedFolder = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move after current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.Inside, top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, Position.After, top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, Position.Before, getOffsetTop(node.element));\n }\n };\n\n const handleNode = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move inside current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.Inside, top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.After, top);\n }\n };\n\n const handleOpenFolder = (node: Node, element: HTMLElement) => {\n if (node === currentNode) {\n // Cannot move inside current item\n\n // Dnd over the current element is not possible: add a position with type None for the top and the bottom.\n const top = getOffsetTop(element);\n const height = element.clientHeight;\n addHitPosition(node, Position.None, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, Position.None, top + height - 5);\n }\n\n // Stop iterating\n return false;\n }\n\n // Cannot move before current item\n if (node.children[0] !== currentNode) {\n addHitPosition(node, Position.Inside, getOffsetTop(element));\n }\n\n // Continue iterating\n return true;\n };\n\n iterateVisibleNodes(tree, {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n });\n\n return hitPositions;\n};\n\nexport const generateHitAreasForGroup = (\n hitAreas: HitArea[],\n positionsInGroup: HitPosition[],\n top: number,\n bottom: number,\n) => {\n // limit positions in group\n const positionCount = Math.min(positionsInGroup.length, 4);\n\n const areaHeight = Math.round((bottom - top) / positionCount);\n let areaTop = top;\n\n for (let i = 0; i < positionCount; i++) {\n const position = positionsInGroup[i] as HitPosition;\n\n if (position.position !== Position.None) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n","import {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\nimport {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../jqtreeOptions\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport { Node } from \"../node\";\nimport NodeElement from \"../nodeElement\";\nimport { getPositionName, Position } from \"../position\";\nimport { getElementPosition } from \"../util\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { DropHint, HitArea } from \"./types\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport class DragAndDropHandler {\n private autoEscape?: boolean;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\n\n private getScrollLeft: GetScrollLeft;\n private getTree: GetTree;\n private onCanMove?: OnCanMove;\n private onCanMoveTo?: OnCanMoveTo;\n private onDragMove?: DragMethod;\n private onDragStop?: DragMethod;\n private onIsMoveHandle?: OnIsMoveHandle;\n private openFolderDelay: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\n\n constructor({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n }: DragAndDropHandlerParams) {\n this.autoEscape = autoEscape;\n this.getNodeElement = getNodeElement;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getScrollLeft = getScrollLeft;\n this.getTree = getTree;\n this.onCanMove = onCanMove;\n this.onCanMoveTo = onCanMoveTo;\n this.onDragMove = onDragMove;\n this.onDragStop = onDragStop;\n this.onIsMoveHandle = onIsMoveHandle;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.slide = slide;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n }\n\n private canMoveToArea(area: HitArea): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n if (!this.currentItem) {\n return false;\n }\n\n const positionName = getPositionName(area.position);\n\n return this.onCanMoveTo(this.currentItem.node, area.node, positionName);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n let low = 0;\n let high = this.hitAreas.length;\n while (low < high) {\n const mid = (low + high) >> 1;\n const area = this.hitAreas[mid];\n\n if (!area) {\n return null;\n }\n\n if (y < area.top) {\n high = mid;\n } else if (y > area.bottom) {\n low = mid + 1;\n } else {\n return area;\n }\n }\n\n return null;\n }\n\n private generateHitAreas(): void {\n const tree = this.getTree();\n\n if (!this.currentItem || !tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n this.currentItem.node,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea &&\n this.hoveredArea.position !== Position.None &&\n this.canMoveToArea(this.hoveredArea)\n ) {\n const movedNode = this.currentItem.node;\n const targetNode = this.hoveredArea.node;\n const position = this.hoveredArea.position;\n const previousParent = movedNode.parent;\n\n if (position === Position.Inside) {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n const event = this.triggerEvent(\"tree.move\", {\n move_info: {\n do_move: doMove,\n moved_node: movedNode,\n original_event: positionInfo.originalEvent,\n position: getPositionName(position),\n previous_parent: previousParent,\n target_node: targetNode,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return (\n node.isFolder() &&\n !node.is_open &&\n area.position === Position.Inside\n );\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this.openNode(folder, this.slide, () => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay,\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const element = positionInfo.target;\n\n if (!this.mustCaptureElement(element)) {\n return null;\n }\n\n if (this.onIsMoveHandle && !this.onIsMoveHandle(jQuery(element))) {\n return null;\n }\n\n let nodeElement = this.getNodeElement(element);\n\n if (nodeElement && this.onCanMove) {\n if (!this.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (!this.currentItem || !this.dragElement) {\n return false;\n }\n\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n\n const area = this.findHoveredArea(\n positionInfo.pageX,\n positionInfo.pageY,\n );\n\n if (area && this.canMoveToArea(area)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(\"jqtree-moving\");\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n this.generateHitAreas();\n\n this.currentItem = this.getNodeElementForNode(\n this.currentItem.node,\n );\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(\"jqtree-moving\");\n }\n }\n }\n}\n","import { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n $element: JQuery;\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n private $element: JQuery;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private isNodeSelected: IsNodeSelected;\n private onCreateLi?: OnCreateLi;\n private rtl?: boolean;\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n\n constructor({\n $element,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.dragAndDrop = dragAndDrop;\n this.$element = $element;\n this.getTree = getTree;\n this.isNodeSelected = isNodeSelected;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.openedIconElement = this.createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this.createButtonElement(closedIcon ?? \"-\");\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\n }\n\n private createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `jqtree_common ${folderClasses}`;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the
  • element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = Boolean(this.isNodeSelected(node));\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const liClasses = [\"jqtree_common\"];\n\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = \"jqtree-title jqtree_common\";\n\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n\n classes += ` jqtree-title-button-${this.buttonLeft ? \"left\" : \"right\"}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this.setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n\n if (this.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this.dragAndDrop) {\n classString += \" jqtree-dnd\";\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `jqtree_common ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [\"jqtree-toggler\", \"jqtree_common\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (this.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n } else {\n classes.push(\"jqtree-toggler-right\");\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [\"jqtree-folder\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n\n return classes.join(\" \");\n }\n\n private setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this.$element.empty();\n\n const tree = this.getTree();\n\n if (this.$element[0] && tree) {\n this.createDomElements(this.$element[0], tree.children, true, 1);\n }\n }\n}\n","import {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ntype KeyboardEventHandler = (event: KeyboardEvent) => boolean;\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getSelectedNode: GetSelectedNode;\n isFocusOnTree: IsFocusOnTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n}\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private getSelectedNode: GetSelectedNode;\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n if (!this.canHandleKeyboard()) {\n return;\n }\n\n let isKeyHandled = false;\n\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n switch (e.key) {\n case \"ArrowDown\":\n isKeyHandled = this.moveDown(selectedNode);\n break;\n\n case \"ArrowUp\":\n isKeyHandled = this.moveUp(selectedNode);\n break;\n\n case \"ArrowRight\":\n isKeyHandled = this.moveRight(selectedNode);\n break;\n\n case \"ArrowLeft\":\n isKeyHandled = this.moveLeft(selectedNode);\n break;\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private handleKeyDownHandler?: KeyboardEventHandler;\n private isFocusOnTree: IsFocusOnTree;\n private keyboardSupport: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n\n constructor({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.getSelectedNode = getSelectedNode;\n this.isFocusOnTree = isFocusOnTree;\n this.keyboardSupport = keyboardSupport;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\n }\n\n private moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this.closeNode(selectedNode);\n return true;\n } else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n }\n\n private moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return false;\n } else {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextVisibleNode());\n } else {\n // Right expands a closed node\n this.openNode(selectedNode);\n return true;\n }\n }\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private selectNode(node: Node | null): boolean {\n if (!node) {\n return false;\n } else {\n this.originalSelectNode(node);\n\n return true;\n }\n }\n\n public deinit(): void {\n if (this.handleKeyDownHandler) {\n document.removeEventListener(\"keydown\", this.handleKeyDownHandler);\n }\n }\n\n public moveDown(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getNextVisibleNode());\n }\n\n public moveUp(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getPreviousVisibleNode());\n }\n}\n","export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n","import { TriggerEvent } from \"./jqtreeMethodTypes\";\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ntype GetNode = (element: HTMLElement) => Node | null;\n\ninterface MouseHandlerParams {\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: (positionInfo: PositionInfo) => boolean;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private element: HTMLElement;\n private getMouseDelay: () => number;\n private getNode: GetNode;\n\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n const event = this.triggerEvent(\"tree.click\", {\n click_event: e,\n node: clickTarget.node,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest(\n \"ul.jqtree-tree .jqtree-element\",\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n click_event: e,\n node,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n click_event: e,\n node: clickTarget.node,\n });\n }\n };\n\n private isMouseDelayMet: boolean;\n private isMouseStarted: boolean;\n private mouseDelayTimer: null | number;\n\n private mouseDown = (e: MouseEvent): void => {\n // Left mouse button?\n if (e.button !== 0) {\n return;\n }\n\n const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n\n if (result && e.cancelable) {\n e.preventDefault();\n }\n };\n\n private mouseDownInfo: null | PositionInfo;\n\n private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private onClickButton: (node: Node) => void;\n private onClickTitle: (node: Node) => void;\n private onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n private onMouseStart: (positionInfo: PositionInfo) => boolean;\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\n\n constructor({\n element,\n getMouseDelay,\n getNode,\n onClickButton,\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu,\n }: MouseHandlerParams) {\n this.element = element;\n this.getMouseDelay = getMouseDelay;\n this.getNode = getNode;\n this.onClickButton = onClickButton;\n this.onClickTitle = onClickTitle;\n this.onMouseCapture = onMouseCapture;\n this.onMouseDrag = onMouseDrag;\n this.onMouseStart = onMouseStart;\n this.onMouseStop = onMouseStop;\n this.triggerEvent = triggerEvent;\n this.useContextMenu = useContextMenu;\n\n element.addEventListener(\"click\", this.handleClick);\n element.addEventListener(\"dblclick\", this.handleDblclick);\n element.addEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n\n if (useContextMenu) {\n element.addEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.isMouseStarted = false;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n }\n\n private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest(\".jqtree-toggler\");\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const jqTreeElement =\n element.closest(\".jqtree-element\");\n\n if (jqTreeElement) {\n const node = this.getNode(jqTreeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n public deinit(): void {\n this.element.removeEventListener(\"click\", this.handleClick);\n this.element.removeEventListener(\"dblclick\", this.handleDblclick);\n\n if (this.useContextMenu) {\n this.element.removeEventListener(\n \"contextmenu\",\n this.handleContextmenu,\n );\n }\n\n this.element.removeEventListener(\"mousedown\", this.mouseDown);\n this.element.removeEventListener(\"touchstart\", this.touchStart);\n this.removeMouseMoveEventListeners();\n }\n}\n\nexport default MouseHandler;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n","import { isNodeRecordWithChildren } from \"./nodeUtils\";\nimport { Position } from \"./position\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport class Node implements INode {\n [key: string]: unknown;\n\n public children: Node[];\n public element?: HTMLElement;\n public id?: NodeId;\n public idMapping: Map;\n public is_loading: boolean;\n public is_open: boolean;\n public isEmptyFolder: boolean;\n public load_on_demand: boolean;\n public name: string;\n public nodeClass?: typeof Node;\n public parent: Node | null;\n public tree?: Node;\n\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n\n if (isRoot) {\n this.idMapping = new Map();\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, node);\n }\n }\n\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /*\n Get the tree as data.\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record[] => {\n return nodes.map((node) => {\n const tmpNode: Record = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1];\n\n if (!lastChild) {\n return null;\n }\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\n }\n }\n }\n\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\n }\n\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\n }\n\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (\n !previousSibling.hasChildren() ||\n !previousSibling.is_open\n ) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n }\n\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n // Init Node from data without making it the root of the tree\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length\n ) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case Position.After: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode) + 1,\n );\n return true;\n }\n return false;\n }\n\n case Position.Before: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode),\n );\n return true;\n }\n return false;\n }\n\n case Position.Inside: {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n\n default:\n return false;\n }\n }\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\n }\n\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setData(object): set attributes of the node\n\n Examples:\n setData('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n}\n","import { DropHint } from \"../dragAndDropHandler/types\";\n\nclass BorderDropHint implements DropHint {\n private hint?: HTMLElement;\n\n constructor(element: HTMLElement, scrollLeft: number) {\n const div = element.querySelector(\":scope > .jqtree-element\");\n\n if (!div) {\n this.hint = undefined;\n return;\n }\n\n const width = Math.max(element.offsetWidth + scrollLeft - 4, 0);\n const height = Math.max(element.clientHeight - 4, 0);\n\n const hint = document.createElement(\"span\");\n hint.className = \"jqtree-border\";\n hint.style.width = `${width}px`;\n hint.style.height = `${height}px`;\n\n this.hint = hint;\n\n div.append(this.hint);\n }\n\n public remove(): void {\n this.hint?.remove();\n }\n}\n\nexport default BorderDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n private node: Node;\n\n constructor(node: Node, element: HTMLElement, position: Position) {\n this.element = element;\n this.node = node;\n this.ghost = this.createGhostElement();\n\n switch (position) {\n case Position.After:\n this.moveAfter();\n break;\n\n case Position.Before:\n this.moveBefore();\n break;\n\n case Position.Inside: {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\n }\n\n private createGhostElement() {\n const ghost = document.createElement(\"li\");\n ghost.className = \"jqtree_common jqtree-ghost\";\n\n const circleSpan = document.createElement(\"span\");\n circleSpan.className = \"jqtree_common jqtree-circle\";\n ghost.append(circleSpan);\n\n const lineSpan = document.createElement(\"span\");\n lineSpan.className = \"jqtree_common jqtree-line\";\n ghost.append(lineSpan);\n\n return ghost;\n }\n\n private moveAfter(): void {\n this.element.after(this.ghost);\n }\n\n private moveBefore(): void {\n this.element.before(this.ghost);\n }\n\n private moveInside(): void {\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n private moveInsideOpenFolder(): void {\n const childElement = this.node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this.ghost);\n }\n }\n\n public remove(): void {\n this.ghost.remove();\n }\n}\n\nexport default GhostDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n $treeElement: JQuery;\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n}\n\nclass NodeElement {\n private $treeElement: JQuery;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n public element: HTMLElement;\n public node: Node;\n\n constructor({\n $treeElement,\n getScrollLeft,\n node,\n tabIndex,\n }: NodeElementParams) {\n this.getScrollLeft = getScrollLeft;\n this.tabIndex = tabIndex;\n this.$treeElement = $treeElement;\n\n this.init(node);\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > span.jqtree-title\",\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === Position.Inside;\n }\n\n public addDropHint(position: number): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.node, this.element, position);\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public init(node: Node): void {\n this.node = node;\n\n if (!node.element) {\n const element = this.$treeElement.get(0);\n\n if (element) {\n node.element = element;\n }\n }\n\n if (node.element) {\n this.element = node.element;\n }\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n}\n\nexport default NodeElement;\n","import { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\nimport { Position } from \"../position\";\nimport NodeElement, { NodeElementParams } from \"./index\";\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: HTMLElement | Text;\n openedIconElement?: HTMLElement | Text;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: HTMLElement | Text;\n private openedIconElement?: HTMLElement | Text;\n private triggerEvent: TriggerEvent;\n\n constructor({\n $treeElement,\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n triggerEvent,\n }: FolderElementParams) {\n super({\n $treeElement,\n getScrollLeft,\n node,\n tabIndex,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.triggerEvent = triggerEvent;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && position === Position.Inside;\n }\n\n private getButton(): HTMLLinkElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > a.jqtree-toggler\",\n ) as HTMLLinkElement;\n }\n\n public close(\n slide = true,\n animationSpeed: JQuery.Duration | undefined = \"fast\",\n ): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n const button = this.getButton();\n button.classList.add(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideUp(animationSpeed, doClose);\n } else {\n jQuery(this.getUl()).hide();\n doClose();\n }\n }\n\n public open(\n onFinished: OnFinishOpenNode | undefined,\n slide = true,\n animationSpeed: JQuery.Duration = \"fast\",\n ): void {\n if (this.node.is_open) {\n return;\n }\n\n this.node.is_open = true;\n\n const button = this.getButton();\n button.classList.remove(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const openedIconElement = this.openedIconElement;\n\n if (openedIconElement) {\n const icon = openedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doOpen = (): void => {\n this.element.classList.remove(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"true\");\n\n if (onFinished) {\n onFinished(this.node);\n }\n\n this.triggerEvent(\"tree.open\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideDown(animationSpeed, doOpen);\n } else {\n jQuery(this.getUl()).show();\n doOpen();\n }\n }\n}\n\nexport default FolderElement;\n","import {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private _supportsLocalStorage: boolean | null;\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else if (this.supportsLocalStorage()) {\n return localStorage.getItem(this.getKeyName());\n } else {\n return null;\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state as unknown as SavedState;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n\n private supportsLocalStorage(): boolean {\n const testSupport = (): boolean => {\n // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n try {\n const key = \"_storage_test\";\n sessionStorage.setItem(key, \"value\");\n sessionStorage.removeItem(key);\n } catch {\n return false;\n }\n\n return true;\n };\n\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n\n return this._supportsLocalStorage;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData) as unknown as SavedState;\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else if (this.supportsLocalStorage()) {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public setInitialStateOnDemand(\n state: SavedState,\n cbFinished: () => void,\n ): void {\n let loadingCount = 0;\n let nodeIds = state.open_nodes;\n\n const openNodes = (): void => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n loadAndOpenNode(node);\n } else {\n this.openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n }\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNode(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n openNodes();\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getElementPosition, getOffsetTop } from '../util'\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ntype VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface Params {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport default class ContainerScrollParent implements ScrollParent {\n private container: HTMLElement;\n private horizontalScrollDirection?: HorizontalScrollDirection;\n private horizontalScrollTimeout?: number;\n private refreshHitAreas: () => void;\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n private verticalScrollDirection?: VerticalScrollDirection;\n private verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: Params) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\n }\n\n private getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n\n const rightEdge = scrollParentOffset.left + this.container.clientWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n this.scrollParentBottom = this.getScrollParentTop() + this.container.clientHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n if (this.scrollParentTop == null) {\n this.scrollParentTop = getOffsetTop(this.container)\n }\n\n return this.scrollParentTop;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return this.container.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n this.container.scrollTop = top;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n this.scrollParentTop = undefined;\n this.scrollParentBottom = undefined;\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getOffsetTop } from \"../util\";\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ntype VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent implements ScrollParent {\n private documentScrollHeight?: number;\n private documentScrollWidth?: number;\n private horizontalScrollDirection?: HorizontalScrollDirection;\n private horizontalScrollTimeout?: number;\n private refreshHitAreas: () => void;\n private treeElement: HTMLElement;\n private verticalScrollDirection?: VerticalScrollDirection;\n private verticalScrollTimeout?: number;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n this.refreshHitAreas = refreshHitAreas;\n this.treeElement = treeElement;\n }\n\n private canScrollDown() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollTop + documentElement.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollLeft + documentElement.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n if (this.documentScrollHeight == null) {\n this.documentScrollHeight = document.documentElement.scrollHeight;\n }\n\n return this.documentScrollHeight;\n }\n\n private getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n if (this.documentScrollWidth == null) {\n this.documentScrollWidth = document.documentElement.scrollWidth;\n }\n\n return this.documentScrollWidth;\n }\n\n private getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = document.documentElement.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n const isNearLeftEdge = pageX - scrollLeft < 20;\n\n if (isNearRightEdge && this.canScrollRight()) {\n return \"right\";\n }\n\n if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = jQuery(document).scrollTop() ?? 0;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n if (windowHeight - (pageY - scrollTop) < 20 && this.canScrollDown()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: distance, top: 0 });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: 0, top: distance });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.horizontalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return document.documentElement.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this.treeElement);\n\n document.documentElement.scrollTop = top + treeTop;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n this.documentScrollHeight = undefined;\n this.documentScrollWidth = undefined;\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n","import { PositionInfo } from \"./mouseUtils\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\nimport { ScrollParent } from \"./scrollHandler/types\";\n\ninterface ScrollHandlerParams {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class ScrollHandler {\n private refreshHitAreas: () => void;\n private scrollParent?: ScrollParent;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: ScrollHandlerParams) {\n this.refreshHitAreas = refreshHitAreas;\n this.scrollParent = undefined;\n this.treeElement = treeElement;\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private getScrollParent(): ScrollParent {\n if (!this.scrollParent) {\n this.scrollParent = createScrollParent(\n this.treeElement,\n this.refreshHitAreas,\n );\n }\n\n return this.scrollParent;\n }\n\n public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n}\n","import { GetNodeById } from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private selectedNodes: Set;\n private selectedSingleNode: Node | null;\n\n constructor({ getNodeById }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.selectedNodes = new Set();\n this.clear();\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes = [];\n\n for (const id in this.selectedNodes) {\n if (\n Object.prototype.hasOwnProperty.call(this.selectedNodes, id)\n ) {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n }\n }\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n}\n","const register = (widgetClass: unknown, widgetName: string): void => {\n const getDataKey = (): string => `simple_widget_${widgetName}`;\n\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string,\n ): null | SimpleWidget => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: unknown): JQuery => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, dataKey);\n\n if (!existingWidget) {\n const simpleWidgetClass = widgetClass as typeof SimpleWidget;\n const widget = new simpleWidgetClass(el, options);\n\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n\n return $el;\n };\n\n const destroyWidget = ($el: JQuery): void => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const widget = getWidgetData(el, dataKey);\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, dataKey);\n }\n };\n\n const callFunction = (\n $el: JQuery,\n functionName: string,\n args: unknown[],\n ): unknown => {\n let result = null;\n\n for (const el of $el.get()) {\n const widget = jQuery.data(el, getDataKey()) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n const simpleWidget = widget as SimpleWidget;\n const widgetFunction = simpleWidget[functionName];\n\n if (widgetFunction && typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args) as unknown;\n }\n }\n }\n\n return result;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (jQuery.fn as any)[widgetName] = function (\n this: JQuery,\n argument1: unknown,\n ...args: unknown[]\n ) {\n if (!argument1) {\n return createWidget(this, null);\n } else if (typeof argument1 === \"object\") {\n const options = argument1 as unknown;\n return createWidget(this, options);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (functionName === \"destroy\") {\n destroyWidget(this);\n return undefined;\n } else if (functionName === \"get_widget_class\") {\n return widgetClass;\n } else {\n return callFunction(this, functionName, args);\n }\n } else {\n return undefined;\n }\n };\n};\n\nexport default class SimpleWidget {\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public $el: JQuery;\n\n public options: WidgetOptions;\n\n constructor(el: HTMLElement, options: WidgetOptions) {\n this.$el = jQuery(el);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const defaults = (this.constructor as any).defaults as WidgetOptions;\n this.options = { ...defaults, ...options };\n }\n\n public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n public deinit(): void {\n //\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n}\n","const version = \"1.8.7\";\n\nexport default version;\n","import DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport { Node } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { getPosition } from \"./position\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport __version__ from \"./version\";\n\ninterface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends SimpleWidget {\n protected static defaults: JQTreeOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: undefined,\n data: undefined,\n dataFilter: undefined,\n dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n onCanMove: undefined, // Can this node be moved?\n onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanSelectNode: undefined,\n onCreateLi: undefined,\n onDragMove: undefined,\n onDragStop: undefined,\n onGetStateFromStorage: undefined,\n onIsMoveHandle: undefined,\n onLoadFailed: undefined,\n onLoading: undefined,\n onSetStateFromStorage: undefined,\n openedIcon: \"▼\",\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (cookie name)\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n useContextMenu: true,\n };\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\n private element: JQuery;\n\n private isInitialized: boolean;\n private keyHandler: KeyHandler;\n private mouseHandler: MouseHandler;\n private renderer: ElementsRenderer;\n private saveStateHandler: SaveStateHandler;\n private scrollHandler: ScrollHandler;\n private selectNodeHandler: SelectNodeHandler;\n private tree: Node;\n\n private connectHandlers() {\n const {\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onLoadFailed,\n onLoading,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this.options;\n\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this.getNodeElement.bind(this);\n const getNodeElementForNode = this.getNodeElementForNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const isFocusOnTree = this.isFocusOnTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this.openNodeInternal.bind(this);\n const refreshElements = this.refreshElements.bind(this);\n const refreshHitAreas = this.refreshHitAreas.bind(this);\n const selectNode = this.selectNode.bind(this);\n const $treeElement = this.element;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const dataLoader = new DataLoader({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n });\n\n const renderer = new ElementsRenderer({\n $element: $treeElement,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this.getNode.bind(this);\n const onMouseCapture = this.mouseCapture.bind(this);\n const onMouseDrag = this.mouseDrag.bind(this);\n const onMouseStart = this.mouseStart.bind(this);\n const onMouseStop = this.mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle: this.doSelectNode.bind(this),\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this.dataLoader = dataLoader;\n this.dndHandler = dndHandler;\n this.keyHandler = keyHandler;\n this.mouseHandler = mouseHandler;\n this.renderer = renderer;\n this.saveStateHandler = saveStateHandler;\n this.scrollHandler = scrollHandler;\n this.selectNodeHandler = selectNodeHandler;\n }\n\n private containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\n }\n\n private createFolderElement(node: Node) {\n const closedIconElement = this.renderer.closedIconElement;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const openedIconElement = this.renderer.openedIconElement;\n const tabIndex = this.options.tabIndex;\n const $treeElement = this.element;\n const triggerEvent = this.triggerEvent.bind(this);\n\n return new FolderElement({\n $treeElement,\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n triggerEvent,\n });\n }\n\n private createNodeElement(node: Node) {\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const $treeElement = this.element;\n\n return new NodeElement({\n $treeElement,\n getScrollLeft,\n node,\n tabIndex,\n });\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n }\n\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n private doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (data) {\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n\n this.triggerEvent(\"tree.load_data\", {\n parent_node: parentNode,\n tree_data: data,\n });\n }\n\n private doLoadDataFromUrl(\n urlInfoParam: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n const urlInfo = urlInfoParam ?? this.getDataUrlInfo(parentNode);\n\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n }\n\n private doSelectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): void {\n const saveState = (): void => {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n };\n\n if (!node) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (this.options.onCanSelectNode) {\n return (\n this.options.selectable &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable;\n }\n };\n\n if (!canSelect()) {\n return;\n }\n\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this.triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node,\n });\n }\n } else {\n const deselectedNode = this.getSelectedNode() || null;\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselected_node: deselectedNode,\n node,\n });\n this.openParents(node);\n }\n\n saveState();\n }\n\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n } else if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n } else if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n } else {\n return 0;\n }\n }\n\n private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl ?? (this.element.data(\"url\") as null | string);\n\n const getUrlFromString = (url: string): JQuery.AjaxSettings => {\n const urlInfo: JQuery.AjaxSettings = { url };\n\n setUrlInfoData(urlInfo);\n\n return urlInfo;\n };\n\n const setUrlInfoData = (urlInfo: JQuery.AjaxSettings): void => {\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n const data = { node: node.id };\n urlInfo.data = data;\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n const data = { selected_node: selectedNodeId };\n urlInfo.data = data;\n }\n }\n };\n\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n } else if (typeof dataUrl === \"string\") {\n return getUrlFromString(dataUrl);\n } else if (dataUrl && typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n } else {\n return null;\n }\n }\n\n private getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n } else {\n // triangle to the right\n return \"►\";\n }\n }\n\n private getNode(element: HTMLElement): Node | null {\n const liElement = element.closest(\"li.jqtree_common\");\n\n if (liElement) {\n return jQuery(liElement).data(\"node\") as Node;\n } else {\n return null;\n }\n }\n\n private getNodeElement(element: HTMLElement): NodeElement | null {\n const node = this.getNode(element);\n if (node) {\n return this.getNodeElementForNode(node);\n } else {\n return null;\n }\n }\n\n private getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return this.createFolderElement(node);\n } else {\n return this.createNodeElement(node);\n }\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\n }\n }\n\n private getRtlOption(): boolean {\n if (this.options.rtl != null) {\n return this.options.rtl;\n } else {\n const dataRtl = this.element.data(\"rtl\") as unknown;\n\n if (\n dataRtl !== null &&\n dataRtl !== false &&\n dataRtl !== undefined\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n private initData(): void {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n } else {\n const dataUrl = this.getDataUrlInfo(null);\n\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n } else {\n this.doLoadData([], null);\n }\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (!this.isInitialized) {\n this.isInitialized = true;\n this.triggerEvent(\"tree.init\");\n }\n };\n\n this.tree = new this.options.nodeClass(\n null,\n true,\n this.options.nodeClass,\n );\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this.refreshElements(null);\n\n if (!mustLoadOnDemand) {\n doInit();\n } else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n }\n\n private isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return Boolean(\n activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.containsElement(activeElement as HTMLElement),\n );\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (!selectedNode) {\n return false;\n } else {\n return subtree === selectedNode || subtree.isParentOf(selectedNode);\n }\n }\n\n private loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n node.is_loading = true;\n\n this.doLoadDataFromUrl(null, node, () => {\n this.openNodeInternal(node, slide, onFinished);\n });\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this.refreshElements(parentNode);\n }\n\n private mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseCapture(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this.dndHandler.mouseDrag(positionInfo);\n\n this.scrollHandler.checkScrolling(positionInfo);\n return result;\n } else {\n return false;\n }\n }\n\n private mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n this.scrollHandler.stopScrolling();\n return this.dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n private openNodeInternal(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished?: OnFinishOpenNode,\n ): void => {\n const folderElement = this.createFolderElement(_node);\n folderElement.open(\n _onFinished,\n _slide,\n this.options.animationSpeed,\n );\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n doOpenNode(parent, false);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this.triggerEvent(\"tree.refresh\");\n }\n\n private saveState(): void {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (node) {\n const nodeElement = this.getNodeElementForNode(node);\n nodeElement.select(mustSetFocus);\n }\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): [boolean, boolean] => {\n // result: is state restored, must load on demand?\n if (!this.options.saveState) {\n return [false, false];\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return [false, false];\n } else {\n const mustLoadOnDemand =\n this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n }\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n } else if (!node.hasChildren()) {\n return false;\n } else {\n node.is_open = true;\n return level !== maxLevel;\n }\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n private setInitialStateOnDemand(cbFinished: () => void): void {\n const restoreState = (): boolean => {\n if (!this.options.saveState) {\n return false;\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return false;\n } else {\n this.saveStateHandler.setInitialStateOnDemand(\n state,\n cbFinished,\n );\n\n return true;\n }\n }\n };\n\n const autoOpenNodes = (): void => {\n const maxLevel = this.getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNodeInternal(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n const openNodes = (): void => {\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n\n return false;\n } else {\n this.openNodeInternal(node, false);\n\n return level !== maxLevel;\n }\n });\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n openNodes();\n };\n\n if (!restoreState()) {\n autoOpenNodes();\n }\n }\n\n private triggerEvent(\n eventName: string,\n values?: Record,\n ): JQuery.Event {\n const event = jQuery.Event(eventName, values);\n this.element.trigger(event);\n return event;\n }\n\n public addNodeAfter(\n newNodeInfo: NodeData,\n existingNode: Node,\n ): Node | null {\n const newNode = existingNode.addAfter(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addNodeBefore(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addBefore(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addParentNode(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addParent(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n public addToSelection(node?: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.addToSelection(node);\n this.openParents(node);\n\n this.getNodeElementForNode(node).select(mustSetFocus ?? true);\n\n this.saveState();\n\n return this.element;\n }\n\n public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.append(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public closeNode(node?: Node, slideParam?: boolean | null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.isFolder() || node.isEmptyFolder) {\n this.createFolderElement(node).close(\n slide,\n this.options.animationSpeed,\n );\n\n this.saveState();\n }\n\n return this.element;\n }\n\n public deinit(): void {\n this.element.empty();\n this.element.off();\n\n this.keyHandler.deinit();\n this.mouseHandler.deinit();\n\n this.tree = new Node({}, true);\n\n super.deinit();\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n public getNodeByHtmlElement(\n inputElement: HTMLElement | JQuery,\n ): Node | null {\n const element =\n inputElement instanceof HTMLElement\n ? inputElement\n : inputElement[0];\n\n if (!element) {\n return null;\n }\n\n return this.getNode(element);\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.tree.getNodeById(nodeId);\n }\n\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n public getSelectedNode(): false | Node {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n public getState(): null | SavedState {\n return this.saveStateHandler.getState();\n }\n\n public getStateFromStorage(): null | SavedState {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n public getTree(): Node {\n return this.tree;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public init(): void {\n super.init();\n\n this.element = this.$el;\n this.isInitialized = false;\n\n this.options.rtl = this.getRtlOption();\n\n if (this.options.closedIcon == null) {\n this.options.closedIcon = this.getDefaultClosedIcon();\n }\n\n this.connectHandlers();\n\n this.initData();\n }\n\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public isNodeSelected(node?: Node): boolean {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n public loadData(data: NodeData[], parentNode: Node | null): JQuery {\n this.doLoadData(data, parentNode);\n return this.element;\n }\n\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n public loadDataFromUrl(\n param1: Node | null | string,\n param2?: HandleFinishedLoading | Node | null,\n param3?: HandleFinishedLoading,\n ): JQuery {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(\n param1,\n param2 as Node | null,\n param3 ?? null,\n );\n } else {\n // first parameter is not url\n this.doLoadDataFromUrl(\n null,\n param1,\n param2 as HandleFinishedLoading | null,\n );\n }\n\n return this.element;\n }\n\n public moveDown(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveDown(selectedNode);\n }\n\n return this.element;\n }\n\n public moveNode(node?: Node, targetNode?: Node, position?: string): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!targetNode) {\n throw Error(PARAM_IS_EMPTY + \"targetNode\");\n }\n\n if (!position) {\n throw Error(PARAM_IS_EMPTY + \"position\");\n }\n\n const positionIndex = getPosition(position);\n\n if (positionIndex !== undefined) {\n this.tree.moveNode(node, targetNode, positionIndex);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public moveUp(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveUp(selectedNode);\n }\n\n return this.element;\n }\n\n public openNode(\n node?: Node,\n param1?: boolean | OnFinishOpenNode,\n param2?: OnFinishOpenNode,\n ): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const parseParams = (): [boolean, OnFinishOpenNode | undefined] => {\n let onFinished: null | OnFinishOpenNode;\n let slide: boolean | null;\n\n if (isFunction(param1)) {\n onFinished = param1 as OnFinishOpenNode;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n if (slide == null) {\n slide = this.options.slide;\n }\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this.openNodeInternal(node, slide, onFinished);\n return this.element;\n }\n\n public prependNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.prepend(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.element;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\n }\n\n public reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public removeFromSelection(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.removeFromSelection(node);\n\n this.getNodeElementForNode(node).deselect();\n this.saveState();\n\n return this.element;\n }\n\n public removeNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.parent) {\n throw Error(\"Node has no parent\");\n }\n\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this.refreshElements(parent);\n\n return this.element;\n }\n\n public scrollToNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.element) {\n return this.element;\n }\n\n const top =\n getOffsetTop(node.element) -\n getOffsetTop(this.$el.get(0) as HTMLElement);\n\n this.scrollHandler.scrollToY(top);\n\n return this.element;\n }\n\n public selectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): JQuery {\n this.doSelectNode(node, optionsParam);\n return this.element;\n }\n\n public setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record)[option] = value;\n return this.element;\n }\n\n public setState(state?: SavedState): JQuery {\n if (state) {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public toggle(node?: Node, slideParam: boolean | null = null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n public updateNode(node?: Node, data?: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!data) {\n return this.element;\n }\n\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data.children &&\n data.children instanceof Array\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children as Node[]);\n }\n }\n\n this.refreshElements(node);\n\n return this.element;\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["DataLoader","constructor","_ref","dataFilter","loadData","onLoadFailed","onLoading","treeElement","triggerEvent","addLoadingClass","element","classList","add","getDomElement","parentNode","notifyLoading","isLoading","node","$el","jQuery","parseData","data","getParsedData","JSON","parse","parsedData","removeLoadingClass","remove","submitRequest","urlInfoInput","handleSuccess","handleError","urlInfo","url","ajaxSettings","cache","dataType","error","method","success","toUpperCase","ajax","loadFromUrl","onFinished","stopLoading","jqXHR","Position","positionNames","after","After","before","Before","inside","Inside","none","None","getPositionName","position","name","Object","prototype","hasOwnProperty","call","getPosition","isInt","n","isFunction","v","getBoolString","value","getOffsetTop","getElementPosition","top","rect","getBoundingClientRect","left","x","window","scrollX","y","scrollY","DragElement","autoEscape","nodeName","offsetX","offsetY","createElement","appendChild","document","textContent","innerHTML","style","move","pageX","pageY","iterateVisibleNodes","tree","handleAfterOpenFolder","handleClosedFolder","handleFirstNode","handleNode","handleOpenFolder","isFirstNode","iterate","nextNode","mustIterateInside","is_open","hasChildren","offsetParent","childrenLength","children","length","forEach","_","i","child","nextChild","generateHitPositions","currentNode","hitPositions","lastTop","addHitPosition","push","height","clientHeight","generateHitAreasForGroup","hitAreas","positionsInGroup","bottom","positionCount","Math","min","areaHeight","round","areaTop","generateHitAreasFromPositions","treeBottom","previousTop","group","generateHitAreas","DragAndDropHandler","getNodeElement","getNodeElementForNode","getScrollLeft","getTree","onCanMove","onCanMoveTo","onDragMove","onDragStop","onIsMoveHandle","openNode","refreshElements","slide","hoveredArea","isDragging","currentItem","canMoveToArea","area","positionName","clear","dragElement","findHoveredArea","dimensions","getTreeDimensions","right","low","high","mid","treePosition","clientWidth","moveItem","positionInfo","movedNode","targetNode","previousParent","parent","doMove","moveNode","event","move_info","do_move","moved_node","original_event","originalEvent","previous_parent","target_node","isDefaultPrevented","mustCaptureElement","mustOpenFolderTimer","isFolder","removeDropHint","previousGhost","removeHitAreas","removeHover","startOpenFolderTimer","folder","openFolder","refresh","updateDropHint","stopOpenFolderTimer","openFolderDelay","openFolderTimer","setTimeout","clearTimeout","nodeElement","addDropHint","mouseCapture","target","mouseDrag","mouseStart","mouseStop","ElementsRenderer","$element","buttonLeft","closedIcon","dragAndDrop","isNodeSelected","onCreateLi","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","attachNodeData","li","div","createTextNode","nodeType","createDomElements","isRootNode","level","ul","createUl","createLi","createFolderLi","isSelected","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","className","setAttribute","buttonLink","cloneNode","titleSpan","createTitleSpan","Boolean","mustShowFolder","isEmptyFolder","createNodeLi","liClasses","classString","join","classes","undefined","setTreeItemAriaAttributes","role","is_loading","render","fromNode","renderFromNode","renderFromRoot","$previousLi","getLevel","empty","KeyHandler","handleKeyDown","e","canHandleKeyboard","isKeyHandled","selectedNode","getSelectedNode","key","moveDown","moveUp","moveRight","moveLeft","preventDefault","closeNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","addEventListener","getParent","getNextVisibleNode","deinit","handleKeyDownHandler","removeEventListener","getPreviousVisibleNode","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","handleClick","clickTarget","getClickTarget","type","onClickButton","stopPropagation","click_event","onClickTitle","handleContextmenu","closest","getNode","handleDblclick","mouseDown","button","result","handleMouseDown","cancelable","mouseMove","handleMouseMove","mouseUp","handleMouseUp","touchEnd","touches","touchMove","touchStart","getMouseDelay","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","passive","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","jqTreeElement","handleStartMouse","removeMouseMoveEventListeners","mouseDelay","startMouseDelayTimer","isNodeRecordWithChildren","Array","Node","nodeData","arguments","isRoot","nodeClass","load_on_demand","setData","idMapping","Map","createNode","getNodeClass","doRemoveChild","splice","getChildIndex","removeNodeFromIndex","loadChildrenFromData","nodeInfo","loadFromData","setParent","addNodeToIndex","addAfter","childIndex","addChildAtPosition","addBefore","addChild","index","id","set","addParent","newParent","originalParent","append","filter","f","indexOf","getData","includeParent","getDataFromNodes","nodes","map","tmpNode","k","getLastChild","lastChild","getNextNode","includeChildren","nextSibling","getNextSibling","nextIndex","getNodeByCallback","callback","getNodeById","nodeId","get","getNodeByName","getNodeByNameMustExist","Error","getNodesByProperty","getPreviousNode","previousSibling","getPreviousSibling","previousIndex","initFromData","addNode","addChildren","childrenData","isParentOf","_iterate","removeChildren","childData","prepend","removeChild","delete","o","BorderDropHint","scrollLeft","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","moveAfter","moveBefore","moveInsideOpenFolder","moveInside","circleSpan","lineSpan","childElement","NodeElement","$treeElement","init","getTitleSpan","getUl","mustShowBorderDropHint","deselect","removeAttribute","blur","select","mustSetFocus","toString","focus","FolderElement","getButton","close","animationSpeed","icon","doClose","slideUp","hide","open","doOpen","slideDown","show","SaveStateHandler","addToSelection","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","getKeyName","loadFromStorage","supportsLocalStorage","localStorage","getItem","openInitialNodes","nodeIds","mustLoadOnDemand","parseState","jsonData","state","selected_node","resetSelection","selectedNodes","selectInitialNodes","selectCount","testSupport","sessionStorage","setItem","removeItem","_supportsLocalStorage","getNodeIdToBeSelected","getStateFromStorage","getState","getOpenNodeIds","openNodes","getSelectedNodeIds","selectedNodeIds","open_nodes","stringify","setInitialState","setInitialStateOnDemand","cbFinished","loadingCount","newNodesIds","loadAndOpenNode","ContainerScrollParent","container","refreshHitAreas","getNewHorizontalScrollDirection","scrollParentOffset","rightEdge","leftEdge","isNearRightEdge","isNearLeftEdge","getNewVerticalScrollDirection","getScrollParentTop","getScrollParentBottom","scrollParentBottom","scrollParentTop","scrollHorizontally","horizontalScrollDirection","distance","scrollBy","behavior","bind","scrollVertically","verticalScrollDirection","checkHorizontalScrolling","newHorizontalScrollDirection","horizontalScrollTimeout","verticalScrollTimeout","checkVerticalScrolling","newVerticalScrollDirection","scrollToY","scrollTop","stopScrolling","DocumentScrollParent","canScrollDown","documentElement","getDocumentScrollHeight","canScrollRight","getDocumentScrollWidth","documentScrollHeight","scrollHeight","documentScrollWidth","scrollWidth","windowWidth","innerWidth","distanceTop","windowHeight","innerHeight","treeTop","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","getParentWithOverflow","parentElement","createScrollParent","tagName","ScrollHandler","scrollParent","getScrollParent","checkScrolling","SelectNodeHandler","Set","selectedSingleNode","getSelectedNodesUnder","has","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","existingWidget","simpleWidgetClass","destroyWidget","destroy","removeData","callFunction","functionName","args","simpleWidget","widgetFunction","apply","fn","argument1","_len","_key","defaults","version","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","connectHandlers","openNodeInternal","selectNodeHandler","dataLoader","saveStateHandler","scrollHandler","dndHandler","keyHandler","renderer","mouseHandler","toggle","doSelectNode","containsElement","createFolderElement","createNodeElement","deselectCurrentNode","deselectNodes","selectedNodesUnderParent","doLoadData","loadSubtree","initTree","parent_node","tree_data","doLoadDataFromUrl","urlInfoParam","getDataUrlInfo","optionsParam","defaultOptions","mustToggle","selectOptions","canSelect","previous_node","deselectedNode","deselected_node","openParents","getAutoOpenMaxLevel","parseInt","getUrlFromString","setUrlInfoData","selectedNodeId","getDefaultClosedIcon","liElement","getRtlOption","dataRtl","initData","doInit","isInitialized","activeElement","isSelectedNodeInSubtree","subtree","loadFolderOnDemand","doOpenNode","_node","_slide","_onFinished","folderElement","mustSelect","selectCurrentNode","restoreState","autoOpenNodes","maxLevel","isRestored","eventName","values","Event","trigger","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","appendNode","parentNodeParam","slideParam","off","getNodeByHtmlElement","inputElement","HTMLElement","getVersion","__version__","loadDataFromUrl","param1","param2","param3","positionIndex","parseParams","prependNode","reload","removeNode","scrollToNode","setOption","option","setState","toJson","updateNode","idIsChanged"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree.jquery.debug.js","sources":["src/dataLoader.ts","src/position.ts","src/util.ts","src/dragAndDropHandler/dragElement.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/elementsRenderer.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.ts","src/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/saveStateHandler.ts","src/scrollHandler/containerScrollParent.ts","src/scrollHandler/documentScrollParent.ts","src/scrollHandler/createScrollParent.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/simple.widget.ts","src/version.ts","src/tree.jquery.ts"],"sourcesContent":["import { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\n\nexport type HandleFinishedLoading = () => void;\n\ninterface DataLoaderParams {\n dataFilter?: DataFilter;\n loadData: LoadData;\n onLoadFailed?: OnLoadFailed;\n onLoading?: OnLoading;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private onLoadFailed?: OnLoadFailed;\n private onLoading?: OnLoading;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.onLoadFailed = onLoadFailed;\n this.onLoading = onLoading;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode?.element) {\n return parentNode.element;\n } else {\n return this.treeElement;\n }\n }\n\n private notifyLoading(\n isLoading: boolean,\n node: Node | null,\n element: HTMLElement,\n ): void {\n const $el = jQuery(element);\n\n if (this.onLoading) {\n this.onLoading(isLoading, node, $el);\n }\n\n this.triggerEvent(\"tree.loading_data\", {\n $el,\n isLoading,\n node,\n });\n }\n\n private parseData(data: NodeData[] | string): NodeData[] {\n const getParsedData = () => {\n if (typeof data === \"string\") {\n return JSON.parse(data) as NodeData[];\n } else {\n return data;\n }\n };\n\n const parsedData = getParsedData();\n\n if (this.dataFilter) {\n return this.dataFilter(parsedData);\n } else {\n return parsedData;\n }\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private submitRequest(\n urlInfoInput: JQuery.AjaxSettings | string,\n handleSuccess: JQuery.Ajax.SuccessCallback,\n handleError: JQuery.Ajax.ErrorCallback,\n ): void {\n const urlInfo =\n typeof urlInfoInput === \"string\"\n ? { url: urlInfoInput }\n : urlInfoInput;\n\n const ajaxSettings: JQuery.AjaxSettings = {\n cache: false,\n dataType: \"json\",\n error: handleError,\n method: \"GET\",\n success: handleSuccess,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n\n public loadFromUrl(\n urlInfo: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const element = this.getDomElement(parentNode);\n this.addLoadingClass(element);\n this.notifyLoading(true, parentNode, element);\n\n const stopLoading = (): void => {\n this.removeLoadingClass(element);\n this.notifyLoading(false, parentNode, element);\n };\n\n const handleSuccess = (data: NodeData[] | string): void => {\n stopLoading();\n this.loadData(this.parseData(data), parentNode);\n\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n\n const handleError = (jqXHR: JQuery.jqXHR): void => {\n stopLoading();\n\n if (this.onLoadFailed) {\n this.onLoadFailed(jqXHR);\n }\n };\n\n this.submitRequest(urlInfo, handleSuccess, handleError);\n }\n}\n","export enum Position {\n Before = 1,\n After,\n Inside,\n None,\n}\n\nconst positionNames: Record = {\n after: Position.After,\n before: Position.Before,\n inside: Position.Inside,\n none: Position.None,\n};\n\nexport const getPositionName = (position: Position): string => {\n for (const name in positionNames) {\n if (Object.prototype.hasOwnProperty.call(positionNames, name)) {\n if (positionNames[name] === position) {\n return name;\n }\n }\n }\n\n return \"\";\n};\n\nexport const getPosition = (name: string): Position | undefined =>\n positionNames[name];\n","export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const isFunction = (v: unknown): boolean => typeof v === \"function\";\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n\nexport const getOffsetTop = (element: HTMLElement) =>\n getElementPosition(element).top;\n\nexport const getElementPosition = (element: HTMLElement) => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape);\n\n treeElement.appendChild(this.element);\n }\n\n private createElement(nodeName: string, autoEscape: boolean) {\n const element = document.createElement(\"span\");\n element.classList.add(\"jqtree-title\", \"jqtree-dragging\");\n\n if (autoEscape) {\n element.textContent = nodeName;\n } else {\n element.innerHTML = nodeName;\n }\n\n element.style.position = \"absolute\";\n\n return element;\n }\n\n public move(pageX: number, pageY: number): void {\n this.element.style.left = `${pageX - this.offsetX}px`;\n this.element.style.top = `${pageY - this.offsetY}px`;\n }\n\n public remove(): void {\n this.element.remove();\n }\n}\n\nexport default DragElement;\n","import { Node } from \"../node\";\n\ninterface Options {\n handleAfterOpenFolder: (node: Node, nextNode: Node | null) => void;\n handleClosedFolder: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n handleFirstNode: (node: Node) => void;\n handleNode: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n handleOpenFolder: (node: Node, element: HTMLElement) => boolean;\n}\n\nconst iterateVisibleNodes = (\n tree: Node,\n {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n }: Options,\n) => {\n let isFirstNode = true;\n\n const iterate = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open || !node.element) && node.hasChildren();\n\n let element: HTMLElement | null = null;\n\n // Is the element visible?\n if (node.element?.offsetParent) {\n element = node.element;\n\n if (isFirstNode) {\n handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n handleNode(node, nextNode, node.element);\n } else if (node.is_open) {\n if (!handleOpenFolder(node, node.element)) {\n mustIterateInside = false;\n }\n } else {\n handleClosedFolder(node, nextNode, element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n const child = node.children[i];\n\n if (child) {\n if (i === childrenLength - 1) {\n iterate(child, null);\n } else {\n const nextChild = node.children[i + 1];\n\n if (nextChild) {\n iterate(child, nextChild);\n }\n }\n }\n });\n\n if (node.is_open && element) {\n handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n iterate(tree, null);\n};\n\nexport default iterateVisibleNodes;\n","import { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\nimport { HitArea } from \"./types\";\n\ninterface HitPosition {\n node: Node;\n position: Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (node: Node, position: number, top: number) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, Position.None, lastTop);\n } else {\n addHitPosition(node, Position.After, lastTop);\n }\n };\n\n const handleClosedFolder = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move after current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.Inside, top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, Position.After, top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, Position.Before, getOffsetTop(node.element));\n }\n };\n\n const handleNode = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move inside current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.Inside, top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.After, top);\n }\n };\n\n const handleOpenFolder = (node: Node, element: HTMLElement) => {\n if (node === currentNode) {\n // Cannot move inside current item\n\n // Dnd over the current element is not possible: add a position with type None for the top and the bottom.\n const top = getOffsetTop(element);\n const height = element.clientHeight;\n addHitPosition(node, Position.None, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, Position.None, top + height - 5);\n }\n\n // Stop iterating\n return false;\n }\n\n // Cannot move before current item\n if (node.children[0] !== currentNode) {\n addHitPosition(node, Position.Inside, getOffsetTop(element));\n }\n\n // Continue iterating\n return true;\n };\n\n iterateVisibleNodes(tree, {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n });\n\n return hitPositions;\n};\n\nexport const generateHitAreasForGroup = (\n hitAreas: HitArea[],\n positionsInGroup: HitPosition[],\n top: number,\n bottom: number,\n) => {\n // limit positions in group\n const positionCount = Math.min(positionsInGroup.length, 4);\n\n const areaHeight = Math.round((bottom - top) / positionCount);\n let areaTop = top;\n\n for (let i = 0; i < positionCount; i++) {\n const position = positionsInGroup[i] as HitPosition;\n\n if (position.position !== Position.None) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n","import {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\nimport {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../jqtreeOptions\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport { Node } from \"../node\";\nimport NodeElement from \"../nodeElement\";\nimport { getPositionName, Position } from \"../position\";\nimport { getElementPosition } from \"../util\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { DropHint, HitArea } from \"./types\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport class DragAndDropHandler {\n private autoEscape?: boolean;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\n\n private getScrollLeft: GetScrollLeft;\n private getTree: GetTree;\n private onCanMove?: OnCanMove;\n private onCanMoveTo?: OnCanMoveTo;\n private onDragMove?: DragMethod;\n private onDragStop?: DragMethod;\n private onIsMoveHandle?: OnIsMoveHandle;\n private openFolderDelay: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\n\n constructor({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n }: DragAndDropHandlerParams) {\n this.autoEscape = autoEscape;\n this.getNodeElement = getNodeElement;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getScrollLeft = getScrollLeft;\n this.getTree = getTree;\n this.onCanMove = onCanMove;\n this.onCanMoveTo = onCanMoveTo;\n this.onDragMove = onDragMove;\n this.onDragStop = onDragStop;\n this.onIsMoveHandle = onIsMoveHandle;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.slide = slide;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n }\n\n private canMoveToArea(area: HitArea): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n if (!this.currentItem) {\n return false;\n }\n\n const positionName = getPositionName(area.position);\n\n return this.onCanMoveTo(this.currentItem.node, area.node, positionName);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n let low = 0;\n let high = this.hitAreas.length;\n while (low < high) {\n const mid = (low + high) >> 1;\n const area = this.hitAreas[mid];\n\n if (!area) {\n return null;\n }\n\n if (y < area.top) {\n high = mid;\n } else if (y > area.bottom) {\n low = mid + 1;\n } else {\n return area;\n }\n }\n\n return null;\n }\n\n private generateHitAreas(): void {\n const tree = this.getTree();\n\n if (!this.currentItem || !tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n this.currentItem.node,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea &&\n this.hoveredArea.position !== Position.None &&\n this.canMoveToArea(this.hoveredArea)\n ) {\n const movedNode = this.currentItem.node;\n const targetNode = this.hoveredArea.node;\n const position = this.hoveredArea.position;\n const previousParent = movedNode.parent;\n\n if (position === Position.Inside) {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n const event = this.triggerEvent(\"tree.move\", {\n move_info: {\n do_move: doMove,\n moved_node: movedNode,\n original_event: positionInfo.originalEvent,\n position: getPositionName(position),\n previous_parent: previousParent,\n target_node: targetNode,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return (\n node.isFolder() &&\n !node.is_open &&\n area.position === Position.Inside\n );\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this.openNode(folder, this.slide, () => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay,\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const element = positionInfo.target;\n\n if (!this.mustCaptureElement(element)) {\n return null;\n }\n\n if (this.onIsMoveHandle && !this.onIsMoveHandle(jQuery(element))) {\n return null;\n }\n\n let nodeElement = this.getNodeElement(element);\n\n if (nodeElement && this.onCanMove) {\n if (!this.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (!this.currentItem || !this.dragElement) {\n return false;\n }\n\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n\n const area = this.findHoveredArea(\n positionInfo.pageX,\n positionInfo.pageY,\n );\n\n if (area && this.canMoveToArea(area)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(\"jqtree-moving\");\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n this.generateHitAreas();\n\n this.currentItem = this.getNodeElementForNode(\n this.currentItem.node,\n );\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(\"jqtree-moving\");\n }\n }\n }\n}\n","import { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n $element: JQuery;\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n private $element: JQuery;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private isNodeSelected: IsNodeSelected;\n private onCreateLi?: OnCreateLi;\n private rtl?: boolean;\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n\n constructor({\n $element,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.dragAndDrop = dragAndDrop;\n this.$element = $element;\n this.getTree = getTree;\n this.isNodeSelected = isNodeSelected;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.openedIconElement = this.createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this.createButtonElement(closedIcon ?? \"-\");\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\n }\n\n private createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `jqtree_common ${folderClasses}`;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the
  • element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = Boolean(this.isNodeSelected(node));\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const liClasses = [\"jqtree_common\"];\n\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = \"jqtree-title jqtree_common\";\n\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n\n classes += ` jqtree-title-button-${this.buttonLeft ? \"left\" : \"right\"}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this.setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n\n if (this.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this.dragAndDrop) {\n classString += \" jqtree-dnd\";\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `jqtree_common ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [\"jqtree-toggler\", \"jqtree_common\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (this.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n } else {\n classes.push(\"jqtree-toggler-right\");\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [\"jqtree-folder\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n\n return classes.join(\" \");\n }\n\n private setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this.$element.empty();\n\n const tree = this.getTree();\n\n if (this.$element[0] && tree) {\n this.createDomElements(this.$element[0], tree.children, true, 1);\n }\n }\n}\n","import {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ntype KeyboardEventHandler = (event: KeyboardEvent) => boolean;\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getSelectedNode: GetSelectedNode;\n isFocusOnTree: IsFocusOnTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n}\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private getSelectedNode: GetSelectedNode;\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n if (!this.canHandleKeyboard()) {\n return;\n }\n\n let isKeyHandled = false;\n\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n switch (e.key) {\n case \"ArrowDown\":\n isKeyHandled = this.moveDown(selectedNode);\n break;\n\n case \"ArrowLeft\":\n isKeyHandled = this.moveLeft(selectedNode);\n break;\n\n case \"ArrowRight\":\n isKeyHandled = this.moveRight(selectedNode);\n break;\n\n case \"ArrowUp\":\n isKeyHandled = this.moveUp(selectedNode);\n break;\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private handleKeyDownHandler?: KeyboardEventHandler;\n private isFocusOnTree: IsFocusOnTree;\n private keyboardSupport: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n\n constructor({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.getSelectedNode = getSelectedNode;\n this.isFocusOnTree = isFocusOnTree;\n this.keyboardSupport = keyboardSupport;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\n }\n\n private moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this.closeNode(selectedNode);\n return true;\n } else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n }\n\n private moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return false;\n } else {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextVisibleNode());\n } else {\n // Right expands a closed node\n this.openNode(selectedNode);\n return true;\n }\n }\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private selectNode(node: Node | null): boolean {\n if (!node) {\n return false;\n } else {\n this.originalSelectNode(node);\n\n return true;\n }\n }\n\n public deinit(): void {\n if (this.handleKeyDownHandler) {\n document.removeEventListener(\"keydown\", this.handleKeyDownHandler);\n }\n }\n\n public moveDown(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getNextVisibleNode());\n }\n\n public moveUp(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getPreviousVisibleNode());\n }\n}\n","export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n","import { TriggerEvent } from \"./jqtreeMethodTypes\";\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ntype GetNode = (element: HTMLElement) => Node | null;\n\ninterface MouseHandlerParams {\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: (positionInfo: PositionInfo) => boolean;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private element: HTMLElement;\n private getMouseDelay: () => number;\n private getNode: GetNode;\n\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n const event = this.triggerEvent(\"tree.click\", {\n click_event: e,\n node: clickTarget.node,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest(\n \"ul.jqtree-tree .jqtree-element\",\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n click_event: e,\n node,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n click_event: e,\n node: clickTarget.node,\n });\n }\n };\n\n private isMouseDelayMet: boolean;\n private isMouseStarted: boolean;\n private mouseDelayTimer: null | number;\n\n private mouseDown = (e: MouseEvent): void => {\n // Left mouse button?\n if (e.button !== 0) {\n return;\n }\n\n const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n\n if (result && e.cancelable) {\n e.preventDefault();\n }\n };\n\n private mouseDownInfo: null | PositionInfo;\n\n private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private onClickButton: (node: Node) => void;\n private onClickTitle: (node: Node) => void;\n private onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n private onMouseStart: (positionInfo: PositionInfo) => boolean;\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\n\n constructor({\n element,\n getMouseDelay,\n getNode,\n onClickButton,\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu,\n }: MouseHandlerParams) {\n this.element = element;\n this.getMouseDelay = getMouseDelay;\n this.getNode = getNode;\n this.onClickButton = onClickButton;\n this.onClickTitle = onClickTitle;\n this.onMouseCapture = onMouseCapture;\n this.onMouseDrag = onMouseDrag;\n this.onMouseStart = onMouseStart;\n this.onMouseStop = onMouseStop;\n this.triggerEvent = triggerEvent;\n this.useContextMenu = useContextMenu;\n\n element.addEventListener(\"click\", this.handleClick);\n element.addEventListener(\"dblclick\", this.handleDblclick);\n element.addEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n\n if (useContextMenu) {\n element.addEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.isMouseStarted = false;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n }\n\n private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest(\".jqtree-toggler\");\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const jqTreeElement =\n element.closest(\".jqtree-element\");\n\n if (jqTreeElement) {\n const node = this.getNode(jqTreeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n public deinit(): void {\n this.element.removeEventListener(\"click\", this.handleClick);\n this.element.removeEventListener(\"dblclick\", this.handleDblclick);\n\n if (this.useContextMenu) {\n this.element.removeEventListener(\n \"contextmenu\",\n this.handleContextmenu,\n );\n }\n\n this.element.removeEventListener(\"mousedown\", this.mouseDown);\n this.element.removeEventListener(\"touchstart\", this.touchStart);\n this.removeMouseMoveEventListeners();\n }\n}\n\nexport default MouseHandler;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n","import { isNodeRecordWithChildren } from \"./nodeUtils\";\nimport { Position } from \"./position\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport class Node implements INode {\n [key: string]: unknown;\n\n public children: Node[];\n public element?: HTMLElement;\n public id?: NodeId;\n public idMapping: Map;\n public is_loading: boolean;\n public is_open: boolean;\n public isEmptyFolder: boolean;\n public load_on_demand: boolean;\n public name: string;\n public nodeClass?: typeof Node;\n public parent: Node | null;\n public tree?: Node;\n\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n\n if (isRoot) {\n this.idMapping = new Map();\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, node);\n }\n }\n\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /*\n Get the tree as data.\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record[] => {\n return nodes.map((node) => {\n const tmpNode: Record = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1];\n\n if (!lastChild) {\n return null;\n }\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\n }\n }\n }\n\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\n }\n\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\n }\n\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (\n !previousSibling.hasChildren() ||\n !previousSibling.is_open\n ) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n }\n\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n // Init Node from data without making it the root of the tree\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length\n ) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case Position.After: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode) + 1,\n );\n return true;\n }\n return false;\n }\n\n case Position.Before: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode),\n );\n return true;\n }\n return false;\n }\n\n case Position.Inside: {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n\n default:\n return false;\n }\n }\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\n }\n\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setData(object): set attributes of the node\n\n Examples:\n setData('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n}\n","import { DropHint } from \"../dragAndDropHandler/types\";\n\nclass BorderDropHint implements DropHint {\n private hint?: HTMLElement;\n\n constructor(element: HTMLElement, scrollLeft: number) {\n const div = element.querySelector(\":scope > .jqtree-element\");\n\n if (!div) {\n this.hint = undefined;\n return;\n }\n\n const width = Math.max(element.offsetWidth + scrollLeft - 4, 0);\n const height = Math.max(element.clientHeight - 4, 0);\n\n const hint = document.createElement(\"span\");\n hint.className = \"jqtree-border\";\n hint.style.width = `${width}px`;\n hint.style.height = `${height}px`;\n\n this.hint = hint;\n\n div.append(this.hint);\n }\n\n public remove(): void {\n this.hint?.remove();\n }\n}\n\nexport default BorderDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n private node: Node;\n\n constructor(node: Node, element: HTMLElement, position: Position) {\n this.element = element;\n this.node = node;\n this.ghost = this.createGhostElement();\n\n switch (position) {\n case Position.After:\n this.moveAfter();\n break;\n\n case Position.Before:\n this.moveBefore();\n break;\n\n case Position.Inside: {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\n }\n\n private createGhostElement() {\n const ghost = document.createElement(\"li\");\n ghost.className = \"jqtree_common jqtree-ghost\";\n\n const circleSpan = document.createElement(\"span\");\n circleSpan.className = \"jqtree_common jqtree-circle\";\n ghost.append(circleSpan);\n\n const lineSpan = document.createElement(\"span\");\n lineSpan.className = \"jqtree_common jqtree-line\";\n ghost.append(lineSpan);\n\n return ghost;\n }\n\n private moveAfter(): void {\n this.element.after(this.ghost);\n }\n\n private moveBefore(): void {\n this.element.before(this.ghost);\n }\n\n private moveInside(): void {\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n private moveInsideOpenFolder(): void {\n const childElement = this.node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this.ghost);\n }\n }\n\n public remove(): void {\n this.ghost.remove();\n }\n}\n\nexport default GhostDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private treeElement: HTMLElement;\n public element: HTMLElement;\n public node: Node;\n\n constructor({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n }: NodeElementParams) {\n this.getScrollLeft = getScrollLeft;\n this.tabIndex = tabIndex;\n this.treeElement = treeElement;\n\n this.init(node);\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > span.jqtree-title\",\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === Position.Inside;\n }\n\n public addDropHint(position: number): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.node, this.element, position);\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public init(node: Node): void {\n this.node = node;\n\n if (!node.element) {\n node.element = this.treeElement;\n }\n\n this.element = node.element;\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n}\n\nexport default NodeElement;\n","import { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\nimport { Position } from \"../position\";\nimport NodeElement, { NodeElementParams } from \"./index\";\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: HTMLElement | Text;\n openedIconElement?: HTMLElement | Text;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: HTMLElement | Text;\n private openedIconElement?: HTMLElement | Text;\n private triggerEvent: TriggerEvent;\n\n constructor({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.triggerEvent = triggerEvent;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && position === Position.Inside;\n }\n\n private getButton(): HTMLLinkElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > a.jqtree-toggler\",\n ) as HTMLLinkElement;\n }\n\n public close(\n slide = true,\n animationSpeed: JQuery.Duration | undefined = \"fast\",\n ): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n const button = this.getButton();\n button.classList.add(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideUp(animationSpeed, doClose);\n } else {\n jQuery(this.getUl()).hide();\n doClose();\n }\n }\n\n public open(\n onFinished: OnFinishOpenNode | undefined,\n slide = true,\n animationSpeed: JQuery.Duration = \"fast\",\n ): void {\n if (this.node.is_open) {\n return;\n }\n\n this.node.is_open = true;\n\n const button = this.getButton();\n button.classList.remove(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const openedIconElement = this.openedIconElement;\n\n if (openedIconElement) {\n const icon = openedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doOpen = (): void => {\n this.element.classList.remove(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"true\");\n\n if (onFinished) {\n onFinished(this.node);\n }\n\n this.triggerEvent(\"tree.open\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideDown(animationSpeed, doOpen);\n } else {\n jQuery(this.getUl()).show();\n doOpen();\n }\n }\n}\n\nexport default FolderElement;\n","import {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private _supportsLocalStorage: boolean | null;\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else if (this.supportsLocalStorage()) {\n return localStorage.getItem(this.getKeyName());\n } else {\n return null;\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state as unknown as SavedState;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n\n private supportsLocalStorage(): boolean {\n const testSupport = (): boolean => {\n // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n try {\n const key = \"_storage_test\";\n sessionStorage.setItem(key, \"value\");\n sessionStorage.removeItem(key);\n } catch {\n return false;\n }\n\n return true;\n };\n\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n\n return this._supportsLocalStorage;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData) as unknown as SavedState;\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else if (this.supportsLocalStorage()) {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public setInitialStateOnDemand(\n state: SavedState,\n cbFinished: () => void,\n ): void {\n let loadingCount = 0;\n let nodeIds = state.open_nodes;\n\n const openNodes = (): void => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n loadAndOpenNode(node);\n } else {\n this.openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n }\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNode(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n openNodes();\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getElementPosition, getOffsetTop } from '../util'\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ntype VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface Params {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport default class ContainerScrollParent implements ScrollParent {\n private container: HTMLElement;\n private horizontalScrollDirection?: HorizontalScrollDirection;\n private horizontalScrollTimeout?: number;\n private refreshHitAreas: () => void;\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n private verticalScrollDirection?: VerticalScrollDirection;\n private verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: Params) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\n }\n\n private getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n\n const rightEdge = scrollParentOffset.left + this.container.clientWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n this.scrollParentBottom = this.getScrollParentTop() + this.container.clientHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n if (this.scrollParentTop == null) {\n this.scrollParentTop = getOffsetTop(this.container)\n }\n\n return this.scrollParentTop;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return this.container.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n this.container.scrollTop = top;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n this.scrollParentTop = undefined;\n this.scrollParentBottom = undefined;\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getOffsetTop } from \"../util\";\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ntype VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent implements ScrollParent {\n private documentScrollHeight?: number;\n private documentScrollWidth?: number;\n private horizontalScrollDirection?: HorizontalScrollDirection;\n private horizontalScrollTimeout?: number;\n private refreshHitAreas: () => void;\n private treeElement: HTMLElement;\n private verticalScrollDirection?: VerticalScrollDirection;\n private verticalScrollTimeout?: number;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n this.refreshHitAreas = refreshHitAreas;\n this.treeElement = treeElement;\n }\n\n private canScrollDown() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollTop + documentElement.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollLeft + documentElement.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n if (this.documentScrollHeight == null) {\n this.documentScrollHeight = document.documentElement.scrollHeight;\n }\n\n return this.documentScrollHeight;\n }\n\n private getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n if (this.documentScrollWidth == null) {\n this.documentScrollWidth = document.documentElement.scrollWidth;\n }\n\n return this.documentScrollWidth;\n }\n\n private getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = document.documentElement.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n const isNearLeftEdge = pageX - scrollLeft < 20;\n\n if (isNearRightEdge && this.canScrollRight()) {\n return \"right\";\n }\n\n if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = jQuery(document).scrollTop() ?? 0;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n if (windowHeight - (pageY - scrollTop) < 20 && this.canScrollDown()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: distance, top: 0 });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: 0, top: distance });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.horizontalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return document.documentElement.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this.treeElement);\n\n document.documentElement.scrollTop = top + treeTop;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n this.documentScrollHeight = undefined;\n this.documentScrollWidth = undefined;\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n","import { PositionInfo } from \"./mouseUtils\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\nimport { ScrollParent } from \"./scrollHandler/types\";\n\ninterface ScrollHandlerParams {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class ScrollHandler {\n private refreshHitAreas: () => void;\n private scrollParent?: ScrollParent;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: ScrollHandlerParams) {\n this.refreshHitAreas = refreshHitAreas;\n this.scrollParent = undefined;\n this.treeElement = treeElement;\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private getScrollParent(): ScrollParent {\n if (!this.scrollParent) {\n this.scrollParent = createScrollParent(\n this.treeElement,\n this.refreshHitAreas,\n );\n }\n\n return this.scrollParent;\n }\n\n public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n}\n","import { GetNodeById } from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private selectedNodes: Set;\n private selectedSingleNode: Node | null;\n\n constructor({ getNodeById }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.selectedNodes = new Set();\n this.clear();\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes = [];\n\n for (const id in this.selectedNodes) {\n if (\n Object.prototype.hasOwnProperty.call(this.selectedNodes, id)\n ) {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n }\n }\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n}\n","const register = (widgetClass: unknown, widgetName: string): void => {\n const getDataKey = (): string => `simple_widget_${widgetName}`;\n\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string,\n ): null | SimpleWidget => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: unknown): JQuery => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, dataKey);\n\n if (!existingWidget) {\n const simpleWidgetClass = widgetClass as typeof SimpleWidget;\n const widget = new simpleWidgetClass(el, options);\n\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n\n return $el;\n };\n\n const destroyWidget = ($el: JQuery): void => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const widget = getWidgetData(el, dataKey);\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, dataKey);\n }\n };\n\n const callFunction = (\n $el: JQuery,\n functionName: string,\n args: unknown[],\n ): unknown => {\n let result = null;\n\n for (const el of $el.get()) {\n const widget = jQuery.data(el, getDataKey()) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n const simpleWidget = widget as SimpleWidget;\n const widgetFunction = simpleWidget[functionName];\n\n if (widgetFunction && typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args) as unknown;\n }\n }\n }\n\n return result;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (jQuery.fn as any)[widgetName] = function (\n this: JQuery,\n argument1: unknown,\n ...args: unknown[]\n ) {\n if (!argument1) {\n return createWidget(this, null);\n } else if (typeof argument1 === \"object\") {\n const options = argument1 as unknown;\n return createWidget(this, options);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (functionName === \"destroy\") {\n destroyWidget(this);\n return undefined;\n } else if (functionName === \"get_widget_class\") {\n return widgetClass;\n } else {\n return callFunction(this, functionName, args);\n }\n } else {\n return undefined;\n }\n };\n};\n\nexport default class SimpleWidget {\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public $el: JQuery;\n\n public options: WidgetOptions;\n\n constructor(el: HTMLElement, options: WidgetOptions) {\n this.$el = jQuery(el);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const defaults = (this.constructor as any).defaults as WidgetOptions;\n this.options = { ...defaults, ...options };\n }\n\n public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n public deinit(): void {\n //\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n}\n","const version = \"1.8.7\";\n\nexport default version;\n","import DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport { Node } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { getPosition } from \"./position\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport __version__ from \"./version\";\n\ninterface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends SimpleWidget {\n protected static defaults: JQTreeOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: undefined,\n data: undefined,\n dataFilter: undefined,\n dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n onCanMove: undefined, // Can this node be moved?\n onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanSelectNode: undefined,\n onCreateLi: undefined,\n onDragMove: undefined,\n onDragStop: undefined,\n onGetStateFromStorage: undefined,\n onIsMoveHandle: undefined,\n onLoadFailed: undefined,\n onLoading: undefined,\n onSetStateFromStorage: undefined,\n openedIcon: \"▼\",\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (cookie name)\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n useContextMenu: true,\n };\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\n private element: JQuery;\n\n private isInitialized: boolean;\n private keyHandler: KeyHandler;\n private mouseHandler: MouseHandler;\n private renderer: ElementsRenderer;\n private saveStateHandler: SaveStateHandler;\n private scrollHandler: ScrollHandler;\n private selectNodeHandler: SelectNodeHandler;\n private tree: Node;\n\n private connectHandlers() {\n const {\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onLoadFailed,\n onLoading,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this.options;\n\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this.getNodeElement.bind(this);\n const getNodeElementForNode = this.getNodeElementForNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const isFocusOnTree = this.isFocusOnTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this.openNodeInternal.bind(this);\n const refreshElements = this.refreshElements.bind(this);\n const refreshHitAreas = this.refreshHitAreas.bind(this);\n const selectNode = this.selectNode.bind(this);\n const $treeElement = this.element;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const dataLoader = new DataLoader({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n });\n\n const renderer = new ElementsRenderer({\n $element: $treeElement,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this.getNode.bind(this);\n const onMouseCapture = this.mouseCapture.bind(this);\n const onMouseDrag = this.mouseDrag.bind(this);\n const onMouseStart = this.mouseStart.bind(this);\n const onMouseStop = this.mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle: this.doSelectNode.bind(this),\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this.dataLoader = dataLoader;\n this.dndHandler = dndHandler;\n this.keyHandler = keyHandler;\n this.mouseHandler = mouseHandler;\n this.renderer = renderer;\n this.saveStateHandler = saveStateHandler;\n this.scrollHandler = scrollHandler;\n this.selectNodeHandler = selectNodeHandler;\n }\n\n private containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\n }\n\n private createFolderElement(node: Node) {\n const closedIconElement = this.renderer.closedIconElement;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const openedIconElement = this.renderer.openedIconElement;\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n return new FolderElement({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n });\n }\n\n private createNodeElement(node: Node) {\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n }\n\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n private doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (data) {\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n\n this.triggerEvent(\"tree.load_data\", {\n parent_node: parentNode,\n tree_data: data,\n });\n }\n\n private doLoadDataFromUrl(\n urlInfoParam: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n const urlInfo = urlInfoParam ?? this.getDataUrlInfo(parentNode);\n\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n }\n\n private doSelectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): void {\n const saveState = (): void => {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n };\n\n if (!node) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (this.options.onCanSelectNode) {\n return (\n this.options.selectable &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable;\n }\n };\n\n if (!canSelect()) {\n return;\n }\n\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this.triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node,\n });\n }\n } else {\n const deselectedNode = this.getSelectedNode() || null;\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselected_node: deselectedNode,\n node,\n });\n this.openParents(node);\n }\n\n saveState();\n }\n\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n } else if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n } else if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n } else {\n return 0;\n }\n }\n\n private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl ?? (this.element.data(\"url\") as null | string);\n\n const getUrlFromString = (url: string): JQuery.AjaxSettings => {\n const urlInfo: JQuery.AjaxSettings = { url };\n\n setUrlInfoData(urlInfo);\n\n return urlInfo;\n };\n\n const setUrlInfoData = (urlInfo: JQuery.AjaxSettings): void => {\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n const data = { node: node.id };\n urlInfo.data = data;\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n const data = { selected_node: selectedNodeId };\n urlInfo.data = data;\n }\n }\n };\n\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n } else if (typeof dataUrl === \"string\") {\n return getUrlFromString(dataUrl);\n } else if (dataUrl && typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n } else {\n return null;\n }\n }\n\n private getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n } else {\n // triangle to the right\n return \"►\";\n }\n }\n\n private getNode(element: HTMLElement): Node | null {\n const liElement = element.closest(\"li.jqtree_common\");\n\n if (liElement) {\n return jQuery(liElement).data(\"node\") as Node;\n } else {\n return null;\n }\n }\n\n private getNodeElement(element: HTMLElement): NodeElement | null {\n const node = this.getNode(element);\n if (node) {\n return this.getNodeElementForNode(node);\n } else {\n return null;\n }\n }\n\n private getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return this.createFolderElement(node);\n } else {\n return this.createNodeElement(node);\n }\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\n }\n }\n\n private getRtlOption(): boolean {\n if (this.options.rtl != null) {\n return this.options.rtl;\n } else {\n const dataRtl = this.element.data(\"rtl\") as unknown;\n\n if (\n dataRtl !== null &&\n dataRtl !== false &&\n dataRtl !== undefined\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n private initData(): void {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n } else {\n const dataUrl = this.getDataUrlInfo(null);\n\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n } else {\n this.doLoadData([], null);\n }\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (!this.isInitialized) {\n this.isInitialized = true;\n this.triggerEvent(\"tree.init\");\n }\n };\n\n this.tree = new this.options.nodeClass(\n null,\n true,\n this.options.nodeClass,\n );\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this.refreshElements(null);\n\n if (!mustLoadOnDemand) {\n doInit();\n } else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n }\n\n private isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return Boolean(\n activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.containsElement(activeElement as HTMLElement),\n );\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (!selectedNode) {\n return false;\n } else {\n return subtree === selectedNode || subtree.isParentOf(selectedNode);\n }\n }\n\n private loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n node.is_loading = true;\n\n this.doLoadDataFromUrl(null, node, () => {\n this.openNodeInternal(node, slide, onFinished);\n });\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this.refreshElements(parentNode);\n }\n\n private mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseCapture(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this.dndHandler.mouseDrag(positionInfo);\n\n this.scrollHandler.checkScrolling(positionInfo);\n return result;\n } else {\n return false;\n }\n }\n\n private mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n this.scrollHandler.stopScrolling();\n return this.dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n private openNodeInternal(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished?: OnFinishOpenNode,\n ): void => {\n const folderElement = this.createFolderElement(_node);\n folderElement.open(\n _onFinished,\n _slide,\n this.options.animationSpeed,\n );\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n doOpenNode(parent, false);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this.triggerEvent(\"tree.refresh\");\n }\n\n private saveState(): void {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (node) {\n const nodeElement = this.getNodeElementForNode(node);\n nodeElement.select(mustSetFocus);\n }\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): [boolean, boolean] => {\n // result: is state restored, must load on demand?\n if (!this.options.saveState) {\n return [false, false];\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return [false, false];\n } else {\n const mustLoadOnDemand =\n this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n }\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n } else if (!node.hasChildren()) {\n return false;\n } else {\n node.is_open = true;\n return level !== maxLevel;\n }\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n private setInitialStateOnDemand(cbFinished: () => void): void {\n const restoreState = (): boolean => {\n if (!this.options.saveState) {\n return false;\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return false;\n } else {\n this.saveStateHandler.setInitialStateOnDemand(\n state,\n cbFinished,\n );\n\n return true;\n }\n }\n };\n\n const autoOpenNodes = (): void => {\n const maxLevel = this.getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNodeInternal(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n const openNodes = (): void => {\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n\n return false;\n } else {\n this.openNodeInternal(node, false);\n\n return level !== maxLevel;\n }\n });\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n openNodes();\n };\n\n if (!restoreState()) {\n autoOpenNodes();\n }\n }\n\n private triggerEvent(\n eventName: string,\n values?: Record,\n ): JQuery.Event {\n const event = jQuery.Event(eventName, values);\n this.element.trigger(event);\n return event;\n }\n\n public addNodeAfter(\n newNodeInfo: NodeData,\n existingNode: Node,\n ): Node | null {\n const newNode = existingNode.addAfter(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addNodeBefore(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addBefore(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addParentNode(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addParent(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n public addToSelection(node?: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.addToSelection(node);\n this.openParents(node);\n\n this.getNodeElementForNode(node).select(mustSetFocus ?? true);\n\n this.saveState();\n\n return this.element;\n }\n\n public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.append(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public closeNode(node?: Node, slideParam?: boolean | null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.isFolder() || node.isEmptyFolder) {\n this.createFolderElement(node).close(\n slide,\n this.options.animationSpeed,\n );\n\n this.saveState();\n }\n\n return this.element;\n }\n\n public deinit(): void {\n this.element.empty();\n this.element.off();\n\n this.keyHandler.deinit();\n this.mouseHandler.deinit();\n\n this.tree = new Node({}, true);\n\n super.deinit();\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n public getNodeByHtmlElement(\n inputElement: HTMLElement | JQuery,\n ): Node | null {\n const element =\n inputElement instanceof HTMLElement\n ? inputElement\n : inputElement[0];\n\n if (!element) {\n return null;\n }\n\n return this.getNode(element);\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.tree.getNodeById(nodeId);\n }\n\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n public getSelectedNode(): false | Node {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n public getState(): null | SavedState {\n return this.saveStateHandler.getState();\n }\n\n public getStateFromStorage(): null | SavedState {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n public getTree(): Node {\n return this.tree;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public init(): void {\n super.init();\n\n this.element = this.$el;\n this.isInitialized = false;\n\n this.options.rtl = this.getRtlOption();\n\n if (this.options.closedIcon == null) {\n this.options.closedIcon = this.getDefaultClosedIcon();\n }\n\n this.connectHandlers();\n\n this.initData();\n }\n\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public isNodeSelected(node?: Node): boolean {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n public loadData(data: NodeData[], parentNode: Node | null): JQuery {\n this.doLoadData(data, parentNode);\n return this.element;\n }\n\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n public loadDataFromUrl(\n param1: Node | null | string,\n param2?: HandleFinishedLoading | Node | null,\n param3?: HandleFinishedLoading,\n ): JQuery {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(\n param1,\n param2 as Node | null,\n param3 ?? null,\n );\n } else {\n // first parameter is not url\n this.doLoadDataFromUrl(\n null,\n param1,\n param2 as HandleFinishedLoading | null,\n );\n }\n\n return this.element;\n }\n\n public moveDown(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveDown(selectedNode);\n }\n\n return this.element;\n }\n\n public moveNode(node?: Node, targetNode?: Node, position?: string): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!targetNode) {\n throw Error(PARAM_IS_EMPTY + \"targetNode\");\n }\n\n if (!position) {\n throw Error(PARAM_IS_EMPTY + \"position\");\n }\n\n const positionIndex = getPosition(position);\n\n if (positionIndex !== undefined) {\n this.tree.moveNode(node, targetNode, positionIndex);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public moveUp(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveUp(selectedNode);\n }\n\n return this.element;\n }\n\n public openNode(\n node?: Node,\n param1?: boolean | OnFinishOpenNode,\n param2?: OnFinishOpenNode,\n ): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const parseParams = (): [boolean, OnFinishOpenNode | undefined] => {\n let onFinished: null | OnFinishOpenNode;\n let slide: boolean | null;\n\n if (isFunction(param1)) {\n onFinished = param1 as OnFinishOpenNode;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n if (slide == null) {\n slide = this.options.slide;\n }\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this.openNodeInternal(node, slide, onFinished);\n return this.element;\n }\n\n public prependNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.prepend(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.element;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\n }\n\n public reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public removeFromSelection(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.removeFromSelection(node);\n\n this.getNodeElementForNode(node).deselect();\n this.saveState();\n\n return this.element;\n }\n\n public removeNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.parent) {\n throw Error(\"Node has no parent\");\n }\n\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this.refreshElements(parent);\n\n return this.element;\n }\n\n public scrollToNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.element) {\n return this.element;\n }\n\n const top =\n getOffsetTop(node.element) -\n getOffsetTop(this.$el.get(0) as HTMLElement);\n\n this.scrollHandler.scrollToY(top);\n\n return this.element;\n }\n\n public selectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): JQuery {\n this.doSelectNode(node, optionsParam);\n return this.element;\n }\n\n public setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record)[option] = value;\n return this.element;\n }\n\n public setState(state?: SavedState): JQuery {\n if (state) {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public toggle(node?: Node, slideParam: boolean | null = null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n public updateNode(node?: Node, data?: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!data) {\n return this.element;\n }\n\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data.children &&\n data.children instanceof Array\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children as Node[]);\n }\n }\n\n this.refreshElements(node);\n\n return this.element;\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["DataLoader","constructor","_ref","dataFilter","loadData","onLoadFailed","onLoading","treeElement","triggerEvent","addLoadingClass","element","classList","add","getDomElement","parentNode","notifyLoading","isLoading","node","$el","jQuery","parseData","data","getParsedData","JSON","parse","parsedData","removeLoadingClass","remove","submitRequest","urlInfoInput","handleSuccess","handleError","urlInfo","url","ajaxSettings","cache","dataType","error","method","success","toUpperCase","ajax","loadFromUrl","onFinished","stopLoading","jqXHR","Position","positionNames","after","After","before","Before","inside","Inside","none","None","getPositionName","position","name","Object","prototype","hasOwnProperty","call","getPosition","isInt","n","isFunction","v","getBoolString","value","getOffsetTop","getElementPosition","top","rect","getBoundingClientRect","left","x","window","scrollX","y","scrollY","DragElement","autoEscape","nodeName","offsetX","offsetY","createElement","appendChild","document","textContent","innerHTML","style","move","pageX","pageY","iterateVisibleNodes","tree","handleAfterOpenFolder","handleClosedFolder","handleFirstNode","handleNode","handleOpenFolder","isFirstNode","iterate","nextNode","mustIterateInside","is_open","hasChildren","offsetParent","childrenLength","children","length","forEach","_","i","child","nextChild","generateHitPositions","currentNode","hitPositions","lastTop","addHitPosition","push","height","clientHeight","generateHitAreasForGroup","hitAreas","positionsInGroup","bottom","positionCount","Math","min","areaHeight","round","areaTop","generateHitAreasFromPositions","treeBottom","previousTop","group","generateHitAreas","DragAndDropHandler","getNodeElement","getNodeElementForNode","getScrollLeft","getTree","onCanMove","onCanMoveTo","onDragMove","onDragStop","onIsMoveHandle","openNode","refreshElements","slide","hoveredArea","isDragging","currentItem","canMoveToArea","area","positionName","clear","dragElement","findHoveredArea","dimensions","getTreeDimensions","right","low","high","mid","treePosition","clientWidth","moveItem","positionInfo","movedNode","targetNode","previousParent","parent","doMove","moveNode","event","move_info","do_move","moved_node","original_event","originalEvent","previous_parent","target_node","isDefaultPrevented","mustCaptureElement","mustOpenFolderTimer","isFolder","removeDropHint","previousGhost","removeHitAreas","removeHover","startOpenFolderTimer","folder","openFolder","refresh","updateDropHint","stopOpenFolderTimer","openFolderDelay","openFolderTimer","setTimeout","clearTimeout","nodeElement","addDropHint","mouseCapture","target","mouseDrag","mouseStart","mouseStop","ElementsRenderer","$element","buttonLeft","closedIcon","dragAndDrop","isNodeSelected","onCreateLi","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","attachNodeData","li","div","createTextNode","nodeType","createDomElements","isRootNode","level","ul","createUl","createLi","createFolderLi","isSelected","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","className","setAttribute","buttonLink","cloneNode","titleSpan","createTitleSpan","Boolean","mustShowFolder","isEmptyFolder","createNodeLi","liClasses","classString","join","classes","undefined","setTreeItemAriaAttributes","role","is_loading","render","fromNode","renderFromNode","renderFromRoot","$previousLi","getLevel","empty","KeyHandler","handleKeyDown","e","canHandleKeyboard","isKeyHandled","selectedNode","getSelectedNode","key","moveDown","moveLeft","moveRight","moveUp","preventDefault","closeNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","addEventListener","getParent","getNextVisibleNode","deinit","handleKeyDownHandler","removeEventListener","getPreviousVisibleNode","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","handleClick","clickTarget","getClickTarget","type","onClickButton","stopPropagation","click_event","onClickTitle","handleContextmenu","closest","getNode","handleDblclick","mouseDown","button","result","handleMouseDown","cancelable","mouseMove","handleMouseMove","mouseUp","handleMouseUp","touchEnd","touches","touchMove","touchStart","getMouseDelay","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","passive","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","jqTreeElement","handleStartMouse","removeMouseMoveEventListeners","mouseDelay","startMouseDelayTimer","isNodeRecordWithChildren","Array","Node","nodeData","arguments","isRoot","nodeClass","load_on_demand","setData","idMapping","Map","createNode","getNodeClass","doRemoveChild","splice","getChildIndex","removeNodeFromIndex","loadChildrenFromData","nodeInfo","loadFromData","setParent","addNodeToIndex","addAfter","childIndex","addChildAtPosition","addBefore","addChild","index","id","set","addParent","newParent","originalParent","append","filter","f","indexOf","getData","includeParent","getDataFromNodes","nodes","map","tmpNode","k","getLastChild","lastChild","getNextNode","includeChildren","nextSibling","getNextSibling","nextIndex","getNodeByCallback","callback","getNodeById","nodeId","get","getNodeByName","getNodeByNameMustExist","Error","getNodesByProperty","getPreviousNode","previousSibling","getPreviousSibling","previousIndex","initFromData","addNode","addChildren","childrenData","isParentOf","_iterate","removeChildren","childData","prepend","removeChild","delete","o","BorderDropHint","scrollLeft","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","moveAfter","moveBefore","moveInsideOpenFolder","moveInside","circleSpan","lineSpan","childElement","NodeElement","init","getTitleSpan","getUl","mustShowBorderDropHint","deselect","removeAttribute","blur","select","mustSetFocus","toString","focus","FolderElement","getButton","close","animationSpeed","icon","doClose","slideUp","hide","open","doOpen","slideDown","show","SaveStateHandler","addToSelection","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","getKeyName","loadFromStorage","supportsLocalStorage","localStorage","getItem","openInitialNodes","nodeIds","mustLoadOnDemand","parseState","jsonData","state","selected_node","resetSelection","selectedNodes","selectInitialNodes","selectCount","testSupport","sessionStorage","setItem","removeItem","_supportsLocalStorage","getNodeIdToBeSelected","getStateFromStorage","getState","getOpenNodeIds","openNodes","getSelectedNodeIds","selectedNodeIds","open_nodes","stringify","setInitialState","setInitialStateOnDemand","cbFinished","loadingCount","newNodesIds","loadAndOpenNode","ContainerScrollParent","container","refreshHitAreas","getNewHorizontalScrollDirection","scrollParentOffset","rightEdge","leftEdge","isNearRightEdge","isNearLeftEdge","getNewVerticalScrollDirection","getScrollParentTop","getScrollParentBottom","scrollParentBottom","scrollParentTop","scrollHorizontally","horizontalScrollDirection","distance","scrollBy","behavior","bind","scrollVertically","verticalScrollDirection","checkHorizontalScrolling","newHorizontalScrollDirection","horizontalScrollTimeout","verticalScrollTimeout","checkVerticalScrolling","newVerticalScrollDirection","scrollToY","scrollTop","stopScrolling","DocumentScrollParent","canScrollDown","documentElement","getDocumentScrollHeight","canScrollRight","getDocumentScrollWidth","documentScrollHeight","scrollHeight","documentScrollWidth","scrollWidth","windowWidth","innerWidth","distanceTop","windowHeight","innerHeight","treeTop","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","getParentWithOverflow","parentElement","createScrollParent","tagName","ScrollHandler","scrollParent","getScrollParent","checkScrolling","SelectNodeHandler","Set","selectedSingleNode","getSelectedNodesUnder","has","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","existingWidget","simpleWidgetClass","destroyWidget","destroy","removeData","callFunction","functionName","args","simpleWidget","widgetFunction","apply","fn","argument1","_len","_key","defaults","version","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","connectHandlers","openNodeInternal","$treeElement","selectNodeHandler","dataLoader","saveStateHandler","scrollHandler","dndHandler","keyHandler","renderer","mouseHandler","toggle","doSelectNode","containsElement","createFolderElement","createNodeElement","deselectCurrentNode","deselectNodes","selectedNodesUnderParent","doLoadData","loadSubtree","initTree","parent_node","tree_data","doLoadDataFromUrl","urlInfoParam","getDataUrlInfo","optionsParam","defaultOptions","mustToggle","selectOptions","canSelect","previous_node","deselectedNode","deselected_node","openParents","getAutoOpenMaxLevel","parseInt","getUrlFromString","setUrlInfoData","selectedNodeId","getDefaultClosedIcon","liElement","getRtlOption","dataRtl","initData","doInit","isInitialized","activeElement","isSelectedNodeInSubtree","subtree","loadFolderOnDemand","doOpenNode","_node","_slide","_onFinished","folderElement","mustSelect","selectCurrentNode","restoreState","autoOpenNodes","maxLevel","isRestored","eventName","values","Event","trigger","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","appendNode","parentNodeParam","slideParam","off","getNodeByHtmlElement","inputElement","HTMLElement","getVersion","__version__","loadDataFromUrl","param1","param2","param3","positionIndex","parseParams","prependNode","reload","removeNode","scrollToNode","setOption","option","setState","toJson","updateNode","idIsChanged"],"mappings":"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"} \ No newline at end of file diff --git a/tree.jquery.js b/tree.jquery.js index 118da7f5..e4c87e54 100644 --- a/tree.jquery.js +++ b/tree.jquery.js @@ -17,5 +17,5 @@ limitations under the License. @license */ -var jqtree=function(e){"use strict";class t{constructor(e){let{dataFilter:t,loadData:o,onLoadFailed:n,onLoading:r,treeElement:s,triggerEvent:i}=e;this.dataFilter=t,this.loadData=o,this.onLoadFailed=n,this.onLoading=r,this.treeElement=s,this.triggerEvent=i}addLoadingClass(e){e.classList.add("jqtree-loading")}getDomElement(e){return e?.element?e.element:this.treeElement}notifyLoading(e,t,o){const n=jQuery(o);this.onLoading&&this.onLoading(e,t,n),this.triggerEvent("tree.loading_data",{$el:n,isLoading:e,node:t})}parseData(e){const t="string"==typeof e?JSON.parse(e):e;return this.dataFilter?this.dataFilter(t):t}removeLoadingClass(e){e.classList.remove("jqtree-loading")}submitRequest(e,t,o){const n={cache:!1,dataType:"json",error:o,method:"GET",success:t,..."string"==typeof e?{url:e}:e};n.method=n.method?.toUpperCase()??"GET",jQuery.ajax(n)}loadFromUrl(e,t,o){if(!e)return;const n=this.getDomElement(t);this.addLoadingClass(n),this.notifyLoading(!0,t,n);const r=()=>{this.removeLoadingClass(n),this.notifyLoading(!1,t,n)};this.submitRequest(e,(e=>{r(),this.loadData(this.parseData(e),t),o&&"function"==typeof o&&o()}),(e=>{r(),this.onLoadFailed&&this.onLoadFailed(e)}))}}let o=function(e){return e[e.Before=1]="Before",e[e.After=2]="After",e[e.Inside=3]="Inside",e[e.None=4]="None",e}({});const n={after:o.After,before:o.Before,inside:o.Inside,none:o.None},r=e=>{for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&n[t]===e)return t;return""},s=e=>e?"true":"false",i=e=>l(e).top,l=e=>{const t=e.getBoundingClientRect();return{left:t.x+window.scrollX,top:t.y+window.scrollY}};class d{constructor(e){let{autoEscape:t,nodeName:o,offsetX:n,offsetY:r,treeElement:s}=e;this.offsetX=n,this.offsetY=r,this.element=this.createElement(o,t),s.appendChild(this.element)}createElement(e,t){const o=document.createElement("span");return o.classList.add("jqtree-title","jqtree-dragging"),t?o.textContent=e:o.innerHTML=e,o.style.position="absolute",o}move(e,t){this.element.style.left=e-this.offsetX+"px",this.element.style.top=t-this.offsetY+"px"}remove(){this.element.remove()}}const a=(e,t,n,r)=>{const s=Math.min(t.length,4),i=Math.round((r-n)/s);let l=n;for(let n=0;n((e,t)=>{if(!e.length)return[];let o=e[0].top,n=[];const r=[];for(const t of e)t.top!==o&&n.length&&(a(r,n,o,t.top),o=t.top,n=[]),n.push(t);return a(r,n,o,t),r})(((e,t)=>{const n=[];let r=0;const s=(e,t,o)=>{n.push({node:e,position:t,top:o}),r=o};return((e,t)=>{let{handleAfterOpenFolder:o,handleClosedFolder:n,handleFirstNode:r,handleNode:s,handleOpenFolder:i}=t,l=!0;const d=(e,t)=>{let a=(e.is_open||!e.element)&&e.hasChildren(),h=null;if(e.element?.offsetParent&&(h=e.element,l&&(r(e),l=!1),e.hasChildren()?e.is_open?i(e,e.element)||(a=!1):n(e,t,h):s(e,t,e.element)),a){const n=e.children.length;e.children.forEach(((t,o)=>{const r=e.children[o];if(r)if(o===n-1)d(r,null);else{const t=e.children[o+1];t&&d(r,t)}})),e.is_open&&h&&o(e,t)}};d(e,null)})(e,{handleAfterOpenFolder:(e,n)=>{s(e,e===t||n===t?o.None:o.After,r)},handleClosedFolder:(e,n,r)=>{const l=i(r);e===t?s(e,o.None,l):(s(e,o.Inside,l),n!==t&&s(e,o.After,l))},handleFirstNode:e=>{e!==t&&e.element&&s(e,o.Before,i(e.element))},handleNode:(e,n,r)=>{const l=i(r);s(e,e===t?o.None:o.Inside,l),s(e,n===t||e===t?o.None:o.After,l)},handleOpenFolder:(e,n)=>{if(e===t){const t=i(n),r=n.clientHeight;return s(e,o.None,t),r>5&&s(e,o.None,t+r-5),!1}return e.children[0]!==t&&s(e,o.Inside,i(n)),!0}}),n})(e,t),n);class c{constructor(e){let{autoEscape:t,getNodeElement:o,getNodeElementForNode:n,getScrollLeft:r,getTree:s,onCanMove:i,onCanMoveTo:l,onDragMove:d,onDragStop:a,onIsMoveHandle:h,openNode:c,refreshElements:u,slide:m,treeElement:g,triggerEvent:p}=e;this.autoEscape=t,this.getNodeElement=o,this.getNodeElementForNode=n,this.getScrollLeft=r,this.getTree=s,this.onCanMove=i,this.onCanMoveTo=l,this.onDragMove=d,this.onDragStop=a,this.onIsMoveHandle=h,this.openNode=c,this.refreshElements=u,this.slide=m,this.treeElement=g,this.triggerEvent=p,this.hoveredArea=null,this.hitAreas=[],this.isDragging=!1,this.currentItem=null}canMoveToArea(e){if(!this.onCanMoveTo)return!0;if(!this.currentItem)return!1;const t=r(e.position);return this.onCanMoveTo(this.currentItem.node,e.node,t)}clear(){this.dragElement&&(this.dragElement.remove(),this.dragElement=null)}findHoveredArea(e,t){const o=this.getTreeDimensions();if(eo.right||t>o.bottom)return null;let n=0,r=this.hitAreas.length;for(;n>1,o=this.hitAreas[e];if(!o)return null;if(to.bottom))return o;n=e+1}}return null}generateHitAreas(){const e=this.getTree();this.currentItem&&e?this.hitAreas=h(e,this.currentItem.node,this.getTreeDimensions().bottom):this.hitAreas=[]}getTreeDimensions(){const e=l(this.treeElement),t=e.left+this.getScrollLeft(),o=e.top;return{bottom:o+this.treeElement.clientHeight+16,left:t,right:t+this.treeElement.clientWidth,top:o}}moveItem(e){if(this.currentItem&&this.hoveredArea&&this.hoveredArea.position!==o.None&&this.canMoveToArea(this.hoveredArea)){const t=this.currentItem.node,n=this.hoveredArea.node,s=this.hoveredArea.position,i=t.parent;s===o.Inside&&(this.hoveredArea.node.is_open=!0);const l=()=>{const e=this.getTree();e&&(e.moveNode(t,n,s),this.treeElement.textContent="",this.refreshElements(null))};this.triggerEvent("tree.move",{move_info:{do_move:l,moved_node:t,original_event:e.originalEvent,position:r(s),previous_parent:i,target_node:n}}).isDefaultPrevented()||l()}}mustCaptureElement(e){const t=e.nodeName;return"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}mustOpenFolderTimer(e){const t=e.node;return t.isFolder()&&!t.is_open&&e.position===o.Inside}removeDropHint(){this.previousGhost&&this.previousGhost.remove()}removeHitAreas(){this.hitAreas=[]}removeHover(){this.hoveredArea=null}startOpenFolderTimer(e){const t=()=>{this.openNode(e,this.slide,(()=>{this.refresh(),this.updateDropHint()}))};this.stopOpenFolderTimer();const o=this.openFolderDelay;!1!==o&&(this.openFolderTimer=window.setTimeout(t,o))}stopOpenFolderTimer(){this.openFolderTimer&&(clearTimeout(this.openFolderTimer),this.openFolderTimer=null)}updateDropHint(){if(!this.hoveredArea)return;this.removeDropHint();const e=this.getNodeElementForNode(this.hoveredArea.node);this.previousGhost=e.addDropHint(this.hoveredArea.position)}mouseCapture(e){const t=e.target;if(!this.mustCaptureElement(t))return null;if(this.onIsMoveHandle&&!this.onIsMoveHandle(jQuery(t)))return null;let o=this.getNodeElement(t);return o&&this.onCanMove&&(this.onCanMove(o.node)||(o=null)),this.currentItem=o,null!=this.currentItem}mouseDrag(e){if(!this.currentItem||!this.dragElement)return!1;this.dragElement.move(e.pageX,e.pageY);const t=this.findHoveredArea(e.pageX,e.pageY);return t&&this.canMoveToArea(t)?(t.node.isFolder()||this.stopOpenFolderTimer(),this.hoveredArea!==t&&(this.hoveredArea=t,this.mustOpenFolderTimer(t)?this.startOpenFolderTimer(t.node):this.stopOpenFolderTimer(),this.updateDropHint())):(this.removeDropHint(),this.stopOpenFolderTimer(),this.hoveredArea=t),t||this.onDragMove&&this.onDragMove(this.currentItem.node,e.originalEvent),!0}mouseStart(e){if(!this.currentItem)return!1;this.refresh();const{left:t,top:o}=l(e.target),n=this.currentItem.node;return this.dragElement=new d({autoEscape:this.autoEscape??!0,nodeName:n.name,offsetX:e.pageX-t,offsetY:e.pageY-o,treeElement:this.treeElement}),this.isDragging=!0,this.currentItem.element.classList.add("jqtree-moving"),!0}mouseStop(e){this.moveItem(e),this.clear(),this.removeHover(),this.removeDropHint(),this.removeHitAreas();const t=this.currentItem;return this.currentItem&&(this.currentItem.element.classList.remove("jqtree-moving"),this.currentItem=null),this.isDragging=!1,!this.hoveredArea&&t&&this.onDragStop&&this.onDragStop(t.node,e.originalEvent),!1}refresh(){this.removeHitAreas(),this.currentItem&&(this.generateHitAreas(),this.currentItem=this.getNodeElementForNode(this.currentItem.node),this.isDragging&&this.currentItem.element.classList.add("jqtree-moving"))}}class u{constructor(e){let{$element:t,autoEscape:o,buttonLeft:n,closedIcon:r,dragAndDrop:s,getTree:i,isNodeSelected:l,onCreateLi:d,openedIcon:a,rtl:h,showEmptyFolder:c,tabIndex:u}=e;this.autoEscape=o,this.buttonLeft=n,this.dragAndDrop=s,this.$element=t,this.getTree=i,this.isNodeSelected=l,this.onCreateLi=d,this.rtl=h,this.showEmptyFolder=c,this.tabIndex=u,this.openedIconElement=this.createButtonElement(a??"+"),this.closedIconElement=this.createButtonElement(r??"-")}attachNodeData(e,t){e.element=t,jQuery(t).data("node",e)}createButtonElement(e){if("string"==typeof e){const t=document.createElement("div");return t.innerHTML=e,document.createTextNode(t.innerHTML)}return e.nodeType?e:jQuery(e)[0]}createDomElements(e,t,o,n){const r=this.createUl(o);e.appendChild(r);for(const e of t){const t=this.createLi(e,n);r.appendChild(t),e.hasChildren()&&this.createDomElements(t,e.children,!1,n+1)}}createFolderLi(e,t,o){const n=this.getButtonClasses(e),r=this.getFolderClasses(e,o),i=e.is_open?this.openedIconElement:this.closedIconElement,l=document.createElement("li");l.className=`jqtree_common ${r}`,l.setAttribute("role","none");const d=document.createElement("div");d.className="jqtree-element jqtree_common",d.setAttribute("role","none"),l.appendChild(d);const a=document.createElement("a");a.className=n,i&&a.appendChild(i.cloneNode(!0)),this.buttonLeft&&d.appendChild(a);const h=this.createTitleSpan(e.name,o,!0,t);return h.setAttribute("aria-expanded",s(e.is_open)),d.appendChild(h),this.buttonLeft||d.appendChild(a),l}createLi(e,t){const o=Boolean(this.isNodeSelected(e)),n=e.isFolder()||e.isEmptyFolder&&this.showEmptyFolder?this.createFolderLi(e,t,o):this.createNodeLi(e,t,o);return this.attachNodeData(e,n),this.onCreateLi&&this.onCreateLi(e,jQuery(n),o),n}createNodeLi(e,t,o){const n=["jqtree_common"];o&&n.push("jqtree-selected");const r=n.join(" "),s=document.createElement("li");s.className=r,s.setAttribute("role","none");const i=document.createElement("div");i.className="jqtree-element jqtree_common",i.setAttribute("role","none"),s.appendChild(i);const l=this.createTitleSpan(e.name,o,!1,t);return i.appendChild(l),s}createTitleSpan(e,t,o,n){const r=document.createElement("span");let s="jqtree-title jqtree_common";if(o&&(s+=" jqtree-title-folder"),s+=" jqtree-title-button-"+(this.buttonLeft?"left":"right"),r.className=s,t){const e=this.tabIndex;void 0!==e&&r.setAttribute("tabindex",`${e}`)}return this.setTreeItemAriaAttributes(r,e,n,t),this.autoEscape?r.textContent=e:r.innerHTML=e,r}createUl(e){let t,o;e?(t="jqtree-tree",o="tree",this.rtl&&(t+=" jqtree-rtl")):(t="",o="group"),this.dragAndDrop&&(t+=" jqtree-dnd");const n=document.createElement("ul");return n.className=`jqtree_common ${t}`,n.setAttribute("role",o),n}getButtonClasses(e){const t=["jqtree-toggler","jqtree_common"];return e.is_open||t.push("jqtree-closed"),this.buttonLeft?t.push("jqtree-toggler-left"):t.push("jqtree-toggler-right"),t.join(" ")}getFolderClasses(e,t){const o=["jqtree-folder"];return e.is_open||o.push("jqtree-closed"),t&&o.push("jqtree-selected"),e.is_loading&&o.push("jqtree-loading"),o.join(" ")}setTreeItemAriaAttributes(e,t,o,n){e.setAttribute("aria-label",t),e.setAttribute("aria-level",`${o}`),e.setAttribute("aria-selected",s(n)),e.setAttribute("role","treeitem")}render(e){e?.parent?this.renderFromNode(e):this.renderFromRoot()}renderFromNode(e){if(!e.element)return;const t=jQuery(e.element),o=this.createLi(e,e.getLevel());t.after(o),t.remove(),this.createDomElements(o,e.children,!1,e.getLevel()+1)}renderFromRoot(){this.$element.empty();const e=this.getTree();this.$element[0]&&e&&this.createDomElements(this.$element[0],e.children,!0,1)}}class m{handleKeyDown=e=>{if(!this.canHandleKeyboard())return;let t=!1;const o=this.getSelectedNode();if(o)switch(e.key){case"ArrowDown":t=this.moveDown(o);break;case"ArrowUp":t=this.moveUp(o);break;case"ArrowRight":t=this.moveRight(o);break;case"ArrowLeft":t=this.moveLeft(o)}t&&e.preventDefault()};constructor(e){let{closeNode:t,getSelectedNode:o,isFocusOnTree:n,keyboardSupport:r,openNode:s,selectNode:i}=e;this.closeNode=t,this.getSelectedNode=o,this.isFocusOnTree=n,this.keyboardSupport=r,this.openNode=s,this.originalSelectNode=i,r&&document.addEventListener("keydown",this.handleKeyDown)}canHandleKeyboard(){return this.keyboardSupport&&this.isFocusOnTree()}moveLeft(e){return e.isFolder()&&e.is_open?(this.closeNode(e),!0):this.selectNode(e.getParent())}moveRight(e){return!!e.isFolder()&&(e.is_open?this.selectNode(e.getNextVisibleNode()):(this.openNode(e),!0))}selectNode(e){return!!e&&(this.originalSelectNode(e),!0)}deinit(){this.handleKeyDownHandler&&document.removeEventListener("keydown",this.handleKeyDownHandler)}moveDown(e){return this.selectNode(e.getNextVisibleNode())}moveUp(e){return this.selectNode(e.getPreviousVisibleNode())}}const g=e=>({originalEvent:e,pageX:e.pageX,pageY:e.pageY,target:e.target}),p=(e,t)=>({originalEvent:t,pageX:e.pageX,pageY:e.pageY,target:e.target});class f{handleClick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);if(t)switch(t.type){case"button":this.onClickButton(t.node),e.preventDefault(),e.stopPropagation();break;case"label":this.triggerEvent("tree.click",{click_event:e,node:t.node}).isDefaultPrevented()||this.onClickTitle(t.node);break}};handleContextmenu=e=>{if(!e.target)return;const t=e.target.closest("ul.jqtree-tree .jqtree-element");if(t){const o=this.getNode(t);if(o)return e.preventDefault(),e.stopPropagation(),this.triggerEvent("tree.contextmenu",{click_event:e,node:o}),!1}return null};handleDblclick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);"label"===t?.type&&this.triggerEvent("tree.dblclick",{click_event:e,node:t.node})};mouseDown=e=>{if(0!==e.button)return;this.handleMouseDown(g(e))&&e.cancelable&&e.preventDefault()};mouseMove=e=>{this.handleMouseMove(e,g(e))};mouseUp=e=>{this.handleMouseUp(g(e))};touchEnd=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseUp(p(t,e))};touchMove=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseMove(e,p(t,e))};touchStart=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseDown(p(t,e))};constructor(e){let{element:t,getMouseDelay:o,getNode:n,onClickButton:r,onClickTitle:s,onMouseCapture:i,onMouseDrag:l,onMouseStart:d,onMouseStop:a,triggerEvent:h,useContextMenu:c}=e;this.element=t,this.getMouseDelay=o,this.getNode=n,this.onClickButton=r,this.onClickTitle=s,this.onMouseCapture=i,this.onMouseDrag=l,this.onMouseStart=d,this.onMouseStop=a,this.triggerEvent=h,this.useContextMenu=c,t.addEventListener("click",this.handleClick),t.addEventListener("dblclick",this.handleDblclick),t.addEventListener("mousedown",this.mouseDown,{passive:!1}),t.addEventListener("touchstart",this.touchStart,{passive:!1}),c&&t.addEventListener("contextmenu",this.handleContextmenu),this.isMouseStarted=!1,this.mouseDelayTimer=null,this.isMouseDelayMet=!1,this.mouseDownInfo=null}getClickTarget(e){const t=e.closest(".jqtree-toggler");if(t){const e=this.getNode(t);if(e)return{node:e,type:"button"}}else{const t=e.closest(".jqtree-element");if(t){const e=this.getNode(t);if(e)return{node:e,type:"label"}}}return null}handleMouseDown(e){return this.isMouseStarted&&this.handleMouseUp(e),this.mouseDownInfo=e,!!this.onMouseCapture(e)&&(this.handleStartMouse(),!0)}handleMouseMove(e,t){if(this.isMouseStarted)return this.onMouseDrag(t),void(e.cancelable&&e.preventDefault());this.isMouseDelayMet&&(this.mouseDownInfo&&(this.isMouseStarted=this.onMouseStart(this.mouseDownInfo)),this.isMouseStarted?(this.onMouseDrag(t),e.cancelable&&e.preventDefault()):this.handleMouseUp(t))}handleMouseUp(e){this.removeMouseMoveEventListeners(),this.isMouseDelayMet=!1,this.mouseDownInfo=null,this.isMouseStarted&&(this.isMouseStarted=!1,this.onMouseStop(e))}handleStartMouse(){document.addEventListener("mousemove",this.mouseMove,{passive:!1}),document.addEventListener("touchmove",this.touchMove,{passive:!1}),document.addEventListener("mouseup",this.mouseUp,{passive:!1}),document.addEventListener("touchend",this.touchEnd,{passive:!1});const e=this.getMouseDelay();e?this.startMouseDelayTimer(e):this.isMouseDelayMet=!0}removeMouseMoveEventListeners(){document.removeEventListener("mousemove",this.mouseMove),document.removeEventListener("touchmove",this.touchMove),document.removeEventListener("mouseup",this.mouseUp),document.removeEventListener("touchend",this.touchEnd)}startMouseDelayTimer(e){this.mouseDelayTimer&&clearTimeout(this.mouseDelayTimer),this.mouseDelayTimer=window.setTimeout((()=>{this.mouseDownInfo&&(this.isMouseDelayMet=!0)}),e),this.isMouseDelayMet=!1}deinit(){this.element.removeEventListener("click",this.handleClick),this.element.removeEventListener("dblclick",this.handleDblclick),this.useContextMenu&&this.element.removeEventListener("contextmenu",this.handleContextmenu),this.element.removeEventListener("mousedown",this.mouseDown),this.element.removeEventListener("touchstart",this.touchStart),this.removeMouseMoveEventListeners()}}const v=e=>"object"==typeof e&&"children"in e&&e.children instanceof Array;class S{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:S;this.name="",this.load_on_demand=!1,this.isEmptyFolder=null!=e&&v(e)&&0===e.children.length,this.setData(e),this.children=[],this.parent=null,t&&(this.idMapping=new Map,this.tree=this,this.nodeClass=o)}createNode(e){return new(this.getNodeClass())(e)}doRemoveChild(e){this.children.splice(this.getChildIndex(e),1),this.tree?.removeNodeFromIndex(e)}getNodeClass(){return this.nodeClass??this.tree?.nodeClass??S}loadChildrenFromData(e){v(e)&&e.children.length&&this.loadFromData(e.children)}setParent(e){this.parent=e,this.tree=e.tree,this.tree?.addNodeToIndex(this)}addAfter(e){if(this.parent){const t=this.createNode(e),o=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(t,o+1),t.loadChildrenFromData(e),t}return null}addBefore(e){if(this.parent){const t=this.createNode(e),o=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(t,o),t.loadChildrenFromData(e),t}return null}addChild(e){this.children.push(e),e.setParent(this)}addChildAtPosition(e,t){this.children.splice(t,0,e),e.setParent(this)}addNodeToIndex(e){null!=e.id&&this.idMapping.set(e.id,e)}addParent(e){if(this.parent){const t=this.createNode(e);this.tree&&t.setParent(this.tree);const o=this.parent;for(const e of o.children)t.addChild(e);return o.children=[],o.addChild(t),t}return null}append(e){const t=this.createNode(e);return this.addChild(t),t.loadChildrenFromData(e),t}filter(e){const t=[];return this.iterate((o=>(e(o)&&t.push(o),!0))),t}getChildIndex(e){return this.children.indexOf(e)}getData(){const e=t=>t.map((t=>{const o={};for(const e in t)if(-1===["parent","children","element","idMapping","load_on_demand","nodeClass","tree","isEmptyFolder"].indexOf(e)&&Object.prototype.hasOwnProperty.call(t,e)){const n=t[e];o[e]=n}return t.hasChildren()&&(o.children=e(t.children)),o}));return e(arguments.length>0&&void 0!==arguments[0]&&arguments[0]?[this]:this.children)}getLastChild(){if(this.hasChildren()){const e=this.children[this.children.length-1];return e?e.hasChildren()&&e.is_open?e.getLastChild():e:null}return null}getLevel(){let e=0,t=this;for(;t.parent;)e+=1,t=t.parent;return e}getNextNode(){if((!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&this.hasChildren())return this.children[0]??null;if(this.parent){const e=this.getNextSibling();return e||this.parent.getNextNode(!1)}return null}getNextSibling(){if(this.parent){const e=this.parent.getChildIndex(this)+1;return e!t&&(!e(o)||(t=o,!1)))),t}getNodeById(e){return this.idMapping.get(e)??null}getNodeByName(e){return this.getNodeByCallback((t=>t.name===e))}getNodeByNameMustExist(e){const t=this.getNodeByCallback((t=>t.name===e));if(!t)throw new Error(`Node with name ${e} not found`);return t}getNodesByProperty(e,t){return this.filter((o=>o[e]===t))}getParent(){return this.parent&&this.parent.parent?this.parent:null}getPreviousNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()?e.getLastChild():e:this.getParent()}return null}getPreviousSibling(){if(this.parent){const e=this.parent.getChildIndex(this)-1;return e>=0?this.parent.children[e]??null:null}return null}getPreviousVisibleNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()&&e.is_open?e.getLastChild():e:this.getParent()}return null}hasChildren(){return 0!==this.children.length}initFromData(e){const t=e=>{for(const t of e){const e=this.createNode();e.initFromData(t),this.addChild(e)}};(e=>{this.setData(e),v(e)&&e.children.length&&t(e.children)})(e)}isFolder(){return this.hasChildren()||this.load_on_demand}isParentOf(e){let t=e.parent;for(;t;){if(t===this)return!0;t=t.parent}return!1}iterate(e){const t=(o,n)=>{for(const r of o.children){e(r,n)&&r.hasChildren()&&t(r,n+1)}};t(this,0)}loadFromData(e){this.removeChildren();for(const t of e){const e=this.createNode(t);this.addChild(e),v(t)&&e.loadFromData(t.children)}return this}moveNode(e,t,n){if(!e.parent||e.isParentOf(t))return!1;switch(e.parent.doRemoveChild(e),n){case o.After:return!!t.parent&&(t.parent.addChildAtPosition(e,t.parent.getChildIndex(t)+1),!0);case o.Before:return!!t.parent&&(t.parent.addChildAtPosition(e,t.parent.getChildIndex(t)),!0);case o.Inside:return t.addChildAtPosition(e,0),!0;default:return!1}}prepend(e){const t=this.createNode(e);return this.addChildAtPosition(t,0),t.loadChildrenFromData(e),t}remove(){this.parent&&(this.parent.removeChild(this),this.parent=null)}removeChild(e){e.removeChildren(),this.doRemoveChild(e)}removeChildren(){this.iterate((e=>(this.tree?.removeNodeFromIndex(e),!0))),this.children=[]}removeNodeFromIndex(e){null!=e.id&&this.idMapping.delete(e.id)}setData(e){if(e)if("string"==typeof e)this.name=e;else if("object"==typeof e)for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){const o=e[t];"label"===t||"name"===t?"string"==typeof o&&(this.name=o):"children"!==t&&"parent"!==t&&(this[t]=o)}}}class N{constructor(e,t){const o=e.querySelector(":scope > .jqtree-element");if(!o)return void(this.hint=void 0);const n=Math.max(e.offsetWidth+t-4,0),r=Math.max(e.clientHeight-4,0),s=document.createElement("span");s.className="jqtree-border",s.style.width=`${n}px`,s.style.height=`${r}px`,this.hint=s,o.append(this.hint)}remove(){this.hint?.remove()}}class E{constructor(e,t,n){switch(this.element=t,this.node=e,this.ghost=this.createGhostElement(),n){case o.After:this.moveAfter();break;case o.Before:this.moveBefore();break;case o.Inside:e.isFolder()&&e.is_open?this.moveInsideOpenFolder():this.moveInside()}}createGhostElement(){const e=document.createElement("li");e.className="jqtree_common jqtree-ghost";const t=document.createElement("span");t.className="jqtree_common jqtree-circle",e.append(t);const o=document.createElement("span");return o.className="jqtree_common jqtree-line",e.append(o),e}moveAfter(){this.element.after(this.ghost)}moveBefore(){this.element.before(this.ghost)}moveInside(){this.element.after(this.ghost),this.ghost.classList.add("jqtree-inside")}moveInsideOpenFolder(){const e=this.node.children[0]?.element;e&&e.before(this.ghost)}remove(){this.ghost.remove()}}class D{constructor(e){let{$treeElement:t,getScrollLeft:o,node:n,tabIndex:r}=e;this.getScrollLeft=o,this.tabIndex=r,this.$treeElement=t,this.init(n)}getTitleSpan(){return this.element.querySelector(":scope > .jqtree-element > span.jqtree-title")}getUl(){return this.element.querySelector(":scope > ul")}mustShowBorderDropHint(e){return e===o.Inside}addDropHint(e){return this.mustShowBorderDropHint(e)?new N(this.element,this.getScrollLeft()):new E(this.node,this.element,e)}deselect(){this.element.classList.remove("jqtree-selected");const e=this.getTitleSpan();e.removeAttribute("tabindex"),e.setAttribute("aria-selected","false"),e.blur()}init(e){if(this.node=e,!e.element){const t=this.$treeElement.get(0);t&&(e.element=t)}e.element&&(this.element=e.element)}select(e){this.element.classList.add("jqtree-selected");const t=this.getTitleSpan(),o=this.tabIndex;null!=o&&t.setAttribute("tabindex",o.toString()),t.setAttribute("aria-selected","true"),e&&t.focus()}}class y extends D{constructor(e){let{$treeElement:t,closedIconElement:o,getScrollLeft:n,node:r,openedIconElement:s,tabIndex:i,triggerEvent:l}=e;super({$treeElement:t,getScrollLeft:n,node:r,tabIndex:i}),this.closedIconElement=o,this.openedIconElement=s,this.triggerEvent=l}mustShowBorderDropHint(e){return!this.node.is_open&&e===o.Inside}getButton(){return this.element.querySelector(":scope > .jqtree-element > a.jqtree-toggler")}close(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"fast";if(!this.node.is_open)return;this.node.is_open=!1;const o=this.getButton();o.classList.add("jqtree-closed"),o.innerHTML="";const n=this.closedIconElement;if(n){const e=n.cloneNode(!0);o.appendChild(e)}const r=()=>{this.element.classList.add("jqtree-closed");this.getTitleSpan().setAttribute("aria-expanded","false"),this.triggerEvent("tree.close",{node:this.node})};e?jQuery(this.getUl()).slideUp(t,r):(jQuery(this.getUl()).hide(),r())}open(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"fast";if(this.node.is_open)return;this.node.is_open=!0;const n=this.getButton();n.classList.remove("jqtree-closed"),n.innerHTML="";const r=this.openedIconElement;if(r){const e=r.cloneNode(!0);n.appendChild(e)}const s=()=>{this.element.classList.remove("jqtree-closed");this.getTitleSpan().setAttribute("aria-expanded","true"),e&&e(this.node),this.triggerEvent("tree.open",{node:this.node})};t?jQuery(this.getUl()).slideDown(o,s):(jQuery(this.getUl()).show(),s())}}class b{constructor(e){let{addToSelection:t,getNodeById:o,getSelectedNodes:n,getTree:r,onGetStateFromStorage:s,onSetStateFromStorage:i,openNode:l,refreshElements:d,removeFromSelection:a,saveState:h}=e;this.addToSelection=t,this.getNodeById=o,this.getSelectedNodes=n,this.getTree=r,this.onGetStateFromStorage=s,this.onSetStateFromStorage=i,this.openNode=l,this.refreshElements=d,this.removeFromSelection=a,this.saveStateOption=h}getKeyName(){return"string"==typeof this.saveStateOption?this.saveStateOption:"tree"}loadFromStorage(){return this.onGetStateFromStorage?this.onGetStateFromStorage():this.supportsLocalStorage()?localStorage.getItem(this.getKeyName()):null}openInitialNodes(e){let t=!1;for(const o of e){const e=this.getNodeById(o);e&&(e.load_on_demand?t=!0:e.is_open=!0)}return t}parseState(e){const t=JSON.parse(e);var o;return t.selected_node&&("number"==typeof(o=t.selected_node)&&o%1==0)&&(t.selected_node=[t.selected_node]),t}resetSelection(){this.getSelectedNodes().forEach((e=>{this.removeFromSelection(e)}))}selectInitialNodes(e){let t=0;for(const o of e){const e=this.getNodeById(o);e&&(t+=1,this.addToSelection(e))}return 0!==t}supportsLocalStorage(){return null==this._supportsLocalStorage&&(this._supportsLocalStorage=(()=>{try{const e="_storage_test";sessionStorage.setItem(e,"value"),sessionStorage.removeItem(e)}catch{return!1}return!0})()),this._supportsLocalStorage}getNodeIdToBeSelected(){const e=this.getStateFromStorage();return e?.selected_node?e.selected_node[0]??null:null}getState(){return{open_nodes:(()=>{const e=[];return this.getTree()?.iterate((t=>(t.is_open&&t.id&&t.hasChildren()&&e.push(t.id),!0))),e})(),selected_node:(()=>{const e=[];return this.getSelectedNodes().forEach((t=>{null!=t.id&&e.push(t.id)})),e})()}}getStateFromStorage(){const e=this.loadFromStorage();return e?this.parseState(e):null}saveState(){const e=JSON.stringify(this.getState());this.onSetStateFromStorage?this.onSetStateFromStorage(e):this.supportsLocalStorage()&&localStorage.setItem(this.getKeyName(),e)}setInitialState(e){let t=!1;return e.open_nodes&&(t=this.openInitialNodes(e.open_nodes)),this.resetSelection(),e.selected_node&&this.selectInitialNodes(e.selected_node),t}setInitialStateOnDemand(e,t){let o=0,n=e.open_nodes;const r=()=>{if(!n)return;const r=[];for(const e of n){const t=this.getNodeById(e);t?t.is_loading||(t.load_on_demand?s(t):this.openNode(t,!1)):r.push(e)}n=r,e.selected_node&&this.selectInitialNodes(e.selected_node)&&this.refreshElements(null),0===o&&t()},s=e=>{o+=1,this.openNode(e,!1,(()=>{o-=1,r()}))};r()}}class I{constructor(e){let{container:t,refreshHitAreas:o}=e;this.container=t,this.refreshHitAreas=o}getNewHorizontalScrollDirection(e){const t=l(this.container),o=t.left+this.container.clientWidth,n=t.left;return e>o-20?"right":ethis.getScrollParentBottom()?"bottom":void 0}getScrollParentBottom(){return null==this.scrollParentBottom&&(this.scrollParentBottom=this.getScrollParentTop()+this.container.clientHeight),this.scrollParentBottom}getScrollParentTop(){return null==this.scrollParentTop&&(this.scrollParentTop=i(this.container)),this.scrollParentTop}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:e,top:0}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:0,top:e}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}checkHorizontalScrolling(e){const t=this.getNewHorizontalScrollDirection(e);this.horizontalScrollDirection!==t&&(this.horizontalScrollDirection=t,null!=this.horizontalScrollTimeout&&window.clearTimeout(this.verticalScrollTimeout),t&&(this.horizontalScrollTimeout=window.setTimeout(this.scrollHorizontally.bind(this),40)))}checkVerticalScrolling(e){const t=this.getNewVerticalScrollDirection(e);this.verticalScrollDirection!==t&&(this.verticalScrollDirection=t,null!=this.verticalScrollTimeout&&(window.clearTimeout(this.verticalScrollTimeout),this.verticalScrollTimeout=void 0),t&&(this.verticalScrollTimeout=window.setTimeout(this.scrollVertically.bind(this),40)))}getScrollLeft(){return this.container.scrollLeft}scrollToY(e){this.container.scrollTop=e}stopScrolling(){this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0,this.scrollParentTop=void 0,this.scrollParentBottom=void 0}}class C{constructor(e){let{refreshHitAreas:t,treeElement:o}=e;this.refreshHitAreas=t,this.treeElement=o}canScrollDown(){const e=document.documentElement;return e.scrollTop+e.clientHeightwindow.innerWidth-20&&this.canScrollRight()?"right":t?"left":void 0}getNewVerticalScrollDirection(e){const t=jQuery(document).scrollTop()??0;if(e-t<20)return"top";return window.innerHeight-(e-t)<20&&this.canScrollDown()?"bottom":void 0}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;window.scrollBy({behavior:"instant",left:e,top:0}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;window.scrollBy({behavior:"instant",left:0,top:e}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}checkHorizontalScrolling(e){const t=this.getNewHorizontalScrollDirection(e);this.horizontalScrollDirection!==t&&(this.horizontalScrollDirection=t,null!=this.horizontalScrollTimeout&&window.clearTimeout(this.horizontalScrollTimeout),t&&(this.horizontalScrollTimeout=window.setTimeout(this.scrollHorizontally.bind(this),40)))}checkVerticalScrolling(e){const t=this.getNewVerticalScrollDirection(e);this.verticalScrollDirection!==t&&(this.verticalScrollDirection=t,null!=this.verticalScrollTimeout&&(window.clearTimeout(this.verticalScrollTimeout),this.verticalScrollTimeout=void 0),t&&(this.verticalScrollTimeout=window.setTimeout(this.scrollVertically.bind(this),40)))}getScrollLeft(){return document.documentElement.scrollLeft}scrollToY(e){const t=i(this.treeElement);document.documentElement.scrollTop=e+t}stopScrolling(){this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0,this.documentScrollHeight=void 0,this.documentScrollWidth=void 0}}const T=e=>"auto"===e||"scroll"===e,F=e=>{const t=getComputedStyle(e);return T(t.overflowX)||T(t.overflowY)},L=(e,t)=>{const o=(e=>{if(F(e))return e;let t=e.parentElement;for(;t;){if(F(t))return t;t=t.parentElement}return null})(e);return o&&"HTML"!==o.tagName?new I({container:o,refreshHitAreas:t}):new C({refreshHitAreas:t,treeElement:e})};class w{constructor(e){let{refreshHitAreas:t,treeElement:o}=e;this.refreshHitAreas=t,this.scrollParent=void 0,this.treeElement=o}checkHorizontalScrolling(e){this.getScrollParent().checkHorizontalScrolling(e.pageX)}checkVerticalScrolling(e){this.getScrollParent().checkVerticalScrolling(e.pageY)}getScrollParent(){return this.scrollParent||(this.scrollParent=L(this.treeElement,this.refreshHitAreas)),this.scrollParent}checkScrolling(e){this.checkVerticalScrolling(e),this.checkHorizontalScrolling(e)}getScrollLeft(){return this.getScrollParent().getScrollLeft()}scrollToY(e){this.getScrollParent().scrollToY(e)}stopScrolling(){this.getScrollParent().stopScrolling()}}class H{constructor(e){let{getNodeById:t}=e;this.getNodeById=t,this.selectedNodes=new Set,this.clear()}addToSelection(e){null!=e.id?this.selectedNodes.add(e.id):this.selectedSingleNode=e}clear(){this.selectedNodes.clear(),this.selectedSingleNode=null}getSelectedNode(){const e=this.getSelectedNodes();return!!e.length&&(e[0]??!1)}getSelectedNodes(){if(this.selectedSingleNode)return[this.selectedSingleNode];{const e=[];return this.selectedNodes.forEach((t=>{const o=this.getNodeById(t);o&&e.push(o)})),e}}getSelectedNodesUnder(e){if(this.selectedSingleNode)return e.isParentOf(this.selectedSingleNode)?[this.selectedSingleNode]:[];{const t=[];for(const o in this.selectedNodes)if(Object.prototype.hasOwnProperty.call(this.selectedNodes,o)){const n=this.getNodeById(o);n&&e.isParentOf(n)&&t.push(n)}return t}}isNodeSelected(e){return null!=e.id?this.selectedNodes.has(e.id):!!this.selectedSingleNode&&this.selectedSingleNode.element===e.element}removeFromSelection(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];null==e.id?this.selectedSingleNode&&e.element===this.selectedSingleNode.element&&(this.selectedSingleNode=null):(this.selectedNodes.delete(e.id),t&&e.iterate((()=>(null!=e.id&&this.selectedNodes.delete(e.id),!0))))}}const M=(e,t)=>{const o=()=>`simple_widget_${t}`,n=(e,t)=>{const o=jQuery.data(e,t);return o&&o instanceof A?o:null},r=(t,r)=>{const s=o();for(const o of t.get()){if(!n(o,s)){const t=new e(o,r);jQuery.data(o,s)||jQuery.data(o,s,t),t.init()}}return t};jQuery.fn[t]=function(t){if(!t)return r(this,null);if("object"==typeof t){return r(this,t)}if("string"==typeof t&&"_"!==t[0]){const r=t;if("destroy"===r)return void(e=>{const t=o();for(const o of e.get()){const e=n(o,t);e&&e.destroy(),jQuery.removeData(o,t)}})(this);if("get_widget_class"===r)return e;for(var s=arguments.length,i=new Array(s>1?s-1:0),l=1;l{let r=null;for(const s of e.get()){const e=jQuery.data(s,o());if(e&&e instanceof A){const o=e[t];o&&"function"==typeof o&&(r=o.apply(e,n))}}return r})(this,r,i)}}};class A{static defaults={};constructor(e,t){this.$el=jQuery(e);const o=this.constructor.defaults;this.options={...o,...t}}static register(e,t){M(e,t)}deinit(){}destroy(){this.deinit()}init(){}}const _="Node parameter is empty",j="Parameter is empty: ";class x extends A{static defaults=(()=>({animationSpeed:"fast",autoEscape:!0,autoOpen:!1,buttonLeft:!0,closedIcon:void 0,data:void 0,dataFilter:void 0,dataUrl:void 0,dragAndDrop:!1,keyboardSupport:!0,nodeClass:S,onCanMove:void 0,onCanMoveTo:void 0,onCanSelectNode:void 0,onCreateLi:void 0,onDragMove:void 0,onDragStop:void 0,onGetStateFromStorage:void 0,onIsMoveHandle:void 0,onLoadFailed:void 0,onLoading:void 0,onSetStateFromStorage:void 0,openedIcon:"▼",openFolderDelay:500,rtl:void 0,saveState:!1,selectable:!0,showEmptyFolder:!1,slide:!0,startDndDelay:300,tabIndex:0,useContextMenu:!0}))();connectHandlers(){const{autoEscape:e,buttonLeft:o,closedIcon:n,dataFilter:r,dragAndDrop:s,keyboardSupport:i,onCanMove:l,onCanMoveTo:d,onCreateLi:a,onDragMove:h,onDragStop:g,onGetStateFromStorage:p,onIsMoveHandle:v,onLoadFailed:S,onLoading:N,onSetStateFromStorage:E,openedIcon:D,openFolderDelay:y,rtl:I,saveState:C,showEmptyFolder:T,slide:F,tabIndex:L}=this.options,M=this.closeNode.bind(this),A=this.getNodeElement.bind(this),_=this.getNodeElementForNode.bind(this),j=this.getNodeById.bind(this),x=this.getSelectedNode.bind(this),B=this.getTree.bind(this),P=this.isFocusOnTree.bind(this),k=this.loadData.bind(this),q=this.openNodeInternal.bind(this),O=this.refreshElements.bind(this),U=this.refreshHitAreas.bind(this),z=this.selectNode.bind(this),$=this.element,Q=this.element.get(0),V=this.triggerEvent.bind(this),Y=new H({getNodeById:j}),R=Y.addToSelection.bind(Y),X=Y.getSelectedNodes.bind(Y),G=Y.isNodeSelected.bind(Y),W=Y.removeFromSelection.bind(Y),K=new t({dataFilter:r,loadData:k,onLoadFailed:S,onLoading:N,treeElement:Q,triggerEvent:V}),J=new b({addToSelection:R,getNodeById:j,getSelectedNodes:X,getTree:B,onGetStateFromStorage:p,onSetStateFromStorage:E,openNode:q,refreshElements:O,removeFromSelection:W,saveState:C}),Z=new w({refreshHitAreas:U,treeElement:Q}),ee=Z.getScrollLeft.bind(Z),te=new c({autoEscape:e,getNodeElement:A,getNodeElementForNode:_,getScrollLeft:ee,getTree:B,onCanMove:l,onCanMoveTo:d,onDragMove:h,onDragStop:g,onIsMoveHandle:v,openFolderDelay:y,openNode:q,refreshElements:O,slide:F,treeElement:Q,triggerEvent:V}),oe=new m({closeNode:M,getSelectedNode:x,isFocusOnTree:P,keyboardSupport:i,openNode:q,selectNode:z}),ne=new u({$element:$,autoEscape:e,buttonLeft:o,closedIcon:n,dragAndDrop:s,getTree:B,isNodeSelected:G,onCreateLi:a,openedIcon:D,rtl:I,showEmptyFolder:T,tabIndex:L}),re=this.getNode.bind(this),se=this.mouseCapture.bind(this),ie=this.mouseDrag.bind(this),le=this.mouseStart.bind(this),de=this.mouseStop.bind(this),ae=new f({element:Q,getMouseDelay:()=>this.options.startDndDelay??0,getNode:re,onClickButton:this.toggle.bind(this),onClickTitle:this.doSelectNode.bind(this),onMouseCapture:se,onMouseDrag:ie,onMouseStart:le,onMouseStop:de,triggerEvent:V,useContextMenu:this.options.useContextMenu});this.dataLoader=K,this.dndHandler=te,this.keyHandler=oe,this.mouseHandler=ae,this.renderer=ne,this.saveStateHandler=J,this.scrollHandler=Z,this.selectNodeHandler=Y}containsElement(e){const t=this.getNode(e);return null!=t&&t.tree===this.tree}createFolderElement(e){const t=this.renderer.closedIconElement,o=this.scrollHandler.getScrollLeft.bind(this.scrollHandler),n=this.renderer.openedIconElement,r=this.options.tabIndex,s=this.element,i=this.triggerEvent.bind(this);return new y({$treeElement:s,closedIconElement:t,getScrollLeft:o,node:e,openedIconElement:n,tabIndex:r,triggerEvent:i})}createNodeElement(e){const t=this.scrollHandler.getScrollLeft.bind(this.scrollHandler),o=this.options.tabIndex,n=this.element;return new D({$treeElement:n,getScrollLeft:t,node:e,tabIndex:o})}deselectCurrentNode(){const e=this.getSelectedNode();e&&this.removeFromSelection(e)}deselectNodes(e){const t=this.selectNodeHandler.getSelectedNodesUnder(e);for(const e of t)this.selectNodeHandler.removeFromSelection(e)}doLoadData(e,t){e&&(t?(this.deselectNodes(t),this.loadSubtree(e,t)):this.initTree(e),this.isDragging()&&this.dndHandler.refresh()),this.triggerEvent("tree.load_data",{parent_node:t,tree_data:e})}doLoadDataFromUrl(e,t,o){const n=e??this.getDataUrlInfo(t);this.dataLoader.loadFromUrl(n,t,o)}doSelectNode(e,t){const o=()=>{this.options.saveState&&this.saveStateHandler.saveState()};if(!e)return this.deselectCurrentNode(),void o();const n={mustSetFocus:!0,mustToggle:!0,...t??{}};if((()=>this.options.onCanSelectNode?this.options.selectable&&this.options.onCanSelectNode(e):this.options.selectable)()){if(this.selectNodeHandler.isNodeSelected(e))n.mustToggle&&(this.deselectCurrentNode(),this.triggerEvent("tree.select",{node:null,previous_node:e}));else{const t=this.getSelectedNode()||null;this.deselectCurrentNode(),this.addToSelection(e,n.mustSetFocus),this.triggerEvent("tree.select",{deselected_node:t,node:e}),this.openParents(e)}o()}}getAutoOpenMaxLevel(){return!0===this.options.autoOpen?-1:"number"==typeof this.options.autoOpen?this.options.autoOpen:"string"==typeof this.options.autoOpen?parseInt(this.options.autoOpen,10):0}getDataUrlInfo(e){const t=this.options.dataUrl??this.element.data("url"),o=t=>{if(e?.id){const o={node:e.id};t.data=o}else{const e=this.getNodeIdToBeSelected();if(e){const o={selected_node:e};t.data=o}}};return"function"==typeof t?t(e):"string"==typeof t?(e=>{const t={url:e};return o(t),t})(t):t&&"object"==typeof t?(o(t),t):null}getDefaultClosedIcon(){return this.options.rtl?"◀":"►"}getNode(e){const t=e.closest("li.jqtree_common");return t?jQuery(t).data("node"):null}getNodeElement(e){const t=this.getNode(e);return t?this.getNodeElementForNode(t):null}getNodeElementForNode(e){return e.isFolder()?this.createFolderElement(e):this.createNodeElement(e)}getNodeIdToBeSelected(){return this.options.saveState?this.saveStateHandler.getNodeIdToBeSelected():null}getRtlOption(){if(null!=this.options.rtl)return this.options.rtl;{const e=this.element.data("rtl");return null!==e&&!1!==e&&void 0!==e}}initData(){if(this.options.data)this.doLoadData(this.options.data,null);else{this.getDataUrlInfo(null)?this.doLoadDataFromUrl(null,null,null):this.doLoadData([],null)}}initTree(e){const t=()=>{this.isInitialized||(this.isInitialized=!0,this.triggerEvent("tree.init"))};this.tree=new this.options.nodeClass(null,!0,this.options.nodeClass),this.selectNodeHandler.clear(),this.tree.loadFromData(e);const o=this.setInitialState();this.refreshElements(null),o?this.setInitialStateOnDemand(t):t()}isFocusOnTree(){const e=document.activeElement;return Boolean(e&&"SPAN"===e.tagName&&this.containsElement(e))}isSelectedNodeInSubtree(e){const t=this.getSelectedNode();return!!t&&(e===t||e.isParentOf(t))}loadFolderOnDemand(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2?arguments[2]:void 0;e.is_loading=!0,this.doLoadDataFromUrl(null,e,(()=>{this.openNodeInternal(e,t,o)}))}loadSubtree(e,t){t.loadFromData(e),t.load_on_demand=!1,t.is_loading=!1,this.refreshElements(t)}mouseCapture(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseCapture(e)}mouseDrag(e){if(this.options.dragAndDrop){const t=this.dndHandler.mouseDrag(e);return this.scrollHandler.checkScrolling(e),t}return!1}mouseStart(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseStart(e)}mouseStop(e){return!!this.options.dragAndDrop&&(this.scrollHandler.stopScrolling(),this.dndHandler.mouseStop(e))}openNodeInternal(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2?arguments[2]:void 0;const n=(e,t,o)=>{this.createFolderElement(e).open(o,t,this.options.animationSpeed)};if(e.isFolder()||e.isEmptyFolder)if(e.load_on_demand)this.loadFolderOnDemand(e,t,o);else{let r=e.parent;for(;r;)r.parent&&n(r,!1),r=r.parent;n(e,t,o),this.saveState()}}openParents(e){const t=e.parent;t?.parent&&!t.is_open&&this.openNode(t,!1)}refreshElements(e){const t=this.isFocusOnTree(),o=!!e&&this.isSelectedNodeInSubtree(e);this.renderer.render(e),o&&this.selectCurrentNode(t),this.triggerEvent("tree.refresh")}saveState(){this.options.saveState&&this.saveStateHandler.saveState()}selectCurrentNode(e){const t=this.getSelectedNode();if(t){this.getNodeElementForNode(t).select(e)}}setInitialState(){const e=()=>{if(!1===this.options.autoOpen)return!1;const e=this.getAutoOpenMaxLevel();let t=!1;return this.tree.iterate(((o,n)=>o.load_on_demand?(t=!0,!1):!!o.hasChildren()&&(o.is_open=!0,n!==e))),t};let[t,o]=(()=>{if(this.options.saveState){const e=this.saveStateHandler.getStateFromStorage();if(e){return[!0,this.saveStateHandler.setInitialState(e)]}return[!1,!1]}return[!1,!1]})();return t||(o=e()),o}setInitialStateOnDemand(e){const t=()=>{const t=this.getAutoOpenMaxLevel();let o=0;const n=e=>{o+=1,this.openNodeInternal(e,!1,(()=>{o-=1,r()}))},r=()=>{this.tree.iterate(((e,o)=>e.load_on_demand?(e.is_loading||n(e),!1):(this.openNodeInternal(e,!1),o!==t))),0===o&&e()};r()};(()=>{if(this.options.saveState){const t=this.saveStateHandler.getStateFromStorage();return!!t&&(this.saveStateHandler.setInitialStateOnDemand(t,e),!0)}return!1})()||t()}triggerEvent(e,t){const o=jQuery.Event(e,t);return this.element.trigger(o),o}addNodeAfter(e,t){const o=t.addAfter(e);return o&&this.refreshElements(t.parent),o}addNodeBefore(e,t){if(!t)throw Error(j+"existingNode");const o=t.addBefore(e);return o&&this.refreshElements(t.parent),o}addParentNode(e,t){if(!t)throw Error(j+"existingNode");const o=t.addParent(e);return o&&this.refreshElements(o.parent),o}addToSelection(e,t){if(!e)throw Error(_);return this.selectNodeHandler.addToSelection(e),this.openParents(e),this.getNodeElementForNode(e).select(t??!0),this.saveState(),this.element}appendNode(e,t){const o=t??this.tree,n=o.append(e);return this.refreshElements(o),n}closeNode(e,t){if(!e)throw Error(_);const o=t??this.options.slide;return(e.isFolder()||e.isEmptyFolder)&&(this.createFolderElement(e).close(o,this.options.animationSpeed),this.saveState()),this.element}deinit(){this.element.empty(),this.element.off(),this.keyHandler.deinit(),this.mouseHandler.deinit(),this.tree=new S({},!0),super.deinit()}getNodeByCallback(e){return this.tree.getNodeByCallback(e)}getNodeByHtmlElement(e){const t=e instanceof HTMLElement?e:e[0];return t?this.getNode(t):null}getNodeById(e){return this.tree.getNodeById(e)}getNodeByName(e){return this.tree.getNodeByName(e)}getNodeByNameMustExist(e){return this.tree.getNodeByNameMustExist(e)}getNodesByProperty(e,t){return this.tree.getNodesByProperty(e,t)}getSelectedNode(){return this.selectNodeHandler.getSelectedNode()}getSelectedNodes(){return this.selectNodeHandler.getSelectedNodes()}getState(){return this.saveStateHandler.getState()}getStateFromStorage(){return this.saveStateHandler.getStateFromStorage()}getTree(){return this.tree}getVersion(){return"1.8.7"}init(){super.init(),this.element=this.$el,this.isInitialized=!1,this.options.rtl=this.getRtlOption(),null==this.options.closedIcon&&(this.options.closedIcon=this.getDefaultClosedIcon()),this.connectHandlers(),this.initData()}isDragging(){return this.dndHandler.isDragging}isNodeSelected(e){if(!e)throw Error(_);return this.selectNodeHandler.isNodeSelected(e)}loadData(e,t){return this.doLoadData(e,t),this.element}loadDataFromUrl(e,t,o){return"string"==typeof e?this.doLoadDataFromUrl(e,t,o??null):this.doLoadDataFromUrl(null,e,t),this.element}moveDown(){const e=this.getSelectedNode();return e&&this.keyHandler.moveDown(e),this.element}moveNode(e,t,o){if(!e)throw Error(_);if(!t)throw Error(j+"targetNode");if(!o)throw Error(j+"position");const r=n[o];return void 0!==r&&(this.tree.moveNode(e,t,r),this.refreshElements(null)),this.element}moveUp(){const e=this.getSelectedNode();return e&&this.keyHandler.moveUp(e),this.element}openNode(e,t,o){if(!e)throw Error(_);const[n,r]=(()=>{let e,n;return"function"==typeof t?(e=t,n=null):(n=t,e=o),null==n&&(n=this.options.slide),[n,e]})();return this.openNodeInternal(e,n,r),this.element}prependNode(e,t){const o=t??this.tree,n=o.prepend(e);return this.refreshElements(o),n}refresh(){return this.refreshElements(null),this.element}refreshHitAreas(){return this.dndHandler.refresh(),this.element}reload(e){return this.doLoadDataFromUrl(null,null,e),this.element}removeFromSelection(e){if(!e)throw Error(_);return this.selectNodeHandler.removeFromSelection(e),this.getNodeElementForNode(e).deselect(),this.saveState(),this.element}removeNode(e){if(!e)throw Error(_);if(!e.parent)throw Error("Node has no parent");this.selectNodeHandler.removeFromSelection(e,!0);const t=e.parent;return e.remove(),this.refreshElements(t),this.element}scrollToNode(e){if(!e)throw Error(_);if(!e.element)return this.element;const t=i(e.element)-i(this.$el.get(0));return this.scrollHandler.scrollToY(t),this.element}selectNode(e,t){return this.doSelectNode(e,t),this.element}setOption(e,t){return this.options[e]=t,this.element}setState(e){return e&&(this.saveStateHandler.setInitialState(e),this.refreshElements(null)),this.element}toggle(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!e)throw Error(_);const o=t??this.options.slide;return e.is_open?this.closeNode(e,o):this.openNode(e,o),this.element}toJson(){return JSON.stringify(this.tree.getData())}updateNode(e,t){if(!e)throw Error(_);if(!t)return this.element;const o="object"==typeof t&&t.id&&t.id!==e.id;return o&&this.tree.removeNodeFromIndex(e),e.setData(t),o&&this.tree.addNodeToIndex(e),"object"==typeof t&&t.children&&t.children instanceof Array&&(e.removeChildren(),t.children.length&&e.loadFromData(t.children)),this.refreshElements(e),this.element}}return A.register(x,"tree"),e.JqTreeWidget=x,e}({}); +var jqtree=function(e){"use strict";class t{constructor(e){let{dataFilter:t,loadData:o,onLoadFailed:n,onLoading:r,treeElement:s,triggerEvent:i}=e;this.dataFilter=t,this.loadData=o,this.onLoadFailed=n,this.onLoading=r,this.treeElement=s,this.triggerEvent=i}addLoadingClass(e){e.classList.add("jqtree-loading")}getDomElement(e){return e?.element?e.element:this.treeElement}notifyLoading(e,t,o){const n=jQuery(o);this.onLoading&&this.onLoading(e,t,n),this.triggerEvent("tree.loading_data",{$el:n,isLoading:e,node:t})}parseData(e){const t="string"==typeof e?JSON.parse(e):e;return this.dataFilter?this.dataFilter(t):t}removeLoadingClass(e){e.classList.remove("jqtree-loading")}submitRequest(e,t,o){const n={cache:!1,dataType:"json",error:o,method:"GET",success:t,..."string"==typeof e?{url:e}:e};n.method=n.method?.toUpperCase()??"GET",jQuery.ajax(n)}loadFromUrl(e,t,o){if(!e)return;const n=this.getDomElement(t);this.addLoadingClass(n),this.notifyLoading(!0,t,n);const r=()=>{this.removeLoadingClass(n),this.notifyLoading(!1,t,n)};this.submitRequest(e,(e=>{r(),this.loadData(this.parseData(e),t),o&&"function"==typeof o&&o()}),(e=>{r(),this.onLoadFailed&&this.onLoadFailed(e)}))}}let o=function(e){return e[e.Before=1]="Before",e[e.After=2]="After",e[e.Inside=3]="Inside",e[e.None=4]="None",e}({});const n={after:o.After,before:o.Before,inside:o.Inside,none:o.None},r=e=>{for(const t in n)if(Object.prototype.hasOwnProperty.call(n,t)&&n[t]===e)return t;return""},s=e=>e?"true":"false",i=e=>l(e).top,l=e=>{const t=e.getBoundingClientRect();return{left:t.x+window.scrollX,top:t.y+window.scrollY}};class d{constructor(e){let{autoEscape:t,nodeName:o,offsetX:n,offsetY:r,treeElement:s}=e;this.offsetX=n,this.offsetY=r,this.element=this.createElement(o,t),s.appendChild(this.element)}createElement(e,t){const o=document.createElement("span");return o.classList.add("jqtree-title","jqtree-dragging"),t?o.textContent=e:o.innerHTML=e,o.style.position="absolute",o}move(e,t){this.element.style.left=e-this.offsetX+"px",this.element.style.top=t-this.offsetY+"px"}remove(){this.element.remove()}}const a=(e,t,n,r)=>{const s=Math.min(t.length,4),i=Math.round((r-n)/s);let l=n;for(let n=0;n((e,t)=>{if(!e.length)return[];let o=e[0].top,n=[];const r=[];for(const t of e)t.top!==o&&n.length&&(a(r,n,o,t.top),o=t.top,n=[]),n.push(t);return a(r,n,o,t),r})(((e,t)=>{const n=[];let r=0;const s=(e,t,o)=>{n.push({node:e,position:t,top:o}),r=o};return((e,t)=>{let{handleAfterOpenFolder:o,handleClosedFolder:n,handleFirstNode:r,handleNode:s,handleOpenFolder:i}=t,l=!0;const d=(e,t)=>{let a=(e.is_open||!e.element)&&e.hasChildren(),h=null;if(e.element?.offsetParent&&(h=e.element,l&&(r(e),l=!1),e.hasChildren()?e.is_open?i(e,e.element)||(a=!1):n(e,t,h):s(e,t,e.element)),a){const n=e.children.length;e.children.forEach(((t,o)=>{const r=e.children[o];if(r)if(o===n-1)d(r,null);else{const t=e.children[o+1];t&&d(r,t)}})),e.is_open&&h&&o(e,t)}};d(e,null)})(e,{handleAfterOpenFolder:(e,n)=>{s(e,e===t||n===t?o.None:o.After,r)},handleClosedFolder:(e,n,r)=>{const l=i(r);e===t?s(e,o.None,l):(s(e,o.Inside,l),n!==t&&s(e,o.After,l))},handleFirstNode:e=>{e!==t&&e.element&&s(e,o.Before,i(e.element))},handleNode:(e,n,r)=>{const l=i(r);s(e,e===t?o.None:o.Inside,l),s(e,n===t||e===t?o.None:o.After,l)},handleOpenFolder:(e,n)=>{if(e===t){const t=i(n),r=n.clientHeight;return s(e,o.None,t),r>5&&s(e,o.None,t+r-5),!1}return e.children[0]!==t&&s(e,o.Inside,i(n)),!0}}),n})(e,t),n);class c{constructor(e){let{autoEscape:t,getNodeElement:o,getNodeElementForNode:n,getScrollLeft:r,getTree:s,onCanMove:i,onCanMoveTo:l,onDragMove:d,onDragStop:a,onIsMoveHandle:h,openNode:c,refreshElements:u,slide:m,treeElement:g,triggerEvent:p}=e;this.autoEscape=t,this.getNodeElement=o,this.getNodeElementForNode=n,this.getScrollLeft=r,this.getTree=s,this.onCanMove=i,this.onCanMoveTo=l,this.onDragMove=d,this.onDragStop=a,this.onIsMoveHandle=h,this.openNode=c,this.refreshElements=u,this.slide=m,this.treeElement=g,this.triggerEvent=p,this.hoveredArea=null,this.hitAreas=[],this.isDragging=!1,this.currentItem=null}canMoveToArea(e){if(!this.onCanMoveTo)return!0;if(!this.currentItem)return!1;const t=r(e.position);return this.onCanMoveTo(this.currentItem.node,e.node,t)}clear(){this.dragElement&&(this.dragElement.remove(),this.dragElement=null)}findHoveredArea(e,t){const o=this.getTreeDimensions();if(eo.right||t>o.bottom)return null;let n=0,r=this.hitAreas.length;for(;n>1,o=this.hitAreas[e];if(!o)return null;if(to.bottom))return o;n=e+1}}return null}generateHitAreas(){const e=this.getTree();this.currentItem&&e?this.hitAreas=h(e,this.currentItem.node,this.getTreeDimensions().bottom):this.hitAreas=[]}getTreeDimensions(){const e=l(this.treeElement),t=e.left+this.getScrollLeft(),o=e.top;return{bottom:o+this.treeElement.clientHeight+16,left:t,right:t+this.treeElement.clientWidth,top:o}}moveItem(e){if(this.currentItem&&this.hoveredArea&&this.hoveredArea.position!==o.None&&this.canMoveToArea(this.hoveredArea)){const t=this.currentItem.node,n=this.hoveredArea.node,s=this.hoveredArea.position,i=t.parent;s===o.Inside&&(this.hoveredArea.node.is_open=!0);const l=()=>{const e=this.getTree();e&&(e.moveNode(t,n,s),this.treeElement.textContent="",this.refreshElements(null))};this.triggerEvent("tree.move",{move_info:{do_move:l,moved_node:t,original_event:e.originalEvent,position:r(s),previous_parent:i,target_node:n}}).isDefaultPrevented()||l()}}mustCaptureElement(e){const t=e.nodeName;return"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}mustOpenFolderTimer(e){const t=e.node;return t.isFolder()&&!t.is_open&&e.position===o.Inside}removeDropHint(){this.previousGhost&&this.previousGhost.remove()}removeHitAreas(){this.hitAreas=[]}removeHover(){this.hoveredArea=null}startOpenFolderTimer(e){const t=()=>{this.openNode(e,this.slide,(()=>{this.refresh(),this.updateDropHint()}))};this.stopOpenFolderTimer();const o=this.openFolderDelay;!1!==o&&(this.openFolderTimer=window.setTimeout(t,o))}stopOpenFolderTimer(){this.openFolderTimer&&(clearTimeout(this.openFolderTimer),this.openFolderTimer=null)}updateDropHint(){if(!this.hoveredArea)return;this.removeDropHint();const e=this.getNodeElementForNode(this.hoveredArea.node);this.previousGhost=e.addDropHint(this.hoveredArea.position)}mouseCapture(e){const t=e.target;if(!this.mustCaptureElement(t))return null;if(this.onIsMoveHandle&&!this.onIsMoveHandle(jQuery(t)))return null;let o=this.getNodeElement(t);return o&&this.onCanMove&&(this.onCanMove(o.node)||(o=null)),this.currentItem=o,null!=this.currentItem}mouseDrag(e){if(!this.currentItem||!this.dragElement)return!1;this.dragElement.move(e.pageX,e.pageY);const t=this.findHoveredArea(e.pageX,e.pageY);return t&&this.canMoveToArea(t)?(t.node.isFolder()||this.stopOpenFolderTimer(),this.hoveredArea!==t&&(this.hoveredArea=t,this.mustOpenFolderTimer(t)?this.startOpenFolderTimer(t.node):this.stopOpenFolderTimer(),this.updateDropHint())):(this.removeDropHint(),this.stopOpenFolderTimer(),this.hoveredArea=t),t||this.onDragMove&&this.onDragMove(this.currentItem.node,e.originalEvent),!0}mouseStart(e){if(!this.currentItem)return!1;this.refresh();const{left:t,top:o}=l(e.target),n=this.currentItem.node;return this.dragElement=new d({autoEscape:this.autoEscape??!0,nodeName:n.name,offsetX:e.pageX-t,offsetY:e.pageY-o,treeElement:this.treeElement}),this.isDragging=!0,this.currentItem.element.classList.add("jqtree-moving"),!0}mouseStop(e){this.moveItem(e),this.clear(),this.removeHover(),this.removeDropHint(),this.removeHitAreas();const t=this.currentItem;return this.currentItem&&(this.currentItem.element.classList.remove("jqtree-moving"),this.currentItem=null),this.isDragging=!1,!this.hoveredArea&&t&&this.onDragStop&&this.onDragStop(t.node,e.originalEvent),!1}refresh(){this.removeHitAreas(),this.currentItem&&(this.generateHitAreas(),this.currentItem=this.getNodeElementForNode(this.currentItem.node),this.isDragging&&this.currentItem.element.classList.add("jqtree-moving"))}}class u{constructor(e){let{$element:t,autoEscape:o,buttonLeft:n,closedIcon:r,dragAndDrop:s,getTree:i,isNodeSelected:l,onCreateLi:d,openedIcon:a,rtl:h,showEmptyFolder:c,tabIndex:u}=e;this.autoEscape=o,this.buttonLeft=n,this.dragAndDrop=s,this.$element=t,this.getTree=i,this.isNodeSelected=l,this.onCreateLi=d,this.rtl=h,this.showEmptyFolder=c,this.tabIndex=u,this.openedIconElement=this.createButtonElement(a??"+"),this.closedIconElement=this.createButtonElement(r??"-")}attachNodeData(e,t){e.element=t,jQuery(t).data("node",e)}createButtonElement(e){if("string"==typeof e){const t=document.createElement("div");return t.innerHTML=e,document.createTextNode(t.innerHTML)}return e.nodeType?e:jQuery(e)[0]}createDomElements(e,t,o,n){const r=this.createUl(o);e.appendChild(r);for(const e of t){const t=this.createLi(e,n);r.appendChild(t),e.hasChildren()&&this.createDomElements(t,e.children,!1,n+1)}}createFolderLi(e,t,o){const n=this.getButtonClasses(e),r=this.getFolderClasses(e,o),i=e.is_open?this.openedIconElement:this.closedIconElement,l=document.createElement("li");l.className=`jqtree_common ${r}`,l.setAttribute("role","none");const d=document.createElement("div");d.className="jqtree-element jqtree_common",d.setAttribute("role","none"),l.appendChild(d);const a=document.createElement("a");a.className=n,i&&a.appendChild(i.cloneNode(!0)),this.buttonLeft&&d.appendChild(a);const h=this.createTitleSpan(e.name,o,!0,t);return h.setAttribute("aria-expanded",s(e.is_open)),d.appendChild(h),this.buttonLeft||d.appendChild(a),l}createLi(e,t){const o=Boolean(this.isNodeSelected(e)),n=e.isFolder()||e.isEmptyFolder&&this.showEmptyFolder?this.createFolderLi(e,t,o):this.createNodeLi(e,t,o);return this.attachNodeData(e,n),this.onCreateLi&&this.onCreateLi(e,jQuery(n),o),n}createNodeLi(e,t,o){const n=["jqtree_common"];o&&n.push("jqtree-selected");const r=n.join(" "),s=document.createElement("li");s.className=r,s.setAttribute("role","none");const i=document.createElement("div");i.className="jqtree-element jqtree_common",i.setAttribute("role","none"),s.appendChild(i);const l=this.createTitleSpan(e.name,o,!1,t);return i.appendChild(l),s}createTitleSpan(e,t,o,n){const r=document.createElement("span");let s="jqtree-title jqtree_common";if(o&&(s+=" jqtree-title-folder"),s+=" jqtree-title-button-"+(this.buttonLeft?"left":"right"),r.className=s,t){const e=this.tabIndex;void 0!==e&&r.setAttribute("tabindex",`${e}`)}return this.setTreeItemAriaAttributes(r,e,n,t),this.autoEscape?r.textContent=e:r.innerHTML=e,r}createUl(e){let t,o;e?(t="jqtree-tree",o="tree",this.rtl&&(t+=" jqtree-rtl")):(t="",o="group"),this.dragAndDrop&&(t+=" jqtree-dnd");const n=document.createElement("ul");return n.className=`jqtree_common ${t}`,n.setAttribute("role",o),n}getButtonClasses(e){const t=["jqtree-toggler","jqtree_common"];return e.is_open||t.push("jqtree-closed"),this.buttonLeft?t.push("jqtree-toggler-left"):t.push("jqtree-toggler-right"),t.join(" ")}getFolderClasses(e,t){const o=["jqtree-folder"];return e.is_open||o.push("jqtree-closed"),t&&o.push("jqtree-selected"),e.is_loading&&o.push("jqtree-loading"),o.join(" ")}setTreeItemAriaAttributes(e,t,o,n){e.setAttribute("aria-label",t),e.setAttribute("aria-level",`${o}`),e.setAttribute("aria-selected",s(n)),e.setAttribute("role","treeitem")}render(e){e?.parent?this.renderFromNode(e):this.renderFromRoot()}renderFromNode(e){if(!e.element)return;const t=jQuery(e.element),o=this.createLi(e,e.getLevel());t.after(o),t.remove(),this.createDomElements(o,e.children,!1,e.getLevel()+1)}renderFromRoot(){this.$element.empty();const e=this.getTree();this.$element[0]&&e&&this.createDomElements(this.$element[0],e.children,!0,1)}}class m{handleKeyDown=e=>{if(!this.canHandleKeyboard())return;let t=!1;const o=this.getSelectedNode();if(o)switch(e.key){case"ArrowDown":t=this.moveDown(o);break;case"ArrowLeft":t=this.moveLeft(o);break;case"ArrowRight":t=this.moveRight(o);break;case"ArrowUp":t=this.moveUp(o)}t&&e.preventDefault()};constructor(e){let{closeNode:t,getSelectedNode:o,isFocusOnTree:n,keyboardSupport:r,openNode:s,selectNode:i}=e;this.closeNode=t,this.getSelectedNode=o,this.isFocusOnTree=n,this.keyboardSupport=r,this.openNode=s,this.originalSelectNode=i,r&&document.addEventListener("keydown",this.handleKeyDown)}canHandleKeyboard(){return this.keyboardSupport&&this.isFocusOnTree()}moveLeft(e){return e.isFolder()&&e.is_open?(this.closeNode(e),!0):this.selectNode(e.getParent())}moveRight(e){return!!e.isFolder()&&(e.is_open?this.selectNode(e.getNextVisibleNode()):(this.openNode(e),!0))}selectNode(e){return!!e&&(this.originalSelectNode(e),!0)}deinit(){this.handleKeyDownHandler&&document.removeEventListener("keydown",this.handleKeyDownHandler)}moveDown(e){return this.selectNode(e.getNextVisibleNode())}moveUp(e){return this.selectNode(e.getPreviousVisibleNode())}}const g=e=>({originalEvent:e,pageX:e.pageX,pageY:e.pageY,target:e.target}),p=(e,t)=>({originalEvent:t,pageX:e.pageX,pageY:e.pageY,target:e.target});class f{handleClick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);if(t)switch(t.type){case"button":this.onClickButton(t.node),e.preventDefault(),e.stopPropagation();break;case"label":this.triggerEvent("tree.click",{click_event:e,node:t.node}).isDefaultPrevented()||this.onClickTitle(t.node);break}};handleContextmenu=e=>{if(!e.target)return;const t=e.target.closest("ul.jqtree-tree .jqtree-element");if(t){const o=this.getNode(t);if(o)return e.preventDefault(),e.stopPropagation(),this.triggerEvent("tree.contextmenu",{click_event:e,node:o}),!1}return null};handleDblclick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);"label"===t?.type&&this.triggerEvent("tree.dblclick",{click_event:e,node:t.node})};mouseDown=e=>{if(0!==e.button)return;this.handleMouseDown(g(e))&&e.cancelable&&e.preventDefault()};mouseMove=e=>{this.handleMouseMove(e,g(e))};mouseUp=e=>{this.handleMouseUp(g(e))};touchEnd=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseUp(p(t,e))};touchMove=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseMove(e,p(t,e))};touchStart=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseDown(p(t,e))};constructor(e){let{element:t,getMouseDelay:o,getNode:n,onClickButton:r,onClickTitle:s,onMouseCapture:i,onMouseDrag:l,onMouseStart:d,onMouseStop:a,triggerEvent:h,useContextMenu:c}=e;this.element=t,this.getMouseDelay=o,this.getNode=n,this.onClickButton=r,this.onClickTitle=s,this.onMouseCapture=i,this.onMouseDrag=l,this.onMouseStart=d,this.onMouseStop=a,this.triggerEvent=h,this.useContextMenu=c,t.addEventListener("click",this.handleClick),t.addEventListener("dblclick",this.handleDblclick),t.addEventListener("mousedown",this.mouseDown,{passive:!1}),t.addEventListener("touchstart",this.touchStart,{passive:!1}),c&&t.addEventListener("contextmenu",this.handleContextmenu),this.isMouseStarted=!1,this.mouseDelayTimer=null,this.isMouseDelayMet=!1,this.mouseDownInfo=null}getClickTarget(e){const t=e.closest(".jqtree-toggler");if(t){const e=this.getNode(t);if(e)return{node:e,type:"button"}}else{const t=e.closest(".jqtree-element");if(t){const e=this.getNode(t);if(e)return{node:e,type:"label"}}}return null}handleMouseDown(e){return this.isMouseStarted&&this.handleMouseUp(e),this.mouseDownInfo=e,!!this.onMouseCapture(e)&&(this.handleStartMouse(),!0)}handleMouseMove(e,t){if(this.isMouseStarted)return this.onMouseDrag(t),void(e.cancelable&&e.preventDefault());this.isMouseDelayMet&&(this.mouseDownInfo&&(this.isMouseStarted=this.onMouseStart(this.mouseDownInfo)),this.isMouseStarted?(this.onMouseDrag(t),e.cancelable&&e.preventDefault()):this.handleMouseUp(t))}handleMouseUp(e){this.removeMouseMoveEventListeners(),this.isMouseDelayMet=!1,this.mouseDownInfo=null,this.isMouseStarted&&(this.isMouseStarted=!1,this.onMouseStop(e))}handleStartMouse(){document.addEventListener("mousemove",this.mouseMove,{passive:!1}),document.addEventListener("touchmove",this.touchMove,{passive:!1}),document.addEventListener("mouseup",this.mouseUp,{passive:!1}),document.addEventListener("touchend",this.touchEnd,{passive:!1});const e=this.getMouseDelay();e?this.startMouseDelayTimer(e):this.isMouseDelayMet=!0}removeMouseMoveEventListeners(){document.removeEventListener("mousemove",this.mouseMove),document.removeEventListener("touchmove",this.touchMove),document.removeEventListener("mouseup",this.mouseUp),document.removeEventListener("touchend",this.touchEnd)}startMouseDelayTimer(e){this.mouseDelayTimer&&clearTimeout(this.mouseDelayTimer),this.mouseDelayTimer=window.setTimeout((()=>{this.mouseDownInfo&&(this.isMouseDelayMet=!0)}),e),this.isMouseDelayMet=!1}deinit(){this.element.removeEventListener("click",this.handleClick),this.element.removeEventListener("dblclick",this.handleDblclick),this.useContextMenu&&this.element.removeEventListener("contextmenu",this.handleContextmenu),this.element.removeEventListener("mousedown",this.mouseDown),this.element.removeEventListener("touchstart",this.touchStart),this.removeMouseMoveEventListeners()}}const v=e=>"object"==typeof e&&"children"in e&&e.children instanceof Array;class S{constructor(){let e=arguments.length>0&&void 0!==arguments[0]?arguments[0]:null,t=arguments.length>1&&void 0!==arguments[1]&&arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:S;this.name="",this.load_on_demand=!1,this.isEmptyFolder=null!=e&&v(e)&&0===e.children.length,this.setData(e),this.children=[],this.parent=null,t&&(this.idMapping=new Map,this.tree=this,this.nodeClass=o)}createNode(e){return new(this.getNodeClass())(e)}doRemoveChild(e){this.children.splice(this.getChildIndex(e),1),this.tree?.removeNodeFromIndex(e)}getNodeClass(){return this.nodeClass??this.tree?.nodeClass??S}loadChildrenFromData(e){v(e)&&e.children.length&&this.loadFromData(e.children)}setParent(e){this.parent=e,this.tree=e.tree,this.tree?.addNodeToIndex(this)}addAfter(e){if(this.parent){const t=this.createNode(e),o=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(t,o+1),t.loadChildrenFromData(e),t}return null}addBefore(e){if(this.parent){const t=this.createNode(e),o=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(t,o),t.loadChildrenFromData(e),t}return null}addChild(e){this.children.push(e),e.setParent(this)}addChildAtPosition(e,t){this.children.splice(t,0,e),e.setParent(this)}addNodeToIndex(e){null!=e.id&&this.idMapping.set(e.id,e)}addParent(e){if(this.parent){const t=this.createNode(e);this.tree&&t.setParent(this.tree);const o=this.parent;for(const e of o.children)t.addChild(e);return o.children=[],o.addChild(t),t}return null}append(e){const t=this.createNode(e);return this.addChild(t),t.loadChildrenFromData(e),t}filter(e){const t=[];return this.iterate((o=>(e(o)&&t.push(o),!0))),t}getChildIndex(e){return this.children.indexOf(e)}getData(){const e=t=>t.map((t=>{const o={};for(const e in t)if(-1===["parent","children","element","idMapping","load_on_demand","nodeClass","tree","isEmptyFolder"].indexOf(e)&&Object.prototype.hasOwnProperty.call(t,e)){const n=t[e];o[e]=n}return t.hasChildren()&&(o.children=e(t.children)),o}));return e(arguments.length>0&&void 0!==arguments[0]&&arguments[0]?[this]:this.children)}getLastChild(){if(this.hasChildren()){const e=this.children[this.children.length-1];return e?e.hasChildren()&&e.is_open?e.getLastChild():e:null}return null}getLevel(){let e=0,t=this;for(;t.parent;)e+=1,t=t.parent;return e}getNextNode(){if((!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&this.hasChildren())return this.children[0]??null;if(this.parent){const e=this.getNextSibling();return e||this.parent.getNextNode(!1)}return null}getNextSibling(){if(this.parent){const e=this.parent.getChildIndex(this)+1;return e!t&&(!e(o)||(t=o,!1)))),t}getNodeById(e){return this.idMapping.get(e)??null}getNodeByName(e){return this.getNodeByCallback((t=>t.name===e))}getNodeByNameMustExist(e){const t=this.getNodeByCallback((t=>t.name===e));if(!t)throw new Error(`Node with name ${e} not found`);return t}getNodesByProperty(e,t){return this.filter((o=>o[e]===t))}getParent(){return this.parent&&this.parent.parent?this.parent:null}getPreviousNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()?e.getLastChild():e:this.getParent()}return null}getPreviousSibling(){if(this.parent){const e=this.parent.getChildIndex(this)-1;return e>=0?this.parent.children[e]??null:null}return null}getPreviousVisibleNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()&&e.is_open?e.getLastChild():e:this.getParent()}return null}hasChildren(){return 0!==this.children.length}initFromData(e){const t=e=>{for(const t of e){const e=this.createNode();e.initFromData(t),this.addChild(e)}};(e=>{this.setData(e),v(e)&&e.children.length&&t(e.children)})(e)}isFolder(){return this.hasChildren()||this.load_on_demand}isParentOf(e){let t=e.parent;for(;t;){if(t===this)return!0;t=t.parent}return!1}iterate(e){const t=(o,n)=>{for(const r of o.children){e(r,n)&&r.hasChildren()&&t(r,n+1)}};t(this,0)}loadFromData(e){this.removeChildren();for(const t of e){const e=this.createNode(t);this.addChild(e),v(t)&&e.loadFromData(t.children)}return this}moveNode(e,t,n){if(!e.parent||e.isParentOf(t))return!1;switch(e.parent.doRemoveChild(e),n){case o.After:return!!t.parent&&(t.parent.addChildAtPosition(e,t.parent.getChildIndex(t)+1),!0);case o.Before:return!!t.parent&&(t.parent.addChildAtPosition(e,t.parent.getChildIndex(t)),!0);case o.Inside:return t.addChildAtPosition(e,0),!0;default:return!1}}prepend(e){const t=this.createNode(e);return this.addChildAtPosition(t,0),t.loadChildrenFromData(e),t}remove(){this.parent&&(this.parent.removeChild(this),this.parent=null)}removeChild(e){e.removeChildren(),this.doRemoveChild(e)}removeChildren(){this.iterate((e=>(this.tree?.removeNodeFromIndex(e),!0))),this.children=[]}removeNodeFromIndex(e){null!=e.id&&this.idMapping.delete(e.id)}setData(e){if(e)if("string"==typeof e)this.name=e;else if("object"==typeof e)for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){const o=e[t];"label"===t||"name"===t?"string"==typeof o&&(this.name=o):"children"!==t&&"parent"!==t&&(this[t]=o)}}}class N{constructor(e,t){const o=e.querySelector(":scope > .jqtree-element");if(!o)return void(this.hint=void 0);const n=Math.max(e.offsetWidth+t-4,0),r=Math.max(e.clientHeight-4,0),s=document.createElement("span");s.className="jqtree-border",s.style.width=`${n}px`,s.style.height=`${r}px`,this.hint=s,o.append(this.hint)}remove(){this.hint?.remove()}}class E{constructor(e,t,n){switch(this.element=t,this.node=e,this.ghost=this.createGhostElement(),n){case o.After:this.moveAfter();break;case o.Before:this.moveBefore();break;case o.Inside:e.isFolder()&&e.is_open?this.moveInsideOpenFolder():this.moveInside()}}createGhostElement(){const e=document.createElement("li");e.className="jqtree_common jqtree-ghost";const t=document.createElement("span");t.className="jqtree_common jqtree-circle",e.append(t);const o=document.createElement("span");return o.className="jqtree_common jqtree-line",e.append(o),e}moveAfter(){this.element.after(this.ghost)}moveBefore(){this.element.before(this.ghost)}moveInside(){this.element.after(this.ghost),this.ghost.classList.add("jqtree-inside")}moveInsideOpenFolder(){const e=this.node.children[0]?.element;e&&e.before(this.ghost)}remove(){this.ghost.remove()}}class D{constructor(e){let{getScrollLeft:t,node:o,tabIndex:n,treeElement:r}=e;this.getScrollLeft=t,this.tabIndex=n,this.treeElement=r,this.init(o)}getTitleSpan(){return this.element.querySelector(":scope > .jqtree-element > span.jqtree-title")}getUl(){return this.element.querySelector(":scope > ul")}mustShowBorderDropHint(e){return e===o.Inside}addDropHint(e){return this.mustShowBorderDropHint(e)?new N(this.element,this.getScrollLeft()):new E(this.node,this.element,e)}deselect(){this.element.classList.remove("jqtree-selected");const e=this.getTitleSpan();e.removeAttribute("tabindex"),e.setAttribute("aria-selected","false"),e.blur()}init(e){this.node=e,e.element||(e.element=this.treeElement),this.element=e.element}select(e){this.element.classList.add("jqtree-selected");const t=this.getTitleSpan(),o=this.tabIndex;null!=o&&t.setAttribute("tabindex",o.toString()),t.setAttribute("aria-selected","true"),e&&t.focus()}}class y extends D{constructor(e){let{closedIconElement:t,getScrollLeft:o,node:n,openedIconElement:r,tabIndex:s,treeElement:i,triggerEvent:l}=e;super({getScrollLeft:o,node:n,tabIndex:s,treeElement:i}),this.closedIconElement=t,this.openedIconElement=r,this.triggerEvent=l}mustShowBorderDropHint(e){return!this.node.is_open&&e===o.Inside}getButton(){return this.element.querySelector(":scope > .jqtree-element > a.jqtree-toggler")}close(){let e=!(arguments.length>0&&void 0!==arguments[0])||arguments[0],t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:"fast";if(!this.node.is_open)return;this.node.is_open=!1;const o=this.getButton();o.classList.add("jqtree-closed"),o.innerHTML="";const n=this.closedIconElement;if(n){const e=n.cloneNode(!0);o.appendChild(e)}const r=()=>{this.element.classList.add("jqtree-closed");this.getTitleSpan().setAttribute("aria-expanded","false"),this.triggerEvent("tree.close",{node:this.node})};e?jQuery(this.getUl()).slideUp(t,r):(jQuery(this.getUl()).hide(),r())}open(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2&&void 0!==arguments[2]?arguments[2]:"fast";if(this.node.is_open)return;this.node.is_open=!0;const n=this.getButton();n.classList.remove("jqtree-closed"),n.innerHTML="";const r=this.openedIconElement;if(r){const e=r.cloneNode(!0);n.appendChild(e)}const s=()=>{this.element.classList.remove("jqtree-closed");this.getTitleSpan().setAttribute("aria-expanded","true"),e&&e(this.node),this.triggerEvent("tree.open",{node:this.node})};t?jQuery(this.getUl()).slideDown(o,s):(jQuery(this.getUl()).show(),s())}}class b{constructor(e){let{addToSelection:t,getNodeById:o,getSelectedNodes:n,getTree:r,onGetStateFromStorage:s,onSetStateFromStorage:i,openNode:l,refreshElements:d,removeFromSelection:a,saveState:h}=e;this.addToSelection=t,this.getNodeById=o,this.getSelectedNodes=n,this.getTree=r,this.onGetStateFromStorage=s,this.onSetStateFromStorage=i,this.openNode=l,this.refreshElements=d,this.removeFromSelection=a,this.saveStateOption=h}getKeyName(){return"string"==typeof this.saveStateOption?this.saveStateOption:"tree"}loadFromStorage(){return this.onGetStateFromStorage?this.onGetStateFromStorage():this.supportsLocalStorage()?localStorage.getItem(this.getKeyName()):null}openInitialNodes(e){let t=!1;for(const o of e){const e=this.getNodeById(o);e&&(e.load_on_demand?t=!0:e.is_open=!0)}return t}parseState(e){const t=JSON.parse(e);var o;return t.selected_node&&("number"==typeof(o=t.selected_node)&&o%1==0)&&(t.selected_node=[t.selected_node]),t}resetSelection(){this.getSelectedNodes().forEach((e=>{this.removeFromSelection(e)}))}selectInitialNodes(e){let t=0;for(const o of e){const e=this.getNodeById(o);e&&(t+=1,this.addToSelection(e))}return 0!==t}supportsLocalStorage(){return null==this._supportsLocalStorage&&(this._supportsLocalStorage=(()=>{try{const e="_storage_test";sessionStorage.setItem(e,"value"),sessionStorage.removeItem(e)}catch{return!1}return!0})()),this._supportsLocalStorage}getNodeIdToBeSelected(){const e=this.getStateFromStorage();return e?.selected_node?e.selected_node[0]??null:null}getState(){return{open_nodes:(()=>{const e=[];return this.getTree()?.iterate((t=>(t.is_open&&t.id&&t.hasChildren()&&e.push(t.id),!0))),e})(),selected_node:(()=>{const e=[];return this.getSelectedNodes().forEach((t=>{null!=t.id&&e.push(t.id)})),e})()}}getStateFromStorage(){const e=this.loadFromStorage();return e?this.parseState(e):null}saveState(){const e=JSON.stringify(this.getState());this.onSetStateFromStorage?this.onSetStateFromStorage(e):this.supportsLocalStorage()&&localStorage.setItem(this.getKeyName(),e)}setInitialState(e){let t=!1;return e.open_nodes&&(t=this.openInitialNodes(e.open_nodes)),this.resetSelection(),e.selected_node&&this.selectInitialNodes(e.selected_node),t}setInitialStateOnDemand(e,t){let o=0,n=e.open_nodes;const r=()=>{if(!n)return;const r=[];for(const e of n){const t=this.getNodeById(e);t?t.is_loading||(t.load_on_demand?s(t):this.openNode(t,!1)):r.push(e)}n=r,e.selected_node&&this.selectInitialNodes(e.selected_node)&&this.refreshElements(null),0===o&&t()},s=e=>{o+=1,this.openNode(e,!1,(()=>{o-=1,r()}))};r()}}class I{constructor(e){let{container:t,refreshHitAreas:o}=e;this.container=t,this.refreshHitAreas=o}getNewHorizontalScrollDirection(e){const t=l(this.container),o=t.left+this.container.clientWidth,n=t.left;return e>o-20?"right":ethis.getScrollParentBottom()?"bottom":void 0}getScrollParentBottom(){return null==this.scrollParentBottom&&(this.scrollParentBottom=this.getScrollParentTop()+this.container.clientHeight),this.scrollParentBottom}getScrollParentTop(){return null==this.scrollParentTop&&(this.scrollParentTop=i(this.container)),this.scrollParentTop}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:e,top:0}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:0,top:e}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}checkHorizontalScrolling(e){const t=this.getNewHorizontalScrollDirection(e);this.horizontalScrollDirection!==t&&(this.horizontalScrollDirection=t,null!=this.horizontalScrollTimeout&&window.clearTimeout(this.verticalScrollTimeout),t&&(this.horizontalScrollTimeout=window.setTimeout(this.scrollHorizontally.bind(this),40)))}checkVerticalScrolling(e){const t=this.getNewVerticalScrollDirection(e);this.verticalScrollDirection!==t&&(this.verticalScrollDirection=t,null!=this.verticalScrollTimeout&&(window.clearTimeout(this.verticalScrollTimeout),this.verticalScrollTimeout=void 0),t&&(this.verticalScrollTimeout=window.setTimeout(this.scrollVertically.bind(this),40)))}getScrollLeft(){return this.container.scrollLeft}scrollToY(e){this.container.scrollTop=e}stopScrolling(){this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0,this.scrollParentTop=void 0,this.scrollParentBottom=void 0}}class C{constructor(e){let{refreshHitAreas:t,treeElement:o}=e;this.refreshHitAreas=t,this.treeElement=o}canScrollDown(){const e=document.documentElement;return e.scrollTop+e.clientHeightwindow.innerWidth-20&&this.canScrollRight()?"right":t?"left":void 0}getNewVerticalScrollDirection(e){const t=jQuery(document).scrollTop()??0;if(e-t<20)return"top";return window.innerHeight-(e-t)<20&&this.canScrollDown()?"bottom":void 0}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;window.scrollBy({behavior:"instant",left:e,top:0}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;window.scrollBy({behavior:"instant",left:0,top:e}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}checkHorizontalScrolling(e){const t=this.getNewHorizontalScrollDirection(e);this.horizontalScrollDirection!==t&&(this.horizontalScrollDirection=t,null!=this.horizontalScrollTimeout&&window.clearTimeout(this.horizontalScrollTimeout),t&&(this.horizontalScrollTimeout=window.setTimeout(this.scrollHorizontally.bind(this),40)))}checkVerticalScrolling(e){const t=this.getNewVerticalScrollDirection(e);this.verticalScrollDirection!==t&&(this.verticalScrollDirection=t,null!=this.verticalScrollTimeout&&(window.clearTimeout(this.verticalScrollTimeout),this.verticalScrollTimeout=void 0),t&&(this.verticalScrollTimeout=window.setTimeout(this.scrollVertically.bind(this),40)))}getScrollLeft(){return document.documentElement.scrollLeft}scrollToY(e){const t=i(this.treeElement);document.documentElement.scrollTop=e+t}stopScrolling(){this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0,this.documentScrollHeight=void 0,this.documentScrollWidth=void 0}}const T=e=>"auto"===e||"scroll"===e,F=e=>{const t=getComputedStyle(e);return T(t.overflowX)||T(t.overflowY)},L=(e,t)=>{const o=(e=>{if(F(e))return e;let t=e.parentElement;for(;t;){if(F(t))return t;t=t.parentElement}return null})(e);return o&&"HTML"!==o.tagName?new I({container:o,refreshHitAreas:t}):new C({refreshHitAreas:t,treeElement:e})};class w{constructor(e){let{refreshHitAreas:t,treeElement:o}=e;this.refreshHitAreas=t,this.scrollParent=void 0,this.treeElement=o}checkHorizontalScrolling(e){this.getScrollParent().checkHorizontalScrolling(e.pageX)}checkVerticalScrolling(e){this.getScrollParent().checkVerticalScrolling(e.pageY)}getScrollParent(){return this.scrollParent||(this.scrollParent=L(this.treeElement,this.refreshHitAreas)),this.scrollParent}checkScrolling(e){this.checkVerticalScrolling(e),this.checkHorizontalScrolling(e)}getScrollLeft(){return this.getScrollParent().getScrollLeft()}scrollToY(e){this.getScrollParent().scrollToY(e)}stopScrolling(){this.getScrollParent().stopScrolling()}}class H{constructor(e){let{getNodeById:t}=e;this.getNodeById=t,this.selectedNodes=new Set,this.clear()}addToSelection(e){null!=e.id?this.selectedNodes.add(e.id):this.selectedSingleNode=e}clear(){this.selectedNodes.clear(),this.selectedSingleNode=null}getSelectedNode(){const e=this.getSelectedNodes();return!!e.length&&(e[0]??!1)}getSelectedNodes(){if(this.selectedSingleNode)return[this.selectedSingleNode];{const e=[];return this.selectedNodes.forEach((t=>{const o=this.getNodeById(t);o&&e.push(o)})),e}}getSelectedNodesUnder(e){if(this.selectedSingleNode)return e.isParentOf(this.selectedSingleNode)?[this.selectedSingleNode]:[];{const t=[];for(const o in this.selectedNodes)if(Object.prototype.hasOwnProperty.call(this.selectedNodes,o)){const n=this.getNodeById(o);n&&e.isParentOf(n)&&t.push(n)}return t}}isNodeSelected(e){return null!=e.id?this.selectedNodes.has(e.id):!!this.selectedSingleNode&&this.selectedSingleNode.element===e.element}removeFromSelection(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];null==e.id?this.selectedSingleNode&&e.element===this.selectedSingleNode.element&&(this.selectedSingleNode=null):(this.selectedNodes.delete(e.id),t&&e.iterate((()=>(null!=e.id&&this.selectedNodes.delete(e.id),!0))))}}const M=(e,t)=>{const o=()=>`simple_widget_${t}`,n=(e,t)=>{const o=jQuery.data(e,t);return o&&o instanceof A?o:null},r=(t,r)=>{const s=o();for(const o of t.get()){if(!n(o,s)){const t=new e(o,r);jQuery.data(o,s)||jQuery.data(o,s,t),t.init()}}return t};jQuery.fn[t]=function(t){if(!t)return r(this,null);if("object"==typeof t){return r(this,t)}if("string"==typeof t&&"_"!==t[0]){const r=t;if("destroy"===r)return void(e=>{const t=o();for(const o of e.get()){const e=n(o,t);e&&e.destroy(),jQuery.removeData(o,t)}})(this);if("get_widget_class"===r)return e;for(var s=arguments.length,i=new Array(s>1?s-1:0),l=1;l{let r=null;for(const s of e.get()){const e=jQuery.data(s,o());if(e&&e instanceof A){const o=e[t];o&&"function"==typeof o&&(r=o.apply(e,n))}}return r})(this,r,i)}}};class A{static defaults={};constructor(e,t){this.$el=jQuery(e);const o=this.constructor.defaults;this.options={...o,...t}}static register(e,t){M(e,t)}deinit(){}destroy(){this.deinit()}init(){}}const _="Node parameter is empty",j="Parameter is empty: ";class x extends A{static defaults=(()=>({animationSpeed:"fast",autoEscape:!0,autoOpen:!1,buttonLeft:!0,closedIcon:void 0,data:void 0,dataFilter:void 0,dataUrl:void 0,dragAndDrop:!1,keyboardSupport:!0,nodeClass:S,onCanMove:void 0,onCanMoveTo:void 0,onCanSelectNode:void 0,onCreateLi:void 0,onDragMove:void 0,onDragStop:void 0,onGetStateFromStorage:void 0,onIsMoveHandle:void 0,onLoadFailed:void 0,onLoading:void 0,onSetStateFromStorage:void 0,openedIcon:"▼",openFolderDelay:500,rtl:void 0,saveState:!1,selectable:!0,showEmptyFolder:!1,slide:!0,startDndDelay:300,tabIndex:0,useContextMenu:!0}))();connectHandlers(){const{autoEscape:e,buttonLeft:o,closedIcon:n,dataFilter:r,dragAndDrop:s,keyboardSupport:i,onCanMove:l,onCanMoveTo:d,onCreateLi:a,onDragMove:h,onDragStop:g,onGetStateFromStorage:p,onIsMoveHandle:v,onLoadFailed:S,onLoading:N,onSetStateFromStorage:E,openedIcon:D,openFolderDelay:y,rtl:I,saveState:C,showEmptyFolder:T,slide:F,tabIndex:L}=this.options,M=this.closeNode.bind(this),A=this.getNodeElement.bind(this),_=this.getNodeElementForNode.bind(this),j=this.getNodeById.bind(this),x=this.getSelectedNode.bind(this),B=this.getTree.bind(this),P=this.isFocusOnTree.bind(this),k=this.loadData.bind(this),q=this.openNodeInternal.bind(this),O=this.refreshElements.bind(this),U=this.refreshHitAreas.bind(this),z=this.selectNode.bind(this),Q=this.element,V=this.element.get(0),Y=this.triggerEvent.bind(this),$=new H({getNodeById:j}),R=$.addToSelection.bind($),X=$.getSelectedNodes.bind($),G=$.isNodeSelected.bind($),W=$.removeFromSelection.bind($),K=new t({dataFilter:r,loadData:k,onLoadFailed:S,onLoading:N,treeElement:V,triggerEvent:Y}),J=new b({addToSelection:R,getNodeById:j,getSelectedNodes:X,getTree:B,onGetStateFromStorage:p,onSetStateFromStorage:E,openNode:q,refreshElements:O,removeFromSelection:W,saveState:C}),Z=new w({refreshHitAreas:U,treeElement:V}),ee=Z.getScrollLeft.bind(Z),te=new c({autoEscape:e,getNodeElement:A,getNodeElementForNode:_,getScrollLeft:ee,getTree:B,onCanMove:l,onCanMoveTo:d,onDragMove:h,onDragStop:g,onIsMoveHandle:v,openFolderDelay:y,openNode:q,refreshElements:O,slide:F,treeElement:V,triggerEvent:Y}),oe=new m({closeNode:M,getSelectedNode:x,isFocusOnTree:P,keyboardSupport:i,openNode:q,selectNode:z}),ne=new u({$element:Q,autoEscape:e,buttonLeft:o,closedIcon:n,dragAndDrop:s,getTree:B,isNodeSelected:G,onCreateLi:a,openedIcon:D,rtl:I,showEmptyFolder:T,tabIndex:L}),re=this.getNode.bind(this),se=this.mouseCapture.bind(this),ie=this.mouseDrag.bind(this),le=this.mouseStart.bind(this),de=this.mouseStop.bind(this),ae=new f({element:V,getMouseDelay:()=>this.options.startDndDelay??0,getNode:re,onClickButton:this.toggle.bind(this),onClickTitle:this.doSelectNode.bind(this),onMouseCapture:se,onMouseDrag:ie,onMouseStart:le,onMouseStop:de,triggerEvent:Y,useContextMenu:this.options.useContextMenu});this.dataLoader=K,this.dndHandler=te,this.keyHandler=oe,this.mouseHandler=ae,this.renderer=ne,this.saveStateHandler=J,this.scrollHandler=Z,this.selectNodeHandler=$}containsElement(e){const t=this.getNode(e);return null!=t&&t.tree===this.tree}createFolderElement(e){const t=this.renderer.closedIconElement,o=this.scrollHandler.getScrollLeft.bind(this.scrollHandler),n=this.renderer.openedIconElement,r=this.options.tabIndex,s=this.element.get(0),i=this.triggerEvent.bind(this);return new y({closedIconElement:t,getScrollLeft:o,node:e,openedIconElement:n,tabIndex:r,treeElement:s,triggerEvent:i})}createNodeElement(e){const t=this.scrollHandler.getScrollLeft.bind(this.scrollHandler),o=this.options.tabIndex,n=this.element.get(0);return new D({getScrollLeft:t,node:e,tabIndex:o,treeElement:n})}deselectCurrentNode(){const e=this.getSelectedNode();e&&this.removeFromSelection(e)}deselectNodes(e){const t=this.selectNodeHandler.getSelectedNodesUnder(e);for(const e of t)this.selectNodeHandler.removeFromSelection(e)}doLoadData(e,t){e&&(t?(this.deselectNodes(t),this.loadSubtree(e,t)):this.initTree(e),this.isDragging()&&this.dndHandler.refresh()),this.triggerEvent("tree.load_data",{parent_node:t,tree_data:e})}doLoadDataFromUrl(e,t,o){const n=e??this.getDataUrlInfo(t);this.dataLoader.loadFromUrl(n,t,o)}doSelectNode(e,t){const o=()=>{this.options.saveState&&this.saveStateHandler.saveState()};if(!e)return this.deselectCurrentNode(),void o();const n={mustSetFocus:!0,mustToggle:!0,...t??{}};if((()=>this.options.onCanSelectNode?this.options.selectable&&this.options.onCanSelectNode(e):this.options.selectable)()){if(this.selectNodeHandler.isNodeSelected(e))n.mustToggle&&(this.deselectCurrentNode(),this.triggerEvent("tree.select",{node:null,previous_node:e}));else{const t=this.getSelectedNode()||null;this.deselectCurrentNode(),this.addToSelection(e,n.mustSetFocus),this.triggerEvent("tree.select",{deselected_node:t,node:e}),this.openParents(e)}o()}}getAutoOpenMaxLevel(){return!0===this.options.autoOpen?-1:"number"==typeof this.options.autoOpen?this.options.autoOpen:"string"==typeof this.options.autoOpen?parseInt(this.options.autoOpen,10):0}getDataUrlInfo(e){const t=this.options.dataUrl??this.element.data("url"),o=t=>{if(e?.id){const o={node:e.id};t.data=o}else{const e=this.getNodeIdToBeSelected();if(e){const o={selected_node:e};t.data=o}}};return"function"==typeof t?t(e):"string"==typeof t?(e=>{const t={url:e};return o(t),t})(t):t&&"object"==typeof t?(o(t),t):null}getDefaultClosedIcon(){return this.options.rtl?"◀":"►"}getNode(e){const t=e.closest("li.jqtree_common");return t?jQuery(t).data("node"):null}getNodeElement(e){const t=this.getNode(e);return t?this.getNodeElementForNode(t):null}getNodeElementForNode(e){return e.isFolder()?this.createFolderElement(e):this.createNodeElement(e)}getNodeIdToBeSelected(){return this.options.saveState?this.saveStateHandler.getNodeIdToBeSelected():null}getRtlOption(){if(null!=this.options.rtl)return this.options.rtl;{const e=this.element.data("rtl");return null!==e&&!1!==e&&void 0!==e}}initData(){if(this.options.data)this.doLoadData(this.options.data,null);else{this.getDataUrlInfo(null)?this.doLoadDataFromUrl(null,null,null):this.doLoadData([],null)}}initTree(e){const t=()=>{this.isInitialized||(this.isInitialized=!0,this.triggerEvent("tree.init"))};this.tree=new this.options.nodeClass(null,!0,this.options.nodeClass),this.selectNodeHandler.clear(),this.tree.loadFromData(e);const o=this.setInitialState();this.refreshElements(null),o?this.setInitialStateOnDemand(t):t()}isFocusOnTree(){const e=document.activeElement;return Boolean(e&&"SPAN"===e.tagName&&this.containsElement(e))}isSelectedNodeInSubtree(e){const t=this.getSelectedNode();return!!t&&(e===t||e.isParentOf(t))}loadFolderOnDemand(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2?arguments[2]:void 0;e.is_loading=!0,this.doLoadDataFromUrl(null,e,(()=>{this.openNodeInternal(e,t,o)}))}loadSubtree(e,t){t.loadFromData(e),t.load_on_demand=!1,t.is_loading=!1,this.refreshElements(t)}mouseCapture(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseCapture(e)}mouseDrag(e){if(this.options.dragAndDrop){const t=this.dndHandler.mouseDrag(e);return this.scrollHandler.checkScrolling(e),t}return!1}mouseStart(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseStart(e)}mouseStop(e){return!!this.options.dragAndDrop&&(this.scrollHandler.stopScrolling(),this.dndHandler.mouseStop(e))}openNodeInternal(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2?arguments[2]:void 0;const n=(e,t,o)=>{this.createFolderElement(e).open(o,t,this.options.animationSpeed)};if(e.isFolder()||e.isEmptyFolder)if(e.load_on_demand)this.loadFolderOnDemand(e,t,o);else{let r=e.parent;for(;r;)r.parent&&n(r,!1),r=r.parent;n(e,t,o),this.saveState()}}openParents(e){const t=e.parent;t?.parent&&!t.is_open&&this.openNode(t,!1)}refreshElements(e){const t=this.isFocusOnTree(),o=!!e&&this.isSelectedNodeInSubtree(e);this.renderer.render(e),o&&this.selectCurrentNode(t),this.triggerEvent("tree.refresh")}saveState(){this.options.saveState&&this.saveStateHandler.saveState()}selectCurrentNode(e){const t=this.getSelectedNode();if(t){this.getNodeElementForNode(t).select(e)}}setInitialState(){const e=()=>{if(!1===this.options.autoOpen)return!1;const e=this.getAutoOpenMaxLevel();let t=!1;return this.tree.iterate(((o,n)=>o.load_on_demand?(t=!0,!1):!!o.hasChildren()&&(o.is_open=!0,n!==e))),t};let[t,o]=(()=>{if(this.options.saveState){const e=this.saveStateHandler.getStateFromStorage();if(e){return[!0,this.saveStateHandler.setInitialState(e)]}return[!1,!1]}return[!1,!1]})();return t||(o=e()),o}setInitialStateOnDemand(e){const t=()=>{const t=this.getAutoOpenMaxLevel();let o=0;const n=e=>{o+=1,this.openNodeInternal(e,!1,(()=>{o-=1,r()}))},r=()=>{this.tree.iterate(((e,o)=>e.load_on_demand?(e.is_loading||n(e),!1):(this.openNodeInternal(e,!1),o!==t))),0===o&&e()};r()};(()=>{if(this.options.saveState){const t=this.saveStateHandler.getStateFromStorage();return!!t&&(this.saveStateHandler.setInitialStateOnDemand(t,e),!0)}return!1})()||t()}triggerEvent(e,t){const o=jQuery.Event(e,t);return this.element.trigger(o),o}addNodeAfter(e,t){const o=t.addAfter(e);return o&&this.refreshElements(t.parent),o}addNodeBefore(e,t){if(!t)throw Error(j+"existingNode");const o=t.addBefore(e);return o&&this.refreshElements(t.parent),o}addParentNode(e,t){if(!t)throw Error(j+"existingNode");const o=t.addParent(e);return o&&this.refreshElements(o.parent),o}addToSelection(e,t){if(!e)throw Error(_);return this.selectNodeHandler.addToSelection(e),this.openParents(e),this.getNodeElementForNode(e).select(t??!0),this.saveState(),this.element}appendNode(e,t){const o=t??this.tree,n=o.append(e);return this.refreshElements(o),n}closeNode(e,t){if(!e)throw Error(_);const o=t??this.options.slide;return(e.isFolder()||e.isEmptyFolder)&&(this.createFolderElement(e).close(o,this.options.animationSpeed),this.saveState()),this.element}deinit(){this.element.empty(),this.element.off(),this.keyHandler.deinit(),this.mouseHandler.deinit(),this.tree=new S({},!0),super.deinit()}getNodeByCallback(e){return this.tree.getNodeByCallback(e)}getNodeByHtmlElement(e){const t=e instanceof HTMLElement?e:e[0];return t?this.getNode(t):null}getNodeById(e){return this.tree.getNodeById(e)}getNodeByName(e){return this.tree.getNodeByName(e)}getNodeByNameMustExist(e){return this.tree.getNodeByNameMustExist(e)}getNodesByProperty(e,t){return this.tree.getNodesByProperty(e,t)}getSelectedNode(){return this.selectNodeHandler.getSelectedNode()}getSelectedNodes(){return this.selectNodeHandler.getSelectedNodes()}getState(){return this.saveStateHandler.getState()}getStateFromStorage(){return this.saveStateHandler.getStateFromStorage()}getTree(){return this.tree}getVersion(){return"1.8.7"}init(){super.init(),this.element=this.$el,this.isInitialized=!1,this.options.rtl=this.getRtlOption(),null==this.options.closedIcon&&(this.options.closedIcon=this.getDefaultClosedIcon()),this.connectHandlers(),this.initData()}isDragging(){return this.dndHandler.isDragging}isNodeSelected(e){if(!e)throw Error(_);return this.selectNodeHandler.isNodeSelected(e)}loadData(e,t){return this.doLoadData(e,t),this.element}loadDataFromUrl(e,t,o){return"string"==typeof e?this.doLoadDataFromUrl(e,t,o??null):this.doLoadDataFromUrl(null,e,t),this.element}moveDown(){const e=this.getSelectedNode();return e&&this.keyHandler.moveDown(e),this.element}moveNode(e,t,o){if(!e)throw Error(_);if(!t)throw Error(j+"targetNode");if(!o)throw Error(j+"position");const r=n[o];return void 0!==r&&(this.tree.moveNode(e,t,r),this.refreshElements(null)),this.element}moveUp(){const e=this.getSelectedNode();return e&&this.keyHandler.moveUp(e),this.element}openNode(e,t,o){if(!e)throw Error(_);const[n,r]=(()=>{let e,n;return"function"==typeof t?(e=t,n=null):(n=t,e=o),null==n&&(n=this.options.slide),[n,e]})();return this.openNodeInternal(e,n,r),this.element}prependNode(e,t){const o=t??this.tree,n=o.prepend(e);return this.refreshElements(o),n}refresh(){return this.refreshElements(null),this.element}refreshHitAreas(){return this.dndHandler.refresh(),this.element}reload(e){return this.doLoadDataFromUrl(null,null,e),this.element}removeFromSelection(e){if(!e)throw Error(_);return this.selectNodeHandler.removeFromSelection(e),this.getNodeElementForNode(e).deselect(),this.saveState(),this.element}removeNode(e){if(!e)throw Error(_);if(!e.parent)throw Error("Node has no parent");this.selectNodeHandler.removeFromSelection(e,!0);const t=e.parent;return e.remove(),this.refreshElements(t),this.element}scrollToNode(e){if(!e)throw Error(_);if(!e.element)return this.element;const t=i(e.element)-i(this.$el.get(0));return this.scrollHandler.scrollToY(t),this.element}selectNode(e,t){return this.doSelectNode(e,t),this.element}setOption(e,t){return this.options[e]=t,this.element}setState(e){return e&&(this.saveStateHandler.setInitialState(e),this.refreshElements(null)),this.element}toggle(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!e)throw Error(_);const o=t??this.options.slide;return e.is_open?this.closeNode(e,o):this.openNode(e,o),this.element}toJson(){return JSON.stringify(this.tree.getData())}updateNode(e,t){if(!e)throw Error(_);if(!t)return this.element;const o="object"==typeof t&&t.id&&t.id!==e.id;return o&&this.tree.removeNodeFromIndex(e),e.setData(t),o&&this.tree.addNodeToIndex(e),"object"==typeof t&&t.children&&t.children instanceof Array&&(e.removeChildren(),t.children.length&&e.loadFromData(t.children)),this.refreshElements(e),this.element}}return A.register(x,"tree"),e.JqTreeWidget=x,e}({}); //# sourceMappingURL=tree.jquery.js.map diff --git a/tree.jquery.js.map b/tree.jquery.js.map index 04cdcf06..d7e6a5e9 100644 --- a/tree.jquery.js.map +++ b/tree.jquery.js.map @@ -1 +1 @@ -{"version":3,"file":"tree.jquery.js","sources":["src/dataLoader.ts","src/position.ts","src/util.ts","src/dragAndDropHandler/dragElement.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/elementsRenderer.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.ts","src/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/saveStateHandler.ts","src/scrollHandler/containerScrollParent.ts","src/scrollHandler/documentScrollParent.ts","src/scrollHandler/createScrollParent.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/simple.widget.ts","src/version.ts","src/tree.jquery.ts"],"sourcesContent":["import { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\n\nexport type HandleFinishedLoading = () => void;\n\ninterface DataLoaderParams {\n dataFilter?: DataFilter;\n loadData: LoadData;\n onLoadFailed?: OnLoadFailed;\n onLoading?: OnLoading;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private onLoadFailed?: OnLoadFailed;\n private onLoading?: OnLoading;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.onLoadFailed = onLoadFailed;\n this.onLoading = onLoading;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode?.element) {\n return parentNode.element;\n } else {\n return this.treeElement;\n }\n }\n\n private notifyLoading(\n isLoading: boolean,\n node: Node | null,\n element: HTMLElement,\n ): void {\n const $el = jQuery(element);\n\n if (this.onLoading) {\n this.onLoading(isLoading, node, $el);\n }\n\n this.triggerEvent(\"tree.loading_data\", {\n $el,\n isLoading,\n node,\n });\n }\n\n private parseData(data: NodeData[] | string): NodeData[] {\n const getParsedData = () => {\n if (typeof data === \"string\") {\n return JSON.parse(data) as NodeData[];\n } else {\n return data;\n }\n };\n\n const parsedData = getParsedData();\n\n if (this.dataFilter) {\n return this.dataFilter(parsedData);\n } else {\n return parsedData;\n }\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private submitRequest(\n urlInfoInput: JQuery.AjaxSettings | string,\n handleSuccess: JQuery.Ajax.SuccessCallback,\n handleError: JQuery.Ajax.ErrorCallback,\n ): void {\n const urlInfo =\n typeof urlInfoInput === \"string\"\n ? { url: urlInfoInput }\n : urlInfoInput;\n\n const ajaxSettings: JQuery.AjaxSettings = {\n cache: false,\n dataType: \"json\",\n error: handleError,\n method: \"GET\",\n success: handleSuccess,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n\n public loadFromUrl(\n urlInfo: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const element = this.getDomElement(parentNode);\n this.addLoadingClass(element);\n this.notifyLoading(true, parentNode, element);\n\n const stopLoading = (): void => {\n this.removeLoadingClass(element);\n this.notifyLoading(false, parentNode, element);\n };\n\n const handleSuccess = (data: NodeData[] | string): void => {\n stopLoading();\n this.loadData(this.parseData(data), parentNode);\n\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n\n const handleError = (jqXHR: JQuery.jqXHR): void => {\n stopLoading();\n\n if (this.onLoadFailed) {\n this.onLoadFailed(jqXHR);\n }\n };\n\n this.submitRequest(urlInfo, handleSuccess, handleError);\n }\n}\n","export enum Position {\n Before = 1,\n After,\n Inside,\n None,\n}\n\nconst positionNames: Record = {\n after: Position.After,\n before: Position.Before,\n inside: Position.Inside,\n none: Position.None,\n};\n\nexport const getPositionName = (position: Position): string => {\n for (const name in positionNames) {\n if (Object.prototype.hasOwnProperty.call(positionNames, name)) {\n if (positionNames[name] === position) {\n return name;\n }\n }\n }\n\n return \"\";\n};\n\nexport const getPosition = (name: string): Position | undefined =>\n positionNames[name];\n","export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const isFunction = (v: unknown): boolean => typeof v === \"function\";\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n\nexport const getOffsetTop = (element: HTMLElement) =>\n getElementPosition(element).top;\n\nexport const getElementPosition = (element: HTMLElement) => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape);\n\n treeElement.appendChild(this.element);\n }\n\n private createElement(nodeName: string, autoEscape: boolean) {\n const element = document.createElement(\"span\");\n element.classList.add(\"jqtree-title\", \"jqtree-dragging\");\n\n if (autoEscape) {\n element.textContent = nodeName;\n } else {\n element.innerHTML = nodeName;\n }\n\n element.style.position = \"absolute\";\n\n return element;\n }\n\n public move(pageX: number, pageY: number): void {\n this.element.style.left = `${pageX - this.offsetX}px`;\n this.element.style.top = `${pageY - this.offsetY}px`;\n }\n\n public remove(): void {\n this.element.remove();\n }\n}\n\nexport default DragElement;\n","import { Node } from \"../node\";\n\ninterface Options {\n handleAfterOpenFolder: (node: Node, nextNode: Node | null) => void;\n handleClosedFolder: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n handleFirstNode: (node: Node) => void;\n handleNode: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n handleOpenFolder: (node: Node, element: HTMLElement) => boolean;\n}\n\nconst iterateVisibleNodes = (\n tree: Node,\n {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n }: Options,\n) => {\n let isFirstNode = true;\n\n const iterate = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open || !node.element) && node.hasChildren();\n\n let element: HTMLElement | null = null;\n\n // Is the element visible?\n if (node.element?.offsetParent) {\n element = node.element;\n\n if (isFirstNode) {\n handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n handleNode(node, nextNode, node.element);\n } else if (node.is_open) {\n if (!handleOpenFolder(node, node.element)) {\n mustIterateInside = false;\n }\n } else {\n handleClosedFolder(node, nextNode, element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n const child = node.children[i];\n\n if (child) {\n if (i === childrenLength - 1) {\n iterate(child, null);\n } else {\n const nextChild = node.children[i + 1];\n\n if (nextChild) {\n iterate(child, nextChild);\n }\n }\n }\n });\n\n if (node.is_open && element) {\n handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n iterate(tree, null);\n};\n\nexport default iterateVisibleNodes;\n","import { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\nimport { HitArea } from \"./types\";\n\ninterface HitPosition {\n node: Node;\n position: Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (node: Node, position: number, top: number) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, Position.None, lastTop);\n } else {\n addHitPosition(node, Position.After, lastTop);\n }\n };\n\n const handleClosedFolder = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move after current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.Inside, top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, Position.After, top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, Position.Before, getOffsetTop(node.element));\n }\n };\n\n const handleNode = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move inside current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.Inside, top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.After, top);\n }\n };\n\n const handleOpenFolder = (node: Node, element: HTMLElement) => {\n if (node === currentNode) {\n // Cannot move inside current item\n\n // Dnd over the current element is not possible: add a position with type None for the top and the bottom.\n const top = getOffsetTop(element);\n const height = element.clientHeight;\n addHitPosition(node, Position.None, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, Position.None, top + height - 5);\n }\n\n // Stop iterating\n return false;\n }\n\n // Cannot move before current item\n if (node.children[0] !== currentNode) {\n addHitPosition(node, Position.Inside, getOffsetTop(element));\n }\n\n // Continue iterating\n return true;\n };\n\n iterateVisibleNodes(tree, {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n });\n\n return hitPositions;\n};\n\nexport const generateHitAreasForGroup = (\n hitAreas: HitArea[],\n positionsInGroup: HitPosition[],\n top: number,\n bottom: number,\n) => {\n // limit positions in group\n const positionCount = Math.min(positionsInGroup.length, 4);\n\n const areaHeight = Math.round((bottom - top) / positionCount);\n let areaTop = top;\n\n for (let i = 0; i < positionCount; i++) {\n const position = positionsInGroup[i] as HitPosition;\n\n if (position.position !== Position.None) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n","import {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\nimport {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../jqtreeOptions\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport { Node } from \"../node\";\nimport NodeElement from \"../nodeElement\";\nimport { getPositionName, Position } from \"../position\";\nimport { getElementPosition } from \"../util\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { DropHint, HitArea } from \"./types\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport class DragAndDropHandler {\n private autoEscape?: boolean;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\n\n private getScrollLeft: GetScrollLeft;\n private getTree: GetTree;\n private onCanMove?: OnCanMove;\n private onCanMoveTo?: OnCanMoveTo;\n private onDragMove?: DragMethod;\n private onDragStop?: DragMethod;\n private onIsMoveHandle?: OnIsMoveHandle;\n private openFolderDelay: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\n\n constructor({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n }: DragAndDropHandlerParams) {\n this.autoEscape = autoEscape;\n this.getNodeElement = getNodeElement;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getScrollLeft = getScrollLeft;\n this.getTree = getTree;\n this.onCanMove = onCanMove;\n this.onCanMoveTo = onCanMoveTo;\n this.onDragMove = onDragMove;\n this.onDragStop = onDragStop;\n this.onIsMoveHandle = onIsMoveHandle;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.slide = slide;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n }\n\n private canMoveToArea(area: HitArea): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n if (!this.currentItem) {\n return false;\n }\n\n const positionName = getPositionName(area.position);\n\n return this.onCanMoveTo(this.currentItem.node, area.node, positionName);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n let low = 0;\n let high = this.hitAreas.length;\n while (low < high) {\n const mid = (low + high) >> 1;\n const area = this.hitAreas[mid];\n\n if (!area) {\n return null;\n }\n\n if (y < area.top) {\n high = mid;\n } else if (y > area.bottom) {\n low = mid + 1;\n } else {\n return area;\n }\n }\n\n return null;\n }\n\n private generateHitAreas(): void {\n const tree = this.getTree();\n\n if (!this.currentItem || !tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n this.currentItem.node,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea &&\n this.hoveredArea.position !== Position.None &&\n this.canMoveToArea(this.hoveredArea)\n ) {\n const movedNode = this.currentItem.node;\n const targetNode = this.hoveredArea.node;\n const position = this.hoveredArea.position;\n const previousParent = movedNode.parent;\n\n if (position === Position.Inside) {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n const event = this.triggerEvent(\"tree.move\", {\n move_info: {\n do_move: doMove,\n moved_node: movedNode,\n original_event: positionInfo.originalEvent,\n position: getPositionName(position),\n previous_parent: previousParent,\n target_node: targetNode,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return (\n node.isFolder() &&\n !node.is_open &&\n area.position === Position.Inside\n );\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this.openNode(folder, this.slide, () => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay,\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const element = positionInfo.target;\n\n if (!this.mustCaptureElement(element)) {\n return null;\n }\n\n if (this.onIsMoveHandle && !this.onIsMoveHandle(jQuery(element))) {\n return null;\n }\n\n let nodeElement = this.getNodeElement(element);\n\n if (nodeElement && this.onCanMove) {\n if (!this.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (!this.currentItem || !this.dragElement) {\n return false;\n }\n\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n\n const area = this.findHoveredArea(\n positionInfo.pageX,\n positionInfo.pageY,\n );\n\n if (area && this.canMoveToArea(area)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(\"jqtree-moving\");\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n this.generateHitAreas();\n\n this.currentItem = this.getNodeElementForNode(\n this.currentItem.node,\n );\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(\"jqtree-moving\");\n }\n }\n }\n}\n","import { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n $element: JQuery;\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n private $element: JQuery;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private isNodeSelected: IsNodeSelected;\n private onCreateLi?: OnCreateLi;\n private rtl?: boolean;\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n\n constructor({\n $element,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.dragAndDrop = dragAndDrop;\n this.$element = $element;\n this.getTree = getTree;\n this.isNodeSelected = isNodeSelected;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.openedIconElement = this.createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this.createButtonElement(closedIcon ?? \"-\");\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\n }\n\n private createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `jqtree_common ${folderClasses}`;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the
  • element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = Boolean(this.isNodeSelected(node));\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const liClasses = [\"jqtree_common\"];\n\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = \"jqtree-title jqtree_common\";\n\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n\n classes += ` jqtree-title-button-${this.buttonLeft ? \"left\" : \"right\"}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this.setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n\n if (this.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this.dragAndDrop) {\n classString += \" jqtree-dnd\";\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `jqtree_common ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [\"jqtree-toggler\", \"jqtree_common\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (this.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n } else {\n classes.push(\"jqtree-toggler-right\");\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [\"jqtree-folder\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n\n return classes.join(\" \");\n }\n\n private setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this.$element.empty();\n\n const tree = this.getTree();\n\n if (this.$element[0] && tree) {\n this.createDomElements(this.$element[0], tree.children, true, 1);\n }\n }\n}\n","import {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ntype KeyboardEventHandler = (event: KeyboardEvent) => boolean;\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getSelectedNode: GetSelectedNode;\n isFocusOnTree: IsFocusOnTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n}\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private getSelectedNode: GetSelectedNode;\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n if (!this.canHandleKeyboard()) {\n return;\n }\n\n let isKeyHandled = false;\n\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n switch (e.key) {\n case \"ArrowDown\":\n isKeyHandled = this.moveDown(selectedNode);\n break;\n\n case \"ArrowUp\":\n isKeyHandled = this.moveUp(selectedNode);\n break;\n\n case \"ArrowRight\":\n isKeyHandled = this.moveRight(selectedNode);\n break;\n\n case \"ArrowLeft\":\n isKeyHandled = this.moveLeft(selectedNode);\n break;\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private handleKeyDownHandler?: KeyboardEventHandler;\n private isFocusOnTree: IsFocusOnTree;\n private keyboardSupport: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n\n constructor({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.getSelectedNode = getSelectedNode;\n this.isFocusOnTree = isFocusOnTree;\n this.keyboardSupport = keyboardSupport;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\n }\n\n private moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this.closeNode(selectedNode);\n return true;\n } else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n }\n\n private moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return false;\n } else {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextVisibleNode());\n } else {\n // Right expands a closed node\n this.openNode(selectedNode);\n return true;\n }\n }\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private selectNode(node: Node | null): boolean {\n if (!node) {\n return false;\n } else {\n this.originalSelectNode(node);\n\n return true;\n }\n }\n\n public deinit(): void {\n if (this.handleKeyDownHandler) {\n document.removeEventListener(\"keydown\", this.handleKeyDownHandler);\n }\n }\n\n public moveDown(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getNextVisibleNode());\n }\n\n public moveUp(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getPreviousVisibleNode());\n }\n}\n","export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n","import { TriggerEvent } from \"./jqtreeMethodTypes\";\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ntype GetNode = (element: HTMLElement) => Node | null;\n\ninterface MouseHandlerParams {\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: (positionInfo: PositionInfo) => boolean;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private element: HTMLElement;\n private getMouseDelay: () => number;\n private getNode: GetNode;\n\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n const event = this.triggerEvent(\"tree.click\", {\n click_event: e,\n node: clickTarget.node,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest(\n \"ul.jqtree-tree .jqtree-element\",\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n click_event: e,\n node,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n click_event: e,\n node: clickTarget.node,\n });\n }\n };\n\n private isMouseDelayMet: boolean;\n private isMouseStarted: boolean;\n private mouseDelayTimer: null | number;\n\n private mouseDown = (e: MouseEvent): void => {\n // Left mouse button?\n if (e.button !== 0) {\n return;\n }\n\n const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n\n if (result && e.cancelable) {\n e.preventDefault();\n }\n };\n\n private mouseDownInfo: null | PositionInfo;\n\n private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private onClickButton: (node: Node) => void;\n private onClickTitle: (node: Node) => void;\n private onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n private onMouseStart: (positionInfo: PositionInfo) => boolean;\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\n\n constructor({\n element,\n getMouseDelay,\n getNode,\n onClickButton,\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu,\n }: MouseHandlerParams) {\n this.element = element;\n this.getMouseDelay = getMouseDelay;\n this.getNode = getNode;\n this.onClickButton = onClickButton;\n this.onClickTitle = onClickTitle;\n this.onMouseCapture = onMouseCapture;\n this.onMouseDrag = onMouseDrag;\n this.onMouseStart = onMouseStart;\n this.onMouseStop = onMouseStop;\n this.triggerEvent = triggerEvent;\n this.useContextMenu = useContextMenu;\n\n element.addEventListener(\"click\", this.handleClick);\n element.addEventListener(\"dblclick\", this.handleDblclick);\n element.addEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n\n if (useContextMenu) {\n element.addEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.isMouseStarted = false;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n }\n\n private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest(\".jqtree-toggler\");\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const jqTreeElement =\n element.closest(\".jqtree-element\");\n\n if (jqTreeElement) {\n const node = this.getNode(jqTreeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n public deinit(): void {\n this.element.removeEventListener(\"click\", this.handleClick);\n this.element.removeEventListener(\"dblclick\", this.handleDblclick);\n\n if (this.useContextMenu) {\n this.element.removeEventListener(\n \"contextmenu\",\n this.handleContextmenu,\n );\n }\n\n this.element.removeEventListener(\"mousedown\", this.mouseDown);\n this.element.removeEventListener(\"touchstart\", this.touchStart);\n this.removeMouseMoveEventListeners();\n }\n}\n\nexport default MouseHandler;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n","import { isNodeRecordWithChildren } from \"./nodeUtils\";\nimport { Position } from \"./position\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport class Node implements INode {\n [key: string]: unknown;\n\n public children: Node[];\n public element?: HTMLElement;\n public id?: NodeId;\n public idMapping: Map;\n public is_loading: boolean;\n public is_open: boolean;\n public isEmptyFolder: boolean;\n public load_on_demand: boolean;\n public name: string;\n public nodeClass?: typeof Node;\n public parent: Node | null;\n public tree?: Node;\n\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n\n if (isRoot) {\n this.idMapping = new Map();\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, node);\n }\n }\n\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /*\n Get the tree as data.\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record[] => {\n return nodes.map((node) => {\n const tmpNode: Record = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1];\n\n if (!lastChild) {\n return null;\n }\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\n }\n }\n }\n\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\n }\n\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\n }\n\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (\n !previousSibling.hasChildren() ||\n !previousSibling.is_open\n ) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n }\n\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n // Init Node from data without making it the root of the tree\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length\n ) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case Position.After: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode) + 1,\n );\n return true;\n }\n return false;\n }\n\n case Position.Before: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode),\n );\n return true;\n }\n return false;\n }\n\n case Position.Inside: {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n\n default:\n return false;\n }\n }\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\n }\n\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setData(object): set attributes of the node\n\n Examples:\n setData('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n}\n","import { DropHint } from \"../dragAndDropHandler/types\";\n\nclass BorderDropHint implements DropHint {\n private hint?: HTMLElement;\n\n constructor(element: HTMLElement, scrollLeft: number) {\n const div = element.querySelector(\":scope > .jqtree-element\");\n\n if (!div) {\n this.hint = undefined;\n return;\n }\n\n const width = Math.max(element.offsetWidth + scrollLeft - 4, 0);\n const height = Math.max(element.clientHeight - 4, 0);\n\n const hint = document.createElement(\"span\");\n hint.className = \"jqtree-border\";\n hint.style.width = `${width}px`;\n hint.style.height = `${height}px`;\n\n this.hint = hint;\n\n div.append(this.hint);\n }\n\n public remove(): void {\n this.hint?.remove();\n }\n}\n\nexport default BorderDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n private node: Node;\n\n constructor(node: Node, element: HTMLElement, position: Position) {\n this.element = element;\n this.node = node;\n this.ghost = this.createGhostElement();\n\n switch (position) {\n case Position.After:\n this.moveAfter();\n break;\n\n case Position.Before:\n this.moveBefore();\n break;\n\n case Position.Inside: {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\n }\n\n private createGhostElement() {\n const ghost = document.createElement(\"li\");\n ghost.className = \"jqtree_common jqtree-ghost\";\n\n const circleSpan = document.createElement(\"span\");\n circleSpan.className = \"jqtree_common jqtree-circle\";\n ghost.append(circleSpan);\n\n const lineSpan = document.createElement(\"span\");\n lineSpan.className = \"jqtree_common jqtree-line\";\n ghost.append(lineSpan);\n\n return ghost;\n }\n\n private moveAfter(): void {\n this.element.after(this.ghost);\n }\n\n private moveBefore(): void {\n this.element.before(this.ghost);\n }\n\n private moveInside(): void {\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n private moveInsideOpenFolder(): void {\n const childElement = this.node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this.ghost);\n }\n }\n\n public remove(): void {\n this.ghost.remove();\n }\n}\n\nexport default GhostDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n $treeElement: JQuery;\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n}\n\nclass NodeElement {\n private $treeElement: JQuery;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n public element: HTMLElement;\n public node: Node;\n\n constructor({\n $treeElement,\n getScrollLeft,\n node,\n tabIndex,\n }: NodeElementParams) {\n this.getScrollLeft = getScrollLeft;\n this.tabIndex = tabIndex;\n this.$treeElement = $treeElement;\n\n this.init(node);\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > span.jqtree-title\",\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === Position.Inside;\n }\n\n public addDropHint(position: number): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.node, this.element, position);\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public init(node: Node): void {\n this.node = node;\n\n if (!node.element) {\n const element = this.$treeElement.get(0);\n\n if (element) {\n node.element = element;\n }\n }\n\n if (node.element) {\n this.element = node.element;\n }\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n}\n\nexport default NodeElement;\n","import { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\nimport { Position } from \"../position\";\nimport NodeElement, { NodeElementParams } from \"./index\";\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: HTMLElement | Text;\n openedIconElement?: HTMLElement | Text;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: HTMLElement | Text;\n private openedIconElement?: HTMLElement | Text;\n private triggerEvent: TriggerEvent;\n\n constructor({\n $treeElement,\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n triggerEvent,\n }: FolderElementParams) {\n super({\n $treeElement,\n getScrollLeft,\n node,\n tabIndex,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.triggerEvent = triggerEvent;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && position === Position.Inside;\n }\n\n private getButton(): HTMLLinkElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > a.jqtree-toggler\",\n ) as HTMLLinkElement;\n }\n\n public close(\n slide = true,\n animationSpeed: JQuery.Duration | undefined = \"fast\",\n ): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n const button = this.getButton();\n button.classList.add(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideUp(animationSpeed, doClose);\n } else {\n jQuery(this.getUl()).hide();\n doClose();\n }\n }\n\n public open(\n onFinished: OnFinishOpenNode | undefined,\n slide = true,\n animationSpeed: JQuery.Duration = \"fast\",\n ): void {\n if (this.node.is_open) {\n return;\n }\n\n this.node.is_open = true;\n\n const button = this.getButton();\n button.classList.remove(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const openedIconElement = this.openedIconElement;\n\n if (openedIconElement) {\n const icon = openedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doOpen = (): void => {\n this.element.classList.remove(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"true\");\n\n if (onFinished) {\n onFinished(this.node);\n }\n\n this.triggerEvent(\"tree.open\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideDown(animationSpeed, doOpen);\n } else {\n jQuery(this.getUl()).show();\n doOpen();\n }\n }\n}\n\nexport default FolderElement;\n","import {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private _supportsLocalStorage: boolean | null;\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else if (this.supportsLocalStorage()) {\n return localStorage.getItem(this.getKeyName());\n } else {\n return null;\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state as unknown as SavedState;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n\n private supportsLocalStorage(): boolean {\n const testSupport = (): boolean => {\n // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n try {\n const key = \"_storage_test\";\n sessionStorage.setItem(key, \"value\");\n sessionStorage.removeItem(key);\n } catch {\n return false;\n }\n\n return true;\n };\n\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n\n return this._supportsLocalStorage;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData) as unknown as SavedState;\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else if (this.supportsLocalStorage()) {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public setInitialStateOnDemand(\n state: SavedState,\n cbFinished: () => void,\n ): void {\n let loadingCount = 0;\n let nodeIds = state.open_nodes;\n\n const openNodes = (): void => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n loadAndOpenNode(node);\n } else {\n this.openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n }\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNode(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n openNodes();\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getElementPosition, getOffsetTop } from '../util'\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ntype VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface Params {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport default class ContainerScrollParent implements ScrollParent {\n private container: HTMLElement;\n private horizontalScrollDirection?: HorizontalScrollDirection;\n private horizontalScrollTimeout?: number;\n private refreshHitAreas: () => void;\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n private verticalScrollDirection?: VerticalScrollDirection;\n private verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: Params) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\n }\n\n private getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n\n const rightEdge = scrollParentOffset.left + this.container.clientWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n this.scrollParentBottom = this.getScrollParentTop() + this.container.clientHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n if (this.scrollParentTop == null) {\n this.scrollParentTop = getOffsetTop(this.container)\n }\n\n return this.scrollParentTop;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return this.container.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n this.container.scrollTop = top;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n this.scrollParentTop = undefined;\n this.scrollParentBottom = undefined;\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getOffsetTop } from \"../util\";\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ntype VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent implements ScrollParent {\n private documentScrollHeight?: number;\n private documentScrollWidth?: number;\n private horizontalScrollDirection?: HorizontalScrollDirection;\n private horizontalScrollTimeout?: number;\n private refreshHitAreas: () => void;\n private treeElement: HTMLElement;\n private verticalScrollDirection?: VerticalScrollDirection;\n private verticalScrollTimeout?: number;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n this.refreshHitAreas = refreshHitAreas;\n this.treeElement = treeElement;\n }\n\n private canScrollDown() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollTop + documentElement.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollLeft + documentElement.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n if (this.documentScrollHeight == null) {\n this.documentScrollHeight = document.documentElement.scrollHeight;\n }\n\n return this.documentScrollHeight;\n }\n\n private getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n if (this.documentScrollWidth == null) {\n this.documentScrollWidth = document.documentElement.scrollWidth;\n }\n\n return this.documentScrollWidth;\n }\n\n private getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = document.documentElement.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n const isNearLeftEdge = pageX - scrollLeft < 20;\n\n if (isNearRightEdge && this.canScrollRight()) {\n return \"right\";\n }\n\n if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = jQuery(document).scrollTop() ?? 0;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n if (windowHeight - (pageY - scrollTop) < 20 && this.canScrollDown()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: distance, top: 0 });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: 0, top: distance });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.horizontalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return document.documentElement.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this.treeElement);\n\n document.documentElement.scrollTop = top + treeTop;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n this.documentScrollHeight = undefined;\n this.documentScrollWidth = undefined;\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n","import { PositionInfo } from \"./mouseUtils\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\nimport { ScrollParent } from \"./scrollHandler/types\";\n\ninterface ScrollHandlerParams {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class ScrollHandler {\n private refreshHitAreas: () => void;\n private scrollParent?: ScrollParent;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: ScrollHandlerParams) {\n this.refreshHitAreas = refreshHitAreas;\n this.scrollParent = undefined;\n this.treeElement = treeElement;\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private getScrollParent(): ScrollParent {\n if (!this.scrollParent) {\n this.scrollParent = createScrollParent(\n this.treeElement,\n this.refreshHitAreas,\n );\n }\n\n return this.scrollParent;\n }\n\n public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n}\n","import { GetNodeById } from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private selectedNodes: Set;\n private selectedSingleNode: Node | null;\n\n constructor({ getNodeById }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.selectedNodes = new Set();\n this.clear();\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes = [];\n\n for (const id in this.selectedNodes) {\n if (\n Object.prototype.hasOwnProperty.call(this.selectedNodes, id)\n ) {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n }\n }\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n}\n","const register = (widgetClass: unknown, widgetName: string): void => {\n const getDataKey = (): string => `simple_widget_${widgetName}`;\n\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string,\n ): null | SimpleWidget => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: unknown): JQuery => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, dataKey);\n\n if (!existingWidget) {\n const simpleWidgetClass = widgetClass as typeof SimpleWidget;\n const widget = new simpleWidgetClass(el, options);\n\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n\n return $el;\n };\n\n const destroyWidget = ($el: JQuery): void => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const widget = getWidgetData(el, dataKey);\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, dataKey);\n }\n };\n\n const callFunction = (\n $el: JQuery,\n functionName: string,\n args: unknown[],\n ): unknown => {\n let result = null;\n\n for (const el of $el.get()) {\n const widget = jQuery.data(el, getDataKey()) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n const simpleWidget = widget as SimpleWidget;\n const widgetFunction = simpleWidget[functionName];\n\n if (widgetFunction && typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args) as unknown;\n }\n }\n }\n\n return result;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (jQuery.fn as any)[widgetName] = function (\n this: JQuery,\n argument1: unknown,\n ...args: unknown[]\n ) {\n if (!argument1) {\n return createWidget(this, null);\n } else if (typeof argument1 === \"object\") {\n const options = argument1 as unknown;\n return createWidget(this, options);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (functionName === \"destroy\") {\n destroyWidget(this);\n return undefined;\n } else if (functionName === \"get_widget_class\") {\n return widgetClass;\n } else {\n return callFunction(this, functionName, args);\n }\n } else {\n return undefined;\n }\n };\n};\n\nexport default class SimpleWidget {\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public $el: JQuery;\n\n public options: WidgetOptions;\n\n constructor(el: HTMLElement, options: WidgetOptions) {\n this.$el = jQuery(el);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const defaults = (this.constructor as any).defaults as WidgetOptions;\n this.options = { ...defaults, ...options };\n }\n\n public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n public deinit(): void {\n //\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n}\n","const version = \"1.8.7\";\n\nexport default version;\n","import DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport { Node } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { getPosition } from \"./position\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport __version__ from \"./version\";\n\ninterface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends SimpleWidget {\n protected static defaults: JQTreeOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: undefined,\n data: undefined,\n dataFilter: undefined,\n dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n onCanMove: undefined, // Can this node be moved?\n onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanSelectNode: undefined,\n onCreateLi: undefined,\n onDragMove: undefined,\n onDragStop: undefined,\n onGetStateFromStorage: undefined,\n onIsMoveHandle: undefined,\n onLoadFailed: undefined,\n onLoading: undefined,\n onSetStateFromStorage: undefined,\n openedIcon: \"▼\",\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (cookie name)\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n useContextMenu: true,\n };\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\n private element: JQuery;\n\n private isInitialized: boolean;\n private keyHandler: KeyHandler;\n private mouseHandler: MouseHandler;\n private renderer: ElementsRenderer;\n private saveStateHandler: SaveStateHandler;\n private scrollHandler: ScrollHandler;\n private selectNodeHandler: SelectNodeHandler;\n private tree: Node;\n\n private connectHandlers() {\n const {\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onLoadFailed,\n onLoading,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this.options;\n\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this.getNodeElement.bind(this);\n const getNodeElementForNode = this.getNodeElementForNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const isFocusOnTree = this.isFocusOnTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this.openNodeInternal.bind(this);\n const refreshElements = this.refreshElements.bind(this);\n const refreshHitAreas = this.refreshHitAreas.bind(this);\n const selectNode = this.selectNode.bind(this);\n const $treeElement = this.element;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const dataLoader = new DataLoader({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n });\n\n const renderer = new ElementsRenderer({\n $element: $treeElement,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this.getNode.bind(this);\n const onMouseCapture = this.mouseCapture.bind(this);\n const onMouseDrag = this.mouseDrag.bind(this);\n const onMouseStart = this.mouseStart.bind(this);\n const onMouseStop = this.mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle: this.doSelectNode.bind(this),\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this.dataLoader = dataLoader;\n this.dndHandler = dndHandler;\n this.keyHandler = keyHandler;\n this.mouseHandler = mouseHandler;\n this.renderer = renderer;\n this.saveStateHandler = saveStateHandler;\n this.scrollHandler = scrollHandler;\n this.selectNodeHandler = selectNodeHandler;\n }\n\n private containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\n }\n\n private createFolderElement(node: Node) {\n const closedIconElement = this.renderer.closedIconElement;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const openedIconElement = this.renderer.openedIconElement;\n const tabIndex = this.options.tabIndex;\n const $treeElement = this.element;\n const triggerEvent = this.triggerEvent.bind(this);\n\n return new FolderElement({\n $treeElement,\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n triggerEvent,\n });\n }\n\n private createNodeElement(node: Node) {\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const $treeElement = this.element;\n\n return new NodeElement({\n $treeElement,\n getScrollLeft,\n node,\n tabIndex,\n });\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n }\n\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n private doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (data) {\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n\n this.triggerEvent(\"tree.load_data\", {\n parent_node: parentNode,\n tree_data: data,\n });\n }\n\n private doLoadDataFromUrl(\n urlInfoParam: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n const urlInfo = urlInfoParam ?? this.getDataUrlInfo(parentNode);\n\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n }\n\n private doSelectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): void {\n const saveState = (): void => {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n };\n\n if (!node) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (this.options.onCanSelectNode) {\n return (\n this.options.selectable &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable;\n }\n };\n\n if (!canSelect()) {\n return;\n }\n\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this.triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node,\n });\n }\n } else {\n const deselectedNode = this.getSelectedNode() || null;\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselected_node: deselectedNode,\n node,\n });\n this.openParents(node);\n }\n\n saveState();\n }\n\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n } else if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n } else if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n } else {\n return 0;\n }\n }\n\n private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl ?? (this.element.data(\"url\") as null | string);\n\n const getUrlFromString = (url: string): JQuery.AjaxSettings => {\n const urlInfo: JQuery.AjaxSettings = { url };\n\n setUrlInfoData(urlInfo);\n\n return urlInfo;\n };\n\n const setUrlInfoData = (urlInfo: JQuery.AjaxSettings): void => {\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n const data = { node: node.id };\n urlInfo.data = data;\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n const data = { selected_node: selectedNodeId };\n urlInfo.data = data;\n }\n }\n };\n\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n } else if (typeof dataUrl === \"string\") {\n return getUrlFromString(dataUrl);\n } else if (dataUrl && typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n } else {\n return null;\n }\n }\n\n private getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n } else {\n // triangle to the right\n return \"►\";\n }\n }\n\n private getNode(element: HTMLElement): Node | null {\n const liElement = element.closest(\"li.jqtree_common\");\n\n if (liElement) {\n return jQuery(liElement).data(\"node\") as Node;\n } else {\n return null;\n }\n }\n\n private getNodeElement(element: HTMLElement): NodeElement | null {\n const node = this.getNode(element);\n if (node) {\n return this.getNodeElementForNode(node);\n } else {\n return null;\n }\n }\n\n private getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return this.createFolderElement(node);\n } else {\n return this.createNodeElement(node);\n }\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\n }\n }\n\n private getRtlOption(): boolean {\n if (this.options.rtl != null) {\n return this.options.rtl;\n } else {\n const dataRtl = this.element.data(\"rtl\") as unknown;\n\n if (\n dataRtl !== null &&\n dataRtl !== false &&\n dataRtl !== undefined\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n private initData(): void {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n } else {\n const dataUrl = this.getDataUrlInfo(null);\n\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n } else {\n this.doLoadData([], null);\n }\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (!this.isInitialized) {\n this.isInitialized = true;\n this.triggerEvent(\"tree.init\");\n }\n };\n\n this.tree = new this.options.nodeClass(\n null,\n true,\n this.options.nodeClass,\n );\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this.refreshElements(null);\n\n if (!mustLoadOnDemand) {\n doInit();\n } else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n }\n\n private isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return Boolean(\n activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.containsElement(activeElement as HTMLElement),\n );\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (!selectedNode) {\n return false;\n } else {\n return subtree === selectedNode || subtree.isParentOf(selectedNode);\n }\n }\n\n private loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n node.is_loading = true;\n\n this.doLoadDataFromUrl(null, node, () => {\n this.openNodeInternal(node, slide, onFinished);\n });\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this.refreshElements(parentNode);\n }\n\n private mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseCapture(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this.dndHandler.mouseDrag(positionInfo);\n\n this.scrollHandler.checkScrolling(positionInfo);\n return result;\n } else {\n return false;\n }\n }\n\n private mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n this.scrollHandler.stopScrolling();\n return this.dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n private openNodeInternal(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished?: OnFinishOpenNode,\n ): void => {\n const folderElement = this.createFolderElement(_node);\n folderElement.open(\n _onFinished,\n _slide,\n this.options.animationSpeed,\n );\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n doOpenNode(parent, false);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this.triggerEvent(\"tree.refresh\");\n }\n\n private saveState(): void {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (node) {\n const nodeElement = this.getNodeElementForNode(node);\n nodeElement.select(mustSetFocus);\n }\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): [boolean, boolean] => {\n // result: is state restored, must load on demand?\n if (!this.options.saveState) {\n return [false, false];\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return [false, false];\n } else {\n const mustLoadOnDemand =\n this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n }\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n } else if (!node.hasChildren()) {\n return false;\n } else {\n node.is_open = true;\n return level !== maxLevel;\n }\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n private setInitialStateOnDemand(cbFinished: () => void): void {\n const restoreState = (): boolean => {\n if (!this.options.saveState) {\n return false;\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return false;\n } else {\n this.saveStateHandler.setInitialStateOnDemand(\n state,\n cbFinished,\n );\n\n return true;\n }\n }\n };\n\n const autoOpenNodes = (): void => {\n const maxLevel = this.getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNodeInternal(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n const openNodes = (): void => {\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n\n return false;\n } else {\n this.openNodeInternal(node, false);\n\n return level !== maxLevel;\n }\n });\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n openNodes();\n };\n\n if (!restoreState()) {\n autoOpenNodes();\n }\n }\n\n private triggerEvent(\n eventName: string,\n values?: Record,\n ): JQuery.Event {\n const event = jQuery.Event(eventName, values);\n this.element.trigger(event);\n return event;\n }\n\n public addNodeAfter(\n newNodeInfo: NodeData,\n existingNode: Node,\n ): Node | null {\n const newNode = existingNode.addAfter(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addNodeBefore(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addBefore(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addParentNode(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addParent(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n public addToSelection(node?: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.addToSelection(node);\n this.openParents(node);\n\n this.getNodeElementForNode(node).select(mustSetFocus ?? true);\n\n this.saveState();\n\n return this.element;\n }\n\n public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.append(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public closeNode(node?: Node, slideParam?: boolean | null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.isFolder() || node.isEmptyFolder) {\n this.createFolderElement(node).close(\n slide,\n this.options.animationSpeed,\n );\n\n this.saveState();\n }\n\n return this.element;\n }\n\n public deinit(): void {\n this.element.empty();\n this.element.off();\n\n this.keyHandler.deinit();\n this.mouseHandler.deinit();\n\n this.tree = new Node({}, true);\n\n super.deinit();\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n public getNodeByHtmlElement(\n inputElement: HTMLElement | JQuery,\n ): Node | null {\n const element =\n inputElement instanceof HTMLElement\n ? inputElement\n : inputElement[0];\n\n if (!element) {\n return null;\n }\n\n return this.getNode(element);\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.tree.getNodeById(nodeId);\n }\n\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n public getSelectedNode(): false | Node {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n public getState(): null | SavedState {\n return this.saveStateHandler.getState();\n }\n\n public getStateFromStorage(): null | SavedState {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n public getTree(): Node {\n return this.tree;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public init(): void {\n super.init();\n\n this.element = this.$el;\n this.isInitialized = false;\n\n this.options.rtl = this.getRtlOption();\n\n if (this.options.closedIcon == null) {\n this.options.closedIcon = this.getDefaultClosedIcon();\n }\n\n this.connectHandlers();\n\n this.initData();\n }\n\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public isNodeSelected(node?: Node): boolean {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n public loadData(data: NodeData[], parentNode: Node | null): JQuery {\n this.doLoadData(data, parentNode);\n return this.element;\n }\n\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n public loadDataFromUrl(\n param1: Node | null | string,\n param2?: HandleFinishedLoading | Node | null,\n param3?: HandleFinishedLoading,\n ): JQuery {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(\n param1,\n param2 as Node | null,\n param3 ?? null,\n );\n } else {\n // first parameter is not url\n this.doLoadDataFromUrl(\n null,\n param1,\n param2 as HandleFinishedLoading | null,\n );\n }\n\n return this.element;\n }\n\n public moveDown(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveDown(selectedNode);\n }\n\n return this.element;\n }\n\n public moveNode(node?: Node, targetNode?: Node, position?: string): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!targetNode) {\n throw Error(PARAM_IS_EMPTY + \"targetNode\");\n }\n\n if (!position) {\n throw Error(PARAM_IS_EMPTY + \"position\");\n }\n\n const positionIndex = getPosition(position);\n\n if (positionIndex !== undefined) {\n this.tree.moveNode(node, targetNode, positionIndex);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public moveUp(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveUp(selectedNode);\n }\n\n return this.element;\n }\n\n public openNode(\n node?: Node,\n param1?: boolean | OnFinishOpenNode,\n param2?: OnFinishOpenNode,\n ): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const parseParams = (): [boolean, OnFinishOpenNode | undefined] => {\n let onFinished: null | OnFinishOpenNode;\n let slide: boolean | null;\n\n if (isFunction(param1)) {\n onFinished = param1 as OnFinishOpenNode;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n if (slide == null) {\n slide = this.options.slide;\n }\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this.openNodeInternal(node, slide, onFinished);\n return this.element;\n }\n\n public prependNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.prepend(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.element;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\n }\n\n public reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public removeFromSelection(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.removeFromSelection(node);\n\n this.getNodeElementForNode(node).deselect();\n this.saveState();\n\n return this.element;\n }\n\n public removeNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.parent) {\n throw Error(\"Node has no parent\");\n }\n\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this.refreshElements(parent);\n\n return this.element;\n }\n\n public scrollToNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.element) {\n return this.element;\n }\n\n const top =\n getOffsetTop(node.element) -\n getOffsetTop(this.$el.get(0) as HTMLElement);\n\n this.scrollHandler.scrollToY(top);\n\n return this.element;\n }\n\n public selectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): JQuery {\n this.doSelectNode(node, optionsParam);\n return this.element;\n }\n\n public setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record)[option] = value;\n return this.element;\n }\n\n public setState(state?: SavedState): JQuery {\n if (state) {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public toggle(node?: Node, slideParam: boolean | null = null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n public updateNode(node?: Node, data?: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!data) {\n return this.element;\n }\n\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data.children &&\n data.children instanceof Array\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children as Node[]);\n }\n }\n\n this.refreshElements(node);\n\n return this.element;\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["DataLoader","constructor","_ref","dataFilter","loadData","onLoadFailed","onLoading","treeElement","triggerEvent","this","addLoadingClass","element","classList","add","getDomElement","parentNode","notifyLoading","isLoading","node","$el","jQuery","parseData","data","parsedData","JSON","parse","removeLoadingClass","remove","submitRequest","urlInfoInput","handleSuccess","handleError","ajaxSettings","cache","dataType","error","method","success","url","toUpperCase","ajax","loadFromUrl","urlInfo","onFinished","stopLoading","jqXHR","Position","positionNames","after","After","before","Before","inside","Inside","none","None","getPositionName","position","name","Object","prototype","hasOwnProperty","call","getBoolString","value","getOffsetTop","getElementPosition","top","rect","getBoundingClientRect","left","x","window","scrollX","y","scrollY","DragElement","autoEscape","nodeName","offsetX","offsetY","createElement","appendChild","document","textContent","innerHTML","style","move","pageX","pageY","generateHitAreasForGroup","hitAreas","positionsInGroup","bottom","positionCount","Math","min","length","areaHeight","round","areaTop","i","push","generateHitAreas","tree","currentNode","treeBottom","generateHitAreasFromPositions","hitPositions","previousTop","group","generateHitPositions","lastTop","addHitPosition","iterateVisibleNodes","handleAfterOpenFolder","handleClosedFolder","handleFirstNode","handleNode","handleOpenFolder","isFirstNode","iterate","nextNode","mustIterateInside","is_open","hasChildren","offsetParent","childrenLength","children","forEach","_","child","nextChild","height","clientHeight","DragAndDropHandler","getNodeElement","getNodeElementForNode","getScrollLeft","getTree","onCanMove","onCanMoveTo","onDragMove","onDragStop","onIsMoveHandle","openNode","refreshElements","slide","hoveredArea","isDragging","currentItem","canMoveToArea","area","positionName","clear","dragElement","findHoveredArea","dimensions","getTreeDimensions","right","low","high","mid","treePosition","clientWidth","moveItem","positionInfo","movedNode","targetNode","previousParent","parent","doMove","moveNode","move_info","do_move","moved_node","original_event","originalEvent","previous_parent","target_node","isDefaultPrevented","mustCaptureElement","mustOpenFolderTimer","isFolder","removeDropHint","previousGhost","removeHitAreas","removeHover","startOpenFolderTimer","folder","openFolder","refresh","updateDropHint","stopOpenFolderTimer","openFolderDelay","openFolderTimer","setTimeout","clearTimeout","nodeElement","addDropHint","mouseCapture","target","mouseDrag","mouseStart","mouseStop","ElementsRenderer","$element","buttonLeft","closedIcon","dragAndDrop","isNodeSelected","onCreateLi","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","attachNodeData","li","div","createTextNode","nodeType","createDomElements","isRootNode","level","ul","createUl","createLi","createFolderLi","isSelected","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","className","setAttribute","buttonLink","cloneNode","titleSpan","createTitleSpan","Boolean","isEmptyFolder","createNodeLi","liClasses","classString","join","classes","undefined","setTreeItemAriaAttributes","role","is_loading","render","fromNode","renderFromNode","renderFromRoot","$previousLi","getLevel","empty","KeyHandler","handleKeyDown","e","canHandleKeyboard","isKeyHandled","selectedNode","getSelectedNode","key","moveDown","moveUp","moveRight","moveLeft","preventDefault","closeNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","addEventListener","getParent","getNextVisibleNode","deinit","handleKeyDownHandler","removeEventListener","getPreviousVisibleNode","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","handleClick","clickTarget","getClickTarget","type","onClickButton","stopPropagation","click_event","onClickTitle","handleContextmenu","closest","getNode","handleDblclick","mouseDown","button","handleMouseDown","cancelable","mouseMove","handleMouseMove","mouseUp","handleMouseUp","touchEnd","touches","touchMove","touchStart","getMouseDelay","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","passive","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","jqTreeElement","handleStartMouse","removeMouseMoveEventListeners","mouseDelay","startMouseDelayTimer","isNodeRecordWithChildren","Array","Node","nodeData","arguments","isRoot","nodeClass","load_on_demand","setData","idMapping","Map","createNode","getNodeClass","doRemoveChild","splice","getChildIndex","removeNodeFromIndex","loadChildrenFromData","nodeInfo","loadFromData","setParent","addNodeToIndex","addAfter","childIndex","addChildAtPosition","addBefore","addChild","index","id","set","addParent","newParent","originalParent","append","filter","f","result","indexOf","getData","getDataFromNodes","nodes","map","tmpNode","k","v","getLastChild","lastChild","getNextNode","nextSibling","getNextSibling","nextIndex","getNodeByCallback","callback","getNodeById","nodeId","get","getNodeByName","getNodeByNameMustExist","n","Error","getNodesByProperty","getPreviousNode","previousSibling","getPreviousSibling","previousIndex","initFromData","addChildren","childrenData","addNode","isParentOf","_iterate","removeChildren","childData","prepend","removeChild","delete","o","BorderDropHint","scrollLeft","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","moveAfter","moveBefore","moveInsideOpenFolder","moveInside","circleSpan","lineSpan","childElement","NodeElement","$treeElement","init","getTitleSpan","getUl","mustShowBorderDropHint","deselect","removeAttribute","blur","select","mustSetFocus","toString","focus","FolderElement","super","getButton","close","animationSpeed","icon","doClose","slideUp","hide","open","doOpen","slideDown","show","SaveStateHandler","addToSelection","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","getKeyName","loadFromStorage","supportsLocalStorage","localStorage","getItem","openInitialNodes","nodeIds","mustLoadOnDemand","parseState","jsonData","state","selected_node","resetSelection","selectInitialNodes","selectCount","_supportsLocalStorage","testSupport","sessionStorage","setItem","removeItem","getNodeIdToBeSelected","getStateFromStorage","getState","open_nodes","getOpenNodeIds","openNodes","getSelectedNodeIds","selectedNodeIds","stringify","setInitialState","setInitialStateOnDemand","cbFinished","loadingCount","newNodesIds","loadAndOpenNode","ContainerScrollParent","container","refreshHitAreas","getNewHorizontalScrollDirection","scrollParentOffset","rightEdge","leftEdge","getNewVerticalScrollDirection","getScrollParentTop","getScrollParentBottom","scrollParentBottom","scrollParentTop","scrollHorizontally","horizontalScrollDirection","distance","scrollBy","behavior","bind","scrollVertically","verticalScrollDirection","checkHorizontalScrolling","newHorizontalScrollDirection","horizontalScrollTimeout","verticalScrollTimeout","checkVerticalScrolling","newVerticalScrollDirection","scrollToY","scrollTop","stopScrolling","DocumentScrollParent","canScrollDown","documentElement","getDocumentScrollHeight","canScrollRight","getDocumentScrollWidth","documentScrollHeight","scrollHeight","documentScrollWidth","scrollWidth","isNearLeftEdge","innerWidth","innerHeight","treeTop","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","createScrollParent","parentElement","getParentWithOverflow","tagName","ScrollHandler","scrollParent","getScrollParent","checkScrolling","SelectNodeHandler","selectedNodes","Set","selectedSingleNode","getSelectedNodesUnder","has","includeChildren","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","fn","argument1","functionName","destroy","removeData","destroyWidget","_len","args","_key","callFunction","widgetFunction","apply","static","defaults","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","connectHandlers","openNodeInternal","selectNodeHandler","dataLoader","saveStateHandler","scrollHandler","dndHandler","keyHandler","renderer","mouseHandler","toggle","doSelectNode","containsElement","createFolderElement","createNodeElement","deselectCurrentNode","deselectNodes","selectedNodesUnderParent","doLoadData","loadSubtree","initTree","parent_node","tree_data","doLoadDataFromUrl","urlInfoParam","getDataUrlInfo","optionsParam","selectOptions","mustToggle","canSelect","previous_node","deselectedNode","deselected_node","openParents","getAutoOpenMaxLevel","parseInt","setUrlInfoData","selectedNodeId","getUrlFromString","getDefaultClosedIcon","liElement","getRtlOption","dataRtl","initData","doInit","isInitialized","activeElement","isSelectedNodeInSubtree","subtree","loadFolderOnDemand","doOpenNode","_node","_slide","_onFinished","mustSelect","selectCurrentNode","autoOpenNodes","maxLevel","isRestored","restoreState","eventName","values","event","Event","trigger","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","appendNode","parentNodeParam","slideParam","off","getNodeByHtmlElement","inputElement","HTMLElement","getVersion","loadDataFromUrl","param1","param2","param3","positionIndex","parseParams","prependNode","reload","removeNode","scrollToNode","setOption","option","setState","toJson","updateNode","idIsChanged"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree.jquery.js","sources":["src/dataLoader.ts","src/position.ts","src/util.ts","src/dragAndDropHandler/dragElement.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/elementsRenderer.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.ts","src/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/saveStateHandler.ts","src/scrollHandler/containerScrollParent.ts","src/scrollHandler/documentScrollParent.ts","src/scrollHandler/createScrollParent.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/simple.widget.ts","src/version.ts","src/tree.jquery.ts"],"sourcesContent":["import { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\n\nexport type HandleFinishedLoading = () => void;\n\ninterface DataLoaderParams {\n dataFilter?: DataFilter;\n loadData: LoadData;\n onLoadFailed?: OnLoadFailed;\n onLoading?: OnLoading;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private onLoadFailed?: OnLoadFailed;\n private onLoading?: OnLoading;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.onLoadFailed = onLoadFailed;\n this.onLoading = onLoading;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode?.element) {\n return parentNode.element;\n } else {\n return this.treeElement;\n }\n }\n\n private notifyLoading(\n isLoading: boolean,\n node: Node | null,\n element: HTMLElement,\n ): void {\n const $el = jQuery(element);\n\n if (this.onLoading) {\n this.onLoading(isLoading, node, $el);\n }\n\n this.triggerEvent(\"tree.loading_data\", {\n $el,\n isLoading,\n node,\n });\n }\n\n private parseData(data: NodeData[] | string): NodeData[] {\n const getParsedData = () => {\n if (typeof data === \"string\") {\n return JSON.parse(data) as NodeData[];\n } else {\n return data;\n }\n };\n\n const parsedData = getParsedData();\n\n if (this.dataFilter) {\n return this.dataFilter(parsedData);\n } else {\n return parsedData;\n }\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private submitRequest(\n urlInfoInput: JQuery.AjaxSettings | string,\n handleSuccess: JQuery.Ajax.SuccessCallback,\n handleError: JQuery.Ajax.ErrorCallback,\n ): void {\n const urlInfo =\n typeof urlInfoInput === \"string\"\n ? { url: urlInfoInput }\n : urlInfoInput;\n\n const ajaxSettings: JQuery.AjaxSettings = {\n cache: false,\n dataType: \"json\",\n error: handleError,\n method: \"GET\",\n success: handleSuccess,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n\n public loadFromUrl(\n urlInfo: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const element = this.getDomElement(parentNode);\n this.addLoadingClass(element);\n this.notifyLoading(true, parentNode, element);\n\n const stopLoading = (): void => {\n this.removeLoadingClass(element);\n this.notifyLoading(false, parentNode, element);\n };\n\n const handleSuccess = (data: NodeData[] | string): void => {\n stopLoading();\n this.loadData(this.parseData(data), parentNode);\n\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n\n const handleError = (jqXHR: JQuery.jqXHR): void => {\n stopLoading();\n\n if (this.onLoadFailed) {\n this.onLoadFailed(jqXHR);\n }\n };\n\n this.submitRequest(urlInfo, handleSuccess, handleError);\n }\n}\n","export enum Position {\n Before = 1,\n After,\n Inside,\n None,\n}\n\nconst positionNames: Record = {\n after: Position.After,\n before: Position.Before,\n inside: Position.Inside,\n none: Position.None,\n};\n\nexport const getPositionName = (position: Position): string => {\n for (const name in positionNames) {\n if (Object.prototype.hasOwnProperty.call(positionNames, name)) {\n if (positionNames[name] === position) {\n return name;\n }\n }\n }\n\n return \"\";\n};\n\nexport const getPosition = (name: string): Position | undefined =>\n positionNames[name];\n","export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const isFunction = (v: unknown): boolean => typeof v === \"function\";\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n\nexport const getOffsetTop = (element: HTMLElement) =>\n getElementPosition(element).top;\n\nexport const getElementPosition = (element: HTMLElement) => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape);\n\n treeElement.appendChild(this.element);\n }\n\n private createElement(nodeName: string, autoEscape: boolean) {\n const element = document.createElement(\"span\");\n element.classList.add(\"jqtree-title\", \"jqtree-dragging\");\n\n if (autoEscape) {\n element.textContent = nodeName;\n } else {\n element.innerHTML = nodeName;\n }\n\n element.style.position = \"absolute\";\n\n return element;\n }\n\n public move(pageX: number, pageY: number): void {\n this.element.style.left = `${pageX - this.offsetX}px`;\n this.element.style.top = `${pageY - this.offsetY}px`;\n }\n\n public remove(): void {\n this.element.remove();\n }\n}\n\nexport default DragElement;\n","import { Node } from \"../node\";\n\ninterface Options {\n handleAfterOpenFolder: (node: Node, nextNode: Node | null) => void;\n handleClosedFolder: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n handleFirstNode: (node: Node) => void;\n handleNode: (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => void;\n\n /*\n override\n return\n - true: continue iterating\n - false: stop iterating\n */\n handleOpenFolder: (node: Node, element: HTMLElement) => boolean;\n}\n\nconst iterateVisibleNodes = (\n tree: Node,\n {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n }: Options,\n) => {\n let isFirstNode = true;\n\n const iterate = (node: Node, nextNode: Node | null): void => {\n let mustIterateInside =\n (node.is_open || !node.element) && node.hasChildren();\n\n let element: HTMLElement | null = null;\n\n // Is the element visible?\n if (node.element?.offsetParent) {\n element = node.element;\n\n if (isFirstNode) {\n handleFirstNode(node);\n isFirstNode = false;\n }\n\n if (!node.hasChildren()) {\n handleNode(node, nextNode, node.element);\n } else if (node.is_open) {\n if (!handleOpenFolder(node, node.element)) {\n mustIterateInside = false;\n }\n } else {\n handleClosedFolder(node, nextNode, element);\n }\n }\n\n if (mustIterateInside) {\n const childrenLength = node.children.length;\n node.children.forEach((_, i) => {\n const child = node.children[i];\n\n if (child) {\n if (i === childrenLength - 1) {\n iterate(child, null);\n } else {\n const nextChild = node.children[i + 1];\n\n if (nextChild) {\n iterate(child, nextChild);\n }\n }\n }\n });\n\n if (node.is_open && element) {\n handleAfterOpenFolder(node, nextNode);\n }\n }\n };\n\n iterate(tree, null);\n};\n\nexport default iterateVisibleNodes;\n","import { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\nimport { HitArea } from \"./types\";\n\ninterface HitPosition {\n node: Node;\n position: Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (node: Node, position: number, top: number) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, Position.None, lastTop);\n } else {\n addHitPosition(node, Position.After, lastTop);\n }\n };\n\n const handleClosedFolder = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move after current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.Inside, top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, Position.After, top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, Position.Before, getOffsetTop(node.element));\n }\n };\n\n const handleNode = (\n node: Node,\n nextNode: Node | null,\n element: HTMLElement,\n ) => {\n const top = getOffsetTop(element);\n\n if (node === currentNode) {\n // Cannot move inside current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.Inside, top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, Position.None, top);\n } else {\n addHitPosition(node, Position.After, top);\n }\n };\n\n const handleOpenFolder = (node: Node, element: HTMLElement) => {\n if (node === currentNode) {\n // Cannot move inside current item\n\n // Dnd over the current element is not possible: add a position with type None for the top and the bottom.\n const top = getOffsetTop(element);\n const height = element.clientHeight;\n addHitPosition(node, Position.None, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, Position.None, top + height - 5);\n }\n\n // Stop iterating\n return false;\n }\n\n // Cannot move before current item\n if (node.children[0] !== currentNode) {\n addHitPosition(node, Position.Inside, getOffsetTop(element));\n }\n\n // Continue iterating\n return true;\n };\n\n iterateVisibleNodes(tree, {\n handleAfterOpenFolder,\n handleClosedFolder,\n handleFirstNode,\n handleNode,\n handleOpenFolder,\n });\n\n return hitPositions;\n};\n\nexport const generateHitAreasForGroup = (\n hitAreas: HitArea[],\n positionsInGroup: HitPosition[],\n top: number,\n bottom: number,\n) => {\n // limit positions in group\n const positionCount = Math.min(positionsInGroup.length, 4);\n\n const areaHeight = Math.round((bottom - top) / positionCount);\n let areaTop = top;\n\n for (let i = 0; i < positionCount; i++) {\n const position = positionsInGroup[i] as HitPosition;\n\n if (position.position !== Position.None) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n","import {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\nimport {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../jqtreeOptions\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport { Node } from \"../node\";\nimport NodeElement from \"../nodeElement\";\nimport { getPositionName, Position } from \"../position\";\nimport { getElementPosition } from \"../util\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { DropHint, HitArea } from \"./types\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport class DragAndDropHandler {\n private autoEscape?: boolean;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\n\n private getScrollLeft: GetScrollLeft;\n private getTree: GetTree;\n private onCanMove?: OnCanMove;\n private onCanMoveTo?: OnCanMoveTo;\n private onDragMove?: DragMethod;\n private onDragStop?: DragMethod;\n private onIsMoveHandle?: OnIsMoveHandle;\n private openFolderDelay: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\n\n constructor({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n }: DragAndDropHandlerParams) {\n this.autoEscape = autoEscape;\n this.getNodeElement = getNodeElement;\n this.getNodeElementForNode = getNodeElementForNode;\n this.getScrollLeft = getScrollLeft;\n this.getTree = getTree;\n this.onCanMove = onCanMove;\n this.onCanMoveTo = onCanMoveTo;\n this.onDragMove = onDragMove;\n this.onDragStop = onDragStop;\n this.onIsMoveHandle = onIsMoveHandle;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.slide = slide;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n\n this.hoveredArea = null;\n this.hitAreas = [];\n this.isDragging = false;\n this.currentItem = null;\n }\n\n private canMoveToArea(area: HitArea): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n if (!this.currentItem) {\n return false;\n }\n\n const positionName = getPositionName(area.position);\n\n return this.onCanMoveTo(this.currentItem.node, area.node, positionName);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n let low = 0;\n let high = this.hitAreas.length;\n while (low < high) {\n const mid = (low + high) >> 1;\n const area = this.hitAreas[mid];\n\n if (!area) {\n return null;\n }\n\n if (y < area.top) {\n high = mid;\n } else if (y > area.bottom) {\n low = mid + 1;\n } else {\n return area;\n }\n }\n\n return null;\n }\n\n private generateHitAreas(): void {\n const tree = this.getTree();\n\n if (!this.currentItem || !tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n this.currentItem.node,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea &&\n this.hoveredArea.position !== Position.None &&\n this.canMoveToArea(this.hoveredArea)\n ) {\n const movedNode = this.currentItem.node;\n const targetNode = this.hoveredArea.node;\n const position = this.hoveredArea.position;\n const previousParent = movedNode.parent;\n\n if (position === Position.Inside) {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n const event = this.triggerEvent(\"tree.move\", {\n move_info: {\n do_move: doMove,\n moved_node: movedNode,\n original_event: positionInfo.originalEvent,\n position: getPositionName(position),\n previous_parent: previousParent,\n target_node: targetNode,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return (\n node.isFolder() &&\n !node.is_open &&\n area.position === Position.Inside\n );\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this.openNode(folder, this.slide, () => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay,\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n\n public mouseCapture(positionInfo: PositionInfo): boolean | null {\n const element = positionInfo.target;\n\n if (!this.mustCaptureElement(element)) {\n return null;\n }\n\n if (this.onIsMoveHandle && !this.onIsMoveHandle(jQuery(element))) {\n return null;\n }\n\n let nodeElement = this.getNodeElement(element);\n\n if (nodeElement && this.onCanMove) {\n if (!this.onCanMove(nodeElement.node)) {\n nodeElement = null;\n }\n }\n\n this.currentItem = nodeElement;\n return this.currentItem != null;\n }\n\n public mouseDrag(positionInfo: PositionInfo): boolean {\n if (!this.currentItem || !this.dragElement) {\n return false;\n }\n\n this.dragElement.move(positionInfo.pageX, positionInfo.pageY);\n\n const area = this.findHoveredArea(\n positionInfo.pageX,\n positionInfo.pageY,\n );\n\n if (area && this.canMoveToArea(area)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(\"jqtree-moving\");\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n this.generateHitAreas();\n\n this.currentItem = this.getNodeElementForNode(\n this.currentItem.node,\n );\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(\"jqtree-moving\");\n }\n }\n }\n}\n","import { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n $element: JQuery;\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n private $element: JQuery;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private isNodeSelected: IsNodeSelected;\n private onCreateLi?: OnCreateLi;\n private rtl?: boolean;\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n\n constructor({\n $element,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.dragAndDrop = dragAndDrop;\n this.$element = $element;\n this.getTree = getTree;\n this.isNodeSelected = isNodeSelected;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.openedIconElement = this.createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this.createButtonElement(closedIcon ?? \"-\");\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\n }\n\n private createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `jqtree_common ${folderClasses}`;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the
  • element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = Boolean(this.isNodeSelected(node));\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const liClasses = [\"jqtree_common\"];\n\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = \"jqtree-title jqtree_common\";\n\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n\n classes += ` jqtree-title-button-${this.buttonLeft ? \"left\" : \"right\"}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this.setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n\n if (this.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this.dragAndDrop) {\n classString += \" jqtree-dnd\";\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `jqtree_common ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [\"jqtree-toggler\", \"jqtree_common\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (this.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n } else {\n classes.push(\"jqtree-toggler-right\");\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [\"jqtree-folder\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n\n return classes.join(\" \");\n }\n\n private setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this.$element.empty();\n\n const tree = this.getTree();\n\n if (this.$element[0] && tree) {\n this.createDomElements(this.$element[0], tree.children, true, 1);\n }\n }\n}\n","import {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ntype KeyboardEventHandler = (event: KeyboardEvent) => boolean;\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getSelectedNode: GetSelectedNode;\n isFocusOnTree: IsFocusOnTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n}\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private getSelectedNode: GetSelectedNode;\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n if (!this.canHandleKeyboard()) {\n return;\n }\n\n let isKeyHandled = false;\n\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n switch (e.key) {\n case \"ArrowDown\":\n isKeyHandled = this.moveDown(selectedNode);\n break;\n\n case \"ArrowLeft\":\n isKeyHandled = this.moveLeft(selectedNode);\n break;\n\n case \"ArrowRight\":\n isKeyHandled = this.moveRight(selectedNode);\n break;\n\n case \"ArrowUp\":\n isKeyHandled = this.moveUp(selectedNode);\n break;\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private handleKeyDownHandler?: KeyboardEventHandler;\n private isFocusOnTree: IsFocusOnTree;\n private keyboardSupport: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n\n constructor({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.getSelectedNode = getSelectedNode;\n this.isFocusOnTree = isFocusOnTree;\n this.keyboardSupport = keyboardSupport;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\n }\n\n private moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this.closeNode(selectedNode);\n return true;\n } else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n }\n\n private moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return false;\n } else {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextVisibleNode());\n } else {\n // Right expands a closed node\n this.openNode(selectedNode);\n return true;\n }\n }\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private selectNode(node: Node | null): boolean {\n if (!node) {\n return false;\n } else {\n this.originalSelectNode(node);\n\n return true;\n }\n }\n\n public deinit(): void {\n if (this.handleKeyDownHandler) {\n document.removeEventListener(\"keydown\", this.handleKeyDownHandler);\n }\n }\n\n public moveDown(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getNextVisibleNode());\n }\n\n public moveUp(selectedNode: Node): boolean {\n return this.selectNode(selectedNode.getPreviousVisibleNode());\n }\n}\n","export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n","import { TriggerEvent } from \"./jqtreeMethodTypes\";\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ntype GetNode = (element: HTMLElement) => Node | null;\n\ninterface MouseHandlerParams {\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: (positionInfo: PositionInfo) => boolean;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private element: HTMLElement;\n private getMouseDelay: () => number;\n private getNode: GetNode;\n\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n const event = this.triggerEvent(\"tree.click\", {\n click_event: e,\n node: clickTarget.node,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest(\n \"ul.jqtree-tree .jqtree-element\",\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n click_event: e,\n node,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n click_event: e,\n node: clickTarget.node,\n });\n }\n };\n\n private isMouseDelayMet: boolean;\n private isMouseStarted: boolean;\n private mouseDelayTimer: null | number;\n\n private mouseDown = (e: MouseEvent): void => {\n // Left mouse button?\n if (e.button !== 0) {\n return;\n }\n\n const result = this.handleMouseDown(getPositionInfoFromMouseEvent(e));\n\n if (result && e.cancelable) {\n e.preventDefault();\n }\n };\n\n private mouseDownInfo: null | PositionInfo;\n\n private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private onClickButton: (node: Node) => void;\n private onClickTitle: (node: Node) => void;\n private onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n private onMouseStart: (positionInfo: PositionInfo) => boolean;\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\n\n constructor({\n element,\n getMouseDelay,\n getNode,\n onClickButton,\n onClickTitle,\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu,\n }: MouseHandlerParams) {\n this.element = element;\n this.getMouseDelay = getMouseDelay;\n this.getNode = getNode;\n this.onClickButton = onClickButton;\n this.onClickTitle = onClickTitle;\n this.onMouseCapture = onMouseCapture;\n this.onMouseDrag = onMouseDrag;\n this.onMouseStart = onMouseStart;\n this.onMouseStop = onMouseStop;\n this.triggerEvent = triggerEvent;\n this.useContextMenu = useContextMenu;\n\n element.addEventListener(\"click\", this.handleClick);\n element.addEventListener(\"dblclick\", this.handleDblclick);\n element.addEventListener(\"mousedown\", this.mouseDown, {\n passive: false,\n });\n element.addEventListener(\"touchstart\", this.touchStart, {\n passive: false,\n });\n\n if (useContextMenu) {\n element.addEventListener(\"contextmenu\", this.handleContextmenu);\n }\n\n this.isMouseStarted = false;\n this.mouseDelayTimer = null;\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n }\n\n private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest(\".jqtree-toggler\");\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const jqTreeElement =\n element.closest(\".jqtree-element\");\n\n if (jqTreeElement) {\n const node = this.getNode(jqTreeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n public deinit(): void {\n this.element.removeEventListener(\"click\", this.handleClick);\n this.element.removeEventListener(\"dblclick\", this.handleDblclick);\n\n if (this.useContextMenu) {\n this.element.removeEventListener(\n \"contextmenu\",\n this.handleContextmenu,\n );\n }\n\n this.element.removeEventListener(\"mousedown\", this.mouseDown);\n this.element.removeEventListener(\"touchstart\", this.touchStart);\n this.removeMouseMoveEventListeners();\n }\n}\n\nexport default MouseHandler;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n","import { isNodeRecordWithChildren } from \"./nodeUtils\";\nimport { Position } from \"./position\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport class Node implements INode {\n [key: string]: unknown;\n\n public children: Node[];\n public element?: HTMLElement;\n public id?: NodeId;\n public idMapping: Map;\n public is_loading: boolean;\n public is_open: boolean;\n public isEmptyFolder: boolean;\n public load_on_demand: boolean;\n public name: string;\n public nodeClass?: typeof Node;\n public parent: Node | null;\n public tree?: Node;\n\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n\n if (isRoot) {\n this.idMapping = new Map();\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, node);\n }\n }\n\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /*\n Get the tree as data.\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record[] => {\n return nodes.map((node) => {\n const tmpNode: Record = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1];\n\n if (!lastChild) {\n return null;\n }\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\n }\n }\n }\n\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\n }\n\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\n }\n\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (\n !previousSibling.hasChildren() ||\n !previousSibling.is_open\n ) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n }\n\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n // Init Node from data without making it the root of the tree\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length\n ) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case Position.After: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode) + 1,\n );\n return true;\n }\n return false;\n }\n\n case Position.Before: {\n if (targetNode.parent) {\n targetNode.parent.addChildAtPosition(\n movedNode,\n targetNode.parent.getChildIndex(targetNode),\n );\n return true;\n }\n return false;\n }\n\n case Position.Inside: {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n\n default:\n return false;\n }\n }\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\n }\n\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setData(object): set attributes of the node\n\n Examples:\n setData('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n}\n","import { DropHint } from \"../dragAndDropHandler/types\";\n\nclass BorderDropHint implements DropHint {\n private hint?: HTMLElement;\n\n constructor(element: HTMLElement, scrollLeft: number) {\n const div = element.querySelector(\":scope > .jqtree-element\");\n\n if (!div) {\n this.hint = undefined;\n return;\n }\n\n const width = Math.max(element.offsetWidth + scrollLeft - 4, 0);\n const height = Math.max(element.clientHeight - 4, 0);\n\n const hint = document.createElement(\"span\");\n hint.className = \"jqtree-border\";\n hint.style.width = `${width}px`;\n hint.style.height = `${height}px`;\n\n this.hint = hint;\n\n div.append(this.hint);\n }\n\n public remove(): void {\n this.hint?.remove();\n }\n}\n\nexport default BorderDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n private node: Node;\n\n constructor(node: Node, element: HTMLElement, position: Position) {\n this.element = element;\n this.node = node;\n this.ghost = this.createGhostElement();\n\n switch (position) {\n case Position.After:\n this.moveAfter();\n break;\n\n case Position.Before:\n this.moveBefore();\n break;\n\n case Position.Inside: {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\n }\n\n private createGhostElement() {\n const ghost = document.createElement(\"li\");\n ghost.className = \"jqtree_common jqtree-ghost\";\n\n const circleSpan = document.createElement(\"span\");\n circleSpan.className = \"jqtree_common jqtree-circle\";\n ghost.append(circleSpan);\n\n const lineSpan = document.createElement(\"span\");\n lineSpan.className = \"jqtree_common jqtree-line\";\n ghost.append(lineSpan);\n\n return ghost;\n }\n\n private moveAfter(): void {\n this.element.after(this.ghost);\n }\n\n private moveBefore(): void {\n this.element.before(this.ghost);\n }\n\n private moveInside(): void {\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n private moveInsideOpenFolder(): void {\n const childElement = this.node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this.ghost);\n }\n }\n\n public remove(): void {\n this.ghost.remove();\n }\n}\n\nexport default GhostDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private treeElement: HTMLElement;\n public element: HTMLElement;\n public node: Node;\n\n constructor({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n }: NodeElementParams) {\n this.getScrollLeft = getScrollLeft;\n this.tabIndex = tabIndex;\n this.treeElement = treeElement;\n\n this.init(node);\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > span.jqtree-title\",\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === Position.Inside;\n }\n\n public addDropHint(position: number): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.node, this.element, position);\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public init(node: Node): void {\n this.node = node;\n\n if (!node.element) {\n node.element = this.treeElement;\n }\n\n this.element = node.element;\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n}\n\nexport default NodeElement;\n","import { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\nimport { Position } from \"../position\";\nimport NodeElement, { NodeElementParams } from \"./index\";\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: HTMLElement | Text;\n openedIconElement?: HTMLElement | Text;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: HTMLElement | Text;\n private openedIconElement?: HTMLElement | Text;\n private triggerEvent: TriggerEvent;\n\n constructor({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.triggerEvent = triggerEvent;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && position === Position.Inside;\n }\n\n private getButton(): HTMLLinkElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > a.jqtree-toggler\",\n ) as HTMLLinkElement;\n }\n\n public close(\n slide = true,\n animationSpeed: JQuery.Duration | undefined = \"fast\",\n ): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n const button = this.getButton();\n button.classList.add(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideUp(animationSpeed, doClose);\n } else {\n jQuery(this.getUl()).hide();\n doClose();\n }\n }\n\n public open(\n onFinished: OnFinishOpenNode | undefined,\n slide = true,\n animationSpeed: JQuery.Duration = \"fast\",\n ): void {\n if (this.node.is_open) {\n return;\n }\n\n this.node.is_open = true;\n\n const button = this.getButton();\n button.classList.remove(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const openedIconElement = this.openedIconElement;\n\n if (openedIconElement) {\n const icon = openedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doOpen = (): void => {\n this.element.classList.remove(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"true\");\n\n if (onFinished) {\n onFinished(this.node);\n }\n\n this.triggerEvent(\"tree.open\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideDown(animationSpeed, doOpen);\n } else {\n jQuery(this.getUl()).show();\n doOpen();\n }\n }\n}\n\nexport default FolderElement;\n","import {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private _supportsLocalStorage: boolean | null;\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else if (this.supportsLocalStorage()) {\n return localStorage.getItem(this.getKeyName());\n } else {\n return null;\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state as unknown as SavedState;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n\n private supportsLocalStorage(): boolean {\n const testSupport = (): boolean => {\n // Check if it's possible to store an item. Safari does not allow this in private browsing mode.\n try {\n const key = \"_storage_test\";\n sessionStorage.setItem(key, \"value\");\n sessionStorage.removeItem(key);\n } catch {\n return false;\n }\n\n return true;\n };\n\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n\n return this._supportsLocalStorage;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData) as unknown as SavedState;\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else if (this.supportsLocalStorage()) {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand\n */\n public setInitialState(state: SavedState): boolean {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n this.resetSelection();\n\n if (state.selected_node) {\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\n\n public setInitialStateOnDemand(\n state: SavedState,\n cbFinished: () => void,\n ): void {\n let loadingCount = 0;\n let nodeIds = state.open_nodes;\n\n const openNodes = (): void => {\n if (!nodeIds) {\n return;\n }\n\n const newNodesIds = [];\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (!node) {\n newNodesIds.push(nodeId);\n } else {\n if (!node.is_loading) {\n if (node.load_on_demand) {\n loadAndOpenNode(node);\n } else {\n this.openNode(node, false);\n }\n }\n }\n }\n\n nodeIds = newNodesIds;\n\n if (state.selected_node) {\n if (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\n }\n }\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNode(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n openNodes();\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getElementPosition, getOffsetTop } from '../util'\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ntype VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface Params {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport default class ContainerScrollParent implements ScrollParent {\n private container: HTMLElement;\n private horizontalScrollDirection?: HorizontalScrollDirection;\n private horizontalScrollTimeout?: number;\n private refreshHitAreas: () => void;\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n private verticalScrollDirection?: VerticalScrollDirection;\n private verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: Params) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\n }\n\n private getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n\n const rightEdge = scrollParentOffset.left + this.container.clientWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n this.scrollParentBottom = this.getScrollParentTop() + this.container.clientHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n if (this.scrollParentTop == null) {\n this.scrollParentTop = getOffsetTop(this.container)\n }\n\n return this.scrollParentTop;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return this.container.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n this.container.scrollTop = top;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n this.scrollParentTop = undefined;\n this.scrollParentBottom = undefined;\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getOffsetTop } from \"../util\";\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ntype VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent implements ScrollParent {\n private documentScrollHeight?: number;\n private documentScrollWidth?: number;\n private horizontalScrollDirection?: HorizontalScrollDirection;\n private horizontalScrollTimeout?: number;\n private refreshHitAreas: () => void;\n private treeElement: HTMLElement;\n private verticalScrollDirection?: VerticalScrollDirection;\n private verticalScrollTimeout?: number;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n this.refreshHitAreas = refreshHitAreas;\n this.treeElement = treeElement;\n }\n\n private canScrollDown() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollTop + documentElement.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollLeft + documentElement.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n if (this.documentScrollHeight == null) {\n this.documentScrollHeight = document.documentElement.scrollHeight;\n }\n\n return this.documentScrollHeight;\n }\n\n private getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n if (this.documentScrollWidth == null) {\n this.documentScrollWidth = document.documentElement.scrollWidth;\n }\n\n return this.documentScrollWidth;\n }\n\n private getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = document.documentElement.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n const isNearLeftEdge = pageX - scrollLeft < 20;\n\n if (isNearRightEdge && this.canScrollRight()) {\n return \"right\";\n }\n\n if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = jQuery(document).scrollTop() ?? 0;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n if (windowHeight - (pageY - scrollTop) < 20 && this.canScrollDown()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: distance, top: 0 });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: 0, top: distance });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n\n public checkHorizontalScrolling(pageX: number): void {\n const newHorizontalScrollDirection =\n this.getNewHorizontalScrollDirection(pageX);\n\n if (this.horizontalScrollDirection !== newHorizontalScrollDirection) {\n this.horizontalScrollDirection = newHorizontalScrollDirection;\n\n if (this.horizontalScrollTimeout != null) {\n window.clearTimeout(this.horizontalScrollTimeout);\n }\n\n if (newHorizontalScrollDirection) {\n this.horizontalScrollTimeout = window.setTimeout(\n this.scrollHorizontally.bind(this),\n 40,\n );\n }\n }\n }\n\n public checkVerticalScrolling(pageY: number) {\n const newVerticalScrollDirection =\n this.getNewVerticalScrollDirection(pageY);\n\n if (this.verticalScrollDirection !== newVerticalScrollDirection) {\n this.verticalScrollDirection = newVerticalScrollDirection;\n\n if (this.verticalScrollTimeout != null) {\n window.clearTimeout(this.verticalScrollTimeout);\n this.verticalScrollTimeout = undefined;\n }\n\n if (newVerticalScrollDirection) {\n this.verticalScrollTimeout = window.setTimeout(\n this.scrollVertically.bind(this),\n 40,\n );\n }\n }\n }\n\n public getScrollLeft(): number {\n return document.documentElement.scrollLeft;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this.treeElement);\n\n document.documentElement.scrollTop = top + treeTop;\n }\n\n public stopScrolling() {\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n this.documentScrollHeight = undefined;\n this.documentScrollWidth = undefined;\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n","import { PositionInfo } from \"./mouseUtils\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\nimport { ScrollParent } from \"./scrollHandler/types\";\n\ninterface ScrollHandlerParams {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class ScrollHandler {\n private refreshHitAreas: () => void;\n private scrollParent?: ScrollParent;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: ScrollHandlerParams) {\n this.refreshHitAreas = refreshHitAreas;\n this.scrollParent = undefined;\n this.treeElement = treeElement;\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private getScrollParent(): ScrollParent {\n if (!this.scrollParent) {\n this.scrollParent = createScrollParent(\n this.treeElement,\n this.refreshHitAreas,\n );\n }\n\n return this.scrollParent;\n }\n\n public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n}\n","import { GetNodeById } from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private selectedNodes: Set;\n private selectedSingleNode: Node | null;\n\n constructor({ getNodeById }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.selectedNodes = new Set();\n this.clear();\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes = [];\n\n for (const id in this.selectedNodes) {\n if (\n Object.prototype.hasOwnProperty.call(this.selectedNodes, id)\n ) {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n }\n }\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n}\n","const register = (widgetClass: unknown, widgetName: string): void => {\n const getDataKey = (): string => `simple_widget_${widgetName}`;\n\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string,\n ): null | SimpleWidget => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: unknown): JQuery => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, dataKey);\n\n if (!existingWidget) {\n const simpleWidgetClass = widgetClass as typeof SimpleWidget;\n const widget = new simpleWidgetClass(el, options);\n\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n\n return $el;\n };\n\n const destroyWidget = ($el: JQuery): void => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const widget = getWidgetData(el, dataKey);\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, dataKey);\n }\n };\n\n const callFunction = (\n $el: JQuery,\n functionName: string,\n args: unknown[],\n ): unknown => {\n let result = null;\n\n for (const el of $el.get()) {\n const widget = jQuery.data(el, getDataKey()) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n const simpleWidget = widget as SimpleWidget;\n const widgetFunction = simpleWidget[functionName];\n\n if (widgetFunction && typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args) as unknown;\n }\n }\n }\n\n return result;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (jQuery.fn as any)[widgetName] = function (\n this: JQuery,\n argument1: unknown,\n ...args: unknown[]\n ) {\n if (!argument1) {\n return createWidget(this, null);\n } else if (typeof argument1 === \"object\") {\n const options = argument1 as unknown;\n return createWidget(this, options);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (functionName === \"destroy\") {\n destroyWidget(this);\n return undefined;\n } else if (functionName === \"get_widget_class\") {\n return widgetClass;\n } else {\n return callFunction(this, functionName, args);\n }\n } else {\n return undefined;\n }\n };\n};\n\nexport default class SimpleWidget {\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public $el: JQuery;\n\n public options: WidgetOptions;\n\n constructor(el: HTMLElement, options: WidgetOptions) {\n this.$el = jQuery(el);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const defaults = (this.constructor as any).defaults as WidgetOptions;\n this.options = { ...defaults, ...options };\n }\n\n public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n public deinit(): void {\n //\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n}\n","const version = \"1.8.7\";\n\nexport default version;\n","import DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport { Node } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { getPosition } from \"./position\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport __version__ from \"./version\";\n\ninterface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends SimpleWidget {\n protected static defaults: JQTreeOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: undefined,\n data: undefined,\n dataFilter: undefined,\n dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n onCanMove: undefined, // Can this node be moved?\n onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanSelectNode: undefined,\n onCreateLi: undefined,\n onDragMove: undefined,\n onDragStop: undefined,\n onGetStateFromStorage: undefined,\n onIsMoveHandle: undefined,\n onLoadFailed: undefined,\n onLoading: undefined,\n onSetStateFromStorage: undefined,\n openedIcon: \"▼\",\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (cookie name)\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n useContextMenu: true,\n };\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\n private element: JQuery;\n\n private isInitialized: boolean;\n private keyHandler: KeyHandler;\n private mouseHandler: MouseHandler;\n private renderer: ElementsRenderer;\n private saveStateHandler: SaveStateHandler;\n private scrollHandler: ScrollHandler;\n private selectNodeHandler: SelectNodeHandler;\n private tree: Node;\n\n private connectHandlers() {\n const {\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onLoadFailed,\n onLoading,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this.options;\n\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this.getNodeElement.bind(this);\n const getNodeElementForNode = this.getNodeElementForNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const isFocusOnTree = this.isFocusOnTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this.openNodeInternal.bind(this);\n const refreshElements = this.refreshElements.bind(this);\n const refreshHitAreas = this.refreshHitAreas.bind(this);\n const selectNode = this.selectNode.bind(this);\n const $treeElement = this.element;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const dataLoader = new DataLoader({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n });\n\n const renderer = new ElementsRenderer({\n $element: $treeElement,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this.getNode.bind(this);\n const onMouseCapture = this.mouseCapture.bind(this);\n const onMouseDrag = this.mouseDrag.bind(this);\n const onMouseStart = this.mouseStart.bind(this);\n const onMouseStop = this.mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle: this.doSelectNode.bind(this),\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this.dataLoader = dataLoader;\n this.dndHandler = dndHandler;\n this.keyHandler = keyHandler;\n this.mouseHandler = mouseHandler;\n this.renderer = renderer;\n this.saveStateHandler = saveStateHandler;\n this.scrollHandler = scrollHandler;\n this.selectNodeHandler = selectNodeHandler;\n }\n\n private containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\n }\n\n private createFolderElement(node: Node) {\n const closedIconElement = this.renderer.closedIconElement;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const openedIconElement = this.renderer.openedIconElement;\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n return new FolderElement({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n });\n }\n\n private createNodeElement(node: Node) {\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n }\n\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n private doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (data) {\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n\n this.triggerEvent(\"tree.load_data\", {\n parent_node: parentNode,\n tree_data: data,\n });\n }\n\n private doLoadDataFromUrl(\n urlInfoParam: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n const urlInfo = urlInfoParam ?? this.getDataUrlInfo(parentNode);\n\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n }\n\n private doSelectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): void {\n const saveState = (): void => {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n };\n\n if (!node) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (this.options.onCanSelectNode) {\n return (\n this.options.selectable &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable;\n }\n };\n\n if (!canSelect()) {\n return;\n }\n\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this.triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node,\n });\n }\n } else {\n const deselectedNode = this.getSelectedNode() || null;\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselected_node: deselectedNode,\n node,\n });\n this.openParents(node);\n }\n\n saveState();\n }\n\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n } else if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n } else if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n } else {\n return 0;\n }\n }\n\n private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl ?? (this.element.data(\"url\") as null | string);\n\n const getUrlFromString = (url: string): JQuery.AjaxSettings => {\n const urlInfo: JQuery.AjaxSettings = { url };\n\n setUrlInfoData(urlInfo);\n\n return urlInfo;\n };\n\n const setUrlInfoData = (urlInfo: JQuery.AjaxSettings): void => {\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n const data = { node: node.id };\n urlInfo.data = data;\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n const data = { selected_node: selectedNodeId };\n urlInfo.data = data;\n }\n }\n };\n\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n } else if (typeof dataUrl === \"string\") {\n return getUrlFromString(dataUrl);\n } else if (dataUrl && typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n } else {\n return null;\n }\n }\n\n private getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n } else {\n // triangle to the right\n return \"►\";\n }\n }\n\n private getNode(element: HTMLElement): Node | null {\n const liElement = element.closest(\"li.jqtree_common\");\n\n if (liElement) {\n return jQuery(liElement).data(\"node\") as Node;\n } else {\n return null;\n }\n }\n\n private getNodeElement(element: HTMLElement): NodeElement | null {\n const node = this.getNode(element);\n if (node) {\n return this.getNodeElementForNode(node);\n } else {\n return null;\n }\n }\n\n private getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return this.createFolderElement(node);\n } else {\n return this.createNodeElement(node);\n }\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\n }\n }\n\n private getRtlOption(): boolean {\n if (this.options.rtl != null) {\n return this.options.rtl;\n } else {\n const dataRtl = this.element.data(\"rtl\") as unknown;\n\n if (\n dataRtl !== null &&\n dataRtl !== false &&\n dataRtl !== undefined\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n private initData(): void {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n } else {\n const dataUrl = this.getDataUrlInfo(null);\n\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n } else {\n this.doLoadData([], null);\n }\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (!this.isInitialized) {\n this.isInitialized = true;\n this.triggerEvent(\"tree.init\");\n }\n };\n\n this.tree = new this.options.nodeClass(\n null,\n true,\n this.options.nodeClass,\n );\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this.refreshElements(null);\n\n if (!mustLoadOnDemand) {\n doInit();\n } else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n }\n\n private isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return Boolean(\n activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.containsElement(activeElement as HTMLElement),\n );\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (!selectedNode) {\n return false;\n } else {\n return subtree === selectedNode || subtree.isParentOf(selectedNode);\n }\n }\n\n private loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n node.is_loading = true;\n\n this.doLoadDataFromUrl(null, node, () => {\n this.openNodeInternal(node, slide, onFinished);\n });\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this.refreshElements(parentNode);\n }\n\n private mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseCapture(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this.dndHandler.mouseDrag(positionInfo);\n\n this.scrollHandler.checkScrolling(positionInfo);\n return result;\n } else {\n return false;\n }\n }\n\n private mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n this.scrollHandler.stopScrolling();\n return this.dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n private openNodeInternal(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished?: OnFinishOpenNode,\n ): void => {\n const folderElement = this.createFolderElement(_node);\n folderElement.open(\n _onFinished,\n _slide,\n this.options.animationSpeed,\n );\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n doOpenNode(parent, false);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this.triggerEvent(\"tree.refresh\");\n }\n\n private saveState(): void {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (node) {\n const nodeElement = this.getNodeElementForNode(node);\n nodeElement.select(mustSetFocus);\n }\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): [boolean, boolean] => {\n // result: is state restored, must load on demand?\n if (!this.options.saveState) {\n return [false, false];\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return [false, false];\n } else {\n const mustLoadOnDemand =\n this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n }\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n } else if (!node.hasChildren()) {\n return false;\n } else {\n node.is_open = true;\n return level !== maxLevel;\n }\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n private setInitialStateOnDemand(cbFinished: () => void): void {\n const restoreState = (): boolean => {\n if (!this.options.saveState) {\n return false;\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return false;\n } else {\n this.saveStateHandler.setInitialStateOnDemand(\n state,\n cbFinished,\n );\n\n return true;\n }\n }\n };\n\n const autoOpenNodes = (): void => {\n const maxLevel = this.getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNodeInternal(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n const openNodes = (): void => {\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n\n return false;\n } else {\n this.openNodeInternal(node, false);\n\n return level !== maxLevel;\n }\n });\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n openNodes();\n };\n\n if (!restoreState()) {\n autoOpenNodes();\n }\n }\n\n private triggerEvent(\n eventName: string,\n values?: Record,\n ): JQuery.Event {\n const event = jQuery.Event(eventName, values);\n this.element.trigger(event);\n return event;\n }\n\n public addNodeAfter(\n newNodeInfo: NodeData,\n existingNode: Node,\n ): Node | null {\n const newNode = existingNode.addAfter(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addNodeBefore(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addBefore(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addParentNode(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addParent(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n public addToSelection(node?: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.addToSelection(node);\n this.openParents(node);\n\n this.getNodeElementForNode(node).select(mustSetFocus ?? true);\n\n this.saveState();\n\n return this.element;\n }\n\n public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.append(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public closeNode(node?: Node, slideParam?: boolean | null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.isFolder() || node.isEmptyFolder) {\n this.createFolderElement(node).close(\n slide,\n this.options.animationSpeed,\n );\n\n this.saveState();\n }\n\n return this.element;\n }\n\n public deinit(): void {\n this.element.empty();\n this.element.off();\n\n this.keyHandler.deinit();\n this.mouseHandler.deinit();\n\n this.tree = new Node({}, true);\n\n super.deinit();\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n public getNodeByHtmlElement(\n inputElement: HTMLElement | JQuery,\n ): Node | null {\n const element =\n inputElement instanceof HTMLElement\n ? inputElement\n : inputElement[0];\n\n if (!element) {\n return null;\n }\n\n return this.getNode(element);\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.tree.getNodeById(nodeId);\n }\n\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n public getSelectedNode(): false | Node {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n public getState(): null | SavedState {\n return this.saveStateHandler.getState();\n }\n\n public getStateFromStorage(): null | SavedState {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n public getTree(): Node {\n return this.tree;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public init(): void {\n super.init();\n\n this.element = this.$el;\n this.isInitialized = false;\n\n this.options.rtl = this.getRtlOption();\n\n if (this.options.closedIcon == null) {\n this.options.closedIcon = this.getDefaultClosedIcon();\n }\n\n this.connectHandlers();\n\n this.initData();\n }\n\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public isNodeSelected(node?: Node): boolean {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n public loadData(data: NodeData[], parentNode: Node | null): JQuery {\n this.doLoadData(data, parentNode);\n return this.element;\n }\n\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n public loadDataFromUrl(\n param1: Node | null | string,\n param2?: HandleFinishedLoading | Node | null,\n param3?: HandleFinishedLoading,\n ): JQuery {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(\n param1,\n param2 as Node | null,\n param3 ?? null,\n );\n } else {\n // first parameter is not url\n this.doLoadDataFromUrl(\n null,\n param1,\n param2 as HandleFinishedLoading | null,\n );\n }\n\n return this.element;\n }\n\n public moveDown(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveDown(selectedNode);\n }\n\n return this.element;\n }\n\n public moveNode(node?: Node, targetNode?: Node, position?: string): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!targetNode) {\n throw Error(PARAM_IS_EMPTY + \"targetNode\");\n }\n\n if (!position) {\n throw Error(PARAM_IS_EMPTY + \"position\");\n }\n\n const positionIndex = getPosition(position);\n\n if (positionIndex !== undefined) {\n this.tree.moveNode(node, targetNode, positionIndex);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public moveUp(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveUp(selectedNode);\n }\n\n return this.element;\n }\n\n public openNode(\n node?: Node,\n param1?: boolean | OnFinishOpenNode,\n param2?: OnFinishOpenNode,\n ): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const parseParams = (): [boolean, OnFinishOpenNode | undefined] => {\n let onFinished: null | OnFinishOpenNode;\n let slide: boolean | null;\n\n if (isFunction(param1)) {\n onFinished = param1 as OnFinishOpenNode;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n if (slide == null) {\n slide = this.options.slide;\n }\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this.openNodeInternal(node, slide, onFinished);\n return this.element;\n }\n\n public prependNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.prepend(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.element;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\n }\n\n public reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public removeFromSelection(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.removeFromSelection(node);\n\n this.getNodeElementForNode(node).deselect();\n this.saveState();\n\n return this.element;\n }\n\n public removeNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.parent) {\n throw Error(\"Node has no parent\");\n }\n\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this.refreshElements(parent);\n\n return this.element;\n }\n\n public scrollToNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.element) {\n return this.element;\n }\n\n const top =\n getOffsetTop(node.element) -\n getOffsetTop(this.$el.get(0) as HTMLElement);\n\n this.scrollHandler.scrollToY(top);\n\n return this.element;\n }\n\n public selectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): JQuery {\n this.doSelectNode(node, optionsParam);\n return this.element;\n }\n\n public setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record)[option] = value;\n return this.element;\n }\n\n public setState(state?: SavedState): JQuery {\n if (state) {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public toggle(node?: Node, slideParam: boolean | null = null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n public updateNode(node?: Node, data?: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!data) {\n return this.element;\n }\n\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data.children &&\n data.children instanceof Array\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children as Node[]);\n }\n }\n\n this.refreshElements(node);\n\n return this.element;\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["DataLoader","constructor","_ref","dataFilter","loadData","onLoadFailed","onLoading","treeElement","triggerEvent","this","addLoadingClass","element","classList","add","getDomElement","parentNode","notifyLoading","isLoading","node","$el","jQuery","parseData","data","parsedData","JSON","parse","removeLoadingClass","remove","submitRequest","urlInfoInput","handleSuccess","handleError","ajaxSettings","cache","dataType","error","method","success","url","toUpperCase","ajax","loadFromUrl","urlInfo","onFinished","stopLoading","jqXHR","Position","positionNames","after","After","before","Before","inside","Inside","none","None","getPositionName","position","name","Object","prototype","hasOwnProperty","call","getBoolString","value","getOffsetTop","getElementPosition","top","rect","getBoundingClientRect","left","x","window","scrollX","y","scrollY","DragElement","autoEscape","nodeName","offsetX","offsetY","createElement","appendChild","document","textContent","innerHTML","style","move","pageX","pageY","generateHitAreasForGroup","hitAreas","positionsInGroup","bottom","positionCount","Math","min","length","areaHeight","round","areaTop","i","push","generateHitAreas","tree","currentNode","treeBottom","generateHitAreasFromPositions","hitPositions","previousTop","group","generateHitPositions","lastTop","addHitPosition","iterateVisibleNodes","handleAfterOpenFolder","handleClosedFolder","handleFirstNode","handleNode","handleOpenFolder","isFirstNode","iterate","nextNode","mustIterateInside","is_open","hasChildren","offsetParent","childrenLength","children","forEach","_","child","nextChild","height","clientHeight","DragAndDropHandler","getNodeElement","getNodeElementForNode","getScrollLeft","getTree","onCanMove","onCanMoveTo","onDragMove","onDragStop","onIsMoveHandle","openNode","refreshElements","slide","hoveredArea","isDragging","currentItem","canMoveToArea","area","positionName","clear","dragElement","findHoveredArea","dimensions","getTreeDimensions","right","low","high","mid","treePosition","clientWidth","moveItem","positionInfo","movedNode","targetNode","previousParent","parent","doMove","moveNode","move_info","do_move","moved_node","original_event","originalEvent","previous_parent","target_node","isDefaultPrevented","mustCaptureElement","mustOpenFolderTimer","isFolder","removeDropHint","previousGhost","removeHitAreas","removeHover","startOpenFolderTimer","folder","openFolder","refresh","updateDropHint","stopOpenFolderTimer","openFolderDelay","openFolderTimer","setTimeout","clearTimeout","nodeElement","addDropHint","mouseCapture","target","mouseDrag","mouseStart","mouseStop","ElementsRenderer","$element","buttonLeft","closedIcon","dragAndDrop","isNodeSelected","onCreateLi","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","attachNodeData","li","div","createTextNode","nodeType","createDomElements","isRootNode","level","ul","createUl","createLi","createFolderLi","isSelected","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","className","setAttribute","buttonLink","cloneNode","titleSpan","createTitleSpan","Boolean","isEmptyFolder","createNodeLi","liClasses","classString","join","classes","undefined","setTreeItemAriaAttributes","role","is_loading","render","fromNode","renderFromNode","renderFromRoot","$previousLi","getLevel","empty","KeyHandler","handleKeyDown","e","canHandleKeyboard","isKeyHandled","selectedNode","getSelectedNode","key","moveDown","moveLeft","moveRight","moveUp","preventDefault","closeNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","addEventListener","getParent","getNextVisibleNode","deinit","handleKeyDownHandler","removeEventListener","getPreviousVisibleNode","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","handleClick","clickTarget","getClickTarget","type","onClickButton","stopPropagation","click_event","onClickTitle","handleContextmenu","closest","getNode","handleDblclick","mouseDown","button","handleMouseDown","cancelable","mouseMove","handleMouseMove","mouseUp","handleMouseUp","touchEnd","touches","touchMove","touchStart","getMouseDelay","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","passive","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","jqTreeElement","handleStartMouse","removeMouseMoveEventListeners","mouseDelay","startMouseDelayTimer","isNodeRecordWithChildren","Array","Node","nodeData","arguments","isRoot","nodeClass","load_on_demand","setData","idMapping","Map","createNode","getNodeClass","doRemoveChild","splice","getChildIndex","removeNodeFromIndex","loadChildrenFromData","nodeInfo","loadFromData","setParent","addNodeToIndex","addAfter","childIndex","addChildAtPosition","addBefore","addChild","index","id","set","addParent","newParent","originalParent","append","filter","f","result","indexOf","getData","getDataFromNodes","nodes","map","tmpNode","k","v","getLastChild","lastChild","getNextNode","nextSibling","getNextSibling","nextIndex","getNodeByCallback","callback","getNodeById","nodeId","get","getNodeByName","getNodeByNameMustExist","n","Error","getNodesByProperty","getPreviousNode","previousSibling","getPreviousSibling","previousIndex","initFromData","addChildren","childrenData","addNode","isParentOf","_iterate","removeChildren","childData","prepend","removeChild","delete","o","BorderDropHint","scrollLeft","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","moveAfter","moveBefore","moveInsideOpenFolder","moveInside","circleSpan","lineSpan","childElement","NodeElement","init","getTitleSpan","getUl","mustShowBorderDropHint","deselect","removeAttribute","blur","select","mustSetFocus","toString","focus","FolderElement","super","getButton","close","animationSpeed","icon","doClose","slideUp","hide","open","doOpen","slideDown","show","SaveStateHandler","addToSelection","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","getKeyName","loadFromStorage","supportsLocalStorage","localStorage","getItem","openInitialNodes","nodeIds","mustLoadOnDemand","parseState","jsonData","state","selected_node","resetSelection","selectInitialNodes","selectCount","_supportsLocalStorage","testSupport","sessionStorage","setItem","removeItem","getNodeIdToBeSelected","getStateFromStorage","getState","open_nodes","getOpenNodeIds","openNodes","getSelectedNodeIds","selectedNodeIds","stringify","setInitialState","setInitialStateOnDemand","cbFinished","loadingCount","newNodesIds","loadAndOpenNode","ContainerScrollParent","container","refreshHitAreas","getNewHorizontalScrollDirection","scrollParentOffset","rightEdge","leftEdge","getNewVerticalScrollDirection","getScrollParentTop","getScrollParentBottom","scrollParentBottom","scrollParentTop","scrollHorizontally","horizontalScrollDirection","distance","scrollBy","behavior","bind","scrollVertically","verticalScrollDirection","checkHorizontalScrolling","newHorizontalScrollDirection","horizontalScrollTimeout","verticalScrollTimeout","checkVerticalScrolling","newVerticalScrollDirection","scrollToY","scrollTop","stopScrolling","DocumentScrollParent","canScrollDown","documentElement","getDocumentScrollHeight","canScrollRight","getDocumentScrollWidth","documentScrollHeight","scrollHeight","documentScrollWidth","scrollWidth","isNearLeftEdge","innerWidth","innerHeight","treeTop","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","createScrollParent","parentElement","getParentWithOverflow","tagName","ScrollHandler","scrollParent","getScrollParent","checkScrolling","SelectNodeHandler","selectedNodes","Set","selectedSingleNode","getSelectedNodesUnder","has","includeChildren","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","fn","argument1","functionName","destroy","removeData","destroyWidget","_len","args","_key","callFunction","widgetFunction","apply","static","defaults","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","connectHandlers","openNodeInternal","$treeElement","selectNodeHandler","dataLoader","saveStateHandler","scrollHandler","dndHandler","keyHandler","renderer","mouseHandler","toggle","doSelectNode","containsElement","createFolderElement","createNodeElement","deselectCurrentNode","deselectNodes","selectedNodesUnderParent","doLoadData","loadSubtree","initTree","parent_node","tree_data","doLoadDataFromUrl","urlInfoParam","getDataUrlInfo","optionsParam","selectOptions","mustToggle","canSelect","previous_node","deselectedNode","deselected_node","openParents","getAutoOpenMaxLevel","parseInt","setUrlInfoData","selectedNodeId","getUrlFromString","getDefaultClosedIcon","liElement","getRtlOption","dataRtl","initData","doInit","isInitialized","activeElement","isSelectedNodeInSubtree","subtree","loadFolderOnDemand","doOpenNode","_node","_slide","_onFinished","mustSelect","selectCurrentNode","autoOpenNodes","maxLevel","isRestored","restoreState","eventName","values","event","Event","trigger","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","appendNode","parentNodeParam","slideParam","off","getNodeByHtmlElement","inputElement","HTMLElement","getVersion","loadDataFromUrl","param1","param2","param3","positionIndex","parseParams","prependNode","reload","removeNode","scrollToNode","setOption","option","setState","toJson","updateNode","idIsChanged"],"mappings":"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"} \ No newline at end of file