diff --git a/.eslintrc b/.eslintrc deleted file mode 100644 index 3a46c91b..00000000 --- a/.eslintrc +++ /dev/null @@ -1,49 +0,0 @@ -{ - "parser": "@typescript-eslint/parser", - "plugins": ["@typescript-eslint", "import"], - "extends": [ - "eslint:recommended", - "plugin:@typescript-eslint/eslint-recommended", - "plugin:@typescript-eslint/recommended", - "plugin:@typescript-eslint/recommended-requiring-type-checking", - "plugin:import/recommended", - "plugin:import/typescript", - "plugin:deprecation/recommended" - ], - "rules": { - "@typescript-eslint/explicit-function-return-type": "off", - "@typescript-eslint/interface-name-prefix": "off", - "@typescript-eslint/no-explicit-any": "off", - "@typescript-eslint/no-use-before-define": "off", - "@typescript-eslint/no-unused-vars": ["error", { - "argsIgnorePattern": "^_", - "varsIgnorePattern": "^_" - }], - "@typescript-eslint/prefer-includes": "off", - "@typescript-eslint/triple-slash-reference": "off", - "@typescript-eslint/prefer-string-starts-ends-with": "off", - "@typescript-eslint/restrict-template-expressions": [ - "error", - { - "allowNumber": true, - "allowBoolean": true, - "allowAny": false, - "allowNullish": false - } - ] - }, - "parserOptions": { - "project": "./tsconfig.json" - }, - "settings": { - "import/parsers": { - "@typescript-eslint/parser": [".ts"] - }, - "import/resolver": { - "typescript": { - "alwaysTryTypes": true, - "project": "./tsconfig.json" - } - } - } -} diff --git a/docs/package.json b/docs/package.json index f24b309e..c3632d81 100644 --- a/docs/package.json +++ b/docs/package.json @@ -12,11 +12,11 @@ "devDependencies": { "@tailwindcss/typography": "^0.5.13", "autoprefixer": "^10.4.19", - "postcss": "^8.4.39", + "postcss": "^8.4.40", "postcss-cli": "^11.0.0", "postcss-import": "^16.1.0", "postcss-load-config": "^6.0.1", - "postcss-nested": "^6.0.1", - "tailwindcss": "^3.4.6" + "postcss-nested": "^6.2.0", + "tailwindcss": "^3.4.7" } } diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index 5ad14efe..857bcdc8 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -10,28 +10,28 @@ importers: devDependencies: '@tailwindcss/typography': specifier: ^0.5.13 - version: 0.5.13(tailwindcss@3.4.6) + version: 0.5.13(tailwindcss@3.4.7) autoprefixer: specifier: ^10.4.19 - version: 10.4.19(postcss@8.4.39) + version: 10.4.19(postcss@8.4.40) postcss: - specifier: ^8.4.39 - version: 8.4.39 + specifier: ^8.4.40 + version: 8.4.40 postcss-cli: specifier: ^11.0.0 - version: 11.0.0(jiti@1.21.0)(postcss@8.4.39) + version: 11.0.0(jiti@1.21.6)(postcss@8.4.40) postcss-import: specifier: ^16.1.0 - version: 16.1.0(postcss@8.4.39) + version: 16.1.0(postcss@8.4.40) postcss-load-config: specifier: ^6.0.1 - version: 6.0.1(jiti@1.21.0)(postcss@8.4.39)(yaml@2.4.2) + version: 6.0.1(jiti@1.21.6)(postcss@8.4.40)(yaml@2.5.0) postcss-nested: - specifier: ^6.0.1 - version: 6.0.1(postcss@8.4.39) + specifier: ^6.2.0 + version: 6.2.0(postcss@8.4.40) tailwindcss: - specifier: ^3.4.6 - version: 3.4.6 + specifier: ^3.4.7 + version: 3.4.7 packages: @@ -55,8 +55,8 @@ packages: resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} engines: {node: '>=6.0.0'} - '@jridgewell/sourcemap-codec@1.4.15': - resolution: {integrity: sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==} + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} @@ -133,8 +133,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.23.0: - resolution: {integrity: sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==} + browserslist@4.23.2: + resolution: {integrity: sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==} 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.30001616: - resolution: {integrity: sha512-RHVYKov7IcdNjVHJFNY/78RdG4oGVjbayxv8u5IO74Wv7Hlq4PnJE6mo/OjFijjVFNy5ijnCt6H3IIo4t+wfEw==} + caniuse-lite@1.0.30001646: + resolution: {integrity: sha512-dRg00gudiBDDTmUhClSdv3hqRfpbOnU28IpI1T6PBTLWa+kOj0681C8uML3PifYfREuBrVjDGhL3adYpBT6spw==} 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.4.756: - resolution: {integrity: sha512-RJKZ9+vEBMeiPAvKNWyZjuYyUqMndcP1f335oHqn3BEQbs2NFtVrnK5+6Xg5wSM9TknNNpWghGDUCKGYF+xWXw==} + electron-to-chromium@1.5.4: + resolution: {integrity: sha512-orzA81VqLyIGUEA77YkVA1D+N+nNfl2isJVjjmOyrlxuooZ19ynb+dOlaDTqd/idKRS9lDCSBmtzM+kyCsMnkA==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -210,8 +210,8 @@ packages: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} engines: {node: '>=8'} - foreground-child@3.1.1: - resolution: {integrity: sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==} + foreground-child@3.2.1: + resolution: {integrity: sha512-PXUUyLqrR2XCWICfv6ukppP96sdFwWbNEnfEMt7jNsISjMsvaLNinAHNDYyvkyU+SZG2BTSbT5NjG+vZslfGTA==} engines: {node: '>=14'} fraction.js@4.3.7: @@ -245,13 +245,12 @@ packages: resolution: {integrity: sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==} engines: {node: '>=10.13.0'} - glob@10.3.12: - resolution: {integrity: sha512-TCNv8vJ+xz4QiqTpfOJA7HvYv+tNIRHKfUWw/q+v2jdgN4ebz+KY9tGx5J4rHP0o84mNP+ApH66HRX8us3Khqg==} - engines: {node: '>=16 || 14 >=14.17'} + glob@10.4.5: + resolution: {integrity: sha512-7Bv8RF0k6xjo7d4A/PxYLbUCfb6c+Vpd2/mB2yRDlew7Jb5hEXiCD9ibfO7wpk8i4sevK6DFny9h7EYbM3/sHg==} hasBin: true - globby@14.0.1: - resolution: {integrity: sha512-jOMLD2Z7MAhyG8aJpNOpmziMOP4rPLcc95oQPKXBazW82z+CEgPFBQvEpRUa1KeIMUJo4Wsm+q6uzO/Q/4BksQ==} + globby@14.0.2: + resolution: {integrity: sha512-s3Fq41ZVh7vbbe2PN3nrW7yC7U7MFVc5c98/iTl9c2GawNMKx/J648KQRW6WKkuU8GIbbh2IXfIRQjOZnXcTnw==} engines: {node: '>=18'} graceful-fs@4.2.11: @@ -269,8 +268,9 @@ packages: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} - is-core-module@2.13.1: - resolution: {integrity: sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==} + is-core-module@2.15.0: + resolution: {integrity: sha512-Dd+Lb2/zvk9SKy1TGCt1wFJFo/MWBPMX5x7KcvLajWTGuomczdQX61PvY5yK6SVACwpoexWo81IfFyoKY2QnTA==} + engines: {node: '>= 0.4'} is-extglob@2.1.1: resolution: {integrity: sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==} @@ -291,12 +291,11 @@ packages: isexe@2.0.0: resolution: {integrity: sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==} - jackspeak@2.3.6: - resolution: {integrity: sha512-N3yCS/NegsOBokc8GAdM8UcmfsKiSS8cipheD/nivzr700H+nsMOxJjQnvwOcRYVuFkdH0wGUvW2WbXGmrZGbQ==} - engines: {node: '>=14'} + jackspeak@3.4.3: + resolution: {integrity: sha512-OGlZQpz2yfahA/Rd1Y8Cd9SIEsqvXkLVoSw/cgwhnhFMDbsQFeZYoJJ7bIZBS9BcamUW96asq/npPWugM+RQBw==} - jiti@1.21.0: - resolution: {integrity: sha512-gFqAIbuKyyso/3G2qhiO2OM6shY6EPP/R0+mkDbyspxKazh8BXDC5FiFsUjlczgdNz/vfra0da2y+aHrusLG/Q==} + jiti@1.21.6: + resolution: {integrity: sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==} hasBin: true jsonfile@6.1.0: @@ -306,8 +305,8 @@ packages: resolution: {integrity: sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==} engines: {node: '>=10'} - lilconfig@3.1.1: - resolution: {integrity: sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==} + lilconfig@3.1.2: + resolution: {integrity: sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==} engines: {node: '>=14'} lines-and-columns@1.2.4: @@ -322,24 +321,23 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - lru-cache@10.2.2: - resolution: {integrity: sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==} - engines: {node: 14 || >=16.14} + lru-cache@10.4.3: + resolution: {integrity: sha512-JNAzZcXrCt42VGLuYz0zfAzDfAvJWW6AfYlDBQyDV5DClI2m5sAmK+OIO7s59XfsRsWHp02jAJrRadPRGTt6SQ==} merge2@1.4.1: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromatch@4.0.5: - resolution: {integrity: sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==} + micromatch@4.0.7: + resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} engines: {node: '>=8.6'} - minimatch@9.0.4: - resolution: {integrity: sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==} + minimatch@9.0.5: + resolution: {integrity: sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==} engines: {node: '>=16 || 14 >=14.17'} - minipass@7.1.0: - resolution: {integrity: sha512-oGZRv2OT1lO2UF1zUcwdTb3wqUwI0kBGTgt/T7OdSj6M6N5m3o5uPf0AIW6lVxGGoiWUR7e2AwTE+xiwK8WQig==} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} engines: {node: '>=16 || 14 >=14.17'} mz@2.7.0: @@ -350,8 +348,8 @@ packages: engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true - node-releases@2.0.14: - resolution: {integrity: sha512-y10wOWt8yZpqXmOgRo77WaHEmhYQYGNA6y421PKsKYWEK8aW+cqAphborZDhqfyKrbZEN92CN1X2KbafY2s7Yw==} + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -369,6 +367,9 @@ packages: resolution: {integrity: sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==} engines: {node: '>= 6'} + package-json-from-dist@1.0.0: + resolution: {integrity: sha512-dATvCeZN/8wQsGywez1mzHtTlP22H8OEfPrVMLNr4/eGa+ijtLn/6M5f0dY8UKNrC2O9UCU6SSoG3qRKnt7STw==} + path-key@3.1.1: resolution: {integrity: sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==} engines: {node: '>=8'} @@ -376,17 +377,14 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-scurry@1.10.2: - resolution: {integrity: sha512-7xTavNy5RQXnsjANvVvMkEjvloOinkAjv/Z6Ildz9v2RinZ4SBKTWFOVRbaF8p0vpHnyjV/UwNDdKuUv6M5qcA==} - engines: {node: '>=16 || 14 >=14.17'} + path-scurry@1.11.1: + resolution: {integrity: sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==} + engines: {node: '>=16 || 14 >=14.18'} path-type@5.0.0: resolution: {integrity: sha512-5HviZNaZcfqP95rwpv+1HDgUamezbqdSYTyzjTvwtJSnIH+3vnbmWsItli8OFEndS984VT55M3jduxZbX351gg==} engines: {node: '>=12'} - picocolors@1.0.0: - resolution: {integrity: sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==} - picocolors@1.0.1: resolution: {integrity: sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==} @@ -472,8 +470,8 @@ packages: yaml: optional: true - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 @@ -488,15 +486,15 @@ packages: resolution: {integrity: sha512-IQ7TZdoaqbT+LCpShg46jnZVlhWD2w6iQYAcYXfHARZ7X1t/UGhhceQDs5X0cGqKvYlHNOuv7Oa1xmb0oQuA3w==} engines: {node: '>=4'} - postcss-selector-parser@6.0.16: - resolution: {integrity: sha512-A0RVJrX+IUkVZbW3ClroRWurercFhieevHB38sr2+l9eUClMqome3LmEmnhlNy+5Mr2EYN6B2Kaw9wYdd+VHiw==} + postcss-selector-parser@6.1.1: + resolution: {integrity: sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==} engines: {node: '>=4'} postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.4.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + postcss@8.4.40: + resolution: {integrity: sha512-YF2kKIUzAofPMpfH6hOi2cGnv/HrUlfucspc7pDyvv7kGdqXrfj8SCl/t8owkEgKEuu8ZcRjSOxFxVLqwChZ2Q==} engines: {node: ^10 || ^12 || >=14} pretty-hrtime@1.0.3: @@ -573,8 +571,8 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tailwindcss@3.4.6: - resolution: {integrity: sha512-1uRHzPB+Vzu57ocybfZ4jh5Q3SdlH7XW23J5sQoM9LhE9eIOlzxer/3XPSsycvih3rboRsvt0QCmzSrqyOYUIA==} + tailwindcss@3.4.7: + resolution: {integrity: sha512-rxWZbe87YJb4OcSopb7up2Ba4U82BoiSGUdoDr3Ydrg9ckxFS/YWsvhN323GMcddgU65QRy7JndC7ahhInhvlQ==} engines: {node: '>=14.0.0'} hasBin: true @@ -603,8 +601,8 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - update-browserslist-db@1.0.15: - resolution: {integrity: sha512-K9HWH62x3/EalU1U6sjSZiylm9C8tgq2mSvshZpqc7QE69RaA2qjhkW2HlNA0tFpEbtyFz7HTqbSdN4MSwUodA==} + update-browserslist-db@1.1.0: + resolution: {integrity: sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -629,8 +627,8 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaml@2.4.2: - resolution: {integrity: sha512-B3VqDZ+JAg1nZpaEmWtTXUlBneoGx6CPM9b0TENK6aoSu5t73dItudwdgmi6tHlIZZId4dZ9skcAQ2UbcyAeVA==} + yaml@2.5.0: + resolution: {integrity: sha512-2wWLbGbYDiSqqIKoPjar3MPgB94ErzCtrNE1FdqGuaO0pi2JGjmE8aW8TDZwzU7vuxcGRdL/4gPQwQ7hD5AMSw==} engines: {node: '>= 14'} hasBin: true @@ -658,19 +656,19 @@ snapshots: '@jridgewell/gen-mapping@0.3.5': dependencies: '@jridgewell/set-array': 1.2.1 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@jridgewell/trace-mapping': 0.3.25 '@jridgewell/resolve-uri@3.1.2': {} '@jridgewell/set-array@1.2.1': {} - '@jridgewell/sourcemap-codec@1.4.15': {} + '@jridgewell/sourcemap-codec@1.5.0': {} '@jridgewell/trace-mapping@0.3.25': dependencies: '@jridgewell/resolve-uri': 3.1.2 - '@jridgewell/sourcemap-codec': 1.4.15 + '@jridgewell/sourcemap-codec': 1.5.0 '@nodelib/fs.scandir@2.1.5': dependencies: @@ -689,13 +687,13 @@ snapshots: '@sindresorhus/merge-streams@2.3.0': {} - '@tailwindcss/typography@0.5.13(tailwindcss@3.4.6)': + '@tailwindcss/typography@0.5.13(tailwindcss@3.4.7)': 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.6 + tailwindcss: 3.4.7 ansi-regex@5.0.1: {} @@ -716,14 +714,14 @@ snapshots: arg@5.0.2: {} - autoprefixer@10.4.19(postcss@8.4.39): + autoprefixer@10.4.19(postcss@8.4.40): dependencies: - browserslist: 4.23.0 - caniuse-lite: 1.0.30001616 + browserslist: 4.23.2 + caniuse-lite: 1.0.30001646 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.0 - postcss: 8.4.39 + picocolors: 1.0.1 + postcss: 8.4.40 postcss-value-parser: 4.2.0 balanced-match@1.0.2: {} @@ -738,16 +736,16 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.0: + browserslist@4.23.2: dependencies: - caniuse-lite: 1.0.30001616 - electron-to-chromium: 1.4.756 - node-releases: 2.0.14 - update-browserslist-db: 1.0.15(browserslist@4.23.0) + caniuse-lite: 1.0.30001646 + electron-to-chromium: 1.5.4 + node-releases: 2.0.18 + update-browserslist-db: 1.1.0(browserslist@4.23.2) camelcase-css@2.0.1: {} - caniuse-lite@1.0.30001616: {} + caniuse-lite@1.0.30001646: {} chokidar@3.6.0: dependencies: @@ -791,7 +789,7 @@ snapshots: eastasianwidth@0.2.0: {} - electron-to-chromium@1.4.756: {} + electron-to-chromium@1.5.4: {} emoji-regex@8.0.0: {} @@ -805,7 +803,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.5 + micromatch: 4.0.7 fastq@1.17.1: dependencies: @@ -815,7 +813,7 @@ snapshots: dependencies: to-regex-range: 5.0.1 - foreground-child@3.1.1: + foreground-child@3.2.1: dependencies: cross-spawn: 7.0.3 signal-exit: 4.1.0 @@ -845,15 +843,16 @@ snapshots: dependencies: is-glob: 4.0.3 - glob@10.3.12: + glob@10.4.5: dependencies: - foreground-child: 3.1.1 - jackspeak: 2.3.6 - minimatch: 9.0.4 - minipass: 7.1.0 - path-scurry: 1.10.2 + foreground-child: 3.2.1 + jackspeak: 3.4.3 + minimatch: 9.0.5 + minipass: 7.1.2 + package-json-from-dist: 1.0.0 + path-scurry: 1.11.1 - globby@14.0.1: + globby@14.0.2: dependencies: '@sindresorhus/merge-streams': 2.3.0 fast-glob: 3.3.2 @@ -874,7 +873,7 @@ snapshots: dependencies: binary-extensions: 2.3.0 - is-core-module@2.13.1: + is-core-module@2.15.0: dependencies: hasown: 2.0.2 @@ -890,13 +889,13 @@ snapshots: isexe@2.0.0: {} - jackspeak@2.3.6: + jackspeak@3.4.3: dependencies: '@isaacs/cliui': 8.0.2 optionalDependencies: '@pkgjs/parseargs': 0.11.0 - jiti@1.21.0: {} + jiti@1.21.6: {} jsonfile@6.1.0: dependencies: @@ -906,7 +905,7 @@ snapshots: lilconfig@2.1.0: {} - lilconfig@3.1.1: {} + lilconfig@3.1.2: {} lines-and-columns@1.2.4: {} @@ -916,20 +915,20 @@ snapshots: lodash.merge@4.6.2: {} - lru-cache@10.2.2: {} + lru-cache@10.4.3: {} merge2@1.4.1: {} - micromatch@4.0.5: + micromatch@4.0.7: dependencies: braces: 3.0.3 picomatch: 2.3.1 - minimatch@9.0.4: + minimatch@9.0.5: dependencies: brace-expansion: 2.0.1 - minipass@7.1.0: {} + minipass@7.1.2: {} mz@2.7.0: dependencies: @@ -939,7 +938,7 @@ snapshots: nanoid@3.3.7: {} - node-releases@2.0.14: {} + node-releases@2.0.18: {} normalize-path@3.0.0: {} @@ -949,19 +948,19 @@ snapshots: object-hash@3.0.0: {} + package-json-from-dist@1.0.0: {} + path-key@3.1.1: {} path-parse@1.0.7: {} - path-scurry@1.10.2: + path-scurry@1.11.1: dependencies: - lru-cache: 10.2.2 - minipass: 7.1.0 + lru-cache: 10.4.3 + minipass: 7.1.2 path-type@5.0.0: {} - picocolors@1.0.0: {} - picocolors@1.0.1: {} picomatch@2.3.1: {} @@ -970,17 +969,17 @@ snapshots: pirates@4.0.6: {} - postcss-cli@11.0.0(jiti@1.21.0)(postcss@8.4.39): + postcss-cli@11.0.0(jiti@1.21.6)(postcss@8.4.40): dependencies: chokidar: 3.6.0 dependency-graph: 0.11.0 fs-extra: 11.2.0 get-stdin: 9.0.0 - globby: 14.0.1 - picocolors: 1.0.0 - postcss: 8.4.39 - postcss-load-config: 5.1.0(jiti@1.21.0)(postcss@8.4.39) - postcss-reporter: 7.1.0(postcss@8.4.39) + 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) pretty-hrtime: 1.0.3 read-cache: 1.0.0 slash: 5.1.0 @@ -989,57 +988,57 @@ snapshots: - jiti - tsx - postcss-import@15.1.0(postcss@8.4.39): + postcss-import@15.1.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 + postcss: 8.4.40 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-import@16.1.0(postcss@8.4.39): + postcss-import@16.1.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 + postcss: 8.4.40 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-js@4.0.1(postcss@8.4.39): + postcss-js@4.0.1(postcss@8.4.40): dependencies: camelcase-css: 2.0.1 - postcss: 8.4.39 + postcss: 8.4.40 - postcss-load-config@4.0.2(postcss@8.4.39): + postcss-load-config@4.0.2(postcss@8.4.40): dependencies: - lilconfig: 3.1.1 - yaml: 2.4.2 + lilconfig: 3.1.2 + yaml: 2.5.0 optionalDependencies: - postcss: 8.4.39 + postcss: 8.4.40 - postcss-load-config@5.1.0(jiti@1.21.0)(postcss@8.4.39): + postcss-load-config@5.1.0(jiti@1.21.6)(postcss@8.4.40): dependencies: - lilconfig: 3.1.1 - yaml: 2.4.2 + lilconfig: 3.1.2 + yaml: 2.5.0 optionalDependencies: - jiti: 1.21.0 - postcss: 8.4.39 + jiti: 1.21.6 + postcss: 8.4.40 - postcss-load-config@6.0.1(jiti@1.21.0)(postcss@8.4.39)(yaml@2.4.2): + postcss-load-config@6.0.1(jiti@1.21.6)(postcss@8.4.40)(yaml@2.5.0): dependencies: - lilconfig: 3.1.1 + lilconfig: 3.1.2 optionalDependencies: - jiti: 1.21.0 - postcss: 8.4.39 - yaml: 2.4.2 + jiti: 1.21.6 + postcss: 8.4.40 + yaml: 2.5.0 - postcss-nested@6.0.1(postcss@8.4.39): + postcss-nested@6.2.0(postcss@8.4.40): dependencies: - postcss: 8.4.39 - postcss-selector-parser: 6.0.16 + postcss: 8.4.40 + postcss-selector-parser: 6.1.1 - postcss-reporter@7.1.0(postcss@8.4.39): + postcss-reporter@7.1.0(postcss@8.4.40): dependencies: - picocolors: 1.0.0 - postcss: 8.4.39 + picocolors: 1.0.1 + postcss: 8.4.40 thenby: 1.3.4 postcss-selector-parser@6.0.10: @@ -1047,14 +1046,14 @@ snapshots: cssesc: 3.0.0 util-deprecate: 1.0.2 - postcss-selector-parser@6.0.16: + postcss-selector-parser@6.1.1: dependencies: cssesc: 3.0.0 util-deprecate: 1.0.2 postcss-value-parser@4.2.0: {} - postcss@8.4.39: + postcss@8.4.40: dependencies: nanoid: 3.3.7 picocolors: 1.0.1 @@ -1076,7 +1075,7 @@ snapshots: resolve@1.22.8: dependencies: - is-core-module: 2.13.1 + is-core-module: 2.15.0 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -1122,7 +1121,7 @@ snapshots: dependencies: '@jridgewell/gen-mapping': 0.3.5 commander: 4.1.1 - glob: 10.3.12 + glob: 10.4.5 lines-and-columns: 1.2.4 mz: 2.7.0 pirates: 4.0.6 @@ -1130,7 +1129,7 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tailwindcss@3.4.6: + tailwindcss@3.4.7: dependencies: '@alloc/quick-lru': 5.2.0 arg: 5.0.2 @@ -1140,18 +1139,18 @@ snapshots: fast-glob: 3.3.2 glob-parent: 6.0.2 is-glob: 4.0.3 - jiti: 1.21.0 + jiti: 1.21.6 lilconfig: 2.1.0 - micromatch: 4.0.5 + micromatch: 4.0.7 normalize-path: 3.0.0 object-hash: 3.0.0 - picocolors: 1.0.0 - postcss: 8.4.39 - postcss-import: 15.1.0(postcss@8.4.39) - postcss-js: 4.0.1(postcss@8.4.39) - postcss-load-config: 4.0.2(postcss@8.4.39) - postcss-nested: 6.0.1(postcss@8.4.39) - postcss-selector-parser: 6.0.16 + 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 resolve: 1.22.8 sucrase: 3.35.0 transitivePeerDependencies: @@ -1177,11 +1176,11 @@ snapshots: universalify@2.0.1: {} - update-browserslist-db@1.0.15(browserslist@4.23.0): + update-browserslist-db@1.1.0(browserslist@4.23.2): dependencies: - browserslist: 4.23.0 + browserslist: 4.23.2 escalade: 3.1.2 - picocolors: 1.0.0 + picocolors: 1.0.1 util-deprecate@1.0.2: {} @@ -1203,7 +1202,7 @@ snapshots: y18n@5.0.8: {} - yaml@2.4.2: {} + yaml@2.5.0: {} yargs-parser@21.1.1: {} diff --git a/eslint.config.mjs b/eslint.config.mjs new file mode 100644 index 00000000..c2f4d36b --- /dev/null +++ b/eslint.config.mjs @@ -0,0 +1,68 @@ +import eslint from "@eslint/js"; +import tseslint from "typescript-eslint"; +import importPlugin from "eslint-plugin-import"; +import jestPlugin from "eslint-plugin-jest"; +import playwrightPlugin from "eslint-plugin-playwright"; +import testingLibraryPlugin from "eslint-plugin-testing-library"; + +export default [ + eslint.configs.recommended, + ...tseslint.configs.strictTypeChecked, + ...tseslint.configs.stylisticTypeChecked, + importPlugin.flatConfigs.recommended, + importPlugin.flatConfigs.typescript, + { + languageOptions: { + parserOptions: { + projectService: true, + tsconfigRootDir: import.meta.dirname, + }, + }, + rules: { + "@typescript-eslint/explicit-function-return-type": "off", + "@typescript-eslint/interface-name-prefix": "off", + "@typescript-eslint/no-explicit-any": "off", + "@typescript-eslint/no-use-before-define": "off", + "@typescript-eslint/no-unused-vars": [ + "error", + { + argsIgnorePattern: "^_", + varsIgnorePattern: "^_", + }, + ], + "@typescript-eslint/non-nullable-type-assertion-style": "off", + "@typescript-eslint/prefer-includes": "off", + "@typescript-eslint/triple-slash-reference": "off", + "@typescript-eslint/prefer-string-starts-ends-with": "off", + "@typescript-eslint/restrict-template-expressions": [ + "error", + { + allowNumber: true, + allowBoolean: true, + allowAny: false, + allowNullish: false, + }, + ], + "@typescript-eslint/unified-signatures": "off", + }, + }, + { + files: ["src/test/**/*.ts"], + ...jestPlugin.configs["flat/recommended"], + }, + { + files: ["src/test/**/*.ts"], + ...testingLibraryPlugin.configs["flat/dom"], + }, + { + files: ["src/test/**/*.ts"], + rules: { + "jest/no-identical-title": "off", + "testing-library/no-node-access": "off", + }, + }, + { + files: ["src/playwright/**/*.ts"], + ...playwrightPlugin.configs["flat/recommended"], + }, +]; diff --git a/package.json b/package.json index b949f28c..53cf3363 100644 --- a/package.json +++ b/package.json @@ -18,7 +18,7 @@ "ci": "pnpm lint && pnpm tsc && pnpm test", "jest": "jest --coverage --no-cache --verbose --config ./config/jest.config.js", "jest-watch": "jest --watch --config ./config/jest.config.js", - "lint": "eslint src/ --ext .ts,.tsx", + "lint": "eslint src", "production": "./config/production", "devserver": "SERVE=true rollup --config config/rollup.config.mjs --watch", "devserver-with-coverage": "COVERAGE=true SERVE=true rollup --config config/rollup.config.mjs", @@ -35,33 +35,29 @@ "jquery": "^3" }, "devDependencies": { - "@babel/cli": "^7.24.8", - "@babel/core": "^7.24.9", - "@babel/preset-env": "^7.24.8", - "@babel/preset-typescript": "^7.24.7", - "@playwright/test": "^1.45.2", + "@babel/cli": "^7.25.7", + "@babel/core": "^7.25.7", + "@babel/preset-env": "^7.25.7", + "@babel/preset-typescript": "^7.25.7", + "@playwright/test": "^1.47.2", "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^15.2.3", + "@rollup/plugin-node-resolve": "^15.3.0", "@rollup/plugin-terser": "^0.4.4", - "@testing-library/dom": "^10.3.2", + "@testing-library/dom": "^10.4.0", "@testing-library/user-event": "^14.5.2", "@types/debug": "^4.1.12", - "@types/jest": "^29.5.12", + "@types/jest": "^29.5.13", "@types/jest-axe": "^3.5.9", - "@types/jquery": "^3.5.30", - "@types/node": "^20.14.11", - "@typescript-eslint/eslint-plugin": "^7.16.1", - "@typescript-eslint/parser": "^7.16.1", - "autoprefixer": "^10.4.19", + "@types/jquery": "^3.5.31", + "@types/node": "^22.7.4", + "autoprefixer": "^10.4.20", "babel-jest": "^29.7.0", "babel-plugin-istanbul": "^7.0.0", - "eslint": "^8.57.0", - "eslint-import-resolver-typescript": "^3.6.1", - "eslint-plugin-deprecation": "^3.0.0", - "eslint-plugin-import": "^2.29.1", - "eslint-plugin-jest": "^28.6.0", + "eslint": "^8.57.1", + "eslint-plugin-import": "^2.31.0", + "eslint-plugin-jest": "^28.8.3", "eslint-plugin-playwright": "^1.6.2", - "eslint-plugin-testing-library": "^6.2.2", + "eslint-plugin-testing-library": "^6.3.0", "givens": "^1.3.9", "graphql": "^16.9.0", "jest": "^29.7.0", @@ -70,17 +66,18 @@ "jest-extended": "^4.0.2", "jsonfile": "^6.1.0", "lodash": "^4.17.21", - "msw": "^2.3.2", - "postcss": "^8.4.39", + "msw": "^2.4.9", + "postcss": "^8.4.47", "postcss-cli": "^11.0.0", "postcss-import": "^16.1.0", "postcss-load-config": "^6.0.1", - "postcss-nested": "^6.0.1", + "postcss-nested": "^6.2.0", "prettier": "^3.3.3", - "rollup": "^4.18.1", + "rollup": "^4.24.0", "rollup-plugin-serve": "^3.0.0", - "tslib": "^2.6.3", - "typescript": "^5.5.3", + "tslib": "^2.7.0", + "typescript": "^5.6.2", + "typescript-eslint": "^8.8.0", "undici": "^5.28.4" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f68ddeef..0fb38028 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,86 +13,74 @@ importers: version: 3.7.1 devDependencies: '@babel/cli': - specifier: ^7.24.8 - version: 7.24.8(@babel/core@7.24.9) + specifier: ^7.25.7 + version: 7.25.7(@babel/core@7.25.7) '@babel/core': - specifier: ^7.24.9 - version: 7.24.9 + specifier: ^7.25.7 + version: 7.25.7 '@babel/preset-env': - specifier: ^7.24.8 - version: 7.24.8(@babel/core@7.24.9) + specifier: ^7.25.7 + version: 7.25.7(@babel/core@7.25.7) '@babel/preset-typescript': - specifier: ^7.24.7 - version: 7.24.7(@babel/core@7.24.9) + specifier: ^7.25.7 + version: 7.25.7(@babel/core@7.25.7) '@playwright/test': - specifier: ^1.45.2 - version: 1.45.2 + specifier: ^1.47.2 + version: 1.47.2 '@rollup/plugin-babel': specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.24.9)(@types/babel__core@7.20.5)(rollup@4.18.1) + version: 6.0.4(@babel/core@7.25.7)(@types/babel__core@7.20.5)(rollup@4.24.0) '@rollup/plugin-node-resolve': - specifier: ^15.2.3 - version: 15.2.3(rollup@4.18.1) + specifier: ^15.3.0 + version: 15.3.0(rollup@4.24.0) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@4.18.1) + version: 0.4.4(rollup@4.24.0) '@testing-library/dom': - specifier: ^10.3.2 - version: 10.3.2 + specifier: ^10.4.0 + version: 10.4.0 '@testing-library/user-event': specifier: ^14.5.2 - version: 14.5.2(@testing-library/dom@10.3.2) + version: 14.5.2(@testing-library/dom@10.4.0) '@types/debug': specifier: ^4.1.12 version: 4.1.12 '@types/jest': - specifier: ^29.5.12 - version: 29.5.12 + specifier: ^29.5.13 + version: 29.5.13 '@types/jest-axe': specifier: ^3.5.9 version: 3.5.9 '@types/jquery': - specifier: ^3.5.30 - version: 3.5.30 + specifier: ^3.5.31 + version: 3.5.31 '@types/node': - specifier: ^20.14.11 - version: 20.14.11 - '@typescript-eslint/eslint-plugin': - specifier: ^7.16.1 - version: 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/parser': - specifier: ^7.16.1 - version: 7.16.1(eslint@8.57.0)(typescript@5.5.3) + specifier: ^22.7.4 + version: 22.7.4 autoprefixer: - specifier: ^10.4.19 - version: 10.4.19(postcss@8.4.39) + specifier: ^10.4.20 + version: 10.4.20(postcss@8.4.47) babel-jest: specifier: ^29.7.0 - version: 29.7.0(@babel/core@7.24.9) + version: 29.7.0(@babel/core@7.25.7) babel-plugin-istanbul: specifier: ^7.0.0 version: 7.0.0 eslint: - specifier: ^8.57.0 - version: 8.57.0 - eslint-import-resolver-typescript: - specifier: ^3.6.1 - version: 3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0) - eslint-plugin-deprecation: - specifier: ^3.0.0 - version: 3.0.0(eslint@8.57.0)(typescript@5.5.3) + specifier: ^8.57.1 + version: 8.57.1 eslint-plugin-import: - specifier: ^2.29.1 - version: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) + specifier: ^2.31.0 + version: 2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1) eslint-plugin-jest: - specifier: ^28.6.0 - version: 28.6.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.11))(typescript@5.5.3) + specifier: ^28.8.3 + version: 28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.7.4))(typescript@5.6.2) eslint-plugin-playwright: specifier: ^1.6.2 - version: 1.6.2(eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.11))(typescript@5.5.3))(eslint@8.57.0) + version: 1.6.2(eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.7.4))(typescript@5.6.2))(eslint@8.57.1) eslint-plugin-testing-library: - specifier: ^6.2.2 - version: 6.2.2(eslint@8.57.0)(typescript@5.5.3) + specifier: ^6.3.0 + version: 6.3.0(eslint@8.57.1)(typescript@5.6.2) givens: specifier: ^1.3.9 version: 1.3.9 @@ -101,7 +89,7 @@ importers: version: 16.9.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@20.14.11) + version: 29.7.0(@types/node@22.7.4) jest-axe: specifier: ^9.0.0 version: 9.0.0 @@ -110,7 +98,7 @@ importers: version: 29.7.0 jest-extended: specifier: ^4.0.2 - version: 4.0.2(jest@29.7.0(@types/node@20.14.11)) + version: 4.0.2(jest@29.7.0(@types/node@22.7.4)) jsonfile: specifier: ^6.1.0 version: 6.1.0 @@ -118,38 +106,41 @@ importers: specifier: ^4.17.21 version: 4.17.21 msw: - specifier: ^2.3.2 - version: 2.3.2(typescript@5.5.3) + specifier: ^2.4.9 + version: 2.4.9(typescript@5.6.2) postcss: - specifier: ^8.4.39 - version: 8.4.39 + specifier: ^8.4.47 + version: 8.4.47 postcss-cli: specifier: ^11.0.0 - version: 11.0.0(postcss@8.4.39) + version: 11.0.0(postcss@8.4.47) postcss-import: specifier: ^16.1.0 - version: 16.1.0(postcss@8.4.39) + version: 16.1.0(postcss@8.4.47) postcss-load-config: specifier: ^6.0.1 - version: 6.0.1(postcss@8.4.39)(yaml@2.4.5) + version: 6.0.1(postcss@8.4.47)(yaml@2.5.1) postcss-nested: - specifier: ^6.0.1 - version: 6.0.1(postcss@8.4.39) + specifier: ^6.2.0 + version: 6.2.0(postcss@8.4.47) prettier: specifier: ^3.3.3 version: 3.3.3 rollup: - specifier: ^4.18.1 - version: 4.18.1 + specifier: ^4.24.0 + version: 4.24.0 rollup-plugin-serve: specifier: ^3.0.0 version: 3.0.0 tslib: - specifier: ^2.6.3 - version: 2.6.3 + specifier: ^2.7.0 + version: 2.7.0 typescript: - specifier: ^5.5.3 - version: 5.5.3 + specifier: ^5.6.2 + version: 5.6.2 + typescript-eslint: + specifier: ^8.8.0 + version: 8.8.0(eslint@8.57.1)(typescript@5.6.2) undici: specifier: ^5.28.4 version: 5.28.4 @@ -160,49 +151,49 @@ packages: resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/cli@7.24.8': - resolution: {integrity: sha512-isdp+G6DpRyKc+3Gqxy2rjzgF7Zj9K0mzLNnxz+E/fgeag8qT3vVulX4gY9dGO1q0y+0lUv6V3a+uhUzMzrwXg==} + '@babel/cli@7.25.7': + resolution: {integrity: sha512-vQw4QjrqjLSuL0Tt3gfVXbxEHOfsCcHN8tKyTclpSMYLq3Bp0BTzWYZfMKBs3PQ+to8q3BnumBIAsMdOqDJ6nw==} engines: {node: '>=6.9.0'} hasBin: true peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/code-frame@7.24.7': - resolution: {integrity: sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==} + '@babel/code-frame@7.25.7': + resolution: {integrity: sha512-0xZJFNE5XMpENsgfHYTw8FbX4kv53mFLn2i3XPoq69LyhYSCBJtitaHx9QnsVTrsogI4Z3+HtEfZ2/GFPOtf5g==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.24.9': - resolution: {integrity: sha512-e701mcfApCJqMMueQI0Fb68Amflj83+dvAvHawoBpAz+GDjCIyGHzNwnefjsWJ3xiYAqqiQFoWbspGYBdb2/ng==} + '@babel/compat-data@7.25.7': + resolution: {integrity: sha512-9ickoLz+hcXCeh7jrcin+/SLWm+GkxE2kTvoYyp38p4WkdFXfQJxDFGWp/YHjiKLPx06z2A7W8XKuqbReXDzsw==} engines: {node: '>=6.9.0'} - '@babel/core@7.24.9': - resolution: {integrity: sha512-5e3FI4Q3M3Pbr21+5xJwCv6ZT6KmGkI0vw3Tozy5ODAQFTIWe37iT8Cr7Ice2Ntb+M3iSKCEWMB1MBgKrW3whg==} + '@babel/core@7.25.7': + resolution: {integrity: sha512-yJ474Zv3cwiSOO9nXJuqzvwEeM+chDuQ8GJirw+pZ91sCGCyOZ3dJkVE09fTV0VEVzXyLWhh3G/AolYTPX7Mow==} engines: {node: '>=6.9.0'} - '@babel/generator@7.24.10': - resolution: {integrity: sha512-o9HBZL1G2129luEUlG1hB4N/nlYNWHnpwlND9eOMclRqqu1YDy2sSYVCFUZwl8I1Gxh+QSRrP2vD7EpUmFVXxg==} + '@babel/generator@7.25.7': + resolution: {integrity: sha512-5Dqpl5fyV9pIAD62yK9P7fcA768uVPUyrQmqpqstHWgMma4feF1x/oFysBCVZLY5wJ2GkMUCdsNDnGZrPoR6rA==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.24.7': - resolution: {integrity: sha512-BaDeOonYvhdKw+JoMVkAixAAJzG2jVPIwWoKBPdYuY9b452e2rPuI9QPYh3KpofZ3pW2akOmwZLOiOsHMiqRAg==} + '@babel/helper-annotate-as-pure@7.25.7': + resolution: {integrity: sha512-4xwU8StnqnlIhhioZf1tqnVWeQ9pvH/ujS8hRfw/WOza+/a+1qv69BWNy+oY231maTCWgKWhfBU7kDpsds6zAA==} engines: {node: '>=6.9.0'} - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': - resolution: {integrity: sha512-xZeCVVdwb4MsDBkkyZ64tReWYrLRHlMN72vP7Bdm3OUOuyFZExhsHUUnuWnm2/XOlAJzR0LfPpB56WXZn0X/lA==} + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': + resolution: {integrity: sha512-12xfNeKNH7jubQNm7PAkzlLwEmCs1tfuX3UjIw6vP6QXi+leKh6+LyC/+Ed4EIQermwd58wsyh070yjDHFlNGg==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.24.8': - resolution: {integrity: sha512-oU+UoqCHdp+nWVDkpldqIQL/i/bvAv53tRqLG/s+cOXxe66zOYLU7ar/Xs3LdmBihrUMEUhwu6dMZwbNOYDwvw==} + '@babel/helper-compilation-targets@7.25.7': + resolution: {integrity: sha512-DniTEax0sv6isaw6qSQSfV4gVRNtw2rte8HHM45t9ZR0xILaufBRNkpMifCRiAPyvL4ACD6v0gfCwCmtOQaV4A==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.24.8': - resolution: {integrity: sha512-4f6Oqnmyp2PP3olgUMmOwC3akxSm5aBYraQ6YDdKy7NcAMkDECHWG0DEnV6M2UAkERgIBhYt8S27rURPg7SxWA==} + '@babel/helper-create-class-features-plugin@7.25.7': + resolution: {integrity: sha512-bD4WQhbkx80mAyj/WCm4ZHcF4rDxkoLFO6ph8/5/mQ3z4vAzltQXAmbc7GvVJx5H+lk5Mi5EmbTeox5nMGCsbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.24.7': - resolution: {integrity: sha512-03TCmXy2FtXJEZfbXDTSqq1fRJArk7lX9DOFC/47VthYcxyIOx+eXQmdo6DOQvrbpIix+KfXwvuXdFDZHxt+rA==} + '@babel/helper-create-regexp-features-plugin@7.25.7': + resolution: {integrity: sha512-byHhumTj/X47wJ6C6eLpK7wW/WBEcnUeb7D0FNc/jFQnQVw7DOso3Zz5u9x/zLrFVkHa89ZGDbkAa1D54NdrCQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -212,113 +203,103 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-environment-visitor@7.24.7': - resolution: {integrity: sha512-DoiN84+4Gnd0ncbBOM9AZENV4a5ZiL39HYMyZJGZ/AZEykHYdJw0wW3kdcsh9/Kn+BRXHLkkklZ51ecPKmI1CQ==} - engines: {node: '>=6.9.0'} - - '@babel/helper-function-name@7.24.7': - resolution: {integrity: sha512-FyoJTsj/PEUWu1/TYRiXTIHc8lbw+TDYkZuoE43opPS5TrI7MyONBE1oNvfguEXAD9yhQRrVBnXdXzSLQl9XnA==} + '@babel/helper-member-expression-to-functions@7.25.7': + resolution: {integrity: sha512-O31Ssjd5K6lPbTX9AAYpSKrZmLeagt9uwschJd+Ixo6QiRyfpvgtVQp8qrDR9UNFjZ8+DO34ZkdrN+BnPXemeA==} engines: {node: '>=6.9.0'} - '@babel/helper-hoist-variables@7.24.7': - resolution: {integrity: sha512-MJJwhkoGy5c4ehfoRyrJ/owKeMl19U54h27YYftT0o2teQ3FJ3nQUf/I3LlJsX4l3qlw7WRXUmiyajvHXoTubQ==} + '@babel/helper-module-imports@7.25.7': + resolution: {integrity: sha512-o0xCgpNmRohmnoWKQ0Ij8IdddjyBFE4T2kagL/x6M3+4zUgc+4qTOUBoNe4XxDskt1HPKO007ZPiMgLDq2s7Kw==} engines: {node: '>=6.9.0'} - '@babel/helper-member-expression-to-functions@7.24.8': - resolution: {integrity: sha512-LABppdt+Lp/RlBxqrh4qgf1oEH/WxdzQNDJIu5gC/W1GyvPVrOBiItmmM8wan2fm4oYqFuFfkXmlGpLQhPY8CA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-imports@7.24.7': - resolution: {integrity: sha512-8AyH3C+74cgCVVXow/myrynrAGv+nTVg5vKu2nZph9x7RcRwzmh0VFallJuFTZ9mx6u4eSdXZfcOzSqTUm0HCA==} - engines: {node: '>=6.9.0'} - - '@babel/helper-module-transforms@7.24.9': - resolution: {integrity: sha512-oYbh+rtFKj/HwBQkFlUzvcybzklmVdVV3UU+mN7n2t/q3yGHbuVdNxyFvSBO1tfvjyArpHNcWMAzsSPdyI46hw==} + '@babel/helper-module-transforms@7.25.7': + resolution: {integrity: sha512-k/6f8dKG3yDz/qCwSM+RKovjMix563SLxQFo0UhRNo239SP6n9u5/eLtKD6EAjwta2JHJ49CsD8pms2HdNiMMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.24.7': - resolution: {integrity: sha512-jKiTsW2xmWwxT1ixIdfXUZp+P5yURx2suzLZr5Hi64rURpDYdMW0pv+Uf17EYk2Rd428Lx4tLsnjGJzYKDM/6A==} + '@babel/helper-optimise-call-expression@7.25.7': + resolution: {integrity: sha512-VAwcwuYhv/AT+Vfr28c9y6SHzTan1ryqrydSTFGjU0uDJHw3uZ+PduI8plCLkRsDnqK2DMEDmwrOQRsK/Ykjng==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.24.8': - resolution: {integrity: sha512-FFWx5142D8h2Mgr/iPVGH5G7w6jDn4jUSpZTyDnQO0Yn7Ks2Kuz6Pci8H6MPCoUJegd/UZQ3tAvfLCxQSnWWwg==} + '@babel/helper-plugin-utils@7.25.7': + resolution: {integrity: sha512-eaPZai0PiqCi09pPs3pAFfl/zYgGaE6IdXtYvmf0qlcDTd3WCtO7JWCcRd64e0EQrcYgiHibEZnOGsSY4QSgaw==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.24.7': - resolution: {integrity: sha512-9pKLcTlZ92hNZMQfGCHImUpDOlAgkkpqalWEeftW5FBya75k8Li2ilerxkM/uBEj01iBZXcCIB/bwvDYgWyibA==} + '@babel/helper-remap-async-to-generator@7.25.7': + resolution: {integrity: sha512-kRGE89hLnPfcz6fTrlNU+uhgcwv0mBE4Gv3P9Ke9kLVJYpi4AMVVEElXvB5CabrPZW4nCM8P8UyyjrzCM0O2sw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.24.7': - resolution: {integrity: sha512-qTAxxBM81VEyoAY0TtLrx1oAEJc09ZK67Q9ljQToqCnA+55eNwCORaxlKyu+rNfX86o8OXRUSNUnrtsAZXM9sg==} + '@babel/helper-replace-supers@7.25.7': + resolution: {integrity: sha512-iy8JhqlUW9PtZkd4pHM96v6BdJ66Ba9yWSE4z0W4TvSZwLBPkyDsiIU3ENe4SmrzRBs76F7rQXTy1lYC49n6Lw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-simple-access@7.24.7': - resolution: {integrity: sha512-zBAIvbCMh5Ts+b86r/CjU+4XGYIs+R1j951gxI3KmmxBMhCg4oQMsv6ZXQ64XOm/cvzfU1FmoCyt6+owc5QMYg==} + '@babel/helper-simple-access@7.25.7': + resolution: {integrity: sha512-FPGAkJmyoChQeM+ruBGIDyrT2tKfZJO8NcxdC+CWNJi7N8/rZpSxK7yvBJ5O/nF1gfu5KzN7VKG3YVSLFfRSxQ==} engines: {node: '>=6.9.0'} - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': - resolution: {integrity: sha512-IO+DLT3LQUElMbpzlatRASEyQtfhSE0+m465v++3jyyXeBTBUjtVZg28/gHeV5mrTJqvEKhKroBGAvhW+qPHiQ==} + '@babel/helper-skip-transparent-expression-wrappers@7.25.7': + resolution: {integrity: sha512-pPbNbchZBkPMD50K0p3JGcFMNLVUCuU/ABybm/PGNj4JiHrpmNyqqCphBk4i19xXtNV0JhldQJJtbSW5aUvbyA==} engines: {node: '>=6.9.0'} - '@babel/helper-split-export-declaration@7.24.7': - resolution: {integrity: sha512-oy5V7pD+UvfkEATUKvIjvIAH/xCzfsFVw7ygW2SI6NClZzquT+mwdTfgfdbUiceh6iQO0CHtCPsyze/MZ2YbAA==} + '@babel/helper-string-parser@7.25.7': + resolution: {integrity: sha512-CbkjYdsJNHFk8uqpEkpCvRs3YRp9tY6FmFY7wLMSYuGYkrdUi7r2lc4/wqsvlHoMznX3WJ9IP8giGPq68T/Y6g==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.24.8': - resolution: {integrity: sha512-pO9KhhRcuUyGnJWwyEgnRJTSIZHiT+vMD0kPeD+so0l7mxkMT19g3pjY9GTnHySck/hDzq+dtW/4VgnMkippsQ==} + '@babel/helper-validator-identifier@7.25.7': + resolution: {integrity: sha512-AM6TzwYqGChO45oiuPqwL2t20/HdMC1rTPAesnBCgPCSF1x3oN9MVUwQV2iyz4xqWrctwK5RNC8LV22kaQCNYg==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.24.7': - resolution: {integrity: sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==} + '@babel/helper-validator-option@7.25.7': + resolution: {integrity: sha512-ytbPLsm+GjArDYXJ8Ydr1c/KJuutjF2besPNbIZnZ6MKUxi/uTA22t2ymmA4WFjZFpjiAMO0xuuJPqK2nvDVfQ==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.24.8': - resolution: {integrity: sha512-xb8t9tD1MHLungh/AIoWYN+gVHaB9kwlu8gffXGSt3FFEIT7RjS+xWbc2vUD1UTZdIpKj/ab3rdqJ7ufngyi2Q==} + '@babel/helper-wrap-function@7.25.7': + resolution: {integrity: sha512-MA0roW3JF2bD1ptAaJnvcabsVlNQShUaThyJbCDD4bCp8NEgiFvpoqRI2YS22hHlc2thjO/fTg2ShLMC3jygAg==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.24.7': - resolution: {integrity: sha512-N9JIYk3TD+1vq/wn77YnJOqMtfWhNewNE+DJV4puD2X7Ew9J4JvrzrFDfTfyv5EgEXVy9/Wt8QiOErzEmv5Ifw==} + '@babel/helpers@7.25.7': + resolution: {integrity: sha512-Sv6pASx7Esm38KQpF/U/OXLwPPrdGHNKoeblRxgZRLXnAtnkEe4ptJPDtAZM7fBLadbc1Q07kQpSiGQ0Jg6tRA==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.24.8': - resolution: {integrity: sha512-gV2265Nkcz7weJJfvDoAEVzC1e2OTDpkGbEsebse8koXUJUXPsCMi7sRo/+SPMuMZ9MtUPnGwITTnQnU5YjyaQ==} + '@babel/highlight@7.25.7': + resolution: {integrity: sha512-iYyACpW3iW8Fw+ZybQK+drQre+ns/tKpXbNESfrhNnPLIklLbXr7MYJ6gPEd0iETGLOK+SxMjVvKb/ffmk+FEw==} engines: {node: '>=6.9.0'} - '@babel/highlight@7.24.7': - resolution: {integrity: sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==} - engines: {node: '>=6.9.0'} - - '@babel/parser@7.24.8': - resolution: {integrity: sha512-WzfbgXOkGzZiXXCqk43kKwZjzwx4oulxZi3nq2TYL9mOjQv6kYwul9mz6ID36njuL7Xkp6nJEfok848Zj10j/w==} + '@babel/parser@7.25.7': + resolution: {integrity: sha512-aZn7ETtQsjjGG5HruveUK06cU3Hljuhd9Iojm4M8WWv3wLE6OkE5PWbDUkItmMgegmccaITudyuW5RPYrYlgWw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7': - resolution: {integrity: sha512-TiT1ss81W80eQsN+722OaeQMY/G4yTb4G9JrqeiDADs3N8lbPMGldWi9x8tyqCW5NLx1Jh2AvkE6r6QvEltMMQ==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7': + resolution: {integrity: sha512-UV9Lg53zyebzD1DwQoT9mzkEKa922LNUp5YkTJ6Uta0RbyXaQNUgcvSt7qIu1PpPzVb6rd10OVNTzkyBGeVmxQ==} + 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==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7': - resolution: {integrity: sha512-unaQgZ/iRu/By6tsjMZzpeBZjChYfLYry6HrEXPoz3KmfF0sVBQ1l8zKMQ4xRGLWVsjuvB8nQfjNP/DcfEOCsg==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7': + resolution: {integrity: sha512-wxyWg2RYaSUYgmd9MR0FyRGyeOMQE/Uzr1wzd/g5cf5bwi9A4v6HFdDm7y1MgDtod/fLOSTZY6jDgV0xU9d5bA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7': - resolution: {integrity: sha512-+izXIbke1T33mY4MSNnrqhPXDz01WYhEf3yF5NbnUtkiNnm+XBZJl3kNfoK6NKmYlz/D07+l2GWVK/QfDkNCuQ==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7': + resolution: {integrity: sha512-Xwg6tZpLxc4iQjorYsyGMyfJE7nP5MV8t/Ka58BgiA7Jw0fRqQNcANlLfdJ/yvBt9z9LD2We+BEkT7vLqZRWng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7': - resolution: {integrity: sha512-utA4HuR6F4Vvcr+o4DnjL8fCOlgRFGbeeBEGNg3ZTrLFw6VWG5XmUrvcQ0FjIYMU2ST4XcR2Wsp7t9qOAPnxMg==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7': + resolution: {integrity: sha512-UVATLMidXrnH+GMUIuxq55nejlj02HP7F5ETyBONzP6G87fPBogG4CH6kxrSrdIuAjdwNO9VzyaYsrZPscWUrw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -360,14 +341,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.24.7': - resolution: {integrity: sha512-Ec3NRUMoi8gskrkBe3fNmEQfxDvY8bgfQpz6jlk/41kX9eUjvpyqWU7PBP/pLAvMaSQjbMNKJmvX57jP+M6bPg==} + '@babel/plugin-syntax-import-assertions@7.25.7': + resolution: {integrity: sha512-ZvZQRmME0zfJnDQnVBKYzHxXT7lYBB3Revz1GuS7oLXWMgqUPX4G+DDbT30ICClht9WKV34QVrZhSw6WdklwZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.24.7': - resolution: {integrity: sha512-hbX+lKKeUMGihnK8nvKqmXBInriT3GVjzXKFriV3YC6APGxMbP8RZNFwy91+hocLXq90Mta+HshoB31802bb8A==} + '@babel/plugin-syntax-import-attributes@7.25.7': + resolution: {integrity: sha512-AqVo+dguCgmpi/3mYBdu9lkngOBlQ2w2vnNpa6gfiCxQZLzV4ZbhsXitJ2Yblkoe1VQwtHSaNmIaGll/26YWRw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -382,8 +363,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.24.7': - resolution: {integrity: sha512-6ddciUPe/mpMnOKv/U+RSd2vvVy+Yw/JfBB0ZHYjEZt9NLHmCUylNYlsbqCCS1Bffjlb0fCwC9Vqz+sBz6PsiQ==} + '@babel/plugin-syntax-jsx@7.25.7': + resolution: {integrity: sha512-ruZOnKO+ajVL/MVx+PwNBPOkrnXTXoWMtte1MBpegfCArhqOe3Bj52avVj1huLLxNKYKXYaSxZ2F+woK1ekXfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -430,8 +411,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.24.7': - resolution: {integrity: sha512-c/+fVeJBB0FeKsFvwytYiUD+LBvhHjGSI0g446PRGdSVGZLRNArBUno2PETbAly3tpiNAQR5XaZ+JslxkotsbA==} + '@babel/plugin-syntax-typescript@7.25.7': + resolution: {integrity: sha512-rR+5FDjpCHqqZN2bzZm18bVYGaejGq5ZkpVCJLXor/+zlSrSoc4KWcHI0URVWjl/68Dyr1uwZUz/1njycEAv9g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -442,302 +423,308 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.24.7': - resolution: {integrity: sha512-Dt9LQs6iEY++gXUwY03DNFat5C2NbO48jj+j/bSAz6b3HgPs39qcPiYt77fDObIcFwj3/C2ICX9YMwGflUoSHQ==} + '@babel/plugin-transform-arrow-functions@7.25.7': + resolution: {integrity: sha512-EJN2mKxDwfOUCPxMO6MUI58RN3ganiRAG/MS/S3HfB6QFNjroAMelQo/gybyYq97WerCBAZoyrAoW8Tzdq2jWg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.24.7': - resolution: {integrity: sha512-o+iF77e3u7ZS4AoAuJvapz9Fm001PuD2V3Lp6OSE4FYQke+cSewYtnek+THqGRWyQloRCyvWL1OkyfNEl9vr/g==} + '@babel/plugin-transform-async-generator-functions@7.25.7': + resolution: {integrity: sha512-4B6OhTrwYKHYYgcwErvZjbmH9X5TxQBsaBHdzEIB4l71gR5jh/tuHGlb9in47udL2+wVUcOz5XXhhfhVJwEpEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.24.7': - resolution: {integrity: sha512-SQY01PcJfmQ+4Ash7NE+rpbLFbmqA2GPIgqzxfFTL4t1FKRq4zTms/7htKpoCUI9OcFYgzqfmCdH53s6/jn5fA==} + '@babel/plugin-transform-async-to-generator@7.25.7': + resolution: {integrity: sha512-ZUCjAavsh5CESCmi/xCpX1qcCaAglzs/7tmuvoFnJgA1dM7gQplsguljoTg+Ru8WENpX89cQyAtWoaE0I3X3Pg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.24.7': - resolution: {integrity: sha512-yO7RAz6EsVQDaBH18IDJcMB1HnrUn2FJ/Jslc/WtPPWcjhpUJXU/rjbwmluzp7v/ZzWcEhTMXELnnsz8djWDwQ==} + '@babel/plugin-transform-block-scoped-functions@7.25.7': + resolution: {integrity: sha512-xHttvIM9fvqW+0a3tZlYcZYSBpSWzGBFIt/sYG3tcdSzBB8ZeVgz2gBP7Df+sM0N1850jrviYSSeUuc+135dmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.24.7': - resolution: {integrity: sha512-Nd5CvgMbWc+oWzBsuaMcbwjJWAcp5qzrbg69SZdHSP7AMY0AbWFqFO0WTFCA1jxhMCwodRwvRec8k0QUbZk7RQ==} + '@babel/plugin-transform-block-scoping@7.25.7': + resolution: {integrity: sha512-ZEPJSkVZaeTFG/m2PARwLZQ+OG0vFIhPlKHK/JdIMy8DbRJ/htz6LRrTFtdzxi9EHmcwbNPAKDnadpNSIW+Aow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.24.7': - resolution: {integrity: sha512-vKbfawVYayKcSeSR5YYzzyXvsDFWU2mD8U5TFeXtbCPLFUqe7GyCgvO6XDHzje862ODrOwy6WCPmKeWHbCFJ4w==} + '@babel/plugin-transform-class-properties@7.25.7': + resolution: {integrity: sha512-mhyfEW4gufjIqYFo9krXHJ3ElbFLIze5IDp+wQTxoPd+mwFb1NxatNAwmv8Q8Iuxv7Zc+q8EkiMQwc9IhyGf4g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.24.7': - resolution: {integrity: sha512-HMXK3WbBPpZQufbMG4B46A90PkuuhN9vBCb5T8+VAHqvAqvcLi+2cKoukcpmUYkszLhScU3l1iudhrks3DggRQ==} + '@babel/plugin-transform-class-static-block@7.25.7': + resolution: {integrity: sha512-rvUUtoVlkDWtDWxGAiiQj0aNktTPn3eFynBcMC2IhsXweehwgdI9ODe+XjWw515kEmv22sSOTp/rxIRuTiB7zg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.24.8': - resolution: {integrity: sha512-VXy91c47uujj758ud9wx+OMgheXm4qJfyhj1P18YvlrQkNOSrwsteHk+EFS3OMGfhMhpZa0A+81eE7G4QC+3CA==} + '@babel/plugin-transform-classes@7.25.7': + resolution: {integrity: sha512-9j9rnl+YCQY0IGoeipXvnk3niWicIB6kCsWRGLwX241qSXpbA4MKxtp/EdvFxsc4zI5vqfLxzOd0twIJ7I99zg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.24.7': - resolution: {integrity: sha512-25cS7v+707Gu6Ds2oY6tCkUwsJ9YIDbggd9+cu9jzzDgiNq7hR/8dkzxWfKWnTic26vsI3EsCXNd4iEB6e8esQ==} + '@babel/plugin-transform-computed-properties@7.25.7': + resolution: {integrity: sha512-QIv+imtM+EtNxg/XBKL3hiWjgdLjMOmZ+XzQwSgmBfKbfxUjBzGgVPklUuE55eq5/uVoh8gg3dqlrwR/jw3ZeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.24.8': - resolution: {integrity: sha512-36e87mfY8TnRxc7yc6M9g9gOB7rKgSahqkIKwLpz4Ppk2+zC2Cy1is0uwtuSG6AE4zlTOUa+7JGz9jCJGLqQFQ==} + '@babel/plugin-transform-destructuring@7.25.7': + resolution: {integrity: sha512-xKcfLTlJYUczdaM1+epcdh1UGewJqr9zATgrNHcLBcV2QmfvPPEixo/sK/syql9cEmbr7ulu5HMFG5vbbt/sEA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.24.7': - resolution: {integrity: sha512-ZOA3W+1RRTSWvyqcMJDLqbchh7U4NRGqwRfFSVbOLS/ePIP4vHB5e8T8eXcuqyN1QkgKyj5wuW0lcS85v4CrSw==} + '@babel/plugin-transform-dotall-regex@7.25.7': + resolution: {integrity: sha512-kXzXMMRzAtJdDEgQBLF4oaiT6ZCU3oWHgpARnTKDAqPkDJ+bs3NrZb310YYevR5QlRo3Kn7dzzIdHbZm1VzJdQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.24.7': - resolution: {integrity: sha512-JdYfXyCRihAe46jUIliuL2/s0x0wObgwwiGxw/UbgJBr20gQBThrokO4nYKgWkD7uBaqM7+9x5TU7NkExZJyzw==} + '@babel/plugin-transform-duplicate-keys@7.25.7': + resolution: {integrity: sha512-by+v2CjoL3aMnWDOyCIg+yxU9KXSRa9tN6MbqggH5xvymmr9p4AMjYkNlQy4brMceBnUyHZ9G8RnpvT8wP7Cfg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dynamic-import@7.24.7': - resolution: {integrity: sha512-sc3X26PhZQDb3JhORmakcbvkeInvxz+A8oda99lj7J60QRuPZvNAk9wQlTBS1ZynelDrDmTU4pw1tyc5d5ZMUg==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7': + resolution: {integrity: sha512-HvS6JF66xSS5rNKXLqkk7L9c/jZ/cdIVIcoPVrnl8IsVpLggTjXs8OWekbLHs/VtYDDh5WXnQyeE3PPUGm22MA==} + 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==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.24.7': - resolution: {integrity: sha512-Rqe/vSc9OYgDajNIK35u7ot+KeCoetqQYFXM4Epf7M7ez3lWlOjrDjrwMei6caCVhfdw+mIKD4cgdGNy5JQotQ==} + '@babel/plugin-transform-exponentiation-operator@7.25.7': + resolution: {integrity: sha512-yjqtpstPfZ0h/y40fAXRv2snciYr0OAoMXY/0ClC7tm4C/nG5NJKmIItlaYlLbIVAWNfrYuy9dq1bE0SbX0PEg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.24.7': - resolution: {integrity: sha512-v0K9uNYsPL3oXZ/7F9NNIbAj2jv1whUEtyA6aujhekLs56R++JDQuzRcP2/z4WX5Vg/c5lE9uWZA0/iUoFhLTA==} + '@babel/plugin-transform-export-namespace-from@7.25.7': + resolution: {integrity: sha512-h3MDAP5l34NQkkNulsTNyjdaR+OiB0Im67VU//sFupouP8Q6m9Spy7l66DcaAQxtmCqGdanPByLsnwFttxKISQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.24.7': - resolution: {integrity: sha512-wo9ogrDG1ITTTBsy46oGiN1dS9A7MROBTcYsfS8DtsImMkHk9JXJ3EWQM6X2SUw4x80uGPlwj0o00Uoc6nEE3g==} + '@babel/plugin-transform-for-of@7.25.7': + resolution: {integrity: sha512-n/TaiBGJxYFWvpJDfsxSj9lEEE44BFM1EPGz4KEiTipTgkoFVVcCmzAL3qA7fdQU96dpo4gGf5HBx/KnDvqiHw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.24.7': - resolution: {integrity: sha512-U9FcnA821YoILngSmYkW6FjyQe2TyZD5pHt4EVIhmcTkrJw/3KqcrRSxuOo5tFZJi7TE19iDyI1u+weTI7bn2w==} + '@babel/plugin-transform-function-name@7.25.7': + resolution: {integrity: sha512-5MCTNcjCMxQ63Tdu9rxyN6cAWurqfrDZ76qvVPrGYdBxIj+EawuuxTu/+dgJlhK5eRz3v1gLwp6XwS8XaX2NiQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.24.7': - resolution: {integrity: sha512-2yFnBGDvRuxAaE/f0vfBKvtnvvqU8tGpMHqMNpTN2oWMKIR3NqFkjaAgGwawhqK/pIN2T3XdjGPdaG0vDhOBGw==} + '@babel/plugin-transform-json-strings@7.25.7': + resolution: {integrity: sha512-Ot43PrL9TEAiCe8C/2erAjXMeVSnE/BLEx6eyrKLNFCCw5jvhTHKyHxdI1pA0kz5njZRYAnMO2KObGqOCRDYSA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.24.7': - resolution: {integrity: sha512-vcwCbb4HDH+hWi8Pqenwnjy+UiklO4Kt1vfspcQYFhJdpthSnW8XvWGyDZWKNVrVbVViI/S7K9PDJZiUmP2fYQ==} + '@babel/plugin-transform-literals@7.25.7': + resolution: {integrity: sha512-fwzkLrSu2fESR/cm4t6vqd7ebNIopz2QHGtjoU+dswQo/P6lwAG04Q98lliE3jkz/XqnbGFLnUcE0q0CVUf92w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.24.7': - resolution: {integrity: sha512-4D2tpwlQ1odXmTEIFWy9ELJcZHqrStlzK/dAOWYyxX3zT0iXQB6banjgeOJQXzEc4S0E0a5A+hahxPaEFYftsw==} + '@babel/plugin-transform-logical-assignment-operators@7.25.7': + resolution: {integrity: sha512-iImzbA55BjiovLyG2bggWS+V+OLkaBorNvc/yJoeeDQGztknRnDdYfp2d/UPmunZYEnZi6Lg8QcTmNMHOB0lGA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.24.7': - resolution: {integrity: sha512-T/hRC1uqrzXMKLQ6UCwMT85S3EvqaBXDGf0FaMf4446Qx9vKwlghvee0+uuZcDUCZU5RuNi4781UQ7R308zzBw==} + '@babel/plugin-transform-member-expression-literals@7.25.7': + resolution: {integrity: sha512-Std3kXwpXfRV0QtQy5JJcRpkqP8/wG4XL7hSKZmGlxPlDqmpXtEPRmhF7ztnlTCtUN3eXRUJp+sBEZjaIBVYaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.24.7': - resolution: {integrity: sha512-9+pB1qxV3vs/8Hdmz/CulFB8w2tuu6EB94JZFsjdqxQokwGa9Unap7Bo2gGBGIvPmDIVvQrom7r5m/TCDMURhg==} + '@babel/plugin-transform-modules-amd@7.25.7': + resolution: {integrity: sha512-CgselSGCGzjQvKzghCvDTxKHP3iooenLpJDO842ehn5D2G5fJB222ptnDwQho0WjEvg7zyoxb9P+wiYxiJX5yA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.24.8': - resolution: {integrity: sha512-WHsk9H8XxRs3JXKWFiqtQebdh9b/pTk4EgueygFzYlTKAg0Ud985mSevdNjdXdFBATSKVJGQXP1tv6aGbssLKA==} + '@babel/plugin-transform-modules-commonjs@7.25.7': + resolution: {integrity: sha512-L9Gcahi0kKFYXvweO6n0wc3ZG1ChpSFdgG+eV1WYZ3/dGbJK7vvk91FgGgak8YwRgrCuihF8tE/Xg07EkL5COg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.24.7': - resolution: {integrity: sha512-GYQE0tW7YoaN13qFh3O1NCY4MPkUiAH3fiF7UcV/I3ajmDKEdG3l+UOcbAm4zUE3gnvUU+Eni7XrVKo9eO9auw==} + '@babel/plugin-transform-modules-systemjs@7.25.7': + resolution: {integrity: sha512-t9jZIvBmOXJsiuyOwhrIGs8dVcD6jDyg2icw1VL4A/g+FnWyJKwUfSSU2nwJuMV2Zqui856El9u+ElB+j9fV1g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.24.7': - resolution: {integrity: sha512-3aytQvqJ/h9z4g8AsKPLvD4Zqi2qT+L3j7XoFFu1XBlZWEl2/1kWnhmAbxpLgPrHSY0M6UA02jyTiwUVtiKR6A==} + '@babel/plugin-transform-modules-umd@7.25.7': + resolution: {integrity: sha512-p88Jg6QqsaPh+EB7I9GJrIqi1Zt4ZBHUQtjw3z1bzEXcLh6GfPqzZJ6G+G1HBGKUNukT58MnKG7EN7zXQBCODw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7': - resolution: {integrity: sha512-/jr7h/EWeJtk1U/uz2jlsCioHkZk1JJZVcc8oQsJ1dUlaJD83f4/6Zeh2aHt9BIFokHIsSeDfhUmju0+1GPd6g==} + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7': + resolution: {integrity: sha512-BtAT9LzCISKG3Dsdw5uso4oV1+v2NlVXIIomKJgQybotJY3OwCwJmkongjHgwGKoZXd0qG5UZ12JUlDQ07W6Ow==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.24.7': - resolution: {integrity: sha512-RNKwfRIXg4Ls/8mMTza5oPF5RkOW8Wy/WgMAp1/F1yZ8mMbtwXW+HDoJiOsagWrAhI5f57Vncrmr9XeT4CVapA==} + '@babel/plugin-transform-new-target@7.25.7': + resolution: {integrity: sha512-CfCS2jDsbcZaVYxRFo2qtavW8SpdzmBXC2LOI4oO0rP+JSRDxxF3inF4GcPsLgfb5FjkhXG5/yR/lxuRs2pySA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7': - resolution: {integrity: sha512-Ts7xQVk1OEocqzm8rHMXHlxvsfZ0cEF2yomUqpKENHWMF4zKk175Y4q8H5knJes6PgYad50uuRmt3UJuhBw8pQ==} + '@babel/plugin-transform-nullish-coalescing-operator@7.25.7': + resolution: {integrity: sha512-FbuJ63/4LEL32mIxrxwYaqjJxpbzxPVQj5a+Ebrc8JICV6YX8nE53jY+K0RZT3um56GoNWgkS2BQ/uLGTjtwfw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.24.7': - resolution: {integrity: sha512-e6q1TiVUzvH9KRvicuxdBTUj4AdKSRwzIyFFnfnezpCfP2/7Qmbb8qbU2j7GODbl4JMkblitCQjKYUaX/qkkwA==} + '@babel/plugin-transform-numeric-separator@7.25.7': + resolution: {integrity: sha512-8CbutzSSh4hmD+jJHIA8vdTNk15kAzOnFLVVgBSMGr28rt85ouT01/rezMecks9pkU939wDInImwCKv4ahU4IA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.24.7': - resolution: {integrity: sha512-4QrHAr0aXQCEFni2q4DqKLD31n2DL+RxcwnNjDFkSG0eNQ/xCavnRkfCUjsyqGC2OviNJvZOF/mQqZBw7i2C5Q==} + '@babel/plugin-transform-object-rest-spread@7.25.7': + resolution: {integrity: sha512-1JdVKPhD7Y5PvgfFy0Mv2brdrolzpzSoUq2pr6xsR+m+3viGGeHEokFKsCgOkbeFOQxfB1Vt2F0cPJLRpFI4Zg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.24.7': - resolution: {integrity: sha512-A/vVLwN6lBrMFmMDmPPz0jnE6ZGx7Jq7d6sT/Ev4H65RER6pZ+kczlf1DthF5N0qaPHBsI7UXiE8Zy66nmAovg==} + '@babel/plugin-transform-object-super@7.25.7': + resolution: {integrity: sha512-pWT6UXCEW3u1t2tcAGtE15ornCBvopHj9Bps9D2DsH15APgNVOTwwczGckX+WkAvBmuoYKRCFa4DK+jM8vh5AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.24.7': - resolution: {integrity: sha512-uLEndKqP5BfBbC/5jTwPxLh9kqPWWgzN/f8w6UwAIirAEqiIVJWWY312X72Eub09g5KF9+Zn7+hT7sDxmhRuKA==} + '@babel/plugin-transform-optional-catch-binding@7.25.7': + resolution: {integrity: sha512-m9obYBA39mDPN7lJzD5WkGGb0GO54PPLXsbcnj1Hyeu8mSRz7Gb4b1A6zxNX32ZuUySDK4G6it8SDFWD1nCnqg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.24.8': - resolution: {integrity: sha512-5cTOLSMs9eypEy8JUVvIKOu6NgvbJMnpG62VpIHrTmROdQ+L5mDAaI40g25k5vXti55JWNX5jCkq3HZxXBQANw==} + '@babel/plugin-transform-optional-chaining@7.25.7': + resolution: {integrity: sha512-h39agClImgPWg4H8mYVAbD1qP9vClFbEjqoJmt87Zen8pjqK8FTPUwrOXAvqu5soytwxrLMd2fx2KSCp2CHcNg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.24.7': - resolution: {integrity: sha512-yGWW5Rr+sQOhK0Ot8hjDJuxU3XLRQGflvT4lhlSY0DFvdb3TwKaY26CJzHtYllU0vT9j58hc37ndFPsqT1SrzA==} + '@babel/plugin-transform-parameters@7.25.7': + resolution: {integrity: sha512-FYiTvku63me9+1Nz7TOx4YMtW3tWXzfANZtrzHhUZrz4d47EEtMQhzFoZWESfXuAMMT5mwzD4+y1N8ONAX6lMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.24.7': - resolution: {integrity: sha512-COTCOkG2hn4JKGEKBADkA8WNb35TGkkRbI5iT845dB+NyqgO8Hn+ajPbSnIQznneJTa3d30scb6iz/DhH8GsJQ==} + '@babel/plugin-transform-private-methods@7.25.7': + resolution: {integrity: sha512-KY0hh2FluNxMLwOCHbxVOKfdB5sjWG4M183885FmaqWWiGMhRZq4DQRKH6mHdEucbJnyDyYiZNwNG424RymJjA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.24.7': - resolution: {integrity: sha512-9z76mxwnwFxMyxZWEgdgECQglF2Q7cFLm0kMf8pGwt+GSJsY0cONKj/UuO4bOH0w/uAel3ekS4ra5CEAyJRmDA==} + '@babel/plugin-transform-private-property-in-object@7.25.7': + resolution: {integrity: sha512-LzA5ESzBy7tqj00Yjey9yWfs3FKy4EmJyKOSWld144OxkTji81WWnUT8nkLUn+imN/zHL8ZQlOu/MTUAhHaX3g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.24.7': - resolution: {integrity: sha512-EMi4MLQSHfd2nrCqQEWxFdha2gBCqU4ZcCng4WBGZ5CJL4bBRW0ptdqqDdeirGZcpALazVVNJqRmsO8/+oNCBA==} + '@babel/plugin-transform-property-literals@7.25.7': + resolution: {integrity: sha512-lQEeetGKfFi0wHbt8ClQrUSUMfEeI3MMm74Z73T9/kuz990yYVtfofjf3NuA42Jy3auFOpbjDyCSiIkTs1VIYw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.24.7': - resolution: {integrity: sha512-lq3fvXPdimDrlg6LWBoqj+r/DEWgONuwjuOuQCSYgRroXDH/IdM1C0IZf59fL5cHLpjEH/O6opIRBbqv7ELnuA==} + '@babel/plugin-transform-regenerator@7.25.7': + resolution: {integrity: sha512-mgDoQCRjrY3XK95UuV60tZlFCQGXEtMg8H+IsW72ldw1ih1jZhzYXbJvghmAEpg5UVhhnCeia1CkGttUvCkiMQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-reserved-words@7.24.7': - resolution: {integrity: sha512-0DUq0pHcPKbjFZCfTss/pGkYMfy3vFWydkUBd9r0GHpIyfs2eCDENvqadMycRS9wZCXR41wucAfJHJmwA0UmoQ==} + '@babel/plugin-transform-reserved-words@7.25.7': + resolution: {integrity: sha512-3OfyfRRqiGeOvIWSagcwUTVk2hXBsr/ww7bLn6TRTuXnexA+Udov2icFOxFX9abaj4l96ooYkcNN1qi2Zvqwng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.24.7': - resolution: {integrity: sha512-KsDsevZMDsigzbA09+vacnLpmPH4aWjcZjXdyFKGzpplxhbeB4wYtury3vglQkg6KM/xEPKt73eCjPPf1PgXBA==} + '@babel/plugin-transform-shorthand-properties@7.25.7': + resolution: {integrity: sha512-uBbxNwimHi5Bv3hUccmOFlUy3ATO6WagTApenHz9KzoIdn0XeACdB12ZJ4cjhuB2WSi80Ez2FWzJnarccriJeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.24.7': - resolution: {integrity: sha512-x96oO0I09dgMDxJaANcRyD4ellXFLLiWhuwDxKZX5g2rWP1bTPkBSwCYv96VDXVT1bD9aPj8tppr5ITIh8hBng==} + '@babel/plugin-transform-spread@7.25.7': + resolution: {integrity: sha512-Mm6aeymI0PBh44xNIv/qvo8nmbkpZze1KvR8MkEqbIREDxoiWTi18Zr2jryfRMwDfVZF9foKh060fWgni44luw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.24.7': - resolution: {integrity: sha512-kHPSIJc9v24zEml5geKg9Mjx5ULpfncj0wRpYtxbvKyTtHCYDkVE3aHQ03FrpEo4gEe2vrJJS1Y9CJTaThA52g==} + '@babel/plugin-transform-sticky-regex@7.25.7': + resolution: {integrity: sha512-ZFAeNkpGuLnAQ/NCsXJ6xik7Id+tHuS+NT+ue/2+rn/31zcdnupCdmunOizEaP0JsUmTFSTOPoQY7PkK2pttXw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.24.7': - resolution: {integrity: sha512-AfDTQmClklHCOLxtGoP7HkeMw56k1/bTQjwsfhL6pppo/M4TOBSq+jjBUBLmV/4oeFg4GWMavIl44ZeCtmmZTw==} + '@babel/plugin-transform-template-literals@7.25.7': + resolution: {integrity: sha512-SI274k0nUsFFmyQupiO7+wKATAmMFf8iFgq2O+vVFXZ0SV9lNfT1NGzBEhjquFmD8I9sqHLguH+gZVN3vww2AA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.24.8': - resolution: {integrity: sha512-adNTUpDCVnmAE58VEqKlAA6ZBlNkMnWD0ZcW76lyNFN3MJniyGFZfNwERVk8Ap56MCnXztmDr19T4mPTztcuaw==} + '@babel/plugin-transform-typeof-symbol@7.25.7': + resolution: {integrity: sha512-OmWmQtTHnO8RSUbL0NTdtpbZHeNTnm68Gj5pA4Y2blFNh+V4iZR68V1qL9cI37J21ZN7AaCnkfdHtLExQPf2uA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.24.8': - resolution: {integrity: sha512-CgFgtN61BbdOGCP4fLaAMOPkzWUh6yQZNMr5YSt8uz2cZSSiQONCQFWqsE4NeVfOIhqDOlS9CR3WD91FzMeB2Q==} + '@babel/plugin-transform-typescript@7.25.7': + resolution: {integrity: sha512-VKlgy2vBzj8AmEzunocMun2fF06bsSWV+FvVXohtL6FGve/+L217qhHxRTVGHEDO/YR8IANcjzgJsd04J8ge5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.24.7': - resolution: {integrity: sha512-U3ap1gm5+4edc2Q/P+9VrBNhGkfnf+8ZqppY71Bo/pzZmXhhLdqgaUl6cuB07O1+AQJtCLfaOmswiNbSQ9ivhw==} + '@babel/plugin-transform-unicode-escapes@7.25.7': + resolution: {integrity: sha512-BN87D7KpbdiABA+t3HbVqHzKWUDN3dymLaTnPFAMyc8lV+KN3+YzNhVRNdinaCPA4AUqx7ubXbQ9shRjYBl3SQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.24.7': - resolution: {integrity: sha512-uH2O4OV5M9FZYQrwc7NdVmMxQJOCCzFeYudlZSzUAHRFeOujQefa92E74TQDVskNHCzOXoigEuoyzHDhaEaK5w==} + '@babel/plugin-transform-unicode-property-regex@7.25.7': + resolution: {integrity: sha512-IWfR89zcEPQGB/iB408uGtSPlQd3Jpq11Im86vUgcmSTcoWAiQMCTOa2K2yNNqFJEBVICKhayctee65Ka8OB0w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.24.7': - resolution: {integrity: sha512-hlQ96MBZSAXUq7ltkjtu3FJCCSMx/j629ns3hA3pXnBXjanNP0LHi+JpPeA81zaWgVK1VGH95Xuy7u0RyQ8kMg==} + '@babel/plugin-transform-unicode-regex@7.25.7': + resolution: {integrity: sha512-8JKfg/hiuA3qXnlLx8qtv5HWRbgyFx2hMMtpDDuU2rTckpKkGu4ycK5yYHwuEa16/quXfoxHBIApEsNyMWnt0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.24.7': - resolution: {integrity: sha512-2G8aAvF4wy1w/AGZkemprdGMRg5o6zPNhbHVImRz3lss55TYCBd6xStN19rt8XJHq20sqV0JbyWjOWwQRwV/wg==} + '@babel/plugin-transform-unicode-sets-regex@7.25.7': + resolution: {integrity: sha512-YRW8o9vzImwmh4Q3Rffd09bH5/hvY0pxg+1H1i0f7APoUeg12G7+HhLj9ZFNIrYkgBXhIijPJ+IXypN0hLTIbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.24.8': - resolution: {integrity: sha512-vObvMZB6hNWuDxhSaEPTKCwcqkAIuDtE+bQGn4XMXne1DSLzFVY8Vmj1bm+mUQXYNN8NmaQEO+r8MMbzPr1jBQ==} + '@babel/preset-env@7.25.7': + resolution: {integrity: sha512-Gibz4OUdyNqqLj+7OAvBZxOD7CklCtMA5/j0JgUEwOnaRULsPDXmic2iKxL2DX2vQduPR5wH2hjZas/Vr/Oc0g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -747,29 +734,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-typescript@7.24.7': - resolution: {integrity: sha512-SyXRe3OdWwIwalxDg5UtJnJQO+YPcTfwiIY2B0Xlddh9o7jpWLvv8X1RthIeDOxQ+O1ML5BLPCONToObyVQVuQ==} + '@babel/preset-typescript@7.25.7': + resolution: {integrity: sha512-rkkpaXJZOFN45Fb+Gki0c+KMIglk4+zZXOoMJuyEK8y8Kkc8Jd3BDmP7qPsz0zQMJj+UD7EprF+AqAXcILnexw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/regjsgen@0.8.0': - resolution: {integrity: sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==} - - '@babel/runtime@7.24.8': - resolution: {integrity: sha512-5F7SDGs1T72ZczbRwbGO9lQi0NLjQxzl6i4lJxLxfW9U5UluCSyEJeniWvnhl3/euNiqQVbo8zruhsDfid0esA==} + '@babel/runtime@7.25.7': + resolution: {integrity: sha512-FjoyLe754PMiYsFaN5C94ttGiOmBNYTf6pLr4xXHAT5uctHb092PBszndLDR5XA/jghQvn4n7JMHl7dmTgbm9w==} engines: {node: '>=6.9.0'} - '@babel/template@7.24.7': - resolution: {integrity: sha512-jYqfPrU9JTF0PmPy1tLYHW4Mp4KlgxJD9l2nP9fD6yT/ICi554DmrWBAEYpIelzjHf1msDP3PxJIRt/nFNfBig==} + '@babel/template@7.25.7': + resolution: {integrity: sha512-wRwtAgI3bAS+JGU2upWNL9lSlDcRCqD05BZ1n3X2ONLH1WilFP6O1otQjeMK/1g0pvYcXC7b/qVUB1keofjtZA==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.24.8': - resolution: {integrity: sha512-t0P1xxAPzEDcEPmjprAQq19NWum4K0EQPjMwZQZbHt+GiZqvjCHjj755Weq1YRPVzBI+3zSfvScfpnuIecVFJQ==} + '@babel/traverse@7.25.7': + resolution: {integrity: sha512-jatJPT1Zjqvh/1FyJs6qAHL+Dzb7sTb+xr7Q+gM1b+1oBsMsQQ4FkVKb6dFlJvLlVssqkRzV05Jzervt9yhnzg==} engines: {node: '>=6.9.0'} - '@babel/types@7.24.9': - resolution: {integrity: sha512-xm8XrMKz0IlUdocVbYJe0Z9xEgidU7msskG8BbhnTPK/HZ2z/7FP7ykqPgrUH+C+r414mNfNWam1f2vqOjqjYQ==} + '@babel/types@7.25.7': + resolution: {integrity: sha512-vwIVdXG+j+FOpkwqHRcBgHLYNL7XMkufrlaFvL9o6Ai9sJn9+PdyIL5qa0XzTZw084c+u9LOls53eoZWP/W5WQ==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -781,30 +765,33 @@ packages: '@bundled-es-modules/statuses@1.0.1': resolution: {integrity: sha512-yn7BklA5acgcBr+7w064fGV+SGIFySjCKpqjcWgBAIfrAkY+4GQTJJHQMeT3V/sgz23VTEVV8TtOmkvJAhFVfg==} + '@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==} 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.0': - resolution: {integrity: sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==} + '@eslint-community/regexpp@4.11.1': + resolution: {integrity: sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} '@eslint/eslintrc@2.1.4': resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@eslint/js@8.57.0': - resolution: {integrity: sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==} + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@fastify/busboy@2.1.1': resolution: {integrity: sha512-vBZP4NlzfOlerQTnba4aqZoMhE/a9HY7HRqoOPaETQcSQuWEIyZMHGfVu6w9wGtGK5fED5qRs2DteVCjOH60sA==} engines: {node: '>=14'} - '@humanwhocodes/config-array@0.11.14': - resolution: {integrity: sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==} + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead @@ -816,20 +803,24 @@ packages: resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} deprecated: Use @eslint/object-schema instead - '@inquirer/confirm@3.1.15': - resolution: {integrity: sha512-CiLGi3JmKGEsia5kYJN62yG/njHydbYIkzSBril7tCaKbsnIqxa2h/QiON9NjfwiKck/2siosz4h7lVhLFocMQ==} + '@inquirer/confirm@3.2.0': + resolution: {integrity: sha512-oOIwPs0Dvq5220Z8lGL/6LHRTEr9TgLHmiI99Rj1PJ1p1czTys+olrgBqZk4E2qC0YTzeHprxSQmoHioVdJ7Lw==} engines: {node: '>=18'} - '@inquirer/core@9.0.3': - resolution: {integrity: sha512-p2BRZv/vMmpwlU4ZR966vKQzGVCi4VhLjVofwnFLziTQia541T7i1Ar8/LPh+LzjkXzocme+g5Io6MRtzlCcNA==} + '@inquirer/core@9.2.1': + resolution: {integrity: sha512-F2VBt7W/mwqEU4bL0RnHNZmC/OxzNx9cOYxHqnXX3MP6ruYvZUZAW9imgN9+h/uBT/oP8Gh888J2OZSbjSeWcg==} engines: {node: '>=18'} - '@inquirer/figures@1.0.4': - resolution: {integrity: sha512-R7Gsg6elpuqdn55fBH2y9oYzrU/yKrSmIsDX4ROT51vohrECFzTf2zw9BfUbOW8xjfmM2QbVoVYdTwhrtEKWSQ==} + '@inquirer/figures@1.0.6': + resolution: {integrity: sha512-yfZzps3Cso2UbM7WlxKwZQh2Hs6plrbjs1QnzQDZhK2DgyCo6D8AaHps9olkNcUFlcYERMqU3uJSp1gmy3s/qQ==} engines: {node: '>=18'} - '@inquirer/type@1.5.0': - resolution: {integrity: sha512-L/UdayX9Z1lLN+itoTKqJ/X4DX5DaWu2Sruwt4XgZzMNv32x4qllbzMX4MbJlz0yxAQtU19UvABGOjmdq1u3qA==} + '@inquirer/type@1.5.5': + resolution: {integrity: sha512-MzICLu4yS7V8AA61sANROZ9vT1H3ooca5dSmI1FjZkzq7o/koMsRfQSzRtFo+F3Ao4Sf1C0bpLKejpKB/+j6MA==} + engines: {node: '>=18'} + + '@inquirer/type@2.0.0': + resolution: {integrity: sha512-XvJRx+2KR3YXyYtPUUy+qd9i7p+GO9Ko6VIIpWlBrpWwXDv8WLFeHTxz35CfQFUiBMLXlGHhGzys7lqit9gWag==} engines: {node: '>=18'} '@istanbuljs/load-nyc-config@1.1.0': @@ -927,12 +918,8 @@ packages: '@jridgewell/trace-mapping@0.3.25': resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} - '@mswjs/cookies@1.1.1': - resolution: {integrity: sha512-W68qOHEjx1iD+4VjQudlx26CPIoxmIAtK4ZCexU0/UJBG6jYhcuyzKJx+Iw8uhBIGd9eba64XgWVgo20it1qwA==} - engines: {node: '>=18'} - - '@mswjs/interceptors@0.29.1': - resolution: {integrity: sha512-3rDakgJZ77+RiQUuSK69t1F0m8BQKA8Vh5DCS5V0DWvNY67zob2JhhQrhCO0AKLGINTRSFd1tBaHcJTkhefoSw==} + '@mswjs/interceptors@0.35.9': + resolution: {integrity: sha512-SSnyl/4ni/2ViHKkiZb8eajA/eN1DNFaHjhGiLUdZvDz6PKF4COSf/17xqSz64nOo2Ia29SA6B2KNCsyCbVmaQ==} engines: {node: '>=18'} '@nicolo-ribaudo/chokidar-2@2.1.8-no-fsevents.3': @@ -959,8 +946,8 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@playwright/test@1.45.2': - resolution: {integrity: sha512-JxG9eq92ET75EbVi3s+4sYbcG7q72ECeZNbdBlaMkGcNbiDQ4cAi8U2QP5oKkOx+1gpaiL1LDStmzCaEM1Z6fQ==} + '@playwright/test@1.47.2': + resolution: {integrity: sha512-jTXRsoSPONAs8Za9QEQdyjFn+0ZQFjCiIztAIF6bi1HqhBzG9Ma7g1WotyiGqFSBRZjIEqMdT8RUlbk1QVhzCQ==} engines: {node: '>=18'} hasBin: true @@ -977,8 +964,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@15.2.3': - resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==} + '@rollup/plugin-node-resolve@15.3.0': + resolution: {integrity: sha512-9eO5McEICxMzJpDW9OnMYSv4Sta3hmt7VtBFz5zR9273suNOydOyq/FrGeGy+KsTRFm8w0SLVhzig2ILFT63Ag==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -995,8 +982,8 @@ packages: rollup: optional: true - '@rollup/pluginutils@5.1.0': - resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==} + '@rollup/pluginutils@5.1.2': + resolution: {integrity: sha512-/FIdS3PyZ39bjZlwqFnWqCOVnW7o963LtKMwQOD0NhQqw22gSr2YY1afu3FxRip4ZCZNsD5jq6Aaz6QV3D/Njw==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^1.20.0||^2.0.0||^3.0.0||^4.0.0 @@ -1004,86 +991,89 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.18.1': - resolution: {integrity: sha512-lncuC4aHicncmbORnx+dUaAgzee9cm/PbIqgWz1PpXuwc+sa1Ct83tnqUDy/GFKleLiN7ZIeytM6KJ4cAn1SxA==} + '@rollup/rollup-android-arm-eabi@4.24.0': + resolution: {integrity: sha512-Q6HJd7Y6xdB48x8ZNVDOqsbh2uByBhgK8PiQgPhwkIw/HC/YX5Ghq2mQY5sRMZWHb3VsFkWooUVOZHKr7DmDIA==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.18.1': - resolution: {integrity: sha512-F/tkdw0WSs4ojqz5Ovrw5r9odqzFjb5LIgHdHZG65dFI1lWTWRVy32KDJLKRISHgJvqUeUhdIvy43fX41znyDg==} + '@rollup/rollup-android-arm64@4.24.0': + resolution: {integrity: sha512-ijLnS1qFId8xhKjT81uBHuuJp2lU4x2yxa4ctFPtG+MqEE6+C5f/+X/bStmxapgmwLwiL3ih122xv8kVARNAZA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.18.1': - resolution: {integrity: sha512-vk+ma8iC1ebje/ahpxpnrfVQJibTMyHdWpOGZ3JpQ7Mgn/3QNHmPq7YwjZbIE7km73dH5M1e6MRRsnEBW7v5CQ==} + '@rollup/rollup-darwin-arm64@4.24.0': + resolution: {integrity: sha512-bIv+X9xeSs1XCk6DVvkO+S/z8/2AMt/2lMqdQbMrmVpgFvXlmde9mLcbQpztXm1tajC3raFDqegsH18HQPMYtA==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.18.1': - resolution: {integrity: sha512-IgpzXKauRe1Tafcej9STjSSuG0Ghu/xGYH+qG6JwsAUxXrnkvNHcq/NL6nz1+jzvWAnQkuAJ4uIwGB48K9OCGA==} + '@rollup/rollup-darwin-x64@4.24.0': + resolution: {integrity: sha512-X6/nOwoFN7RT2svEQWUsW/5C/fYMBe4fnLK9DQk4SX4mgVBiTA9h64kjUYPvGQ0F/9xwJ5U5UfTbl6BEjaQdBQ==} cpu: [x64] os: [darwin] - '@rollup/rollup-linux-arm-gnueabihf@4.18.1': - resolution: {integrity: sha512-P9bSiAUnSSM7EmyRK+e5wgpqai86QOSv8BwvkGjLwYuOpaeomiZWifEos517CwbG+aZl1T4clSE1YqqH2JRs+g==} + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': + resolution: {integrity: sha512-0KXvIJQMOImLCVCz9uvvdPgfyWo93aHHp8ui3FrtOP57svqrF/roSSR5pjqL2hcMp0ljeGlU4q9o/rQaAQ3AYA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.18.1': - resolution: {integrity: sha512-5RnjpACoxtS+aWOI1dURKno11d7krfpGDEn19jI8BuWmSBbUC4ytIADfROM1FZrFhQPSoP+KEa3NlEScznBTyQ==} + '@rollup/rollup-linux-arm-musleabihf@4.24.0': + resolution: {integrity: sha512-it2BW6kKFVh8xk/BnHfakEeoLPv8STIISekpoF+nBgWM4d55CZKc7T4Dx1pEbTnYm/xEKMgy1MNtYuoA8RFIWw==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.18.1': - resolution: {integrity: sha512-8mwmGD668m8WaGbthrEYZ9CBmPug2QPGWxhJxh/vCgBjro5o96gL04WLlg5BA233OCWLqERy4YUzX3bJGXaJgQ==} + '@rollup/rollup-linux-arm64-gnu@4.24.0': + resolution: {integrity: sha512-i0xTLXjqap2eRfulFVlSnM5dEbTVque/3Pi4g2y7cxrs7+a9De42z4XxKLYJ7+OhE3IgxvfQM7vQc43bwTgPwA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.18.1': - resolution: {integrity: sha512-dJX9u4r4bqInMGOAQoGYdwDP8lQiisWb9et+T84l2WXk41yEej8v2iGKodmdKimT8cTAYt0jFb+UEBxnPkbXEQ==} + '@rollup/rollup-linux-arm64-musl@4.24.0': + resolution: {integrity: sha512-9E6MKUJhDuDh604Qco5yP/3qn3y7SLXYuiC0Rpr89aMScS2UAmK1wHP2b7KAa1nSjWJc/f/Lc0Wl1L47qjiyQw==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': - resolution: {integrity: sha512-V72cXdTl4EI0x6FNmho4D502sy7ed+LuVW6Ym8aI6DRQ9hQZdp5sj0a2usYOlqvFBNKQnLQGwmYnujo2HvjCxQ==} + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': + resolution: {integrity: sha512-2XFFPJ2XMEiF5Zi2EBf4h73oR1V/lycirxZxHZNc93SqDN/IWhYYSYj8I9381ikUFXZrz2v7r2tOVk2NBwxrWw==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.18.1': - resolution: {integrity: sha512-f+pJih7sxoKmbjghrM2RkWo2WHUW8UbfxIQiWo5yeCaCM0TveMEuAzKJte4QskBp1TIinpnRcxkquY+4WuY/tg==} + '@rollup/rollup-linux-riscv64-gnu@4.24.0': + resolution: {integrity: sha512-M3Dg4hlwuntUCdzU7KjYqbbd+BLq3JMAOhCKdBE3TcMGMZbKkDdJ5ivNdehOssMCIokNHFOsv7DO4rlEOfyKpg==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.18.1': - resolution: {integrity: sha512-qb1hMMT3Fr/Qz1OKovCuUM11MUNLUuHeBC2DPPAWUYYUAOFWaxInaTwTQmc7Fl5La7DShTEpmYwgdt2hG+4TEg==} + '@rollup/rollup-linux-s390x-gnu@4.24.0': + resolution: {integrity: sha512-mjBaoo4ocxJppTorZVKWFpy1bfFj9FeCMJqzlMQGjpNPY9JwQi7OuS1axzNIk0nMX6jSgy6ZURDZ2w0QW6D56g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.18.1': - resolution: {integrity: sha512-7O5u/p6oKUFYjRbZkL2FLbwsyoJAjyeXHCU3O4ndvzg2OFO2GinFPSJFGbiwFDaCFc+k7gs9CF243PwdPQFh5g==} + '@rollup/rollup-linux-x64-gnu@4.24.0': + resolution: {integrity: sha512-ZXFk7M72R0YYFN5q13niV0B7G8/5dcQ9JDp8keJSfr3GoZeXEoMHP/HlvqROA3OMbMdfr19IjCeNAnPUG93b6A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.18.1': - resolution: {integrity: sha512-pDLkYITdYrH/9Cv/Vlj8HppDuLMDUBmgsM0+N+xLtFd18aXgM9Nyqupb/Uw+HeidhfYg2lD6CXvz6CjoVOaKjQ==} + '@rollup/rollup-linux-x64-musl@4.24.0': + resolution: {integrity: sha512-w1i+L7kAXZNdYl+vFvzSZy8Y1arS7vMgIy8wusXJzRrPyof5LAb02KGr1PD2EkRcl73kHulIID0M501lN+vobQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.18.1': - resolution: {integrity: sha512-W2ZNI323O/8pJdBGil1oCauuCzmVd9lDmWBBqxYZcOqWD6aWqJtVBQ1dFrF4dYpZPks6F+xCZHfzG5hYlSHZ6g==} + '@rollup/rollup-win32-arm64-msvc@4.24.0': + resolution: {integrity: sha512-VXBrnPWgBpVDCVY6XF3LEW0pOU51KbaHhccHw6AS6vBWIC60eqsH19DAeeObl+g8nKAz04QFdl/Cefta0xQtUQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.18.1': - resolution: {integrity: sha512-ELfEX1/+eGZYMaCIbK4jqLxO1gyTSOIlZr6pbC4SRYFaSIDVKOnZNMdoZ+ON0mrFDp4+H5MhwNC1H/AhE3zQLg==} + '@rollup/rollup-win32-ia32-msvc@4.24.0': + resolution: {integrity: sha512-xrNcGDU0OxVcPTH/8n/ShH4UevZxKIO6HJFK0e15XItZP2UcaiLFd5kiX7hJnqCbSztUF8Qot+JWBC/QXRPYWQ==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.18.1': - resolution: {integrity: sha512-yjk2MAkQmoaPYCSu35RLJ62+dz358nE83VfTePJRp8CG7aMg25mEJYpXFiD+NcevhX8LxD5OP5tktPXnXN7GDw==} + '@rollup/rollup-win32-x64-msvc@4.24.0': + resolution: {integrity: sha512-fbMkAF7fufku0N2dE5TBXcNlg0pt0cJue4xBRE2Qc5Vqikxr4VCgKj/ht6SMdFcOacVA9rqF70APJ8RN/4vMJw==} cpu: [x64] os: [win32] + '@rtsao/scc@1.1.0': + resolution: {integrity: sha512-zt6OdqaDoOnJ1ZYsCYGt9YmWzDXl4vQdKTyJev62gFhRGKdx7mcT54V9KIjg+d2wi9EXsPvAPKe7i7WjfVWB8g==} + '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} @@ -1097,8 +1087,8 @@ packages: '@sinonjs/fake-timers@10.3.0': resolution: {integrity: sha512-V4BG07kuYSUkTCSBHG8G8TNhM+F19jXFWnQtzj+we8DrkpSBCee9Z3Ms8yiGer/dlmhe35/Xdgyo3/0rQKg7YA==} - '@testing-library/dom@10.3.2': - resolution: {integrity: sha512-0bxIdP9mmPiOJ6wHLj8bdJRq+51oddObeCGdEf6PNEhYd93ZYAN+lPRnEOVFtheVwDM7+p+tza3LAQgp0PTudg==} + '@testing-library/dom@10.4.0': + resolution: {integrity: sha512-pemlzrSESWbdAloYml3bAJMEfNh1Z7EduzqPKprCH5S341frlpYnUEW0H72dLxa6IsYr+mPno20GiSm+h9dEdQ==} engines: {node: '>=18'} '@testing-library/user-event@14.5.2': @@ -1132,8 +1122,8 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/estree@1.0.5': - resolution: {integrity: sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==} + '@types/estree@1.0.6': + resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -1150,11 +1140,11 @@ packages: '@types/jest-axe@3.5.9': resolution: {integrity: sha512-z98CzR0yVDalCEuhGXXO4/zN4HHuSebAukXDjTLJyjEAgoUf1H1i+sr7SUB/mz8CRS/03/XChsx0dcLjHkndoQ==} - '@types/jest@29.5.12': - resolution: {integrity: sha512-eDC8bTvT/QhYdxJAulQikueigY5AsdBRH2yDKW3yveW7svY3+DzN84/2NUgkw10RTiJbWqZrTtoGVdYlvFJdLw==} + '@types/jest@29.5.13': + resolution: {integrity: sha512-wd+MVEZCHt23V0/L642O5APvspWply/rGY5BcW4SUETo2UzPU3Z26qr8jC2qxpimI2jjx9h7+2cj2FwIr01bXg==} - '@types/jquery@3.5.30': - resolution: {integrity: sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==} + '@types/jquery@3.5.31': + resolution: {integrity: sha512-rf/iB+cPJ/YZfMwr+FVuQbm7IaWC4y3FVYfVDxRGqmUCFjjPII0HWaP0vTPJGp6m4o13AXySCcMbWfrWtBFAKw==} '@types/jsdom@20.0.1': resolution: {integrity: sha512-d0r18sZPmMQr1eG35u12FZfhIXNrnsPU/g5wvRKCUf/tOGilKKwYMYGqh33BNR6ba+2gkHw1EUiHoN3mn7E5IQ==} @@ -1171,8 +1161,8 @@ packages: '@types/mute-stream@0.0.4': resolution: {integrity: sha512-CPM9nzrCPPJHQNA9keH9CVkVI+WR5kMa+7XEs5jcGQ0VoAGnLv242w8lIVgwAEfmE4oufJRaTc9PNLQl0ioAow==} - '@types/node@20.14.11': - resolution: {integrity: sha512-kprQpL8MMeszbz6ojB5/tU8PLN4kesnN8Gjzw349rDlNgsSzg90lAVj3llK99Dh7JON+t9AuscPPFW6mPbTnSA==} + '@types/node@22.7.4': + resolution: {integrity: sha512-y+NPi1rFzDs1NdQHHToqeiX2TIS79SWEAw9GYhkkx8bD0ChpfqC+n2j5OXOCpzfojBEBt6DnEnnG9MY0zk1XLg==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -1198,25 +1188,25 @@ packages: '@types/yargs-parser@21.0.3': resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==} - '@types/yargs@17.0.32': - resolution: {integrity: sha512-xQ67Yc/laOG5uMfX/093MRlGGCIBzZMarVa+gfNKJxWAIgykYpVGkBdbqEzGDDfCrVUj6Hiff4mTZ5BA6TmAog==} + '@types/yargs@17.0.33': + resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@7.16.1': - resolution: {integrity: sha512-SxdPak/5bO0EnGktV05+Hq8oatjAYVY3Zh2bye9pGZy6+jwyR3LG3YKkV4YatlsgqXP28BTeVm9pqwJM96vf2A==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/eslint-plugin@8.8.0': + resolution: {integrity: sha512-wORFWjU30B2WJ/aXBfOm1LX9v9nyt9D3jsSOxC3cCaTQGCW5k4jNpmjFv3U7p/7s4yvdjHzwtv2Sd2dOyhjS0A==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - '@typescript-eslint/parser': ^7.0.0 - eslint: ^8.56.0 + '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: optional: true - '@typescript-eslint/parser@7.16.1': - resolution: {integrity: sha512-u+1Qx86jfGQ5i4JjK33/FnawZRpsLxRnKzGE6EABZ40KxVT/vWsiZFEBBHjFOljmmV3MBYOHEKi0Jm9hbAOClA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/parser@8.8.0': + resolution: {integrity: sha512-uEFUsgR+tl8GmzmLjRqz+VrDv4eoaMqMXW7ruXfgThaAShO9JTciKpEsB+TvnfFfbg5IpujgMXVV36gOJRLtZg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 typescript: '*' peerDependenciesMeta: typescript: @@ -1226,15 +1216,14 @@ packages: resolution: {integrity: sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/scope-manager@7.16.1': - resolution: {integrity: sha512-nYpyv6ALte18gbMz323RM+vpFpTjfNdyakbf3nsLvF43uF9KeNC289SUEW3QLZ1xPtyINJ1dIsZOuWuSRIWygw==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/scope-manager@8.8.0': + resolution: {integrity: sha512-EL8eaGC6gx3jDd8GwEFEV091210U97J0jeEHrAYvIYosmEGet4wJ+g0SYmLu+oRiAwbSA5AVrt6DxLHfdd+bUg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@7.16.1': - resolution: {integrity: sha512-rbu/H2MWXN4SkjIIyWcmYBjlp55VT+1G3duFOIukTNFxr9PI35pLc2ydwAfejCEitCv4uztA07q0QWanOHC7dA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/type-utils@8.8.0': + resolution: {integrity: sha512-IKwJSS7bCqyCeG4NVGxnOP6lLT9Okc3Zj8hLO96bpMkJab+10HIfJbMouLrlpyOr3yrQ1cA413YPFiGd1mW9/Q==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 typescript: '*' peerDependenciesMeta: typescript: @@ -1244,9 +1233,9 @@ packages: resolution: {integrity: sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/types@7.16.1': - resolution: {integrity: sha512-AQn9XqCzUXd4bAVEsAXM/Izk11Wx2u4H3BAfQVhSfzfDOm/wAON9nP7J5rpkCxts7E5TELmN845xTUCQrD1xIQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/types@8.8.0': + resolution: {integrity: sha512-QJwc50hRCgBd/k12sTykOJbESe1RrzmX6COk8Y525C9l7oweZ+1lw9JiU56im7Amm8swlz00DRIlxMYLizr2Vw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@typescript-eslint/typescript-estree@5.62.0': resolution: {integrity: sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==} @@ -1257,9 +1246,9 @@ packages: typescript: optional: true - '@typescript-eslint/typescript-estree@7.16.1': - resolution: {integrity: sha512-0vFPk8tMjj6apaAZ1HlwM8w7jbghC8jc1aRNJG5vN8Ym5miyhTQGMqU++kuBFDNKe9NcPeZ6x0zfSzV8xC1UlQ==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/typescript-estree@8.8.0': + resolution: {integrity: sha512-ZaMJwc/0ckLz5DaAZ+pNLmHv8AMVGtfWxZe/x2JVEkD5LnmhWiQMMcYT7IY7gkdJuzJ9P14fRy28lUrlDSWYdw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: typescript: '*' peerDependenciesMeta: @@ -1272,19 +1261,19 @@ packages: peerDependencies: eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 - '@typescript-eslint/utils@7.16.1': - resolution: {integrity: sha512-WrFM8nzCowV0he0RlkotGDujx78xudsxnGMBHI88l5J8wEhED6yBwaSLP99ygfrzAjsQvcYQ94quDwI0d7E1fA==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/utils@8.8.0': + resolution: {integrity: sha512-QE2MgfOTem00qrlPgyByaCHay9yb1+9BjnMFnSFkUKQfu7adBXDTnCAivURnuPPAG/qiB+kzKkZKmKfaMT0zVg==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - eslint: ^8.56.0 + eslint: ^8.57.0 || ^9.0.0 '@typescript-eslint/visitor-keys@5.62.0': resolution: {integrity: sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@typescript-eslint/visitor-keys@7.16.1': - resolution: {integrity: sha512-Qlzzx4sE4u3FsHTPQAAQFJFNOuqtuY0LFrZHwQ8IHK705XxBiWOFkfKRWu6niB7hwfgnwIpO4jTC75ozW1PHWg==} - engines: {node: ^18.18.0 || >=20.0.0} + '@typescript-eslint/visitor-keys@8.8.0': + resolution: {integrity: sha512-8mq51Lx6Hpmd7HnA2fcHQo3YgfX1qbccxQOgZcb4tvasu//zXRaA1j5ZRFeCw/VRAdFi4mRM9DnZw0Nu0Q2d1g==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@ungap/structured-clone@1.2.0': resolution: {integrity: sha512-zuVdFrMJiuCDQUMCzQaD6KL28MjnqqN8XnAqiEq9PNm/hCPTSGfrXCOfwj1ow4LFb/tNymJPwsNbVePc1xFqrQ==} @@ -1301,8 +1290,8 @@ packages: peerDependencies: acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 - acorn-walk@8.3.3: - resolution: {integrity: sha512-MxXdReSRhGO7VlFe1bRG/oI7/mdLV9B9JJT0N8vZOhF7gFRR5l3M8W9G8JxmKV+JC5mGqJ0QvqfSOLsCPa4nUw==} + acorn-walk@8.3.4: + resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} acorn@8.12.1: @@ -1381,8 +1370,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - 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: @@ -1423,8 +1412,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-corejs3@0.10.4: - resolution: {integrity: sha512-25J6I8NGfa5YkCDogHRID3fVCadIR8/pGl1/spvCkzb6lVn6SR3ojpx9nOn9iEBcUsjY24AmdKm5khcfKdylcg==} + babel-plugin-polyfill-corejs3@0.10.6: + resolution: {integrity: sha512-b37+KR2i/khY5sKmWNVQAnitvquQbNdWy6lJdsr0kmquCKEEUgMKK4SboVM3HtfnZilfjr4MMQ7vY58FVWDtIA==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1433,8 +1422,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-preset-current-node-syntax@1.0.1: - resolution: {integrity: sha512-M7LQ0bxarkxQoN+vz5aJPsLBn77n8QgTFmo8WK0/44auK2xlCXrYcUxHFxgU7qW5Yzw/CjmLRK2uJzaCd7LvqQ==} + babel-preset-current-node-syntax@1.1.0: + resolution: {integrity: sha512-ldYss8SbBlWva1bs28q78Ju5Zq1F+8BrqBZZ0VFhLBvhh6lCpC2o3gDJi/5DRLs9FgYZCnmPYIVFU4lRXCkyUw==} peerDependencies: '@babel/core': ^7.0.0 @@ -1461,8 +1450,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 @@ -1472,10 +1461,6 @@ packages: buffer-from@1.1.2: resolution: {integrity: sha512-E+XQCRwSbaaiChtv6k6Dwgc+bx+Bs6vuKJHHl5kox/BaKbhiXzqQOwK4cO22yElGp2OCmjwVhT3HmxgyPGnJfQ==} - builtin-modules@3.3.0: - resolution: {integrity: sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==} - engines: {node: '>=6'} - call-bind@1.0.7: resolution: {integrity: sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==} engines: {node: '>= 0.4'} @@ -1492,8 +1477,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001642: - resolution: {integrity: sha512-3XQ0DoRgLijXJErLSl+bLnJ+Et4KqV1PY6JJBGAFlsNsz31zeAIncyeZfLCabHK/jtSh+671RM9YMldxjUPZtA==} + 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==} @@ -1515,12 +1500,8 @@ packages: resolution: {integrity: sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==} engines: {node: '>=8'} - cjs-module-lexer@1.3.1: - resolution: {integrity: sha512-a3KdPAANPbNE4ZUv9h6LckSl9zLsYOP4MBmhIPkRaeyybt+r4UghLvq+xw/YwUcC1gqylCkL4rdVs3Lwupjm4Q==} - - cli-spinners@2.9.2: - resolution: {integrity: sha512-ywqV+5MmyL4E7ybXgKys4DugZbX0FC6LnwrhjuykIjnK9k8OQacQ7axGKnjDXWNhns0xot3bZI5h55H8yo9cJg==} - engines: {node: '>=6'} + cjs-module-lexer@1.4.1: + resolution: {integrity: sha512-cuSVIHi9/9E/+821Qjdvngor+xpnlwnuwIyZOaLmHBVdXL+gP+I6QQB9VkO7RI77YIcTV+S1W9AreJ5eN63JBA==} cli-width@4.1.0: resolution: {integrity: sha512-ouuZd4/dm2Sw5Gmqy6bGyNNNe1qt9RpmxveLSO7KcgsTnU7RXfsw+/bukWGo1abgBiMAic068rclZsO4IWmmxQ==} @@ -1571,8 +1552,8 @@ packages: resolution: {integrity: sha512-YZ3GUyn/o8gfKJlnlX7g7xq4gyO6OSuhGPKaaGssGB2qgDUS0gPgtTvoyZLTt9Ab6dC4hfc9dV5arkvc/OCmrw==} engines: {node: '>= 0.6'} - core-js-compat@3.37.1: - resolution: {integrity: sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==} + core-js-compat@3.38.1: + resolution: {integrity: sha512-JRH6gfXxGmrzF3tZ57lFx97YARxCXPaMzPo6jELZhv88pBH5VXpQ+y0znKGlFnzuaihqhLbefxSJxWJMPtfDzw==} create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} @@ -1622,8 +1603,8 @@ packages: supports-color: optional: true - debug@4.3.5: - resolution: {integrity: sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==} + debug@4.3.7: + resolution: {integrity: sha512-Er2nc/H7RrMXZBFCEim6TCmMk02Z8vLC2Rbi1KEBggpo0fS6l0S1nnapwmIi3yW/+GOJap1Krg4w0Hg80oCqgQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1697,8 +1678,8 @@ packages: engines: {node: '>=12'} deprecated: Use your platform's native DOMException instead - electron-to-chromium@1.4.829: - resolution: {integrity: sha512-5qp1N2POAfW0u1qGAxXEtz6P7bO1m6gpZr5hdf5ve6lxpLM7MpiM4jIPz7xcrNlClQMafbyUDDWjlIQZ1Mw0Rw==} + electron-to-chromium@1.5.31: + resolution: {integrity: sha512-QcDoBbQeYt0+3CWcK/rEbuHvwpbT/8SV9T3OSgs6cX1FlcUAkgrkqbg9zLnDrMM/rLamzQwal4LYFCiWk861Tg==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -1707,10 +1688,6 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - enhanced-resolve@5.17.0: - resolution: {integrity: sha512-dwDPwZL0dmye8Txp2gzFmA6sxALaSvdRDjPH0viLcKrtlOL3tw62nWWweVD1SdILDTJrbrL6tdWVN58Wo6U3eA==} - engines: {node: '>=10.13.0'} - entities@4.5.0: resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} engines: {node: '>=0.12'} @@ -1745,8 +1722,8 @@ packages: resolution: {integrity: sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA==} engines: {node: '>= 0.4'} - escalade@3.1.2: - resolution: {integrity: sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==} + escalade@3.2.0: + resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} escape-string-regexp@1.0.5: @@ -1769,15 +1746,8 @@ packages: eslint-import-resolver-node@0.3.9: resolution: {integrity: sha512-WFj2isz22JahUv+B788TlO3N6zL3nNJGU8CcZbPZvVEkBPaJdCV4vy5wyghty5ROFbCRnm132v8BScu5/1BQ8g==} - eslint-import-resolver-typescript@3.6.1: - resolution: {integrity: sha512-xgdptdoi5W3niYeuQxKmzVDTATvLYqhpwmykwsh7f6HIOStGWEIL9iqZgQDF9u9OEzrRwR8no5q2VT+bjAujTg==} - engines: {node: ^14.18.0 || >=16.0.0} - peerDependencies: - eslint: '*' - eslint-plugin-import: '*' - - eslint-module-utils@2.8.1: - resolution: {integrity: sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==} + eslint-module-utils@2.12.0: + resolution: {integrity: sha512-wALZ0HFoytlyh/1+4wuZ9FJCD/leWHQzzrxJ8+rebyReSLk7LApMyd3WJaLVoN+D5+WIdJyDK1c6JnE65V4Zyg==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' @@ -1797,27 +1767,21 @@ packages: eslint-import-resolver-webpack: optional: true - eslint-plugin-deprecation@3.0.0: - resolution: {integrity: sha512-JuVLdNg/uf0Adjg2tpTyYoYaMbwQNn/c78P1HcccokvhtRphgnRjZDKmhlxbxYptppex03zO76f97DD/yQHv7A==} - peerDependencies: - eslint: ^8.0.0 - typescript: ^4.2.4 || ^5.0.0 - - eslint-plugin-import@2.29.1: - resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==} + eslint-plugin-import@2.31.0: + resolution: {integrity: sha512-ixmkI62Rbc2/w8Vfxyh1jQRTdRTF52VxwRVHl/ykPAmqG+Nb7/kNn+byLP0LxPgI7zWA16Jt82SybJInmMia3A==} engines: {node: '>=4'} peerDependencies: '@typescript-eslint/parser': '*' - eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 + eslint: ^2 || ^3 || ^4 || ^5 || ^6 || ^7.2.0 || ^8 || ^9 peerDependenciesMeta: '@typescript-eslint/parser': optional: true - eslint-plugin-jest@28.6.0: - resolution: {integrity: sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==} + eslint-plugin-jest@28.8.3: + resolution: {integrity: sha512-HIQ3t9hASLKm2IhIOqnu+ifw7uLZkIlR7RYNv7fMcEi/p0CIiJmfriStQS2LDkgtY4nyLbIZAD+JL347Yc2ETQ==} engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0} peerDependencies: - '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 + '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0 || ^8.0.0 eslint: ^7.0.0 || ^8.0.0 || ^9.0.0 jest: '*' peerDependenciesMeta: @@ -1836,8 +1800,8 @@ packages: eslint-plugin-jest: optional: true - eslint-plugin-testing-library@6.2.2: - resolution: {integrity: sha512-1E94YOTUDnOjSLyvOwmbVDzQi/WkKm3WVrMXu6SmBr6DN95xTGZmI6HJ/eOkSXh/DlheRsxaPsJvZByDBhWLVQ==} + eslint-plugin-testing-library@6.3.0: + resolution: {integrity: sha512-GYcEErTt6EGwE0bPDY+4aehfEBpB2gDBFKohir8jlATSUvzStEyzCx8QWB/14xeKc/AwyXkzScSzMHnFojkWrA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0, npm: '>=6'} peerDependencies: eslint: ^7.5.0 || ^8.0.0 @@ -1854,8 +1818,8 @@ packages: resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.57.0: - resolution: {integrity: sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==} + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} hasBin: true @@ -2013,9 +1977,6 @@ packages: resolution: {integrity: sha512-g0QYk1dZBxGwk+Ngc+ltRH2IBp2f7zBkBMBJZCDerh6EhlhSR6+9irMCuT/09zD6qkarHUSn529sK/yL4S27mg==} engines: {node: '>= 0.4'} - get-tsconfig@4.7.5: - resolution: {integrity: sha512-ZCuZCnlqNzjb4QprAzXKdpp/gh6KTxSJuw3IBsPnV/7fV4NxC9ckB+vPTt8w7fJA0TaSD7c55BR47JD6MEDyDw==} - givens@1.3.9: resolution: {integrity: sha512-4hYlStsEIaYeYvZTZwgD5yOS2WVP0dcDsOBqeImdEM8eLuclvv0IEMlQQ1kuA5DN4he7wVH1jsYtNe9uininxg==} @@ -2120,16 +2081,16 @@ packages: resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} engines: {node: '>=0.10.0'} - 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'} import-fresh@3.3.0: resolution: {integrity: sha512-veYYhQa+D1QBKznvhUHxb8faxlrwUnxseDAbAp457E0wLNio2bOSKnjYDhMj+YiAq61xrMGhQk9iXVk5FzgQMw==} engines: {node: '>=6'} - import-local@3.1.0: - resolution: {integrity: sha512-ASB07uLtnDs1o6EHjKpX34BKYDSqnFerfTOJL2HvMqF70LnxpjkzDB8J44oT9pu4AMPkQwf8jl6szgvNd2tRIg==} + import-local@3.2.0: + resolution: {integrity: sha512-2SPlun1JUPWoM6t3F0dw0FkCF/jWY8kttcY4f599GLTSjh2OCuuhdTkJQsEcZzBqbXZGKMK2OqW1oZsjtf/gQA==} engines: {node: '>=8'} hasBin: true @@ -2166,16 +2127,12 @@ packages: resolution: {integrity: sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA==} engines: {node: '>= 0.4'} - is-builtin-module@3.2.1: - resolution: {integrity: sha512-BSLE3HnV2syZ0FK0iMA/yUGplUeMmNz4AW5fnTunbCIqZi4vG3WjJT9FHMy5D69xmAYBHXQhJdALdpwVxV501A==} - engines: {node: '>=6'} - is-callable@1.2.7: resolution: {integrity: sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA==} engines: {node: '>= 0.4'} - is-core-module@2.14.0: - resolution: {integrity: sha512-a5dFJih5ZLYlRtDc0dZWP7RiKr6xIKzmn/oAYCDvdLThadVgyJwlaoQPmRtMSpz+rk0OGAgIu+TcM9HUF0fk1A==} + is-core-module@2.15.1: + resolution: {integrity: sha512-z0vtXSwucUJtANQWldhbtbt7BnL0vxiFjIdDLAatwhDYty2bad6s+rijD6Ri4YuYJubLzIJLUidCh09e1djEVQ==} engines: {node: '>= 0.4'} is-data-view@1.0.1: @@ -2462,13 +2419,9 @@ packages: canvas: optional: true - jsesc@0.5.0: - resolution: {integrity: sha512-uZz5UnB7u4T9LvwmFqXii7pZSouaRPorGs5who1Ip7VO0wxanFvBL7GkM6dTHlgX+jhBApRetaWpnDabOeTcnA==} - hasBin: true - - jsesc@2.5.2: - resolution: {integrity: sha512-OYu7XEzjkCQ3C5Ps3QIZsQfNpqoJyZZA99wd9aWd05NCtC5pWOkShK2mkL6HXQR6/Cy2lbNdPlZBpuQHXE63gA==} - engines: {node: '>=4'} + jsesc@3.0.2: + resolution: {integrity: sha512-xKqzzWXDttJuOcawBt4KnKHHIf5oQ/Cxax+0PWFG+DFDgHNAdi+TXECADI+RYiFUMmx8792xsMbbgXj4CwnP4g==} + engines: {node: '>=6'} hasBin: true json-buffer@3.0.1: @@ -2559,8 +2512,8 @@ packages: resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} engines: {node: '>= 8'} - micromatch@4.0.7: - resolution: {integrity: sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==} + micromatch@4.0.8: + resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} mime-db@1.52.0: @@ -2590,18 +2543,15 @@ packages: minimist@1.2.8: resolution: {integrity: sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA==} - ms@2.1.2: - resolution: {integrity: sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==} - ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.3.2: - resolution: {integrity: sha512-vDn6d6a50vxPE+HnaKQfpmZ4SVXlOjF97yD5FJcUT3v2/uZ65qvTYNL25yOmnrfCNWZ4wtAS7EbtXxygMug2Tw==} + msw@2.4.9: + resolution: {integrity: sha512-1m8xccT6ipN4PTqLinPwmzhxQREuxaEJYdx4nIbggxP8aM7r1e71vE7RtOUSQoAm1LydjGfZKy7370XD/tsuYg==} engines: {node: '>=18'} hasBin: true peerDependencies: - typescript: '>= 4.7.x' + typescript: '>= 4.8.x' peerDependenciesMeta: typescript: optional: true @@ -2621,8 +2571,8 @@ packages: node-int64@0.4.0: resolution: {integrity: sha512-O5lz91xSOeoXP6DulyHfllpq+Eg00MWitZIbtPfoSEvqIHdl5gfcY6hYzDWnj0qD5tz52PI08u9qUvSVeUBeHw==} - node-releases@2.0.17: - resolution: {integrity: sha512-Ww6ZlOiEQfPfXM45v17oabk77Z7mg5bOt7AjDyzy7RjK9OrLrLC8dyZQoAPEOtFX9SaNf1Tdvr5gRJWdTJj7GA==} + node-releases@2.0.18: + resolution: {integrity: sha512-d9VeXT4SJ7ZeOqGX6R5EM022wpL+eWPooLI+5UpWn2jCT1aosUQEhQP214x33Wkwx3JQMvIm+tIoVOdodFS40g==} normalize-path@3.0.0: resolution: {integrity: sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==} @@ -2636,8 +2586,8 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - nwsapi@2.2.12: - resolution: {integrity: sha512-qXDmcVlZV4XRtKFzddidpfVP4oMSGhga+xdMc25mv8kaLUHtgzCDhUxkrN8exkGdTlLNaXj7CV3GtON7zuGZ+w==} + nwsapi@2.2.13: + resolution: {integrity: sha512-cTGB9ptp9dY9A5VbMSe7fQBcl/tt22Vcqdq8+eN93rblOuE0aCFu4aZ2vMwct/2t+lFnosm8RkQW1I0Omb1UtQ==} object-inspect@1.13.2: resolution: {integrity: sha512-IRZSRuzJiynemAXPYtPe5BoI/RESNYR7TYm50MC5Mqbd3Jmw5y790sErYw3V6SryFJD64b74qQQs9wn5Bg/k3g==} @@ -2727,8 +2677,8 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-to-regexp@6.2.2: - resolution: {integrity: sha512-GQX3SSMokngb36+whdpRXE+3f9V8UzyAorlYvOGx87ufGHehNTn5lCxrKtLyZ4Yl/wEKnNnr98ZzOwwDZV5ogw==} + path-to-regexp@6.3.0: + resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} path-type@4.0.0: resolution: {integrity: sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw==} @@ -2738,8 +2688,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==} @@ -2761,13 +2711,13 @@ packages: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.45.2: - resolution: {integrity: sha512-ha175tAWb0dTK0X4orvBIqi3jGEt701SMxMhyujxNrgd8K0Uy5wMSwwcQHtyB4om7INUkfndx02XnQ2p6dvLDw==} + playwright-core@1.47.2: + resolution: {integrity: sha512-3JvMfF+9LJfe16l7AbSmU555PaTl2tPyQsVInqm3id16pdDfvZ8TTZ/pyzmkbDrZTQefyzU7AIHlZqQnxpqHVQ==} engines: {node: '>=18'} hasBin: true - playwright@1.45.2: - resolution: {integrity: sha512-ReywF2t/0teRvNBpfIgh5e4wnrI/8Su8ssdo5XsQKpjxJj+jspm00jSoz9BTg91TT0c9HRjXO7LBNVrgYj9X0g==} + playwright@1.47.2: + resolution: {integrity: sha512-nx1cLMmQWqmA3UsnjaaokyoUpdVaaDhJhMoxX2qj3McpjnsqFHs516QAKYhqHAgOP+oCFTEOCOAaD1RgD/RQfA==} engines: {node: '>=18'} hasBin: true @@ -2821,8 +2771,8 @@ packages: yaml: optional: true - postcss-nested@6.0.1: - resolution: {integrity: sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==} + postcss-nested@6.2.0: + resolution: {integrity: sha512-HQbt28KulC5AJzG+cZtj9kvKB93CFCdLvog1WFLf1D+xmMvPGlBstkpTEZfK5+AN9hfJocyBFCNiqyS48bpgzQ==} engines: {node: '>=12.0'} peerDependencies: postcss: ^8.2.14 @@ -2833,15 +2783,15 @@ packages: peerDependencies: postcss: ^8.1.0 - 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.39: - resolution: {integrity: sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==} + postcss@8.4.47: + resolution: {integrity: sha512-56rxCq7G/XfB4EkXq9Egn5GCqugWvDFjafDOThIdMBsI15iqPqR5r15TfSr1YPYeEI19YeaXMCbY6u88Y76GLQ==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: @@ -2901,8 +2851,8 @@ packages: resolution: {integrity: sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==} engines: {node: '>=8.10.0'} - regenerate-unicode-properties@10.1.1: - resolution: {integrity: sha512-X007RyZLsCJVVrjgEFVpLUTZwyOZk3oiL75ZcuYjlIWd6rNJtOjkBwQc5AsRrpbKVkxN6sklw/k/9m2jJYOf8Q==} + regenerate-unicode-properties@10.2.0: + resolution: {integrity: sha512-DqHn3DwbmmPVzeKj9woBadqmXxLvQoQIwu7nopMc72ztvxVmVk2SBhSnx67zuye5TP+lJsb/TBQsjLKhnDf3MA==} engines: {node: '>=4'} regenerate@1.4.2: @@ -2914,16 +2864,19 @@ packages: regenerator-transform@0.15.2: resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regexp.prototype.flags@1.5.2: - resolution: {integrity: sha512-NcDiDkTLuPR+++OCKB0nWafEmhg/Da8aUPLPMQbK+bxKKCm1/S5he+AqYa4PlMCVBalb4/yxIRub6qkEx5yJbw==} + regexp.prototype.flags@1.5.3: + resolution: {integrity: sha512-vqlC04+RQoFalODCbCumG2xIOvapzVMHwsyIGM/SIE8fRhFFsXeH8/QQ+s0T0kDAhKc4k30s73/0ydkHQz6HlQ==} engines: {node: '>= 0.4'} - regexpu-core@5.3.2: - resolution: {integrity: sha512-RAM5FlZz+Lhmo7db9L298p2vHP5ZywrVXmVXpmAD9GuL5MPH6t9ROw1iA/wfHkQ76Qe7AaPF0nGuim96/IrQMQ==} + regexpu-core@6.1.1: + resolution: {integrity: sha512-k67Nb9jvwJcJmVpw0jPttR1/zVfnKf8Km0IPatrU/zJ5XeG3+Slx0xLXs9HByJSzXzrlz5EDvN6yLNMDc2qdnw==} engines: {node: '>=4'} - regjsparser@0.9.1: - resolution: {integrity: sha512-dQUtn90WanSNl+7mQKcXAgZxvUe7Z0SqXlgzv0za4LwiUhyzBC58yQO3liFoUgu8GiJVInAhJjkj1N0EtQ5nkQ==} + regjsgen@0.8.0: + resolution: {integrity: sha512-RvwtGe3d7LvWiDQXeQw8p5asZUmfU1G/l6WbUXeHta7Y2PEIvBTwH6E2EfmYUK8pxcxEdEmaomqyp0vZZ7C+3Q==} + + regjsparser@0.11.0: + resolution: {integrity: sha512-vTbzVAjQDzwQdKuvj7qEq6OlAprCjE656khuGQ4QaBLg7abQ9I9ISpmLuc6inWe7zP75AECjqUa4g4sdQvOXhg==} hasBin: true require-directory@2.1.1: @@ -2945,9 +2898,6 @@ packages: resolution: {integrity: sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==} engines: {node: '>=8'} - resolve-pkg-maps@1.0.0: - resolution: {integrity: sha512-seS2Tj26TBVOC2NIc2rOe2y2ZO7efxITtLZcGSOnHHNOQ7CkiUBfw0Iw2ck6xkIhPwLhKNLS8BO+hEpngQlqzw==} - resolve.exports@2.0.2: resolution: {integrity: sha512-X2UW6Nw3n/aMgDVy+0rSqgHlv39WZAlZrXCdnbyEiKm17DSqHX4MmQMaST3FbeWR5FTuRcUwYAziZajji0Y7mg==} engines: {node: '>=10'} @@ -2968,8 +2918,8 @@ packages: rollup-plugin-serve@3.0.0: resolution: {integrity: sha512-DjVRhbwC0OgP1Q1sj8Lvx12ee60UTZM767kkjT61sYKHw/wLpANAw3VZN5ZMa5NlvO8bYpfTaqiUrW+icAjXFg==} - rollup@4.18.1: - resolution: {integrity: sha512-Elx2UT8lzxxOXMpy5HWQGZqkrQOtrVDDa/bm9l10+U4rQnVzbL/LgZ4NOM1MPIDyHk69W4InuYDF5dzRh4Kw1A==} + rollup@4.24.0: + resolution: {integrity: sha512-DOmrlGSXNk1DM0ljiQA+i+o0rSLhtii1je5wgk60j49d1jHT5YYttBv1iWOnYSTG+fZZESUOSNiAl89SIet+Cg==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3055,8 +3005,8 @@ packages: smob@1.5.0: resolution: {integrity: sha512-g6T+p7QO8npa+/hNx9ohv1E5pVCmWrVCUzUXJyLdMmftX6ER0oiWY/w9knEonLpnOp6b6FenKnMfR8gqwWdwig==} - 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'} source-map-support@0.5.13: @@ -3141,12 +3091,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - tapable@2.2.1: - resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} - engines: {node: '>=6'} - - terser@5.31.3: - resolution: {integrity: sha512-pAfYn3NIZLyZpa83ZKigvj6Rn9c/vd5KfYGX7cN1mnzqgDcxWvrU5ZtAfIKhEXz9nRecw4z3LXkjaq96/qZqAA==} + terser@5.34.1: + resolution: {integrity: sha512-FsJZ7iZLd/BXkz+4xrRTGJ26o/6VTjQytUk8b8OxkwcD2I+79VPJlz7qss1+zE7h8GNIScFqXcDyJ/KqBYZFVA==} engines: {node: '>=10'} hasBin: true @@ -3191,8 +3137,8 @@ packages: tslib@1.14.1: resolution: {integrity: sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==} - tslib@2.6.3: - resolution: {integrity: sha512-xNvxJEOUiWPGhUuUdQgAJPKOOJfGnIyKySOc09XkKsgdUV/3E2zvwZYdejjmRgPCgcym1juLH3226yA7sEFJKQ==} + tslib@2.7.0: + resolution: {integrity: sha512-gLXCKdN1/j47AiHiOkJN69hJmcbGTHI0ImLmbYLHykhgeN0jVGola9yVjFgzCUklsZQMW55o+dW7IXv3RCXDzA==} tsutils@3.21.0: resolution: {integrity: sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==} @@ -3216,8 +3162,8 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@4.22.0: - resolution: {integrity: sha512-hxMO1k4ip1uTVGgPbs1hVpYyhz2P91A6tQyH2H9POx3U6T3MdhIcfY8L2hRu/LRmzPFdfduOS0RIDjFlP2urPw==} + type-fest@4.26.1: + resolution: {integrity: sha512-yOGpmOAL7CkKe/91I5O3gPICmJNLJ1G4zFYVAsRHg7M64biSnPtRj0WNQt++bRkjYOqjWXrhnUw1utzmVErAdg==} engines: {node: '>=16'} typed-array-buffer@1.0.2: @@ -3236,31 +3182,40 @@ packages: resolution: {integrity: sha512-/OxDN6OtAk5KBpGb28T+HZc2M+ADtvRxXrKKbUwtsLgdoxgX13hyy7ek6bFRl5+aBs2yZzB0c4CnQfAtVypW/g==} engines: {node: '>= 0.4'} - typescript@5.5.3: - resolution: {integrity: sha512-/hreyEujaB0w76zKo6717l3L0o/qEUtRgdvUBvlkhoWeOVMjMuHNHk0BRBzikzuGDqNmPQbg5ifMEqsHLiIUcQ==} + typescript-eslint@8.8.0: + resolution: {integrity: sha512-BjIT/VwJ8+0rVO01ZQ2ZVnjE1svFBiRczcpr1t1Yxt7sT25VSbPfrJtDsQ8uQTy2pilX5nI9gwxhUyLULNentw==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} + peerDependencies: + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + + typescript@5.6.2: + resolution: {integrity: sha512-NW8ByodCSNCwZeghjN3o+JX5OFH0Ojg6sadjEKY4huZ52TqbJTJnDo5+Tw98lSy63NZvi4n+ez5m2u5d4PkZyw==} engines: {node: '>=14.17'} hasBin: true unbox-primitive@1.0.2: resolution: {integrity: sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw==} - undici-types@5.26.5: - resolution: {integrity: sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==} + 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.0: - resolution: {integrity: sha512-yY5PpDlfVIU5+y/BSCxAJRBIS1Zc2dDG3Ujq+sR0U+JjUevW2JhocOF+soROYDSaAezOzOKuyyixhD6mBknSmQ==} + unicode-canonical-property-names-ecmascript@2.0.1: + resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} engines: {node: '>=4'} unicode-match-property-ecmascript@2.0.0: resolution: {integrity: sha512-5kaZCrbp5mmbz5ulBkDkbY0SsPOjKqVS35VpL9ulMPfSl0J0Xsm+9Evphv9CoIZFwre7aJoa94AY6seMKGVN5Q==} engines: {node: '>=4'} - unicode-match-property-value-ecmascript@2.1.0: - resolution: {integrity: sha512-qxkjQt6qjg/mYscYMC0XKRn3Rh0wFPlfxB0xkt9CfyTvpX1Ra0+rAmdX2QyAobptSEvuy4RtpPRui6XkV+8wjA==} + unicode-match-property-value-ecmascript@2.2.0: + resolution: {integrity: sha512-4IehN3V/+kkr5YeSSDDQG8QLqO26XpL2XP3GQtqwlT/QYSECAwFztxVHjlbh0+gjJ3XmNLS0zDsbgs9jWKExLg==} engines: {node: '>=4'} unicode-property-aliases-ecmascript@2.1.0: @@ -3279,8 +3234,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' @@ -3378,8 +3333,8 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@2.4.5: - resolution: {integrity: sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==} + yaml@2.5.1: + resolution: {integrity: sha512-bLQOjaX/ADgQ20isPJRvF0iRUHIxVhYvr53Of7wGcWlO2jvtUlH5m87DsmulFVxRpNLOnI4tB6p/oh8D7kpn9Q==} engines: {node: '>= 14'} hasBin: true @@ -3406,9 +3361,9 @@ snapshots: '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - '@babel/cli@7.24.8(@babel/core@7.24.9)': + '@babel/cli@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.7 '@jridgewell/trace-mapping': 0.3.25 commander: 6.2.1 convert-source-map: 2.0.0 @@ -3420,808 +3375,800 @@ snapshots: '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 chokidar: 3.6.0 - '@babel/code-frame@7.24.7': + '@babel/code-frame@7.25.7': dependencies: - '@babel/highlight': 7.24.7 - picocolors: 1.0.1 + '@babel/highlight': 7.25.7 + picocolors: 1.1.0 - '@babel/compat-data@7.24.9': {} + '@babel/compat-data@7.25.7': {} - '@babel/core@7.24.9': + '@babel/core@7.25.7': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.10 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) - '@babel/helpers': 7.24.8 - '@babel/parser': 7.24.8 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@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 convert-source-map: 2.0.0 - debug: 4.3.5 + debug: 4.3.7 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.24.10': + '@babel/generator@7.25.7': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.7 '@jridgewell/gen-mapping': 0.3.5 '@jridgewell/trace-mapping': 0.3.25 - jsesc: 2.5.2 + jsesc: 3.0.2 - '@babel/helper-annotate-as-pure@7.24.7': + '@babel/helper-annotate-as-pure@7.25.7': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.7 - '@babel/helper-builder-binary-assignment-operator-visitor@7.24.7': + '@babel/helper-builder-binary-assignment-operator-visitor@7.25.7': dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-compilation-targets@7.24.8': + '@babel/helper-compilation-targets@7.25.7': dependencies: - '@babel/compat-data': 7.24.9 - '@babel/helper-validator-option': 7.24.8 - browserslist: 4.23.2 + '@babel/compat-data': 7.25.7 + '@babel/helper-validator-option': 7.25.7 + browserslist: 4.24.0 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.24.8(@babel/core@7.24.9)': - dependencies: - '@babel/core': 7.24.9 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.8 - '@babel/helper-optimise-call-expression': 7.24.7 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 + '@babel/helper-create-class-features-plugin@7.25.7(@babel/core@7.25.7)': + 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 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.24.7(@babel/core@7.24.9)': + '@babel/helper-create-regexp-features-plugin@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-annotate-as-pure': 7.24.7 - regexpu-core: 5.3.2 + '@babel/core': 7.25.7 + '@babel/helper-annotate-as-pure': 7.25.7 + regexpu-core: 6.1.1 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.24.9)': + '@babel/helper-define-polyfill-provider@0.6.2(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-plugin-utils': 7.24.8 - debug: 4.3.5 + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + debug: 4.3.7 lodash.debounce: 4.0.8 resolve: 1.22.8 transitivePeerDependencies: - supports-color - '@babel/helper-environment-visitor@7.24.7': - dependencies: - '@babel/types': 7.24.9 - - '@babel/helper-function-name@7.24.7': + '@babel/helper-member-expression-to-functions@7.25.7': dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.9 - - '@babel/helper-hoist-variables@7.24.7': - dependencies: - '@babel/types': 7.24.9 - - '@babel/helper-member-expression-to-functions@7.24.8': - dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.24.7': + '@babel/helper-module-imports@7.25.7': dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.24.9(@babel/core@7.24.9)': + '@babel/helper-module-transforms@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-simple-access': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/helper-validator-identifier': 7.24.7 + '@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 transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.24.7': + '@babel/helper-optimise-call-expression@7.25.7': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.7 - '@babel/helper-plugin-utils@7.24.8': {} + '@babel/helper-plugin-utils@7.25.7': {} - '@babel/helper-remap-async-to-generator@7.24.7(@babel/core@7.24.9)': + '@babel/helper-remap-async-to-generator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-wrap-function': 7.24.7 + '@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 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.24.7(@babel/core@7.24.9)': + '@babel/helper-replace-supers@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-member-expression-to-functions': 7.24.8 - '@babel/helper-optimise-call-expression': 7.24.7 + '@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 transitivePeerDependencies: - supports-color - '@babel/helper-simple-access@7.24.7': + '@babel/helper-simple-access@7.25.7': dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.24.7': + '@babel/helper-skip-transparent-expression-wrappers@7.25.7': dependencies: - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helper-split-export-declaration@7.24.7': - dependencies: - '@babel/types': 7.24.9 - - '@babel/helper-string-parser@7.24.8': {} + '@babel/helper-string-parser@7.25.7': {} - '@babel/helper-validator-identifier@7.24.7': {} + '@babel/helper-validator-identifier@7.25.7': {} - '@babel/helper-validator-option@7.24.8': {} + '@babel/helper-validator-option@7.25.7': {} - '@babel/helper-wrap-function@7.24.7': + '@babel/helper-wrap-function@7.25.7': dependencies: - '@babel/helper-function-name': 7.24.7 - '@babel/template': 7.24.7 - '@babel/traverse': 7.24.8 - '@babel/types': 7.24.9 + '@babel/template': 7.25.7 + '@babel/traverse': 7.25.7 + '@babel/types': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/helpers@7.24.8': + '@babel/helpers@7.25.7': dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.9 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 - '@babel/highlight@7.24.7': + '@babel/highlight@7.25.7': dependencies: - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-validator-identifier': 7.25.7 chalk: 2.4.2 js-tokens: 4.0.0 - picocolors: 1.0.1 + picocolors: 1.1.0 - '@babel/parser@7.24.8': + '@babel/parser@7.25.7': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.7 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.9) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.7(@babel/core@7.25.7)': + 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) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.9)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.7 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.24.9)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.24.9)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.24.9)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-dynamic-import@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-export-namespace-from@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-import-assertions@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-syntax-import-assertions@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-import-attributes@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-syntax-import-attributes@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.24.9)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-jsx@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-syntax-jsx@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.24.9)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.24.9)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.24.9)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@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.24.9)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.24.9)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-typescript@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-syntax-typescript@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.24.9)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 + '@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-arrow-functions@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-arrow-functions@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-async-generator-functions@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-async-generator-functions@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.9) + '@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 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-async-to-generator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-module-imports': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-remap-async-to-generator': 7.24.7(@babel/core@7.24.9) + '@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) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-block-scoped-functions@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-block-scoping@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-block-scoping@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-class-properties@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-class-properties@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 + '@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 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-class-static-block@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.9) + '@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) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-classes@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) - '@babel/helper-split-export-declaration': 7.24.7 + '@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 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-computed-properties@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/template': 7.24.7 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/template': 7.25.7 - '@babel/plugin-transform-destructuring@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-destructuring@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-dotall-regex@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-dotall-regex@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 + '@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-duplicate-keys@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-duplicate-keys@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-dynamic-import@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.9) + '@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-exponentiation-operator@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-dynamic-import@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-builder-binary-assignment-operator-visitor': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 + '@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/plugin-transform-exponentiation-operator@7.25.7(@babel/core@7.25.7)': + dependencies: + '@babel/core': 7.25.7 + '@babel/helper-builder-binary-assignment-operator-visitor': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-export-namespace-from@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-export-namespace-from@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.9) + '@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/plugin-transform-for-of@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-for-of@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-function-name@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-compilation-targets': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/traverse': 7.25.7 + transitivePeerDependencies: + - supports-color - '@babel/plugin-transform-json-strings@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-json-strings@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.9) + '@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/plugin-transform-literals@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-literals@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-logical-assignment-operators@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-logical-assignment-operators@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.9) + '@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/plugin-transform-member-expression-literals@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-member-expression-literals@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-modules-amd@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-modules-amd@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-modules-commonjs@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-simple-access': 7.24.7 + '@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 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-modules-systemjs@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 + '@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 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-modules-umd@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-module-transforms': 7.24.9(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-module-transforms': 7.25.7(@babel/core@7.25.7) + '@babel/helper-plugin-utils': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-named-capturing-groups-regex@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 + '@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-new-target@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-new-target@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-nullish-coalescing-operator@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-nullish-coalescing-operator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.9) + '@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/plugin-transform-numeric-separator@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-numeric-separator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.9) + '@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/plugin-transform-object-rest-spread@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-object-rest-spread@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.9) + '@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/plugin-transform-object-super@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-object-super@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-replace-supers': 7.24.7(@babel/core@7.24.9) + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-replace-supers': 7.25.7(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-optional-catch-binding@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.9) + '@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/plugin-transform-optional-chaining@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-optional-chaining@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.9) + '@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) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-parameters@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-private-methods@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-private-methods@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 + '@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 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-private-property-in-object@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.9) + '@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) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-property-literals@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-regenerator@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-regenerator@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 regenerator-transform: 0.15.2 - '@babel/plugin-transform-reserved-words@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-reserved-words@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-shorthand-properties@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-shorthand-properties@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-spread@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-spread@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-skip-transparent-expression-wrappers': 7.24.7 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/helper-skip-transparent-expression-wrappers': 7.25.7 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-sticky-regex@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-template-literals@7.24.7(@babel/core@7.24.9)': + '@babel/plugin-transform-template-literals@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-typeof-symbol@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-typeof-symbol@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 - '@babel/plugin-transform-typescript@7.24.8(@babel/core@7.24.9)': + '@babel/plugin-transform-typescript@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-annotate-as-pure': 7.24.7 - '@babel/helper-create-class-features-plugin': 7.24.8(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.9) + '@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) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.24.7(@babel/core@7.24.9)': - dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-property-regex@7.24.7(@babel/core@7.24.9)': - dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-regex@7.24.7(@babel/core@7.24.9)': - dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/plugin-transform-unicode-sets-regex@7.24.7(@babel/core@7.24.9)': - dependencies: - '@babel/core': 7.24.9 - '@babel/helper-create-regexp-features-plugin': 7.24.7(@babel/core@7.24.9) - '@babel/helper-plugin-utils': 7.24.8 - - '@babel/preset-env@7.24.8(@babel/core@7.24.9)': - dependencies: - '@babel/compat-data': 7.24.9 - '@babel/core': 7.24.9 - '@babel/helper-compilation-targets': 7.24.8 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.24.9) - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.24.9) - '@babel/plugin-syntax-dynamic-import': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-export-namespace-from': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-import-assertions': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-syntax-import-attributes': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.24.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.9) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.24.9) - '@babel/plugin-transform-arrow-functions': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-async-generator-functions': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-async-to-generator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-block-scoped-functions': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-block-scoping': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-class-properties': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-class-static-block': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-classes': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-computed-properties': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-destructuring': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-dotall-regex': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-duplicate-keys': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-dynamic-import': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-exponentiation-operator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-export-namespace-from': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-for-of': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-function-name': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-json-strings': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-literals': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-logical-assignment-operators': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-member-expression-literals': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-modules-amd': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-modules-systemjs': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-modules-umd': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-new-target': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-numeric-separator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-object-rest-spread': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-object-super': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-optional-catch-binding': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-optional-chaining': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-parameters': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-private-methods': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-private-property-in-object': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-property-literals': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-regenerator': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-reserved-words': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-shorthand-properties': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-spread': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-sticky-regex': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-template-literals': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-typeof-symbol': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-unicode-escapes': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-unicode-property-regex': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-unicode-regex': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-unicode-sets-regex': 7.24.7(@babel/core@7.24.9) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.24.9) - babel-plugin-polyfill-corejs2: 0.4.11(@babel/core@7.24.9) - babel-plugin-polyfill-corejs3: 0.10.4(@babel/core@7.24.9) - babel-plugin-polyfill-regenerator: 0.6.2(@babel/core@7.24.9) - core-js-compat: 3.37.1 + '@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 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.24.9)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/types': 7.24.9 + '@babel/core': 7.25.7 + '@babel/helper-plugin-utils': 7.25.7 + '@babel/types': 7.25.7 esutils: 2.0.3 - '@babel/preset-typescript@7.24.7(@babel/core@7.24.9)': + '@babel/preset-typescript@7.25.7(@babel/core@7.25.7)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-plugin-utils': 7.24.8 - '@babel/helper-validator-option': 7.24.8 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-transform-modules-commonjs': 7.24.8(@babel/core@7.24.9) - '@babel/plugin-transform-typescript': 7.24.8(@babel/core@7.24.9) + '@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) transitivePeerDependencies: - supports-color - '@babel/regjsgen@0.8.0': {} - - '@babel/runtime@7.24.8': + '@babel/runtime@7.25.7': dependencies: regenerator-runtime: 0.14.1 - '@babel/template@7.24.7': + '@babel/template@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 + '@babel/code-frame': 7.25.7 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 - '@babel/traverse@7.24.8': + '@babel/traverse@7.25.7': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/generator': 7.24.10 - '@babel/helper-environment-visitor': 7.24.7 - '@babel/helper-function-name': 7.24.7 - '@babel/helper-hoist-variables': 7.24.7 - '@babel/helper-split-export-declaration': 7.24.7 - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 - debug: 4.3.5 + '@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 + debug: 4.3.7 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.24.9': + '@babel/types@7.25.7': dependencies: - '@babel/helper-string-parser': 7.24.8 - '@babel/helper-validator-identifier': 7.24.7 + '@babel/helper-string-parser': 7.25.7 + '@babel/helper-validator-identifier': 7.25.7 to-fast-properties: 2.0.0 '@bcoe/v8-coverage@0.2.3': {} @@ -4234,20 +4181,25 @@ snapshots: dependencies: statuses: 2.0.1 - '@eslint-community/eslint-utils@4.4.0(eslint@8.57.0)': + '@bundled-es-modules/tough-cookie@0.1.6': + dependencies: + '@types/tough-cookie': 4.0.5 + tough-cookie: 4.1.4 + + '@eslint-community/eslint-utils@4.4.0(eslint@8.57.1)': dependencies: - eslint: 8.57.0 + eslint: 8.57.1 eslint-visitor-keys: 3.4.3 - '@eslint-community/regexpp@4.11.0': {} + '@eslint-community/regexpp@4.11.1': {} '@eslint/eslintrc@2.1.4': dependencies: ajv: 6.12.6 - debug: 4.3.5 + debug: 4.3.7 espree: 9.6.1 globals: 13.24.0 - ignore: 5.3.1 + ignore: 5.3.2 import-fresh: 3.3.0 js-yaml: 4.1.0 minimatch: 3.1.2 @@ -4255,14 +4207,14 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@8.57.0': {} + '@eslint/js@8.57.1': {} '@fastify/busboy@2.1.1': {} - '@humanwhocodes/config-array@0.11.14': + '@humanwhocodes/config-array@0.13.0': dependencies: '@humanwhocodes/object-schema': 2.0.3 - debug: 4.3.5 + debug: 4.3.7 minimatch: 3.1.2 transitivePeerDependencies: - supports-color @@ -4271,20 +4223,19 @@ snapshots: '@humanwhocodes/object-schema@2.0.3': {} - '@inquirer/confirm@3.1.15': + '@inquirer/confirm@3.2.0': dependencies: - '@inquirer/core': 9.0.3 - '@inquirer/type': 1.5.0 + '@inquirer/core': 9.2.1 + '@inquirer/type': 1.5.5 - '@inquirer/core@9.0.3': + '@inquirer/core@9.2.1': dependencies: - '@inquirer/figures': 1.0.4 - '@inquirer/type': 1.5.0 + '@inquirer/figures': 1.0.6 + '@inquirer/type': 2.0.0 '@types/mute-stream': 0.0.4 - '@types/node': 20.14.11 + '@types/node': 22.7.4 '@types/wrap-ansi': 3.0.0 ansi-escapes: 4.3.2 - cli-spinners: 2.9.2 cli-width: 4.1.0 mute-stream: 1.0.0 signal-exit: 4.1.0 @@ -4292,9 +4243,13 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 - '@inquirer/figures@1.0.4': {} + '@inquirer/figures@1.0.6': {} - '@inquirer/type@1.5.0': + '@inquirer/type@1.5.5': + dependencies: + mute-stream: 1.0.0 + + '@inquirer/type@2.0.0': dependencies: mute-stream: 1.0.0 @@ -4311,7 +4266,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 22.7.4 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -4324,14 +4279,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 22.7.4 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@20.14.11) + jest-config: 29.7.0(@types/node@22.7.4) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -4343,7 +4298,7 @@ snapshots: jest-util: 29.7.0 jest-validate: 29.7.0 jest-watcher: 29.7.0 - micromatch: 4.0.7 + micromatch: 4.0.8 pretty-format: 29.7.0 slash: 3.0.0 strip-ansi: 6.0.1 @@ -4356,7 +4311,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 22.7.4 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -4374,7 +4329,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 20.14.11 + '@types/node': 22.7.4 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -4396,7 +4351,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 20.14.11 + '@types/node': 22.7.4 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -4443,7 +4398,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.7 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -4454,7 +4409,7 @@ snapshots: jest-haste-map: 29.7.0 jest-regex-util: 29.6.3 jest-util: 29.7.0 - micromatch: 4.0.7 + micromatch: 4.0.8 pirates: 4.0.6 slash: 3.0.0 write-file-atomic: 4.0.2 @@ -4466,8 +4421,8 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 20.14.11 - '@types/yargs': 17.0.32 + '@types/node': 22.7.4 + '@types/yargs': 17.0.33 chalk: 4.1.2 '@jridgewell/gen-mapping@0.3.5': @@ -4492,9 +4447,7 @@ snapshots: '@jridgewell/resolve-uri': 3.1.2 '@jridgewell/sourcemap-codec': 1.5.0 - '@mswjs/cookies@1.1.1': {} - - '@mswjs/interceptors@0.29.1': + '@mswjs/interceptors@0.35.9': dependencies: '@open-draft/deferred-promise': 2.2.0 '@open-draft/logger': 0.3.0 @@ -4527,96 +4480,97 @@ snapshots: '@open-draft/until@2.1.0': {} - '@playwright/test@1.45.2': + '@playwright/test@1.47.2': dependencies: - playwright: 1.45.2 + playwright: 1.47.2 - '@rollup/plugin-babel@6.0.4(@babel/core@7.24.9)(@types/babel__core@7.20.5)(rollup@4.18.1)': + '@rollup/plugin-babel@6.0.4(@babel/core@7.25.7)(@types/babel__core@7.20.5)(rollup@4.24.0)': dependencies: - '@babel/core': 7.24.9 - '@babel/helper-module-imports': 7.24.7 - '@rollup/pluginutils': 5.1.0(rollup@4.18.1) + '@babel/core': 7.25.7 + '@babel/helper-module-imports': 7.25.7 + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) optionalDependencies: '@types/babel__core': 7.20.5 - rollup: 4.18.1 + rollup: 4.24.0 transitivePeerDependencies: - supports-color - '@rollup/plugin-node-resolve@15.2.3(rollup@4.18.1)': + '@rollup/plugin-node-resolve@15.3.0(rollup@4.24.0)': dependencies: - '@rollup/pluginutils': 5.1.0(rollup@4.18.1) + '@rollup/pluginutils': 5.1.2(rollup@4.24.0) '@types/resolve': 1.20.2 deepmerge: 4.3.1 - is-builtin-module: 3.2.1 is-module: 1.0.0 resolve: 1.22.8 optionalDependencies: - rollup: 4.18.1 + rollup: 4.24.0 - '@rollup/plugin-terser@0.4.4(rollup@4.18.1)': + '@rollup/plugin-terser@0.4.4(rollup@4.24.0)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.31.3 + terser: 5.34.1 optionalDependencies: - rollup: 4.18.1 + rollup: 4.24.0 - '@rollup/pluginutils@5.1.0(rollup@4.18.1)': + '@rollup/pluginutils@5.1.2(rollup@4.24.0)': dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 estree-walker: 2.0.2 picomatch: 2.3.1 optionalDependencies: - rollup: 4.18.1 + rollup: 4.24.0 - '@rollup/rollup-android-arm-eabi@4.18.1': + '@rollup/rollup-android-arm-eabi@4.24.0': optional: true - '@rollup/rollup-android-arm64@4.18.1': + '@rollup/rollup-android-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-arm64@4.18.1': + '@rollup/rollup-darwin-arm64@4.24.0': optional: true - '@rollup/rollup-darwin-x64@4.18.1': + '@rollup/rollup-darwin-x64@4.24.0': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.18.1': + '@rollup/rollup-linux-arm-gnueabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.18.1': + '@rollup/rollup-linux-arm-musleabihf@4.24.0': optional: true - '@rollup/rollup-linux-arm64-gnu@4.18.1': + '@rollup/rollup-linux-arm64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-arm64-musl@4.18.1': + '@rollup/rollup-linux-arm64-musl@4.24.0': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.18.1': + '@rollup/rollup-linux-powerpc64le-gnu@4.24.0': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.18.1': + '@rollup/rollup-linux-riscv64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-s390x-gnu@4.18.1': + '@rollup/rollup-linux-s390x-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-gnu@4.18.1': + '@rollup/rollup-linux-x64-gnu@4.24.0': optional: true - '@rollup/rollup-linux-x64-musl@4.18.1': + '@rollup/rollup-linux-x64-musl@4.24.0': optional: true - '@rollup/rollup-win32-arm64-msvc@4.18.1': + '@rollup/rollup-win32-arm64-msvc@4.24.0': optional: true - '@rollup/rollup-win32-ia32-msvc@4.18.1': + '@rollup/rollup-win32-ia32-msvc@4.24.0': optional: true - '@rollup/rollup-win32-x64-msvc@4.18.1': + '@rollup/rollup-win32-x64-msvc@4.24.0': optional: true + '@rtsao/scc@1.1.0': {} + '@sinclair/typebox@0.27.8': {} '@sindresorhus/merge-streams@2.3.0': {} @@ -4629,10 +4583,10 @@ snapshots: dependencies: '@sinonjs/commons': 3.0.1 - '@testing-library/dom@10.3.2': + '@testing-library/dom@10.4.0': dependencies: - '@babel/code-frame': 7.24.7 - '@babel/runtime': 7.24.8 + '@babel/code-frame': 7.25.7 + '@babel/runtime': 7.25.7 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -4640,9 +4594,9 @@ snapshots: lz-string: 1.5.0 pretty-format: 27.5.1 - '@testing-library/user-event@14.5.2(@testing-library/dom@10.3.2)': + '@testing-library/user-event@14.5.2(@testing-library/dom@10.4.0)': dependencies: - '@testing-library/dom': 10.3.2 + '@testing-library/dom': 10.4.0 '@tootallnate/once@2.0.0': {} @@ -4650,24 +4604,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 '@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.24.9 + '@babel/types': 7.25.7 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.24.8 - '@babel/types': 7.24.9 + '@babel/parser': 7.25.7 + '@babel/types': 7.25.7 '@types/babel__traverse@7.20.6': dependencies: - '@babel/types': 7.24.9 + '@babel/types': 7.25.7 '@types/cookie@0.6.0': {} @@ -4675,11 +4629,11 @@ snapshots: dependencies: '@types/ms': 0.7.34 - '@types/estree@1.0.5': {} + '@types/estree@1.0.6': {} '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 20.14.11 + '@types/node': 22.7.4 '@types/istanbul-lib-coverage@2.0.6': {} @@ -4693,21 +4647,21 @@ snapshots: '@types/jest-axe@3.5.9': dependencies: - '@types/jest': 29.5.12 + '@types/jest': 29.5.13 axe-core: 3.5.6 - '@types/jest@29.5.12': + '@types/jest@29.5.13': dependencies: expect: 29.7.0 pretty-format: 29.7.0 - '@types/jquery@3.5.30': + '@types/jquery@3.5.31': dependencies: '@types/sizzle': 2.3.8 '@types/jsdom@20.0.1': dependencies: - '@types/node': 20.14.11 + '@types/node': 22.7.4 '@types/tough-cookie': 4.0.5 parse5: 7.1.2 @@ -4719,11 +4673,11 @@ snapshots: '@types/mute-stream@0.0.4': dependencies: - '@types/node': 20.14.11 + '@types/node': 22.7.4 - '@types/node@20.14.11': + '@types/node@22.7.4': dependencies: - undici-types: 5.26.5 + undici-types: 6.19.8 '@types/resolve@1.20.2': {} @@ -4741,38 +4695,38 @@ snapshots: '@types/yargs-parser@21.0.3': {} - '@types/yargs@17.0.32': + '@types/yargs@17.0.33': dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@eslint-community/regexpp': 4.11.0 - '@typescript-eslint/parser': 7.16.1(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/scope-manager': 7.16.1 - '@typescript-eslint/type-utils': 7.16.1(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.16.1 - eslint: 8.57.0 + '@eslint-community/regexpp': 4.11.1 + '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/scope-manager': 8.8.0 + '@typescript-eslint/type-utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/visitor-keys': 8.8.0 + eslint: 8.57.1 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 natural-compare: 1.4.0 - ts-api-utils: 1.3.0(typescript@5.5.3) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.3 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@typescript-eslint/scope-manager': 7.16.1 - '@typescript-eslint/types': 7.16.1 - '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.5.3) - '@typescript-eslint/visitor-keys': 7.16.1 - debug: 4.3.5 - eslint: 8.57.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) + '@typescript-eslint/visitor-keys': 8.8.0 + debug: 4.3.7 + eslint: 8.57.1 optionalDependencies: - typescript: 5.5.3 + typescript: 5.6.2 transitivePeerDependencies: - supports-color @@ -4781,78 +4735,78 @@ snapshots: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - '@typescript-eslint/scope-manager@7.16.1': + '@typescript-eslint/scope-manager@8.8.0': dependencies: - '@typescript-eslint/types': 7.16.1 - '@typescript-eslint/visitor-keys': 7.16.1 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.0 - '@typescript-eslint/type-utils@7.16.1(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/type-utils@8.8.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.5.3) - '@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.5.3) - debug: 4.3.5 - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.3) + '@typescript-eslint/typescript-estree': 8.8.0(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + debug: 4.3.7 + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.3 + typescript: 5.6.2 transitivePeerDependencies: + - eslint - supports-color '@typescript-eslint/types@5.62.0': {} - '@typescript-eslint/types@7.16.1': {} + '@typescript-eslint/types@8.8.0': {} - '@typescript-eslint/typescript-estree@5.62.0(typescript@5.5.3)': + '@typescript-eslint/typescript-estree@5.62.0(typescript@5.6.2)': dependencies: '@typescript-eslint/types': 5.62.0 '@typescript-eslint/visitor-keys': 5.62.0 - debug: 4.3.5 + debug: 4.3.7 globby: 11.1.0 is-glob: 4.0.3 semver: 7.6.3 - tsutils: 3.21.0(typescript@5.5.3) + tsutils: 3.21.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.3 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/typescript-estree@7.16.1(typescript@5.5.3)': + '@typescript-eslint/typescript-estree@8.8.0(typescript@5.6.2)': dependencies: - '@typescript-eslint/types': 7.16.1 - '@typescript-eslint/visitor-keys': 7.16.1 - debug: 4.3.5 - globby: 11.1.0 + '@typescript-eslint/types': 8.8.0 + '@typescript-eslint/visitor-keys': 8.8.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.5.3) + ts-api-utils: 1.3.0(typescript@5.6.2) optionalDependencies: - typescript: 5.5.3 + typescript: 5.6.2 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@5.62.0(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/utils@5.62.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) '@types/json-schema': 7.0.15 '@types/semver': 7.5.8 '@typescript-eslint/scope-manager': 5.62.0 '@typescript-eslint/types': 5.62.0 - '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.5.3) - eslint: 8.57.0 + '@typescript-eslint/typescript-estree': 5.62.0(typescript@5.6.2) + eslint: 8.57.1 eslint-scope: 5.1.1 semver: 7.6.3 transitivePeerDependencies: - supports-color - typescript - '@typescript-eslint/utils@7.16.1(eslint@8.57.0)(typescript@5.5.3)': + '@typescript-eslint/utils@8.8.0(eslint@8.57.1)(typescript@5.6.2)': dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@typescript-eslint/scope-manager': 7.16.1 - '@typescript-eslint/types': 7.16.1 - '@typescript-eslint/typescript-estree': 7.16.1(typescript@5.5.3) - eslint: 8.57.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@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: 8.57.1 transitivePeerDependencies: - supports-color - typescript @@ -4862,9 +4816,9 @@ snapshots: '@typescript-eslint/types': 5.62.0 eslint-visitor-keys: 3.4.3 - '@typescript-eslint/visitor-keys@7.16.1': + '@typescript-eslint/visitor-keys@8.8.0': dependencies: - '@typescript-eslint/types': 7.16.1 + '@typescript-eslint/types': 8.8.0 eslint-visitor-keys: 3.4.3 '@ungap/structured-clone@1.2.0': {} @@ -4874,13 +4828,13 @@ snapshots: acorn-globals@7.0.1: dependencies: acorn: 8.12.1 - acorn-walk: 8.3.3 + acorn-walk: 8.3.4 acorn-jsx@5.3.2(acorn@8.12.1): dependencies: acorn: 8.12.1 - acorn-walk@8.3.3: + acorn-walk@8.3.4: dependencies: acorn: 8.12.1 @@ -4888,7 +4842,7 @@ snapshots: agent-base@6.0.2: dependencies: - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -4982,14 +4936,14 @@ snapshots: asynckit@0.4.0: {} - autoprefixer@10.4.19(postcss@8.4.39): + autoprefixer@10.4.20(postcss@8.4.47): dependencies: - browserslist: 4.23.2 - caniuse-lite: 1.0.30001642 + browserslist: 4.24.0 + caniuse-lite: 1.0.30001666 fraction.js: 4.3.7 normalize-range: 0.1.2 - picocolors: 1.0.1 - postcss: 8.4.39 + picocolors: 1.1.0 + postcss: 8.4.47 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -5000,13 +4954,13 @@ snapshots: axe-core@4.9.1: {} - babel-jest@29.7.0(@babel/core@7.24.9): + babel-jest@29.7.0(@babel/core@7.25.7): dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.7 '@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.24.9) + babel-preset-jest: 29.6.3(@babel/core@7.25.7) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -5015,7 +4969,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -5025,7 +4979,7 @@ snapshots: babel-plugin-istanbul@7.0.0: dependencies: - '@babel/helper-plugin-utils': 7.24.8 + '@babel/helper-plugin-utils': 7.25.7 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 6.0.3 @@ -5035,56 +4989,59 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.24.7 - '@babel/types': 7.24.9 + '@babel/template': 7.25.7 + '@babel/types': 7.25.7 '@types/babel__core': 7.20.5 '@types/babel__traverse': 7.20.6 - babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.24.9): + babel-plugin-polyfill-corejs2@0.4.11(@babel/core@7.25.7): dependencies: - '@babel/compat-data': 7.24.9 - '@babel/core': 7.24.9 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) + '@babel/compat-data': 7.25.7 + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.10.4(@babel/core@7.24.9): + babel-plugin-polyfill-corejs3@0.10.6(@babel/core@7.25.7): dependencies: - '@babel/core': 7.24.9 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) - core-js-compat: 3.37.1 + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) + core-js-compat: 3.38.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.24.9): + babel-plugin-polyfill-regenerator@0.6.2(@babel/core@7.25.7): dependencies: - '@babel/core': 7.24.9 - '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.24.9) + '@babel/core': 7.25.7 + '@babel/helper-define-polyfill-provider': 0.6.2(@babel/core@7.25.7) transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.0.1(@babel/core@7.24.9): - dependencies: - '@babel/core': 7.24.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.24.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.24.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.24.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.24.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.24.9) - - babel-preset-jest@29.6.3(@babel/core@7.24.9): - dependencies: - '@babel/core': 7.24.9 + 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-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.9) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) balanced-match@1.0.2: {} @@ -5103,12 +5060,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.23.2: + browserslist@4.24.0: dependencies: - caniuse-lite: 1.0.30001642 - electron-to-chromium: 1.4.829 - node-releases: 2.0.17 - update-browserslist-db: 1.1.0(browserslist@4.23.2) + caniuse-lite: 1.0.30001666 + electron-to-chromium: 1.5.31 + node-releases: 2.0.18 + update-browserslist-db: 1.1.1(browserslist@4.24.0) bser@2.1.1: dependencies: @@ -5116,8 +5073,6 @@ snapshots: buffer-from@1.1.2: {} - builtin-modules@3.3.0: {} - call-bind@1.0.7: dependencies: es-define-property: 1.0.0 @@ -5132,7 +5087,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001642: {} + caniuse-lite@1.0.30001666: {} chalk@2.4.2: dependencies: @@ -5161,9 +5116,7 @@ snapshots: ci-info@3.9.0: {} - cjs-module-lexer@1.3.1: {} - - cli-spinners@2.9.2: {} + cjs-module-lexer@1.4.1: {} cli-width@4.1.0: {} @@ -5203,17 +5156,17 @@ snapshots: cookie@0.5.0: {} - core-js-compat@3.37.1: + core-js-compat@3.38.1: dependencies: - browserslist: 4.23.2 + browserslist: 4.24.0 - create-jest@29.7.0(@types/node@20.14.11): + create-jest@29.7.0(@types/node@22.7.4): 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@20.14.11) + jest-config: 29.7.0(@types/node@22.7.4) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5266,9 +5219,9 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.3.5: + debug@4.3.7: dependencies: - ms: 2.1.2 + ms: 2.1.3 decimal.js@10.4.3: {} @@ -5318,17 +5271,12 @@ snapshots: dependencies: webidl-conversions: 7.0.0 - electron-to-chromium@1.4.829: {} + electron-to-chromium@1.5.31: {} emittery@0.13.1: {} emoji-regex@8.0.0: {} - enhanced-resolve@5.17.0: - dependencies: - graceful-fs: 4.2.11 - tapable: 2.2.1 - entities@4.5.0: {} error-ex@1.3.2: @@ -5371,7 +5319,7 @@ snapshots: object-inspect: 1.13.2 object-keys: 1.1.1 object.assign: 4.1.5 - regexp.prototype.flags: 1.5.2 + regexp.prototype.flags: 1.5.3 safe-array-concat: 1.1.2 safe-regex-test: 1.0.3 string.prototype.trim: 1.2.9 @@ -5410,7 +5358,7 @@ snapshots: is-date-object: 1.0.5 is-symbol: 1.0.4 - escalade@3.1.2: {} + escalade@3.2.0: {} escape-string-regexp@1.0.5: {} @@ -5429,98 +5377,72 @@ snapshots: eslint-import-resolver-node@0.3.9: dependencies: debug: 3.2.7 - is-core-module: 2.14.0 + is-core-module: 2.15.1 resolve: 1.22.8 transitivePeerDependencies: - supports-color - eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0): - dependencies: - debug: 4.3.5 - enhanced-resolve: 5.17.0 - eslint: 8.57.0 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) - eslint-plugin-import: 2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0) - fast-glob: 3.3.2 - get-tsconfig: 4.7.5 - is-core-module: 2.14.0 - is-glob: 4.0.3 - transitivePeerDependencies: - - '@typescript-eslint/parser' - - eslint-import-resolver-node - - eslint-import-resolver-webpack - - supports-color - - eslint-module-utils@2.8.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 7.16.1(eslint@8.57.0)(typescript@5.5.3) - eslint: 8.57.0 + '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-import-resolver-typescript: 3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0) - transitivePeerDependencies: - - supports-color - - eslint-plugin-deprecation@3.0.0(eslint@8.57.0)(typescript@5.5.3): - dependencies: - '@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.5.3) - eslint: 8.57.0 - ts-api-utils: 1.3.0(typescript@5.5.3) - tslib: 2.6.3 - typescript: 5.5.3 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.29.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-typescript@3.6.1)(eslint@8.57.0): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1): dependencies: + '@rtsao/scc': 1.1.0 array-includes: 3.1.8 array.prototype.findlastindex: 1.2.5 array.prototype.flat: 1.3.2 array.prototype.flatmap: 1.3.2 debug: 3.2.7 doctrine: 2.1.0 - eslint: 8.57.0 + eslint: 8.57.1 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.8.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.6.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint-plugin-import@2.29.1)(eslint@8.57.0))(eslint@8.57.0) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint-import-resolver-node@0.3.9)(eslint@8.57.1) hasown: 2.0.2 - is-core-module: 2.14.0 + is-core-module: 2.15.1 is-glob: 4.0.3 minimatch: 3.1.2 object.fromentries: 2.0.8 object.groupby: 1.0.3 object.values: 1.2.0 semver: 6.3.1 + string.prototype.trimend: 1.0.8 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 7.16.1(eslint@8.57.0)(typescript@5.5.3) + '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.6.2) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.11))(typescript@5.5.3): + eslint-plugin-jest@28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.7.4))(typescript@5.6.2): dependencies: - '@typescript-eslint/utils': 7.16.1(eslint@8.57.0)(typescript@5.5.3) - eslint: 8.57.0 + '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 optionalDependencies: - '@typescript-eslint/eslint-plugin': 7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3) - jest: 29.7.0(@types/node@20.14.11) + '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) + jest: 29.7.0(@types/node@22.7.4) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-playwright@1.6.2(eslint-plugin-jest@28.6.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.11))(typescript@5.5.3))(eslint@8.57.0): + 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@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.7.4))(typescript@5.6.2))(eslint@8.57.1): dependencies: - eslint: 8.57.0 + eslint: 8.57.1 globals: 13.24.0 optionalDependencies: - eslint-plugin-jest: 28.6.0(@typescript-eslint/eslint-plugin@7.16.1(@typescript-eslint/parser@7.16.1(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(typescript@5.5.3))(eslint@8.57.0)(jest@29.7.0(@types/node@20.14.11))(typescript@5.5.3) + eslint-plugin-jest: 28.8.3(@typescript-eslint/eslint-plugin@8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(jest@29.7.0(@types/node@22.7.4))(typescript@5.6.2) - eslint-plugin-testing-library@6.2.2(eslint@8.57.0)(typescript@5.5.3): + eslint-plugin-testing-library@6.3.0(eslint@8.57.1)(typescript@5.6.2): dependencies: - '@typescript-eslint/utils': 5.62.0(eslint@8.57.0)(typescript@5.5.3) - eslint: 8.57.0 + '@typescript-eslint/utils': 5.62.0(eslint@8.57.1)(typescript@5.6.2) + eslint: 8.57.1 transitivePeerDependencies: - supports-color - typescript @@ -5537,20 +5459,20 @@ snapshots: eslint-visitor-keys@3.4.3: {} - eslint@8.57.0: + eslint@8.57.1: dependencies: - '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.0) - '@eslint-community/regexpp': 4.11.0 + '@eslint-community/eslint-utils': 4.4.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.11.1 '@eslint/eslintrc': 2.1.4 - '@eslint/js': 8.57.0 - '@humanwhocodes/config-array': 0.11.14 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 '@ungap/structured-clone': 1.2.0 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.3 - debug: 4.3.5 + debug: 4.3.7 doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.2.2 @@ -5564,7 +5486,7 @@ snapshots: glob-parent: 6.0.2 globals: 13.24.0 graphemer: 1.4.0 - ignore: 5.3.1 + ignore: 5.3.2 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 @@ -5634,7 +5556,7 @@ snapshots: '@nodelib/fs.walk': 1.2.8 glob-parent: 5.1.2 merge2: 1.4.1 - micromatch: 4.0.7 + micromatch: 4.0.8 fast-json-stable-stringify@2.1.0: {} @@ -5737,10 +5659,6 @@ snapshots: es-errors: 1.3.0 get-intrinsic: 1.2.4 - get-tsconfig@4.7.5: - dependencies: - resolve-pkg-maps: 1.0.0 - givens@1.3.9: {} glob-parent@5.1.2: @@ -5776,7 +5694,7 @@ snapshots: array-union: 2.1.0 dir-glob: 3.0.1 fast-glob: 3.3.2 - ignore: 5.3.1 + ignore: 5.3.2 merge2: 1.4.1 slash: 3.0.0 @@ -5784,7 +5702,7 @@ snapshots: 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 @@ -5833,14 +5751,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.3.5 + debug: 4.3.7 transitivePeerDependencies: - supports-color @@ -5850,14 +5768,14 @@ snapshots: dependencies: safer-buffer: 2.1.2 - ignore@5.3.1: {} + ignore@5.3.2: {} import-fresh@3.3.0: dependencies: parent-module: 1.0.1 resolve-from: 4.0.0 - import-local@3.1.0: + import-local@3.2.0: dependencies: pkg-dir: 4.2.0 resolve-cwd: 3.0.0 @@ -5897,13 +5815,9 @@ snapshots: call-bind: 1.0.7 has-tostringtag: 1.0.2 - is-builtin-module@3.2.1: - dependencies: - builtin-modules: 3.3.0 - is-callable@1.2.7: {} - is-core-module@2.14.0: + is-core-module@2.15.1: dependencies: hasown: 2.0.2 @@ -5976,8 +5890,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.24.9 - '@babel/parser': 7.24.8 + '@babel/core': 7.25.7 + '@babel/parser': 7.25.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -5986,8 +5900,8 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.24.9 - '@babel/parser': 7.24.8 + '@babel/core': 7.25.7 + '@babel/parser': 7.25.7 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 7.6.3 @@ -6002,7 +5916,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.3.5 + debug: 4.3.7 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6032,7 +5946,7 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 22.7.4 chalk: 4.1.2 co: 4.6.0 dedent: 1.5.3 @@ -6052,16 +5966,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@20.14.11): + jest-cli@29.7.0(@types/node@22.7.4): 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@20.14.11) + create-jest: 29.7.0(@types/node@22.7.4) exit: 0.1.2 - import-local: 3.1.0 - jest-config: 29.7.0(@types/node@20.14.11) + import-local: 3.2.0 + jest-config: 29.7.0(@types/node@22.7.4) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6071,12 +5985,12 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@20.14.11): + jest-config@29.7.0(@types/node@22.7.4): dependencies: - '@babel/core': 7.24.9 + '@babel/core': 7.25.7 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.24.9) + babel-jest: 29.7.0(@babel/core@7.25.7) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -6090,13 +6004,13 @@ snapshots: jest-runner: 29.7.0 jest-util: 29.7.0 jest-validate: 29.7.0 - micromatch: 4.0.7 + micromatch: 4.0.8 parse-json: 5.2.0 pretty-format: 29.7.0 slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 20.14.11 + '@types/node': 22.7.4 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -6126,7 +6040,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 20.14.11 + '@types/node': 22.7.4 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -6140,16 +6054,16 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 22.7.4 jest-mock: 29.7.0 jest-util: 29.7.0 - jest-extended@4.0.2(jest@29.7.0(@types/node@20.14.11)): + jest-extended@4.0.2(jest@29.7.0(@types/node@22.7.4)): dependencies: jest-diff: 29.7.0 jest-get-type: 29.6.3 optionalDependencies: - jest: 29.7.0(@types/node@20.14.11) + jest: 29.7.0(@types/node@22.7.4) jest-get-type@29.6.3: {} @@ -6157,14 +6071,14 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 20.14.11 + '@types/node': 22.7.4 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 jest-regex-util: 29.6.3 jest-util: 29.7.0 jest-worker: 29.7.0 - micromatch: 4.0.7 + micromatch: 4.0.8 walker: 1.0.8 optionalDependencies: fsevents: 2.3.3 @@ -6190,12 +6104,12 @@ snapshots: jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 graceful-fs: 4.2.11 - micromatch: 4.0.7 + micromatch: 4.0.8 pretty-format: 29.7.0 slash: 3.0.0 stack-utils: 2.0.6 @@ -6203,7 +6117,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 22.7.4 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -6238,7 +6152,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 22.7.4 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6266,9 +6180,9 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 22.7.4 chalk: 4.1.2 - cjs-module-lexer: 1.3.1 + cjs-module-lexer: 1.4.1 collect-v8-coverage: 1.0.2 glob: 7.2.3 graceful-fs: 4.2.11 @@ -6286,15 +6200,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.24.9 - '@babel/generator': 7.24.10 - '@babel/plugin-syntax-jsx': 7.24.7(@babel/core@7.24.9) - '@babel/plugin-syntax-typescript': 7.24.7(@babel/core@7.24.9) - '@babel/types': 7.24.9 + '@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 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.0.1(@babel/core@7.24.9) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.25.7) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -6312,7 +6226,7 @@ snapshots: jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 22.7.4 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6331,7 +6245,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 20.14.11 + '@types/node': 22.7.4 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6340,17 +6254,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 20.14.11 + '@types/node': 22.7.4 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@20.14.11): + jest@29.7.0(@types/node@22.7.4): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 - import-local: 3.1.0 - jest-cli: 29.7.0(@types/node@20.14.11) + import-local: 3.2.0 + jest-cli: 29.7.0(@types/node@22.7.4) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6386,7 +6300,7 @@ snapshots: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.12 + nwsapi: 2.2.13 parse5: 7.1.2 saxes: 6.0.0 symbol-tree: 3.2.4 @@ -6403,9 +6317,7 @@ snapshots: - supports-color - utf-8-validate - jsesc@0.5.0: {} - - jsesc@2.5.2: {} + jsesc@3.0.2: {} json-buffer@3.0.1: {} @@ -6481,7 +6393,7 @@ snapshots: merge2@1.4.1: {} - micromatch@4.0.7: + micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 @@ -6506,17 +6418,15 @@ snapshots: minimist@1.2.8: {} - ms@2.1.2: {} - ms@2.1.3: {} - msw@2.3.2(typescript@5.5.3): + msw@2.4.9(typescript@5.6.2): dependencies: '@bundled-es-modules/cookie': 2.0.0 '@bundled-es-modules/statuses': 1.0.1 - '@inquirer/confirm': 3.1.15 - '@mswjs/cookies': 1.1.1 - '@mswjs/interceptors': 0.29.1 + '@bundled-es-modules/tough-cookie': 0.1.6 + '@inquirer/confirm': 3.2.0 + '@mswjs/interceptors': 0.35.9 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 '@types/statuses': 2.0.5 @@ -6525,12 +6435,12 @@ snapshots: headers-polyfill: 4.0.3 is-node-process: 1.2.0 outvariant: 1.4.3 - path-to-regexp: 6.2.2 + path-to-regexp: 6.3.0 strict-event-emitter: 0.5.1 - type-fest: 4.22.0 + type-fest: 4.26.1 yargs: 17.7.2 optionalDependencies: - typescript: 5.5.3 + typescript: 5.6.2 mute-stream@1.0.0: {} @@ -6540,7 +6450,7 @@ snapshots: node-int64@0.4.0: {} - node-releases@2.0.17: {} + node-releases@2.0.18: {} normalize-path@3.0.0: {} @@ -6550,7 +6460,7 @@ snapshots: dependencies: path-key: 3.1.1 - nwsapi@2.2.12: {} + nwsapi@2.2.13: {} object-inspect@1.13.2: {} @@ -6627,7 +6537,7 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.24.7 + '@babel/code-frame': 7.25.7 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 @@ -6644,13 +6554,13 @@ snapshots: path-parse@1.0.7: {} - path-to-regexp@6.2.2: {} + path-to-regexp@6.3.0: {} path-type@4.0.0: {} path-type@5.0.0: {} - picocolors@1.0.1: {} + picocolors@1.1.0: {} picomatch@2.3.1: {} @@ -6664,27 +6574,27 @@ snapshots: dependencies: find-up: 4.1.0 - playwright-core@1.45.2: {} + playwright-core@1.47.2: {} - playwright@1.45.2: + playwright@1.47.2: dependencies: - playwright-core: 1.45.2 + playwright-core: 1.47.2 optionalDependencies: fsevents: 2.3.2 possible-typed-array-names@1.0.0: {} - postcss-cli@11.0.0(postcss@8.4.39): + postcss-cli@11.0.0(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.39 - postcss-load-config: 5.1.0(postcss@8.4.39) - postcss-reporter: 7.1.0(postcss@8.4.39) + picocolors: 1.1.0 + postcss: 8.4.47 + postcss-load-config: 5.1.0(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 @@ -6693,50 +6603,50 @@ snapshots: - jiti - tsx - postcss-import@16.1.0(postcss@8.4.39): + postcss-import@16.1.0(postcss@8.4.47): dependencies: - postcss: 8.4.39 + postcss: 8.4.47 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.8 - postcss-load-config@5.1.0(postcss@8.4.39): + postcss-load-config@5.1.0(postcss@8.4.47): dependencies: lilconfig: 3.1.2 - yaml: 2.4.5 + yaml: 2.5.1 optionalDependencies: - postcss: 8.4.39 + postcss: 8.4.47 - postcss-load-config@6.0.1(postcss@8.4.39)(yaml@2.4.5): + postcss-load-config@6.0.1(postcss@8.4.47)(yaml@2.5.1): dependencies: lilconfig: 3.1.2 optionalDependencies: - postcss: 8.4.39 - yaml: 2.4.5 + postcss: 8.4.47 + yaml: 2.5.1 - postcss-nested@6.0.1(postcss@8.4.39): + postcss-nested@6.2.0(postcss@8.4.47): dependencies: - postcss: 8.4.39 - postcss-selector-parser: 6.1.1 + postcss: 8.4.47 + postcss-selector-parser: 6.1.2 - postcss-reporter@7.1.0(postcss@8.4.39): + postcss-reporter@7.1.0(postcss@8.4.47): dependencies: - picocolors: 1.0.1 - postcss: 8.4.39 + picocolors: 1.1.0 + postcss: 8.4.47 thenby: 1.3.4 - 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.39: + 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 prelude-ls@1.2.1: {} @@ -6787,7 +6697,7 @@ snapshots: dependencies: picomatch: 2.3.1 - regenerate-unicode-properties@10.1.1: + regenerate-unicode-properties@10.2.0: dependencies: regenerate: 1.4.2 @@ -6797,27 +6707,29 @@ snapshots: regenerator-transform@0.15.2: dependencies: - '@babel/runtime': 7.24.8 + '@babel/runtime': 7.25.7 - regexp.prototype.flags@1.5.2: + regexp.prototype.flags@1.5.3: dependencies: call-bind: 1.0.7 define-properties: 1.2.1 es-errors: 1.3.0 set-function-name: 2.0.2 - regexpu-core@5.3.2: + regexpu-core@6.1.1: dependencies: - '@babel/regjsgen': 0.8.0 regenerate: 1.4.2 - regenerate-unicode-properties: 10.1.1 - regjsparser: 0.9.1 + regenerate-unicode-properties: 10.2.0 + regjsgen: 0.8.0 + regjsparser: 0.11.0 unicode-match-property-ecmascript: 2.0.0 - unicode-match-property-value-ecmascript: 2.1.0 + unicode-match-property-value-ecmascript: 2.2.0 + + regjsgen@0.8.0: {} - regjsparser@0.9.1: + regjsparser@0.11.0: dependencies: - jsesc: 0.5.0 + jsesc: 3.0.2 require-directory@2.1.1: {} @@ -6831,13 +6743,11 @@ snapshots: resolve-from@5.0.0: {} - resolve-pkg-maps@1.0.0: {} - resolve.exports@2.0.2: {} resolve@1.22.8: dependencies: - is-core-module: 2.14.0 + is-core-module: 2.15.1 path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 @@ -6852,26 +6762,26 @@ snapshots: mime: 4.0.4 opener: 1.5.2 - rollup@4.18.1: + rollup@4.24.0: dependencies: - '@types/estree': 1.0.5 + '@types/estree': 1.0.6 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.18.1 - '@rollup/rollup-android-arm64': 4.18.1 - '@rollup/rollup-darwin-arm64': 4.18.1 - '@rollup/rollup-darwin-x64': 4.18.1 - '@rollup/rollup-linux-arm-gnueabihf': 4.18.1 - '@rollup/rollup-linux-arm-musleabihf': 4.18.1 - '@rollup/rollup-linux-arm64-gnu': 4.18.1 - '@rollup/rollup-linux-arm64-musl': 4.18.1 - '@rollup/rollup-linux-powerpc64le-gnu': 4.18.1 - '@rollup/rollup-linux-riscv64-gnu': 4.18.1 - '@rollup/rollup-linux-s390x-gnu': 4.18.1 - '@rollup/rollup-linux-x64-gnu': 4.18.1 - '@rollup/rollup-linux-x64-musl': 4.18.1 - '@rollup/rollup-win32-arm64-msvc': 4.18.1 - '@rollup/rollup-win32-ia32-msvc': 4.18.1 - '@rollup/rollup-win32-x64-msvc': 4.18.1 + '@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 fsevents: 2.3.3 run-parallel@1.2.0: @@ -6952,7 +6862,7 @@ snapshots: smob@1.5.0: {} - source-map-js@1.2.0: {} + source-map-js@1.2.1: {} source-map-support@0.5.13: dependencies: @@ -7034,9 +6944,7 @@ snapshots: symbol-tree@3.2.4: {} - tapable@2.2.1: {} - - terser@5.31.3: + terser@5.34.1: dependencies: '@jridgewell/source-map': 0.3.6 acorn: 8.12.1 @@ -7072,9 +6980,9 @@ snapshots: dependencies: punycode: 2.3.1 - ts-api-utils@1.3.0(typescript@5.5.3): + ts-api-utils@1.3.0(typescript@5.6.2): dependencies: - typescript: 5.5.3 + typescript: 5.6.2 tsconfig-paths@3.15.0: dependencies: @@ -7085,12 +6993,12 @@ snapshots: tslib@1.14.1: {} - tslib@2.6.3: {} + tslib@2.7.0: {} - tsutils@3.21.0(typescript@5.5.3): + tsutils@3.21.0(typescript@5.6.2): dependencies: tslib: 1.14.1 - typescript: 5.5.3 + typescript: 5.6.2 type-check@0.4.0: dependencies: @@ -7102,7 +7010,7 @@ snapshots: type-fest@0.21.3: {} - type-fest@4.22.0: {} + type-fest@4.26.1: {} typed-array-buffer@1.0.2: dependencies: @@ -7136,7 +7044,18 @@ snapshots: is-typed-array: 1.1.13 possible-typed-array-names: 1.0.0 - typescript@5.5.3: {} + typescript-eslint@8.8.0(eslint@8.57.1)(typescript@5.6.2): + dependencies: + '@typescript-eslint/eslint-plugin': 8.8.0(@typescript-eslint/parser@8.8.0(eslint@8.57.1)(typescript@5.6.2))(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/parser': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + '@typescript-eslint/utils': 8.8.0(eslint@8.57.1)(typescript@5.6.2) + optionalDependencies: + typescript: 5.6.2 + transitivePeerDependencies: + - eslint + - supports-color + + typescript@5.6.2: {} unbox-primitive@1.0.2: dependencies: @@ -7145,20 +7064,20 @@ snapshots: has-symbols: 1.0.3 which-boxed-primitive: 1.0.2 - undici-types@5.26.5: {} + undici-types@6.19.8: {} undici@5.28.4: dependencies: '@fastify/busboy': 2.1.1 - unicode-canonical-property-names-ecmascript@2.0.0: {} + unicode-canonical-property-names-ecmascript@2.0.1: {} unicode-match-property-ecmascript@2.0.0: dependencies: - unicode-canonical-property-names-ecmascript: 2.0.0 + unicode-canonical-property-names-ecmascript: 2.0.1 unicode-property-aliases-ecmascript: 2.1.0 - unicode-match-property-value-ecmascript@2.1.0: {} + unicode-match-property-value-ecmascript@2.2.0: {} unicode-property-aliases-ecmascript@2.1.0: {} @@ -7168,11 +7087,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 uri-js@4.4.1: dependencies: @@ -7263,14 +7182,14 @@ snapshots: yallist@3.1.1: {} - yaml@2.4.5: {} + 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/src/dataLoader.ts b/src/dataLoader.ts index 2e3b9ce8..00f3fb86 100644 --- a/src/dataLoader.ts +++ b/src/dataLoader.ts @@ -84,7 +84,7 @@ export default class DataLoader { } private getDomElement(parentNode: Node | null): HTMLElement { - if (parentNode) { + if (parentNode?.element) { return parentNode.element; } else { return this.treeElement; @@ -128,7 +128,7 @@ export default class DataLoader { ...urlInfo, }; - ajaxSettings.method = ajaxSettings.method?.toUpperCase() || "GET"; + ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? "GET"; void jQuery.ajax(ajaxSettings); } diff --git a/src/dragAndDropHandler/generateHitAreas.ts b/src/dragAndDropHandler/generateHitAreas.ts index 23bf845f..a5869cd3 100644 --- a/src/dragAndDropHandler/generateHitAreas.ts +++ b/src/dragAndDropHandler/generateHitAreas.ts @@ -56,7 +56,7 @@ export const generateHitPositions = ( }; const handleFirstNode = (node: Node) => { - if (node !== currentNode) { + if (node !== currentNode && node.element) { addHitPosition(node, Position.Before, getOffsetTop(node.element)); } }; diff --git a/src/elementsRenderer.ts b/src/elementsRenderer.ts index 1b13e892..862df925 100644 --- a/src/elementsRenderer.ts +++ b/src/elementsRenderer.ts @@ -8,7 +8,7 @@ interface ElementsRendererParams { buttonLeft: boolean; closedIcon?: IconElement; dragAndDrop: boolean; - $element: JQuery; + $element: JQuery; getTree: GetTree; isNodeSelected: IsNodeSelected; onCreateLi?: OnCreateLi; @@ -24,7 +24,7 @@ export default class ElementsRenderer { private autoEscape: boolean; private buttonLeft: boolean; private dragAndDrop: boolean; - private $element: JQuery; + private $element: JQuery; private getTree: GetTree; private isNodeSelected: IsNodeSelected; private onCreateLi?: OnCreateLi; @@ -56,12 +56,12 @@ export default class ElementsRenderer { this.rtl = rtl; this.showEmptyFolder = showEmptyFolder; this.tabIndex = tabIndex; - this.openedIconElement = this.createButtonElement(openedIcon || "+"); - this.closedIconElement = this.createButtonElement(closedIcon || "-"); + this.openedIconElement = this.createButtonElement(openedIcon ?? "+"); + this.closedIconElement = this.createButtonElement(closedIcon ?? "-"); } public render(fromNode: Node | null): void { - if (fromNode && fromNode.parent) { + if (fromNode?.parent) { this.renderFromNode(fromNode); } else { this.renderFromRoot(); @@ -79,6 +79,10 @@ export default class ElementsRenderer { } public renderFromNode(node: Node): void { + if (!node.element) { + return; + } + // remember current li const $previousLi = jQuery(node.element); @@ -93,14 +97,7 @@ export default class ElementsRenderer { $previousLi.remove(); // create children - if (node.children) { - this.createDomElements( - li, - node.children, - false, - node.getLevel() + 1, - ); - } + this.createDomElements(li, node.children, false, node.getLevel() + 1); } private createDomElements( @@ -356,8 +353,6 @@ export default class ElementsRenderer { div.innerHTML = value; return document.createTextNode(div.innerHTML); - } else if (value == null) { - return undefined; } else if ((value as HTMLElement).nodeType) { return value as HTMLElement; } else { diff --git a/src/jqtreeOptions.ts b/src/jqtreeOptions.ts index fbfb5067..02c7d15b 100644 --- a/src/jqtreeOptions.ts +++ b/src/jqtreeOptions.ts @@ -24,7 +24,7 @@ export type OnSetStateFromStorage = ((data: string) => void) | undefined; export type DataFilter = (data: unknown) => NodeData[]; -export type IconElement = string | HTMLElement | JQuery; +export type IconElement = string | HTMLElement | JQuery; export type OnCreateLi = (node: Node, el: JQuery, isSelected: boolean) => void; @@ -64,7 +64,7 @@ export interface JQTreeOptions { saveState: boolean | string; showEmptyFolder: boolean; slide: boolean; - startDndDelay: number; + startDndDelay?: number; tabIndex?: number; useContextMenu: boolean; } diff --git a/src/mouseHandler.ts b/src/mouseHandler.ts index 09171679..720edd5f 100644 --- a/src/mouseHandler.ts +++ b/src/mouseHandler.ts @@ -191,8 +191,7 @@ class MouseHandler { } if (this.mouseDownInfo) { - this.isMouseStarted = - this.onMouseStart(this.mouseDownInfo) !== false; + this.isMouseStarted = this.onMouseStart(this.mouseDownInfo); } if (this.isMouseStarted) { @@ -229,10 +228,6 @@ class MouseHandler { } private touchStart = (e: TouchEvent): void => { - if (!e) { - return; - } - if (e.touches.length > 1) { return; } @@ -247,10 +242,6 @@ class MouseHandler { }; private touchMove = (e: TouchEvent): void => { - if (!e) { - return; - } - if (e.touches.length > 1) { return; } @@ -265,10 +256,6 @@ class MouseHandler { }; private touchEnd = (e: TouchEvent): void => { - if (!e) { - return; - } - if (e.touches.length > 1) { return; } @@ -293,19 +280,24 @@ class MouseHandler { return; } - if (clickTarget.type === "button") { - this.onClickButton(clickTarget.node); + switch (clickTarget.type) { + case "button": + this.onClickButton(clickTarget.node); - e.preventDefault(); - e.stopPropagation(); - } else if (clickTarget.type === "label") { - const event = this.triggerEvent("tree.click", { - node: clickTarget.node, - click_event: e, - }); + e.preventDefault(); + e.stopPropagation(); + break; - if (!event.isDefaultPrevented()) { - this.onClickTitle(clickTarget.node); + case "label": { + const event = this.triggerEvent("tree.click", { + node: clickTarget.node, + click_event: e, + }); + + if (!event.isDefaultPrevented()) { + this.onClickTitle(clickTarget.node); + } + break; } } }; diff --git a/src/node.ts b/src/node.ts index dce086ff..be54c4de 100644 --- a/src/node.ts +++ b/src/node.ts @@ -13,7 +13,7 @@ export class Node implements INode { public nodeClass?: typeof Node; public load_on_demand: boolean; public is_open: boolean; - public element: HTMLElement; + public element?: HTMLElement; public is_loading: boolean; public isEmptyFolder: boolean; @@ -101,7 +101,7 @@ export class Node implements INode { } ] */ - public loadFromData(data: NodeData[]): Node { + public loadFromData(data: NodeData[]): this { this.removeChildren(); for (const childData of data) { @@ -196,13 +196,11 @@ export class Node implements INode { */ public iterate(callback: IterateCallback): void { const _iterate = (node: Node, level: number): void => { - if (node.children) { - for (const child of node.children) { - const result = callback(child, level); + for (const child of node.children) { + const result = callback(child, level); - if (result && child.hasChildren()) { - _iterate(child, level + 1); - } + if (result && child.hasChildren()) { + _iterate(child, level + 1); } } }; @@ -293,7 +291,7 @@ export class Node implements INode { } if (node.hasChildren()) { - tmpNode["children"] = getDataFromNodes(node.children); + tmpNode.children = getDataFromNodes(node.children); } return tmpNode; @@ -315,7 +313,7 @@ export class Node implements INode { const node = this.getNodeByCallback((n: Node) => n.name === name); if (!node) { - throw `Node with name ${name} not found`; + throw new Error(`Node with name ${name} not found`); } return node; @@ -437,7 +435,7 @@ export class Node implements INode { } public getNodeById(nodeId: NodeId): Node | null { - return this.idMapping.get(nodeId) || null; + return this.idMapping.get(nodeId) ?? null; } public addNodeToIndex(node: Node): void { @@ -467,7 +465,7 @@ export class Node implements INode { } else { const previousIndex = this.parent.getChildIndex(this) - 1; if (previousIndex >= 0) { - return this.parent.children[previousIndex] || null; + return this.parent.children[previousIndex] ?? null; } else { return null; } @@ -480,7 +478,7 @@ export class Node implements INode { } else { const nextIndex = this.parent.getChildIndex(this) + 1; if (nextIndex < this.parent.children.length) { - return this.parent.children[nextIndex] || null; + return this.parent.children[nextIndex] ?? null; } else { return null; } @@ -507,7 +505,7 @@ export class Node implements INode { public getNextNode(includeChildren = true): Node | null { if (includeChildren && this.hasChildren()) { - return this.children[0] || null; + return this.children[0] ?? null; } else if (!this.parent) { return null; } else { @@ -524,7 +522,7 @@ export class Node implements INode { public getNextVisibleNode(): Node | null { if (this.hasChildren() && this.is_open) { // First child - return this.children[0] || null; + return this.children[0] ?? null; } else { if (!this.parent) { return null; @@ -603,7 +601,7 @@ export class Node implements INode { if (!(lastChild.hasChildren() && lastChild.is_open)) { return lastChild; } else { - return lastChild?.getLastChild(); + return lastChild.getLastChild(); } } } @@ -644,7 +642,7 @@ export class Node implements INode { } private getNodeClass(): typeof Node { - return this.nodeClass || this?.tree?.nodeClass || Node; + return this.nodeClass ?? this.tree?.nodeClass ?? Node; } private createNode(nodeData?: NodeData): Node { diff --git a/src/nodeElement/index.ts b/src/nodeElement/index.ts index f9e187a2..fd82faf9 100644 --- a/src/nodeElement/index.ts +++ b/src/nodeElement/index.ts @@ -9,7 +9,7 @@ export interface NodeElementParams { getScrollLeft: GetScrollLeft; node: Node; tabIndex?: number; - $treeElement: JQuery; + $treeElement: JQuery; } class NodeElement { @@ -17,7 +17,7 @@ class NodeElement { public element: HTMLElement; private getScrollLeft: GetScrollLeft; private tabIndex?: number; - private $treeElement: JQuery; + private $treeElement: JQuery; constructor({ getScrollLeft, diff --git a/src/nodeUtils.ts b/src/nodeUtils.ts index 632644c5..e1bba516 100644 --- a/src/nodeUtils.ts +++ b/src/nodeUtils.ts @@ -7,4 +7,4 @@ export const isNodeRecordWithChildren = ( ): data is NodeRecordWithChildren => typeof data === "object" && "children" in data && - data["children"] instanceof Array; + data.children instanceof Array; diff --git a/src/playwright/.eslintrc b/src/playwright/.eslintrc deleted file mode 100644 index e86aae76..00000000 --- a/src/playwright/.eslintrc +++ /dev/null @@ -1,5 +0,0 @@ -{ - "extends": [ - "plugin:playwright/playwright-test" - ] -} diff --git a/src/playwright/coverage.ts b/src/playwright/coverage.ts index e0711ceb..efa816ce 100644 --- a/src/playwright/coverage.ts +++ b/src/playwright/coverage.ts @@ -31,7 +31,7 @@ export const saveCoverage = async (context: BrowserContext) => { const anyWindow = window as any; // eslint-disable-next-line @typescript-eslint/no-unsafe-assignment, @typescript-eslint/no-unsafe-member-access const coverageData = anyWindow.__coverage__; - // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access, playwright/no-unsafe-references + // eslint-disable-next-line @typescript-eslint/no-unsafe-call, @typescript-eslint/no-unsafe-member-access anyWindow.collectIstanbulCoverage(JSON.stringify(coverageData)); }); } diff --git a/src/playwright/playwright.test.ts b/src/playwright/playwright.test.ts index feb904cd..bb850cb9 100644 --- a/src/playwright/playwright.test.ts +++ b/src/playwright/playwright.test.ts @@ -20,7 +20,9 @@ const initPage = async (page: Page, baseURL: string | undefined) => { await page.goto(`${baseURL}/test_index.html`); await page.waitForLoadState("domcontentloaded"); - page.on("console", (msg) => console.log(`console: ${msg.text()}`)); + page.on("console", (msg) => { + console.log(`console: ${msg.text()}`); + }); }; interface InitTreeOptions { @@ -43,9 +45,9 @@ const initTree = async ( $tree.tree({ animationSpeed: 0, - autoOpen: ${autoOpen || 0}, + autoOpen: ${autoOpen ?? 0}, data: ExampleData.exampleData, - dragAndDrop: ${dragAndDrop || false}, + dragAndDrop: ${dragAndDrop ?? false}, onCanMove: ${onCanMove ? "onCanMove" : "null"}, onCanMoveTo: ${onCanMoveTo ? "onCanMoveTo" : "null"}, startDndDelay: 100, diff --git a/src/playwright/testUtils.ts b/src/playwright/testUtils.ts index 237b3b8e..c158d56b 100644 --- a/src/playwright/testUtils.ts +++ b/src/playwright/testUtils.ts @@ -7,8 +7,9 @@ interface BoundingBox { height: number; } -export const sleep = async (page: Page, timeout: number) => +export const sleep = async (page: Page, timeout: number) => { await page.waitForTimeout(timeout); // eslint-disable-line playwright/no-wait-for-timeout +}; export const locateTitle = (page: Page, title: string) => page.locator(".jqtree-title", { @@ -61,7 +62,7 @@ const getRect = async ( const boundingBox = await elementHandle.boundingBox(); if (!boundingBox) { - throw "No bounding box"; + throw new Error("No bounding box"); } return boundingBox; diff --git a/src/saveStateHandler.ts b/src/saveStateHandler.ts index 3befac91..3bf5f1dd 100644 --- a/src/saveStateHandler.ts +++ b/src/saveStateHandler.ts @@ -12,8 +12,8 @@ import { } from "./jqtreeMethodTypes"; export interface SavedState { - open_nodes: NodeId[]; - selected_node: NodeId[]; + open_nodes?: NodeId[]; + selected_node?: NodeId[]; } interface SaveStateHandlerParams { @@ -125,22 +125,19 @@ export default class SaveStateHandler { result: must load on demand */ public setInitialState(state: SavedState): boolean { - if (!state) { - return false; - } else { - let mustLoadOnDemand = false; + let mustLoadOnDemand = false; - if (state.open_nodes) { - mustLoadOnDemand = this.openInitialNodes(state.open_nodes); - } + if (state.open_nodes) { + mustLoadOnDemand = this.openInitialNodes(state.open_nodes); + } - if (state.selected_node) { - this.resetSelection(); - this.selectInitialNodes(state.selected_node); - } + this.resetSelection(); - return mustLoadOnDemand; + if (state.selected_node) { + this.selectInitialNodes(state.selected_node); } + + return mustLoadOnDemand; } public setInitialStateOnDemand( @@ -151,6 +148,10 @@ export default class SaveStateHandler { let nodeIds = state.open_nodes; const openNodes = (): void => { + if (!nodeIds) { + return; + } + const newNodesIds = []; for (const nodeId of nodeIds) { @@ -171,8 +172,10 @@ export default class SaveStateHandler { nodeIds = newNodesIds; - if (this.selectInitialNodes(state.selected_node)) { - this.refreshElements(null); + if (state.selected_node) { + if (this.selectInitialNodes(state.selected_node)) { + this.refreshElements(null); + } } if (loadingCount === 0) { @@ -195,7 +198,7 @@ export default class SaveStateHandler { const state = this.getStateFromStorage(); if (state?.selected_node) { - return state.selected_node[0] || null; + return state.selected_node[0] ?? null; } else { return null; } @@ -205,7 +208,7 @@ export default class SaveStateHandler { const state = JSON.parse(jsonData) as Record; // Check if selected_node is an int (instead of an array) - if (state && state.selected_node && isInt(state.selected_node)) { + if (state.selected_node && isInt(state.selected_node)) { // Convert to array state.selected_node = [state.selected_node]; } @@ -275,21 +278,16 @@ export default class SaveStateHandler { private supportsLocalStorage(): boolean { const testSupport = (): boolean => { - // Is local storage supported? - if (localStorage == null) { + // Check if it's possible to store an item. Safari does not allow this in private browsing mode. + try { + const key = "_storage_test"; + sessionStorage.setItem(key, "value"); + sessionStorage.removeItem(key); + } catch { return false; - } else { - // Check if it's possible to store an item. Safari does not allow this in private browsing mode. - try { - const key = "_storage_test"; - sessionStorage.setItem(key, "value"); - sessionStorage.removeItem(key); - } catch (error) { - return false; - } - - return true; } + + return true; }; if (this._supportsLocalStorage == null) { diff --git a/src/scrollHandler/documentScrollParent.ts b/src/scrollHandler/documentScrollParent.ts index 1dbb683b..bf38c947 100644 --- a/src/scrollHandler/documentScrollParent.ts +++ b/src/scrollHandler/documentScrollParent.ts @@ -1,5 +1,5 @@ import type { ScrollParent } from "./types"; -import { getOffsetTop } from '../util' +import { getOffsetTop } from "../util"; type HorizontalScrollDirection = "left" | "right"; type VerticalScrollDirection = "bottom" | "top"; @@ -141,7 +141,7 @@ export default class DocumentScrollParent implements ScrollParent { private getNewVerticalScrollDirection( pageY: number, ): VerticalScrollDirection | undefined { - const scrollTop = jQuery(document).scrollTop() || 0; + const scrollTop = jQuery(document).scrollTop() ?? 0; const distanceTop = pageY - scrollTop; if (distanceTop < 20) { diff --git a/src/selectNodeHandler.ts b/src/selectNodeHandler.ts index 33162649..b815012f 100644 --- a/src/selectNodeHandler.ts +++ b/src/selectNodeHandler.ts @@ -20,7 +20,7 @@ export default class SelectNodeHandler { const selectedNodes = this.getSelectedNodes(); if (selectedNodes.length) { - return selectedNodes[0] || false; + return selectedNodes[0] ?? false; } else { return false; } diff --git a/src/simple.widget.ts b/src/simple.widget.ts index 15523dc3..f2d521c9 100644 --- a/src/simple.widget.ts +++ b/src/simple.widget.ts @@ -3,7 +3,7 @@ const register = (widgetClass: unknown, widgetName: string): void => { const getWidgetData = ( el: HTMLElement, - dataKey: string + dataKey: string, ): SimpleWidget | null => { const widget = jQuery.data(el, dataKey) as unknown; @@ -53,7 +53,7 @@ const register = (widgetClass: unknown, widgetName: string): void => { const callFunction = ( $el: JQuery, functionName: string, - args: unknown[] + args: unknown[], ): unknown => { let result = null; @@ -88,7 +88,8 @@ const register = (widgetClass: unknown, widgetName: string): void => { const functionName = argument1; if (functionName === "destroy") { - return destroyWidget(this); + destroyWidget(this); + return undefined; } else if (functionName === "get_widget_class") { return widgetClass; } else { @@ -111,13 +112,13 @@ export default class SimpleWidget { public options: WidgetOptions; - public $el: JQuery; + public $el: JQuery; constructor(el: HTMLElement, options: WidgetOptions) { this.$el = jQuery(el); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const defaults = (this.constructor as any)["defaults"] as WidgetOptions; + const defaults = (this.constructor as any).defaults as WidgetOptions; this.options = { ...defaults, ...options }; } diff --git a/src/test/.eslintrc b/src/test/.eslintrc deleted file mode 100644 index 80a1e24e..00000000 --- a/src/test/.eslintrc +++ /dev/null @@ -1,18 +0,0 @@ -{ - "plugins": ["jest", "testing-library"], - "extends": ["plugin:jest/all", "plugin:testing-library/dom"], - "rules": { - "jest/consistent-test-it": "off", - "jest/max-expects": ["off"], - "jest/no-duplicate-hooks": "off", - "jest/no-hooks": "off", - "jest/no-identical-title": "off", - "jest/no-standalone-expect": "off", - "jest/prefer-expect-assertions": "off", - "jest/prefer-importing-jest-globals": "off", - "jest/prefer-strict-equal": "off", - "jest/require-hook": "off", - "jest/require-top-level-describe": "off", - "testing-library/no-node-access": "off" - } -} diff --git a/src/test/generateHitAreas.test.ts b/src/test/generateHitAreas.test.ts index b97bc263..6240fe50 100644 --- a/src/test/generateHitAreas.test.ts +++ b/src/test/generateHitAreas.test.ts @@ -21,6 +21,7 @@ describe("generateHitAreasForGroup", () => { it("doesn't add a hit area with zero hit positions", () => { const hitAreas: HitArea[] = []; generateHitAreasForGroup(hitAreas, [], 0, 0); + expect(hitAreas).toBeEmpty(); }); @@ -55,6 +56,7 @@ describe("generateHitAreasForGroup", () => { const hitAreas: HitArea[] = []; generateHitAreasForGroup(hitAreas, [hitPosition], 0, 100); + expect(hitAreas).toBeEmpty(); }); diff --git a/src/test/jqTree/create.test.ts b/src/test/jqTree/create.test.ts index 3bc849aa..6777778a 100644 --- a/src/test/jqTree/create.test.ts +++ b/src/test/jqTree/create.test.ts @@ -14,7 +14,7 @@ afterEach(() => { describe("create with data", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); diff --git a/src/test/jqTree/events.test.ts b/src/test/jqTree/events.test.ts index 56581a34..988686fe 100644 --- a/src/test/jqTree/events.test.ts +++ b/src/test/jqTree/events.test.ts @@ -22,13 +22,13 @@ afterEach(() => { describe("tree.click", () => { interface Vars { node1: INode; - titleSpan: JQuery; - $tree: JQuery; + titleSpan: JQuery; + $tree: JQuery; } const given = getGiven(); given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1")); - given("titleSpan", () => titleSpan(given.node1.element)); + given("titleSpan", () => titleSpan(given.node1.element as HTMLElement)); given("$tree", () => $("#tree1")); beforeEach(() => { @@ -40,6 +40,7 @@ describe("tree.click", () => { given.$tree.on("tree.click", onClick); await userEvent.click(given.titleSpan.get(0) as HTMLElement); + expect(onClick).toHaveBeenCalledWith( expect.objectContaining({ node: given.node1 }), ); @@ -49,13 +50,13 @@ describe("tree.click", () => { describe("tree.contextmenu", () => { interface Vars { node1: INode; - titleSpan: JQuery; - $tree: JQuery; + titleSpan: JQuery; + $tree: JQuery; } const given = getGiven(); given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1")); - given("titleSpan", () => titleSpan(given.node1.element)); + given("titleSpan", () => titleSpan(given.node1.element as HTMLElement)); given("$tree", () => $("#tree1")); beforeEach(() => { @@ -70,6 +71,7 @@ describe("tree.contextmenu", () => { target: given.titleSpan.get(0) as HTMLElement, keys: "[MouseRight]", }); + expect(onContextMenu).toHaveBeenCalledWith( expect.objectContaining({ node: given.node1 }), ); @@ -79,13 +81,13 @@ describe("tree.contextmenu", () => { describe("tree.dblclick", () => { interface Vars { node1: INode; - titleSpan: JQuery; - $tree: JQuery; + titleSpan: JQuery; + $tree: JQuery; } const given = getGiven(); given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1")); - given("titleSpan", () => titleSpan(given.node1.element)); + given("titleSpan", () => titleSpan(given.node1.element as HTMLElement)); given("$tree", () => $("#tree1")); beforeEach(() => { @@ -97,6 +99,7 @@ describe("tree.dblclick", () => { given.$tree.on("tree.dblclick", onDoubleClick); await userEvent.dblClick(given.titleSpan.get(0) as HTMLElement); + expect(onDoubleClick).toHaveBeenCalledWith( expect.objectContaining({ node: given.node1 }), ); @@ -105,7 +108,7 @@ describe("tree.dblclick", () => { describe("tree.init", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); given("$tree", () => $("#tree1")); @@ -119,7 +122,6 @@ describe("tree.init", () => { data: exampleData, }); - // eslint-disable-next-line jest/prefer-called-with expect(onInit).toHaveBeenCalled(); }); }); @@ -128,6 +130,7 @@ describe("tree.init", () => { const server = setupServer( http.get("/tree/", () => HttpResponse.json(exampleData)), ); + beforeEach(() => { server.listen(); }); @@ -143,7 +146,6 @@ describe("tree.init", () => { given.$tree.tree({ dataUrl: "/tree/" }); await waitFor(() => { - // eslint-disable-next-line jest/prefer-called-with expect(onInit).toHaveBeenCalled(); }); }); @@ -152,7 +154,7 @@ describe("tree.init", () => { describe("tree.load_data", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); given("$tree", () => $("#tree1")); @@ -163,6 +165,7 @@ describe("tree.load_data", () => { given.$tree.on("tree.load_data", onLoadData); given.$tree.tree({ data: exampleData }); + expect(onLoadData).toHaveBeenCalledWith( expect.objectContaining({ tree_data: exampleData }), ); @@ -173,13 +176,13 @@ describe("tree.load_data", () => { describe("tree.select", () => { interface Vars { node1: INode; - titleSpan: JQuery; - $tree: JQuery; + titleSpan: JQuery; + $tree: JQuery; } const given = getGiven(); given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1")); - given("titleSpan", () => titleSpan(given.node1.element)); + given("titleSpan", () => titleSpan(given.node1.element as HTMLElement)); given("$tree", () => $("#tree1")); beforeEach(() => { @@ -193,6 +196,7 @@ describe("tree.select", () => { given.$tree.on("tree.select", onSelect); await userEvent.click(given.titleSpan.get(0) as HTMLElement); + expect(onSelect).toHaveBeenCalledWith( expect.objectContaining({ node: given.node1, @@ -211,6 +215,7 @@ describe("tree.select", () => { given.$tree.on("tree.select", onSelect); await userEvent.click(given.titleSpan.get(0) as HTMLElement); + expect(onSelect).toHaveBeenCalledWith( expect.objectContaining({ node: null, @@ -225,6 +230,7 @@ describe("tree.loading_data", () => { const server = setupServer( http.get("/tree/", () => HttpResponse.json(exampleData)), ); + beforeEach(() => { server.listen(); }); @@ -265,6 +271,7 @@ describe("onLoading", () => { const server = setupServer( http.get("/tree/", () => HttpResponse.json(exampleData)), ); + beforeEach(() => { server.listen(); }); diff --git a/src/test/jqTree/keyboard.test.ts b/src/test/jqTree/keyboard.test.ts index af57870d..d488a2be 100644 --- a/src/test/jqTree/keyboard.test.ts +++ b/src/test/jqTree/keyboard.test.ts @@ -20,7 +20,7 @@ describe("keyboard support", () => { autoOpen: boolean; initialSelectedNode: INode | null; pressedKey: string; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); diff --git a/src/test/jqTree/loadOnDemand.test.ts b/src/test/jqTree/loadOnDemand.test.ts index ee691935..0648aa7a 100644 --- a/src/test/jqTree/loadOnDemand.test.ts +++ b/src/test/jqTree/loadOnDemand.test.ts @@ -10,7 +10,9 @@ const context = describe; const server = setupServer(); -beforeAll(() => server.listen()); +beforeAll(() => { + server.listen(); +}); beforeEach(() => { $("body").append('
'); @@ -25,13 +27,15 @@ afterEach(() => { localStorage.clear(); }); -afterAll(() => server.close()); +afterAll(() => { + server.close(); +}); context("when a node has load_on_demand in the data", () => { interface Vars { autoOpen: boolean; node: INode; - $tree: JQuery; + $tree: JQuery; savedState?: string; } const given = getGiven(); @@ -92,7 +96,7 @@ context("when a node has load_on_demand in the data", () => { ); it("loads the subtree", async () => { - const toggler = togglerLink(given.node.element); + const toggler = togglerLink(given.node.element as HTMLElement); await userEvent.click(toggler.get(0) as HTMLElement); await screen.findByText("loaded-on-demand"); @@ -117,7 +121,7 @@ context("when a node has load_on_demand in the data", () => { expect(given.node.element).toBeSelected(); expect(given.node.element).toBeFocused(); - const toggler = togglerLink(given.node.element); + const toggler = togglerLink(given.node.element as HTMLElement); await userEvent.click(toggler.get(0) as HTMLElement); await screen.findByText("loaded-on-demand"); @@ -130,7 +134,7 @@ context("when a node has load_on_demand in the data", () => { it("doesn't select the node", async () => { expect(given.node.element).not.toBeSelected(); - const toggler = togglerLink(given.node.element); + const toggler = togglerLink(given.node.element as HTMLElement); await userEvent.click(toggler.get(0) as HTMLElement); await screen.findByText("loaded-on-demand"); @@ -142,14 +146,14 @@ context("when a node has load_on_demand in the data", () => { context("when the node is selected and doesn't have the focus", () => { beforeEach(() => { given.$tree.tree("selectNode", given.node); - (document.activeElement as HTMLElement).blur(); // eslint-disable-line testing-library/no-node-access + (document.activeElement as HTMLElement).blur(); }); it("keeps the node selected and not focused", async () => { expect(given.node.element).toBeSelected(); expect(given.node.element).not.toBeFocused(); - const toggler = togglerLink(given.node.element); + const toggler = togglerLink(given.node.element as HTMLElement); await userEvent.click(toggler.get(0) as HTMLElement); await screen.findByText("loaded-on-demand"); diff --git a/src/test/jqTree/methods.test.ts b/src/test/jqTree/methods.test.ts index 7dad185e..64c3860f 100644 --- a/src/test/jqTree/methods.test.ts +++ b/src/test/jqTree/methods.test.ts @@ -12,7 +12,9 @@ const context = describe; const server = setupServer(); -beforeAll(() => server.listen()); +beforeAll(() => { + server.listen(); +}); beforeEach(() => { $("body").append('
'); @@ -27,12 +29,14 @@ afterEach(() => { localStorage.clear(); }); -afterAll(() => server.close()); +afterAll(() => { + server.close(); +}); describe("addNodeAfter", () => { interface Vars { node: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -60,7 +64,7 @@ describe("addNodeAfter", () => { describe("addNodeBefore", () => { interface Vars { node: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -88,7 +92,7 @@ describe("addNodeBefore", () => { describe("addParentNode", () => { interface Vars { child1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -127,7 +131,7 @@ describe("addToSelection", () => { interface Vars { child1: INode; child2: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -187,6 +191,7 @@ describe("addToSelection", () => { }); const node1 = given.$tree.tree("getNodeByNameMustExist", "node1"); + expect(node1.is_open).toBeFalsy(); given.$tree.tree("addToSelection", given.child1); @@ -199,7 +204,7 @@ describe("appendNode", () => { interface Vars { nodeData: NodeData; parent: INode | undefined; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -274,7 +279,7 @@ describe("appendNode", () => { describe("closeNode", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -296,7 +301,7 @@ describe("closeNode", () => { describe("getNodeByCallback", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -318,7 +323,7 @@ describe("getNodeByCallback", () => { describe("getNodeByHtmlElement", () => { interface Vars { htmlElement: HTMLElement; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -341,7 +346,7 @@ describe("getNodeByHtmlElement", () => { describe("getNodeById", () => { interface Vars { data: NodeData[]; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -400,7 +405,7 @@ describe("getNodeById", () => { describe("getNodesByProperty", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -423,7 +428,7 @@ describe("getNodesByProperty", () => { describe("getSelectedNode", () => { interface Vars { node: INode; - $tree: JQuery; + $tree: JQuery; treeData: NodeData[]; } @@ -487,7 +492,7 @@ describe("getSelectedNodes", () => { interface Vars { child1: INode; child2: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -524,7 +529,7 @@ describe("getSelectedNodes", () => { describe("getState", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -547,7 +552,7 @@ describe("getState", () => { describe("getStateFromStorage", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -572,7 +577,7 @@ describe("getStateFromStorage", () => { describe("getTree", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); given("$tree", () => $("#tree1")); @@ -593,7 +598,7 @@ describe("getTree", () => { describe("getVersion", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -611,7 +616,7 @@ describe("getVersion", () => { describe("isNodeSelected", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -642,7 +647,7 @@ describe("isNodeSelected", () => { describe("loadData", () => { interface Vars { initialData: NodeData[]; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -760,7 +765,7 @@ describe("loadDataFromUrl", () => { interface Vars { initialData: NodeData[]; serverData: NodeData[]; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -830,7 +835,7 @@ describe("loadDataFromUrl", () => { describe("moveDown", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1")); @@ -843,6 +848,7 @@ describe("moveDown", () => { it("selects the next node", () => { given.$tree.tree("moveDown"); + expect(given.$tree.tree("getSelectedNode")).toMatchObject({ name: "node2", }); @@ -853,7 +859,7 @@ describe("moveNode", () => { interface Vars { child1: INode; node2: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -884,7 +890,7 @@ describe("moveNode", () => { describe("moveUp", () => { interface Vars { node2: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); given("node2", () => given.$tree.tree("getNodeByNameMustExist", "node2")); @@ -897,6 +903,7 @@ describe("moveUp", () => { it("selects the next node", () => { given.$tree.tree("moveUp"); + expect(given.$tree.tree("getSelectedNode")).toMatchObject({ name: "node1", }); @@ -906,7 +913,7 @@ describe("moveUp", () => { describe("openNode", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -942,7 +949,7 @@ describe("openNode", () => { describe("prependNode", () => { interface Vars { parent: INode | undefined; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -989,7 +996,7 @@ describe("prependNode", () => { describe("refresh", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -1003,7 +1010,7 @@ describe("refresh", () => { it("rerenders the tree", () => { const tree = given.$tree.tree("getTree"); - (tree.children[0] as INode).name = "node1a"; // eslint-disable-line testing-library/no-node-access + (tree.children[0] as INode).name = "node1a"; expect(given.$tree).toHaveTreeStructure([ expect.objectContaining({ name: "node1" }), @@ -1022,7 +1029,7 @@ describe("refresh", () => { describe("reload", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -1058,7 +1065,9 @@ describe("reload", () => { given.$tree.tree("reload", handleFinished); - await waitFor(() => expect(handleFinished).toHaveBeenCalledWith()); + await waitFor(() => { + expect(handleFinished).toHaveBeenCalledWith(); + }); expect(given.$tree).toHaveTreeStructure([ expect.objectContaining({ name: "node1" }), @@ -1071,7 +1080,7 @@ describe("reload", () => { describe("removeNode", () => { interface Vars { node: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -1164,7 +1173,7 @@ describe("selectNode", () => { interface Vars { node1: INode; node2: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -1208,6 +1217,7 @@ describe("selectNode", () => { it("deselects the node", () => { given.$tree.tree("selectNode", given.node1); + expect(given.node1.element).not.toBeSelected(); }); }); @@ -1219,6 +1229,7 @@ describe("selectNode", () => { it("deselects the current node", () => { given.$tree.tree("selectNode", null); + expect(given.$tree.tree("getSelectedNode")).toBeFalse(); }); }); @@ -1236,10 +1247,11 @@ describe("selectNode", () => { describe("setOption", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); + beforeEach(() => { given.$tree.tree({ animationSpeed: 0, @@ -1247,14 +1259,16 @@ describe("setOption", () => { selectable: false, }); }); + given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1")); given("$tree", () => $("#tree1")); it("sets an option", async () => { given.$tree.tree("setOption", "selectable", true); await userEvent.click( - titleSpan(given.node1.element).get(0) as HTMLElement, + titleSpan(given.node1.element as HTMLElement).get(0) as HTMLElement, ); + expect(given.$tree.tree("getSelectedNode")).toMatchObject({ name: "node1", }); @@ -1263,10 +1277,11 @@ describe("setOption", () => { describe("setState", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); + beforeEach(() => { given.$tree.tree({ autoOpen: false, @@ -1274,6 +1289,7 @@ describe("setState", () => { selectable: true, }); }); + given("$tree", () => $("#tree1")); it("sets the state", () => { @@ -1307,7 +1323,7 @@ describe("toggle", () => { interface Vars { autoOpen: boolean; node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -1340,7 +1356,7 @@ describe("toggle", () => { describe("toJson", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -1362,7 +1378,7 @@ describe("updateNode", () => { isSelected: boolean; node: INode; nodeData: NodeData; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); diff --git a/src/test/jqTree/mouse.test.ts b/src/test/jqTree/mouse.test.ts index 253af2c0..c71c710f 100644 --- a/src/test/jqTree/mouse.test.ts +++ b/src/test/jqTree/mouse.test.ts @@ -18,10 +18,13 @@ it("selects a node and sets the focus when it is clicked", async () => { $tree.tree({ data: exampleData }); const node = $tree.tree("getNodeByNameMustExist", "node1"); + expect(node.element).not.toBeSelected(); expect(node.element).not.toBeFocused(); - await userEvent.click(titleSpan(node.element).get(0) as HTMLElement); + await userEvent.click( + titleSpan(node.element as HTMLElement).get(0) as HTMLElement, + ); expect(node.element).toBeSelected(); }); @@ -35,7 +38,9 @@ it("deselects when a selected node is clicked", async () => { expect(node.element).toBeSelected(); - await userEvent.click(titleSpan(node.element).get(0) as HTMLElement); + await userEvent.click( + titleSpan(node.element as HTMLElement).get(0) as HTMLElement, + ); expect(node.element).not.toBeSelected(); }); @@ -45,9 +50,12 @@ it("opens a node when the toggle button is clicked", async () => { $tree.tree({ data: exampleData }); const node = $tree.tree("getNodeByNameMustExist", "node1"); + expect(node.element).not.toBeOpen(); - await userEvent.click(togglerLink(node.element).get(0) as HTMLElement); + await userEvent.click( + togglerLink(node.element as HTMLElement).get(0) as HTMLElement, + ); expect(node.element).toBeOpen(); }); @@ -57,10 +65,13 @@ it("doesn't select a node when it is opened", async () => { $tree.tree({ data: exampleData }); const node = $tree.tree("getNodeByNameMustExist", "node1"); + expect(node.element).not.toBeSelected(); expect(node.element).not.toBeOpen(); - await userEvent.click(togglerLink(node.element).get(0) as HTMLElement); + await userEvent.click( + togglerLink(node.element as HTMLElement).get(0) as HTMLElement, + ); expect(node.element).not.toBeSelected(); expect(node.element).toBeOpen(); @@ -72,10 +83,13 @@ it("keeps it selected when a selected node is opened", async () => { const node = $tree.tree("getNodeByNameMustExist", "node1"); $tree.tree("selectNode", node); + expect(node.element).toBeSelected(); expect(node.element).not.toBeOpen(); - await userEvent.click(togglerLink(node.element).get(0) as HTMLElement); + await userEvent.click( + togglerLink(node.element as HTMLElement).get(0) as HTMLElement, + ); expect(node.element).toBeSelected(); expect(node.element).toBeOpen(); diff --git a/src/test/jqTree/options.test.ts b/src/test/jqTree/options.test.ts index 4fbde4a3..4ec89de0 100644 --- a/src/test/jqTree/options.test.ts +++ b/src/test/jqTree/options.test.ts @@ -10,7 +10,9 @@ const context = describe; const server = setupServer(); -beforeAll(() => server.listen()); +beforeAll(() => { + server.listen(); +}); beforeEach(() => { $("body").append('
'); @@ -25,12 +27,14 @@ afterEach(() => { localStorage.clear(); }); -afterAll(() => server.close()); +afterAll(() => { + server.close(); +}); describe("autoEscape", () => { interface Vars { autoEscape: boolean; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -71,7 +75,7 @@ describe("autoEscape", () => { describe("autoOpen", () => { interface Vars { autoOpen: boolean | number | string; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -173,6 +177,7 @@ describe("closedIcon", () => { }); const $button = $tree.find("a.jqtree-toggler:first"); + expect($button.text()).toBe("closed"); }); @@ -184,6 +189,7 @@ describe("closedIcon", () => { }); const $button = $tree.find("a.jqtree-toggler:first"); + expect($button.text()).toBe("test"); }); @@ -195,6 +201,7 @@ describe("closedIcon", () => { }); const $span = $tree.find("a.jqtree-toggler:first span.abc"); + expect($span.text()).toBe("test"); }); @@ -210,6 +217,7 @@ describe("closedIcon", () => { }); const $span = $tree.find("a.jqtree-toggler:first span.abc"); + expect($span.text()).toBe("test"); }); @@ -221,6 +229,7 @@ describe("closedIcon", () => { }); const $span = $tree.find("a.jqtree-toggler:first"); + expect($span.text()).toBe("â–º"); }); }); @@ -286,7 +295,7 @@ describe("dataUrl", () => { }); interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); given("$tree", () => $("#tree1")); @@ -311,6 +320,7 @@ describe("dataUrl", () => { }); await screen.findByText("node1"); + expect((given.$tree.tree("getSelectedNode") as INode).name).toBe( "node2", ); @@ -325,6 +335,7 @@ describe("dataUrl", () => { }); await screen.findByText("node1"); + expect(given.$tree.tree("getSelectedNode")).toBeFalse(); }); }); @@ -332,7 +343,7 @@ describe("dataUrl", () => { describe("onCanSelectNode", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -355,7 +366,7 @@ describe("onCanSelectNode", () => { describe("onCreateLi", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -364,7 +375,7 @@ describe("onCreateLi", () => { beforeEach(() => { given.$tree.tree({ data: exampleData, - onCreateLi: (node: INode, el: JQuery) => { + onCreateLi: (node: INode, el: JQuery) => { titleSpan(el).text(`_${node.name}_`); }, }); @@ -390,7 +401,7 @@ describe("onGetStateFromStorage and onSetStateFromStorage", () => { interface Vars { initialState: string; node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -447,7 +458,7 @@ describe("onGetStateFromStorage and onSetStateFromStorage", () => { describe("onLoadFailed", () => { interface Vars { - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); @@ -486,7 +497,7 @@ describe("onLoadFailed", () => { describe("rtl", () => { interface Vars { node1: INode; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1")); @@ -498,7 +509,9 @@ describe("rtl", () => { }); it("has a different closed icon", () => { - expect(togglerLink(given.node1.element).text()).toBe("â—€"); + expect(togglerLink(given.node1.element as HTMLElement).text()).toBe( + "â—€", + ); }); }); @@ -509,7 +522,9 @@ describe("rtl", () => { }); it("has a different closed icon", () => { - expect(togglerLink(given.node1.element).text()).toBe("â—€"); + expect(togglerLink(given.node1.element as HTMLElement).text()).toBe( + "â—€", + ); }); }); }); @@ -518,7 +533,7 @@ describe("saveState", () => { interface Vars { node1: INode; saveState: boolean | string; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); given("node1", () => given.$tree.tree("getNodeByNameMustExist", "node1")); @@ -604,7 +619,7 @@ describe("showEmptyFolder", () => { context("when children attribute is an empty array", () => { interface Vars { showEmptyFolder: boolean; - $tree: JQuery; + $tree: JQuery; } const given = getGiven(); diff --git a/src/test/node.test.ts b/src/test/node.test.ts index 7ca287e5..760d28f6 100644 --- a/src/test/node.test.ts +++ b/src/test/node.test.ts @@ -483,6 +483,7 @@ describe("getChildIndex", () => { context("when a child doesn't exist", () => { it("returns -1", () => { const nonExistingChild = new Node("non-existing"); + expect(given.node.getChildIndex(nonExistingChild)).toBe(-1); }); }); @@ -1123,8 +1124,8 @@ describe("loadFromData", () => { children: [], }, ]; - const tree = new Node().loadFromData(data); + expect((tree.children[0] as Node).isEmptyFolder).toBe(true); }); @@ -1134,8 +1135,8 @@ describe("loadFromData", () => { name: "test1", }, ]; - const tree = new Node().loadFromData(data); + expect((tree.children[0] as Node).isEmptyFolder).toBe(false); }); @@ -1146,8 +1147,8 @@ describe("loadFromData", () => { children: ["child1"], }, ]; - const tree = new Node().loadFromData(data); + expect((tree.children[0] as Node).isEmptyFolder).toBe(false); }); }); diff --git a/src/test/support/jqTreeMatchers.ts b/src/test/support/jqTreeMatchers.ts index 603f3542..8d293d66 100644 --- a/src/test/support/jqTreeMatchers.ts +++ b/src/test/support/jqTreeMatchers.ts @@ -1,7 +1,7 @@ import treeStructure from "./treeStructure"; import { titleSpan } from "./testUtil"; -const assertJqTreeFolder = ($el: JQuery) => { +const assertJqTreeFolder = ($el: JQuery) => { /* istanbul ignore if */ if (!$el.hasClass("jqtree-folder")) { throw new Error("Node is not a folder"); @@ -9,7 +9,7 @@ const assertJqTreeFolder = ($el: JQuery) => { }; expect.extend({ - toBeClosed(el: HTMLElement | JQuery) { + toBeClosed(el: HTMLElement | JQuery) { const $el = jQuery(el); assertJqTreeFolder($el); @@ -19,14 +19,14 @@ expect.extend({ pass: $el.hasClass("jqtree-closed"), }; }, - toBeFocused(el: HTMLElement | JQuery) { + toBeFocused(el: HTMLElement | JQuery) { /* istanbul ignore next */ return { message: () => "The is node is not focused", pass: document.activeElement === titleSpan(el)[0], }; }, - toBeOpen(el: HTMLElement | JQuery) { + toBeOpen(el: HTMLElement | JQuery) { const $el = jQuery(el); assertJqTreeFolder($el); @@ -36,7 +36,7 @@ expect.extend({ pass: !$el.hasClass("jqtree-closed"), }; }, - toBeSelected(el: HTMLElement | JQuery) { + toBeSelected(el: HTMLElement | JQuery) { const $el = jQuery(el); /* istanbul ignore next */ @@ -46,8 +46,8 @@ expect.extend({ }; }, toHaveTreeStructure( - el: HTMLElement | JQuery, - expectedStructure: JQTreeMatchers.TreeStructure + el: HTMLElement | JQuery, + expectedStructure: JQTreeMatchers.TreeStructure, ) { const $el = jQuery(el); const receivedStructure = treeStructure($el); @@ -60,7 +60,7 @@ expect.extend({ receivedStructure, "expected", "received", - true + true, ), pass: this.equals(receivedStructure, expectedStructure), }; diff --git a/src/test/support/testUtil.ts b/src/test/support/testUtil.ts index 1a79f15d..6f660195 100644 --- a/src/test/support/testUtil.ts +++ b/src/test/support/testUtil.ts @@ -1,30 +1,24 @@ -export const singleChild = ( - $el: JQuery, - selector: string -): JQuery => { +export const singleChild = ($el: JQuery, selector: string): JQuery => { const $result = $el.children(selector); /* istanbul ignore if */ if ($result.length === 0) { - throw `No child found for selector '${selector}'`; + throw new Error(`No child found for selector '${selector}'`); } /* istanbul ignore if */ if ($result.length > 1) { - throw `Multiple elements found for selector '${selector}'`; + throw new Error(`Multiple elements found for selector '${selector}'`); } return $result; }; -export const titleSpan = ( - liNode: HTMLElement | JQuery -): JQuery => singleChild(nodeElement(liNode), "span.jqtree-title"); +export const titleSpan = (liNode: HTMLElement | JQuery): JQuery => + singleChild(nodeElement(liNode), "span.jqtree-title"); -export const togglerLink = ( - liNode: HTMLElement | JQuery -): JQuery => singleChild(nodeElement(liNode), "a.jqtree-toggler"); +export const togglerLink = (liNode: HTMLElement | JQuery): JQuery => + singleChild(nodeElement(liNode), "a.jqtree-toggler"); -const nodeElement = ( - liNode: HTMLElement | JQuery -): JQuery => singleChild(jQuery(liNode), "div.jqtree-element "); +const nodeElement = (liNode: HTMLElement | JQuery): JQuery => + singleChild(jQuery(liNode), "div.jqtree-element "); diff --git a/src/test/support/treeStructure.ts b/src/test/support/treeStructure.ts index a95726bc..85ff9607 100644 --- a/src/test/support/treeStructure.ts +++ b/src/test/support/treeStructure.ts @@ -1,6 +1,6 @@ import { singleChild } from "./testUtil"; -const getTreeNode = ($li: JQuery): JQTreeMatchers.TreeNode => { +const getTreeNode = ($li: JQuery): JQTreeMatchers.TreeNode => { const $div = singleChild($li, "div.jqtree-element"); const $span = singleChild($div, "span.jqtree-title"); const name = $span.html(); @@ -25,15 +25,13 @@ const getTreeNode = ($li: JQuery): JQTreeMatchers.TreeNode => { } }; -const getChildren = ($ul: JQuery): JQTreeMatchers.TreeStructure => +const getChildren = ($ul: JQuery): JQTreeMatchers.TreeStructure => $ul .children("li.jqtree_common") .map((_, li) => getTreeNode(jQuery(li))) .get(); -const treeStructure = ( - $el: JQuery -): JQTreeMatchers.TreeStructure => +const treeStructure = ($el: JQuery): JQTreeMatchers.TreeStructure => getChildren(singleChild($el, "ul.jqtree-tree")); export default treeStructure; diff --git a/src/tree.jquery.d.ts b/src/tree.jquery.d.ts index 37c17397..baef5f62 100644 --- a/src/tree.jquery.d.ts +++ b/src/tree.jquery.d.ts @@ -14,7 +14,7 @@ interface INode { id?: NodeId; name: string; children: INode[]; - element: HTMLElement; + element?: HTMLElement; is_open: boolean; parent: INode | null; @@ -49,7 +49,7 @@ interface IJQTreeOptions { autoEscape?: boolean; autoOpen?: boolean | number | string; buttonLeft?: boolean; - closedIcon?: string | HTMLElement | JQuery; + closedIcon?: string | HTMLElement | JQuery; data?: NodeData[]; dataFilter?: (data: NodeData[]) => NodeData[]; dataUrl?: DataUrl; @@ -66,7 +66,7 @@ interface IJQTreeOptions { onLoading?: (isLoading: boolean, node: INode, $el: JQuery) => void; onGetStateFromStorage?: () => string; onSetStateFromStorage?: (data: string) => void; - openedIcon?: string | HTMLElement | JQuery; + openedIcon?: string | HTMLElement | JQuery; openFolderDelay?: number | false; rtl?: boolean; selectable?: boolean; @@ -79,8 +79,7 @@ interface IJQTreeOptions { } interface IJQTreePlugin { - (): JQuery; - (options: IJQTreeOptions): JQuery; + (options?: IJQTreeOptions): JQuery; ( behavior: "addNodeAfter", newNodeInfo: NodeData, diff --git a/src/tree.jquery.ts b/src/tree.jquery.ts index 24586d91..538d3ab2 100644 --- a/src/tree.jquery.ts +++ b/src/tree.jquery.ts @@ -78,7 +78,7 @@ export class JqTreeWidget extends SimpleWidget { private scrollHandler: ScrollHandler; private selectNodeHandler: SelectNodeHandler; - public toggle(node: Node, slideParam: null | boolean = null): JQuery { + public toggle(node?: Node, slideParam: null | boolean = null): JQuery { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } @@ -184,7 +184,7 @@ export class JqTreeWidget extends SimpleWidget { } public getNodeByHtmlElement( - inputElement: HTMLElement | JQuery, + inputElement: HTMLElement | JQuery, ): Node | null { const element = inputElement instanceof HTMLElement @@ -203,7 +203,7 @@ export class JqTreeWidget extends SimpleWidget { } public openNode( - node: Node, + node?: Node, param1?: boolean | OnFinishOpenNode, param2?: OnFinishOpenNode, ): JQuery { @@ -224,7 +224,7 @@ export class JqTreeWidget extends SimpleWidget { } if (slide == null) { - slide = this.options.slide ?? false; + slide = this.options.slide; } return [slide, onFinished]; @@ -236,7 +236,7 @@ export class JqTreeWidget extends SimpleWidget { return this.element; } - public closeNode(node: Node, slideParam?: null | boolean): JQuery { + public closeNode(node?: Node, slideParam?: null | boolean): JQuery { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } @@ -279,7 +279,7 @@ export class JqTreeWidget extends SimpleWidget { public addNodeBefore( newNodeInfo: NodeData, - existingNode: Node, + existingNode?: Node, ): Node | null { if (!existingNode) { throw Error(PARAM_IS_EMPTY + "existingNode"); @@ -296,7 +296,7 @@ export class JqTreeWidget extends SimpleWidget { public addParentNode( newNodeInfo: NodeData, - existingNode: Node, + existingNode?: Node, ): Node | null { if (!existingNode) { throw Error(PARAM_IS_EMPTY + "existingNode"); @@ -311,7 +311,7 @@ export class JqTreeWidget extends SimpleWidget { return newNode; } - public removeNode(node: Node): JQuery { + public removeNode(node?: Node): JQuery { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } @@ -330,7 +330,7 @@ export class JqTreeWidget extends SimpleWidget { } public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node { - const parentNode = parentNodeParam || this.tree; + const parentNode = parentNodeParam ?? this.tree; const node = parentNode.append(newNodeInfo); @@ -349,11 +349,15 @@ export class JqTreeWidget extends SimpleWidget { return node; } - public updateNode(node: Node, data: NodeData): JQuery { + public updateNode(node?: Node, data?: NodeData): JQuery { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } + if (!data) { + return this.element; + } + const idIsChanged = typeof data === "object" && data.id && data.id !== node.id; @@ -369,8 +373,8 @@ export class JqTreeWidget extends SimpleWidget { if ( typeof data === "object" && - data["children"] && - data["children"] instanceof Array + data.children && + data.children instanceof Array ) { node.removeChildren(); @@ -394,7 +398,7 @@ export class JqTreeWidget extends SimpleWidget { } } - public moveNode(node: Node, targetNode: Node, position: string): JQuery { + public moveNode(node?: Node, targetNode?: Node, position?: string): JQuery { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } @@ -403,6 +407,10 @@ export class JqTreeWidget extends SimpleWidget { throw Error(PARAM_IS_EMPTY + "targetNode"); } + if (!position) { + throw Error(PARAM_IS_EMPTY + "position"); + } + const positionIndex = getPosition(position); if (positionIndex !== undefined) { @@ -417,7 +425,7 @@ export class JqTreeWidget extends SimpleWidget { return this.saveStateHandler.getStateFromStorage(); } - public addToSelection(node: Node, mustSetFocus?: boolean): JQuery { + public addToSelection(node?: Node, mustSetFocus?: boolean): JQuery { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } @@ -425,9 +433,7 @@ export class JqTreeWidget extends SimpleWidget { this.selectNodeHandler.addToSelection(node); this.openParents(node); - this.getNodeElementForNode(node).select( - mustSetFocus === undefined ? true : mustSetFocus, - ); + this.getNodeElementForNode(node).select(mustSetFocus ?? true); this.saveState(); @@ -438,7 +444,7 @@ export class JqTreeWidget extends SimpleWidget { return this.selectNodeHandler.getSelectedNodes(); } - public isNodeSelected(node: Node): boolean { + public isNodeSelected(node?: Node): boolean { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } @@ -446,7 +452,7 @@ export class JqTreeWidget extends SimpleWidget { return this.selectNodeHandler.isNodeSelected(node); } - public removeFromSelection(node: Node): JQuery { + public removeFromSelection(node?: Node): JQuery { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } @@ -459,11 +465,15 @@ export class JqTreeWidget extends SimpleWidget { return this.element; } - public scrollToNode(node: Node): JQuery { + public scrollToNode(node?: Node): JQuery { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } + if (!node.element) { + return this.element; + } + const top = getOffsetTop(node.element) - getOffsetTop(this.$el.get(0) as HTMLElement); @@ -477,9 +487,11 @@ export class JqTreeWidget extends SimpleWidget { return this.saveStateHandler.getState(); } - public setState(state: SavedState): JQuery { - this.saveStateHandler.setInitialState(state); - this.refreshElements(null); + public setState(state?: SavedState): JQuery { + if (state) { + this.saveStateHandler.setInitialState(state); + this.refreshElements(null); + } return this.element; } @@ -675,7 +687,7 @@ export class JqTreeWidget extends SimpleWidget { private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null { const dataUrl = - this.options.dataUrl || (this.element.data("url") as string | null); + this.options.dataUrl ?? (this.element.data("url") as string | null); const getUrlFromString = (url: string): JQuery.AjaxSettings => { const urlInfo: JQuery.AjaxSettings = { url }; @@ -689,13 +701,13 @@ export class JqTreeWidget extends SimpleWidget { if (node?.id) { // Load on demand of a subtree; add node parameter const data = { node: node.id }; - urlInfo["data"] = data; + urlInfo.data = data; } else { // Add selected_node parameter const selectedNodeId = this.getNodeIdToBeSelected(); if (selectedNodeId) { const data = { selected_node: selectedNodeId }; - urlInfo["data"] = data; + urlInfo.data = data; } } }; @@ -728,10 +740,6 @@ export class JqTreeWidget extends SimpleWidget { } }; - if (!this.options.nodeClass) { - return; - } - this.tree = new this.options.nodeClass( null, true, @@ -903,9 +911,7 @@ export class JqTreeWidget extends SimpleWidget { const node = this.getSelectedNode(); if (node) { const nodeElement = this.getNodeElementForNode(node); - if (nodeElement) { - nodeElement.select(mustSetFocus); - } + nodeElement.select(mustSetFocus); } } @@ -961,16 +967,16 @@ export class JqTreeWidget extends SimpleWidget { return; } const defaultOptions = { mustSetFocus: true, mustToggle: true }; - const selectOptions = { ...defaultOptions, ...(optionsParam || {}) }; + const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) }; const canSelect = (): boolean => { if (this.options.onCanSelectNode) { return ( - this.options.selectable === true && + this.options.selectable && this.options.onCanSelectNode(node) ); } else { - return this.options.selectable === true; + return this.options.selectable; } }; @@ -1043,7 +1049,7 @@ export class JqTreeWidget extends SimpleWidget { parentNode: Node | null, onFinished: HandleFinishedLoading | null, ): void { - const urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode); + const urlInfo = urlInfoParam ?? this.getDataUrlInfo(parentNode); this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished); } @@ -1274,7 +1280,7 @@ export class JqTreeWidget extends SimpleWidget { private openParents(node: Node) { const parent = node.parent; - if (parent && parent.parent && !parent.is_open) { + if (parent?.parent && !parent.is_open) { this.openNode(parent, false); } } diff --git a/tree.jquery.debug.js b/tree.jquery.debug.js index 6563b30e..06b08710 100644 --- a/tree.jquery.debug.js +++ b/tree.jquery.debug.js @@ -180,7 +180,7 @@ var jqtree = (function (exports) { } }; const handleFirstNode = node => { - if (node !== currentNode) { + if (node !== currentNode && node.element) { addHitPosition(node, Position.Before, getOffsetTop(node.element)); } }; @@ -580,11 +580,11 @@ var jqtree = (function (exports) { this.rtl = rtl; this.showEmptyFolder = showEmptyFolder; this.tabIndex = tabIndex; - this.openedIconElement = this.createButtonElement(openedIcon || "+"); - this.closedIconElement = this.createButtonElement(closedIcon || "-"); + this.openedIconElement = this.createButtonElement(openedIcon ?? "+"); + this.closedIconElement = this.createButtonElement(closedIcon ?? "-"); } render(fromNode) { - if (fromNode && fromNode.parent) { + if (fromNode?.parent) { this.renderFromNode(fromNode); } else { this.renderFromRoot(); @@ -598,6 +598,10 @@ var jqtree = (function (exports) { } } renderFromNode(node) { + if (!node.element) { + return; + } + // remember current li const $previousLi = jQuery(node.element); @@ -612,9 +616,7 @@ var jqtree = (function (exports) { $previousLi.remove(); // create children - if (node.children) { - this.createDomElements(li, node.children, false, node.getLevel() + 1); - } + this.createDomElements(li, node.children, false, node.getLevel() + 1); } createDomElements(element, children, isRootNode, level) { const ul = this.createUl(isRootNode); @@ -779,8 +781,6 @@ var jqtree = (function (exports) { const div = document.createElement("div"); div.innerHTML = value; return document.createTextNode(div.innerHTML); - } else if (value == null) { - return undefined; } else if (value.nodeType) { return value; } else { @@ -839,7 +839,7 @@ var jqtree = (function (exports) { element.classList.remove("jqtree-loading"); } getDomElement(parentNode) { - if (parentNode) { + if (parentNode?.element) { return parentNode.element; } else { return this.treeElement; @@ -868,7 +868,7 @@ var jqtree = (function (exports) { error: handleError, ...urlInfo }; - ajaxSettings.method = ajaxSettings.method?.toUpperCase() || "GET"; + ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? "GET"; void jQuery.ajax(ajaxSettings); } parseData(data) { @@ -1112,7 +1112,7 @@ var jqtree = (function (exports) { return; } if (this.mouseDownInfo) { - this.isMouseStarted = this.onMouseStart(this.mouseDownInfo) !== false; + this.isMouseStarted = this.onMouseStart(this.mouseDownInfo); } if (this.isMouseStarted) { this.onMouseDrag(positionInfo); @@ -1142,9 +1142,6 @@ var jqtree = (function (exports) { document.removeEventListener("touchend", this.touchEnd); } touchStart = e => { - if (!e) { - return; - } if (e.touches.length > 1) { return; } @@ -1155,9 +1152,6 @@ var jqtree = (function (exports) { this.handleMouseDown(getPositionInfoFromTouch(touch, e)); }; touchMove = e => { - if (!e) { - return; - } if (e.touches.length > 1) { return; } @@ -1168,9 +1162,6 @@ var jqtree = (function (exports) { this.handleMouseMove(e, getPositionInfoFromTouch(touch, e)); }; touchEnd = e => { - if (!e) { - return; - } if (e.touches.length > 1) { return; } @@ -1188,18 +1179,23 @@ var jqtree = (function (exports) { if (!clickTarget) { return; } - if (clickTarget.type === "button") { - this.onClickButton(clickTarget.node); - e.preventDefault(); - e.stopPropagation(); - } else if (clickTarget.type === "label") { - const event = this.triggerEvent("tree.click", { - node: clickTarget.node, - click_event: e - }); - if (!event.isDefaultPrevented()) { - this.onClickTitle(clickTarget.node); - } + switch (clickTarget.type) { + case "button": + this.onClickButton(clickTarget.node); + e.preventDefault(); + e.stopPropagation(); + break; + case "label": + { + const event = this.triggerEvent("tree.click", { + node: clickTarget.node, + click_event: e + }); + if (!event.isDefaultPrevented()) { + this.onClickTitle(clickTarget.node); + } + break; + } } }; handleDblclick = e => { @@ -1332,24 +1328,23 @@ var jqtree = (function (exports) { result: must load on demand */ setInitialState(state) { - if (!state) { - return false; - } else { - let mustLoadOnDemand = false; - if (state.open_nodes) { - mustLoadOnDemand = this.openInitialNodes(state.open_nodes); - } - if (state.selected_node) { - this.resetSelection(); - this.selectInitialNodes(state.selected_node); - } - return mustLoadOnDemand; + let mustLoadOnDemand = false; + if (state.open_nodes) { + mustLoadOnDemand = this.openInitialNodes(state.open_nodes); + } + this.resetSelection(); + if (state.selected_node) { + this.selectInitialNodes(state.selected_node); } + return mustLoadOnDemand; } setInitialStateOnDemand(state, cbFinished) { let loadingCount = 0; let nodeIds = state.open_nodes; const openNodes = () => { + if (!nodeIds) { + return; + } const newNodesIds = []; for (const nodeId of nodeIds) { const node = this.getNodeById(nodeId); @@ -1366,8 +1361,10 @@ var jqtree = (function (exports) { } } nodeIds = newNodesIds; - if (this.selectInitialNodes(state.selected_node)) { - this.refreshElements(null); + if (state.selected_node) { + if (this.selectInitialNodes(state.selected_node)) { + this.refreshElements(null); + } } if (loadingCount === 0) { cbFinished(); @@ -1385,7 +1382,7 @@ var jqtree = (function (exports) { getNodeIdToBeSelected() { const state = this.getStateFromStorage(); if (state?.selected_node) { - return state.selected_node[0] || null; + return state.selected_node[0] ?? null; } else { return null; } @@ -1394,7 +1391,7 @@ var jqtree = (function (exports) { const state = JSON.parse(jsonData); // Check if selected_node is an int (instead of an array) - if (state && state.selected_node && isInt(state.selected_node)) { + if (state.selected_node && isInt(state.selected_node)) { // Convert to array state.selected_node = [state.selected_node]; } @@ -1449,20 +1446,15 @@ var jqtree = (function (exports) { } supportsLocalStorage() { const testSupport = () => { - // Is local storage supported? - if (localStorage == null) { + // Check if it's possible to store an item. Safari does not allow this in private browsing mode. + try { + const key = "_storage_test"; + sessionStorage.setItem(key, "value"); + sessionStorage.removeItem(key); + } catch { return false; - } else { - // Check if it's possible to store an item. Safari does not allow this in private browsing mode. - try { - const key = "_storage_test"; - sessionStorage.setItem(key, "value"); - sessionStorage.removeItem(key); - } catch (error) { - return false; - } - return true; } + return true; }; if (this._supportsLocalStorage == null) { this._supportsLocalStorage = testSupport(); @@ -1662,7 +1654,7 @@ var jqtree = (function (exports) { return this.documentScrollWidth; } getNewVerticalScrollDirection(pageY) { - const scrollTop = jQuery(document).scrollTop() || 0; + const scrollTop = jQuery(document).scrollTop() ?? 0; const distanceTop = pageY - scrollTop; if (distanceTop < 20) { return "top"; @@ -1783,7 +1775,7 @@ var jqtree = (function (exports) { getSelectedNode() { const selectedNodes = this.getSelectedNodes(); if (selectedNodes.length) { - return selectedNodes[0] || false; + return selectedNodes[0] ?? false; } else { return false; } @@ -1924,7 +1916,8 @@ var jqtree = (function (exports) { } else if (typeof argument1 === "string" && argument1[0] !== "_") { const functionName = argument1; if (functionName === "destroy") { - return destroyWidget(this); + destroyWidget(this); + return undefined; } else if (functionName === "get_widget_class") { return widgetClass; } else { @@ -1947,7 +1940,7 @@ var jqtree = (function (exports) { this.$el = jQuery(el); // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - const defaults = this.constructor["defaults"]; + const defaults = this.constructor.defaults; this.options = { ...defaults, ...options @@ -1964,7 +1957,7 @@ var jqtree = (function (exports) { } } - const isNodeRecordWithChildren = data => typeof data === "object" && "children" in data && data["children"] instanceof Array; + const isNodeRecordWithChildren = data => typeof data === "object" && "children" in data && data.children instanceof Array; class Node { constructor() { @@ -2114,12 +2107,10 @@ var jqtree = (function (exports) { */ iterate(callback) { const _iterate = (node, level) => { - if (node.children) { - for (const child of node.children) { - const result = callback(child, level); - if (result && child.hasChildren()) { - _iterate(child, level + 1); - } + for (const child of node.children) { + const result = callback(child, level); + if (result && child.hasChildren()) { + _iterate(child, level + 1); } } }; @@ -2183,7 +2174,7 @@ var jqtree = (function (exports) { } } if (node.hasChildren()) { - tmpNode["children"] = getDataFromNodes(node.children); + tmpNode.children = getDataFromNodes(node.children); } return tmpNode; }); @@ -2200,7 +2191,7 @@ var jqtree = (function (exports) { getNodeByNameMustExist(name) { const node = this.getNodeByCallback(n => n.name === name); if (!node) { - throw `Node with name ${name} not found`; + throw new Error(`Node with name ${name} not found`); } return node; } @@ -2296,7 +2287,7 @@ var jqtree = (function (exports) { return level; } getNodeById(nodeId) { - return this.idMapping.get(nodeId) || null; + return this.idMapping.get(nodeId) ?? null; } addNodeToIndex(node) { if (node.id != null) { @@ -2321,7 +2312,7 @@ var jqtree = (function (exports) { } else { const previousIndex = this.parent.getChildIndex(this) - 1; if (previousIndex >= 0) { - return this.parent.children[previousIndex] || null; + return this.parent.children[previousIndex] ?? null; } else { return null; } @@ -2333,7 +2324,7 @@ var jqtree = (function (exports) { } else { const nextIndex = this.parent.getChildIndex(this) + 1; if (nextIndex < this.parent.children.length) { - return this.parent.children[nextIndex] || null; + return this.parent.children[nextIndex] ?? null; } else { return null; } @@ -2355,7 +2346,7 @@ var jqtree = (function (exports) { getNextNode() { let includeChildren = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; if (includeChildren && this.hasChildren()) { - return this.children[0] || null; + return this.children[0] ?? null; } else if (!this.parent) { return null; } else { @@ -2370,7 +2361,7 @@ var jqtree = (function (exports) { getNextVisibleNode() { if (this.hasChildren() && this.is_open) { // First child - return this.children[0] || null; + return this.children[0] ?? null; } else { if (!this.parent) { return null; @@ -2438,7 +2429,7 @@ var jqtree = (function (exports) { if (!(lastChild.hasChildren() && lastChild.is_open)) { return lastChild; } else { - return lastChild?.getLastChild(); + return lastChild.getLastChild(); } } } @@ -2470,7 +2461,7 @@ var jqtree = (function (exports) { this.tree?.removeNodeFromIndex(node); } getNodeClass() { - return this.nodeClass || this?.tree?.nodeClass || Node; + return this.nodeClass ?? this.tree?.nodeClass ?? Node; } createNode(nodeData) { const nodeClass = this.getNodeClass(); @@ -2833,7 +2824,7 @@ var jqtree = (function (exports) { onFinished = param2; } if (slide == null) { - slide = this.options.slide ?? false; + slide = this.options.slide; } return [slide, onFinished]; }; @@ -2901,7 +2892,7 @@ var jqtree = (function (exports) { return this.element; } appendNode(newNodeInfo, parentNodeParam) { - const parentNode = parentNodeParam || this.tree; + const parentNode = parentNodeParam ?? this.tree; const node = parentNode.append(newNodeInfo); this.refreshElements(parentNode); return node; @@ -2916,6 +2907,9 @@ var jqtree = (function (exports) { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } + if (!data) { + return this.element; + } const idIsChanged = typeof data === "object" && data.id && data.id !== node.id; if (idIsChanged) { this.tree.removeNodeFromIndex(node); @@ -2924,7 +2918,7 @@ var jqtree = (function (exports) { if (idIsChanged) { this.tree.addNodeToIndex(node); } - if (typeof data === "object" && data["children"] && data["children"] instanceof Array) { + if (typeof data === "object" && data.children && data.children instanceof Array) { node.removeChildren(); if (data.children.length) { node.loadFromData(data.children); @@ -2948,6 +2942,9 @@ var jqtree = (function (exports) { if (!targetNode) { throw Error(PARAM_IS_EMPTY + "targetNode"); } + if (!position) { + throw Error(PARAM_IS_EMPTY + "position"); + } const positionIndex = getPosition(position); if (positionIndex !== undefined) { this.tree.moveNode(node, targetNode, positionIndex); @@ -2964,7 +2961,7 @@ var jqtree = (function (exports) { } this.selectNodeHandler.addToSelection(node); this.openParents(node); - this.getNodeElementForNode(node).select(mustSetFocus === undefined ? true : mustSetFocus); + this.getNodeElementForNode(node).select(mustSetFocus ?? true); this.saveState(); return this.element; } @@ -2990,6 +2987,9 @@ var jqtree = (function (exports) { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } + if (!node.element) { + return this.element; + } const top = getOffsetTop(node.element) - getOffsetTop(this.$el.get(0)); this.scrollHandler.scrollToY(top); return this.element; @@ -2998,8 +2998,10 @@ var jqtree = (function (exports) { return this.saveStateHandler.getState(); } setState(state) { - this.saveStateHandler.setInitialState(state); - this.refreshElements(null); + if (state) { + this.saveStateHandler.setInitialState(state); + this.refreshElements(null); + } return this.element; } setOption(option, value) { @@ -3144,7 +3146,7 @@ var jqtree = (function (exports) { } } getDataUrlInfo(node) { - const dataUrl = this.options.dataUrl || this.element.data("url"); + const dataUrl = this.options.dataUrl ?? this.element.data("url"); const getUrlFromString = url => { const urlInfo = { url @@ -3158,7 +3160,7 @@ var jqtree = (function (exports) { const data = { node: node.id }; - urlInfo["data"] = data; + urlInfo.data = data; } else { // Add selected_node parameter const selectedNodeId = this.getNodeIdToBeSelected(); @@ -3166,7 +3168,7 @@ var jqtree = (function (exports) { const data = { selected_node: selectedNodeId }; - urlInfo["data"] = data; + urlInfo.data = data; } } }; @@ -3195,9 +3197,6 @@ var jqtree = (function (exports) { this.triggerEvent("tree.init"); } }; - if (!this.options.nodeClass) { - return; - } this.tree = new this.options.nodeClass(null, true, this.options.nodeClass); this.selectNodeHandler.clear(); this.tree.loadFromData(data); @@ -3334,9 +3333,7 @@ var jqtree = (function (exports) { const node = this.getSelectedNode(); if (node) { const nodeElement = this.getNodeElementForNode(node); - if (nodeElement) { - nodeElement.select(mustSetFocus); - } + nodeElement.select(mustSetFocus); } } deselectCurrentNode() { @@ -3384,13 +3381,13 @@ var jqtree = (function (exports) { }; const selectOptions = { ...defaultOptions, - ...(optionsParam || {}) + ...(optionsParam ?? {}) }; const canSelect = () => { if (this.options.onCanSelectNode) { - return this.options.selectable === true && this.options.onCanSelectNode(node); + return this.options.selectable && this.options.onCanSelectNode(node); } else { - return this.options.selectable === true; + return this.options.selectable; } }; if (!canSelect()) { @@ -3446,7 +3443,7 @@ var jqtree = (function (exports) { this.refreshElements(parentNode); } doLoadDataFromUrl(urlInfoParam, parentNode, onFinished) { - const urlInfo = urlInfoParam || this.getDataUrlInfo(parentNode); + const urlInfo = urlInfoParam ?? this.getDataUrlInfo(parentNode); this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished); } loadFolderOnDemand(node) { @@ -3636,7 +3633,7 @@ var jqtree = (function (exports) { } openParents(node) { const parent = node.parent; - if (parent && parent.parent && !parent.is_open) { + if (parent?.parent && !parent.is_open) { this.openNode(parent, false); } } diff --git a/tree.jquery.debug.js.map b/tree.jquery.debug.js.map index e3e424d6..3006bbb3 100644 --- a/tree.jquery.debug.js.map +++ b/tree.jquery.debug.js.map @@ -1 +1 @@ -{"version":3,"file":"tree.jquery.debug.js","sources":["src/version.ts","src/position.ts","src/dragAndDropHandler/dragElement.ts","src/util.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/elementsRenderer.ts","src/dataLoader.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.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/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/tree.jquery.ts"],"sourcesContent":["const version = \"1.8.5\";\n\nexport default version;\n","export enum Position {\n Before = 1,\n After,\n Inside,\n None,\n}\n\nconst positionNames: Record = {\n before: Position.Before,\n after: Position.After,\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","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private offsetX: number;\n private offsetY: number;\n private element: HTMLElement;\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 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 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\nexport default DragElement;\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","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 { HitArea } from \"./types\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\n\ninterface HitPosition {\n top: number;\n node: Node;\n position: Position;\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 top,\n node,\n position,\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) {\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 top: areaTop,\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\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 { Node } from \"../node\";\nimport { getPositionName, Position } from \"../position\";\nimport { DropHint, HitArea } from \"./types\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport NodeElement from \"../nodeElement\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { getElementPosition } from \"../util\";\nimport {\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n DragMethod,\n} from \"../jqtreeOptions\";\nimport {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\n\ninterface Dimensions {\n left: number;\n top: number;\n right: number;\n bottom: 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: number | false;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport class DragAndDropHandler {\n public hitAreas: HitArea[];\n public isDragging: boolean;\n public currentItem: NodeElement | null;\n public hoveredArea: HitArea | null;\n\n private autoEscape?: boolean;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\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: number | false;\n private openFolderTimer: number | null;\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\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 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 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 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 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 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 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 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 removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\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 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 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 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 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 moved_node: movedNode,\n target_node: targetNode,\n position: getPositionName(position),\n previous_parent: previousParent,\n do_move: doMove,\n original_event: positionInfo.originalEvent,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\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 left,\n top,\n right: left + this.treeElement.clientWidth,\n bottom: top + this.treeElement.clientHeight + 16,\n };\n }\n}\n","import { getBoolString } from \"./util\";\nimport { Node } from \"./node\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\n\ninterface ElementsRendererParams {\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n $element: JQuery;\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 public openedIconElement?: HTMLElement | Text;\n public closedIconElement?: HTMLElement | Text;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private $element: JQuery;\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 constructor({\n autoEscape,\n buttonLeft,\n closedIcon,\n onCreateLi,\n dragAndDrop,\n $element,\n getTree,\n isNodeSelected,\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 public render(fromNode: Node | null): void {\n if (fromNode && fromNode.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\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 public renderFromNode(node: Node): void {\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n this.attachNodeData(node, li);\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n if (node.children) {\n this.createDomElements(\n li,\n node.children,\n false,\n node.getLevel() + 1,\n );\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 this.attachNodeData(child, li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\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 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 if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\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 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 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 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 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 == null) {\n return undefined;\n } else if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\n }\n }\n}\n","import { Node } from \"./node\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\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 public loadFromUrl(\n urlInfo: string | JQuery.AjaxSettings | null,\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: string | NodeData[]): 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 private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode) {\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 isLoading,\n node,\n $el,\n });\n }\n\n private submitRequest(\n urlInfoInput: string | JQuery.AjaxSettings,\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 method: \"GET\",\n cache: false,\n dataType: \"json\",\n success: handleSuccess,\n error: handleError,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() || \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n\n private parseData(data: string | NodeData[]): 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","import { Node } from \"./node\";\nimport {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\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 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 this.handleKeyDownHandler = this.handleKeyDown.bind(this);\n\n document.addEventListener(\"keydown\", this.handleKeyDownHandler);\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 public moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return true;\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 false;\n }\n }\n }\n\n public 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 false;\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 public selectNode(node: Node | null): boolean {\n if (!node) {\n return true;\n } else {\n this.originalSelectNode(node);\n\n return false;\n }\n }\n\n private handleKeyDown = (e: KeyboardEvent): boolean => {\n if (!this.canHandleKeyboard()) {\n return true;\n }\n\n const selectedNode = this.getSelectedNode();\n if (!selectedNode) {\n return true;\n }\n\n switch (e.key) {\n case \"ArrowDown\":\n return this.moveDown(selectedNode);\n\n case \"ArrowUp\":\n return this.moveUp(selectedNode);\n\n case \"ArrowRight\":\n return this.moveRight(selectedNode);\n\n case \"ArrowLeft\":\n return this.moveLeft(selectedNode);\n\n default:\n return true;\n }\n };\n\n private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\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 {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\nimport { TriggerEvent } from \"./jqtreeMethodTypes\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ntype GetNode = (element: HTMLElement) => null | Node;\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 private isMouseDelayMet: boolean;\n private isMouseStarted: boolean;\n private mouseDelayTimer: number | null;\n private mouseDownInfo: PositionInfo | null;\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 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 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 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 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 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 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 private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\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 =\n this.onMouseStart(this.mouseDownInfo) !== false;\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 mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\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 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 touchStart = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\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 touchMove = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\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 touchEnd = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\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 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 if (clickTarget.type === \"button\") {\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n } else if (clickTarget.type === \"label\") {\n const event = this.triggerEvent(\"tree.click\", {\n node: clickTarget.node,\n click_event: e,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n }\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 node: clickTarget.node,\n click_event: e,\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 node,\n click_event: e,\n });\n return false;\n }\n }\n\n return 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 type: \"button\",\n node,\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 type: \"label\",\n node,\n };\n }\n }\n }\n\n return null;\n }\n}\n\nexport default MouseHandler;\n","import { isInt } from \"./util\";\nimport { Node } from \"./node\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\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 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 private _supportsLocalStorage: boolean | null;\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 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 public getStateFromStorage(): SavedState | null {\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 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 /*\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 if (!state) {\n return false;\n } else {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n if (state.selected_node) {\n this.resetSelection();\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\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 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 (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\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 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 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 && 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 loadFromStorage(): string | null {\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 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 resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\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 supportsLocalStorage(): boolean {\n const testSupport = (): boolean => {\n // Is local storage supported?\n if (localStorage == null) {\n return false;\n } else {\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 (error) {\n return false;\n }\n\n return true;\n }\n };\n\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n\n return this._supportsLocalStorage;\n }\n}\n","import type { ScrollParent } from \"./types\";\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 verticalScrollTimeout?: number;\n private verticalScrollDirection?: VerticalScrollDirection;\n\n constructor({ container, refreshHitAreas }: Params) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\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 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 ): VerticalScrollDirection | undefined {\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 scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n\n this.container.scrollBy({\n left: distance,\n top: 0,\n behavior: \"instant\",\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 left: 0,\n top: distance,\n behavior: \"instant\",\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\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 getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n this.scrollParentBottom = this.getScrollParentTop() + this.container.clientHeight;\n }\n\n return this.scrollParentBottom;\n }\n}\n","import type { ScrollParent } from \"./types\";\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 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 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 canScrollRight() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollLeft + documentElement.clientWidth <\n this.getDocumentScrollWidth()\n );\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 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 getNewVerticalScrollDirection(\n pageY: number,\n ): VerticalScrollDirection | undefined {\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({ left: distance, top: 0, behavior: \"instant\" });\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({ left: 0, top: distance, behavior: \"instant\" });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import type { ScrollParent } from \"./types\";\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 { ScrollParent } from \"./scrollHandler/types\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\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 public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\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","import { Node } from \"./node\";\nimport { GetNodeById } from \"./jqtreeMethodTypes\";\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 getSelectedNode(): Node | false {\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 clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\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 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","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 ): SimpleWidget | null => {\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 return destroyWidget(this);\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 public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public options: WidgetOptions;\n\n public $el: JQuery;\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 destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n\n public deinit(): void {\n //\n }\n}\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 public id?: NodeId;\n public name: string;\n public children: Node[];\n public parent: Node | null;\n public idMapping: Map;\n public tree?: Node;\n public nodeClass?: typeof Node;\n public load_on_demand: boolean;\n public is_open: boolean;\n public element: HTMLElement;\n public is_loading: boolean;\n public isEmptyFolder: boolean;\n\n [key: string]: unknown;\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 /*\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 /*\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[]): Node {\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 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 /*\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 /*\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 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 public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\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 if (node.children) {\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\n _iterate(this, 0);\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 /*\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 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 `Node with name ${name} not found`;\n }\n\n return node;\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 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 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 remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\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 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 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 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 getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) || null;\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 removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\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 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 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 getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\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 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 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 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 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 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 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 // 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 private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\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 private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\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","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\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n\n constructor(element: HTMLElement) {\n this.element = element;\n this.ghost = this.createGhostElement();\n\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n public remove(): void {\n this.ghost.remove();\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\nexport default GhostDropHint;\n","import { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { DropHint } from \"../dragAndDropHandler/types\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n $treeElement: JQuery;\n}\n\nclass NodeElement {\n public node: Node;\n public element: HTMLElement;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private $treeElement: JQuery;\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 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 addDropHint(position: number): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.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 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 protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\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 mustShowBorderDropHint(position: Position): boolean {\n return position === Position.Inside;\n }\n}\n\nexport default NodeElement;\n","import { Position } from \"../position\";\nimport NodeElement, { NodeElementParams } from \"./index\";\nimport { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\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 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 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 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\nexport default FolderElement;\n","import __version__ from \"./version\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport { Node } from \"./node\";\nimport { getPosition } from \"./position\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\n\ninterface SelectNodeOptions {\n mustToggle?: boolean;\n mustSetFocus?: 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 element: JQuery;\n private isInitialized: boolean;\n private tree: Node;\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\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\n public toggle(node: Node, slideParam: null | 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.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public getTree(): Node {\n return this.tree;\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 getSelectedNode(): Node | false {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\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: string | null | Node,\n param2?: Node | null | HandleFinishedLoading,\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 reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.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 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 getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\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: OnFinishOpenNode | null;\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 ?? false;\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 closeNode(node: Node, slideParam?: null | boolean): 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 isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\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 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 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 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 updateNode(node: Node, data: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\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 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 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 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 getStateFromStorage(): SavedState | null {\n return this.saveStateHandler.getStateFromStorage();\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(\n mustSetFocus === undefined ? true : mustSetFocus,\n );\n\n this.saveState();\n\n return this.element;\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\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 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 scrollToNode(node: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\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 getState(): SavedState | null {\n return this.saveStateHandler.getState();\n }\n\n public setState(state: SavedState): JQuery {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n\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 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 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 getVersion(): string {\n return __version__;\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 /*\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 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 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 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 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 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 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 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 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 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 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 getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl || (this.element.data(\"url\") as string | null);\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 getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\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 if (!this.options.nodeClass) {\n return;\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 // 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 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 getNode(element: HTMLElement): null | Node {\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 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 if (nodeElement) {\n nodeElement.select(mustSetFocus);\n }\n }\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\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 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 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 === true &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable === true;\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 node,\n deselected_node: deselectedNode,\n });\n this.openParents(node);\n }\n\n saveState();\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 tree_data: data,\n parent_node: parentNode,\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 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 doLoadDataFromUrl(\n urlInfoParam: string | JQuery.AjaxSettings | null,\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 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 containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\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 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 autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n $element: $treeElement,\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 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 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;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n $treeElement,\n });\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent && parent.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["version","Position","positionNames","before","Before","after","After","inside","Inside","none","None","getPositionName","position","name","Object","prototype","hasOwnProperty","call","getPosition","DragElement","constructor","_ref","autoEscape","nodeName","offsetX","offsetY","treeElement","element","createElement","appendChild","move","pageX","pageY","style","left","top","remove","document","classList","add","textContent","innerHTML","isInt","n","isFunction","v","getBoolString","value","getOffsetTop","getElementPosition","rect","getBoundingClientRect","x","window","scrollX","y","scrollY","iterateVisibleNodes","tree","handleAfterOpenFolder","handleClosedFolder","handleFirstNode","handleNode","handleOpenFolder","isFirstNode","iterate","node","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","triggerEvent","hoveredArea","isDragging","currentItem","mouseCapture","positionInfo","target","mustCaptureElement","jQuery","nodeElement","mouseStart","refresh","dragElement","mouseDrag","area","findHoveredArea","canMoveToArea","isFolder","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","originalEvent","mouseStop","moveItem","clear","removeHover","removeHitAreas","getTreeDimensions","positionName","previousGhost","dimensions","right","low","high","mid","addDropHint","folder","openFolder","openFolderDelay","openFolderTimer","setTimeout","clearTimeout","movedNode","targetNode","previousParent","parent","doMove","moveNode","event","move_info","moved_node","target_node","previous_parent","do_move","original_event","isDefaultPrevented","treePosition","clientWidth","ElementsRenderer","buttonLeft","closedIcon","onCreateLi","dragAndDrop","$element","isNodeSelected","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","render","fromNode","renderFromNode","renderFromRoot","empty","createDomElements","$previousLi","li","createLi","getLevel","attachNodeData","isRootNode","level","ul","createUl","data","classString","role","className","setAttribute","isSelected","Boolean","mustShowFolder","isEmptyFolder","createFolderLi","createNodeLi","setTreeItemAriaAttributes","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","div","buttonLink","cloneNode","titleSpan","createTitleSpan","liClasses","join","classes","undefined","is_loading","createTextNode","nodeType","DataLoader","dataFilter","loadData","onLoadFailed","onLoading","loadFromUrl","urlInfo","parentNode","onFinished","getDomElement","addLoadingClass","notifyLoading","stopLoading","removeLoadingClass","handleSuccess","parseData","handleError","jqXHR","submitRequest","isLoading","$el","urlInfoInput","url","ajaxSettings","method","cache","dataType","success","error","toUpperCase","ajax","getParsedData","JSON","parse","parsedData","KeyHandler","closeNode","getSelectedNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","handleKeyDownHandler","handleKeyDown","bind","addEventListener","deinit","removeEventListener","moveDown","selectedNode","getNextVisibleNode","moveUp","getPreviousVisibleNode","moveRight","moveLeft","getParent","e","canHandleKeyboard","key","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","handleClick","handleDblclick","mouseDown","passive","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","removeMouseMoveEventListeners","button","result","handleMouseDown","cancelable","preventDefault","handleMouseUp","handleStartMouse","mouseMove","touchMove","mouseUp","touchEnd","mouseDelay","startMouseDelayTimer","handleMouseMove","touches","clickTarget","getClickTarget","type","stopPropagation","click_event","closest","jqTreeElement","SaveStateHandler","addToSelection","getNodeById","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","state","stringify","getState","supportsLocalStorage","localStorage","setItem","getKeyName","getStateFromStorage","jsonData","loadFromStorage","parseState","getOpenNodeIds","openNodes","id","getSelectedNodeIds","selectedNodeIds","open_nodes","selected_node","setInitialState","mustLoadOnDemand","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand","cbFinished","loadingCount","nodeIds","newNodesIds","nodeId","load_on_demand","loadAndOpenNode","getNodeIdToBeSelected","getItem","selectCount","selectedNodes","testSupport","sessionStorage","removeItem","_supportsLocalStorage","ContainerScrollParent","container","refreshHitAreas","checkHorizontalScrolling","newHorizontalScrollDirection","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","verticalScrollTimeout","scrollHorizontally","checkVerticalScrolling","newVerticalScrollDirection","getNewVerticalScrollDirection","verticalScrollDirection","scrollVertically","scrollLeft","scrollToY","scrollTop","stopScrolling","scrollParentTop","scrollParentBottom","scrollParentOffset","rightEdge","leftEdge","isNearRightEdge","isNearLeftEdge","getScrollParentTop","getScrollParentBottom","distance","scrollBy","behavior","DocumentScrollParent","documentElement","treeTop","documentScrollHeight","documentScrollWidth","windowWidth","innerWidth","canScrollRight","getDocumentScrollWidth","canScrollDown","getDocumentScrollHeight","scrollHeight","scrollWidth","distanceTop","windowHeight","innerHeight","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","getParentWithOverflow","parentElement","createScrollParent","tagName","ScrollHandler","scrollParent","checkScrolling","getScrollParent","SelectNodeHandler","Set","selectedSingleNode","getSelectedNodesUnder","isParentOf","has","includeChildren","arguments","delete","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","get","existingWidget","simpleWidgetClass","init","destroyWidget","destroy","removeData","callFunction","functionName","args","simpleWidget","widgetFunction","apply","fn","argument1","_len","Array","_key","defaults","isNodeRecordWithChildren","Node","nodeData","isRoot","nodeClass","setData","idMapping","Map","o","loadFromData","removeChildren","childData","createNode","addChild","setParent","addChildAtPosition","index","splice","removeChild","doRemoveChild","getChildIndex","indexOf","callback","_iterate","getData","includeParent","getDataFromNodes","nodes","map","tmpNode","k","getNodeByName","getNodeByCallback","getNodeByNameMustExist","addAfter","nodeInfo","childIndex","loadChildrenFromData","addBefore","addParent","newParent","originalParent","append","prepend","addNodeToIndex","set","removeNodeFromIndex","getPreviousSibling","previousIndex","getNextSibling","nextIndex","getNodesByProperty","filter","f","getNextNode","nextSibling","getPreviousNode","previousSibling","getLastChild","lastChild","initFromData","addNode","addChildren","childrenData","getNodeClass","BorderDropHint","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","circleSpan","lineSpan","NodeElement","$treeElement","mustShowBorderDropHint","select","mustSetFocus","getTitleSpan","toString","focus","deselect","removeAttribute","blur","getUl","FolderElement","open","animationSpeed","getButton","icon","doOpen","slideDown","show","close","doClose","slideUp","hide","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","toggle","slideParam","Error","optionsParam","doSelectNode","selectNodeHandler","toJson","doLoadData","loadDataFromUrl","param1","param2","param3","doLoadDataFromUrl","reload","getNodeByHtmlElement","inputElement","HTMLElement","parseParams","openNodeInternal","createFolderElement","dndHandler","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","removeNode","appendNode","parentNodeParam","prependNode","updateNode","idIsChanged","isSelectedNodeInSubtree","subtree","positionIndex","saveStateHandler","openParents","scrollToNode","scrollHandler","setState","setOption","option","keyHandler","getVersion","__version__","doOpenNode","_node","_slide","_onFinished","folderElement","loadFolderOnDemand","mustSelect","renderer","selectCurrentNode","createNodeElement","isInitialized","getRtlOption","getDefaultClosedIcon","connectHandlers","initData","off","mouseHandler","eventName","values","Event","trigger","getDataUrlInfo","getUrlFromString","setUrlInfoData","selectedNodeId","initTree","doInit","restoreState","autoOpenNodes","maxLevel","getAutoOpenMaxLevel","isRestored","parseInt","liElement","deselectCurrentNode","dataRtl","defaultOptions","mustToggle","selectOptions","canSelect","previous_node","deselectedNode","deselected_node","deselectNodes","loadSubtree","tree_data","parent_node","selectedNodesUnderParent","urlInfoParam","dataLoader","containsElement","activeElement"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree.jquery.debug.js","sources":["src/version.ts","src/position.ts","src/dragAndDropHandler/dragElement.ts","src/util.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/elementsRenderer.ts","src/dataLoader.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.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/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/tree.jquery.ts"],"sourcesContent":["const version = \"1.8.5\";\n\nexport default version;\n","export enum Position {\n Before = 1,\n After,\n Inside,\n None,\n}\n\nconst positionNames: Record = {\n before: Position.Before,\n after: Position.After,\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","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private offsetX: number;\n private offsetY: number;\n private element: HTMLElement;\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 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 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\nexport default DragElement;\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","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 { HitArea } from \"./types\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\n\ninterface HitPosition {\n top: number;\n node: Node;\n position: Position;\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 top,\n node,\n position,\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 top: areaTop,\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\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 { Node } from \"../node\";\nimport { getPositionName, Position } from \"../position\";\nimport { DropHint, HitArea } from \"./types\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport NodeElement from \"../nodeElement\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { getElementPosition } from \"../util\";\nimport {\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n DragMethod,\n} from \"../jqtreeOptions\";\nimport {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\n\ninterface Dimensions {\n left: number;\n top: number;\n right: number;\n bottom: 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: number | false;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport class DragAndDropHandler {\n public hitAreas: HitArea[];\n public isDragging: boolean;\n public currentItem: NodeElement | null;\n public hoveredArea: HitArea | null;\n\n private autoEscape?: boolean;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\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: number | false;\n private openFolderTimer: number | null;\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\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 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 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 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 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 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 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 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 removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\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 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 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 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 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 moved_node: movedNode,\n target_node: targetNode,\n position: getPositionName(position),\n previous_parent: previousParent,\n do_move: doMove,\n original_event: positionInfo.originalEvent,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\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 left,\n top,\n right: left + this.treeElement.clientWidth,\n bottom: top + this.treeElement.clientHeight + 16,\n };\n }\n}\n","import { getBoolString } from \"./util\";\nimport { Node } from \"./node\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\n\ninterface ElementsRendererParams {\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n $element: JQuery;\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 public openedIconElement?: HTMLElement | Text;\n public closedIconElement?: HTMLElement | Text;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private $element: JQuery;\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 constructor({\n autoEscape,\n buttonLeft,\n closedIcon,\n onCreateLi,\n dragAndDrop,\n $element,\n getTree,\n isNodeSelected,\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 public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\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 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 this.attachNodeData(node, li);\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 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 this.attachNodeData(child, li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\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 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 if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\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 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 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 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 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","import { Node } from \"./node\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\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 public loadFromUrl(\n urlInfo: string | JQuery.AjaxSettings | null,\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: string | NodeData[]): 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 private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"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 isLoading,\n node,\n $el,\n });\n }\n\n private submitRequest(\n urlInfoInput: string | JQuery.AjaxSettings,\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 method: \"GET\",\n cache: false,\n dataType: \"json\",\n success: handleSuccess,\n error: handleError,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n\n private parseData(data: string | NodeData[]): 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","import { Node } from \"./node\";\nimport {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\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 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 this.handleKeyDownHandler = this.handleKeyDown.bind(this);\n\n document.addEventListener(\"keydown\", this.handleKeyDownHandler);\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 public moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return true;\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 false;\n }\n }\n }\n\n public 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 false;\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 public selectNode(node: Node | null): boolean {\n if (!node) {\n return true;\n } else {\n this.originalSelectNode(node);\n\n return false;\n }\n }\n\n private handleKeyDown = (e: KeyboardEvent): boolean => {\n if (!this.canHandleKeyboard()) {\n return true;\n }\n\n const selectedNode = this.getSelectedNode();\n if (!selectedNode) {\n return true;\n }\n\n switch (e.key) {\n case \"ArrowDown\":\n return this.moveDown(selectedNode);\n\n case \"ArrowUp\":\n return this.moveUp(selectedNode);\n\n case \"ArrowRight\":\n return this.moveRight(selectedNode);\n\n case \"ArrowLeft\":\n return this.moveLeft(selectedNode);\n\n default:\n return true;\n }\n };\n\n private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\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 {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\nimport { TriggerEvent } from \"./jqtreeMethodTypes\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ntype GetNode = (element: HTMLElement) => null | Node;\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 private isMouseDelayMet: boolean;\n private isMouseStarted: boolean;\n private mouseDelayTimer: number | null;\n private mouseDownInfo: PositionInfo | null;\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 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 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 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 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 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 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 private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\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 mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\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 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 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 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 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 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 node: clickTarget.node,\n click_event: e,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\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 node: clickTarget.node,\n click_event: e,\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 node,\n click_event: e,\n });\n return false;\n }\n }\n\n return 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 type: \"button\",\n node,\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 type: \"label\",\n node,\n };\n }\n }\n }\n\n return null;\n }\n}\n\nexport default MouseHandler;\n","import { isInt } from \"./util\";\nimport { Node } from \"./node\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\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 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 private _supportsLocalStorage: boolean | null;\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 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 public getStateFromStorage(): SavedState | null {\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 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 /*\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 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 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 loadFromStorage(): string | null {\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 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 resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\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 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","import type { ScrollParent } from \"./types\";\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 verticalScrollTimeout?: number;\n private verticalScrollDirection?: VerticalScrollDirection;\n\n constructor({ container, refreshHitAreas }: Params) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\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 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 ): VerticalScrollDirection | undefined {\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 scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n\n this.container.scrollBy({\n left: distance,\n top: 0,\n behavior: \"instant\",\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 left: 0,\n top: distance,\n behavior: \"instant\",\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\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 getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n this.scrollParentBottom = this.getScrollParentTop() + this.container.clientHeight;\n }\n\n return this.scrollParentBottom;\n }\n}\n","import type { ScrollParent } from \"./types\";\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 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 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 canScrollRight() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollLeft + documentElement.clientWidth <\n this.getDocumentScrollWidth()\n );\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 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 getNewVerticalScrollDirection(\n pageY: number,\n ): VerticalScrollDirection | undefined {\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({ left: distance, top: 0, behavior: \"instant\" });\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({ left: 0, top: distance, behavior: \"instant\" });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import type { ScrollParent } from \"./types\";\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 { ScrollParent } from \"./scrollHandler/types\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\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 public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\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","import { Node } from \"./node\";\nimport { GetNodeById } from \"./jqtreeMethodTypes\";\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 getSelectedNode(): Node | false {\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 clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\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 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","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 ): SimpleWidget | null => {\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 public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public options: WidgetOptions;\n\n public $el: JQuery;\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 destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n\n public deinit(): void {\n //\n }\n}\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 public id?: NodeId;\n public name: string;\n public children: Node[];\n public parent: Node | null;\n public idMapping: Map;\n public tree?: Node;\n public nodeClass?: typeof Node;\n public load_on_demand: boolean;\n public is_open: boolean;\n public element?: HTMLElement;\n public is_loading: boolean;\n public isEmptyFolder: boolean;\n\n [key: string]: unknown;\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 /*\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 /*\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 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 /*\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 /*\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 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 public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\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 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 /*\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 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 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 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 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 remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\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 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 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 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 getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\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 removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\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 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 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 getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\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 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 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 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 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 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 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 // 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 private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\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 private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\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","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\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n\n constructor(element: HTMLElement) {\n this.element = element;\n this.ghost = this.createGhostElement();\n\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n public remove(): void {\n this.ghost.remove();\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\nexport default GhostDropHint;\n","import { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { DropHint } from \"../dragAndDropHandler/types\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n $treeElement: JQuery;\n}\n\nclass NodeElement {\n public node: Node;\n public element: HTMLElement;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private $treeElement: JQuery;\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 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 addDropHint(position: number): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.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 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 protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\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 mustShowBorderDropHint(position: Position): boolean {\n return position === Position.Inside;\n }\n}\n\nexport default NodeElement;\n","import { Position } from \"../position\";\nimport NodeElement, { NodeElementParams } from \"./index\";\nimport { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\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 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 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 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\nexport default FolderElement;\n","import __version__ from \"./version\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport { Node } from \"./node\";\nimport { getPosition } from \"./position\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\n\ninterface SelectNodeOptions {\n mustToggle?: boolean;\n mustSetFocus?: 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 element: JQuery;\n private isInitialized: boolean;\n private tree: Node;\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\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\n public toggle(node?: Node, slideParam: null | 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.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public getTree(): Node {\n return this.tree;\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 getSelectedNode(): Node | false {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\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: string | null | Node,\n param2?: Node | null | HandleFinishedLoading,\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 reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.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 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 getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\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: OnFinishOpenNode | null;\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 closeNode(node?: Node, slideParam?: null | boolean): 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 isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\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 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 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 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 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 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 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 getStateFromStorage(): SavedState | null {\n return this.saveStateHandler.getStateFromStorage();\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 getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\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 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 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 getState(): SavedState | null {\n return this.saveStateHandler.getState();\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 setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record)[option] = value;\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 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 getVersion(): string {\n return __version__;\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 /*\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 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 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 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 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 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 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 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 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 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 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 getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl ?? (this.element.data(\"url\") as string | null);\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 getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\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 // 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 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 getNode(element: HTMLElement): null | Node {\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 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 private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\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 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 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 node,\n deselected_node: deselectedNode,\n });\n this.openParents(node);\n }\n\n saveState();\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 tree_data: data,\n parent_node: parentNode,\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 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 doLoadDataFromUrl(\n urlInfoParam: string | JQuery.AjaxSettings | null,\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 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 containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\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 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 autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n $element: $treeElement,\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 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 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;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n $treeElement,\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\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["version","Position","positionNames","before","Before","after","After","inside","Inside","none","None","getPositionName","position","name","Object","prototype","hasOwnProperty","call","getPosition","DragElement","constructor","_ref","autoEscape","nodeName","offsetX","offsetY","treeElement","element","createElement","appendChild","move","pageX","pageY","style","left","top","remove","document","classList","add","textContent","innerHTML","isInt","n","isFunction","v","getBoolString","value","getOffsetTop","getElementPosition","rect","getBoundingClientRect","x","window","scrollX","y","scrollY","iterateVisibleNodes","tree","handleAfterOpenFolder","handleClosedFolder","handleFirstNode","handleNode","handleOpenFolder","isFirstNode","iterate","node","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","triggerEvent","hoveredArea","isDragging","currentItem","mouseCapture","positionInfo","target","mustCaptureElement","jQuery","nodeElement","mouseStart","refresh","dragElement","mouseDrag","area","findHoveredArea","canMoveToArea","isFolder","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","originalEvent","mouseStop","moveItem","clear","removeHover","removeHitAreas","getTreeDimensions","positionName","previousGhost","dimensions","right","low","high","mid","addDropHint","folder","openFolder","openFolderDelay","openFolderTimer","setTimeout","clearTimeout","movedNode","targetNode","previousParent","parent","doMove","moveNode","event","move_info","moved_node","target_node","previous_parent","do_move","original_event","isDefaultPrevented","treePosition","clientWidth","ElementsRenderer","buttonLeft","closedIcon","onCreateLi","dragAndDrop","$element","isNodeSelected","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","render","fromNode","renderFromNode","renderFromRoot","empty","createDomElements","$previousLi","li","createLi","getLevel","attachNodeData","isRootNode","level","ul","createUl","data","classString","role","className","setAttribute","isSelected","Boolean","mustShowFolder","isEmptyFolder","createFolderLi","createNodeLi","setTreeItemAriaAttributes","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","div","buttonLink","cloneNode","titleSpan","createTitleSpan","liClasses","join","classes","undefined","is_loading","createTextNode","nodeType","DataLoader","dataFilter","loadData","onLoadFailed","onLoading","loadFromUrl","urlInfo","parentNode","onFinished","getDomElement","addLoadingClass","notifyLoading","stopLoading","removeLoadingClass","handleSuccess","parseData","handleError","jqXHR","submitRequest","isLoading","$el","urlInfoInput","url","ajaxSettings","method","cache","dataType","success","error","toUpperCase","ajax","getParsedData","JSON","parse","parsedData","KeyHandler","closeNode","getSelectedNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","handleKeyDownHandler","handleKeyDown","bind","addEventListener","deinit","removeEventListener","moveDown","selectedNode","getNextVisibleNode","moveUp","getPreviousVisibleNode","moveRight","moveLeft","getParent","e","canHandleKeyboard","key","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","handleClick","handleDblclick","mouseDown","passive","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","removeMouseMoveEventListeners","button","result","handleMouseDown","cancelable","preventDefault","handleMouseUp","handleStartMouse","mouseMove","touchMove","mouseUp","touchEnd","mouseDelay","startMouseDelayTimer","handleMouseMove","touches","clickTarget","getClickTarget","type","stopPropagation","click_event","closest","jqTreeElement","SaveStateHandler","addToSelection","getNodeById","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","state","stringify","getState","supportsLocalStorage","localStorage","setItem","getKeyName","getStateFromStorage","jsonData","loadFromStorage","parseState","getOpenNodeIds","openNodes","id","getSelectedNodeIds","selectedNodeIds","open_nodes","selected_node","setInitialState","mustLoadOnDemand","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand","cbFinished","loadingCount","nodeIds","newNodesIds","nodeId","load_on_demand","loadAndOpenNode","getNodeIdToBeSelected","getItem","selectCount","selectedNodes","testSupport","sessionStorage","removeItem","_supportsLocalStorage","ContainerScrollParent","container","refreshHitAreas","checkHorizontalScrolling","newHorizontalScrollDirection","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","verticalScrollTimeout","scrollHorizontally","checkVerticalScrolling","newVerticalScrollDirection","getNewVerticalScrollDirection","verticalScrollDirection","scrollVertically","scrollLeft","scrollToY","scrollTop","stopScrolling","scrollParentTop","scrollParentBottom","scrollParentOffset","rightEdge","leftEdge","isNearRightEdge","isNearLeftEdge","getScrollParentTop","getScrollParentBottom","distance","scrollBy","behavior","DocumentScrollParent","documentElement","treeTop","documentScrollHeight","documentScrollWidth","windowWidth","innerWidth","canScrollRight","getDocumentScrollWidth","canScrollDown","getDocumentScrollHeight","scrollHeight","scrollWidth","distanceTop","windowHeight","innerHeight","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","getParentWithOverflow","parentElement","createScrollParent","tagName","ScrollHandler","scrollParent","checkScrolling","getScrollParent","SelectNodeHandler","Set","selectedSingleNode","getSelectedNodesUnder","isParentOf","has","includeChildren","arguments","delete","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","get","existingWidget","simpleWidgetClass","init","destroyWidget","destroy","removeData","callFunction","functionName","args","simpleWidget","widgetFunction","apply","fn","argument1","_len","Array","_key","defaults","isNodeRecordWithChildren","Node","nodeData","isRoot","nodeClass","setData","idMapping","Map","o","loadFromData","removeChildren","childData","createNode","addChild","setParent","addChildAtPosition","index","splice","removeChild","doRemoveChild","getChildIndex","indexOf","callback","_iterate","getData","includeParent","getDataFromNodes","nodes","map","tmpNode","k","getNodeByName","getNodeByCallback","getNodeByNameMustExist","Error","addAfter","nodeInfo","childIndex","loadChildrenFromData","addBefore","addParent","newParent","originalParent","append","prepend","addNodeToIndex","set","removeNodeFromIndex","getPreviousSibling","previousIndex","getNextSibling","nextIndex","getNodesByProperty","filter","f","getNextNode","nextSibling","getPreviousNode","previousSibling","getLastChild","lastChild","initFromData","addNode","addChildren","childrenData","getNodeClass","BorderDropHint","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","circleSpan","lineSpan","NodeElement","$treeElement","mustShowBorderDropHint","select","mustSetFocus","getTitleSpan","toString","focus","deselect","removeAttribute","blur","getUl","FolderElement","open","animationSpeed","getButton","icon","doOpen","slideDown","show","close","doClose","slideUp","hide","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","toggle","slideParam","optionsParam","doSelectNode","selectNodeHandler","toJson","doLoadData","loadDataFromUrl","param1","param2","param3","doLoadDataFromUrl","reload","getNodeByHtmlElement","inputElement","HTMLElement","parseParams","openNodeInternal","createFolderElement","dndHandler","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","removeNode","appendNode","parentNodeParam","prependNode","updateNode","idIsChanged","isSelectedNodeInSubtree","subtree","positionIndex","saveStateHandler","openParents","scrollToNode","scrollHandler","setState","setOption","option","keyHandler","getVersion","__version__","doOpenNode","_node","_slide","_onFinished","folderElement","loadFolderOnDemand","mustSelect","renderer","selectCurrentNode","createNodeElement","isInitialized","getRtlOption","getDefaultClosedIcon","connectHandlers","initData","off","mouseHandler","eventName","values","Event","trigger","getDataUrlInfo","getUrlFromString","setUrlInfoData","selectedNodeId","initTree","doInit","restoreState","autoOpenNodes","maxLevel","getAutoOpenMaxLevel","isRestored","parseInt","liElement","deselectCurrentNode","dataRtl","defaultOptions","mustToggle","selectOptions","canSelect","previous_node","deselectedNode","deselected_node","deselectNodes","loadSubtree","tree_data","parent_node","selectedNodesUnderParent","urlInfoParam","dataLoader","containsElement","activeElement"],"mappings":"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"} \ No newline at end of file diff --git a/tree.jquery.js b/tree.jquery.js index d7dc15af..35d7a004 100644 --- a/tree.jquery.js +++ b/tree.jquery.js @@ -17,5 +17,5 @@ limitations under the License. @license */ -var jqtree=function(e){"use strict";let t=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 o={before:t.Before,after:t.After,inside:t.Inside,none:t.None},n=e=>{for(const t in o)if(Object.prototype.hasOwnProperty.call(o,t)&&o[t]===e)return t;return""};class r{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)}move(e,t){this.element.style.left=e-this.offsetX+"px",this.element.style.top=t-this.offsetY+"px"}remove(){this.element.remove()}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}}const 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}},d=(e,o,n,r)=>{const s=Math.min(o.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&&(d(r,n,o,t.top),o=t.top,n=[]),n.push(t);return d(r,n,o,t),r})(((e,o)=>{const n=[];let r=0;const s=(e,t,o)=>{n.push({top:o,node:e,position:t}),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===o||n===o?t.None:t.After,r)},handleClosedFolder:(e,n,r)=>{const l=i(r);e===o?s(e,t.None,l):(s(e,t.Inside,l),n!==o&&s(e,t.After,l))},handleFirstNode:e=>{e!==o&&s(e,t.Before,i(e.element))},handleNode:(e,n,r)=>{const l=i(r);s(e,e===o?t.None:t.Inside,l),s(e,n===o||e===o?t.None:t.After,l)},handleOpenFolder:(e,n)=>{if(e===o){const o=i(n),r=n.clientHeight;return s(e,t.None,o),r>5&&s(e,t.None,o+r-5),!1}return e.children[0]!==o&&s(e,t.Inside,i(n)),!0}}),n})(e,o),n);class h{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}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}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 r({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}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}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"))}generateHitAreas(){const e=this.getTree();this.currentItem&&e?this.hitAreas=a(e,this.currentItem.node,this.getTreeDimensions().bottom):this.hitAreas=[]}mustCaptureElement(e){const t=e.nodeName;return"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}canMoveToArea(e){if(!this.onCanMoveTo)return!0;if(!this.currentItem)return!1;const t=n(e.position);return this.onCanMoveTo(this.currentItem.node,e.node,t)}removeHitAreas(){this.hitAreas=[]}clear(){this.dragElement&&(this.dragElement.remove(),this.dragElement=null)}removeDropHint(){this.previousGhost&&this.previousGhost.remove()}removeHover(){this.hoveredArea=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}mustOpenFolderTimer(e){const o=e.node;return o.isFolder()&&!o.is_open&&e.position===t.Inside}updateDropHint(){if(!this.hoveredArea)return;this.removeDropHint();const e=this.getNodeElementForNode(this.hoveredArea.node);this.previousGhost=e.addDropHint(this.hoveredArea.position)}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)}moveItem(e){if(this.currentItem&&this.hoveredArea&&this.hoveredArea.position!==t.None&&this.canMoveToArea(this.hoveredArea)){const o=this.currentItem.node,r=this.hoveredArea.node,s=this.hoveredArea.position,i=o.parent;s===t.Inside&&(this.hoveredArea.node.is_open=!0);const l=()=>{const e=this.getTree();e&&(e.moveNode(o,r,s),this.treeElement.textContent="",this.refreshElements(null))};this.triggerEvent("tree.move",{move_info:{moved_node:o,target_node:r,position:n(s),previous_parent:i,do_move:l,original_event:e.originalEvent}}).isDefaultPrevented()||l()}}getTreeDimensions(){const e=l(this.treeElement),t=e.left+this.getScrollLeft(),o=e.top;return{left:t,top:o,right:t+this.treeElement.clientWidth,bottom:o+this.treeElement.clientHeight+16}}}class c{constructor(e){let{autoEscape:t,buttonLeft:o,closedIcon:n,onCreateLi:r,dragAndDrop:s,$element:i,getTree:l,isNodeSelected:d,openedIcon:a,rtl:h,showEmptyFolder:c,tabIndex:u}=e;this.autoEscape=t,this.buttonLeft=o,this.dragAndDrop=s,this.$element=i,this.getTree=l,this.isNodeSelected=d,this.onCreateLi=r,this.rtl=h,this.showEmptyFolder=c,this.tabIndex=u,this.openedIconElement=this.createButtonElement(a||"+"),this.closedIconElement=this.createButtonElement(n||"-")}render(e){e&&e.parent?this.renderFromNode(e):this.renderFromRoot()}renderFromRoot(){this.$element.empty();const e=this.getTree();this.$element[0]&&e&&this.createDomElements(this.$element[0],e.children,!0,1)}renderFromNode(e){const t=jQuery(e.element),o=this.createLi(e,e.getLevel());this.attachNodeData(e,o),t.after(o),t.remove(),e.children&&this.createDomElements(o,e.children,!1,e.getLevel()+1)}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),this.attachNodeData(e,t),e.hasChildren()&&this.createDomElements(t,e.children,!1,n+1)}}attachNodeData(e,t){e.element=t,jQuery(t).data("node",e)}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}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.onCreateLi&&this.onCreateLi(e,jQuery(n),o),n}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")}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}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}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(" ")}createButtonElement(e){if("string"==typeof e){const t=document.createElement("div");return t.innerHTML=e,document.createTextNode(t.innerHTML)}return null==e?void 0:e.nodeType?e:jQuery(e)[0]}}class u{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}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)}))}addLoadingClass(e){e.classList.add("jqtree-loading")}removeLoadingClass(e){e.classList.remove("jqtree-loading")}getDomElement(e){return e?e.element:this.treeElement}notifyLoading(e,t,o){const n=jQuery(o);this.onLoading&&this.onLoading(e,t,n),this.triggerEvent("tree.loading_data",{isLoading:e,node:t,$el:n})}submitRequest(e,t,o){const n={method:"GET",cache:!1,dataType:"json",success:t,error:o,..."string"==typeof e?{url:e}:e};n.method=n.method?.toUpperCase()||"GET",jQuery.ajax(n)}parseData(e){const t="string"==typeof e?JSON.parse(e):e;return this.dataFilter?this.dataFilter(t):t}}class m{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&&(this.handleKeyDownHandler=this.handleKeyDown.bind(this),document.addEventListener("keydown",this.handleKeyDownHandler))}deinit(){this.handleKeyDownHandler&&document.removeEventListener("keydown",this.handleKeyDownHandler)}moveDown(e){return this.selectNode(e.getNextVisibleNode())}moveUp(e){return this.selectNode(e.getPreviousVisibleNode())}moveRight(e){return!e.isFolder()||(e.is_open?this.selectNode(e.getNextVisibleNode()):(this.openNode(e),!1))}moveLeft(e){return e.isFolder()&&e.is_open?(this.closeNode(e),!1):this.selectNode(e.getParent())}selectNode(e){return!e||(this.originalSelectNode(e),!1)}handleKeyDown=e=>{if(!this.canHandleKeyboard())return!0;const t=this.getSelectedNode();if(!t)return!0;switch(e.key){case"ArrowDown":return this.moveDown(t);case"ArrowUp":return this.moveUp(t);case"ArrowRight":return this.moveRight(t);case"ArrowLeft":return this.moveLeft(t);default:return!0}};canHandleKeyboard(){return this.keyboardSupport&&this.isFocusOnTree()}}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{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}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()}mouseDown=e=>{if(0!==e.button)return;this.handleMouseDown(g(e))&&e.cancelable&&e.preventDefault()};handleMouseDown(e){return this.isMouseStarted&&this.handleMouseUp(e),this.mouseDownInfo=e,!!this.onMouseCapture(e)&&(this.handleStartMouse(),!0)}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}startMouseDelayTimer(e){this.mouseDelayTimer&&clearTimeout(this.mouseDelayTimer),this.mouseDelayTimer=window.setTimeout((()=>{this.mouseDownInfo&&(this.isMouseDelayMet=!0)}),e),this.isMouseDelayMet=!1}mouseMove=e=>{this.handleMouseMove(e,g(e))};handleMouseMove(e,t){if(this.isMouseStarted)return this.onMouseDrag(t),void(e.cancelable&&e.preventDefault());this.isMouseDelayMet&&(this.mouseDownInfo&&(this.isMouseStarted=!1!==this.onMouseStart(this.mouseDownInfo)),this.isMouseStarted?(this.onMouseDrag(t),e.cancelable&&e.preventDefault()):this.handleMouseUp(t))}mouseUp=e=>{this.handleMouseUp(g(e))};handleMouseUp(e){this.removeMouseMoveEventListeners(),this.isMouseDelayMet=!1,this.mouseDownInfo=null,this.isMouseStarted&&(this.isMouseStarted=!1,this.onMouseStop(e))}removeMouseMoveEventListeners(){document.removeEventListener("mousemove",this.mouseMove),document.removeEventListener("touchmove",this.touchMove),document.removeEventListener("mouseup",this.mouseUp),document.removeEventListener("touchend",this.touchEnd)}touchStart=e=>{if(!e)return;if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseDown(p(t,e))};touchMove=e=>{if(!e)return;if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseMove(e,p(t,e))};touchEnd=e=>{if(!e)return;if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseUp(p(t,e))};handleClick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);if(t)if("button"===t.type)this.onClickButton(t.node),e.preventDefault(),e.stopPropagation();else if("label"===t.type){this.triggerEvent("tree.click",{node:t.node,click_event:e}).isDefaultPrevented()||this.onClickTitle(t.node)}};handleDblclick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);"label"===t?.type&&this.triggerEvent("tree.dblclick",{node:t.node,click_event:e})};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",{node:o,click_event:e}),!1}return null};getClickTarget(e){const t=e.closest(".jqtree-toggler");if(t){const e=this.getNode(t);if(e)return{type:"button",node:e}}else{const t=e.closest(".jqtree-element");if(t){const e=this.getNode(t);if(e)return{type:"label",node:e}}}return null}}class S{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}saveState(){const e=JSON.stringify(this.getState());this.onSetStateFromStorage?this.onSetStateFromStorage(e):this.supportsLocalStorage()&&localStorage.setItem(this.getKeyName(),e)}getStateFromStorage(){const e=this.loadFromStorage();return e?this.parseState(e):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})()}}setInitialState(e){if(e){let t=!1;return e.open_nodes&&(t=this.openInitialNodes(e.open_nodes)),e.selected_node&&(this.resetSelection(),this.selectInitialNodes(e.selected_node)),t}return!1}setInitialStateOnDemand(e,t){let o=0,n=e.open_nodes;const r=()=>{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,this.selectInitialNodes(e.selected_node)&&this.refreshElements(null),0===o&&t()},s=e=>{o+=1,this.openNode(e,!1,(()=>{o-=1,r()}))};r()}getNodeIdToBeSelected(){const e=this.getStateFromStorage();return e?.selected_node&&e.selected_node[0]||null}parseState(e){const t=JSON.parse(e);var o;return t&&t.selected_node&&("number"==typeof(o=t.selected_node)&&o%1==0)&&(t.selected_node=[t.selected_node]),t}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}selectInitialNodes(e){let t=0;for(const o of e){const e=this.getNodeById(o);e&&(t+=1,this.addToSelection(e))}return 0!==t}resetSelection(){this.getSelectedNodes().forEach((e=>{this.removeFromSelection(e)}))}getKeyName(){return"string"==typeof this.saveStateOption?this.saveStateOption:"tree"}supportsLocalStorage(){return null==this._supportsLocalStorage&&(this._supportsLocalStorage=(()=>{if(null==localStorage)return!1;try{const e="_storage_test";sessionStorage.setItem(e,"value"),sessionStorage.removeItem(e)}catch(e){return!1}return!0})()),this._supportsLocalStorage}}class v{constructor(e){let{container:t,refreshHitAreas:o}=e;this.container=t,this.refreshHitAreas=o}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}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}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;this.container.scrollBy({left:e,top:0,behavior:"instant"}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;this.container.scrollBy({left:0,top:e,behavior:"instant"}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}getScrollParentTop(){return null==this.scrollParentTop&&(this.scrollParentTop=i(this.container)),this.scrollParentTop}getScrollParentBottom(){return null==this.scrollParentBottom&&(this.scrollParentBottom=this.getScrollParentTop()+this.container.clientHeight),this.scrollParentBottom}}class N{constructor(e){let{refreshHitAreas:t,treeElement:o}=e;this.refreshHitAreas=t,this.treeElement=o}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}getNewHorizontalScrollDirection(e){const t=e-document.documentElement.scrollLeft<20;return e>window.innerWidth-20&&this.canScrollRight()?"right":t?"left":void 0}canScrollRight(){const e=document.documentElement;return e.scrollLeft+e.clientWidth"auto"===e||"scroll"===e,D=e=>{const t=getComputedStyle(e);return E(t.overflowX)||E(t.overflowY)},y=(e,t)=>{const o=(e=>{if(D(e))return e;let t=e.parentElement;for(;t;){if(D(t))return t;t=t.parentElement}return null})(e);return o&&"HTML"!==o.tagName?new v({container:o,refreshHitAreas:t}):new N({refreshHitAreas:t,treeElement:e})};class b{constructor(e){let{refreshHitAreas:t,treeElement:o}=e;this.refreshHitAreas=t,this.scrollParent=void 0,this.treeElement=o}checkScrolling(e){this.checkVerticalScrolling(e),this.checkHorizontalScrolling(e)}stopScrolling(){this.getScrollParent().stopScrolling()}scrollToY(e){this.getScrollParent().scrollToY(e)}getScrollLeft(){return this.getScrollParent().getScrollLeft()}checkVerticalScrolling(e){this.getScrollParent().checkVerticalScrolling(e.pageY)}checkHorizontalScrolling(e){this.getScrollParent().checkHorizontalScrolling(e.pageX)}getScrollParent(){return this.scrollParent||(this.scrollParent=y(this.treeElement,this.refreshHitAreas)),this.scrollParent}}class C{constructor(e){let{getNodeById:t}=e;this.getNodeById=t,this.selectedNodes=new Set,this.clear()}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}clear(){this.selectedNodes.clear(),this.selectedSingleNode=null}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))))}addToSelection(e){null!=e.id?this.selectedNodes.add(e.id):this.selectedSingleNode=e}}const I=(e,t)=>{const o=()=>`simple_widget_${t}`,n=(e,t)=>{const o=jQuery.data(e,t);return o&&o instanceof T?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(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 T){const o=e[t];o&&"function"==typeof o&&(r=o.apply(e,n))}}return r})(this,r,i)}}};class T{static register(e,t){I(e,t)}static defaults={};constructor(e,t){this.$el=jQuery(e);const o=this.constructor.defaults;this.options={...o,...t}}destroy(){this.deinit()}init(){}deinit(){}}const F=e=>"object"==typeof e&&"children"in e&&e.children instanceof Array;class L{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]:L;this.name="",this.load_on_demand=!1,this.isEmptyFolder=null!=e&&F(e)&&0===e.children.length,this.setData(e),this.children=[],this.parent=null,t&&(this.idMapping=new Map,this.tree=this,this.nodeClass=o)}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)}}loadFromData(e){this.removeChildren();for(const t of e){const e=this.createNode(t);this.addChild(e),F(t)&&e.loadFromData(t.children)}return this}addChild(e){this.children.push(e),e.setParent(this)}addChildAtPosition(e,t){this.children.splice(t,0,e),e.setParent(this)}removeChild(e){e.removeChildren(),this.doRemoveChild(e)}getChildIndex(e){return this.children.indexOf(e)}hasChildren(){return 0!==this.children.length}isFolder(){return this.hasChildren()||this.load_on_demand}iterate(e){const t=(o,n)=>{if(o.children)for(const r of o.children){e(r,n)&&r.hasChildren()&&t(r,n+1)}};t(this,0)}moveNode(e,o,n){if(!e.parent||e.isParentOf(o))return!1;switch(e.parent.doRemoveChild(e),n){case t.After:return!!o.parent&&(o.parent.addChildAtPosition(e,o.parent.getChildIndex(o)+1),!0);case t.Before:return!!o.parent&&(o.parent.addChildAtPosition(e,o.parent.getChildIndex(o)),!0);case t.Inside:return o.addChildAtPosition(e,0),!0;default:return!1}}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)}getNodeByName(e){return this.getNodeByCallback((t=>t.name===e))}getNodeByNameMustExist(e){const t=this.getNodeByCallback((t=>t.name===e));if(!t)throw`Node with name ${e} not found`;return t}getNodeByCallback(e){let t=null;return this.iterate((o=>!t&&(!e(o)||(t=o,!1)))),t}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}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}remove(){this.parent&&(this.parent.removeChild(this),this.parent=null)}append(e){const t=this.createNode(e);return this.addChild(t),t.loadChildrenFromData(e),t}prepend(e){const t=this.createNode(e);return this.addChildAtPosition(t,0),t.loadChildrenFromData(e),t}isParentOf(e){let t=e.parent;for(;t;){if(t===this)return!0;t=t.parent}return!1}getLevel(){let e=0,t=this;for(;t.parent;)e+=1,t=t.parent;return e}getNodeById(e){return this.idMapping.get(e)||null}addNodeToIndex(e){null!=e.id&&this.idMapping.set(e.id,e)}removeNodeFromIndex(e){null!=e.id&&this.idMapping.delete(e.id)}removeChildren(){this.iterate((e=>(this.tree?.removeNodeFromIndex(e),!0))),this.children=[]}getPreviousSibling(){if(this.parent){const e=this.parent.getChildIndex(this)-1;return e>=0&&this.parent.children[e]||null}return null}getNextSibling(){if(this.parent){const e=this.parent.getChildIndex(this)+1;return eo[e]===t))}filter(e){const t=[];return this.iterate((o=>(e(o)&&t.push(o),!0))),t}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}getNextVisibleNode(){if(this.hasChildren()&&this.is_open)return this.children[0]||null;if(this.parent){const e=this.getNextSibling();return e||this.parent.getNextNode(!1)}return null}getPreviousNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()?e.getLastChild():e:this.getParent()}return null}getPreviousVisibleNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()&&e.is_open?e.getLastChild():e:this.getParent()}return null}getParent(){return this.parent&&this.parent.parent?this.parent:null}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}initFromData(e){const t=e=>{for(const t of e){const e=this.createNode();e.initFromData(t),this.addChild(e)}};(e=>{this.setData(e),F(e)&&e.children.length&&t(e.children)})(e)}setParent(e){this.parent=e,this.tree=e.tree,this.tree?.addNodeToIndex(this)}doRemoveChild(e){this.children.splice(this.getChildIndex(e),1),this.tree?.removeNodeFromIndex(e)}getNodeClass(){return this.nodeClass||this?.tree?.nodeClass||L}createNode(e){return new(this.getNodeClass())(e)}loadChildrenFromData(e){F(e)&&e.children.length&&this.loadFromData(e.children)}}class w{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 H{constructor(e){this.element=e,this.ghost=this.createGhostElement(),this.element.after(this.ghost),this.ghost.classList.add("jqtree-inside")}remove(){this.ghost.remove()}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}}class M{constructor(e){let{getScrollLeft:t,node:o,tabIndex:n,$treeElement:r}=e;this.getScrollLeft=t,this.tabIndex=n,this.$treeElement=r,this.init(o)}init(e){if(this.node=e,!e.element){const t=this.$treeElement.get(0);t&&(e.element=t)}e.element&&(this.element=e.element)}addDropHint(e){return this.mustShowBorderDropHint(e)?new w(this.element,this.getScrollLeft()):new H(this.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()}deselect(){this.element.classList.remove("jqtree-selected");const e=this.getTitleSpan();e.removeAttribute("tabindex"),e.setAttribute("aria-selected","false"),e.blur()}getUl(){return this.element.querySelector(":scope > ul")}getTitleSpan(){return this.element.querySelector(":scope > .jqtree-element > span.jqtree-title")}mustShowBorderDropHint(e){return e===t.Inside}}class A extends M{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}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())}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())}mustShowBorderDropHint(e){return!this.node.is_open&&e===t.Inside}getButton(){return this.element.querySelector(":scope > .jqtree-element > a.jqtree-toggler")}}const _="Node parameter is empty",j="Parameter is empty: ";class x extends T{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:L,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};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}getTree(){return this.tree}selectNode(e,t){return this.doSelectNode(e,t),this.element}getSelectedNode(){return this.selectNodeHandler.getSelectedNode()}toJson(){return JSON.stringify(this.tree.getData())}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}reload(e){return this.doLoadDataFromUrl(null,null,e),this.element}refresh(){return this.refreshElements(null),this.element}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)}getNodeByHtmlElement(e){const t=e instanceof HTMLElement?e:e[0];return t?this.getNode(t):null}getNodeByCallback(e){return this.tree.getNodeByCallback(e)}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??!1),[n,e]})();return this.openNodeInternal(e,n,r),this.element}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}isDragging(){return this.dndHandler.isDragging}refreshHitAreas(){return this.dndHandler.refresh(),this.element}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}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}appendNode(e,t){const o=t||this.tree,n=o.append(e);return this.refreshElements(o),n}prependNode(e,t){const o=t??this.tree,n=o.prepend(e);return this.refreshElements(o),n}updateNode(e,t){if(!e)throw Error(_);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}isSelectedNodeInSubtree(e){const t=this.getSelectedNode();return!!t&&(e===t||e.isParentOf(t))}moveNode(e,t,n){if(!e)throw Error(_);if(!t)throw Error(j+"targetNode");const r=o[n];return void 0!==r&&(this.tree.moveNode(e,t,r),this.refreshElements(null)),this.element}getStateFromStorage(){return this.saveStateHandler.getStateFromStorage()}addToSelection(e,t){if(!e)throw Error(_);return this.selectNodeHandler.addToSelection(e),this.openParents(e),this.getNodeElementForNode(e).select(void 0===t||t),this.saveState(),this.element}getSelectedNodes(){return this.selectNodeHandler.getSelectedNodes()}isNodeSelected(e){if(!e)throw Error(_);return this.selectNodeHandler.isNodeSelected(e)}removeFromSelection(e){if(!e)throw Error(_);return this.selectNodeHandler.removeFromSelection(e),this.getNodeElementForNode(e).deselect(),this.saveState(),this.element}scrollToNode(e){if(!e)throw Error(_);const t=i(e.element)-i(this.$el.get(0));return this.scrollHandler.scrollToY(t),this.element}getState(){return this.saveStateHandler.getState()}setState(e){return this.saveStateHandler.setInitialState(e),this.refreshElements(null),this.element}setOption(e,t){return this.options[e]=t,this.element}moveDown(){const e=this.getSelectedNode();return e&&this.keyHandler.moveDown(e),this.element}moveUp(){const e=this.getSelectedNode();return e&&this.keyHandler.moveUp(e),this.element}getVersion(){return"1.8.5"}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()}}refreshElements(e){const t=this.isFocusOnTree(),o=!!e&&this.isSelectedNodeInSubtree(e);this.renderer.render(e),o&&this.selectCurrentNode(t),this.triggerEvent("tree.refresh")}getNodeElementForNode(e){return e.isFolder()?this.createFolderElement(e):this.createNodeElement(e)}getNodeElement(e){const t=this.getNode(e);return t?this.getNodeElementForNode(t):null}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()}deinit(){this.element.empty(),this.element.off(),this.keyHandler.deinit(),this.mouseHandler.deinit(),this.tree=new L({},!0),super.deinit()}triggerEvent(e,t){const o=jQuery.Event(e,t);return this.element.trigger(o),o}mouseCapture(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseCapture(e)}mouseStart(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseStart(e)}mouseDrag(e){if(this.options.dragAndDrop){const t=this.dndHandler.mouseDrag(e);return this.scrollHandler.checkScrolling(e),t}return!1}mouseStop(e){return!!this.options.dragAndDrop&&(this.scrollHandler.stopScrolling(),this.dndHandler.mouseStop(e))}initData(){if(this.options.data)this.doLoadData(this.options.data,null);else{this.getDataUrlInfo(null)?this.doLoadDataFromUrl(null,null,null):this.doLoadData([],null)}}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}getNodeIdToBeSelected(){return this.options.saveState?this.saveStateHandler.getNodeIdToBeSelected():null}initTree(e){const t=()=>{this.isInitialized||(this.isInitialized=!0,this.triggerEvent("tree.init"))};if(!this.options.nodeClass)return;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()}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()}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}getNode(e){const t=e.closest("li.jqtree_common");return t?jQuery(t).data("node"):null}saveState(){this.options.saveState&&this.saveStateHandler.saveState()}selectCurrentNode(e){const t=this.getSelectedNode();if(t){const o=this.getNodeElementForNode(t);o&&o.select(e)}}deselectCurrentNode(){const e=this.getSelectedNode();e&&this.removeFromSelection(e)}getDefaultClosedIcon(){return this.options.rtl?"◀":"►"}getRtlOption(){if(null!=this.options.rtl)return this.options.rtl;{const e=this.element.data("rtl");return null!==e&&!1!==e&&void 0!==e}}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?!0===this.options.selectable&&this.options.onCanSelectNode(e):!0===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",{node:e,deselected_node:t}),this.openParents(e)}o()}}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",{tree_data:e,parent_node:t})}deselectNodes(e){const t=this.selectNodeHandler.getSelectedNodesUnder(e);for(const e of t)this.selectNodeHandler.removeFromSelection(e)}loadSubtree(e,t){t.loadFromData(e),t.load_on_demand=!1,t.is_loading=!1,this.refreshElements(t)}doLoadDataFromUrl(e,t,o){const n=e||this.getDataUrlInfo(t);this.dataLoader.loadFromUrl(n,t,o)}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)}))}containsElement(e){const t=this.getNode(e);return null!=t&&t.tree===this.tree}isFocusOnTree(){const e=document.activeElement;return Boolean(e&&"SPAN"===e.tagName&&this.containsElement(e))}connectHandlers(){const{autoEscape:e,buttonLeft:t,closedIcon:o,dataFilter:n,dragAndDrop:r,keyboardSupport:s,onCanMove:i,onCanMoveTo:l,onCreateLi:d,onDragMove:a,onDragStop:g,onGetStateFromStorage:p,onIsMoveHandle:v,onLoadFailed:N,onLoading:E,onSetStateFromStorage:D,openedIcon:y,openFolderDelay:I,rtl:T,saveState:F,showEmptyFolder:L,slide:w,tabIndex:H}=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),q=this.loadData.bind(this),O=this.openNodeInternal.bind(this),k=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 C({getNodeById:j}),R=Y.addToSelection.bind(Y),X=Y.getSelectedNodes.bind(Y),G=Y.isNodeSelected.bind(Y),W=Y.removeFromSelection.bind(Y),K=new u({dataFilter:n,loadData:q,onLoadFailed:N,onLoading:E,treeElement:Q,triggerEvent:V}),J=new S({addToSelection:R,getNodeById:j,getSelectedNodes:X,getTree:B,onGetStateFromStorage:p,onSetStateFromStorage:D,openNode:O,refreshElements:k,removeFromSelection:W,saveState:F}),Z=new b({refreshHitAreas:U,treeElement:Q}),ee=Z.getScrollLeft.bind(Z),te=new h({autoEscape:e,getNodeElement:A,getNodeElementForNode:_,getScrollLeft:ee,getTree:B,onCanMove:i,onCanMoveTo:l,onDragMove:a,onDragStop:g,onIsMoveHandle:v,openFolderDelay:I,openNode:O,refreshElements:k,slide:w,treeElement:Q,triggerEvent:V}),oe=new m({closeNode:M,getSelectedNode:x,isFocusOnTree:P,keyboardSupport:s,openNode:O,selectNode:z}),ne=new c({autoEscape:e,buttonLeft:t,closedIcon:o,dragAndDrop:r,$element:$,getTree:B,isNodeSelected:G,onCreateLi:d,openedIcon:y,rtl:T,showEmptyFolder:L,tabIndex:H}),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}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 A({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;return new M({getScrollLeft:t,node:e,tabIndex:o,$treeElement:n})}openParents(e){const t=e.parent;t&&t.parent&&!t.is_open&&this.openNode(t,!1)}}return T.register(x,"tree"),e.JqTreeWidget=x,e}({}); +var jqtree=function(e){"use strict";let t=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 o={before:t.Before,after:t.After,inside:t.Inside,none:t.None},n=e=>{for(const t in o)if(Object.prototype.hasOwnProperty.call(o,t)&&o[t]===e)return t;return""};class r{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)}move(e,t){this.element.style.left=e-this.offsetX+"px",this.element.style.top=t-this.offsetY+"px"}remove(){this.element.remove()}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}}const 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}},d=(e,o,n,r)=>{const s=Math.min(o.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&&(d(r,n,o,t.top),o=t.top,n=[]),n.push(t);return d(r,n,o,t),r})(((e,o)=>{const n=[];let r=0;const s=(e,t,o)=>{n.push({top:o,node:e,position:t}),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===o||n===o?t.None:t.After,r)},handleClosedFolder:(e,n,r)=>{const l=i(r);e===o?s(e,t.None,l):(s(e,t.Inside,l),n!==o&&s(e,t.After,l))},handleFirstNode:e=>{e!==o&&e.element&&s(e,t.Before,i(e.element))},handleNode:(e,n,r)=>{const l=i(r);s(e,e===o?t.None:t.Inside,l),s(e,n===o||e===o?t.None:t.After,l)},handleOpenFolder:(e,n)=>{if(e===o){const o=i(n),r=n.clientHeight;return s(e,t.None,o),r>5&&s(e,t.None,o+r-5),!1}return e.children[0]!==o&&s(e,t.Inside,i(n)),!0}}),n})(e,o),n);class h{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}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}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 r({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}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}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"))}generateHitAreas(){const e=this.getTree();this.currentItem&&e?this.hitAreas=a(e,this.currentItem.node,this.getTreeDimensions().bottom):this.hitAreas=[]}mustCaptureElement(e){const t=e.nodeName;return"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}canMoveToArea(e){if(!this.onCanMoveTo)return!0;if(!this.currentItem)return!1;const t=n(e.position);return this.onCanMoveTo(this.currentItem.node,e.node,t)}removeHitAreas(){this.hitAreas=[]}clear(){this.dragElement&&(this.dragElement.remove(),this.dragElement=null)}removeDropHint(){this.previousGhost&&this.previousGhost.remove()}removeHover(){this.hoveredArea=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}mustOpenFolderTimer(e){const o=e.node;return o.isFolder()&&!o.is_open&&e.position===t.Inside}updateDropHint(){if(!this.hoveredArea)return;this.removeDropHint();const e=this.getNodeElementForNode(this.hoveredArea.node);this.previousGhost=e.addDropHint(this.hoveredArea.position)}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)}moveItem(e){if(this.currentItem&&this.hoveredArea&&this.hoveredArea.position!==t.None&&this.canMoveToArea(this.hoveredArea)){const o=this.currentItem.node,r=this.hoveredArea.node,s=this.hoveredArea.position,i=o.parent;s===t.Inside&&(this.hoveredArea.node.is_open=!0);const l=()=>{const e=this.getTree();e&&(e.moveNode(o,r,s),this.treeElement.textContent="",this.refreshElements(null))};this.triggerEvent("tree.move",{move_info:{moved_node:o,target_node:r,position:n(s),previous_parent:i,do_move:l,original_event:e.originalEvent}}).isDefaultPrevented()||l()}}getTreeDimensions(){const e=l(this.treeElement),t=e.left+this.getScrollLeft(),o=e.top;return{left:t,top:o,right:t+this.treeElement.clientWidth,bottom:o+this.treeElement.clientHeight+16}}}class c{constructor(e){let{autoEscape:t,buttonLeft:o,closedIcon:n,onCreateLi:r,dragAndDrop:s,$element:i,getTree:l,isNodeSelected:d,openedIcon:a,rtl:h,showEmptyFolder:c,tabIndex:u}=e;this.autoEscape=t,this.buttonLeft=o,this.dragAndDrop=s,this.$element=i,this.getTree=l,this.isNodeSelected=d,this.onCreateLi=r,this.rtl=h,this.showEmptyFolder=c,this.tabIndex=u,this.openedIconElement=this.createButtonElement(a??"+"),this.closedIconElement=this.createButtonElement(n??"-")}render(e){e?.parent?this.renderFromNode(e):this.renderFromRoot()}renderFromRoot(){this.$element.empty();const e=this.getTree();this.$element[0]&&e&&this.createDomElements(this.$element[0],e.children,!0,1)}renderFromNode(e){if(!e.element)return;const t=jQuery(e.element),o=this.createLi(e,e.getLevel());this.attachNodeData(e,o),t.after(o),t.remove(),this.createDomElements(o,e.children,!1,e.getLevel()+1)}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),this.attachNodeData(e,t),e.hasChildren()&&this.createDomElements(t,e.children,!1,n+1)}}attachNodeData(e,t){e.element=t,jQuery(t).data("node",e)}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}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.onCreateLi&&this.onCreateLi(e,jQuery(n),o),n}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")}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}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}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(" ")}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]}}class u{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}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)}))}addLoadingClass(e){e.classList.add("jqtree-loading")}removeLoadingClass(e){e.classList.remove("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",{isLoading:e,node:t,$el:n})}submitRequest(e,t,o){const n={method:"GET",cache:!1,dataType:"json",success:t,error:o,..."string"==typeof e?{url:e}:e};n.method=n.method?.toUpperCase()??"GET",jQuery.ajax(n)}parseData(e){const t="string"==typeof e?JSON.parse(e):e;return this.dataFilter?this.dataFilter(t):t}}class m{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&&(this.handleKeyDownHandler=this.handleKeyDown.bind(this),document.addEventListener("keydown",this.handleKeyDownHandler))}deinit(){this.handleKeyDownHandler&&document.removeEventListener("keydown",this.handleKeyDownHandler)}moveDown(e){return this.selectNode(e.getNextVisibleNode())}moveUp(e){return this.selectNode(e.getPreviousVisibleNode())}moveRight(e){return!e.isFolder()||(e.is_open?this.selectNode(e.getNextVisibleNode()):(this.openNode(e),!1))}moveLeft(e){return e.isFolder()&&e.is_open?(this.closeNode(e),!1):this.selectNode(e.getParent())}selectNode(e){return!e||(this.originalSelectNode(e),!1)}handleKeyDown=e=>{if(!this.canHandleKeyboard())return!0;const t=this.getSelectedNode();if(!t)return!0;switch(e.key){case"ArrowDown":return this.moveDown(t);case"ArrowUp":return this.moveUp(t);case"ArrowRight":return this.moveRight(t);case"ArrowLeft":return this.moveLeft(t);default:return!0}};canHandleKeyboard(){return this.keyboardSupport&&this.isFocusOnTree()}}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{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}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()}mouseDown=e=>{if(0!==e.button)return;this.handleMouseDown(g(e))&&e.cancelable&&e.preventDefault()};handleMouseDown(e){return this.isMouseStarted&&this.handleMouseUp(e),this.mouseDownInfo=e,!!this.onMouseCapture(e)&&(this.handleStartMouse(),!0)}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}startMouseDelayTimer(e){this.mouseDelayTimer&&clearTimeout(this.mouseDelayTimer),this.mouseDelayTimer=window.setTimeout((()=>{this.mouseDownInfo&&(this.isMouseDelayMet=!0)}),e),this.isMouseDelayMet=!1}mouseMove=e=>{this.handleMouseMove(e,g(e))};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))}mouseUp=e=>{this.handleMouseUp(g(e))};handleMouseUp(e){this.removeMouseMoveEventListeners(),this.isMouseDelayMet=!1,this.mouseDownInfo=null,this.isMouseStarted&&(this.isMouseStarted=!1,this.onMouseStop(e))}removeMouseMoveEventListeners(){document.removeEventListener("mousemove",this.mouseMove),document.removeEventListener("touchmove",this.touchMove),document.removeEventListener("mouseup",this.mouseUp),document.removeEventListener("touchend",this.touchEnd)}touchStart=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseDown(p(t,e))};touchMove=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseMove(e,p(t,e))};touchEnd=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseUp(p(t,e))};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",{node:t.node,click_event:e}).isDefaultPrevented()||this.onClickTitle(t.node);break}};handleDblclick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);"label"===t?.type&&this.triggerEvent("tree.dblclick",{node:t.node,click_event:e})};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",{node:o,click_event:e}),!1}return null};getClickTarget(e){const t=e.closest(".jqtree-toggler");if(t){const e=this.getNode(t);if(e)return{type:"button",node:e}}else{const t=e.closest(".jqtree-element");if(t){const e=this.getNode(t);if(e)return{type:"label",node:e}}}return null}}class S{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}saveState(){const e=JSON.stringify(this.getState());this.onSetStateFromStorage?this.onSetStateFromStorage(e):this.supportsLocalStorage()&&localStorage.setItem(this.getKeyName(),e)}getStateFromStorage(){const e=this.loadFromStorage();return e?this.parseState(e):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})()}}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()}getNodeIdToBeSelected(){const e=this.getStateFromStorage();return e?.selected_node?e.selected_node[0]??null:null}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}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}selectInitialNodes(e){let t=0;for(const o of e){const e=this.getNodeById(o);e&&(t+=1,this.addToSelection(e))}return 0!==t}resetSelection(){this.getSelectedNodes().forEach((e=>{this.removeFromSelection(e)}))}getKeyName(){return"string"==typeof this.saveStateOption?this.saveStateOption:"tree"}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}}class v{constructor(e){let{container:t,refreshHitAreas:o}=e;this.container=t,this.refreshHitAreas=o}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}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}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;this.container.scrollBy({left:e,top:0,behavior:"instant"}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;this.container.scrollBy({left:0,top:e,behavior:"instant"}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}getScrollParentTop(){return null==this.scrollParentTop&&(this.scrollParentTop=i(this.container)),this.scrollParentTop}getScrollParentBottom(){return null==this.scrollParentBottom&&(this.scrollParentBottom=this.getScrollParentTop()+this.container.clientHeight),this.scrollParentBottom}}class N{constructor(e){let{refreshHitAreas:t,treeElement:o}=e;this.refreshHitAreas=t,this.treeElement=o}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}getNewHorizontalScrollDirection(e){const t=e-document.documentElement.scrollLeft<20;return e>window.innerWidth-20&&this.canScrollRight()?"right":t?"left":void 0}canScrollRight(){const e=document.documentElement;return e.scrollLeft+e.clientWidth"auto"===e||"scroll"===e,D=e=>{const t=getComputedStyle(e);return E(t.overflowX)||E(t.overflowY)},y=(e,t)=>{const o=(e=>{if(D(e))return e;let t=e.parentElement;for(;t;){if(D(t))return t;t=t.parentElement}return null})(e);return o&&"HTML"!==o.tagName?new v({container:o,refreshHitAreas:t}):new N({refreshHitAreas:t,treeElement:e})};class b{constructor(e){let{refreshHitAreas:t,treeElement:o}=e;this.refreshHitAreas=t,this.scrollParent=void 0,this.treeElement=o}checkScrolling(e){this.checkVerticalScrolling(e),this.checkHorizontalScrolling(e)}stopScrolling(){this.getScrollParent().stopScrolling()}scrollToY(e){this.getScrollParent().scrollToY(e)}getScrollLeft(){return this.getScrollParent().getScrollLeft()}checkVerticalScrolling(e){this.getScrollParent().checkVerticalScrolling(e.pageY)}checkHorizontalScrolling(e){this.getScrollParent().checkHorizontalScrolling(e.pageX)}getScrollParent(){return this.scrollParent||(this.scrollParent=y(this.treeElement,this.refreshHitAreas)),this.scrollParent}}class C{constructor(e){let{getNodeById:t}=e;this.getNodeById=t,this.selectedNodes=new Set,this.clear()}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}clear(){this.selectedNodes.clear(),this.selectedSingleNode=null}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))))}addToSelection(e){null!=e.id?this.selectedNodes.add(e.id):this.selectedSingleNode=e}}const I=(e,t)=>{const o=()=>`simple_widget_${t}`,n=(e,t)=>{const o=jQuery.data(e,t);return o&&o instanceof T?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 T){const o=e[t];o&&"function"==typeof o&&(r=o.apply(e,n))}}return r})(this,r,i)}}};class T{static register(e,t){I(e,t)}static defaults={};constructor(e,t){this.$el=jQuery(e);const o=this.constructor.defaults;this.options={...o,...t}}destroy(){this.deinit()}init(){}deinit(){}}const F=e=>"object"==typeof e&&"children"in e&&e.children instanceof Array;class L{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]:L;this.name="",this.load_on_demand=!1,this.isEmptyFolder=null!=e&&F(e)&&0===e.children.length,this.setData(e),this.children=[],this.parent=null,t&&(this.idMapping=new Map,this.tree=this,this.nodeClass=o)}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)}}loadFromData(e){this.removeChildren();for(const t of e){const e=this.createNode(t);this.addChild(e),F(t)&&e.loadFromData(t.children)}return this}addChild(e){this.children.push(e),e.setParent(this)}addChildAtPosition(e,t){this.children.splice(t,0,e),e.setParent(this)}removeChild(e){e.removeChildren(),this.doRemoveChild(e)}getChildIndex(e){return this.children.indexOf(e)}hasChildren(){return 0!==this.children.length}isFolder(){return this.hasChildren()||this.load_on_demand}iterate(e){const t=(o,n)=>{for(const r of o.children){e(r,n)&&r.hasChildren()&&t(r,n+1)}};t(this,0)}moveNode(e,o,n){if(!e.parent||e.isParentOf(o))return!1;switch(e.parent.doRemoveChild(e),n){case t.After:return!!o.parent&&(o.parent.addChildAtPosition(e,o.parent.getChildIndex(o)+1),!0);case t.Before:return!!o.parent&&(o.parent.addChildAtPosition(e,o.parent.getChildIndex(o)),!0);case t.Inside:return o.addChildAtPosition(e,0),!0;default:return!1}}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)}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}getNodeByCallback(e){let t=null;return this.iterate((o=>!t&&(!e(o)||(t=o,!1)))),t}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}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}remove(){this.parent&&(this.parent.removeChild(this),this.parent=null)}append(e){const t=this.createNode(e);return this.addChild(t),t.loadChildrenFromData(e),t}prepend(e){const t=this.createNode(e);return this.addChildAtPosition(t,0),t.loadChildrenFromData(e),t}isParentOf(e){let t=e.parent;for(;t;){if(t===this)return!0;t=t.parent}return!1}getLevel(){let e=0,t=this;for(;t.parent;)e+=1,t=t.parent;return e}getNodeById(e){return this.idMapping.get(e)??null}addNodeToIndex(e){null!=e.id&&this.idMapping.set(e.id,e)}removeNodeFromIndex(e){null!=e.id&&this.idMapping.delete(e.id)}removeChildren(){this.iterate((e=>(this.tree?.removeNodeFromIndex(e),!0))),this.children=[]}getPreviousSibling(){if(this.parent){const e=this.parent.getChildIndex(this)-1;return e>=0?this.parent.children[e]??null:null}return null}getNextSibling(){if(this.parent){const e=this.parent.getChildIndex(this)+1;return eo[e]===t))}filter(e){const t=[];return this.iterate((o=>(e(o)&&t.push(o),!0))),t}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}getNextVisibleNode(){if(this.hasChildren()&&this.is_open)return this.children[0]??null;if(this.parent){const e=this.getNextSibling();return e||this.parent.getNextNode(!1)}return null}getPreviousNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()?e.getLastChild():e:this.getParent()}return null}getPreviousVisibleNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()&&e.is_open?e.getLastChild():e:this.getParent()}return null}getParent(){return this.parent&&this.parent.parent?this.parent:null}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}initFromData(e){const t=e=>{for(const t of e){const e=this.createNode();e.initFromData(t),this.addChild(e)}};(e=>{this.setData(e),F(e)&&e.children.length&&t(e.children)})(e)}setParent(e){this.parent=e,this.tree=e.tree,this.tree?.addNodeToIndex(this)}doRemoveChild(e){this.children.splice(this.getChildIndex(e),1),this.tree?.removeNodeFromIndex(e)}getNodeClass(){return this.nodeClass??this.tree?.nodeClass??L}createNode(e){return new(this.getNodeClass())(e)}loadChildrenFromData(e){F(e)&&e.children.length&&this.loadFromData(e.children)}}class w{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 H{constructor(e){this.element=e,this.ghost=this.createGhostElement(),this.element.after(this.ghost),this.ghost.classList.add("jqtree-inside")}remove(){this.ghost.remove()}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}}class M{constructor(e){let{getScrollLeft:t,node:o,tabIndex:n,$treeElement:r}=e;this.getScrollLeft=t,this.tabIndex=n,this.$treeElement=r,this.init(o)}init(e){if(this.node=e,!e.element){const t=this.$treeElement.get(0);t&&(e.element=t)}e.element&&(this.element=e.element)}addDropHint(e){return this.mustShowBorderDropHint(e)?new w(this.element,this.getScrollLeft()):new H(this.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()}deselect(){this.element.classList.remove("jqtree-selected");const e=this.getTitleSpan();e.removeAttribute("tabindex"),e.setAttribute("aria-selected","false"),e.blur()}getUl(){return this.element.querySelector(":scope > ul")}getTitleSpan(){return this.element.querySelector(":scope > .jqtree-element > span.jqtree-title")}mustShowBorderDropHint(e){return e===t.Inside}}class A extends M{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}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())}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())}mustShowBorderDropHint(e){return!this.node.is_open&&e===t.Inside}getButton(){return this.element.querySelector(":scope > .jqtree-element > a.jqtree-toggler")}}const _="Node parameter is empty",j="Parameter is empty: ";class x extends T{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:L,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};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}getTree(){return this.tree}selectNode(e,t){return this.doSelectNode(e,t),this.element}getSelectedNode(){return this.selectNodeHandler.getSelectedNode()}toJson(){return JSON.stringify(this.tree.getData())}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}reload(e){return this.doLoadDataFromUrl(null,null,e),this.element}refresh(){return this.refreshElements(null),this.element}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)}getNodeByHtmlElement(e){const t=e instanceof HTMLElement?e:e[0];return t?this.getNode(t):null}getNodeByCallback(e){return this.tree.getNodeByCallback(e)}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}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}isDragging(){return this.dndHandler.isDragging}refreshHitAreas(){return this.dndHandler.refresh(),this.element}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}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}appendNode(e,t){const o=t??this.tree,n=o.append(e);return this.refreshElements(o),n}prependNode(e,t){const o=t??this.tree,n=o.prepend(e);return this.refreshElements(o),n}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}isSelectedNodeInSubtree(e){const t=this.getSelectedNode();return!!t&&(e===t||e.isParentOf(t))}moveNode(e,t,n){if(!e)throw Error(_);if(!t)throw Error(j+"targetNode");if(!n)throw Error(j+"position");const r=o[n];return void 0!==r&&(this.tree.moveNode(e,t,r),this.refreshElements(null)),this.element}getStateFromStorage(){return this.saveStateHandler.getStateFromStorage()}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}getSelectedNodes(){return this.selectNodeHandler.getSelectedNodes()}isNodeSelected(e){if(!e)throw Error(_);return this.selectNodeHandler.isNodeSelected(e)}removeFromSelection(e){if(!e)throw Error(_);return this.selectNodeHandler.removeFromSelection(e),this.getNodeElementForNode(e).deselect(),this.saveState(),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}getState(){return this.saveStateHandler.getState()}setState(e){return e&&(this.saveStateHandler.setInitialState(e),this.refreshElements(null)),this.element}setOption(e,t){return this.options[e]=t,this.element}moveDown(){const e=this.getSelectedNode();return e&&this.keyHandler.moveDown(e),this.element}moveUp(){const e=this.getSelectedNode();return e&&this.keyHandler.moveUp(e),this.element}getVersion(){return"1.8.5"}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()}}refreshElements(e){const t=this.isFocusOnTree(),o=!!e&&this.isSelectedNodeInSubtree(e);this.renderer.render(e),o&&this.selectCurrentNode(t),this.triggerEvent("tree.refresh")}getNodeElementForNode(e){return e.isFolder()?this.createFolderElement(e):this.createNodeElement(e)}getNodeElement(e){const t=this.getNode(e);return t?this.getNodeElementForNode(t):null}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()}deinit(){this.element.empty(),this.element.off(),this.keyHandler.deinit(),this.mouseHandler.deinit(),this.tree=new L({},!0),super.deinit()}triggerEvent(e,t){const o=jQuery.Event(e,t);return this.element.trigger(o),o}mouseCapture(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseCapture(e)}mouseStart(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseStart(e)}mouseDrag(e){if(this.options.dragAndDrop){const t=this.dndHandler.mouseDrag(e);return this.scrollHandler.checkScrolling(e),t}return!1}mouseStop(e){return!!this.options.dragAndDrop&&(this.scrollHandler.stopScrolling(),this.dndHandler.mouseStop(e))}initData(){if(this.options.data)this.doLoadData(this.options.data,null);else{this.getDataUrlInfo(null)?this.doLoadDataFromUrl(null,null,null):this.doLoadData([],null)}}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}getNodeIdToBeSelected(){return this.options.saveState?this.saveStateHandler.getNodeIdToBeSelected():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()}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()}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}getNode(e){const t=e.closest("li.jqtree_common");return t?jQuery(t).data("node"):null}saveState(){this.options.saveState&&this.saveStateHandler.saveState()}selectCurrentNode(e){const t=this.getSelectedNode();if(t){this.getNodeElementForNode(t).select(e)}}deselectCurrentNode(){const e=this.getSelectedNode();e&&this.removeFromSelection(e)}getDefaultClosedIcon(){return this.options.rtl?"◀":"►"}getRtlOption(){if(null!=this.options.rtl)return this.options.rtl;{const e=this.element.data("rtl");return null!==e&&!1!==e&&void 0!==e}}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",{node:e,deselected_node:t}),this.openParents(e)}o()}}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",{tree_data:e,parent_node:t})}deselectNodes(e){const t=this.selectNodeHandler.getSelectedNodesUnder(e);for(const e of t)this.selectNodeHandler.removeFromSelection(e)}loadSubtree(e,t){t.loadFromData(e),t.load_on_demand=!1,t.is_loading=!1,this.refreshElements(t)}doLoadDataFromUrl(e,t,o){const n=e??this.getDataUrlInfo(t);this.dataLoader.loadFromUrl(n,t,o)}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)}))}containsElement(e){const t=this.getNode(e);return null!=t&&t.tree===this.tree}isFocusOnTree(){const e=document.activeElement;return Boolean(e&&"SPAN"===e.tagName&&this.containsElement(e))}connectHandlers(){const{autoEscape:e,buttonLeft:t,closedIcon:o,dataFilter:n,dragAndDrop:r,keyboardSupport:s,onCanMove:i,onCanMoveTo:l,onCreateLi:d,onDragMove:a,onDragStop:g,onGetStateFromStorage:p,onIsMoveHandle:v,onLoadFailed:N,onLoading:E,onSetStateFromStorage:D,openedIcon:y,openFolderDelay:I,rtl:T,saveState:F,showEmptyFolder:L,slide:w,tabIndex:H}=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),q=this.loadData.bind(this),O=this.openNodeInternal.bind(this),k=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 C({getNodeById:j}),R=Y.addToSelection.bind(Y),X=Y.getSelectedNodes.bind(Y),G=Y.isNodeSelected.bind(Y),W=Y.removeFromSelection.bind(Y),K=new u({dataFilter:n,loadData:q,onLoadFailed:N,onLoading:E,treeElement:Q,triggerEvent:V}),J=new S({addToSelection:R,getNodeById:j,getSelectedNodes:X,getTree:B,onGetStateFromStorage:p,onSetStateFromStorage:D,openNode:O,refreshElements:k,removeFromSelection:W,saveState:F}),Z=new b({refreshHitAreas:U,treeElement:Q}),ee=Z.getScrollLeft.bind(Z),te=new h({autoEscape:e,getNodeElement:A,getNodeElementForNode:_,getScrollLeft:ee,getTree:B,onCanMove:i,onCanMoveTo:l,onDragMove:a,onDragStop:g,onIsMoveHandle:v,openFolderDelay:I,openNode:O,refreshElements:k,slide:w,treeElement:Q,triggerEvent:V}),oe=new m({closeNode:M,getSelectedNode:x,isFocusOnTree:P,keyboardSupport:s,openNode:O,selectNode:z}),ne=new c({autoEscape:e,buttonLeft:t,closedIcon:o,dragAndDrop:r,$element:$,getTree:B,isNodeSelected:G,onCreateLi:d,openedIcon:y,rtl:T,showEmptyFolder:L,tabIndex:H}),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}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 A({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;return new M({getScrollLeft:t,node:e,tabIndex:o,$treeElement:n})}openParents(e){const t=e.parent;t?.parent&&!t.is_open&&this.openNode(t,!1)}}return T.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 44df13a8..319b9408 100644 --- a/tree.jquery.js.map +++ b/tree.jquery.js.map @@ -1 +1 @@ -{"version":3,"file":"tree.jquery.js","sources":["src/position.ts","src/dragAndDropHandler/dragElement.ts","src/util.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/index.ts","src/elementsRenderer.ts","src/dataLoader.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.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/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/tree.jquery.ts","src/version.ts"],"sourcesContent":["export enum Position {\n Before = 1,\n After,\n Inside,\n None,\n}\n\nconst positionNames: Record = {\n before: Position.Before,\n after: Position.After,\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","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private offsetX: number;\n private offsetY: number;\n private element: HTMLElement;\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 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 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\nexport default DragElement;\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","import { HitArea } from \"./types\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\n\ninterface HitPosition {\n top: number;\n node: Node;\n position: Position;\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 top,\n node,\n position,\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) {\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 top: areaTop,\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\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 { 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 { getPositionName, Position } from \"../position\";\nimport { DropHint, HitArea } from \"./types\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport NodeElement from \"../nodeElement\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { getElementPosition } from \"../util\";\nimport {\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n DragMethod,\n} from \"../jqtreeOptions\";\nimport {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\n\ninterface Dimensions {\n left: number;\n top: number;\n right: number;\n bottom: 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: number | false;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport class DragAndDropHandler {\n public hitAreas: HitArea[];\n public isDragging: boolean;\n public currentItem: NodeElement | null;\n public hoveredArea: HitArea | null;\n\n private autoEscape?: boolean;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\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: number | false;\n private openFolderTimer: number | null;\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\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 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 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 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 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 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 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 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 removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\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 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 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 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 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 moved_node: movedNode,\n target_node: targetNode,\n position: getPositionName(position),\n previous_parent: previousParent,\n do_move: doMove,\n original_event: positionInfo.originalEvent,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\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 left,\n top,\n right: left + this.treeElement.clientWidth,\n bottom: top + this.treeElement.clientHeight + 16,\n };\n }\n}\n","import { getBoolString } from \"./util\";\nimport { Node } from \"./node\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\n\ninterface ElementsRendererParams {\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n $element: JQuery;\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 public openedIconElement?: HTMLElement | Text;\n public closedIconElement?: HTMLElement | Text;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private $element: JQuery;\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 constructor({\n autoEscape,\n buttonLeft,\n closedIcon,\n onCreateLi,\n dragAndDrop,\n $element,\n getTree,\n isNodeSelected,\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 public render(fromNode: Node | null): void {\n if (fromNode && fromNode.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\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 public renderFromNode(node: Node): void {\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n this.attachNodeData(node, li);\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n if (node.children) {\n this.createDomElements(\n li,\n node.children,\n false,\n node.getLevel() + 1,\n );\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 this.attachNodeData(child, li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\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 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 if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\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 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 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 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 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 == null) {\n return undefined;\n } else if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\n }\n }\n}\n","import { Node } from \"./node\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\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 public loadFromUrl(\n urlInfo: string | JQuery.AjaxSettings | null,\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: string | NodeData[]): 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 private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode) {\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 isLoading,\n node,\n $el,\n });\n }\n\n private submitRequest(\n urlInfoInput: string | JQuery.AjaxSettings,\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 method: \"GET\",\n cache: false,\n dataType: \"json\",\n success: handleSuccess,\n error: handleError,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() || \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n\n private parseData(data: string | NodeData[]): 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","import { Node } from \"./node\";\nimport {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\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 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 this.handleKeyDownHandler = this.handleKeyDown.bind(this);\n\n document.addEventListener(\"keydown\", this.handleKeyDownHandler);\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 public moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return true;\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 false;\n }\n }\n }\n\n public 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 false;\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 public selectNode(node: Node | null): boolean {\n if (!node) {\n return true;\n } else {\n this.originalSelectNode(node);\n\n return false;\n }\n }\n\n private handleKeyDown = (e: KeyboardEvent): boolean => {\n if (!this.canHandleKeyboard()) {\n return true;\n }\n\n const selectedNode = this.getSelectedNode();\n if (!selectedNode) {\n return true;\n }\n\n switch (e.key) {\n case \"ArrowDown\":\n return this.moveDown(selectedNode);\n\n case \"ArrowUp\":\n return this.moveUp(selectedNode);\n\n case \"ArrowRight\":\n return this.moveRight(selectedNode);\n\n case \"ArrowLeft\":\n return this.moveLeft(selectedNode);\n\n default:\n return true;\n }\n };\n\n private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\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 {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\nimport { TriggerEvent } from \"./jqtreeMethodTypes\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ntype GetNode = (element: HTMLElement) => null | Node;\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 private isMouseDelayMet: boolean;\n private isMouseStarted: boolean;\n private mouseDelayTimer: number | null;\n private mouseDownInfo: PositionInfo | null;\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 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 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 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 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 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 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 private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\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 =\n this.onMouseStart(this.mouseDownInfo) !== false;\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 mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\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 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 touchStart = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\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 touchMove = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\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 touchEnd = (e: TouchEvent): void => {\n if (!e) {\n return;\n }\n\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 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 if (clickTarget.type === \"button\") {\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n } else if (clickTarget.type === \"label\") {\n const event = this.triggerEvent(\"tree.click\", {\n node: clickTarget.node,\n click_event: e,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n }\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 node: clickTarget.node,\n click_event: e,\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 node,\n click_event: e,\n });\n return false;\n }\n }\n\n return 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 type: \"button\",\n node,\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 type: \"label\",\n node,\n };\n }\n }\n }\n\n return null;\n }\n}\n\nexport default MouseHandler;\n","import { isInt } from \"./util\";\nimport { Node } from \"./node\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\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 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 private _supportsLocalStorage: boolean | null;\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 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 public getStateFromStorage(): SavedState | null {\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 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 /*\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 if (!state) {\n return false;\n } else {\n let mustLoadOnDemand = false;\n\n if (state.open_nodes) {\n mustLoadOnDemand = this.openInitialNodes(state.open_nodes);\n }\n\n if (state.selected_node) {\n this.resetSelection();\n this.selectInitialNodes(state.selected_node);\n }\n\n return mustLoadOnDemand;\n }\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 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 (this.selectInitialNodes(state.selected_node)) {\n this.refreshElements(null);\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 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 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 && 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 loadFromStorage(): string | null {\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 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 resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\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 supportsLocalStorage(): boolean {\n const testSupport = (): boolean => {\n // Is local storage supported?\n if (localStorage == null) {\n return false;\n } else {\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 (error) {\n return false;\n }\n\n return true;\n }\n };\n\n if (this._supportsLocalStorage == null) {\n this._supportsLocalStorage = testSupport();\n }\n\n return this._supportsLocalStorage;\n }\n}\n","import type { ScrollParent } from \"./types\";\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 verticalScrollTimeout?: number;\n private verticalScrollDirection?: VerticalScrollDirection;\n\n constructor({ container, refreshHitAreas }: Params) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\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 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 ): VerticalScrollDirection | undefined {\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 scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n\n this.container.scrollBy({\n left: distance,\n top: 0,\n behavior: \"instant\",\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 left: 0,\n top: distance,\n behavior: \"instant\",\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\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 getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n this.scrollParentBottom = this.getScrollParentTop() + this.container.clientHeight;\n }\n\n return this.scrollParentBottom;\n }\n}\n","import type { ScrollParent } from \"./types\";\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 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 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 canScrollRight() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollLeft + documentElement.clientWidth <\n this.getDocumentScrollWidth()\n );\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 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 getNewVerticalScrollDirection(\n pageY: number,\n ): VerticalScrollDirection | undefined {\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({ left: distance, top: 0, behavior: \"instant\" });\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({ left: 0, top: distance, behavior: \"instant\" });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import type { ScrollParent } from \"./types\";\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 { ScrollParent } from \"./scrollHandler/types\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\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 public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\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","import { Node } from \"./node\";\nimport { GetNodeById } from \"./jqtreeMethodTypes\";\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 getSelectedNode(): Node | false {\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 clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\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 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","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 ): SimpleWidget | null => {\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 return destroyWidget(this);\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 public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public options: WidgetOptions;\n\n public $el: JQuery;\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 destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n\n public deinit(): void {\n //\n }\n}\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 public id?: NodeId;\n public name: string;\n public children: Node[];\n public parent: Node | null;\n public idMapping: Map;\n public tree?: Node;\n public nodeClass?: typeof Node;\n public load_on_demand: boolean;\n public is_open: boolean;\n public element: HTMLElement;\n public is_loading: boolean;\n public isEmptyFolder: boolean;\n\n [key: string]: unknown;\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 /*\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 /*\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[]): Node {\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 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 /*\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 /*\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 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 public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\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 if (node.children) {\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\n _iterate(this, 0);\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 /*\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 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 `Node with name ${name} not found`;\n }\n\n return node;\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 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 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 remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\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 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 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 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 getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) || null;\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 removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\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 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 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 getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\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 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 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 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 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 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 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 // 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 private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\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 private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\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","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\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n\n constructor(element: HTMLElement) {\n this.element = element;\n this.ghost = this.createGhostElement();\n\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n public remove(): void {\n this.ghost.remove();\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\nexport default GhostDropHint;\n","import { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { DropHint } from \"../dragAndDropHandler/types\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n $treeElement: JQuery;\n}\n\nclass NodeElement {\n public node: Node;\n public element: HTMLElement;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private $treeElement: JQuery;\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 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 addDropHint(position: number): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.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 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 protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\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 mustShowBorderDropHint(position: Position): boolean {\n return position === Position.Inside;\n }\n}\n\nexport default NodeElement;\n","import { Position } from \"../position\";\nimport NodeElement, { NodeElementParams } from \"./index\";\nimport { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\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 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 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 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\nexport default FolderElement;\n","import __version__ from \"./version\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport { Node } from \"./node\";\nimport { getPosition } from \"./position\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\n\ninterface SelectNodeOptions {\n mustToggle?: boolean;\n mustSetFocus?: 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 element: JQuery;\n private isInitialized: boolean;\n private tree: Node;\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\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\n public toggle(node: Node, slideParam: null | 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.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public getTree(): Node {\n return this.tree;\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 getSelectedNode(): Node | false {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\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: string | null | Node,\n param2?: Node | null | HandleFinishedLoading,\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 reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.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 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 getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\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: OnFinishOpenNode | null;\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 ?? false;\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 closeNode(node: Node, slideParam?: null | boolean): 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 isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\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 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 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 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 updateNode(node: Node, data: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\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 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 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 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 getStateFromStorage(): SavedState | null {\n return this.saveStateHandler.getStateFromStorage();\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(\n mustSetFocus === undefined ? true : mustSetFocus,\n );\n\n this.saveState();\n\n return this.element;\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\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 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 scrollToNode(node: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\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 getState(): SavedState | null {\n return this.saveStateHandler.getState();\n }\n\n public setState(state: SavedState): JQuery {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n\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 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 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 getVersion(): string {\n return __version__;\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 /*\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 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 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 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 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 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 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 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 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 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 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 getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl || (this.element.data(\"url\") as string | null);\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 getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\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 if (!this.options.nodeClass) {\n return;\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 // 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 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 getNode(element: HTMLElement): null | Node {\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 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 if (nodeElement) {\n nodeElement.select(mustSetFocus);\n }\n }\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\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 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 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 === true &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable === true;\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 node,\n deselected_node: deselectedNode,\n });\n this.openParents(node);\n }\n\n saveState();\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 tree_data: data,\n parent_node: parentNode,\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 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 doLoadDataFromUrl(\n urlInfoParam: string | JQuery.AjaxSettings | null,\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 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 containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\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 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 autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n $element: $treeElement,\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 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 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;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n $treeElement,\n });\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent && parent.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n","const version = \"1.8.5\";\n\nexport default version;\n"],"names":["Position","positionNames","before","Before","after","After","inside","Inside","none","None","getPositionName","position","name","Object","prototype","hasOwnProperty","call","DragElement","constructor","_ref","autoEscape","nodeName","offsetX","offsetY","treeElement","this","element","createElement","appendChild","move","pageX","pageY","style","left","top","remove","document","classList","add","textContent","innerHTML","getBoolString","value","getOffsetTop","getElementPosition","rect","getBoundingClientRect","x","window","scrollX","y","scrollY","generateHitAreasForGroup","hitAreas","positionsInGroup","bottom","positionCount","Math","min","length","areaHeight","round","areaTop","i","push","node","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","triggerEvent","hoveredArea","isDragging","currentItem","mouseCapture","positionInfo","target","mustCaptureElement","jQuery","nodeElement","mouseStart","refresh","dragElement","mouseDrag","area","findHoveredArea","canMoveToArea","isFolder","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","originalEvent","mouseStop","moveItem","clear","removeHover","removeHitAreas","getTreeDimensions","positionName","previousGhost","dimensions","right","low","high","mid","addDropHint","folder","openFolder","openFolderDelay","openFolderTimer","setTimeout","clearTimeout","movedNode","targetNode","previousParent","parent","doMove","moveNode","move_info","moved_node","target_node","previous_parent","do_move","original_event","isDefaultPrevented","treePosition","clientWidth","ElementsRenderer","buttonLeft","closedIcon","onCreateLi","dragAndDrop","$element","isNodeSelected","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","render","fromNode","renderFromNode","renderFromRoot","empty","createDomElements","$previousLi","li","createLi","getLevel","attachNodeData","isRootNode","level","ul","createUl","data","classString","role","className","setAttribute","isSelected","Boolean","isEmptyFolder","createFolderLi","createNodeLi","setTreeItemAriaAttributes","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","div","buttonLink","cloneNode","titleSpan","createTitleSpan","liClasses","join","classes","undefined","is_loading","createTextNode","nodeType","DataLoader","dataFilter","loadData","onLoadFailed","onLoading","loadFromUrl","urlInfo","parentNode","onFinished","getDomElement","addLoadingClass","notifyLoading","stopLoading","removeLoadingClass","submitRequest","parseData","jqXHR","isLoading","$el","urlInfoInput","handleSuccess","handleError","ajaxSettings","method","cache","dataType","success","error","url","toUpperCase","ajax","parsedData","JSON","parse","KeyHandler","closeNode","getSelectedNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","handleKeyDownHandler","handleKeyDown","bind","addEventListener","deinit","removeEventListener","moveDown","selectedNode","getNextVisibleNode","moveUp","getPreviousVisibleNode","moveRight","moveLeft","getParent","e","canHandleKeyboard","key","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","handleClick","handleDblclick","mouseDown","passive","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","removeMouseMoveEventListeners","button","handleMouseDown","cancelable","preventDefault","handleMouseUp","handleStartMouse","mouseMove","touchMove","mouseUp","touchEnd","mouseDelay","startMouseDelayTimer","handleMouseMove","touches","clickTarget","getClickTarget","type","stopPropagation","click_event","closest","jqTreeElement","SaveStateHandler","addToSelection","getNodeById","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","state","stringify","getState","supportsLocalStorage","localStorage","setItem","getKeyName","getStateFromStorage","jsonData","loadFromStorage","parseState","open_nodes","getOpenNodeIds","openNodes","id","selected_node","getSelectedNodeIds","selectedNodeIds","setInitialState","mustLoadOnDemand","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand","cbFinished","loadingCount","nodeIds","newNodesIds","nodeId","load_on_demand","loadAndOpenNode","getNodeIdToBeSelected","n","getItem","selectCount","_supportsLocalStorage","testSupport","sessionStorage","removeItem","ContainerScrollParent","container","refreshHitAreas","checkHorizontalScrolling","newHorizontalScrollDirection","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","verticalScrollTimeout","scrollHorizontally","checkVerticalScrolling","newVerticalScrollDirection","getNewVerticalScrollDirection","verticalScrollDirection","scrollVertically","scrollLeft","scrollToY","scrollTop","stopScrolling","scrollParentTop","scrollParentBottom","scrollParentOffset","rightEdge","leftEdge","getScrollParentTop","getScrollParentBottom","distance","scrollBy","behavior","DocumentScrollParent","documentElement","treeTop","documentScrollHeight","documentScrollWidth","isNearLeftEdge","innerWidth","canScrollRight","getDocumentScrollWidth","canScrollDown","getDocumentScrollHeight","scrollHeight","scrollWidth","innerHeight","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","createScrollParent","parentElement","getParentWithOverflow","tagName","ScrollHandler","scrollParent","checkScrolling","getScrollParent","SelectNodeHandler","selectedNodes","Set","selectedSingleNode","getSelectedNodesUnder","isParentOf","has","includeChildren","arguments","delete","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","get","init","fn","argument1","functionName","destroy","removeData","destroyWidget","_len","args","Array","_key","callFunction","result","widgetFunction","apply","static","defaults","isNodeRecordWithChildren","Node","nodeData","isRoot","nodeClass","setData","idMapping","Map","o","loadFromData","removeChildren","childData","createNode","addChild","setParent","addChildAtPosition","index","splice","removeChild","doRemoveChild","getChildIndex","indexOf","callback","_iterate","getData","getDataFromNodes","nodes","map","tmpNode","k","v","getNodeByName","getNodeByCallback","getNodeByNameMustExist","addAfter","nodeInfo","childIndex","loadChildrenFromData","addBefore","addParent","newParent","originalParent","append","prepend","addNodeToIndex","set","removeNodeFromIndex","getPreviousSibling","previousIndex","getNextSibling","nextIndex","getNodesByProperty","filter","f","getNextNode","nextSibling","getPreviousNode","previousSibling","getLastChild","lastChild","initFromData","addChildren","childrenData","addNode","getNodeClass","BorderDropHint","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","circleSpan","lineSpan","NodeElement","$treeElement","mustShowBorderDropHint","select","mustSetFocus","getTitleSpan","toString","focus","deselect","removeAttribute","blur","getUl","FolderElement","super","open","animationSpeed","getButton","icon","doOpen","slideDown","show","close","doClose","slideUp","hide","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","toggle","slideParam","Error","optionsParam","doSelectNode","selectNodeHandler","toJson","doLoadData","loadDataFromUrl","param1","param2","param3","doLoadDataFromUrl","reload","getNodeByHtmlElement","inputElement","HTMLElement","parseParams","openNodeInternal","createFolderElement","dndHandler","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","removeNode","appendNode","parentNodeParam","prependNode","updateNode","idIsChanged","isSelectedNodeInSubtree","subtree","positionIndex","saveStateHandler","openParents","scrollToNode","scrollHandler","setState","setOption","option","keyHandler","getVersion","doOpenNode","_node","_slide","_onFinished","loadFolderOnDemand","mustSelect","renderer","selectCurrentNode","createNodeElement","isInitialized","getRtlOption","getDefaultClosedIcon","connectHandlers","initData","off","mouseHandler","eventName","values","event","Event","trigger","getDataUrlInfo","setUrlInfoData","selectedNodeId","getUrlFromString","initTree","doInit","autoOpenNodes","maxLevel","getAutoOpenMaxLevel","isRestored","restoreState","parseInt","liElement","deselectCurrentNode","dataRtl","selectOptions","mustToggle","canSelect","previous_node","deselectedNode","deselected_node","deselectNodes","loadSubtree","tree_data","parent_node","selectedNodesUnderParent","urlInfoParam","dataLoader","containsElement","activeElement"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree.jquery.js","sources":["src/position.ts","src/dragAndDropHandler/dragElement.ts","src/util.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/index.ts","src/elementsRenderer.ts","src/dataLoader.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.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/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/tree.jquery.ts","src/version.ts"],"sourcesContent":["export enum Position {\n Before = 1,\n After,\n Inside,\n None,\n}\n\nconst positionNames: Record = {\n before: Position.Before,\n after: Position.After,\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","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private offsetX: number;\n private offsetY: number;\n private element: HTMLElement;\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 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 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\nexport default DragElement;\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","import { HitArea } from \"./types\";\nimport { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\n\ninterface HitPosition {\n top: number;\n node: Node;\n position: Position;\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 top,\n node,\n position,\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 top: areaTop,\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\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 { 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 { getPositionName, Position } from \"../position\";\nimport { DropHint, HitArea } from \"./types\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport NodeElement from \"../nodeElement\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { getElementPosition } from \"../util\";\nimport {\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n DragMethod,\n} from \"../jqtreeOptions\";\nimport {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\n\ninterface Dimensions {\n left: number;\n top: number;\n right: number;\n bottom: 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: number | false;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport class DragAndDropHandler {\n public hitAreas: HitArea[];\n public isDragging: boolean;\n public currentItem: NodeElement | null;\n public hoveredArea: HitArea | null;\n\n private autoEscape?: boolean;\n private dragElement: DragElement | null;\n private getNodeElement: GetNodeElement;\n private getNodeElementForNode: GetNodeElementForNode;\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: number | false;\n private openFolderTimer: number | null;\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\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 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 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 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 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 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 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 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 removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\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 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 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 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 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 moved_node: movedNode,\n target_node: targetNode,\n position: getPositionName(position),\n previous_parent: previousParent,\n do_move: doMove,\n original_event: positionInfo.originalEvent,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\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 left,\n top,\n right: left + this.treeElement.clientWidth,\n bottom: top + this.treeElement.clientHeight + 16,\n };\n }\n}\n","import { getBoolString } from \"./util\";\nimport { Node } from \"./node\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\n\ninterface ElementsRendererParams {\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n $element: JQuery;\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 public openedIconElement?: HTMLElement | Text;\n public closedIconElement?: HTMLElement | Text;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private $element: JQuery;\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 constructor({\n autoEscape,\n buttonLeft,\n closedIcon,\n onCreateLi,\n dragAndDrop,\n $element,\n getTree,\n isNodeSelected,\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 public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\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 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 this.attachNodeData(node, li);\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 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 this.attachNodeData(child, li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\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 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 if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\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 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 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 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 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","import { Node } from \"./node\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\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 public loadFromUrl(\n urlInfo: string | JQuery.AjaxSettings | null,\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: string | NodeData[]): 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 private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"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 isLoading,\n node,\n $el,\n });\n }\n\n private submitRequest(\n urlInfoInput: string | JQuery.AjaxSettings,\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 method: \"GET\",\n cache: false,\n dataType: \"json\",\n success: handleSuccess,\n error: handleError,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n\n private parseData(data: string | NodeData[]): 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","import { Node } from \"./node\";\nimport {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\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 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 this.handleKeyDownHandler = this.handleKeyDown.bind(this);\n\n document.addEventListener(\"keydown\", this.handleKeyDownHandler);\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 public moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return true;\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 false;\n }\n }\n }\n\n public 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 false;\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 public selectNode(node: Node | null): boolean {\n if (!node) {\n return true;\n } else {\n this.originalSelectNode(node);\n\n return false;\n }\n }\n\n private handleKeyDown = (e: KeyboardEvent): boolean => {\n if (!this.canHandleKeyboard()) {\n return true;\n }\n\n const selectedNode = this.getSelectedNode();\n if (!selectedNode) {\n return true;\n }\n\n switch (e.key) {\n case \"ArrowDown\":\n return this.moveDown(selectedNode);\n\n case \"ArrowUp\":\n return this.moveUp(selectedNode);\n\n case \"ArrowRight\":\n return this.moveRight(selectedNode);\n\n case \"ArrowLeft\":\n return this.moveLeft(selectedNode);\n\n default:\n return true;\n }\n };\n\n private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\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 {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\nimport { TriggerEvent } from \"./jqtreeMethodTypes\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ntype GetNode = (element: HTMLElement) => null | Node;\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 private isMouseDelayMet: boolean;\n private isMouseStarted: boolean;\n private mouseDelayTimer: number | null;\n private mouseDownInfo: PositionInfo | null;\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 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 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 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 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 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 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 private mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\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 mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\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 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 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 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 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 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 node: clickTarget.node,\n click_event: e,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\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 node: clickTarget.node,\n click_event: e,\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 node,\n click_event: e,\n });\n return false;\n }\n }\n\n return 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 type: \"button\",\n node,\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 type: \"label\",\n node,\n };\n }\n }\n }\n\n return null;\n }\n}\n\nexport default MouseHandler;\n","import { isInt } from \"./util\";\nimport { Node } from \"./node\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\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 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 private _supportsLocalStorage: boolean | null;\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 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 public getStateFromStorage(): SavedState | null {\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 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 /*\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 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 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 loadFromStorage(): string | null {\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 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 resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\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 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","import type { ScrollParent } from \"./types\";\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 verticalScrollTimeout?: number;\n private verticalScrollDirection?: VerticalScrollDirection;\n\n constructor({ container, refreshHitAreas }: Params) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\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 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 ): VerticalScrollDirection | undefined {\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 scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n\n this.container.scrollBy({\n left: distance,\n top: 0,\n behavior: \"instant\",\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 left: 0,\n top: distance,\n behavior: \"instant\",\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\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 getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n this.scrollParentBottom = this.getScrollParentTop() + this.container.clientHeight;\n }\n\n return this.scrollParentBottom;\n }\n}\n","import type { ScrollParent } from \"./types\";\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 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 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 canScrollRight() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollLeft + documentElement.clientWidth <\n this.getDocumentScrollWidth()\n );\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 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 getNewVerticalScrollDirection(\n pageY: number,\n ): VerticalScrollDirection | undefined {\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({ left: distance, top: 0, behavior: \"instant\" });\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({ left: 0, top: distance, behavior: \"instant\" });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import type { ScrollParent } from \"./types\";\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 { ScrollParent } from \"./scrollHandler/types\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\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 public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\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","import { Node } from \"./node\";\nimport { GetNodeById } from \"./jqtreeMethodTypes\";\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 getSelectedNode(): Node | false {\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 clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\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 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","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 ): SimpleWidget | null => {\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 public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public options: WidgetOptions;\n\n public $el: JQuery;\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 destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n\n public deinit(): void {\n //\n }\n}\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 public id?: NodeId;\n public name: string;\n public children: Node[];\n public parent: Node | null;\n public idMapping: Map;\n public tree?: Node;\n public nodeClass?: typeof Node;\n public load_on_demand: boolean;\n public is_open: boolean;\n public element?: HTMLElement;\n public is_loading: boolean;\n public isEmptyFolder: boolean;\n\n [key: string]: unknown;\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 /*\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 /*\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 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 /*\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 /*\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 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 public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\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 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 /*\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 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 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 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 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 remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\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 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 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 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 getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\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 removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\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 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 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 getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\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 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 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 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 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 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 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 // 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 private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\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 private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\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","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\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n\n constructor(element: HTMLElement) {\n this.element = element;\n this.ghost = this.createGhostElement();\n\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n public remove(): void {\n this.ghost.remove();\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\nexport default GhostDropHint;\n","import { Node } from \"../node\";\nimport { Position } from \"../position\";\nimport { DropHint } from \"../dragAndDropHandler/types\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n $treeElement: JQuery;\n}\n\nclass NodeElement {\n public node: Node;\n public element: HTMLElement;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private $treeElement: JQuery;\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 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 addDropHint(position: number): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.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 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 protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\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 mustShowBorderDropHint(position: Position): boolean {\n return position === Position.Inside;\n }\n}\n\nexport default NodeElement;\n","import { Position } from \"../position\";\nimport NodeElement, { NodeElementParams } from \"./index\";\nimport { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\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 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 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 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\nexport default FolderElement;\n","import __version__ from \"./version\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport { Node } from \"./node\";\nimport { getPosition } from \"./position\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\n\ninterface SelectNodeOptions {\n mustToggle?: boolean;\n mustSetFocus?: 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 element: JQuery;\n private isInitialized: boolean;\n private tree: Node;\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\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\n public toggle(node?: Node, slideParam: null | 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.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public getTree(): Node {\n return this.tree;\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 getSelectedNode(): Node | false {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\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: string | null | Node,\n param2?: Node | null | HandleFinishedLoading,\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 reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.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 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 getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\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: OnFinishOpenNode | null;\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 closeNode(node?: Node, slideParam?: null | boolean): 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 isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\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 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 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 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 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 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 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 getStateFromStorage(): SavedState | null {\n return this.saveStateHandler.getStateFromStorage();\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 getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\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 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 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 getState(): SavedState | null {\n return this.saveStateHandler.getState();\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 setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record)[option] = value;\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 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 getVersion(): string {\n return __version__;\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 /*\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 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 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 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 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 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 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 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 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 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 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 getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl ?? (this.element.data(\"url\") as string | null);\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 getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\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 // 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 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 getNode(element: HTMLElement): null | Node {\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 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 private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\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 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 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 node,\n deselected_node: deselectedNode,\n });\n this.openParents(node);\n }\n\n saveState();\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 tree_data: data,\n parent_node: parentNode,\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 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 doLoadDataFromUrl(\n urlInfoParam: string | JQuery.AjaxSettings | null,\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 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 containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\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 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 autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n $element: $treeElement,\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 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 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;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n $treeElement,\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\nSimpleWidget.register(JqTreeWidget, \"tree\");\n","const version = \"1.8.5\";\n\nexport default version;\n"],"names":["Position","positionNames","before","Before","after","After","inside","Inside","none","None","getPositionName","position","name","Object","prototype","hasOwnProperty","call","DragElement","constructor","_ref","autoEscape","nodeName","offsetX","offsetY","treeElement","this","element","createElement","appendChild","move","pageX","pageY","style","left","top","remove","document","classList","add","textContent","innerHTML","getBoolString","value","getOffsetTop","getElementPosition","rect","getBoundingClientRect","x","window","scrollX","y","scrollY","generateHitAreasForGroup","hitAreas","positionsInGroup","bottom","positionCount","Math","min","length","areaHeight","round","areaTop","i","push","node","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","triggerEvent","hoveredArea","isDragging","currentItem","mouseCapture","positionInfo","target","mustCaptureElement","jQuery","nodeElement","mouseStart","refresh","dragElement","mouseDrag","area","findHoveredArea","canMoveToArea","isFolder","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","originalEvent","mouseStop","moveItem","clear","removeHover","removeHitAreas","getTreeDimensions","positionName","previousGhost","dimensions","right","low","high","mid","addDropHint","folder","openFolder","openFolderDelay","openFolderTimer","setTimeout","clearTimeout","movedNode","targetNode","previousParent","parent","doMove","moveNode","move_info","moved_node","target_node","previous_parent","do_move","original_event","isDefaultPrevented","treePosition","clientWidth","ElementsRenderer","buttonLeft","closedIcon","onCreateLi","dragAndDrop","$element","isNodeSelected","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","render","fromNode","renderFromNode","renderFromRoot","empty","createDomElements","$previousLi","li","createLi","getLevel","attachNodeData","isRootNode","level","ul","createUl","data","classString","role","className","setAttribute","isSelected","Boolean","isEmptyFolder","createFolderLi","createNodeLi","setTreeItemAriaAttributes","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","div","buttonLink","cloneNode","titleSpan","createTitleSpan","liClasses","join","classes","undefined","is_loading","createTextNode","nodeType","DataLoader","dataFilter","loadData","onLoadFailed","onLoading","loadFromUrl","urlInfo","parentNode","onFinished","getDomElement","addLoadingClass","notifyLoading","stopLoading","removeLoadingClass","submitRequest","parseData","jqXHR","isLoading","$el","urlInfoInput","handleSuccess","handleError","ajaxSettings","method","cache","dataType","success","error","url","toUpperCase","ajax","parsedData","JSON","parse","KeyHandler","closeNode","getSelectedNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","handleKeyDownHandler","handleKeyDown","bind","addEventListener","deinit","removeEventListener","moveDown","selectedNode","getNextVisibleNode","moveUp","getPreviousVisibleNode","moveRight","moveLeft","getParent","e","canHandleKeyboard","key","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","handleClick","handleDblclick","mouseDown","passive","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","removeMouseMoveEventListeners","button","handleMouseDown","cancelable","preventDefault","handleMouseUp","handleStartMouse","mouseMove","touchMove","mouseUp","touchEnd","mouseDelay","startMouseDelayTimer","handleMouseMove","touches","clickTarget","getClickTarget","type","stopPropagation","click_event","closest","jqTreeElement","SaveStateHandler","addToSelection","getNodeById","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","state","stringify","getState","supportsLocalStorage","localStorage","setItem","getKeyName","getStateFromStorage","jsonData","loadFromStorage","parseState","open_nodes","getOpenNodeIds","openNodes","id","selected_node","getSelectedNodeIds","selectedNodeIds","setInitialState","mustLoadOnDemand","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand","cbFinished","loadingCount","nodeIds","newNodesIds","nodeId","load_on_demand","loadAndOpenNode","getNodeIdToBeSelected","n","getItem","selectCount","_supportsLocalStorage","testSupport","sessionStorage","removeItem","ContainerScrollParent","container","refreshHitAreas","checkHorizontalScrolling","newHorizontalScrollDirection","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","verticalScrollTimeout","scrollHorizontally","checkVerticalScrolling","newVerticalScrollDirection","getNewVerticalScrollDirection","verticalScrollDirection","scrollVertically","scrollLeft","scrollToY","scrollTop","stopScrolling","scrollParentTop","scrollParentBottom","scrollParentOffset","rightEdge","leftEdge","getScrollParentTop","getScrollParentBottom","distance","scrollBy","behavior","DocumentScrollParent","documentElement","treeTop","documentScrollHeight","documentScrollWidth","isNearLeftEdge","innerWidth","canScrollRight","getDocumentScrollWidth","canScrollDown","getDocumentScrollHeight","scrollHeight","scrollWidth","innerHeight","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","createScrollParent","parentElement","getParentWithOverflow","tagName","ScrollHandler","scrollParent","checkScrolling","getScrollParent","SelectNodeHandler","selectedNodes","Set","selectedSingleNode","getSelectedNodesUnder","isParentOf","has","includeChildren","arguments","delete","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","get","init","fn","argument1","functionName","destroy","removeData","destroyWidget","_len","args","Array","_key","callFunction","result","widgetFunction","apply","static","defaults","isNodeRecordWithChildren","Node","nodeData","isRoot","nodeClass","setData","idMapping","Map","o","loadFromData","removeChildren","childData","createNode","addChild","setParent","addChildAtPosition","index","splice","removeChild","doRemoveChild","getChildIndex","indexOf","callback","_iterate","getData","getDataFromNodes","nodes","map","tmpNode","k","v","getNodeByName","getNodeByCallback","getNodeByNameMustExist","Error","addAfter","nodeInfo","childIndex","loadChildrenFromData","addBefore","addParent","newParent","originalParent","append","prepend","addNodeToIndex","set","removeNodeFromIndex","getPreviousSibling","previousIndex","getNextSibling","nextIndex","getNodesByProperty","filter","f","getNextNode","nextSibling","getPreviousNode","previousSibling","getLastChild","lastChild","initFromData","addChildren","childrenData","addNode","getNodeClass","BorderDropHint","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","circleSpan","lineSpan","NodeElement","$treeElement","mustShowBorderDropHint","select","mustSetFocus","getTitleSpan","toString","focus","deselect","removeAttribute","blur","getUl","FolderElement","super","open","animationSpeed","getButton","icon","doOpen","slideDown","show","close","doClose","slideUp","hide","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","toggle","slideParam","optionsParam","doSelectNode","selectNodeHandler","toJson","doLoadData","loadDataFromUrl","param1","param2","param3","doLoadDataFromUrl","reload","getNodeByHtmlElement","inputElement","HTMLElement","parseParams","openNodeInternal","createFolderElement","dndHandler","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","removeNode","appendNode","parentNodeParam","prependNode","updateNode","idIsChanged","isSelectedNodeInSubtree","subtree","positionIndex","saveStateHandler","openParents","scrollToNode","scrollHandler","setState","setOption","option","keyHandler","getVersion","doOpenNode","_node","_slide","_onFinished","loadFolderOnDemand","mustSelect","renderer","selectCurrentNode","createNodeElement","isInitialized","getRtlOption","getDefaultClosedIcon","connectHandlers","initData","off","mouseHandler","eventName","values","event","Event","trigger","getDataUrlInfo","setUrlInfoData","selectedNodeId","getUrlFromString","initTree","doInit","autoOpenNodes","maxLevel","getAutoOpenMaxLevel","isRestored","restoreState","parseInt","liElement","deselectCurrentNode","dataRtl","selectOptions","mustToggle","canSelect","previous_node","deselectedNode","deselected_node","deselectNodes","loadSubtree","tree_data","parent_node","selectedNodesUnderParent","urlInfoParam","dataLoader","containsElement","activeElement"],"mappings":"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"} \ No newline at end of file