diff --git a/docs/package.json b/docs/package.json index 4d44ead7..6a2afc1b 100644 --- a/docs/package.json +++ b/docs/package.json @@ -11,17 +11,17 @@ "copy_vendor_files": "./copy_vendor_files" }, "devDependencies": { - "@tailwindcss/cli": "^4.0.6", - "@tailwindcss/postcss": "^4.0.6", + "@tailwindcss/cli": "^4.1.7", + "@tailwindcss/postcss": "^4.1.7", "@tailwindcss/typography": "^0.5.16", - "autoprefixer": "^10.4.20", + "autoprefixer": "^10.4.21", "jquery": "^3.7.1", "jquery-mockjax": "2.7.0-beta.0", - "postcss": "^8.5.2", - "postcss-cli": "^11.0.0", + "postcss": "^8.5.3", + "postcss-cli": "^11.0.1", "postcss-import": "^16.1.0", "postcss-load-config": "^6.0.1", "postcss-nested": "^7.0.2", - "tailwindcss": "^4.0.6" + "tailwindcss": "^4.1.7" } } diff --git a/docs/pnpm-lock.yaml b/docs/pnpm-lock.yaml index abd67108..98eb0b5e 100644 --- a/docs/pnpm-lock.yaml +++ b/docs/pnpm-lock.yaml @@ -9,17 +9,17 @@ importers: .: devDependencies: '@tailwindcss/cli': - specifier: ^4.0.6 - version: 4.0.6 + specifier: ^4.1.7 + version: 4.1.7 '@tailwindcss/postcss': - specifier: ^4.0.6 - version: 4.0.6 + specifier: ^4.1.7 + version: 4.1.7 '@tailwindcss/typography': specifier: ^0.5.16 - version: 0.5.16(tailwindcss@4.0.6) + version: 0.5.16(tailwindcss@4.1.7) autoprefixer: - specifier: ^10.4.20 - version: 10.4.20(postcss@8.5.2) + specifier: ^10.4.21 + version: 10.4.21(postcss@8.5.3) jquery: specifier: ^3.7.1 version: 3.7.1 @@ -27,23 +27,23 @@ importers: specifier: 2.7.0-beta.0 version: 2.7.0-beta.0 postcss: - specifier: ^8.5.2 - version: 8.5.2 + specifier: ^8.5.3 + version: 8.5.3 postcss-cli: - specifier: ^11.0.0 - version: 11.0.0(jiti@2.4.2)(postcss@8.5.2) + specifier: ^11.0.1 + version: 11.0.1(jiti@2.4.2)(postcss@8.5.3) postcss-import: specifier: ^16.1.0 - version: 16.1.0(postcss@8.5.2) + version: 16.1.0(postcss@8.5.3) postcss-load-config: specifier: ^6.0.1 - version: 6.0.1(jiti@2.4.2)(postcss@8.5.2)(yaml@2.7.0) + version: 6.0.1(jiti@2.4.2)(postcss@8.5.3)(yaml@2.8.0) postcss-nested: specifier: ^7.0.2 - version: 7.0.2(postcss@8.5.2) + version: 7.0.2(postcss@8.5.3) tailwindcss: - specifier: ^4.0.6 - version: 4.0.6 + specifier: ^4.1.7 + version: 4.1.7 packages: @@ -51,17 +51,31 @@ packages: resolution: {integrity: sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==} engines: {node: '>=10'} - '@nodelib/fs.scandir@2.1.5': - resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} - engines: {node: '>= 8'} + '@ampproject/remapping@2.3.0': + resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} + engines: {node: '>=6.0.0'} - '@nodelib/fs.stat@2.0.5': - resolution: {integrity: sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==} - engines: {node: '>= 8'} + '@isaacs/fs-minipass@4.0.1': + resolution: {integrity: sha512-wgm9Ehl2jpeqP3zw/7mo3kRHFp5MEDhqAdwy1fTGkHAwnkGOVsgpvQhL8B5n1qlb01jV3n/bI0ZfZp5lWA1k4w==} + engines: {node: '>=18.0.0'} - '@nodelib/fs.walk@1.2.8': - resolution: {integrity: sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==} - engines: {node: '>= 8'} + '@jridgewell/gen-mapping@0.3.8': + resolution: {integrity: sha512-imAbBGkb+ebQyxKgzv5Hu2nmROxoDOXHh80evxdoXNOrvAnVx7zimzc1Oo5h9RlfV4vPXaE2iM5pOFbvOCClWA==} + engines: {node: '>=6.0.0'} + + '@jridgewell/resolve-uri@3.1.2': + resolution: {integrity: sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==} + engines: {node: '>=6.0.0'} + + '@jridgewell/set-array@1.2.1': + resolution: {integrity: sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==} + engines: {node: '>=6.0.0'} + + '@jridgewell/sourcemap-codec@1.5.0': + resolution: {integrity: sha512-gv3ZRaISU3fjPAgNsriBRqGWQL6quFx04YMPW/zD8XMLsU32mhCCbfbO6KZFLjvYpCZ8zyDEgqsgf+PwPaM7GQ==} + + '@jridgewell/trace-mapping@0.3.25': + resolution: {integrity: sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==} '@parcel/watcher-android-arm64@2.5.1': resolution: {integrity: sha512-KF8+j9nNbUN8vzOFDpRMsaKBHZ/mcjEjMToVMJOhTozkDonQFFrRcfdLWn6yWKCmJKmdVxSgHiYvTCef4/qcBA==} @@ -145,89 +159,97 @@ packages: resolution: {integrity: sha512-dfUnCxiN9H4ap84DvD2ubjw+3vUNpstxa0TneY/Paat8a3R4uQZDLSvWjmznAY/DoahqTHl9V46HF/Zs3F29pg==} engines: {node: '>= 10.0.0'} - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - - '@tailwindcss/cli@4.0.6': - resolution: {integrity: sha512-5EybaKjLL6ruuKq4PFMpf60npR6x6MmVlqvXWca7ZcujQd7rj5vckNHi2M7Bn0U7dkWmmOm3s/9USLL7BZuudw==} + '@tailwindcss/cli@4.1.7': + resolution: {integrity: sha512-hJNjpov/UiJc9ZWH4j/eEQxqklADrD/71s+t8Y0wbyQVAwtLkSp+MeC/sHTb03X+28rfbe0fRXkiBsf73/IwPg==} hasBin: true - '@tailwindcss/node@4.0.6': - resolution: {integrity: sha512-jb6E0WeSq7OQbVYcIJ6LxnZTeC4HjMvbzFBMCrQff4R50HBlo/obmYNk6V2GCUXDeqiXtvtrQgcIbT+/boB03Q==} + '@tailwindcss/node@4.1.7': + resolution: {integrity: sha512-9rsOpdY9idRI2NH6CL4wORFY0+Q6fnx9XP9Ju+iq/0wJwGD5IByIgFmwVbyy4ymuyprj8Qh4ErxMKTUL4uNh3g==} - '@tailwindcss/oxide-android-arm64@4.0.6': - resolution: {integrity: sha512-xDbym6bDPW3D2XqQqX3PjqW3CKGe1KXH7Fdkc60sX5ZLVUbzPkFeunQaoP+BuYlLc2cC1FoClrIRYnRzof9Sow==} + '@tailwindcss/oxide-android-arm64@4.1.7': + resolution: {integrity: sha512-IWA410JZ8fF7kACus6BrUwY2Z1t1hm0+ZWNEzykKmMNM09wQooOcN/VXr0p/WJdtHZ90PvJf2AIBS/Ceqx1emg==} engines: {node: '>= 10'} cpu: [arm64] os: [android] - '@tailwindcss/oxide-darwin-arm64@4.0.6': - resolution: {integrity: sha512-1f71/ju/tvyGl5c2bDkchZHy8p8EK/tDHCxlpYJ1hGNvsYihZNurxVpZ0DefpN7cNc9RTT8DjrRoV8xXZKKRjg==} + '@tailwindcss/oxide-darwin-arm64@4.1.7': + resolution: {integrity: sha512-81jUw9To7fimGGkuJ2W5h3/oGonTOZKZ8C2ghm/TTxbwvfSiFSDPd6/A/KE2N7Jp4mv3Ps9OFqg2fEKgZFfsvg==} engines: {node: '>= 10'} cpu: [arm64] os: [darwin] - '@tailwindcss/oxide-darwin-x64@4.0.6': - resolution: {integrity: sha512-s/hg/ZPgxFIrGMb0kqyeaqZt505P891buUkSezmrDY6lxv2ixIELAlOcUVTkVh245SeaeEiUVUPiUN37cwoL2g==} + '@tailwindcss/oxide-darwin-x64@4.1.7': + resolution: {integrity: sha512-q77rWjEyGHV4PdDBtrzO0tgBBPlQWKY7wZK0cUok/HaGgbNKecegNxCGikuPJn5wFAlIywC3v+WMBt0PEBtwGw==} engines: {node: '>= 10'} cpu: [x64] os: [darwin] - '@tailwindcss/oxide-freebsd-x64@4.0.6': - resolution: {integrity: sha512-Z3Wo8FWZnmio8+xlcbb7JUo/hqRMSmhQw8IGIRoRJ7GmLR0C+25Wq+bEX/135xe/yEle2lFkhu9JBHd4wZYiig==} + '@tailwindcss/oxide-freebsd-x64@4.1.7': + resolution: {integrity: sha512-RfmdbbK6G6ptgF4qqbzoxmH+PKfP4KSVs7SRlTwcbRgBwezJkAO3Qta/7gDy10Q2DcUVkKxFLXUQO6J3CRvBGw==} engines: {node: '>= 10'} cpu: [x64] os: [freebsd] - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.6': - resolution: {integrity: sha512-SNSwkkim1myAgmnbHs4EjXsPL7rQbVGtjcok5EaIzkHkCAVK9QBQsWeP2Jm2/JJhq4wdx8tZB9Y7psMzHYWCkA==} + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7': + resolution: {integrity: sha512-OZqsGvpwOa13lVd1z6JVwQXadEobmesxQ4AxhrwRiPuE04quvZHWn/LnihMg7/XkN+dTioXp/VMu/p6A5eZP3g==} engines: {node: '>= 10'} cpu: [arm] os: [linux] - '@tailwindcss/oxide-linux-arm64-gnu@4.0.6': - resolution: {integrity: sha512-tJ+mevtSDMQhKlwCCuhsFEFg058kBiSy4TkoeBG921EfrHKmexOaCyFKYhVXy4JtkaeeOcjJnCLasEeqml4i+Q==} + '@tailwindcss/oxide-linux-arm64-gnu@4.1.7': + resolution: {integrity: sha512-voMvBTnJSfKecJxGkoeAyW/2XRToLZ227LxswLAwKY7YslG/Xkw9/tJNH+3IVh5bdYzYE7DfiaPbRkSHFxY1xA==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-arm64-musl@4.0.6': - resolution: {integrity: sha512-IoArz1vfuTR4rALXMUXI/GWWfx2EaO4gFNtBNkDNOYhlTD4NVEwE45nbBoojYiTulajI4c2XH8UmVEVJTOJKxA==} + '@tailwindcss/oxide-linux-arm64-musl@4.1.7': + resolution: {integrity: sha512-PjGuNNmJeKHnP58M7XyjJyla8LPo+RmwHQpBI+W/OxqrwojyuCQ+GUtygu7jUqTEexejZHr/z3nBc/gTiXBj4A==} engines: {node: '>= 10'} cpu: [arm64] os: [linux] - '@tailwindcss/oxide-linux-x64-gnu@4.0.6': - resolution: {integrity: sha512-QtsUfLkEAeWAC3Owx9Kg+7JdzE+k9drPhwTAXbXugYB9RZUnEWWx5x3q/au6TvUYcL+n0RBqDEO2gucZRvRFgQ==} + '@tailwindcss/oxide-linux-x64-gnu@4.1.7': + resolution: {integrity: sha512-HMs+Va+ZR3gC3mLZE00gXxtBo3JoSQxtu9lobbZd+DmfkIxR54NO7Z+UQNPsa0P/ITn1TevtFxXTpsRU7qEvWg==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-linux-x64-musl@4.0.6': - resolution: {integrity: sha512-QthvJqIji2KlGNwLcK/PPYo7w1Wsi/8NK0wAtRGbv4eOPdZHkQ9KUk+oCoP20oPO7i2a6X1aBAFQEL7i08nNMA==} + '@tailwindcss/oxide-linux-x64-musl@4.1.7': + resolution: {integrity: sha512-MHZ6jyNlutdHH8rd+YTdr3QbXrHXqwIhHw9e7yXEBcQdluGwhpQY2Eku8UZK6ReLaWtQ4gijIv5QoM5eE+qlsA==} engines: {node: '>= 10'} cpu: [x64] os: [linux] - '@tailwindcss/oxide-win32-arm64-msvc@4.0.6': - resolution: {integrity: sha512-+oka+dYX8jy9iP00DJ9Y100XsqvbqR5s0yfMZJuPR1H/lDVtDfsZiSix1UFBQ3X1HWxoEEl6iXNJHWd56TocVw==} + '@tailwindcss/oxide-wasm32-wasi@4.1.7': + resolution: {integrity: sha512-ANaSKt74ZRzE2TvJmUcbFQ8zS201cIPxUDm5qez5rLEwWkie2SkGtA4P+GPTj+u8N6JbPrC8MtY8RmJA35Oo+A==} + engines: {node: '>=14.0.0'} + cpu: [wasm32] + bundledDependencies: + - '@napi-rs/wasm-runtime' + - '@emnapi/core' + - '@emnapi/runtime' + - '@tybys/wasm-util' + - '@emnapi/wasi-threads' + - tslib + + '@tailwindcss/oxide-win32-arm64-msvc@4.1.7': + resolution: {integrity: sha512-HUiSiXQ9gLJBAPCMVRk2RT1ZrBjto7WvqsPBwUrNK2BcdSxMnk19h4pjZjI7zgPhDxlAbJSumTC4ljeA9y0tEw==} engines: {node: '>= 10'} cpu: [arm64] os: [win32] - '@tailwindcss/oxide-win32-x64-msvc@4.0.6': - resolution: {integrity: sha512-+o+juAkik4p8Ue/0LiflQXPmVatl6Av3LEZXpBTfg4qkMIbZdhCGWFzHdt2NjoMiLOJCFDddoV6GYaimvK1Olw==} + '@tailwindcss/oxide-win32-x64-msvc@4.1.7': + resolution: {integrity: sha512-rYHGmvoHiLJ8hWucSfSOEmdCBIGZIq7SpkPRSqLsH2Ab2YUNgKeAPT1Fi2cx3+hnYOrAb0jp9cRyode3bBW4mQ==} engines: {node: '>= 10'} cpu: [x64] os: [win32] - '@tailwindcss/oxide@4.0.6': - resolution: {integrity: sha512-lVyKV2y58UE9CeKVcYykULe9QaE1dtKdxDEdrTPIdbzRgBk6bdxHNAoDqvcqXbIGXubn3VOl1O/CFF77v/EqSA==} + '@tailwindcss/oxide@4.1.7': + resolution: {integrity: sha512-5SF95Ctm9DFiUyjUPnDGkoKItPX/k+xifcQhcqX5RA85m50jw1pT/KzjdvlqxRja45Y52nR4MR9fD1JYd7f8NQ==} engines: {node: '>= 10'} - '@tailwindcss/postcss@4.0.6': - resolution: {integrity: sha512-noTaGPHjGCXTCc487TWnfAEN0VMjqDAecssWDOsfxV2hFrcZR0AHthX7IdY/0xHTg/EtpmIPdssddlZ5/B7JnQ==} + '@tailwindcss/postcss@4.1.7': + resolution: {integrity: sha512-88g3qmNZn7jDgrrcp3ZXEQfp9CVox7xjP1HN2TFKI03CltPVd/c61ydn5qJJL8FYunn0OqBaW5HNUga0kmPVvw==} '@tailwindcss/typography@0.5.16': resolution: {integrity: sha512-0wDLwCVF5V3x3b1SGXPCDcdsbDHMBe+lkFzBRaHeLvNi+nrrnZ1lA18u+OTWO8iSWU2GxUOCvlXtDuqftc1oiA==} @@ -246,8 +268,8 @@ packages: resolution: {integrity: sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==} engines: {node: '>= 8'} - autoprefixer@10.4.20: - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -261,18 +283,22 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + browserslist@4.24.5: + resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true - caniuse-lite@1.0.30001699: - resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} + caniuse-lite@1.0.30001718: + resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} chokidar@3.6.0: resolution: {integrity: sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==} engines: {node: '>= 8.10.0'} + chownr@3.0.0: + resolution: {integrity: sha512-+IxzY9BZOQd/XuYPRmrvEVjF/nqj5kgT4kEq7VofrDoM1MxoRjEWkrCC3EtLi59TVawxTAn+orJwFQcrqEN1+g==} + engines: {node: '>=18'} + cliui@8.0.1: resolution: {integrity: sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==} engines: {node: '>=12'} @@ -289,17 +315,21 @@ packages: engines: {node: '>=4'} hasBin: true - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} + dependency-graph@1.0.0: + resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} + engines: {node: '>=4'} detect-libc@1.0.3: resolution: {integrity: sha512-pGjwhsmsp4kL2RTz08wcOlGN83otlqHeD/Z5T8GXZB+/YcpQ/dgo+lbU8ZsGxV0HIvqqxo9l7mqYwyYMD9bKDg==} engines: {node: '>=0.10'} hasBin: true - electron-to-chromium@1.5.101: - resolution: {integrity: sha512-L0ISiQrP/56Acgu4/i/kfPwWSgrzYZUnQrC0+QPFuhqlLP1Ir7qzPPDVS9BcKIyWTRU8+o6CC8dKw38tSWhYIA==} + detect-libc@2.0.4: + resolution: {integrity: sha512-3UDv+G9CsCKO1WKMGw9fwq/SWJYbI0c5Y7LU1AXYoDdbhE2AHQ6N6Nb34sG8Fj7T5APy8qXDCKuuIHd1BR0tVA==} + engines: {node: '>=8'} + + electron-to-chromium@1.5.155: + resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} @@ -312,12 +342,13 @@ packages: resolution: {integrity: sha512-WUj2qlxaQtO4g6Pq5c29GTcWGDyd8itL8zTlipgECz3JesAiiOKotd8JU6otB3PACgG6xkJUyVhboMS+bje/jA==} engines: {node: '>=6'} - fast-glob@3.3.3: - resolution: {integrity: sha512-7MptL8U0cqcFdzIzwOTHoilX9x5BrNqye7Z/LuC7kCMRio1EMSyqRK3BEAUD7sXRq4iT4AzTVuZdhgQ2TCvYLg==} - engines: {node: '>=8.6.0'} - - fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fdir@6.4.4: + resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true fill-range@7.1.1: resolution: {integrity: sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==} @@ -342,18 +373,10 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - glob-parent@5.1.2: resolution: {integrity: sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==} engines: {node: '>= 6'} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - graceful-fs@4.2.11: resolution: {integrity: sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==} @@ -361,10 +384,6 @@ packages: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} - ignore@7.0.3: - resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} - engines: {node: '>= 4'} - is-binary-path@2.1.0: resolution: {integrity: sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==} engines: {node: '>=8'} @@ -402,68 +421,68 @@ packages: jsonfile@6.1.0: resolution: {integrity: sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ==} - lightningcss-darwin-arm64@1.29.1: - resolution: {integrity: sha512-HtR5XJ5A0lvCqYAoSv2QdZZyoHNttBpa5EP9aNuzBQeKGfbyH5+UipLWvVzpP4Uml5ej4BYs5I9Lco9u1fECqw==} + lightningcss-darwin-arm64@1.30.1: + resolution: {integrity: sha512-c8JK7hyE65X1MHMN+Viq9n11RRC7hgin3HhYKhrMyaXflk5GVplZ60IxyoVtzILeKr+xAJwg6zK6sjTBJ0FKYQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [darwin] - lightningcss-darwin-x64@1.29.1: - resolution: {integrity: sha512-k33G9IzKUpHy/J/3+9MCO4e+PzaFblsgBjSGlpAaFikeBFm8B/CkO3cKU9oI4g+fjS2KlkLM/Bza9K/aw8wsNA==} + lightningcss-darwin-x64@1.30.1: + resolution: {integrity: sha512-k1EvjakfumAQoTfcXUcHQZhSpLlkAuEkdMBsI/ivWw9hL+7FtilQc0Cy3hrx0AAQrVtQAbMI7YjCgYgvn37PzA==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [darwin] - lightningcss-freebsd-x64@1.29.1: - resolution: {integrity: sha512-0SUW22fv/8kln2LnIdOCmSuXnxgxVC276W5KLTwoehiO0hxkacBxjHOL5EtHD8BAXg2BvuhsJPmVMasvby3LiQ==} + lightningcss-freebsd-x64@1.30.1: + resolution: {integrity: sha512-kmW6UGCGg2PcyUE59K5r0kWfKPAVy4SltVeut+umLCFoJ53RdCUWxcRDzO1eTaxf/7Q2H7LTquFHPL5R+Gjyig==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [freebsd] - lightningcss-linux-arm-gnueabihf@1.29.1: - resolution: {integrity: sha512-sD32pFvlR0kDlqsOZmYqH/68SqUMPNj+0pucGxToXZi4XZgZmqeX/NkxNKCPsswAXU3UeYgDSpGhu05eAufjDg==} + lightningcss-linux-arm-gnueabihf@1.30.1: + resolution: {integrity: sha512-MjxUShl1v8pit+6D/zSPq9S9dQ2NPFSQwGvxBCYaBYLPlCWuPh9/t1MRS8iUaR8i+a6w7aps+B4N0S1TYP/R+Q==} engines: {node: '>= 12.0.0'} cpu: [arm] os: [linux] - lightningcss-linux-arm64-gnu@1.29.1: - resolution: {integrity: sha512-0+vClRIZ6mmJl/dxGuRsE197o1HDEeeRk6nzycSy2GofC2JsY4ifCRnvUWf/CUBQmlrvMzt6SMQNMSEu22csWQ==} + lightningcss-linux-arm64-gnu@1.30.1: + resolution: {integrity: sha512-gB72maP8rmrKsnKYy8XUuXi/4OctJiuQjcuqWNlJQ6jZiWqtPvqFziskH3hnajfvKB27ynbVCucKSm2rkQp4Bw==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-arm64-musl@1.29.1: - resolution: {integrity: sha512-UKMFrG4rL/uHNgelBsDwJcBqVpzNJbzsKkbI3Ja5fg00sgQnHw/VrzUTEc4jhZ+AN2BvQYz/tkHu4vt1kLuJyw==} + lightningcss-linux-arm64-musl@1.30.1: + resolution: {integrity: sha512-jmUQVx4331m6LIX+0wUhBbmMX7TCfjF5FoOH6SD1CttzuYlGNVpA7QnrmLxrsub43ClTINfGSYyHe2HWeLl5CQ==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [linux] - lightningcss-linux-x64-gnu@1.29.1: - resolution: {integrity: sha512-u1S+xdODy/eEtjADqirA774y3jLcm8RPtYztwReEXoZKdzgsHYPl0s5V52Tst+GKzqjebkULT86XMSxejzfISw==} + lightningcss-linux-x64-gnu@1.30.1: + resolution: {integrity: sha512-piWx3z4wN8J8z3+O5kO74+yr6ze/dKmPnI7vLqfSqI8bccaTGY5xiSGVIJBDd5K5BHlvVLpUB3S2YCfelyJ1bw==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-linux-x64-musl@1.29.1: - resolution: {integrity: sha512-L0Tx0DtaNUTzXv0lbGCLB/c/qEADanHbu4QdcNOXLIe1i8i22rZRpbT3gpWYsCh9aSL9zFujY/WmEXIatWvXbw==} + lightningcss-linux-x64-musl@1.30.1: + resolution: {integrity: sha512-rRomAK7eIkL+tHY0YPxbc5Dra2gXlI63HL+v1Pdi1a3sC+tJTcFrHX+E86sulgAXeI7rSzDYhPSeHHjqFhqfeQ==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [linux] - lightningcss-win32-arm64-msvc@1.29.1: - resolution: {integrity: sha512-QoOVnkIEFfbW4xPi+dpdft/zAKmgLgsRHfJalEPYuJDOWf7cLQzYg0DEh8/sn737FaeMJxHZRc1oBreiwZCjog==} + lightningcss-win32-arm64-msvc@1.30.1: + resolution: {integrity: sha512-mSL4rqPi4iXq5YVqzSsJgMVFENoa4nGTT/GjO2c0Yl9OuQfPsIfncvLrEW6RbbB24WtZ3xP/2CCmI3tNkNV4oA==} engines: {node: '>= 12.0.0'} cpu: [arm64] os: [win32] - lightningcss-win32-x64-msvc@1.29.1: - resolution: {integrity: sha512-NygcbThNBe4JElP+olyTI/doBNGJvLs3bFCRPdvuCcxZCcCZ71B858IHpdm7L1btZex0FvCmM17FK98Y9MRy1Q==} + lightningcss-win32-x64-msvc@1.30.1: + resolution: {integrity: sha512-PVqXh48wh4T53F/1CCu8PIPCxLzWyCnn/9T5W1Jpmdy5h9Cwd+0YQS6/LwhHXSafuc61/xg9Lv5OrCby6a++jg==} engines: {node: '>= 12.0.0'} cpu: [x64] os: [win32] - lightningcss@1.29.1: - resolution: {integrity: sha512-FmGoeD4S05ewj+AkhTY+D+myDvXI6eL27FjHIjoyUkO/uw7WZD1fBVs0QxeYWa7E17CUHJaYX/RUGISCtcrG4Q==} + lightningcss@1.30.1: + resolution: {integrity: sha512-xi6IyHML+c9+Q3W0S4fCQJOym42pyurFiJUHEcEyHS0CeKzia4yZDEsLlqOFykxOdHpNy0NmvVO31vcSqAxJCg==} engines: {node: '>= 12.0.0'} lilconfig@3.1.3: @@ -479,20 +498,32 @@ packages: lodash.merge@4.6.2: resolution: {integrity: sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==} - merge2@1.4.1: - resolution: {integrity: sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==} - engines: {node: '>= 8'} + magic-string@0.30.17: + resolution: {integrity: sha512-sNPKHvyjVf7gyjwS4xGTaW/mCnF8wnjtifKBEhxfZ7E/S8tQ0rssrwGNn6q8JH/ohItJfSQp9mBtQYuTlH5QnA==} micromatch@4.0.8: resolution: {integrity: sha512-PXwfBhYu0hBCPw8Dn0E+WDYb7af3dSLVWKi3HGv84IdF4TyFoC0ysxFd0Goxw7nSv4T/PzEJQxsYsEiFCKo2BA==} engines: {node: '>=8.6'} + minipass@7.1.2: + resolution: {integrity: sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==} + engines: {node: '>=16 || 14 >=14.17'} + + minizlib@3.0.2: + resolution: {integrity: sha512-oG62iEk+CYt5Xj2YqI5Xi9xWUeZhDI8jjQmC5oThVH5JGCTgIjr7ciJDzC7MBzYd//WvR1OTmP5Q38Q8ShQtVA==} + engines: {node: '>= 18'} + + mkdirp@3.0.1: + resolution: {integrity: sha512-+NsyUUAZDmo6YVHzL/stxSu3t9YS1iljliy3BSDrXJ/dkn1KYdmtZODGGjLcc9XLgVVpH4KshHB8XmZgMhaBXg==} + engines: {node: '>=10'} + hasBin: true + mri@1.2.0: resolution: {integrity: sha512-tzzskb3bG8LvYGFF/mDTpq3jpI6Q9wc3LEmBaghu+DdCssd1FakN7Bc0hVNmEyGq1bq3RgfkCb3cmQLpNPOroA==} engines: {node: '>=4'} - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -513,10 +544,6 @@ packages: path-parse@1.0.7: resolution: {integrity: sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==} - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -524,12 +551,16 @@ packages: resolution: {integrity: sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==} engines: {node: '>=8.6'} + picomatch@4.0.2: + resolution: {integrity: sha512-M7BAV6Rlcy5u+m6oPhAPFgJTzAioX/6B0DxyvDlo9l8+T3nLKbrczg2WLUyzd45L8RqfUMyGPzekbMvX2Ldkwg==} + engines: {node: '>=12'} + pify@2.3.0: resolution: {integrity: sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==} engines: {node: '>=0.10.0'} - postcss-cli@11.0.0: - resolution: {integrity: sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==} + postcss-cli@11.0.1: + resolution: {integrity: sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -597,17 +628,14 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} pretty-hrtime@1.0.3: resolution: {integrity: sha512-66hKPCr+72mlfiSjlEB1+45IjXSqvVAIy6mocupoww4tBFE9R9IhwwUGoI4G++Tc9Aq+2rxOt0RFU6gPcrte0A==} engines: {node: '>= 0.8'} - queue-microtask@1.2.3: - resolution: {integrity: sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==} - read-cache@1.0.0: resolution: {integrity: sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==} @@ -624,13 +652,6 @@ packages: engines: {node: '>= 0.4'} hasBin: true - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} - engines: {iojs: '>=1.0.0', node: '>=0.10.0'} - - run-parallel@1.2.0: - resolution: {integrity: sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==} - slash@5.1.0: resolution: {integrity: sha512-ZA6oR3T/pEyuqwMgAKT0/hAv8oAXckzbkmR0UkUosQ+Mc4RxGoJkRmwHgHufaenlyAgE1Mxgpdcrf75y6XcnDg==} engines: {node: '>=14.16'} @@ -651,30 +672,34 @@ packages: resolution: {integrity: sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==} engines: {node: '>= 0.4'} - tailwindcss@4.0.6: - resolution: {integrity: sha512-mysewHYJKaXgNOW6pp5xon/emCsfAMnO8WMaGKZZ35fomnR/T5gYnRg2/yRTTrtXiEl1tiVkeRt0eMO6HxEZqw==} + tailwindcss@4.1.7: + resolution: {integrity: sha512-kr1o/ErIdNhTz8uzAYL7TpaUuzKIE6QPQ4qmSdxnoX/lo+5wmUHQA6h3L5yIqEImSRnAAURDirLu/BgiXGPAhg==} tapable@2.2.1: resolution: {integrity: sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==} engines: {node: '>=6'} + tar@7.4.3: + resolution: {integrity: sha512-5S7Va8hKfV7W5U6g3aYxXmlPoZVAwUMy9AOKyF2fVuZa2UD3qZjg578OrLRt8PcNN1PleVaL/5/yYATNL0ICUw==} + engines: {node: '>=18'} + thenby@1.3.4: resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} + tinyglobby@0.2.13: + resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + engines: {node: '>=12.0.0'} + to-regex-range@5.0.1: resolution: {integrity: sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==} engines: {node: '>=8.0'} - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - universalify@2.0.1: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - update-browserslist-db@1.1.2: - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -690,9 +715,13 @@ packages: resolution: {integrity: sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==} engines: {node: '>=10'} - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} + yallist@5.0.0: + resolution: {integrity: sha512-YgvUTfwqyc7UXVMrB+SImsVYSmTS8X/tSrtdNZMImM+n7+QTriRXyXim0mBrTXNeqzVF0KWGgHPeiyViFFrNDw==} + engines: {node: '>=18'} + + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@21.1.1: @@ -707,17 +736,31 @@ snapshots: '@alloc/quick-lru@5.2.0': {} - '@nodelib/fs.scandir@2.1.5': + '@ampproject/remapping@2.3.0': dependencies: - '@nodelib/fs.stat': 2.0.5 - run-parallel: 1.2.0 + '@jridgewell/gen-mapping': 0.3.8 + '@jridgewell/trace-mapping': 0.3.25 - '@nodelib/fs.stat@2.0.5': {} + '@isaacs/fs-minipass@4.0.1': + dependencies: + minipass: 7.1.2 - '@nodelib/fs.walk@1.2.8': + '@jridgewell/gen-mapping@0.3.8': dependencies: - '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.0 + '@jridgewell/set-array': 1.2.1 + '@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.5.0': {} + + '@jridgewell/trace-mapping@0.3.25': + dependencies: + '@jridgewell/resolve-uri': 3.1.2 + '@jridgewell/sourcemap-codec': 1.5.0 '@parcel/watcher-android-arm64@2.5.1': optional: true @@ -779,88 +822,95 @@ snapshots: '@parcel/watcher-win32-ia32': 2.5.1 '@parcel/watcher-win32-x64': 2.5.1 - '@sindresorhus/merge-streams@2.3.0': {} - - '@tailwindcss/cli@4.0.6': + '@tailwindcss/cli@4.1.7': dependencies: '@parcel/watcher': 2.5.1 - '@tailwindcss/node': 4.0.6 - '@tailwindcss/oxide': 4.0.6 + '@tailwindcss/node': 4.1.7 + '@tailwindcss/oxide': 4.1.7 enhanced-resolve: 5.18.1 - lightningcss: 1.29.1 mri: 1.2.0 picocolors: 1.1.1 - tailwindcss: 4.0.6 + tailwindcss: 4.1.7 - '@tailwindcss/node@4.0.6': + '@tailwindcss/node@4.1.7': dependencies: + '@ampproject/remapping': 2.3.0 enhanced-resolve: 5.18.1 jiti: 2.4.2 - tailwindcss: 4.0.6 + lightningcss: 1.30.1 + magic-string: 0.30.17 + source-map-js: 1.2.1 + tailwindcss: 4.1.7 + + '@tailwindcss/oxide-android-arm64@4.1.7': + optional: true - '@tailwindcss/oxide-android-arm64@4.0.6': + '@tailwindcss/oxide-darwin-arm64@4.1.7': optional: true - '@tailwindcss/oxide-darwin-arm64@4.0.6': + '@tailwindcss/oxide-darwin-x64@4.1.7': optional: true - '@tailwindcss/oxide-darwin-x64@4.0.6': + '@tailwindcss/oxide-freebsd-x64@4.1.7': optional: true - '@tailwindcss/oxide-freebsd-x64@4.0.6': + '@tailwindcss/oxide-linux-arm-gnueabihf@4.1.7': optional: true - '@tailwindcss/oxide-linux-arm-gnueabihf@4.0.6': + '@tailwindcss/oxide-linux-arm64-gnu@4.1.7': optional: true - '@tailwindcss/oxide-linux-arm64-gnu@4.0.6': + '@tailwindcss/oxide-linux-arm64-musl@4.1.7': optional: true - '@tailwindcss/oxide-linux-arm64-musl@4.0.6': + '@tailwindcss/oxide-linux-x64-gnu@4.1.7': optional: true - '@tailwindcss/oxide-linux-x64-gnu@4.0.6': + '@tailwindcss/oxide-linux-x64-musl@4.1.7': optional: true - '@tailwindcss/oxide-linux-x64-musl@4.0.6': + '@tailwindcss/oxide-wasm32-wasi@4.1.7': optional: true - '@tailwindcss/oxide-win32-arm64-msvc@4.0.6': + '@tailwindcss/oxide-win32-arm64-msvc@4.1.7': optional: true - '@tailwindcss/oxide-win32-x64-msvc@4.0.6': + '@tailwindcss/oxide-win32-x64-msvc@4.1.7': optional: true - '@tailwindcss/oxide@4.0.6': + '@tailwindcss/oxide@4.1.7': + dependencies: + detect-libc: 2.0.4 + tar: 7.4.3 optionalDependencies: - '@tailwindcss/oxide-android-arm64': 4.0.6 - '@tailwindcss/oxide-darwin-arm64': 4.0.6 - '@tailwindcss/oxide-darwin-x64': 4.0.6 - '@tailwindcss/oxide-freebsd-x64': 4.0.6 - '@tailwindcss/oxide-linux-arm-gnueabihf': 4.0.6 - '@tailwindcss/oxide-linux-arm64-gnu': 4.0.6 - '@tailwindcss/oxide-linux-arm64-musl': 4.0.6 - '@tailwindcss/oxide-linux-x64-gnu': 4.0.6 - '@tailwindcss/oxide-linux-x64-musl': 4.0.6 - '@tailwindcss/oxide-win32-arm64-msvc': 4.0.6 - '@tailwindcss/oxide-win32-x64-msvc': 4.0.6 - - '@tailwindcss/postcss@4.0.6': + '@tailwindcss/oxide-android-arm64': 4.1.7 + '@tailwindcss/oxide-darwin-arm64': 4.1.7 + '@tailwindcss/oxide-darwin-x64': 4.1.7 + '@tailwindcss/oxide-freebsd-x64': 4.1.7 + '@tailwindcss/oxide-linux-arm-gnueabihf': 4.1.7 + '@tailwindcss/oxide-linux-arm64-gnu': 4.1.7 + '@tailwindcss/oxide-linux-arm64-musl': 4.1.7 + '@tailwindcss/oxide-linux-x64-gnu': 4.1.7 + '@tailwindcss/oxide-linux-x64-musl': 4.1.7 + '@tailwindcss/oxide-wasm32-wasi': 4.1.7 + '@tailwindcss/oxide-win32-arm64-msvc': 4.1.7 + '@tailwindcss/oxide-win32-x64-msvc': 4.1.7 + + '@tailwindcss/postcss@4.1.7': dependencies: '@alloc/quick-lru': 5.2.0 - '@tailwindcss/node': 4.0.6 - '@tailwindcss/oxide': 4.0.6 - lightningcss: 1.29.1 - postcss: 8.5.2 - tailwindcss: 4.0.6 + '@tailwindcss/node': 4.1.7 + '@tailwindcss/oxide': 4.1.7 + postcss: 8.5.3 + tailwindcss: 4.1.7 - '@tailwindcss/typography@0.5.16(tailwindcss@4.0.6)': + '@tailwindcss/typography@0.5.16(tailwindcss@4.1.7)': dependencies: lodash.castarray: 4.4.0 lodash.isplainobject: 4.0.6 lodash.merge: 4.6.2 postcss-selector-parser: 6.0.10 - tailwindcss: 4.0.6 + tailwindcss: 4.1.7 ansi-regex@5.0.1: {} @@ -873,14 +923,14 @@ snapshots: normalize-path: 3.0.0 picomatch: 2.3.1 - autoprefixer@10.4.20(postcss@8.5.2): + autoprefixer@10.4.21(postcss@8.5.3): dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001699 + browserslist: 4.24.5 + caniuse-lite: 1.0.30001718 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.2 + postcss: 8.5.3 postcss-value-parser: 4.2.0 binary-extensions@2.3.0: {} @@ -889,14 +939,14 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.4: + browserslist@4.24.5: dependencies: - caniuse-lite: 1.0.30001699 - electron-to-chromium: 1.5.101 + caniuse-lite: 1.0.30001718 + electron-to-chromium: 1.5.155 node-releases: 2.0.19 - update-browserslist-db: 1.1.2(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.24.5) - caniuse-lite@1.0.30001699: {} + caniuse-lite@1.0.30001718: {} chokidar@3.6.0: dependencies: @@ -910,6 +960,8 @@ snapshots: optionalDependencies: fsevents: 2.3.3 + chownr@3.0.0: {} + cliui@8.0.1: dependencies: string-width: 4.2.3 @@ -924,11 +976,13 @@ snapshots: cssesc@3.0.0: {} - dependency-graph@0.11.0: {} + dependency-graph@1.0.0: {} detect-libc@1.0.3: {} - electron-to-chromium@1.5.101: {} + detect-libc@2.0.4: {} + + electron-to-chromium@1.5.155: {} emoji-regex@8.0.0: {} @@ -939,17 +993,9 @@ snapshots: escalade@3.2.0: {} - fast-glob@3.3.3: - dependencies: - '@nodelib/fs.stat': 2.0.5 - '@nodelib/fs.walk': 1.2.8 - glob-parent: 5.1.2 - merge2: 1.4.1 - micromatch: 4.0.8 - - fastq@1.19.0: - dependencies: - reusify: 1.0.4 + fdir@6.4.4(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 fill-range@7.1.1: dependencies: @@ -970,29 +1016,16 @@ snapshots: get-caller-file@2.0.5: {} - get-stdin@9.0.0: {} - glob-parent@5.1.2: dependencies: is-glob: 4.0.3 - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.3 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - graceful-fs@4.2.11: {} hasown@2.0.2: dependencies: function-bind: 1.1.2 - ignore@7.0.3: {} - is-binary-path@2.1.0: dependencies: binary-extensions: 2.3.0 @@ -1023,50 +1056,50 @@ snapshots: optionalDependencies: graceful-fs: 4.2.11 - lightningcss-darwin-arm64@1.29.1: + lightningcss-darwin-arm64@1.30.1: optional: true - lightningcss-darwin-x64@1.29.1: + lightningcss-darwin-x64@1.30.1: optional: true - lightningcss-freebsd-x64@1.29.1: + lightningcss-freebsd-x64@1.30.1: optional: true - lightningcss-linux-arm-gnueabihf@1.29.1: + lightningcss-linux-arm-gnueabihf@1.30.1: optional: true - lightningcss-linux-arm64-gnu@1.29.1: + lightningcss-linux-arm64-gnu@1.30.1: optional: true - lightningcss-linux-arm64-musl@1.29.1: + lightningcss-linux-arm64-musl@1.30.1: optional: true - lightningcss-linux-x64-gnu@1.29.1: + lightningcss-linux-x64-gnu@1.30.1: optional: true - lightningcss-linux-x64-musl@1.29.1: + lightningcss-linux-x64-musl@1.30.1: optional: true - lightningcss-win32-arm64-msvc@1.29.1: + lightningcss-win32-arm64-msvc@1.30.1: optional: true - lightningcss-win32-x64-msvc@1.29.1: + lightningcss-win32-x64-msvc@1.30.1: optional: true - lightningcss@1.29.1: + lightningcss@1.30.1: dependencies: - detect-libc: 1.0.3 + detect-libc: 2.0.4 optionalDependencies: - lightningcss-darwin-arm64: 1.29.1 - lightningcss-darwin-x64: 1.29.1 - lightningcss-freebsd-x64: 1.29.1 - lightningcss-linux-arm-gnueabihf: 1.29.1 - lightningcss-linux-arm64-gnu: 1.29.1 - lightningcss-linux-arm64-musl: 1.29.1 - lightningcss-linux-x64-gnu: 1.29.1 - lightningcss-linux-x64-musl: 1.29.1 - lightningcss-win32-arm64-msvc: 1.29.1 - lightningcss-win32-x64-msvc: 1.29.1 + lightningcss-darwin-arm64: 1.30.1 + lightningcss-darwin-x64: 1.30.1 + lightningcss-freebsd-x64: 1.30.1 + lightningcss-linux-arm-gnueabihf: 1.30.1 + lightningcss-linux-arm64-gnu: 1.30.1 + lightningcss-linux-arm64-musl: 1.30.1 + lightningcss-linux-x64-gnu: 1.30.1 + lightningcss-linux-x64-musl: 1.30.1 + lightningcss-win32-arm64-msvc: 1.30.1 + lightningcss-win32-x64-msvc: 1.30.1 lilconfig@3.1.3: {} @@ -1076,16 +1109,26 @@ snapshots: lodash.merge@4.6.2: {} - merge2@1.4.1: {} + magic-string@0.30.17: + dependencies: + '@jridgewell/sourcemap-codec': 1.5.0 micromatch@4.0.8: dependencies: braces: 3.0.3 picomatch: 2.3.1 + minipass@7.1.2: {} + + minizlib@3.0.2: + dependencies: + minipass: 7.1.2 + + mkdirp@3.0.1: {} + mri@1.2.0: {} - nanoid@3.3.8: {} + nanoid@3.3.11: {} node-addon-api@7.1.1: {} @@ -1097,65 +1140,64 @@ snapshots: path-parse@1.0.7: {} - path-type@6.0.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} + picomatch@4.0.2: {} + pify@2.3.0: {} - postcss-cli@11.0.0(jiti@2.4.2)(postcss@8.5.2): + postcss-cli@11.0.1(jiti@2.4.2)(postcss@8.5.3): dependencies: chokidar: 3.6.0 - dependency-graph: 0.11.0 + dependency-graph: 1.0.0 fs-extra: 11.3.0 - get-stdin: 9.0.0 - globby: 14.1.0 picocolors: 1.1.1 - postcss: 8.5.2 - postcss-load-config: 5.1.0(jiti@2.4.2)(postcss@8.5.2) - postcss-reporter: 7.1.0(postcss@8.5.2) + postcss: 8.5.3 + postcss-load-config: 5.1.0(jiti@2.4.2)(postcss@8.5.3) + postcss-reporter: 7.1.0(postcss@8.5.3) pretty-hrtime: 1.0.3 read-cache: 1.0.0 slash: 5.1.0 + tinyglobby: 0.2.13 yargs: 17.7.2 transitivePeerDependencies: - jiti - tsx - postcss-import@16.1.0(postcss@8.5.2): + postcss-import@16.1.0(postcss@8.5.3): dependencies: - postcss: 8.5.2 + postcss: 8.5.3 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.10 - postcss-load-config@5.1.0(jiti@2.4.2)(postcss@8.5.2): + postcss-load-config@5.1.0(jiti@2.4.2)(postcss@8.5.3): dependencies: lilconfig: 3.1.3 - yaml: 2.7.0 + yaml: 2.8.0 optionalDependencies: jiti: 2.4.2 - postcss: 8.5.2 + postcss: 8.5.3 - postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.2)(yaml@2.7.0): + postcss-load-config@6.0.1(jiti@2.4.2)(postcss@8.5.3)(yaml@2.8.0): dependencies: lilconfig: 3.1.3 optionalDependencies: jiti: 2.4.2 - postcss: 8.5.2 - yaml: 2.7.0 + postcss: 8.5.3 + yaml: 2.8.0 - postcss-nested@7.0.2(postcss@8.5.2): + postcss-nested@7.0.2(postcss@8.5.3): dependencies: - postcss: 8.5.2 + postcss: 8.5.3 postcss-selector-parser: 7.1.0 - postcss-reporter@7.1.0(postcss@8.5.2): + postcss-reporter@7.1.0(postcss@8.5.3): dependencies: picocolors: 1.1.1 - postcss: 8.5.2 + postcss: 8.5.3 thenby: 1.3.4 postcss-selector-parser@6.0.10: @@ -1170,16 +1212,14 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.2: + postcss@8.5.3: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 pretty-hrtime@1.0.3: {} - queue-microtask@1.2.3: {} - read-cache@1.0.0: dependencies: pify: 2.3.0 @@ -1196,12 +1236,6 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - reusify@1.0.4: {} - - run-parallel@1.2.0: - dependencies: - queue-microtask: 1.2.3 - slash@5.1.0: {} source-map-js@1.2.1: {} @@ -1218,23 +1252,35 @@ snapshots: supports-preserve-symlinks-flag@1.0.0: {} - tailwindcss@4.0.6: {} + tailwindcss@4.1.7: {} tapable@2.2.1: {} + tar@7.4.3: + dependencies: + '@isaacs/fs-minipass': 4.0.1 + chownr: 3.0.0 + minipass: 7.1.2 + minizlib: 3.0.2 + mkdirp: 3.0.1 + yallist: 5.0.0 + thenby@1.3.4: {} + tinyglobby@0.2.13: + dependencies: + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + to-regex-range@5.0.1: dependencies: is-number: 7.0.0 - unicorn-magic@0.3.0: {} - universalify@2.0.1: {} - update-browserslist-db@1.1.2(browserslist@4.24.4): + update-browserslist-db@1.1.3(browserslist@4.24.5): dependencies: - browserslist: 4.24.4 + browserslist: 4.24.5 escalade: 3.2.0 picocolors: 1.1.1 @@ -1248,7 +1294,9 @@ snapshots: y18n@5.0.8: {} - yaml@2.7.0: {} + yallist@5.0.0: {} + + yaml@2.8.0: {} yargs-parser@21.1.1: {} diff --git a/package.json b/package.json index 8b8db617..1d693a4d 100644 --- a/package.json +++ b/package.json @@ -35,15 +35,15 @@ "jquery": "^3" }, "devDependencies": { - "@babel/cli": "^7.26.4", - "@babel/core": "^7.26.9", - "@babel/preset-env": "^7.26.9", - "@babel/preset-typescript": "^7.26.0", - "@eslint/js": "^9.20.0", + "@babel/cli": "^7.27.2", + "@babel/core": "^7.27.1", + "@babel/preset-env": "^7.27.2", + "@babel/preset-typescript": "^7.27.1", + "@eslint/js": "^9.27.0", "@jest/globals": "^29.7.0", - "@playwright/test": "^1.50.1", + "@playwright/test": "^1.52.0", "@rollup/plugin-babel": "^6.0.4", - "@rollup/plugin-node-resolve": "^16.0.0", + "@rollup/plugin-node-resolve": "^16.0.1", "@rollup/plugin-terser": "^0.4.4", "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", @@ -52,38 +52,37 @@ "@types/jest": "^29.5.14", "@types/jest-axe": "^3.5.9", "@types/jquery": "^3.5.32", - "@types/node": "^22.13.4", - "autoprefixer": "^10.4.20", + "@types/node": "^22.15.21", + "autoprefixer": "^10.4.21", "babel-jest": "^29.7.0", "babel-plugin-istanbul": "^7.0.0", - "eslint": "^9.20.1", + "eslint": "^9.27.0", "eslint-plugin-import": "^2.31.0", "eslint-plugin-jest": "^28.11.0", "eslint-plugin-jest-dom": "^5.5.0", - "eslint-plugin-perfectionist": "^4.9.0", + "eslint-plugin-perfectionist": "^4.13.0", "eslint-plugin-playwright": "^2.2.0", - "eslint-plugin-testing-library": "^7.1.1", + "eslint-plugin-testing-library": "^7.2.1", "givens": "^1.3.9", - "graphql": "^16.10.0", "jest": "^29.7.0", - "jest-axe": "^9.0.0", - "jest-extended": "^4.0.2", + "jest-axe": "^10.0.0", + "jest-extended": "^5.0.3", "jest-fixed-jsdom": "^0.0.9", "jsdom-testing-mocks": "^1.13.1", "jsonfile": "^6.1.0", "lodash": "^4.17.21", - "msw": "^2.7.0", - "postcss": "^8.5.2", - "postcss-cli": "^11.0.0", + "msw": "^2.8.4", + "postcss": "^8.5.3", + "postcss-cli": "^11.0.1", "postcss-import": "^16.1.0", "postcss-load-config": "^6.0.1", "postcss-nested": "^7.0.2", - "prettier": "^3.5.1", - "rollup": "^4.34.7", + "prettier": "^3.5.3", + "rollup": "^4.41.1", "rollup-plugin-serve": "^3.0.0", "tslib": "^2.8.1", - "typescript": "^5.7.3", - "typescript-eslint": "^8.24.0" + "typescript": "^5.8.3", + "typescript-eslint": "^8.32.1" }, "pnpm": { "onlyBuiltDependencies": [ diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 4de8d46c..c792f239 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,35 +13,35 @@ importers: version: 3.7.1 devDependencies: '@babel/cli': - specifier: ^7.26.4 - version: 7.26.4(@babel/core@7.26.9) + specifier: ^7.27.2 + version: 7.27.2(@babel/core@7.27.1) '@babel/core': - specifier: ^7.26.9 - version: 7.26.9 + specifier: ^7.27.1 + version: 7.27.1 '@babel/preset-env': - specifier: ^7.26.9 - version: 7.26.9(@babel/core@7.26.9) + specifier: ^7.27.2 + version: 7.27.2(@babel/core@7.27.1) '@babel/preset-typescript': - specifier: ^7.26.0 - version: 7.26.0(@babel/core@7.26.9) + specifier: ^7.27.1 + version: 7.27.1(@babel/core@7.27.1) '@eslint/js': - specifier: ^9.20.0 - version: 9.20.0 + specifier: ^9.27.0 + version: 9.27.0 '@jest/globals': specifier: ^29.7.0 version: 29.7.0 '@playwright/test': - specifier: ^1.50.1 - version: 1.50.1 + specifier: ^1.52.0 + version: 1.52.0 '@rollup/plugin-babel': specifier: ^6.0.4 - version: 6.0.4(@babel/core@7.26.9)(@types/babel__core@7.20.5)(rollup@4.34.7) + version: 6.0.4(@babel/core@7.27.1)(@types/babel__core@7.20.5)(rollup@4.41.1) '@rollup/plugin-node-resolve': - specifier: ^16.0.0 - version: 16.0.0(rollup@4.34.7) + specifier: ^16.0.1 + version: 16.0.1(rollup@4.41.1) '@rollup/plugin-terser': specifier: ^0.4.4 - version: 0.4.4(rollup@4.34.7) + version: 0.4.4(rollup@4.41.1) '@testing-library/dom': specifier: ^10.4.0 version: 10.4.0 @@ -64,53 +64,50 @@ importers: specifier: ^3.5.32 version: 3.5.32 '@types/node': - specifier: ^22.13.4 - version: 22.13.4 + specifier: ^22.15.21 + version: 22.15.21 autoprefixer: - specifier: ^10.4.20 - version: 10.4.20(postcss@8.5.2) + specifier: ^10.4.21 + version: 10.4.21(postcss@8.5.3) babel-jest: specifier: ^29.7.0 - version: 29.7.0(@babel/core@7.26.9) + version: 29.7.0(@babel/core@7.27.1) babel-plugin-istanbul: specifier: ^7.0.0 version: 7.0.0 eslint: - specifier: ^9.20.1 - version: 9.20.1 + specifier: ^9.27.0 + version: 9.27.0 eslint-plugin-import: specifier: ^2.31.0 - version: 2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1) + version: 2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0) eslint-plugin-jest: specifier: ^28.11.0 - version: 28.11.0(@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(jest@29.7.0(@types/node@22.13.4))(typescript@5.7.3) + version: 28.11.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(jest@29.7.0(@types/node@22.15.21))(typescript@5.8.3) eslint-plugin-jest-dom: specifier: ^5.5.0 - version: 5.5.0(@testing-library/dom@10.4.0)(eslint@9.20.1) + version: 5.5.0(@testing-library/dom@10.4.0)(eslint@9.27.0) eslint-plugin-perfectionist: - specifier: ^4.9.0 - version: 4.9.0(eslint@9.20.1)(typescript@5.7.3) + specifier: ^4.13.0 + version: 4.13.0(eslint@9.27.0)(typescript@5.8.3) eslint-plugin-playwright: specifier: ^2.2.0 - version: 2.2.0(eslint@9.20.1) + version: 2.2.0(eslint@9.27.0) eslint-plugin-testing-library: - specifier: ^7.1.1 - version: 7.1.1(eslint@9.20.1)(typescript@5.7.3) + specifier: ^7.2.1 + version: 7.2.1(eslint@9.27.0)(typescript@5.8.3) givens: specifier: ^1.3.9 version: 1.3.9 - graphql: - specifier: ^16.10.0 - version: 16.10.0 jest: specifier: ^29.7.0 - version: 29.7.0(@types/node@22.13.4) + version: 29.7.0(@types/node@22.15.21) jest-axe: - specifier: ^9.0.0 - version: 9.0.0 + specifier: ^10.0.0 + version: 10.0.0 jest-extended: - specifier: ^4.0.2 - version: 4.0.2(jest@29.7.0(@types/node@22.13.4)) + specifier: ^5.0.3 + version: 5.0.3(jest@29.7.0(@types/node@22.15.21)) jest-fixed-jsdom: specifier: ^0.0.9 version: 0.0.9(jest-environment-jsdom@29.7.0) @@ -124,29 +121,29 @@ importers: specifier: ^4.17.21 version: 4.17.21 msw: - specifier: ^2.7.0 - version: 2.7.0(@types/node@22.13.4)(typescript@5.7.3) + specifier: ^2.8.4 + version: 2.8.4(@types/node@22.15.21)(typescript@5.8.3) postcss: - specifier: ^8.5.2 - version: 8.5.2 + specifier: ^8.5.3 + version: 8.5.3 postcss-cli: - specifier: ^11.0.0 - version: 11.0.0(postcss@8.5.2) + specifier: ^11.0.1 + version: 11.0.1(postcss@8.5.3) postcss-import: specifier: ^16.1.0 - version: 16.1.0(postcss@8.5.2) + version: 16.1.0(postcss@8.5.3) postcss-load-config: specifier: ^6.0.1 - version: 6.0.1(postcss@8.5.2)(yaml@2.7.0) + version: 6.0.1(postcss@8.5.3)(yaml@2.8.0) postcss-nested: specifier: ^7.0.2 - version: 7.0.2(postcss@8.5.2) + version: 7.0.2(postcss@8.5.3) prettier: - specifier: ^3.5.1 - version: 3.5.1 + specifier: ^3.5.3 + version: 3.5.3 rollup: - specifier: ^4.34.7 - version: 4.34.7 + specifier: ^4.41.1 + version: 4.41.1 rollup-plugin-serve: specifier: ^3.0.0 version: 3.0.0 @@ -154,158 +151,158 @@ importers: specifier: ^2.8.1 version: 2.8.1 typescript: - specifier: ^5.7.3 - version: 5.7.3 + specifier: ^5.8.3 + version: 5.8.3 typescript-eslint: - specifier: ^8.24.0 - version: 8.24.0(eslint@9.20.1)(typescript@5.7.3) + specifier: ^8.32.1 + version: 8.32.1(eslint@9.27.0)(typescript@5.8.3) packages: - '@adobe/css-tools@4.4.2': - resolution: {integrity: sha512-baYZExFpsdkBNuvGKTKWCwKH57HRZLVtycZS05WTQNVOiXVSeAki3nU35zlRbToeMW8aHlJfyS+1C4BOv27q0A==} + '@adobe/css-tools@4.4.3': + resolution: {integrity: sha512-VQKMkwriZbaOgVCby1UDY/LDk5fIjhQicCvVPFqfe+69fWaPWydbWJ3wRt59/YzIwda1I81loas3oCoHxnqvdA==} '@ampproject/remapping@2.3.0': resolution: {integrity: sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==} engines: {node: '>=6.0.0'} - '@babel/cli@7.26.4': - resolution: {integrity: sha512-+mORf3ezU3p3qr+82WvJSnQNE1GAYeoCfEv4fik6B5/2cvKZ75AX8oawWQdXtM9MmndooQj15Jr9kelRFWsuRw==} + '@babel/cli@7.27.2': + resolution: {integrity: sha512-cfd7DnGlhH6OIyuPSSj3vcfIdnbXukhAyKY8NaZrFadC7pXyL9mOL5WgjcptiEJLi5k3j8aYvLIVCzezrWTaiA==} engines: {node: '>=6.9.0'} hasBin: true peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/code-frame@7.26.2': - resolution: {integrity: sha512-RJlIHRueQgwWitWgF8OdFYGZX328Ax5BCemNGlqHfplnRT9ESi8JkFlvaVYbS+UubVY6dpv87Fs2u5M29iNFVQ==} + '@babel/code-frame@7.27.1': + resolution: {integrity: sha512-cjQ7ZlQ0Mv3b47hABuTevyTuYN4i+loJKGeV9flcCgIK37cCXRh+L1bd3iBHlynerhQ7BhCkn2BPbQUL+rGqFg==} engines: {node: '>=6.9.0'} - '@babel/compat-data@7.26.8': - resolution: {integrity: sha512-oH5UPLMWR3L2wEFLnFJ1TZXqHufiTKAiLfqw5zkhS4dKXLJ10yVztfil/twG8EDTA4F/tvVNw9nOl4ZMslB8rQ==} + '@babel/compat-data@7.27.2': + resolution: {integrity: sha512-TUtMJYRPyUb/9aU8f3K0mjmjf6M9N5Woshn2CS6nqJSeJtTtQcpLUXjGt9vbF8ZGff0El99sWkLgzwW3VXnxZQ==} engines: {node: '>=6.9.0'} - '@babel/core@7.26.9': - resolution: {integrity: sha512-lWBYIrF7qK5+GjY5Uy+/hEgp8OJWOD/rpy74GplYRhEauvbHDeFB8t5hPOZxCZ0Oxf4Cc36tK51/l3ymJysrKw==} + '@babel/core@7.27.1': + resolution: {integrity: sha512-IaaGWsQqfsQWVLqMn9OB92MNN7zukfVA4s7KKAI0KfrrDsZ0yhi5uV4baBuLuN7n3vsZpwP8asPPcVwApxvjBQ==} engines: {node: '>=6.9.0'} - '@babel/generator@7.26.9': - resolution: {integrity: sha512-kEWdzjOAUMW4hAyrzJ0ZaTOu9OmpyDIQicIh0zg0EEcEkYXZb2TjtBhnHi2ViX7PKwZqF4xwqfAm299/QMP3lg==} + '@babel/generator@7.27.1': + resolution: {integrity: sha512-UnJfnIpc/+JO0/+KRVQNGU+y5taA5vCbwN8+azkX6beii/ZF+enZJSOKo11ZSzGJjlNfJHfQtmQT8H+9TXPG2w==} engines: {node: '>=6.9.0'} - '@babel/helper-annotate-as-pure@7.25.9': - resolution: {integrity: sha512-gv7320KBUFJz1RnylIg5WWYPRXKZ884AGkYpgpWW02TH66Dl+HaC1t1CKd0z3R4b6hdYEcmrNZHUmfCP+1u3/g==} + '@babel/helper-annotate-as-pure@7.27.1': + resolution: {integrity: sha512-WnuuDILl9oOBbKnb4L+DyODx7iC47XfzmNCpTttFsSp6hTG7XZxu60+4IO+2/hPfcGOoKbFiwoI/+zwARbNQow==} engines: {node: '>=6.9.0'} - '@babel/helper-compilation-targets@7.26.5': - resolution: {integrity: sha512-IXuyn5EkouFJscIDuFF5EsiSolseme1s0CZB+QxVugqJLYmKdxI1VfIBOst0SUu4rnk2Z7kqTwmoO1lp3HIfnA==} + '@babel/helper-compilation-targets@7.27.2': + resolution: {integrity: sha512-2+1thGUUWWjLTYTHZWK1n8Yga0ijBz1XAhUXcKy81rd5g6yh7hGqMp45v7cadSbEHc9G3OTv45SyneRN3ps4DQ==} engines: {node: '>=6.9.0'} - '@babel/helper-create-class-features-plugin@7.26.9': - resolution: {integrity: sha512-ubbUqCofvxPRurw5L8WTsCLSkQiVpov4Qx0WMA+jUN+nXBK8ADPlJO1grkFw5CWKC5+sZSOfuGMdX1aI1iT9Sg==} + '@babel/helper-create-class-features-plugin@7.27.1': + resolution: {integrity: sha512-QwGAmuvM17btKU5VqXfb+Giw4JcN0hjuufz3DYnpeVDvZLAObloM77bhMXiqry3Iio+Ai4phVRDwl6WU10+r5A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-create-regexp-features-plugin@7.26.3': - resolution: {integrity: sha512-G7ZRb40uUgdKOQqPLjfD12ZmGA54PzqDFUv2BKImnC9QIfGhIHKvVML0oN8IUiDq4iRqpq74ABpvOaerfWdong==} + '@babel/helper-create-regexp-features-plugin@7.27.1': + resolution: {integrity: sha512-uVDC72XVf8UbrH5qQTc18Agb8emwjTiZrQE11Nv3CuBEZmVvTwwE9CBUEvHku06gQCAyYf8Nv6ja1IN+6LMbxQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-define-polyfill-provider@0.6.3': - resolution: {integrity: sha512-HK7Bi+Hj6H+VTHA3ZvBis7V/6hu9QuTrnMXNybfUf2iiuU/N97I8VjB+KbhFF8Rld/Lx5MzoCwPCpPjfK+n8Cg==} + '@babel/helper-define-polyfill-provider@0.6.4': + resolution: {integrity: sha512-jljfR1rGnXXNWnmQg2K3+bvhkxB51Rl32QRaOTuwwjviGrHzIbSc8+x9CpraDtbT7mfyjXObULP4w/adunNwAw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - '@babel/helper-member-expression-to-functions@7.25.9': - resolution: {integrity: sha512-wbfdZ9w5vk0C0oyHqAJbc62+vet5prjj01jjJ8sKn3j9h3MQQlflEdXYvuqRWjHnM12coDEqiC1IRCi0U/EKwQ==} + '@babel/helper-member-expression-to-functions@7.27.1': + resolution: {integrity: sha512-E5chM8eWjTp/aNoVpcbfM7mLxu9XGLWYise2eBKGQomAk/Mb4XoxyqXTZbuTohbsl8EKqdlMhnDI2CCLfcs9wA==} engines: {node: '>=6.9.0'} - '@babel/helper-module-imports@7.25.9': - resolution: {integrity: sha512-tnUA4RsrmflIM6W6RFTLFSXITtl0wKjgpnLgXyowocVPrbYrLUXSBXDgTs8BlbmIzIdlBySRQjINYs2BAkiLtw==} + '@babel/helper-module-imports@7.27.1': + resolution: {integrity: sha512-0gSFWUPNXNopqtIPQvlD5WgXYI5GY2kP2cCvoT8kczjbfcfuIljTbcWrulD1CIPIX2gt1wghbDy08yE1p+/r3w==} engines: {node: '>=6.9.0'} - '@babel/helper-module-transforms@7.26.0': - resolution: {integrity: sha512-xO+xu6B5K2czEnQye6BHA7DolFFmS3LB7stHZFaOLb1pAwO1HWLS8fXA+eh0A2yIvltPVmx3eNNDBJA2SLHXFw==} + '@babel/helper-module-transforms@7.27.1': + resolution: {integrity: sha512-9yHn519/8KvTU5BjTVEEeIM3w9/2yXNKoD82JifINImhpKkARMJKPP59kLo+BafpdN5zgNeIcS4jsGDmd3l58g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-optimise-call-expression@7.25.9': - resolution: {integrity: sha512-FIpuNaz5ow8VyrYcnXQTDRGvV6tTjkNtCK/RYNDXGSLlUD6cBuQTSw43CShGxjvfBTfcUA/r6UhUCbtYqkhcuQ==} + '@babel/helper-optimise-call-expression@7.27.1': + resolution: {integrity: sha512-URMGH08NzYFhubNSGJrpUEphGKQwMQYBySzat5cAByY1/YgIRkULnIy3tAMeszlL/so2HbeilYloUmSpd7GdVw==} engines: {node: '>=6.9.0'} - '@babel/helper-plugin-utils@7.26.5': - resolution: {integrity: sha512-RS+jZcRdZdRFzMyr+wcsaqOmld1/EqTghfaBGQQd/WnRdzdlvSZ//kF7U8VQTxf1ynZ4cjUcYgjVGx13ewNPMg==} + '@babel/helper-plugin-utils@7.27.1': + resolution: {integrity: sha512-1gn1Up5YXka3YYAHGKpbideQ5Yjf1tDa9qYcgysz+cNCXukyLl6DjPXhD3VRwSb8c0J9tA4b2+rHEZtc6R0tlw==} engines: {node: '>=6.9.0'} - '@babel/helper-remap-async-to-generator@7.25.9': - resolution: {integrity: sha512-IZtukuUeBbhgOcaW2s06OXTzVNJR0ybm4W5xC1opWFFJMZbwRj5LCk+ByYH7WdZPZTt8KnFwA8pvjN2yqcPlgw==} + '@babel/helper-remap-async-to-generator@7.27.1': + resolution: {integrity: sha512-7fiA521aVw8lSPeI4ZOD3vRFkoqkJcS+z4hFo82bFSH/2tNd6eJ5qCVMS5OzDmZh/kaHQeBaeyxK6wljcPtveA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-replace-supers@7.26.5': - resolution: {integrity: sha512-bJ6iIVdYX1YooY2X7w1q6VITt+LnUILtNk7zT78ykuwStx8BauCzxvFqFaHjOpW1bVnSUM1PN1f0p5P21wHxvg==} + '@babel/helper-replace-supers@7.27.1': + resolution: {integrity: sha512-7EHz6qDZc8RYS5ElPoShMheWvEgERonFCs7IAonWLLUTXW59DP14bCZt89/GKyreYn8g3S83m21FelHKbeDCKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': - resolution: {integrity: sha512-K4Du3BFa3gvyhzgPcntrkDgZzQaq6uozzcpGbOO1OEJaI+EJdqWIMTLgFgQf6lrfiDFo5FU+BxKepI9RmZqahA==} + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': + resolution: {integrity: sha512-Tub4ZKEXqbPjXgWLl2+3JpQAYBJ8+ikpQ2Ocj/q/r0LwE3UhENh7EUabyHjz2kCEsrRY83ew2DQdHluuiDQFzg==} engines: {node: '>=6.9.0'} - '@babel/helper-string-parser@7.25.9': - resolution: {integrity: sha512-4A/SCr/2KLd5jrtOMFzaKjVtAei3+2r/NChoBNoZ3EyP/+GlhoaEGoWOZUmFmoITP7zOJyHIMm+DYRd8o3PvHA==} + '@babel/helper-string-parser@7.27.1': + resolution: {integrity: sha512-qMlSxKbpRlAridDExk92nSobyDdpPijUq2DW6oDnUqd0iOGxmQjyqhMIihI9+zv4LPyZdRje2cavWPbCbWm3eA==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-identifier@7.25.9': - resolution: {integrity: sha512-Ed61U6XJc3CVRfkERJWDz4dJwKe7iLmmJsbOGu9wSloNSFttHV0I8g6UAgb7qnK5ly5bGLPd4oXZlxCdANBOWQ==} + '@babel/helper-validator-identifier@7.27.1': + resolution: {integrity: sha512-D2hP9eA+Sqx1kBZgzxZh0y1trbuU+JoDkiEwqhQ36nodYqJwyEIhPSdMNd7lOm/4io72luTPWH20Yda0xOuUow==} engines: {node: '>=6.9.0'} - '@babel/helper-validator-option@7.25.9': - resolution: {integrity: sha512-e/zv1co8pp55dNdEcCynfj9X7nyUKUXoUEwfXqaZt0omVOmDe9oOTdKStH4GmAw6zxMFs50ZayuMfHDKlO7Tfw==} + '@babel/helper-validator-option@7.27.1': + resolution: {integrity: sha512-YvjJow9FxbhFFKDSuFnVCe2WxXk1zWc22fFePVNEaWJEu8IrZVlda6N0uHwzZrUM1il7NC9Mlp4MaJYbYd9JSg==} engines: {node: '>=6.9.0'} - '@babel/helper-wrap-function@7.25.9': - resolution: {integrity: sha512-ETzz9UTjQSTmw39GboatdymDq4XIQbR8ySgVrylRhPOFpsd+JrKHIuF0de7GCWmem+T4uC5z7EZguod7Wj4A4g==} + '@babel/helper-wrap-function@7.27.1': + resolution: {integrity: sha512-NFJK2sHUvrjo8wAU/nQTWU890/zB2jj0qBcCbZbbf+005cAsv6tMjXz31fBign6M5ov1o0Bllu+9nbqkfsjjJQ==} engines: {node: '>=6.9.0'} - '@babel/helpers@7.26.9': - resolution: {integrity: sha512-Mz/4+y8udxBKdmzt/UjPACs4G3j5SshJJEFFKxlCGPydG4JAHXxjWjAwjd09tf6oINvl1VfMJo+nB7H2YKQ0dA==} + '@babel/helpers@7.27.1': + resolution: {integrity: sha512-FCvFTm0sWV8Fxhpp2McP5/W53GPllQ9QeQ7SiqGWjMf/LVG07lFa5+pgK05IRhVwtvafT22KF+ZSnM9I545CvQ==} engines: {node: '>=6.9.0'} - '@babel/parser@7.26.9': - resolution: {integrity: sha512-81NWa1njQblgZbQHxWHpxxCzNsa3ZwvFqpUg7P+NNUU6f3UU2jBEg4OlF/J6rl8+PQGh1q6/zWScd001YwcA5A==} + '@babel/parser@7.27.2': + resolution: {integrity: sha512-QYLs8299NA7WM/bZAdp+CviYYkVoYXlDW2rzliy3chxd1PQjej7JORuMJDJXJUb9g0TT+B99EwaVLKmX+sPXWw==} engines: {node: '>=6.0.0'} hasBin: true - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9': - resolution: {integrity: sha512-ZkRyVkThtxQ/J6nv3JFYv1RYY+JT5BvU0y3k5bWrmuG4woXypRa4PXmm9RhOwodRkYFWqC0C0cqcJ4OqR7kW+g==} + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1': + resolution: {integrity: sha512-QPG3C9cCVRQLxAVwmefEmwdTanECuUBMQZ/ym5kiw3XKCGA7qkuQLcjWWHcrD/GKbn/WmJwaezfuuAOcyKlRPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9': - resolution: {integrity: sha512-MrGRLZxLD/Zjj0gdU15dfs+HH/OXvnw/U4jJD8vpcP2CJQapPEv1IWwjc/qMg7ItBlPwSv1hRBbb7LeuANdcnw==} + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1': + resolution: {integrity: sha512-qNeq3bCKnGgLkEXUuFry6dPlGfCdQNZbn7yUAPCInwAJHMU7THJfrBSozkcWq5sNM6RcF3S8XyQL2A52KNR9IA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9': - resolution: {integrity: sha512-2qUwwfAFpJLZqxd02YW9btUCZHl+RFvdDkNfZwaIJrvB8Tesjsk8pEQkTvGwZXLqXUx/2oyY3ySRhm6HOXuCug==} + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1': + resolution: {integrity: sha512-g4L7OYun04N1WyqMNjldFwlfPCLVkgB54A/YCXICZYBsvJJE3kByKv9c9+R/nAfmIfjl2rKYLNyMHboYbZaWaA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9': - resolution: {integrity: sha512-6xWgLZTJXwilVjlnV7ospI3xi+sl8lN8rXXbBD6vYn3UYDlGsag8wrZkKcSI8G6KgqKP7vNFaDgeDnfAABq61g==} + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1': + resolution: {integrity: sha512-oO02gcONcD5O1iTLi/6frMJBIwWEHceWGSGqrpCmEL8nogiS6J9PBlE48CaK20/Jx1LuRml9aDftLgdjXT8+Cw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.13.0 - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9': - resolution: {integrity: sha512-aLnMXYPnzwwqhYSCyXfKkIkYgJ8zv9RK+roo9DkTXz38ynIhd9XCbN08s3MGvqL2MYGVUGdRQLL/JqBIeJhJBg==} + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1': + resolution: {integrity: sha512-6BpaYGDavZqkI6yT+KSPdpZFfpnd68UKXbcjI9pJ13pvHhPrCKWOOLp+ysvMeA+DxnhuPpgIaRpxRxo5A9t5jw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 @@ -337,14 +334,14 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-assertions@7.26.0': - resolution: {integrity: sha512-QCWT5Hh830hK5EQa7XzuqIkQU9tT/whqbDz7kuaZMHFl1inRRg7JnuAEOQ0Ur0QUl0NufCk1msK2BeY79Aj/eg==} + '@babel/plugin-syntax-import-assertions@7.27.1': + resolution: {integrity: sha512-UT/Jrhw57xg4ILHLFnzFpPDlMbcdEicaAtjPQpbj9wa8T4r5KVWCimHcL/460g8Ht0DMxDyjsLgiWSkVjnwPFg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-import-attributes@7.26.0': - resolution: {integrity: sha512-e2dttdsJ1ZTpi3B9UYGLw41hifAubg19AtCu/2I/F1QNVclOBr1dYpTdmdyZ84Xiz43BS/tCUkMAZNLv12Pi+A==} + '@babel/plugin-syntax-import-attributes@7.27.1': + resolution: {integrity: sha512-oFT0FrKHgF53f4vOsZGi2Hh3I35PfSmVs4IBFLFj4dnafP+hIWDLg3VyKmUHfLoLHlyxY4C7DGtmHuJgn+IGww==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -359,8 +356,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-jsx@7.25.9': - resolution: {integrity: sha512-ld6oezHQMZsZfp6pWtbjaNDF2tiiCYYDqQszHt5VV437lewP9aSi2Of99CK0D0XB21k7FLgnLcmQKyKzynfeAA==} + '@babel/plugin-syntax-jsx@7.27.1': + resolution: {integrity: sha512-y8YTNIeKoyhGd9O0Jiyzyyqk8gdjnumGTQPsz0xOZOQ2RmkVJeZ1vmmfIvFEKqucBG6axJGBZDE/7iI5suUI/w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -407,8 +404,8 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-syntax-typescript@7.25.9': - resolution: {integrity: sha512-hjMgRy5hb8uJJjUcdWunWVcoi9bGpJp8p5Ol1229PoN6aytsLwNMgmdftO23wnCLMfVmTwZDWMPNq/D1SY60JQ==} + '@babel/plugin-syntax-typescript@7.27.1': + resolution: {integrity: sha512-xfYCBMxveHrRMnAWl1ZlPXOZjzkN82THFvLhQhFXFt81Z5HnN+EtUkZhv/zcKpmT3fzmWZB0ywiBrbC3vogbwQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -419,314 +416,314 @@ packages: peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-arrow-functions@7.25.9': - resolution: {integrity: sha512-6jmooXYIwn9ca5/RylZADJ+EnSxVUS5sjeJ9UPk6RWRzXCmOJCy6dqItPJFpw2cuCangPK4OYr5uhGKcmrm5Qg==} + '@babel/plugin-transform-arrow-functions@7.27.1': + resolution: {integrity: sha512-8Z4TGic6xW70FKThA5HYEKKyBpOOsucTOD1DjU3fZxDg+K3zBJcXMFnt/4yQiZnf5+MiOMSXQ9PaEK/Ilh1DeA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-generator-functions@7.26.8': - resolution: {integrity: sha512-He9Ej2X7tNf2zdKMAGOsmg2MrFc+hfoAhd3po4cWfo/NWjzEAKa0oQruj1ROVUdl0e6fb6/kE/G3SSxE0lRJOg==} + '@babel/plugin-transform-async-generator-functions@7.27.1': + resolution: {integrity: sha512-eST9RrwlpaoJBDHShc+DS2SG4ATTi2MYNb4OxYkf3n+7eb49LWpnS+HSpVfW4x927qQwgk8A2hGNVaajAEw0EA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-async-to-generator@7.25.9': - resolution: {integrity: sha512-NT7Ejn7Z/LjUH0Gv5KsBCxh7BH3fbLTV0ptHvpeMvrt3cPThHfJfst9Wrb7S8EvJ7vRTFI7z+VAvFVEQn/m5zQ==} + '@babel/plugin-transform-async-to-generator@7.27.1': + resolution: {integrity: sha512-NREkZsZVJS4xmTr8qzE5y8AfIPqsdQfRuUiLRTEzb7Qii8iFWCyDKaUV2c0rCuh4ljDZ98ALHP/PetiBV2nddA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoped-functions@7.26.5': - resolution: {integrity: sha512-chuTSY+hq09+/f5lMj8ZSYgCFpppV2CbYrhNFJ1BFoXpiWPnnAb7R0MqrafCpN8E1+YRrtM1MXZHJdIx8B6rMQ==} + '@babel/plugin-transform-block-scoped-functions@7.27.1': + resolution: {integrity: sha512-cnqkuOtZLapWYZUYM5rVIdv1nXYuFVIltZ6ZJ7nIj585QsjKM5dhL2Fu/lICXZ1OyIAFc7Qy+bvDAtTXqGrlhg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-block-scoping@7.25.9': - resolution: {integrity: sha512-1F05O7AYjymAtqbsFETboN1NvBdcnzMerO+zlMyJBEz6WkMdejvGWw9p05iTSjC85RLlBseHHQpYaM4gzJkBGg==} + '@babel/plugin-transform-block-scoping@7.27.1': + resolution: {integrity: sha512-QEcFlMl9nGTgh1rn2nIeU5bkfb9BAjaQcWbiP4LvKxUot52ABcTkpcyJ7f2Q2U2RuQ84BNLgts3jRme2dTx6Fw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-properties@7.25.9': - resolution: {integrity: sha512-bbMAII8GRSkcd0h0b4X+36GksxuheLFjP65ul9w6C3KgAamI3JqErNgSrosX6ZPj+Mpim5VvEbawXxJCyEUV3Q==} + '@babel/plugin-transform-class-properties@7.27.1': + resolution: {integrity: sha512-D0VcalChDMtuRvJIu3U/fwWjf8ZMykz5iZsg77Nuj821vCKI3zCyRLwRdWbsuJ/uRwZhZ002QtCqIkwC/ZkvbA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-class-static-block@7.26.0': - resolution: {integrity: sha512-6J2APTs7BDDm+UMqP1useWqhcRAXo0WIoVj26N7kPFB6S73Lgvyka4KTZYIxtgYXiN5HTyRObA72N2iu628iTQ==} + '@babel/plugin-transform-class-static-block@7.27.1': + resolution: {integrity: sha512-s734HmYU78MVzZ++joYM+NkJusItbdRcbm+AGRgJCt3iA+yux0QpD9cBVdz3tKyrjVYWRl7j0mHSmv4lhV0aoA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.12.0 - '@babel/plugin-transform-classes@7.25.9': - resolution: {integrity: sha512-mD8APIXmseE7oZvZgGABDyM34GUmK45Um2TXiBUt7PnuAxrgoSVf123qUzPxEr/+/BHrRn5NMZCdE2m/1F8DGg==} + '@babel/plugin-transform-classes@7.27.1': + resolution: {integrity: sha512-7iLhfFAubmpeJe/Wo2TVuDrykh/zlWXLzPNdL0Jqn/Xu8R3QQ8h9ff8FQoISZOsw74/HFqFI7NX63HN7QFIHKA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-computed-properties@7.25.9': - resolution: {integrity: sha512-HnBegGqXZR12xbcTHlJ9HGxw1OniltT26J5YpfruGqtUHlz/xKf/G2ak9e+t0rVqrjXa9WOhvYPz1ERfMj23AA==} + '@babel/plugin-transform-computed-properties@7.27.1': + resolution: {integrity: sha512-lj9PGWvMTVksbWiDT2tW68zGS/cyo4AkZ/QTp0sQT0mjPopCmrSkzxeXkznjqBxzDI6TclZhOJbBmbBLjuOZUw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-destructuring@7.25.9': - resolution: {integrity: sha512-WkCGb/3ZxXepmMiX101nnGiU+1CAdut8oHyEOHxkKuS1qKpU2SMXE2uSvfz8PBuLd49V6LEsbtyPhWC7fnkgvQ==} + '@babel/plugin-transform-destructuring@7.27.1': + resolution: {integrity: sha512-ttDCqhfvpE9emVkXbPD8vyxxh4TWYACVybGkDj+oReOGwnp066ITEivDlLwe0b1R0+evJ13IXQuLNB5w1fhC5Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-dotall-regex@7.25.9': - resolution: {integrity: sha512-t7ZQ7g5trIgSRYhI9pIJtRl64KHotutUJsh4Eze5l7olJv+mRSg4/MmbZ0tv1eeqRbdvo/+trvJD/Oc5DmW2cA==} + '@babel/plugin-transform-dotall-regex@7.27.1': + resolution: {integrity: sha512-gEbkDVGRvjj7+T1ivxrfgygpT7GUd4vmODtYpbs0gZATdkX8/iSnOtZSxiZnsgm1YjTgjI6VKBGSJJevkrclzw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-keys@7.25.9': - resolution: {integrity: sha512-LZxhJ6dvBb/f3x8xwWIuyiAHy56nrRG3PeYTpBkkzkYRRQ6tJLu68lEF5VIqMUZiAV7a8+Tb78nEoMCMcqjXBw==} + '@babel/plugin-transform-duplicate-keys@7.27.1': + resolution: {integrity: sha512-MTyJk98sHvSs+cvZ4nOauwTTG1JeonDjSGvGGUNHreGQns+Mpt6WX/dVzWBHgg+dYZhkC4X+zTDfkTU+Vy9y7Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-0UfuJS0EsXbRvKnwcLjFtJy/Sxc5J5jhLHnFhy7u4zih97Hz6tJkLU+O+FMMrNZrosUPxDi6sYxJ/EA8jDiAog==} + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-hkGcueTEzuhB30B3eJCbCYeCaaEQOmQR0AdvzpD4LoN0GXMWzzGSuRrxR2xTnCrvNbVwK9N6/jQ92GSLfiZWoQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-dynamic-import@7.25.9': - resolution: {integrity: sha512-GCggjexbmSLaFhqsojeugBpeaRIgWNTcgKVq/0qIteFEqY2A+b9QidYadrWlnbWQUrW5fn+mCvf3tr7OeBFTyg==} + '@babel/plugin-transform-dynamic-import@7.27.1': + resolution: {integrity: sha512-MHzkWQcEmjzzVW9j2q8LGjwGWpG2mjwaaB0BNQwst3FIjqsg8Ct/mIZlvSPJvfi9y2AC8mi/ktxbFVL9pZ1I4A==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-exponentiation-operator@7.26.3': - resolution: {integrity: sha512-7CAHcQ58z2chuXPWblnn1K6rLDnDWieghSOEmqQsrBenH0P9InCUtOJYD89pvngljmZlJcz3fcmgYsXFNGa1ZQ==} + '@babel/plugin-transform-exponentiation-operator@7.27.1': + resolution: {integrity: sha512-uspvXnhHvGKf2r4VVtBpeFnuDWsJLQ6MF6lGJLC89jBR1uoVeqM416AZtTuhTezOfgHicpJQmoD5YUakO/YmXQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-export-namespace-from@7.25.9': - resolution: {integrity: sha512-2NsEz+CxzJIVOPx2o9UsW1rXLqtChtLoVnwYHHiB04wS5sgn7mrV45fWMBX0Kk+ub9uXytVYfNP2HjbVbCB3Ww==} + '@babel/plugin-transform-export-namespace-from@7.27.1': + resolution: {integrity: sha512-tQvHWSZ3/jH2xuq/vZDy0jNn+ZdXJeM8gHvX4lnJmsc3+50yPlWdZXIc5ay+umX+2/tJIqHqiEqcJvxlmIvRvQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-for-of@7.26.9': - resolution: {integrity: sha512-Hry8AusVm8LW5BVFgiyUReuoGzPUpdHQQqJY5bZnbbf+ngOHWuCuYFKw/BqaaWlvEUrF91HMhDtEaI1hZzNbLg==} + '@babel/plugin-transform-for-of@7.27.1': + resolution: {integrity: sha512-BfbWFFEJFQzLCQ5N8VocnCtA8J1CLkNTe2Ms2wocj75dd6VpiqS5Z5quTYcUoo4Yq+DN0rtikODccuv7RU81sw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-function-name@7.25.9': - resolution: {integrity: sha512-8lP+Yxjv14Vc5MuWBpJsoUCd3hD6V9DgBon2FVYL4jJgbnVQ9fTgYmonchzZJOVNgzEgbxp4OwAf6xz6M/14XA==} + '@babel/plugin-transform-function-name@7.27.1': + resolution: {integrity: sha512-1bQeydJF9Nr1eBCMMbC+hdwmRlsv5XYOMu03YSWFwNs0HsAmtSxxF1fyuYPqemVldVyFmlCU7w8UE14LupUSZQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-json-strings@7.25.9': - resolution: {integrity: sha512-xoTMk0WXceiiIvsaquQQUaLLXSW1KJ159KP87VilruQm0LNNGxWzahxSS6T6i4Zg3ezp4vA4zuwiNUR53qmQAw==} + '@babel/plugin-transform-json-strings@7.27.1': + resolution: {integrity: sha512-6WVLVJiTjqcQauBhn1LkICsR2H+zm62I3h9faTDKt1qP4jn2o72tSvqMwtGFKGTpojce0gJs+76eZ2uCHRZh0Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-literals@7.25.9': - resolution: {integrity: sha512-9N7+2lFziW8W9pBl2TzaNht3+pgMIRP74zizeCSrtnSKVdUl8mAjjOP2OOVQAfZ881P2cNjDj1uAMEdeD50nuQ==} + '@babel/plugin-transform-literals@7.27.1': + resolution: {integrity: sha512-0HCFSepIpLTkLcsi86GG3mTUzxV5jpmbv97hTETW3yzrAij8aqlD36toB1D0daVFJM8NK6GvKO0gslVQmm+zZA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-logical-assignment-operators@7.25.9': - resolution: {integrity: sha512-wI4wRAzGko551Y8eVf6iOY9EouIDTtPb0ByZx+ktDGHwv6bHFimrgJM/2T021txPZ2s4c7bqvHbd+vXG6K948Q==} + '@babel/plugin-transform-logical-assignment-operators@7.27.1': + resolution: {integrity: sha512-SJvDs5dXxiae4FbSL1aBJlG4wvl594N6YEVVn9e3JGulwioy6z3oPjx/sQBO3Y4NwUu5HNix6KJ3wBZoewcdbw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-member-expression-literals@7.25.9': - resolution: {integrity: sha512-PYazBVfofCQkkMzh2P6IdIUaCEWni3iYEerAsRWuVd8+jlM1S9S9cz1dF9hIzyoZ8IA3+OwVYIp9v9e+GbgZhA==} + '@babel/plugin-transform-member-expression-literals@7.27.1': + resolution: {integrity: sha512-hqoBX4dcZ1I33jCSWcXrP+1Ku7kdqXf1oeah7ooKOIiAdKQ+uqftgCFNOSzA5AMS2XIHEYeGFg4cKRCdpxzVOQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-amd@7.25.9': - resolution: {integrity: sha512-g5T11tnI36jVClQlMlt4qKDLlWnG5pP9CSM4GhdRciTNMRgkfpo5cR6b4rGIOYPgRRuFAvwjPQ/Yk+ql4dyhbw==} + '@babel/plugin-transform-modules-amd@7.27.1': + resolution: {integrity: sha512-iCsytMg/N9/oFq6n+gFTvUYDZQOMK5kEdeYxmxt91fcJGycfxVP9CnrxoliM0oumFERba2i8ZtwRUCMhvP1LnA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-commonjs@7.26.3': - resolution: {integrity: sha512-MgR55l4q9KddUDITEzEFYn5ZsGDXMSsU9E+kh7fjRXTIC3RHqfCo8RPRbyReYJh44HQ/yomFkqbOFohXvDCiIQ==} + '@babel/plugin-transform-modules-commonjs@7.27.1': + resolution: {integrity: sha512-OJguuwlTYlN0gBZFRPqwOGNWssZjfIUdS7HMYtN8c1KmwpwHFBwTeFZrg9XZa+DFTitWOW5iTAG7tyCUPsCCyw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-systemjs@7.25.9': - resolution: {integrity: sha512-hyss7iIlH/zLHaehT+xwiymtPOpsiwIIRlCAOwBB04ta5Tt+lNItADdlXw3jAWZ96VJ2jlhl/c+PNIQPKNfvcA==} + '@babel/plugin-transform-modules-systemjs@7.27.1': + resolution: {integrity: sha512-w5N1XzsRbc0PQStASMksmUeqECuzKuTJer7kFagK8AXgpCMkeDMO5S+aaFb7A51ZYDF7XI34qsTX+fkHiIm5yA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-modules-umd@7.25.9': - resolution: {integrity: sha512-bS9MVObUgE7ww36HEfwe6g9WakQ0KF07mQF74uuXdkoziUPfKyu/nIm663kz//e5O1nPInPFx36z7WJmJ4yNEw==} + '@babel/plugin-transform-modules-umd@7.27.1': + resolution: {integrity: sha512-iQBE/xC5BV1OxJbp6WG7jq9IWiD+xxlZhLrdwpPkTX3ydmXdvoCpyfJN7acaIBZaOqTfr76pgzqBJflNbeRK+w==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9': - resolution: {integrity: sha512-oqB6WHdKTGl3q/ItQhpLSnWWOpjUJLsOCLVyeFgeTktkBSCiurvPOsyt93gibI9CmuKvTUEtWmG5VhZD+5T/KA==} + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1': + resolution: {integrity: sha512-SstR5JYy8ddZvD6MhV0tM/j16Qds4mIpJTOd1Yu9J9pJjH93bxHECF7pgtc28XvkzTD6Pxcm/0Z73Hvk7kb3Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-new-target@7.25.9': - resolution: {integrity: sha512-U/3p8X1yCSoKyUj2eOBIx3FOn6pElFOKvAAGf8HTtItuPyB+ZeOqfn+mvTtg9ZlOAjsPdK3ayQEjqHjU/yLeVQ==} + '@babel/plugin-transform-new-target@7.27.1': + resolution: {integrity: sha512-f6PiYeqXQ05lYq3TIfIDu/MtliKUbNwkGApPUvyo6+tc7uaR4cPjPe7DFPr15Uyycg2lZU6btZ575CuQoYh7MQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6': - resolution: {integrity: sha512-CKW8Vu+uUZneQCPtXmSBUC6NCAUdya26hWCElAWh5mVSlSRsmiCPUUDKb3Z0szng1hiAJa098Hkhg9o4SE35Qw==} + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1': + resolution: {integrity: sha512-aGZh6xMo6q9vq1JGcw58lZ1Z0+i0xB2x0XaauNIUXd6O1xXc3RwoWEBlsTQrY4KQ9Jf0s5rgD6SiNkaUdJegTA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-numeric-separator@7.25.9': - resolution: {integrity: sha512-TlprrJ1GBZ3r6s96Yq8gEQv82s8/5HnCVHtEJScUj90thHQbwe+E5MLhi2bbNHBEJuzrvltXSru+BUxHDoog7Q==} + '@babel/plugin-transform-numeric-separator@7.27.1': + resolution: {integrity: sha512-fdPKAcujuvEChxDBJ5c+0BTaS6revLV7CJL08e4m3de8qJfNIuCc2nc7XJYOjBoTMJeqSmwXJ0ypE14RCjLwaw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-rest-spread@7.25.9': - resolution: {integrity: sha512-fSaXafEE9CVHPweLYw4J0emp1t8zYTXyzN3UuG+lylqkvYd7RMrsOQ8TYx5RF231be0vqtFC6jnx3UmpJmKBYg==} + '@babel/plugin-transform-object-rest-spread@7.27.2': + resolution: {integrity: sha512-AIUHD7xJ1mCrj3uPozvtngY3s0xpv7Nu7DoUSnzNY6Xam1Cy4rUznR//pvMHOhQ4AvbCexhbqXCtpxGHOGOO6g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-object-super@7.25.9': - resolution: {integrity: sha512-Kj/Gh+Rw2RNLbCK1VAWj2U48yxxqL2x0k10nPtSdRa0O2xnHXalD0s+o1A6a0W43gJ00ANo38jxkQreckOzv5A==} + '@babel/plugin-transform-object-super@7.27.1': + resolution: {integrity: sha512-SFy8S9plRPbIcxlJ8A6mT/CxFdJx/c04JEctz4jf8YZaVS2px34j7NXRrlGlHkN/M2gnpL37ZpGRGVFLd3l8Ng==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-catch-binding@7.25.9': - resolution: {integrity: sha512-qM/6m6hQZzDcZF3onzIhZeDHDO43bkNNlOX0i8n3lR6zLbu0GN2d8qfM/IERJZYauhAHSLHy39NF0Ctdvcid7g==} + '@babel/plugin-transform-optional-catch-binding@7.27.1': + resolution: {integrity: sha512-txEAEKzYrHEX4xSZN4kJ+OfKXFVSWKB2ZxM9dpcE3wT7smwkNmXo5ORRlVzMVdJbD+Q8ILTgSD7959uj+3Dm3Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-optional-chaining@7.25.9': - resolution: {integrity: sha512-6AvV0FsLULbpnXeBjrY4dmWF8F7gf8QnvTEoO/wX/5xm/xE1Xo8oPuD3MPS+KS9f9XBEAWN7X1aWr4z9HdOr7A==} + '@babel/plugin-transform-optional-chaining@7.27.1': + resolution: {integrity: sha512-BQmKPPIuc8EkZgNKsv0X4bPmOoayeu4F1YCwx2/CfmDSXDbp7GnzlUH+/ul5VGfRg1AoFPsrIThlEBj2xb4CAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-parameters@7.25.9': - resolution: {integrity: sha512-wzz6MKwpnshBAiRmn4jR8LYz/g8Ksg0o80XmwZDlordjwEk9SxBzTWC7F5ef1jhbrbOW2DJ5J6ayRukrJmnr0g==} + '@babel/plugin-transform-parameters@7.27.1': + resolution: {integrity: sha512-018KRk76HWKeZ5l4oTj2zPpSh+NbGdt0st5S6x0pga6HgrjBOJb24mMDHorFopOOd6YHkLgOZ+zaCjZGPO4aKg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-methods@7.25.9': - resolution: {integrity: sha512-D/JUozNpQLAPUVusvqMxyvjzllRaF8/nSrP1s2YGQT/W4LHK4xxsMcHjhOGTS01mp9Hda8nswb+FblLdJornQw==} + '@babel/plugin-transform-private-methods@7.27.1': + resolution: {integrity: sha512-10FVt+X55AjRAYI9BrdISN9/AQWHqldOeZDUoLyif1Kn05a56xVBXb8ZouL8pZ9jem8QpXaOt8TS7RHUIS+GPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-private-property-in-object@7.25.9': - resolution: {integrity: sha512-Evf3kcMqzXA3xfYJmZ9Pg1OvKdtqsDMSWBDzZOPLvHiTt36E75jLDQo5w1gtRU95Q4E5PDttrTf25Fw8d/uWLw==} + '@babel/plugin-transform-private-property-in-object@7.27.1': + resolution: {integrity: sha512-5J+IhqTi1XPa0DXF83jYOaARrX+41gOewWbkPyjMNRDqgOCqdffGh8L3f/Ek5utaEBZExjSAzcyjmV9SSAWObQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-property-literals@7.25.9': - resolution: {integrity: sha512-IvIUeV5KrS/VPavfSM/Iu+RE6llrHrYIKY1yfCzyO/lMXHQ+p7uGhonmGVisv6tSBSVgWzMBohTcvkC9vQcQFA==} + '@babel/plugin-transform-property-literals@7.27.1': + resolution: {integrity: sha512-oThy3BCuCha8kDZ8ZkgOg2exvPYUlprMukKQXI1r1pJ47NCvxfkEy8vK+r/hT9nF0Aa4H1WUPZZjHTFtAhGfmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regenerator@7.25.9': - resolution: {integrity: sha512-vwDcDNsgMPDGP0nMqzahDWE5/MLcX8sv96+wfX7as7LoF/kr97Bo/7fI00lXY4wUXYfVmwIIyG80fGZ1uvt2qg==} + '@babel/plugin-transform-regenerator@7.27.1': + resolution: {integrity: sha512-B19lbbL7PMrKr52BNPjCqg1IyNUIjTcxKj8uX9zHO+PmWN93s19NDr/f69mIkEp2x9nmDJ08a7lgHaTTzvW7mw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-regexp-modifiers@7.26.0': - resolution: {integrity: sha512-vN6saax7lrA2yA/Pak3sCxuD6F5InBjn9IcrIKQPjpsLvuHYLVroTxjdlVRHjjBWxKOqIwpTXDkOssYT4BFdRw==} + '@babel/plugin-transform-regexp-modifiers@7.27.1': + resolution: {integrity: sha512-TtEciroaiODtXvLZv4rmfMhkCv8jx3wgKpL68PuiPh2M4fvz5jhsA7697N1gMvkvr/JTF13DrFYyEbY9U7cVPA==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/plugin-transform-reserved-words@7.25.9': - resolution: {integrity: sha512-7DL7DKYjn5Su++4RXu8puKZm2XBPHyjWLUidaPEkCUBbE7IPcsrkRHggAOOKydH1dASWdcUBxrkOGNxUv5P3Jg==} + '@babel/plugin-transform-reserved-words@7.27.1': + resolution: {integrity: sha512-V2ABPHIJX4kC7HegLkYoDpfg9PVmuWy/i6vUM5eGK22bx4YVFD3M5F0QQnWQoDs6AGsUWTVOopBiMFQgHaSkVw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-shorthand-properties@7.25.9': - resolution: {integrity: sha512-MUv6t0FhO5qHnS/W8XCbHmiRWOphNufpE1IVxhK5kuN3Td9FT1x4rx4K42s3RYdMXCXpfWkGSbCSd0Z64xA7Ng==} + '@babel/plugin-transform-shorthand-properties@7.27.1': + resolution: {integrity: sha512-N/wH1vcn4oYawbJ13Y/FxcQrWk63jhfNa7jef0ih7PHSIHX2LB7GWE1rkPrOnka9kwMxb6hMl19p7lidA+EHmQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-spread@7.25.9': - resolution: {integrity: sha512-oNknIB0TbURU5pqJFVbOOFspVlrpVwo2H1+HUIsVDvp5VauGGDP1ZEvO8Nn5xyMEs3dakajOxlmkNW7kNgSm6A==} + '@babel/plugin-transform-spread@7.27.1': + resolution: {integrity: sha512-kpb3HUqaILBJcRFVhFUs6Trdd4mkrzcGXss+6/mxUd273PfbWqSDHRzMT2234gIg2QYfAjvXLSquP1xECSg09Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-sticky-regex@7.25.9': - resolution: {integrity: sha512-WqBUSgeVwucYDP9U/xNRQam7xV8W5Zf+6Eo7T2SRVUFlhRiMNFdFz58u0KZmCVVqs2i7SHgpRnAhzRNmKfi2uA==} + '@babel/plugin-transform-sticky-regex@7.27.1': + resolution: {integrity: sha512-lhInBO5bi/Kowe2/aLdBAawijx+q1pQzicSgnkB6dUPc1+RC8QmJHKf2OjvU+NZWitguJHEaEmbV6VWEouT58g==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-template-literals@7.26.8': - resolution: {integrity: sha512-OmGDL5/J0CJPJZTHZbi2XpO0tyT2Ia7fzpW5GURwdtp2X3fMmN8au/ej6peC/T33/+CRiIpA8Krse8hFGVmT5Q==} + '@babel/plugin-transform-template-literals@7.27.1': + resolution: {integrity: sha512-fBJKiV7F2DxZUkg5EtHKXQdbsbURW3DZKQUWphDum0uRP6eHGGa/He9mc0mypL680pb+e/lDIthRohlv8NCHkg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typeof-symbol@7.26.7': - resolution: {integrity: sha512-jfoTXXZTgGg36BmhqT3cAYK5qkmqvJpvNrPhaK/52Vgjhw4Rq29s9UqpWWV0D6yuRmgiFH/BUVlkl96zJWqnaw==} + '@babel/plugin-transform-typeof-symbol@7.27.1': + resolution: {integrity: sha512-RiSILC+nRJM7FY5srIyc4/fGIwUhyDuuBSdWn4y6yT6gm652DpCHZjIipgn6B7MQ1ITOUnAKWixEUjQRIBIcLw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-typescript@7.26.8': - resolution: {integrity: sha512-bME5J9AC8ChwA7aEPJ6zym3w7aObZULHhbNLU0bKUhKsAkylkzUdq+0kdymh9rzi8nlNFl2bmldFBCKNJBUpuw==} + '@babel/plugin-transform-typescript@7.27.1': + resolution: {integrity: sha512-Q5sT5+O4QUebHdbwKedFBEwRLb02zJ7r4A5Gg2hUoLuU3FjdMcyqcywqUrLCaDsFCxzokf7u9kuy7qz51YUuAg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-escapes@7.25.9': - resolution: {integrity: sha512-s5EDrE6bW97LtxOcGj1Khcx5AaXwiMmi4toFWRDP9/y0Woo6pXC+iyPu/KuhKtfSrNFd7jJB+/fkOtZy6aIC6Q==} + '@babel/plugin-transform-unicode-escapes@7.27.1': + resolution: {integrity: sha512-Ysg4v6AmF26k9vpfFuTZg8HRfVWzsh1kVfowA23y9j/Gu6dOuahdUVhkLqpObp3JIv27MLSii6noRnuKN8H0Mg==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-property-regex@7.25.9': - resolution: {integrity: sha512-Jt2d8Ga+QwRluxRQ307Vlxa6dMrYEMZCgGxoPR8V52rxPyldHu3hdlHspxaqYmE7oID5+kB+UKUB/eWS+DkkWg==} + '@babel/plugin-transform-unicode-property-regex@7.27.1': + resolution: {integrity: sha512-uW20S39PnaTImxp39O5qFlHLS9LJEmANjMG7SxIhap8rCHqu0Ik+tLEPX5DKmHn6CsWQ7j3lix2tFOa5YtL12Q==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-regex@7.25.9': - resolution: {integrity: sha512-yoxstj7Rg9dlNn9UQxzk4fcNivwv4nUYz7fYXBaKxvw/lnmPuOm/ikoELygbYq68Bls3D/D+NBPHiLwZdZZ4HA==} + '@babel/plugin-transform-unicode-regex@7.27.1': + resolution: {integrity: sha512-xvINq24TRojDuyt6JGtHmkVkrfVV3FPT16uytxImLeBZqW3/H52yN+kM1MGuyPkIQxrzKwPHs5U/MP3qKyzkGw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/plugin-transform-unicode-sets-regex@7.25.9': - resolution: {integrity: sha512-8BYqO3GeVNHtx69fdPshN3fnzUNLrWdHhk/icSwigksJGczKSizZ+Z6SBCxTs723Fr5VSNorTIK7a+R2tISvwQ==} + '@babel/plugin-transform-unicode-sets-regex@7.27.1': + resolution: {integrity: sha512-EtkOujbc4cgvb0mlpQefi4NTPBzhSIevblFevACNLUspmrALgmEBdL/XfnyyITfd8fKBZrZys92zOWcik7j9Tw==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0 - '@babel/preset-env@7.26.9': - resolution: {integrity: sha512-vX3qPGE8sEKEAZCWk05k3cpTAE3/nOYca++JA+Rd0z2NCNzabmYvEiSShKzm10zdquOIAVXsy2Ei/DTW34KlKQ==} + '@babel/preset-env@7.27.2': + resolution: {integrity: sha512-Ma4zSuYSlGNRlCLO+EAzLnCmJK2vdstgv+n7aUP+/IKZrOfWHOJVdSJtuub8RzHTj3ahD37k5OKJWvzf16TQyQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 @@ -736,26 +733,26 @@ packages: peerDependencies: '@babel/core': ^7.0.0-0 || ^8.0.0-0 <8.0.0 - '@babel/preset-typescript@7.26.0': - resolution: {integrity: sha512-NMk1IGZ5I/oHhoXEElcm+xUnL/szL6xflkFZmoEU9xj1qSJXpiS7rsspYo92B4DRCDvZn2erT5LdsCeXAKNCkg==} + '@babel/preset-typescript@7.27.1': + resolution: {integrity: sha512-l7WfQfX0WK4M0v2RudjuQK4u99BS6yLHYEmdtVPP7lKV013zr9DygFuWNlnbvQ9LR+LS0Egz/XAvGx5U9MX0fQ==} engines: {node: '>=6.9.0'} peerDependencies: '@babel/core': ^7.0.0-0 - '@babel/runtime@7.26.9': - resolution: {integrity: sha512-aA63XwOkcl4xxQa3HjPMqOP6LiK0ZDv3mUPYEFXkpHbaFjtGggE1A61FjFzJnB+p7/oy2gA8E+rcBNl/zC1tMg==} + '@babel/runtime@7.27.1': + resolution: {integrity: sha512-1x3D2xEk2fRo3PAhwQwu5UubzgiVWSXTBfWpVd2Mx2AzRqJuDJCsgaDVZ7HB5iGzDW1Hl1sWN2mFyKjmR9uAog==} engines: {node: '>=6.9.0'} - '@babel/template@7.26.9': - resolution: {integrity: sha512-qyRplbeIpNZhmzOysF/wFMuP9sctmh2cFzRAZOn1YapxBsE1i9bJIY586R/WBLfLcmcBlM8ROBiQURnnNy+zfA==} + '@babel/template@7.27.2': + resolution: {integrity: sha512-LPDZ85aEJyYSd18/DkjNh4/y1ntkE5KwUHWTiqgRxruuZL2F1yuHligVHLvcHY2vMHXttKFpJn6LwfI7cw7ODw==} engines: {node: '>=6.9.0'} - '@babel/traverse@7.26.9': - resolution: {integrity: sha512-ZYW7L+pL8ahU5fXmNbPF+iZFHCv5scFak7MZ9bwaRPLUhHh7QQEMjZUg0HevihoqCM5iSYHN61EyCoZvqC+bxg==} + '@babel/traverse@7.27.1': + resolution: {integrity: sha512-ZCYtZciz1IWJB4U61UPu4KEaqyfj+r5T1Q5mqPo+IBpcG9kHv30Z0aD8LXPgC1trYa6rK0orRyAhqUgk4MjmEg==} engines: {node: '>=6.9.0'} - '@babel/types@7.26.9': - resolution: {integrity: sha512-Y3IR1cRnOxOCDvMmNiym7XpXQ93iGDDPHx+Zj+NM+rg0fBaShfQLkg+hKPaZCEvg5N/LeCo4+Rj/i3FuJsIQaw==} + '@babel/types@7.27.1': + resolution: {integrity: sha512-+EzkxvLNfiUeKMgy/3luqfsCWFRXLb7U6wNQTk60tovuckwB15B191tJWvpp4HjiQWdJkCxO3Wbvc6jlk3Xb2Q==} engines: {node: '>=6.9.0'} '@bcoe/v8-coverage@0.2.3': @@ -770,8 +767,8 @@ packages: '@bundled-es-modules/tough-cookie@0.1.6': resolution: {integrity: sha512-dvMHbL464C0zI+Yqxbz6kZ5TOEp7GLW+pry/RWndAR8MJQAXZ2rPmIs8tziTZjeIyhSNZgZbCePtfSbdWqStJw==} - '@eslint-community/eslint-utils@4.4.1': - resolution: {integrity: sha512-s3O3waFUrMV8P/XaF/+ZTp1X9XBZW1a4B97ZnjQF2KYWaFD2A8KyFBsrsfSjEmjn3RGWAIuvlneuZm3CUK3jbA==} + '@eslint-community/eslint-utils@4.7.0': + resolution: {integrity: sha512-dyybb3AcajC7uha6CvhdVRJqaKyn7w2YKqKyAN37NKYgZT36w+iRb0Dymmc5qEJ549c/S31cMMSFd75bteCpCw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} peerDependencies: eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 @@ -780,32 +777,32 @@ packages: resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} - '@eslint/config-array@0.19.2': - resolution: {integrity: sha512-GNKqxfHG2ySmJOBSHg7LxeUx4xpuCoFjacmlCoYWEbaPXLwvfIjixRI12xCQZeULksQb23uiA8F40w5TojpV7w==} + '@eslint/config-array@0.20.0': + resolution: {integrity: sha512-fxlS1kkIjx8+vy2SjuCB94q3htSNrufYTXubwiBFeaQHbH6Ipi43gFJq2zCMt6PHhImH3Xmr0NksKDvchWlpQQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.10.0': - resolution: {integrity: sha512-gFHJ+xBOo4G3WRlR1e/3G8A6/KZAH6zcE/hkLRCZTi/B9avAG365QhFA8uOGzTMqgTghpn7/fSnscW++dpMSAw==} + '@eslint/config-helpers@0.2.2': + resolution: {integrity: sha512-+GPzk8PlG0sPpzdU5ZvIRMPidzAnZDl/s9L+y13iodqvb8leL53bTannOrQ/Im7UkpsmFU5Ily5U60LWixnmLg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/core@0.11.0': - resolution: {integrity: sha512-DWUB2pksgNEb6Bz2fggIy1wh6fGgZP4Xyy/Mt0QZPiloKKXerbqq9D3SBQTlCRYOrcRPu4vuz+CGjwdfqxnoWA==} + '@eslint/core@0.14.0': + resolution: {integrity: sha512-qIbV0/JZr7iSDjqAc60IqbLdsj9GDt16xQtWD+B78d/HAlvysGdZZ6rpJHGAc2T0FQx1X6thsSPdnoiGKdNtdg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/eslintrc@3.2.0': - resolution: {integrity: sha512-grOjVNN8P3hjJn/eIETF1wwd12DdnwFDoyceUJLYYdkpbwq3nLi+4fqrTAONx7XDALqlL220wC/RHSC/QTI/0w==} + '@eslint/eslintrc@3.3.1': + resolution: {integrity: sha512-gtF186CXhIl1p4pJNGZw8Yc6RlshoePRvE0X91oPGb3vZ8pM3qOS9W9NGPat9LziaBV7XrJWGylNQXkGcnM3IQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/js@9.20.0': - resolution: {integrity: sha512-iZA07H9io9Wn836aVTytRaNqh00Sad+EamwOVJT12GTLw1VGMFV/4JaME+JjLtr9fiGaoWgYnS54wrfWsSs4oQ==} + '@eslint/js@9.27.0': + resolution: {integrity: sha512-G5JD9Tu5HJEu4z2Uo4aHY2sLV64B7CDMXxFzqzjl3NKd6RVzSXNoE80jk7Y0lJkTTkjiIhBAqmlYwjuBY3tvpA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@eslint/object-schema@2.1.6': resolution: {integrity: sha512-RBMg5FRL0I0gs51M/guSAj5/e14VQ4tpZnQNWwuDT66P14I43ItmPfIZRhO9fUVIPOAQXU47atlywZ/czoqFPA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@eslint/plugin-kit@0.2.5': - resolution: {integrity: sha512-lB05FkqEdUg2AA0xEbUz0SnkXT1LcCTa438W4IWTUh4hdOnVbQyOJ81OrDXsJk/LSiJHubgGEFoR5EHq1NsH1A==} + '@eslint/plugin-kit@0.3.1': + resolution: {integrity: sha512-0J+zgWxHN+xXONWIyPWKFMgVuJoZuGiIFu8yxk7RJjxkzpGmyja5wRFqZIVtjDVOQpV+Rw0iOAjYPE2eQyjr0w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} '@humanfs/core@0.19.1': @@ -824,12 +821,12 @@ packages: resolution: {integrity: sha512-JBxkERygn7Bv/GbN5Rv8Ul6LVknS+5Bp6RgDC/O8gEBU/yeH5Ui5C/OlWrTb6qct7LjjfT6Re2NxB0ln0yYybA==} engines: {node: '>=18.18'} - '@humanwhocodes/retry@0.4.1': - resolution: {integrity: sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==} + '@humanwhocodes/retry@0.4.3': + resolution: {integrity: sha512-bV0Tgo9K4hfPCek+aMAn81RppFKv2ySDQeMoSZuvTASywNTnVJCArCZE2FWqpvIatKu7VMRLWlR1EazvVhDyhQ==} engines: {node: '>=18.18'} - '@inquirer/confirm@5.1.5': - resolution: {integrity: sha512-ZB2Cz8KeMINUvoeDi7IrvghaVkYT2RB0Zb31EaLWOE87u276w4wnApv0SH2qWaJ3r0VSUa3BIuz7qAV2ZvsZlg==} + '@inquirer/confirm@5.1.10': + resolution: {integrity: sha512-FxbQ9giWxUWKUk2O5XZ6PduVnH2CZ/fmMKMBkH71MHJvWr7WL5AHKevhzF1L5uYWB2P548o1RzVxrNd3dpmk6g==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -837,8 +834,8 @@ packages: '@types/node': optional: true - '@inquirer/core@10.1.6': - resolution: {integrity: sha512-Bwh/Zk6URrHwZnSSzAZAKH7YgGYi0xICIBDFOqBQoXNNAzBHw/bgXgLmChfp+GyR3PnChcTbiCTZGC6YJNJkMA==} + '@inquirer/core@10.1.11': + resolution: {integrity: sha512-BXwI/MCqdtAhzNQlBEFE7CEflhPkl/BqvAuV/aK6lW3DClIfYVDWPP/kXuXHtBWC7/EEbNqd/1BGq2BGBBnuxw==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -846,12 +843,12 @@ packages: '@types/node': optional: true - '@inquirer/figures@1.0.10': - resolution: {integrity: sha512-Ey6176gZmeqZuY/W/nZiUyvmb1/qInjcpiZjXWi6nON+nxJpD1bxtSoBxNliGISae32n6OwbY+TSXPZ1CfS4bw==} + '@inquirer/figures@1.0.11': + resolution: {integrity: sha512-eOg92lvrn/aRUqbxRyvpEWnrvRuTYRifixHkYVpJiygTgVSBIHDqLh0SrMQXkafvULg3ck11V7xvR+zcgvpHFw==} engines: {node: '>=18'} - '@inquirer/type@3.0.4': - resolution: {integrity: sha512-2MNFrDY8jkFYc9Il9DgLsHhMzuHnOYM1+CUYVWbzu9oT0hC7V7EcYvdCKeoll/Fcci04A+ERZ9wcc7cQ8lTkIA==} + '@inquirer/type@3.0.6': + resolution: {integrity: sha512-/mKVCtVpyBu3IDarv0G+59KC4stsD5mDsGpYh+GKs1NZT88Jh52+cuoA1AtLk2Q0r/quNl+1cSUyLRHBFeD0XA==} engines: {node: '>=18'} peerDependencies: '@types/node': '>=18' @@ -982,8 +979,8 @@ packages: '@open-draft/until@2.1.0': resolution: {integrity: sha512-U69T3ItWHvLwGg5eJ0n3I62nWuE6ilHlmz7zM0npLBRvPRd7e6NYmg54vvRtP5mZG7kZqZCFVdsTWo7BPtBujg==} - '@playwright/test@1.50.1': - resolution: {integrity: sha512-Jii3aBg+CEDpgnuDxEp/h7BimHcUTDlpEtce89xEumlJ5ef2hqepZ+PWp1DDpYC/VO9fmWVI1IlEaoI5fK9FXQ==} + '@playwright/test@1.52.0': + resolution: {integrity: sha512-uh6W7sb55hl7D6vsAeA+V2p5JnlAqzhqFyF0VcJkKZXkgnFcVG9PziERRHQfPLfNGx1C292a4JqbWzhR8L4R1g==} engines: {node: '>=18'} hasBin: true @@ -1000,8 +997,8 @@ packages: rollup: optional: true - '@rollup/plugin-node-resolve@16.0.0': - resolution: {integrity: sha512-0FPvAeVUT/zdWoO0jnb/V5BlBsUSNfkIOtFHzMO4H9MOklrmQFY6FduVHKucNb/aTFxvnGhj4MNj/T1oNdDfNg==} + '@rollup/plugin-node-resolve@16.0.1': + resolution: {integrity: sha512-tk5YCxJWIG81umIvNkSod2qK5KyQW19qcBF/B78n1bjtOON6gzKoVeSzAE8yHCZEDmqkHKkxplExA8KzdJLJpA==} engines: {node: '>=14.0.0'} peerDependencies: rollup: ^2.78.0||^3.0.0||^4.0.0 @@ -1027,98 +1024,103 @@ packages: rollup: optional: true - '@rollup/rollup-android-arm-eabi@4.34.7': - resolution: {integrity: sha512-l6CtzHYo8D2TQ3J7qJNpp3Q1Iye56ssIAtqbM2H8axxCEEwvN7o8Ze9PuIapbxFL3OHrJU2JBX6FIIVnP/rYyw==} + '@rollup/rollup-android-arm-eabi@4.41.1': + resolution: {integrity: sha512-NELNvyEWZ6R9QMkiytB4/L4zSEaBC03KIXEghptLGLZWJ6VPrL63ooZQCOnlx36aQPGhzuOMwDerC1Eb2VmrLw==} cpu: [arm] os: [android] - '@rollup/rollup-android-arm64@4.34.7': - resolution: {integrity: sha512-KvyJpFUueUnSp53zhAa293QBYqwm94TgYTIfXyOTtidhm5V0LbLCJQRGkQClYiX3FXDQGSvPxOTD/6rPStMMDg==} + '@rollup/rollup-android-arm64@4.41.1': + resolution: {integrity: sha512-DXdQe1BJ6TK47ukAoZLehRHhfKnKg9BjnQYUu9gzhI8Mwa1d2fzxA1aw2JixHVl403bwp1+/o/NhhHtxWJBgEA==} cpu: [arm64] os: [android] - '@rollup/rollup-darwin-arm64@4.34.7': - resolution: {integrity: sha512-jq87CjmgL9YIKvs8ybtIC98s/M3HdbqXhllcy9EdLV0yMg1DpxES2gr65nNy7ObNo/vZ/MrOTxt0bE5LinL6mA==} + '@rollup/rollup-darwin-arm64@4.41.1': + resolution: {integrity: sha512-5afxvwszzdulsU2w8JKWwY8/sJOLPzf0e1bFuvcW5h9zsEg+RQAojdW0ux2zyYAz7R8HvvzKCjLNJhVq965U7w==} cpu: [arm64] os: [darwin] - '@rollup/rollup-darwin-x64@4.34.7': - resolution: {integrity: sha512-rSI/m8OxBjsdnMMg0WEetu/w+LhLAcCDEiL66lmMX4R3oaml3eXz3Dxfvrxs1FbzPbJMaItQiksyMfv1hoIxnA==} + '@rollup/rollup-darwin-x64@4.41.1': + resolution: {integrity: sha512-egpJACny8QOdHNNMZKf8xY0Is6gIMz+tuqXlusxquWu3F833DcMwmGM7WlvCO9sB3OsPjdC4U0wHw5FabzCGZg==} cpu: [x64] os: [darwin] - '@rollup/rollup-freebsd-arm64@4.34.7': - resolution: {integrity: sha512-oIoJRy3ZrdsXpFuWDtzsOOa/E/RbRWXVokpVrNnkS7npz8GEG++E1gYbzhYxhxHbO2om1T26BZjVmdIoyN2WtA==} + '@rollup/rollup-freebsd-arm64@4.41.1': + resolution: {integrity: sha512-DBVMZH5vbjgRk3r0OzgjS38z+atlupJ7xfKIDJdZZL6sM6wjfDNo64aowcLPKIx7LMQi8vybB56uh1Ftck/Atg==} cpu: [arm64] os: [freebsd] - '@rollup/rollup-freebsd-x64@4.34.7': - resolution: {integrity: sha512-X++QSLm4NZfZ3VXGVwyHdRf58IBbCu9ammgJxuWZYLX0du6kZvdNqPwrjvDfwmi6wFdvfZ/s6K7ia0E5kI7m8Q==} + '@rollup/rollup-freebsd-x64@4.41.1': + resolution: {integrity: sha512-3FkydeohozEskBxNWEIbPfOE0aqQgB6ttTkJ159uWOFn42VLyfAiyD9UK5mhu+ItWzft60DycIN1Xdgiy8o/SA==} cpu: [x64] os: [freebsd] - '@rollup/rollup-linux-arm-gnueabihf@4.34.7': - resolution: {integrity: sha512-Z0TzhrsNqukTz3ISzrvyshQpFnFRfLunYiXxlCRvcrb3nvC5rVKI+ZXPFG/Aa4jhQa1gHgH3A0exHaRRN4VmdQ==} + '@rollup/rollup-linux-arm-gnueabihf@4.41.1': + resolution: {integrity: sha512-wC53ZNDgt0pqx5xCAgNunkTzFE8GTgdZ9EwYGVcg+jEjJdZGtq9xPjDnFgfFozQI/Xm1mh+D9YlYtl+ueswNEg==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm-musleabihf@4.34.7': - resolution: {integrity: sha512-nkznpyXekFAbvFBKBy4nNppSgneB1wwG1yx/hujN3wRnhnkrYVugMTCBXED4+Ni6thoWfQuHNYbFjgGH0MBXtw==} + '@rollup/rollup-linux-arm-musleabihf@4.41.1': + resolution: {integrity: sha512-jwKCca1gbZkZLhLRtsrka5N8sFAaxrGz/7wRJ8Wwvq3jug7toO21vWlViihG85ei7uJTpzbXZRcORotE+xyrLA==} cpu: [arm] os: [linux] - '@rollup/rollup-linux-arm64-gnu@4.34.7': - resolution: {integrity: sha512-KCjlUkcKs6PjOcxolqrXglBDcfCuUCTVlX5BgzgoJHw+1rWH1MCkETLkLe5iLLS9dP5gKC7mp3y6x8c1oGBUtA==} + '@rollup/rollup-linux-arm64-gnu@4.41.1': + resolution: {integrity: sha512-g0UBcNknsmmNQ8V2d/zD2P7WWfJKU0F1nu0k5pW4rvdb+BIqMm8ToluW/eeRmxCared5dD76lS04uL4UaNgpNA==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-arm64-musl@4.34.7': - resolution: {integrity: sha512-uFLJFz6+utmpbR313TTx+NpPuAXbPz4BhTQzgaP0tozlLnGnQ6rCo6tLwaSa6b7l6gRErjLicXQ1iPiXzYotjw==} + '@rollup/rollup-linux-arm64-musl@4.41.1': + resolution: {integrity: sha512-XZpeGB5TKEZWzIrj7sXr+BEaSgo/ma/kCgrZgL0oo5qdB1JlTzIYQKel/RmhT6vMAvOdM2teYlAaOGJpJ9lahg==} cpu: [arm64] os: [linux] - '@rollup/rollup-linux-loongarch64-gnu@4.34.7': - resolution: {integrity: sha512-ws8pc68UcJJqCpneDFepnwlsMUFoWvPbWXT/XUrJ7rWUL9vLoIN3GAasgG+nCvq8xrE3pIrd+qLX/jotcLy0Qw==} + '@rollup/rollup-linux-loongarch64-gnu@4.41.1': + resolution: {integrity: sha512-bkCfDJ4qzWfFRCNt5RVV4DOw6KEgFTUZi2r2RuYhGWC8WhCA8lCAJhDeAmrM/fdiAH54m0mA0Vk2FGRPyzI+tw==} cpu: [loong64] os: [linux] - '@rollup/rollup-linux-powerpc64le-gnu@4.34.7': - resolution: {integrity: sha512-vrDk9JDa/BFkxcS2PbWpr0C/LiiSLxFbNOBgfbW6P8TBe9PPHx9Wqbvx2xgNi1TOAyQHQJ7RZFqBiEohm79r0w==} + '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': + resolution: {integrity: sha512-3mr3Xm+gvMX+/8EKogIZSIEF0WUu0HL9di+YWlJpO8CQBnoLAEL/roTCxuLncEdgcfJcvA4UMOf+2dnjl4Ut1A==} cpu: [ppc64] os: [linux] - '@rollup/rollup-linux-riscv64-gnu@4.34.7': - resolution: {integrity: sha512-rB+ejFyjtmSo+g/a4eovDD1lHWHVqizN8P0Hm0RElkINpS0XOdpaXloqM4FBkF9ZWEzg6bezymbpLmeMldfLTw==} + '@rollup/rollup-linux-riscv64-gnu@4.41.1': + resolution: {integrity: sha512-3rwCIh6MQ1LGrvKJitQjZFuQnT2wxfU+ivhNBzmxXTXPllewOF7JR1s2vMX/tWtUYFgphygxjqMl76q4aMotGw==} cpu: [riscv64] os: [linux] - '@rollup/rollup-linux-s390x-gnu@4.34.7': - resolution: {integrity: sha512-nNXNjo4As6dNqRn7OrsnHzwTgtypfRA3u3AKr0B3sOOo+HkedIbn8ZtFnB+4XyKJojIfqDKmbIzO1QydQ8c+Pw==} + '@rollup/rollup-linux-riscv64-musl@4.41.1': + resolution: {integrity: sha512-LdIUOb3gvfmpkgFZuccNa2uYiqtgZAz3PTzjuM5bH3nvuy9ty6RGc/Q0+HDFrHrizJGVpjnTZ1yS5TNNjFlklw==} + cpu: [riscv64] + os: [linux] + + '@rollup/rollup-linux-s390x-gnu@4.41.1': + resolution: {integrity: sha512-oIE6M8WC9ma6xYqjvPhzZYk6NbobIURvP/lEbh7FWplcMO6gn7MM2yHKA1eC/GvYwzNKK/1LYgqzdkZ8YFxR8g==} cpu: [s390x] os: [linux] - '@rollup/rollup-linux-x64-gnu@4.34.7': - resolution: {integrity: sha512-9kPVf9ahnpOMSGlCxXGv980wXD0zRR3wyk8+33/MXQIpQEOpaNe7dEHm5LMfyRZRNt9lMEQuH0jUKj15MkM7QA==} + '@rollup/rollup-linux-x64-gnu@4.41.1': + resolution: {integrity: sha512-cWBOvayNvA+SyeQMp79BHPK8ws6sHSsYnK5zDcsC3Hsxr1dgTABKjMnMslPq1DvZIp6uO7kIWhiGwaTdR4Og9A==} cpu: [x64] os: [linux] - '@rollup/rollup-linux-x64-musl@4.34.7': - resolution: {integrity: sha512-7wJPXRWTTPtTFDFezA8sle/1sdgxDjuMoRXEKtx97ViRxGGkVQYovem+Q8Pr/2HxiHp74SSRG+o6R0Yq0shPwQ==} + '@rollup/rollup-linux-x64-musl@4.41.1': + resolution: {integrity: sha512-y5CbN44M+pUCdGDlZFzGGBSKCA4A/J2ZH4edTYSSxFg7ce1Xt3GtydbVKWLlzL+INfFIZAEg1ZV6hh9+QQf9YQ==} cpu: [x64] os: [linux] - '@rollup/rollup-win32-arm64-msvc@4.34.7': - resolution: {integrity: sha512-MN7aaBC7mAjsiMEZcsJvwNsQVNZShgES/9SzWp1HC9Yjqb5OpexYnRjF7RmE4itbeesHMYYQiAtUAQaSKs2Rfw==} + '@rollup/rollup-win32-arm64-msvc@4.41.1': + resolution: {integrity: sha512-lZkCxIrjlJlMt1dLO/FbpZbzt6J/A8p4DnqzSa4PWqPEUUUnzXLeki/iyPLfV0BmHItlYgHUqJe+3KiyydmiNQ==} cpu: [arm64] os: [win32] - '@rollup/rollup-win32-ia32-msvc@4.34.7': - resolution: {integrity: sha512-aeawEKYswsFu1LhDM9RIgToobquzdtSc4jSVqHV8uApz4FVvhFl/mKh92wc8WpFc6aYCothV/03UjY6y7yLgbg==} + '@rollup/rollup-win32-ia32-msvc@4.41.1': + resolution: {integrity: sha512-+psFT9+pIh2iuGsxFYYa/LhS5MFKmuivRsx9iPJWNSGbh2XVEjk90fmpUEjCnILPEPJnikAU6SFDiEUyOv90Pg==} cpu: [ia32] os: [win32] - '@rollup/rollup-win32-x64-msvc@4.34.7': - resolution: {integrity: sha512-4ZedScpxxIrVO7otcZ8kCX1mZArtH2Wfj3uFCxRJ9NO80gg1XV0U/b2f/MKaGwj2X3QopHfoWiDQ917FRpwY3w==} + '@rollup/rollup-win32-x64-msvc@4.41.1': + resolution: {integrity: sha512-Wq2zpapRYLfi4aKxf2Xff0tN+7slj2d4R87WEzqw7ZLsVvO5zwYCIuEGSZYiK41+GlwUo1HiR+GdkLEJnCKTCw==} cpu: [x64] os: [win32] @@ -1128,10 +1130,6 @@ packages: '@sinclair/typebox@0.27.8': resolution: {integrity: sha512-+Fj43pSMwJs4KRrH/938Uf+uAELIgVBmQzg/q1YG10djyfA3TnrU8N8XzqCh/okZdszqBQTZf96idMfE5lnwTA==} - '@sindresorhus/merge-streams@2.3.0': - resolution: {integrity: sha512-LtoMMhxAlorcGhmFYI+LhPgbPZCkgP6ra1YL604EeF6U98pLlQ3iWIGMdWSC+vWmPBWBNgmDBAhnAobLROJmwg==} - engines: {node: '>=18'} - '@sinonjs/commons@3.0.1': resolution: {integrity: sha512-K3mCHKQ9sVh8o1C9cxkwxaOmXoAMlDxC1mYyHrjqOWEcBjYr76t96zL2zlj5dUGZ3HSw240X1qgH3Mjf1yJWpQ==} @@ -1162,14 +1160,14 @@ packages: '@types/babel__core@7.20.5': resolution: {integrity: sha512-qoQprZvz5wQFJwMDqeseRXWv3rqMvhgpbXFfVyWhbx9X47POIA6i/+dXefEmZKoAgOaTdaIgNSMqMIU61yRyzA==} - '@types/babel__generator@7.6.8': - resolution: {integrity: sha512-ASsj+tpEDsEiFr1arWrlN6V3mdfjRMZt6LtK/Vp/kreFLnr5QH5+DhvD5nINYZXzwJvXeGq+05iUXcAzVrqWtw==} + '@types/babel__generator@7.27.0': + resolution: {integrity: sha512-ufFd2Xi92OAVPYsy+P4n7/U7e68fex0+Ee8gSG9KX7eo084CWiQ4sdxktvdl0bOPupXtVJPY19zk6EwWqUQ8lg==} '@types/babel__template@7.4.4': resolution: {integrity: sha512-h/NUaSyG5EyxBIp8YRxo4RMe2/qQgvyowRwVMzhYhBCONbW8PUsg4lkFMrhgZhUe5z3L3MiLDuvyJ/CaPa2A8A==} - '@types/babel__traverse@7.20.6': - resolution: {integrity: sha512-r1bzfrm0tomOI8g1SzvCaQHo6Lcv6zu0EA+W2kHrt8dyrHQxGzBBL4kdkzIS+jBMV+EYcMAEAqXqYaLJq5rOZg==} + '@types/babel__traverse@7.20.7': + resolution: {integrity: sha512-dkO5fhS7+/oos4ciWxyEyjWe48zmG6wbCheo/G2ZnHx4fs3EU6YC6UM8rk56gAjNJ9P3MTH2jo5jb92/K6wbng==} '@types/cookie@0.6.0': resolution: {integrity: sha512-4Kh9a6B2bQciAhf7FSuMRRkUWecJgJu9nPnx3yzpsfXX/c50REIqpHY4C82bXP90qrLtXtkDxTZosYO3UpOwlA==} @@ -1177,8 +1175,8 @@ packages: '@types/debug@4.1.12': resolution: {integrity: sha512-vIChWdVG3LG1SMxEvI/AK+FWJthlrqlTu7fbrlywTkkaONwk/UAGaULXRlf8vkzFBLVm0zkMdCquhL5aOjhXPQ==} - '@types/estree@1.0.6': - resolution: {integrity: sha512-AYnb1nQyY49te+VRAVgmzfcgjYS91mY5P0TKUDCLEM+gNnA+3T6rWITXRLYCpahpqSQbN5cE+gHpnPyXjHWxcw==} + '@types/estree@1.0.7': + resolution: {integrity: sha512-w28IoSUCJpidD/TGviZwwMJckNESJZXFu7NBZ5YJ4mEUnNraUn9Pm8HSZm/jDF1pDWYKspWE7oVphigUPRakIQ==} '@types/graceful-fs@4.1.9': resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==} @@ -1213,8 +1211,8 @@ packages: '@types/ms@2.1.0': resolution: {integrity: sha512-GsCCIZDE/p3i96vtEqx+7dBUGXrc7zeSK3wwPHIaRThS+9OhWIXRqzs4d6k1SVU8g91DrNRWxWUGhp5KXQb2VA==} - '@types/node@22.13.4': - resolution: {integrity: sha512-ywP2X0DYtX3y08eFVx5fNIw7/uIv8hYUKgXoK8oayJlLnKcRfEYCxWMVE1XagUdVtCJlZT1AU4LXEABW+L1Peg==} + '@types/node@22.15.21': + resolution: {integrity: sha512-EV/37Td6c+MgKAbkcLG6vqZ2zEYHD7bvSrzqqs2RIhbA6w3x+Dqz8MZM3sP6kGTeLrdoOgKZe+Xja7tUB2DNkQ==} '@types/resolve@1.20.2': resolution: {integrity: sha512-60BCwRFOZCQhDncwQdxxeOEEkbc5dIMccYLwbxsS4TUNeVECQ/pBJ0j09mrHOl/JJvpRPGwO9SvE4nR2Nb/a4Q==} @@ -1237,51 +1235,51 @@ packages: '@types/yargs@17.0.33': resolution: {integrity: sha512-WpxBCKWPLr4xSsHgz511rFJAM+wS28w2zEO1QDNY5zM/S8ok70NNfztH0xwhqKyaK0OHCbN98LDAZuy1ctxDkA==} - '@typescript-eslint/eslint-plugin@8.24.0': - resolution: {integrity: sha512-aFcXEJJCI4gUdXgoo/j9udUYIHgF23MFkg09LFz2dzEmU0+1Plk4rQWv/IYKvPHAtlkkGoB3m5e6oUp+JPsNaQ==} + '@typescript-eslint/eslint-plugin@8.32.1': + resolution: {integrity: sha512-6u6Plg9nP/J1GRpe/vcjjabo6Uc5YQPAMxsgQyGC/I0RuukiG1wIe3+Vtg3IrSCVJDmqK3j8adrtzXSENRtFgg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: '@typescript-eslint/parser': ^8.0.0 || ^8.0.0-alpha.0 eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/parser@8.24.0': - resolution: {integrity: sha512-MFDaO9CYiard9j9VepMNa9MTcqVvSny2N4hkY6roquzj8pdCBRENhErrteaQuu7Yjn1ppk0v1/ZF9CG3KIlrTA==} + '@typescript-eslint/parser@8.32.1': + resolution: {integrity: sha512-LKMrmwCPoLhM45Z00O1ulb6jwyVr2kr3XJp+G+tSEZcbauNnScewcQwtJqXDhXeYPDEjZ8C1SjXm015CirEmGg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/scope-manager@8.24.0': - resolution: {integrity: sha512-HZIX0UByphEtdVBKaQBgTDdn9z16l4aTUz8e8zPQnyxwHBtf5vtl1L+OhH+m1FGV9DrRmoDuYKqzVrvWDcDozw==} + '@typescript-eslint/scope-manager@8.32.1': + resolution: {integrity: sha512-7IsIaIDeZn7kffk7qXC3o6Z4UblZJKV3UBpkvRNpr5NSyLji7tvTcvmnMNYuYLyh26mN8W723xpo3i4MlD33vA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/type-utils@8.24.0': - resolution: {integrity: sha512-8fitJudrnY8aq0F1wMiPM1UUgiXQRJ5i8tFjq9kGfRajU+dbPyOuHbl0qRopLEidy0MwqgTHDt6CnSeXanNIwA==} + '@typescript-eslint/type-utils@8.32.1': + resolution: {integrity: sha512-mv9YpQGA8iIsl5KyUPi+FGLm7+bA4fgXaeRcFKRDRwDMu4iwrSHeDPipwueNXhdIIZltwCJv+NkxftECbIZWfA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/types@8.24.0': - resolution: {integrity: sha512-VacJCBTyje7HGAw7xp11q439A+zeGG0p0/p2zsZwpnMzjPB5WteaWqt4g2iysgGFafrqvyLWqq6ZPZAOCoefCw==} + '@typescript-eslint/types@8.32.1': + resolution: {integrity: sha512-YmybwXUJcgGqgAp6bEsgpPXEg6dcCyPyCSr0CAAueacR/CCBi25G3V8gGQ2kRzQRBNol7VQknxMs9HvVa9Rvfg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - '@typescript-eslint/typescript-estree@8.24.0': - resolution: {integrity: sha512-ITjYcP0+8kbsvT9bysygfIfb+hBj6koDsu37JZG7xrCiy3fPJyNmfVtaGsgTUSEuTzcvME5YI5uyL5LD1EV5ZQ==} + '@typescript-eslint/typescript-estree@8.32.1': + resolution: {integrity: sha512-Y3AP9EIfYwBb4kWGb+simvPaqQoT5oJuzzj9m0i6FCY6SPvlomY2Ei4UEMm7+FXtlNJbor80ximyslzaQF6xhg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/utils@8.24.0': - resolution: {integrity: sha512-07rLuUBElvvEb1ICnafYWr4hk8/U7X9RDCOqd9JcAMtjh/9oRmcfN4yGzbPVirgMR0+HLVHehmu19CWeh7fsmQ==} + '@typescript-eslint/utils@8.32.1': + resolution: {integrity: sha512-DsSFNIgLSrc89gpq1LJB7Hm1YpuhK086DRDJSNrewcGvYloWW1vZLHBTIvarKZDcAORIy/uWNx8Gad+4oMpkSA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - '@typescript-eslint/visitor-keys@8.24.0': - resolution: {integrity: sha512-kArLq83QxGLbuHrTMoOEWO+l2MwsNS2TGISEdx8xgqpkbytB07XmlQyQdNDrCc1ecSqx0cnmhGvpX+VBwqqSkg==} + '@typescript-eslint/visitor-keys@8.32.1': + resolution: {integrity: sha512-ar0tjQfObzhSaW3C3QNmTc5ofj0hDoNQ5XWrCy6zDyabdr0TWhCkClp+rywGNj/odAFBVzzJrK4tEq5M4Hmu4w==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} abab@2.0.6: @@ -1300,8 +1298,8 @@ packages: resolution: {integrity: sha512-ueEepnujpqee2o5aIYnvHU6C0A42MNdsIDeqy5BydrkuC5R1ZuUFnm27EeFJGoEHJQgn3uleRvmTXaJgfXbt4g==} engines: {node: '>=0.4.0'} - acorn@8.14.0: - resolution: {integrity: sha512-cl669nCJTZBsL97OF4kUQm5g5hC2uihk0NxY3WENAC0TYdILVkAyHymAntgxGkl7K+t0cXIrH5siy5S4XkFycA==} + acorn@8.14.1: + resolution: {integrity: sha512-OvQ/2pUDKmgfCg++xsTX1wGxfTaszcHVcTctW4UJB4hibJx2HXxxO5UmVgyjMa+ZDsiaf5wWLXYpRWMmBI0QHg==} engines: {node: '>=0.4.0'} hasBin: true @@ -1353,8 +1351,8 @@ packages: resolution: {integrity: sha512-itaWrbYbqpGXkGhZPGUulwnhVf5Hpy1xiCFsGqyIGglbBxmG5vSjxQen3/WGOjPpNEv1RtBLKxbmVXm8HpJStQ==} engines: {node: '>= 0.4'} - array.prototype.findlastindex@1.2.5: - resolution: {integrity: sha512-zfETvRFA8o7EiNn++N5f/kaCw221hrpGsDmcpndVupkPzEc1Wuf3VgC0qby1BbHs7f5DVYjgtEU2LLh5bqeGfQ==} + array.prototype.findlastindex@1.2.6: + resolution: {integrity: sha512-F/TKATkzseUExPlfvmwQKGITM3DGTK+vkAsCZoDc5daVygbJBnjEUCbgkAvVFsgfXfX4YIqZ/27G3k3tdXrTxQ==} engines: {node: '>= 0.4'} array.prototype.flat@1.3.3: @@ -1376,8 +1374,8 @@ packages: asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} - autoprefixer@10.4.20: - resolution: {integrity: sha512-XY25y5xSv/wEoqzDyXXME4AFfkZI0P23z6Fs3YgymDnKJkCGOnkL0iTxCa85UTqaSgfcqyf3UA6+c7wUvx/16g==} + autoprefixer@10.4.21: + resolution: {integrity: sha512-O+A6LWV5LDHSJD3LjHYoNi4VLsj/Whi7k6zG12xTYaU4cQ8oxQGckXNX8cRHK5yOZ/ppVHe0ZBXGzSV9jXdVbQ==} engines: {node: ^10 || ^12 || >=14} hasBin: true peerDependencies: @@ -1391,8 +1389,8 @@ packages: resolution: {integrity: sha512-LEUDjgmdJoA3LqklSTwKYqkjcZ4HKc4ddIYGSAiSkr46NTjzg2L9RNB+lekO9P7Dlpa87+hBtzc2Fzn/+GUWMQ==} engines: {node: '>=4'} - axe-core@4.9.1: - resolution: {integrity: sha512-QbUdXJVTpvUTHU7871ppZkdOLBeGUKBQWHkHrvN2V9IQWGMt61zf3B45BtzjxEJzYuj0JBjBZP/hmYS/R9pmAw==} + axe-core@4.10.2: + resolution: {integrity: sha512-RE3mdQ7P3FRSe7eqCWoeQ/Z9QXrtniSjp1wUjt5nRC3WIpz5rSCve6o3fsZ2aCpJtrZjSZgjwXAoTO5k4tEI0w==} engines: {node: '>=4'} babel-jest@29.7.0: @@ -1413,8 +1411,8 @@ packages: resolution: {integrity: sha512-ESAc/RJvGTFEzRwOTT4+lNDk/GNHMkKbNzsvT0qKRfDyyYTskxB5rnU2njIDYVxXCBHHEI1c0YwHob3WaYujOg==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - babel-plugin-polyfill-corejs2@0.4.12: - resolution: {integrity: sha512-CPWT6BwvhrTO2d8QVorhTCQw9Y43zOu7G9HigcfxvepOU6b8o3tcWad6oVgZIsZCTt42FFv97aA7ZJsbM4+8og==} + babel-plugin-polyfill-corejs2@0.4.13: + resolution: {integrity: sha512-3sX/eOms8kd3q2KZ6DAhKPc0dgm525Gqq5NtWKZ7QYYZEv57OQ54KtblzJzH1lQF/eQxO8KjWGIK9IPUJNus5g==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1423,8 +1421,8 @@ packages: peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 - babel-plugin-polyfill-regenerator@0.6.3: - resolution: {integrity: sha512-LiWSbl4CRSIa5x/JAU6jZiG9eit9w6mz+yVMFwDE83LAWvt0AfGBoZ7HS/mkhrKuh2ZlzfVZYKoLjXdqw6Yt7Q==} + babel-plugin-polyfill-regenerator@0.6.4: + resolution: {integrity: sha512-7gD3pRadPrbjhjLyxebmx/WrFYcuSjZ0XbdUujQMZ/fcE9oeewk2U/7PCvez84UeuK3oSjmPZ0Ch0dlupQvGzw==} peerDependencies: '@babel/core': ^7.4.0 || ^8.0.0-0 <8.0.0 @@ -1459,8 +1457,8 @@ packages: resolution: {integrity: sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==} engines: {node: '>=8'} - browserslist@4.24.4: - resolution: {integrity: sha512-KDi1Ny1gSePi1vm0q4oxSF8b4DR44GF4BbmS2YdhPLOEqd8pDviZOGH/GsmRwoWJ2+5Lr085X7naowMwKHDG1A==} + browserslist@4.24.5: + resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -1478,8 +1476,8 @@ packages: resolution: {integrity: sha512-oKlSFMcMwpUg2ednkhQ454wfWiU/ul3CkJe/PEHcTKuiX6RpbehUiFMXu13HalGZxfUwCQzZG747YXBn1im9ww==} engines: {node: '>= 0.4'} - call-bound@1.0.3: - resolution: {integrity: sha512-YTd+6wGlNlPxSuri7Y6X8tY2dmm12UMH66RpKMhiX6rsk5wXXnYgbUcOt8kiS31/AjfoTOvCsE+w8nZQLQnzHA==} + call-bound@1.0.4: + resolution: {integrity: sha512-+ys997U96po4Kx/ABpBCqhA9EuxJaQWDQg7295H4hBphv3IZg0boBKuwYpt4YXp6MZ5AmZQnU/tyMTlRpaSejg==} engines: {node: '>= 0.4'} callsites@3.1.0: @@ -1494,8 +1492,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001699: - resolution: {integrity: sha512-b+uH5BakXZ9Do9iK+CkDmctUSEqZl+SP056vc5usa0PL+ev5OHw003rZXcnjNDv3L8P5j6rwT6C0BPKSikW08w==} + caniuse-lite@1.0.30001718: + resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} chalk@3.0.0: resolution: {integrity: sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==} @@ -1563,8 +1561,8 @@ packages: resolution: {integrity: sha512-yki5XnKuf750l50uGTllt6kKILY4nQ1eNIQatoXEByZ5dWgnKqbnqmTrBE5B4N7lrMJKQ2ytWMiTO2o0v6Ew/w==} engines: {node: '>= 0.6'} - core-js-compat@3.40.0: - resolution: {integrity: sha512-0XEDpr5y5mijvw8Lbc6E5AkjrHfp7eEoPlu36SWeAbcL8fn1G1ANe8DBlo2XoNN89oVpxWwOjYIPVzR4ZvsKCQ==} + core-js-compat@3.42.0: + resolution: {integrity: sha512-bQasjMfyDGyaeWKBIu33lHh9qlSR0MFE/Nmc6nMjf/iU9b3rSMdAYz1Baxrv4lPdGUsTqZudHA4jIGSJy0SWZQ==} create-jest@29.7.0: resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==} @@ -1620,8 +1618,8 @@ packages: supports-color: optional: true - debug@4.4.0: - resolution: {integrity: sha512-6WTZ/IxCY/T6BALoZHaE4ctp9xm+Z5kY/pzYaCHRFeyVhojxlrm+46y68HA6hr0TcwEssoxNiDEUJQjfPZ/RYA==} + debug@4.4.1: + resolution: {integrity: sha512-KcKCqiftBJcZr++7ykoDIEwSa3XWowTfNPo92BYxjXiyYEVrUQh2aLyhxBCwww+heortUFxEJYcRzosstTEBYQ==} engines: {node: '>=6.0'} peerDependencies: supports-color: '*' @@ -1632,8 +1630,8 @@ packages: decimal.js@10.5.0: resolution: {integrity: sha512-8vDa8Qxvr/+d94hSh5P3IJwI5t8/c0KsMp+g8bNw9cY2icONa5aPfvKeieW1WlG0WQYwwhJ7mjui2xtiePQSXw==} - dedent@1.5.3: - resolution: {integrity: sha512-NHQtfOOW68WD8lgypbLA5oT+Bt0xXJhiYvoR6SmmNXZfpzOGXwdKWmcwG8N7PwVVWV3eF/68nmD9BaJSsTBhyQ==} + dedent@1.6.0: + resolution: {integrity: sha512-F1Z+5UCFpmQUzJa11agbyPVMbpgT/qA3/SKyJ1jyBgm7dUcUEa8v9JwDkerSQXfakBwFljIxhOJqGkjUwZ9FSA==} peerDependencies: babel-plugin-macros: ^3.1.0 peerDependenciesMeta: @@ -1659,9 +1657,9 @@ packages: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} - dependency-graph@0.11.0: - resolution: {integrity: sha512-JeMq7fEshyepOWDfcfHK06N3MhyPhz++vtqWhMT5O9A3K42rdsEDpfdVqjaqaAhsw6a+ZqeDvQVtD0hFHQWrzg==} - engines: {node: '>= 0.6.0'} + dependency-graph@1.0.0: + resolution: {integrity: sha512-cW3gggJ28HZ/LExwxP2B++aiKxhJXMSIt9K48FOXQkm+vuG5gyatXnLsONRJdzO/7VfjDIiaOOa/bs4l464Lwg==} + engines: {node: '>=4'} dequal@2.0.3: resolution: {integrity: sha512-0je+qPKHEMohvfRTCEo3CrPG6cAzAYgmzKyxRiYSSDkS6eGJdyVJm7WaYA5ECaAD9wLB2T4EEeymA5aFVcYXCA==} @@ -1694,8 +1692,8 @@ packages: resolution: {integrity: sha512-KIN/nDJBQRcXw0MLVhZE9iQHmG68qAVIBg9CqmUYjmQIhgij9U5MFvrqkUL5FbtyyzZuOeOt0zdeRe4UY7ct+A==} engines: {node: '>= 0.4'} - electron-to-chromium@1.5.101: - resolution: {integrity: sha512-L0ISiQrP/56Acgu4/i/kfPwWSgrzYZUnQrC0+QPFuhqlLP1Ir7qzPPDVS9BcKIyWTRU8+o6CC8dKw38tSWhYIA==} + electron-to-chromium@1.5.155: + resolution: {integrity: sha512-ps5KcGGmwL8VaeJlvlDlu4fORQpv3+GIcF5I3f9tUKUlJ/wsysh6HU8P5L1XWRYeXfA0oJd4PyM8ds8zTFf6Ng==} emittery@0.13.1: resolution: {integrity: sha512-DeWwawk6r5yR9jFgnDKYt4sLS0LmHJJi3ZOnb5/JdbYwj3nW+FxQnHIjhBKz8YLC7oRNPVM9NQ47I3CVx34eqQ==} @@ -1704,8 +1702,8 @@ packages: emoji-regex@8.0.0: resolution: {integrity: sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==} - entities@4.5.0: - resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + entities@6.0.0: + resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} engines: {node: '>=0.12'} error-ex@1.3.2: @@ -1813,11 +1811,11 @@ packages: jest: optional: true - eslint-plugin-perfectionist@4.9.0: - resolution: {integrity: sha512-76lDfJnonOcXGW3bEXuqhEGId0LrOlvIE1yLHvK/eKMMPOc0b43KchAIR2Bdbqlg+LPXU5/Q+UzuzkO+cWHT6w==} + eslint-plugin-perfectionist@4.13.0: + resolution: {integrity: sha512-dsPwXwV7IrG26PJ+h1crQ1f5kxay/gQAU0NJnbVTQc91l5Mz9kPjyIZ7fXgie+QSgi8a+0TwGbfaJx+GIhzuoQ==} engines: {node: ^18.0.0 || >=20.0.0} peerDependencies: - eslint: '>=8.0.0' + eslint: '>=8.45.0' eslint-plugin-playwright@2.2.0: resolution: {integrity: sha512-qSQpAw7RcSzE3zPp8FMGkthaCWovHZ/BsXtpmnGax9vQLIovlh1bsZHEa2+j2lv9DWhnyeLM/qZmp7ffQZfQvg==} @@ -1825,14 +1823,14 @@ packages: peerDependencies: eslint: '>=8.40.0' - eslint-plugin-testing-library@7.1.1: - resolution: {integrity: sha512-nszC833aZPwB6tik1nMkbFqmtgIXTT0sfJEYs0zMBKMlkQ4to2079yUV96SvmLh00ovSBJI4pgcBC1TiIP8mXg==} + eslint-plugin-testing-library@7.2.1: + resolution: {integrity: sha512-sZFbfPaWt+4M1tSY6bc9zyTHAEYR4RNoe7XppcAx/+PQpps+ZGEAmAiTcMykcxRFPNIsbaaIOGinTcY6++ttOA==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: ^9.14.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - eslint-scope@8.2.0: - resolution: {integrity: sha512-PHlWUfG6lvPc3yvP5A4PNyBL1W8fkDUccmI21JUu/+GKZBoH/W5u6usENXUrWFRsyoW5ACUjFGgAFQp5gUlb/A==} + eslint-scope@8.3.0: + resolution: {integrity: sha512-pUNxi75F8MJ/GdeKtVLSbYg4ZI34J6C0C7sbL4YOp2exGwen7ZsuBqKzUhXd0qMQ362yET3z+uPwKeg/0C2XCQ==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} eslint-visitor-keys@3.4.3: @@ -1843,8 +1841,8 @@ packages: resolution: {integrity: sha512-UyLnSehNt62FFhSwjZlHmeokpRK59rcz29j+F1/aDgbkbRTk7wIc9XzdoasMUbRNKDM0qQt/+BJ4BrpFeABemw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} - eslint@9.20.1: - resolution: {integrity: sha512-m1mM33o6dBUjxl2qb6wv6nGNwCAsns1eKtaQ4l/NPHeTvhiUPbtdfMyktxN4B3fgHIgsYh1VT3V9txblpQHq+g==} + eslint@9.27.0: + resolution: {integrity: sha512-ixRawFQuMB9DZ7fjU3iGGganFDp3+45bPOdaRurcFHSXO1e/sYwUX/FtQZpLZJR6SjMoJH8hR2pPEAfDyCoU2Q==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} hasBin: true peerDependencies: @@ -1906,12 +1904,20 @@ packages: fast-levenshtein@2.0.6: resolution: {integrity: sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==} - fastq@1.19.0: - resolution: {integrity: sha512-7SFSRCNjBQIZH/xZR3iy5iQYR8aGBE0h3VG6/cwlbrpdciNYBMotQav8c1XI3HjHH+NikUpP53nPdlZSdWmFzA==} + fastq@1.19.1: + resolution: {integrity: sha512-GwLTyxkCXjXbxqIhTsMI2Nui8huMPtnxg7krajPJAjnEG/iiOS7i+zCtWGZR9G0NBKbXKh6X9m9UIsYX/N6vvQ==} fb-watchman@2.0.2: resolution: {integrity: sha512-p5161BqbuCaSnB8jIbzQHOlpgsPmK5rJVDfDKO91Axs5NC1uu3HRQm6wt9cd9/+GtQQIO53JdGXXoyDpTAsgYA==} + fdir@6.4.4: + resolution: {integrity: sha512-1NZP+GK4GfuAv3PqKvxQRDMjdSRZjnkq7KfhlNrCNNlZ0ygQFpebfrnfnq/W7fpUnAv9aGWmY1zKx7FYL3gwhg==} + peerDependencies: + picomatch: ^3 || ^4 + peerDependenciesMeta: + picomatch: + optional: true + file-entry-cache@8.0.0: resolution: {integrity: sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==} engines: {node: '>=16.0.0'} @@ -1932,8 +1938,8 @@ packages: resolution: {integrity: sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==} engines: {node: '>=16'} - flatted@3.3.2: - resolution: {integrity: sha512-AiwGJM8YcNOaobumgtng+6NHuOqC3A7MixFeDafM3X9cIUM+xUXoS5Vfgf+OihAYe20fxqNM9yPBXJzRtZ/4eA==} + flatted@3.3.3: + resolution: {integrity: sha512-GX+ysw4PBCz0PzosHDepZGANEuFCMLrnRTiEy9McGjmkCQYwRq4A/X786G/fjM/+OjsWSU1ZrY5qyARZmO/uwg==} for-each@0.3.5: resolution: {integrity: sha512-dKx12eRCVIzqCxFGplyFKJMPvLEWgmNtUrpTiJIR5u97zEhRG8ySrtboPHZXx7daLxQVrl643cTzbab2tkQjxg==} @@ -1984,8 +1990,8 @@ packages: resolution: {integrity: sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==} engines: {node: 6.* || 8.* || >= 10.*} - get-intrinsic@1.2.7: - resolution: {integrity: sha512-VW6Pxhsrk0KAOqs3WEd0klDiF/+V7gQOpAvY1jVU/LHmaD/kQO4523aiJuikX/QAKYiW6x8Jh+RJej1almdtCA==} + get-intrinsic@1.3.0: + resolution: {integrity: sha512-9fSjSaos/fRIVIp+xSJlE6lfwhES7LNtKaCBIamHsjr2na1BiABJPo0mOjjz8GJDURarmCPGqaiVg5mfjb98CQ==} engines: {node: '>= 0.4'} get-package-type@0.1.0: @@ -1996,10 +2002,6 @@ packages: resolution: {integrity: sha512-sTSfBjoXBp89JvIKIefqw7U2CCebsc74kiY6awiGogKtoSGbgjYE/G/+l9sF3MWFPNc9IcoOC4ODfKHfxFmp0g==} engines: {node: '>= 0.4'} - get-stdin@9.0.0: - resolution: {integrity: sha512-dVKBjfWisLAicarI2Sf+JuBE/DghV4UzNAVe9yhEJuzeREd3JhOTE9cUaJTeSa77fsbQUK3pcOpJfM59+VKZaA==} - engines: {node: '>=12'} - get-stream@6.0.1: resolution: {integrity: sha512-ts6Wi+2j3jQjqi70w5AlN8DFnkSwC+MqmxEzdEALB2qXZYV3X/b1CTfgPLGJNMeAWxdPfU8FO1ms3NUfaHCPYg==} engines: {node: '>=10'} @@ -2039,10 +2041,6 @@ packages: resolution: {integrity: sha512-DpLKbNU4WylpxJykQujfCcwYWiV/Jhm50Goo0wrVILAv5jOr9d+H+UR3PhSCD2rCCEIg0uc+G+muBTwD54JhDQ==} engines: {node: '>= 0.4'} - globby@14.1.0: - resolution: {integrity: sha512-0Ia46fDOaT7k4og1PDW4YbodWWr3scS2vAr2lTbsplOt2WkKp0vQbkI9wKis/T5LV/dqPjO3bpS/z6GTJB82LA==} - engines: {node: '>=18'} - gopd@1.2.0: resolution: {integrity: sha512-ZUKRh6/kUFoAiTAtTYPZJ3hw9wNxx+BIBOijnlG9PnrJsCcSjs1wyyD6vJpaYtgnzDrKYRSqf3OO6Rfa93xsRg==} engines: {node: '>= 0.4'} @@ -2053,8 +2051,8 @@ packages: graphemer@1.4.0: resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} - graphql@16.10.0: - resolution: {integrity: sha512-AjqGKbDGUFRKIRCP9tCKiIGHyriz2oHEbPIbEtcSLSs4YjReZOIPQQWek4+6hjw62H9QShXHyaGivGiYVLeYFQ==} + graphql@16.11.0: + resolution: {integrity: sha512-mS1lbMsxgQj6hge1XZ6p7GPhbrtFwUFYi3wRzXAC/FmYnyXMTvvI3td3rjmQ2u8ewXueaSvRPWaEcgVVOT9Jnw==} engines: {node: ^12.22.0 || ^14.16.0 || ^16.0.0 || >=17.0.0} has-bigints@1.1.0: @@ -2114,8 +2112,8 @@ packages: resolution: {integrity: sha512-hsBTNUqQTDwkWtcdYI2i06Y/nUBEsNEDJKjWdigLvegy8kDuJAS8uRlpkkcQpyEXL0Z/pjDy5HBmMjRCJ2gq+g==} engines: {node: '>= 4'} - ignore@7.0.3: - resolution: {integrity: sha512-bAH5jbK/F3T3Jls4I0SO1hmPR0dKU0a7+SY6n1yzRtG54FLO8d6w/nxLFX2Nb7dBu6cCWXPaAME6cYqFUMmuCA==} + ignore@7.0.4: + resolution: {integrity: sha512-gJzzk+PQNznz8ysRrC0aOkBNVRBDtE1n53IqyqEf3PXrYwomFs5q4pGMizBMJF+ykh03insJ27hB8gSrD2Hn8A==} engines: {node: '>= 4'} import-fresh@3.3.1: @@ -2300,8 +2298,8 @@ packages: resolution: {integrity: sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==} engines: {node: '>=8'} - jest-axe@9.0.0: - resolution: {integrity: sha512-Xt7O0+wIpW31lv0SO1wQZUTyJE7DEmnDEZeTt9/S9L5WUywxrv8BrgvTuQEqujtfaQOcJ70p4wg7UUgK1E2F5g==} + jest-axe@10.0.0: + resolution: {integrity: sha512-9QR0M7//o5UVRnEUUm68IsGapHrcKGakYy9dKWWMX79LmeUKguDI6DREyljC5I13j78OUmtKLF5My6ccffLFBg==} engines: {node: '>= 16.0.0'} jest-changed-files@29.7.0: @@ -2359,9 +2357,9 @@ packages: resolution: {integrity: sha512-DOSwCRqXirTOyheM+4d5YZOrWcdu0LNZ87ewUoywbcb2XR4wKgqiG8vNeYwhjFMbEkfju7wx2GYH0P2gevGvFw==} engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} - jest-extended@4.0.2: - resolution: {integrity: sha512-FH7aaPgtGYHc9mRjriS0ZEHYM5/W69tLrFTIdzm+yJgeoCmmrSB/luSfMSqWP9O29QWHPEmJ4qmU6EwsZideog==} - engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0} + jest-extended@5.0.3: + resolution: {integrity: sha512-sxrNxTvHd5S0qFSchkYdr7WhLQb55qhr5sHcllPaPXXGhv0kXy/0VTtFbrFUPOLHyZRDpNoEmhzcPRT7b90MZA==} + engines: {node: ^18.12.0 || ^20.9.0 || ^22.11.0 || >=23.0.0} peerDependencies: jest: '>=27.2.5' peerDependenciesMeta: @@ -2602,8 +2600,8 @@ packages: resolution: {integrity: sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==} engines: {node: '>= 0.6'} - mime@4.0.6: - resolution: {integrity: sha512-4rGt7rvQHBbaSOF9POGkk1ocRP16Md1x36Xma8sz8h8/vfCUI2OtEIeCqe4Ofes853x4xDoPiFLIT47J5fI/7A==} + mime@4.0.7: + resolution: {integrity: sha512-2OfDPL+e03E0LrXaGYOtTFIYhiuzep94NSsuhrNULq+stylcJedcHdzHtz0atMUuGwJfFYs0YL5xeC/Ca2x0eQ==} engines: {node: '>=16'} hasBin: true @@ -2628,8 +2626,8 @@ packages: ms@2.1.3: resolution: {integrity: sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==} - msw@2.7.0: - resolution: {integrity: sha512-BIodwZ19RWfCbYTxWTUfTXc+sg4OwjCAgxU1ZsgmggX/7S3LdUifsbUPJs61j0rWb19CZRGY5if77duhc0uXzw==} + msw@2.8.4: + resolution: {integrity: sha512-GLU8gx0o7RBG/3x/eTnnLd5S5ZInxXRRRMN8GJwaPZ4jpJTxzQfWGvwr90e8L5dkKJnz+gT4gQYCprLy/c4kVw==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -2642,8 +2640,8 @@ packages: resolution: {integrity: sha512-WWdIxpyjEn+FhQJQQv9aQAYlHoNVdzIzUySNV1gHUPDSdZJ3yZn7pAAbQcV7B56Mvu881q9FZV+0Vx2xC44VWA==} engines: {node: ^18.17.0 || >=20.5.0} - nanoid@3.3.8: - resolution: {integrity: sha512-WNLf5Sd8oZxOm+TzppcYk8gVOgP+l58xNy58D0nbUnOxOWRWvlcCV4kUF7ltmI6PsrLl/BgKEyS4mqsGChFN0w==} + nanoid@3.3.11: + resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} hasBin: true @@ -2672,8 +2670,8 @@ packages: resolution: {integrity: sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw==} engines: {node: '>=8'} - nwsapi@2.2.16: - resolution: {integrity: sha512-F1I/bimDpj3ncaNDhfyMWuFqmQDBwDB0Fogc2qpL3BWvkQteFD/8BzWuIRl83rq0DXfm8SGt/HFhLXZyljTXcQ==} + nwsapi@2.2.20: + resolution: {integrity: sha512-/ieB+mDe4MrrKMT8z+mQL8klXydZWGR5Dowt4RAGKbJ3kIGEx3X4ljUo+6V73IXtUPWgfOlU5B9MlGxFO5T+cA==} object-inspect@1.13.4: resolution: {integrity: sha512-W67iLl4J2EXEGTbfeHCffrjDfitvLANg0UlX3wFUUSTx92KXRFegMHUVgSqE+wvhAbi4WqjGg9czysTV2Epbew==} @@ -2749,8 +2747,8 @@ packages: resolution: {integrity: sha512-ayCKvm/phCGxOkYRSCM82iDwct8/EonSEgCSxWxD7ve6jHggsFl4fZVQBPRNgQoKiuV/odhFrGzQXZwbifC8Rg==} engines: {node: '>=8'} - parse5@7.2.1: - resolution: {integrity: sha512-BuBYQYlv1ckiPdQi/ohiivi9Sagc9JG+Ozs0r7b/0iK3sKmrb0b9FdWdBbOdx6hBCM/F9Ir82ofnBhtZOjCRPQ==} + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} path-exists@4.0.0: resolution: {integrity: sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w==} @@ -2770,10 +2768,6 @@ packages: path-to-regexp@6.3.0: resolution: {integrity: sha512-Yhpw4T9C6hPpgPeA28us07OJeqZ5EzQTkbfwuhsUg0c237RomFoETJgmp2sa3F/41gfLE6G5cqcYwznmeEeOlQ==} - path-type@6.0.0: - resolution: {integrity: sha512-Vj7sf++t5pBD637NSfkxpHSMfWaeig5+DKWLhcqIYx6mWQz5hdJTGDVMQiJcw1ZYkhs7AazKDGpRVji1LJCZUQ==} - engines: {node: '>=18'} - picocolors@1.1.1: resolution: {integrity: sha512-xceH2snhtb5M9liqDsmEw56le376mTZkEX/jEb/RxNFyegNul7eNslCXP9FDj/Lcu0X8KEyMceP2ntpaHrDEVA==} @@ -2793,21 +2787,21 @@ packages: resolution: {integrity: sha512-uB80kBFb/tfd68bVleG9T5GGsGPjJrLAUpR5PZIrhBnIaRTQRjqdJSsIKkOP6OAIFbj7GOrcudc5pNjZ+geV2g==} engines: {node: '>=6'} - pirates@4.0.6: - resolution: {integrity: sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==} + pirates@4.0.7: + resolution: {integrity: sha512-TfySrs/5nm8fQJDcBDuUng3VOUKsd7S+zqvbOTiGXHfxX4wK31ard+hoNuvkicM/2YFzlpDgABOevKSsB4G/FA==} engines: {node: '>= 6'} pkg-dir@4.2.0: resolution: {integrity: sha512-HRDzbaKjC+AOWVXxAU/x54COGeIv9eb+6CkDSQoNTt4XyWoIJvuPsXizxu/Fr23EiekbtZwmh1IcIG/l/a10GQ==} engines: {node: '>=8'} - playwright-core@1.50.1: - resolution: {integrity: sha512-ra9fsNWayuYumt+NiM069M6OkcRb1FZSK8bgi66AtpFoWkg2+y0bJSNmkFrWhMbEBbVKC/EruAHH3g0zmtwGmQ==} + playwright-core@1.52.0: + resolution: {integrity: sha512-l2osTgLXSMeuLZOML9qYODUQoPPnUsKsb5/P6LJ2e6uPKXUdPK5WYhN4z03G+YNbWmGDY4YENauNu4ZKczreHg==} engines: {node: '>=18'} hasBin: true - playwright@1.50.1: - resolution: {integrity: sha512-G8rwsOQJ63XG6BbKj2w5rHeavFjy5zynBA9zsJMMtBoe/Uf757oG12NXz6e6OirF7RCrTVAKFXbLmn1RbL7Qaw==} + playwright@1.52.0: + resolution: {integrity: sha512-JAwMNMBlxJ2oD1kce4KPtMkDeKGHQstdpFPcPH3maElAXon/QZeTvtsfXmTMRyO9TslfoYOXkSsvao2nE1ilTw==} engines: {node: '>=18'} hasBin: true @@ -2815,8 +2809,8 @@ packages: resolution: {integrity: sha512-/+5VFTchJDoVj3bhoqi6UeymcD00DAwb1nJwamzPvHEszJ4FpF6SNNbUbOS8yI56qHzdV8eK0qEfOSiodkTdxg==} engines: {node: '>= 0.4'} - postcss-cli@11.0.0: - resolution: {integrity: sha512-xMITAI7M0u1yolVcXJ9XTZiO9aO49mcoKQy6pCDFdMh9kGqhzLVpWxeD/32M/QBmkhcGypZFFOLNLmIW4Pg4RA==} + postcss-cli@11.0.1: + resolution: {integrity: sha512-0UnkNPSayHKRe/tc2YGW6XnSqqOA9eqpiRMgRlV1S6HdGi16vwJBx7lviARzbV1HpQHqLLRH3o8vTcB0cLc+5g==} engines: {node: '>=18'} hasBin: true peerDependencies: @@ -2880,16 +2874,16 @@ packages: postcss-value-parser@4.2.0: resolution: {integrity: sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==} - postcss@8.5.2: - resolution: {integrity: sha512-MjOadfU3Ys9KYoX0AdkBlFEF1Vx37uCCeN4ZHnmwm9FfpbsGWMZeBLMmmpY+6Ocqod7mkdZ0DT31OlbsFrLlkA==} + postcss@8.5.3: + resolution: {integrity: sha512-dle9A3yYxlBSrt8Fu+IpjGT8SY8hN0mlaA6GY8t0P5PjIOZemULz/E2Bnm/2dcUOena75OTNkHI76uZBNUUq3A==} engines: {node: ^10 || ^12 || >=14} prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} - prettier@3.5.1: - resolution: {integrity: sha512-hPpFQvHwL3Qv5AdRvBFMhnKo4tYxp0ReXiPn2bxkiohEX6mBeBwEpBSQTkD458RaaDKQMYSp4hX4UtfUTA5wDw==} + prettier@3.5.3: + resolution: {integrity: sha512-QQtaxnoDJeAkDvDKWCLiwIXkTgRhwYDEQCghU9Z6q03iyek/rxRh/2lC3HB7P8sWT2xC/y5JDctPLBIGzHKbhw==} engines: {node: '>=14'} hasBin: true @@ -2956,12 +2950,6 @@ packages: regenerate@1.4.2: resolution: {integrity: sha512-zrceR/XhGYU/d/opr2EKO7aRHUeiBI8qjtfHqADTwZd6Szfy16la6kqD0MIUs5z5hx6AaKa+PixpPrR289+I0A==} - regenerator-runtime@0.14.1: - resolution: {integrity: sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==} - - regenerator-transform@0.15.2: - resolution: {integrity: sha512-hfMp2BoF0qOk3uc5V20ALGDS2ddjQaLrdl7xrGXvAIow7qeWRM2VA2HuCHkUKk9slq3VwEwLNK3DFBqDfPGYtg==} - regexp.prototype.flags@1.5.4: resolution: {integrity: sha512-dYqgNSZbDwkaJ2ceRd9ojCGjBq+mOm9LmtXnAnEGyHhN/5R7iDW2TRw3h+o/jCFxus3P2LfWIIiwowAjANm7IA==} engines: {node: '>= 0.4'} @@ -3009,15 +2997,15 @@ packages: engines: {node: '>= 0.4'} hasBin: true - reusify@1.0.4: - resolution: {integrity: sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==} + reusify@1.1.0: + resolution: {integrity: sha512-g6QUff04oZpHs0eG5p83rFLhHeV00ug/Yf9nZM6fLeUrPguBTkTQOdpAWWspMh55TZfVQDPaN3NQJfbVRAxdIw==} engines: {iojs: '>=1.0.0', node: '>=0.10.0'} rollup-plugin-serve@3.0.0: resolution: {integrity: sha512-DjVRhbwC0OgP1Q1sj8Lvx12ee60UTZM767kkjT61sYKHw/wLpANAw3VZN5ZMa5NlvO8bYpfTaqiUrW+icAjXFg==} - rollup@4.34.7: - resolution: {integrity: sha512-8qhyN0oZ4x0H6wmBgfKxJtxM7qS98YJ0k0kNh5ECVtuchIJ7z9IVVvzpmtQyT10PXKMtBxYr1wQ5Apg8RS8kXQ==} + rollup@4.41.1: + resolution: {integrity: sha512-cPmwD3FnFv8rKMBc1MxWCwVQFxwf1JEmSX3iQXrRVVG15zerAIXRjMFVWnd5Q5QvgKF7Aj+5ykXFhUl+QGnyOw==} engines: {node: '>=18.0.0', npm: '>=8.0.0'} hasBin: true @@ -3054,8 +3042,8 @@ packages: resolution: {integrity: sha512-BR7VvDCVHO+q2xBEWskxS6DJE1qRnb7DxzUrogb71CWoSficBxYsiAGd+Kl0mmq/MprG9yArRkyrQxTO6XjMzA==} hasBin: true - semver@7.7.1: - resolution: {integrity: sha512-hlq8tAfn0m/61p4BVRcPzIGr6LKiMwo4VM6dGi6pt4qcRkmNzTcWq6eCEjEh+qXjkMDvPlOFFSGwQjoEa6gyMA==} + semver@7.7.2: + resolution: {integrity: sha512-RF0Fw+rO5AMf9MAyaRXI4AV0Ulj5lMHqVxxdSgiVbixSCXoEmmX/jk0CuJw4+3SqroYO9VoUh+HcuJivvtJemA==} engines: {node: '>=10'} hasBin: true @@ -3210,8 +3198,8 @@ packages: symbol-tree@3.2.4: resolution: {integrity: sha512-9QNk5KwDF+Bvz+PyObkmSYjI5ksVUYtjW7AU22r2NKcfLJcXp96hkDWU3+XndOsUb+AQ9QhfzfCT2O+CNWT5Tw==} - terser@5.39.0: - resolution: {integrity: sha512-LBAhFyLho16harJoWMg/nZsQYgTrg5jXOn2nCYjRUcZZEdE3qa2zb8QEDRUGVZBW4rlazf2fxkg8tztybTaqWw==} + terser@5.39.2: + resolution: {integrity: sha512-yEPUmWve+VA78bI71BW70Dh0TuV4HHd+I5SHOAfS1+QBOmvmCiiffgjR8ryyEd3KIfvPGFqoADt8LdQ6XpXIvg==} engines: {node: '>=10'} hasBin: true @@ -3222,6 +3210,10 @@ packages: thenby@1.3.4: resolution: {integrity: sha512-89Gi5raiWA3QZ4b2ePcEwswC3me9JIg+ToSgtE0JWeCynLnLxNr/f9G+xfo9K+Oj4AFdom8YNJjibIARTJmapQ==} + tinyglobby@0.2.13: + resolution: {integrity: sha512-mEwzpUgrLySlveBwEVDMKk5B57bhLPYovRfPAXD5gA/98Opn0rCDj3GtLwFvCvH5RK9uPCExUROW5NjDwvqkxw==} + engines: {node: '>=12.0.0'} + tmpl@1.0.5: resolution: {integrity: sha512-3f0uOEAQwIqGuWW2MVzYg8fV/QNnc/IpuJNG837rLuczAaLVHslWHZQj4IGiEl5Hs3kkbhwL9Ab7Hrsmuj+Smw==} @@ -3237,8 +3229,8 @@ packages: resolution: {integrity: sha512-l7FvfAHlcmulp8kr+flpQZmVwtu7nfRV7NZujtN0OqES8EL4O4e0qqzL0DC5gAvx/ZC/9lk6rhcUwYvkBnBnYA==} engines: {node: '>=12'} - ts-api-utils@2.0.1: - resolution: {integrity: sha512-dnlgjFSVetynI8nzgJ+qF62efpglpWRk8isUEWZGWlJYySCTD6aKvbUDu+zbPeDakk3bg5H4XpitHukgfL1m9w==} + ts-api-utils@2.1.0: + resolution: {integrity: sha512-CUgTZL1irw8u29bzrOD/nH85jqyc74D6SshFgujOIA7osm2Rz7dYH77agkx7H4FBNxDq7Cjf+IjaX/8zwFW+ZQ==} engines: {node: '>=18.12'} peerDependencies: typescript: '>=4.8.4' @@ -3265,8 +3257,8 @@ packages: resolution: {integrity: sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w==} engines: {node: '>=10'} - type-fest@4.34.1: - resolution: {integrity: sha512-6kSc32kT0rbwxD6QL1CYe8IqdzN/J/ILMrNK+HMQCKH3insCDRY/3ITb0vcBss0a3t72fzh2YSzj8ko1HgwT3g==} + type-fest@4.41.0: + resolution: {integrity: sha512-TeTSQ6H5YHvpqVwBRcnLDCBnDOHWYu7IvGbHT6N8AOymcr9PJGjc1GTtiWZTYg0NCgYwvnYWEkVChQAr9bjfwA==} engines: {node: '>=16'} typed-array-buffer@1.0.3: @@ -3285,15 +3277,15 @@ packages: resolution: {integrity: sha512-3KS2b+kL7fsuk/eJZ7EQdnEmQoaho/r6KUef7hxvltNA5DR8NAUM+8wJMbJyZ4G9/7i3v5zPBIMN5aybAh2/Jg==} engines: {node: '>= 0.4'} - typescript-eslint@8.24.0: - resolution: {integrity: sha512-/lmv4366en/qbB32Vz5+kCNZEMf6xYHwh1z48suBwZvAtnXKbP+YhGe8OLE2BqC67LMqKkCNLtjejdwsdW6uOQ==} + typescript-eslint@8.32.1: + resolution: {integrity: sha512-D7el+eaDHAmXvrZBy1zpzSNIRqnCOrkwTgZxTu3MUqRWk8k0q9m9Ho4+vPf7iHtgUfrK/o8IZaEApsxPlHTFCg==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.0 || ^9.0.0 - typescript: '>=4.8.4 <5.8.0' + typescript: '>=4.8.4 <5.9.0' - typescript@5.7.3: - resolution: {integrity: sha512-84MVSjMEHP+FQRPy3pX9sTVV/INIex71s9TL2Gm5FG/WG1SqXeKyZ0k7/blY/4FdOzI12CBy1vGc4og/eus0fw==} + typescript@5.8.3: + resolution: {integrity: sha512-p1diW6TqL9L07nNxvRMM7hMMw4c5XOo/1ibL4aAIGmSAt9slTE1Xgw5KWuof2uTOvCg9BY7ZRi+GaF+7sfgPeQ==} engines: {node: '>=14.17'} hasBin: true @@ -3301,8 +3293,8 @@ packages: resolution: {integrity: sha512-nWJ91DjeOkej/TA8pXQ3myruKpKEYgqvpw9lz4OPHj/NWFNluYrjbz9j01CJ8yKQd2g4jFoOkINCTW2I5LEEyw==} engines: {node: '>= 0.4'} - undici-types@6.20.0: - resolution: {integrity: sha512-Ny6QZ2Nju20vw1SRHe3d9jVu6gJ+4e3+MMpqu7pqE5HT6WsTSlce++GQmK5UXS8mzV8DSYHrQH+Xrf2jVcuKNg==} + undici-types@6.21.0: + resolution: {integrity: sha512-iwDZqg0QAGrg9Rav5H4n0M64c3mkR59cJ6wQp+7C4nI0gsmExaedaYLNO44eT4AtBBwjbTiGPMlt2Md0T9H9JQ==} unicode-canonical-property-names-ecmascript@2.0.1: resolution: {integrity: sha512-dA8WbNeb2a6oQzAQ55YlT5vQAWGV9WXOsi3SskE3bcCdM0P4SDd+24zS/OCacdRq5BkdsRj9q3Pg6YyQoxIGqg==} @@ -3320,10 +3312,6 @@ packages: resolution: {integrity: sha512-6t3foTQI9qne+OZoVQB/8x8rk2k1eVy1gRXhV3oFQ5T6R1dqQ1xtin3XqSlx3+ATBkliTaR/hHyJBm+LVPNM8w==} engines: {node: '>=4'} - unicorn-magic@0.3.0: - resolution: {integrity: sha512-+QBBXBCvifc56fsbuxZQ6Sic3wqqc3WWaqxs58gvJrcOuN83HGTCwz3oS5phzU9LthRNE9VrJCFCLUgHeeFnfA==} - engines: {node: '>=18'} - universalify@0.2.0: resolution: {integrity: sha512-CJ1QgKmNg3CwvAv/kOFmtnEN05f0D/cn9QntgNOQlQF9dgvVTHj3t+8JPdjqawCHk7V/KA+fbUqzZ9XWhcqPUg==} engines: {node: '>= 4.0.0'} @@ -3332,8 +3320,8 @@ packages: resolution: {integrity: sha512-gptHNQghINnc/vTGIk0SOFGFNXw7JVrlRUtConJRlvaw6DuX0wO5Jeko9sWrMBhh+PsYAZ7oXAiOnf/UKogyiw==} engines: {node: '>= 10.0.0'} - update-browserslist-db@1.1.2: - resolution: {integrity: sha512-PPypAm5qvlD7XMZC3BujecnaOxwhrtoFR+Dqkk5Aa/6DssiH0ibKoketaj9w8LP7Bont1rYeoV5plxD7RTEPRg==} + update-browserslist-db@1.1.3: + resolution: {integrity: sha512-UxhIZQ+QInVdunkDAaiazvvT/+fXL5Osr0JZlJulepYu6Jd7qJtDZjlur0emRlT71EN3ScPoE7gvsuIKKNavKw==} hasBin: true peerDependencies: browserslist: '>= 4.21.0' @@ -3386,8 +3374,8 @@ packages: resolution: {integrity: sha512-K4jVyjnBdgvc86Y6BkaLZEN933SwYOuBFkdmBu9ZfkcAbdVbpITnDmjvZ/aQjRXQrv5EPkTnD1s39GiiqbngCw==} engines: {node: '>= 0.4'} - which-typed-array@1.1.18: - resolution: {integrity: sha512-qEcY+KJYlWyLH9vNbsr6/5j59AXk5ni5aakf8ldzBvGde6Iz4sxZGkJyWSAueTG7QhOvNRYb1lDdFmL5Td0QKA==} + which-typed-array@1.1.19: + resolution: {integrity: sha512-rEvr90Bck4WZt9HHFC4DJMsjvu7x+r6bImz0/BrbWb7A2djJ8hnZMrWnHo9F8ssv0OMErasDhftrfROTyqSDrw==} engines: {node: '>= 0.4'} which@2.0.2: @@ -3414,8 +3402,8 @@ packages: resolution: {integrity: sha512-7KxauUdBmSdWnmpaGFg+ppNjKF8uNLry8LyzjauQDOVONfFLNKrKvQOxZ/VuTIcS/gge/YNahf5RIIQWTSarlg==} engines: {node: ^12.13.0 || ^14.15.0 || >=16.0.0} - ws@8.18.0: - resolution: {integrity: sha512-8VbfWfHLbbwu3+N6OKsOMpBdT4kXPDDB9cJk2bJ6mh9ucxdlnNvH1e+roYkKmN9Nxw2yjz7VzeO9oOz2zJ04Pw==} + ws@8.18.2: + resolution: {integrity: sha512-DMricUmwGZUVr++AEAe2uiVM7UoO9MAVZMDu05UQOaUII0lp+zOzLLU4Xqh/JvTqklB1T4uELaaPBKyjE1r4fQ==} engines: {node: '>=10.0.0'} peerDependencies: bufferutil: ^4.0.1 @@ -3440,9 +3428,9 @@ packages: yallist@3.1.1: resolution: {integrity: sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g==} - yaml@2.7.0: - resolution: {integrity: sha512-+hSoy/QHluxmC9kCIJyL/uyFmLmc+e5CFR5Wa+bpIhIj85LVb9ZH2nVnqrHoSvKogwODv0ClqZkmiSSaIH5LTA==} - engines: {node: '>= 14'} + yaml@2.8.0: + resolution: {integrity: sha512-4lLa/EcQCB0cJkyts+FpIRx5G/llPxfP6VQU5KByHEhLxY3IJCH0f0Hy1MHI8sClTvsIb8qwRJ6R/ZdlDJ/leQ==} + engines: {node: '>= 14.6'} hasBin: true yargs-parser@21.1.1: @@ -3463,16 +3451,16 @@ packages: snapshots: - '@adobe/css-tools@4.4.2': {} + '@adobe/css-tools@4.4.3': {} '@ampproject/remapping@2.3.0': dependencies: '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 - '@babel/cli@7.26.4(@babel/core@7.26.9)': + '@babel/cli@7.27.2(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 + '@babel/core': 7.27.1 '@jridgewell/trace-mapping': 0.3.25 commander: 6.2.1 convert-source-map: 2.0.0 @@ -3484,746 +3472,744 @@ snapshots: '@nicolo-ribaudo/chokidar-2': 2.1.8-no-fsevents.3 chokidar: 3.6.0 - '@babel/code-frame@7.26.2': + '@babel/code-frame@7.27.1': dependencies: - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-validator-identifier': 7.27.1 js-tokens: 4.0.0 picocolors: 1.1.1 - '@babel/compat-data@7.26.8': {} + '@babel/compat-data@7.27.2': {} - '@babel/core@7.26.9': + '@babel/core@7.27.1': dependencies: '@ampproject/remapping': 2.3.0 - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) - '@babel/helpers': 7.26.9 - '@babel/parser': 7.26.9 - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helpers': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 convert-source-map: 2.0.0 - debug: 4.4.0 + debug: 4.4.1 gensync: 1.0.0-beta.2 json5: 2.2.3 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/generator@7.26.9': + '@babel/generator@7.27.1': dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 '@jridgewell/gen-mapping': 0.3.8 '@jridgewell/trace-mapping': 0.3.25 jsesc: 3.1.0 - '@babel/helper-annotate-as-pure@7.25.9': + '@babel/helper-annotate-as-pure@7.27.1': dependencies: - '@babel/types': 7.26.9 + '@babel/types': 7.27.1 - '@babel/helper-compilation-targets@7.26.5': + '@babel/helper-compilation-targets@7.27.2': dependencies: - '@babel/compat-data': 7.26.8 - '@babel/helper-validator-option': 7.25.9 - browserslist: 4.24.4 + '@babel/compat-data': 7.27.2 + '@babel/helper-validator-option': 7.27.1 + browserslist: 4.24.5 lru-cache: 5.1.1 semver: 6.3.1 - '@babel/helper-create-class-features-plugin@7.26.9(@babel/core@7.26.9)': + '@babel/helper-create-class-features-plugin@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/traverse': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/traverse': 7.27.1 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/helper-create-regexp-features-plugin@7.26.3(@babel/core@7.26.9)': + '@babel/helper-create-regexp-features-plugin@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-annotate-as-pure': 7.25.9 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 regexpu-core: 6.2.0 semver: 6.3.1 - '@babel/helper-define-polyfill-provider@0.6.3(@babel/core@7.26.9)': + '@babel/helper-define-polyfill-provider@0.6.4(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - debug: 4.4.0 + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + debug: 4.4.1 lodash.debounce: 4.0.8 resolve: 1.22.10 transitivePeerDependencies: - supports-color - '@babel/helper-member-expression-to-functions@7.25.9': + '@babel/helper-member-expression-to-functions@7.27.1': dependencies: - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-module-imports@7.25.9': + '@babel/helper-module-imports@7.27.1': dependencies: - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-module-transforms@7.26.0(@babel/core@7.26.9)': + '@babel/helper-module-transforms@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-optimise-call-expression@7.25.9': + '@babel/helper-optimise-call-expression@7.27.1': dependencies: - '@babel/types': 7.26.9 + '@babel/types': 7.27.1 - '@babel/helper-plugin-utils@7.26.5': {} + '@babel/helper-plugin-utils@7.27.1': {} - '@babel/helper-remap-async-to-generator@7.25.9(@babel/core@7.26.9)': + '@babel/helper-remap-async-to-generator@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-wrap-function': 7.25.9 - '@babel/traverse': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-wrap-function': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-replace-supers@7.26.5(@babel/core@7.26.9)': + '@babel/helper-replace-supers@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-member-expression-to-functions': 7.25.9 - '@babel/helper-optimise-call-expression': 7.25.9 - '@babel/traverse': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-member-expression-to-functions': 7.27.1 + '@babel/helper-optimise-call-expression': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-skip-transparent-expression-wrappers@7.25.9': + '@babel/helper-skip-transparent-expression-wrappers@7.27.1': dependencies: - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helper-string-parser@7.25.9': {} + '@babel/helper-string-parser@7.27.1': {} - '@babel/helper-validator-identifier@7.25.9': {} + '@babel/helper-validator-identifier@7.27.1': {} - '@babel/helper-validator-option@7.25.9': {} + '@babel/helper-validator-option@7.27.1': {} - '@babel/helper-wrap-function@7.25.9': + '@babel/helper-wrap-function@7.27.1': dependencies: - '@babel/template': 7.26.9 - '@babel/traverse': 7.26.9 - '@babel/types': 7.26.9 + '@babel/template': 7.27.2 + '@babel/traverse': 7.27.1 + '@babel/types': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/helpers@7.26.9': + '@babel/helpers@7.27.1': dependencies: - '@babel/template': 7.26.9 - '@babel/types': 7.26.9 + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 - '@babel/parser@7.26.9': + '@babel/parser@7.27.2': dependencies: - '@babel/types': 7.26.9 + '@babel/types': 7.27.1 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-bugfix-firefox-class-in-computed-class-key@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-bugfix-safari-class-field-initializer-scope@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.9) + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.9)': + '@babel/plugin-proposal-private-property-in-object@7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 + '@babel/core': 7.27.1 - '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.26.9)': + '@babel/plugin-syntax-async-generators@7.8.4(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.26.9)': + '@babel/plugin-syntax-bigint@7.8.3(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.26.9)': + '@babel/plugin-syntax-class-properties@7.12.13(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.26.9)': + '@babel/plugin-syntax-class-static-block@7.14.5(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-assertions@7.26.0(@babel/core@7.26.9)': + '@babel/plugin-syntax-import-assertions@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-attributes@7.26.0(@babel/core@7.26.9)': + '@babel/plugin-syntax-import-attributes@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.26.9)': + '@babel/plugin-syntax-import-meta@7.10.4(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.26.9)': + '@babel/plugin-syntax-json-strings@7.8.3(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-jsx@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-syntax-jsx@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.26.9)': + '@babel/plugin-syntax-logical-assignment-operators@7.10.4(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.26.9)': + '@babel/plugin-syntax-nullish-coalescing-operator@7.8.3(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.26.9)': + '@babel/plugin-syntax-numeric-separator@7.10.4(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.26.9)': + '@babel/plugin-syntax-object-rest-spread@7.8.3(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.26.9)': + '@babel/plugin-syntax-optional-catch-binding@7.8.3(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.26.9)': + '@babel/plugin-syntax-optional-chaining@7.8.3(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.26.9)': + '@babel/plugin-syntax-private-property-in-object@7.14.5(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.26.9)': + '@babel/plugin-syntax-top-level-await@7.14.5(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-typescript@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-syntax-typescript@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.26.9)': + '@babel/plugin-syntax-unicode-sets-regex@7.18.6(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-arrow-functions@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-arrow-functions@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-async-generator-functions@7.26.8(@babel/core@7.26.9)': + '@babel/plugin-transform-async-generator-functions@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.9) - '@babel/traverse': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-async-to-generator@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-async-to-generator@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-imports': 7.25.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-remap-async-to-generator': 7.25.9(@babel/core@7.26.9) + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-remap-async-to-generator': 7.27.1(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-block-scoped-functions@7.26.5(@babel/core@7.26.9)': + '@babel/plugin-transform-block-scoped-functions@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-block-scoping@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-block-scoping@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-class-properties@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-class-properties@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-class-static-block@7.26.0(@babel/core@7.26.9)': + '@babel/plugin-transform-class-static-block@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-classes@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-classes@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) - '@babel/traverse': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) + '@babel/traverse': 7.27.1 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-computed-properties@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-computed-properties@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/template': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/template': 7.27.2 - '@babel/plugin-transform-destructuring@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-destructuring@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dotall-regex@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-dotall-regex@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-keys@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-duplicate-keys@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-duplicate-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-dynamic-import@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-dynamic-import@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-exponentiation-operator@7.26.3(@babel/core@7.26.9)': + '@babel/plugin-transform-exponentiation-operator@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-export-namespace-from@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-export-namespace-from@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-for-of@7.26.9(@babel/core@7.26.9)': + '@babel/plugin-transform-for-of@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-function-name@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-function-name@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/traverse': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-json-strings@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-json-strings@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-literals@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-literals@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-logical-assignment-operators@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-logical-assignment-operators@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-member-expression-literals@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-member-expression-literals@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-modules-amd@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-modules-amd@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-commonjs@7.26.3(@babel/core@7.26.9)': + '@babel/plugin-transform-modules-commonjs@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-systemjs@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-modules-systemjs@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-identifier': 7.25.9 - '@babel/traverse': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 + '@babel/traverse': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-modules-umd@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-modules-umd@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-transforms': 7.26.0(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-module-transforms': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-named-capturing-groups-regex@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-named-capturing-groups-regex@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-new-target@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-new-target@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-nullish-coalescing-operator@7.26.6(@babel/core@7.26.9)': + '@babel/plugin-transform-nullish-coalescing-operator@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-numeric-separator@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-numeric-separator@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-object-rest-spread@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-object-rest-spread@7.27.2(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.9) + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1) - '@babel/plugin-transform-object-super@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-object-super@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-replace-supers': 7.26.5(@babel/core@7.26.9) + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-replace-supers': 7.27.1(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-optional-catch-binding@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-optional-catch-binding@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-optional-chaining@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-optional-chaining@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-parameters@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-parameters@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-private-methods@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-private-methods@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-private-property-in-object@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-private-property-in-object@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-property-literals@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-property-literals@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regenerator@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-regenerator@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - regenerator-transform: 0.15.2 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-regexp-modifiers@7.26.0(@babel/core@7.26.9)': + '@babel/plugin-transform-regexp-modifiers@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-reserved-words@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-reserved-words@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-shorthand-properties@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-shorthand-properties@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-spread@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-spread@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 transitivePeerDependencies: - supports-color - '@babel/plugin-transform-sticky-regex@7.25.9(@babel/core@7.26.9)': + '@babel/plugin-transform-sticky-regex@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-template-literals@7.26.8(@babel/core@7.26.9)': + '@babel/plugin-transform-template-literals@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typeof-symbol@7.26.7(@babel/core@7.26.9)': + '@babel/plugin-transform-typeof-symbol@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 - '@babel/plugin-transform-typescript@7.26.8(@babel/core@7.26.9)': + '@babel/plugin-transform-typescript@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-annotate-as-pure': 7.25.9 - '@babel/helper-create-class-features-plugin': 7.26.9(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-skip-transparent-expression-wrappers': 7.25.9 - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) + '@babel/core': 7.27.1 + '@babel/helper-annotate-as-pure': 7.27.1 + '@babel/helper-create-class-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-skip-transparent-expression-wrappers': 7.27.1 + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - '@babel/plugin-transform-unicode-escapes@7.25.9(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-property-regex@7.25.9(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-regex@7.25.9(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/plugin-transform-unicode-sets-regex@7.25.9(@babel/core@7.26.9)': - dependencies: - '@babel/core': 7.26.9 - '@babel/helper-create-regexp-features-plugin': 7.26.3(@babel/core@7.26.9) - '@babel/helper-plugin-utils': 7.26.5 - - '@babel/preset-env@7.26.9(@babel/core@7.26.9)': - dependencies: - '@babel/compat-data': 7.26.8 - '@babel/core': 7.26.9 - '@babel/helper-compilation-targets': 7.26.5 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.26.9) - '@babel/plugin-syntax-import-assertions': 7.26.0(@babel/core@7.26.9) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9) - '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.26.9) - '@babel/plugin-transform-arrow-functions': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-async-generator-functions': 7.26.8(@babel/core@7.26.9) - '@babel/plugin-transform-async-to-generator': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-block-scoped-functions': 7.26.5(@babel/core@7.26.9) - '@babel/plugin-transform-block-scoping': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-class-properties': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-class-static-block': 7.26.0(@babel/core@7.26.9) - '@babel/plugin-transform-classes': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-computed-properties': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-destructuring': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-dotall-regex': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-duplicate-keys': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-dynamic-import': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-exponentiation-operator': 7.26.3(@babel/core@7.26.9) - '@babel/plugin-transform-export-namespace-from': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-for-of': 7.26.9(@babel/core@7.26.9) - '@babel/plugin-transform-function-name': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-json-strings': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-literals': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-logical-assignment-operators': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-member-expression-literals': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-modules-amd': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.9) - '@babel/plugin-transform-modules-systemjs': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-modules-umd': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-named-capturing-groups-regex': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-new-target': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-nullish-coalescing-operator': 7.26.6(@babel/core@7.26.9) - '@babel/plugin-transform-numeric-separator': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-object-rest-spread': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-object-super': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-optional-catch-binding': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-optional-chaining': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-parameters': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-private-methods': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-private-property-in-object': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-property-literals': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-regenerator': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-regexp-modifiers': 7.26.0(@babel/core@7.26.9) - '@babel/plugin-transform-reserved-words': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-shorthand-properties': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-spread': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-sticky-regex': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-template-literals': 7.26.8(@babel/core@7.26.9) - '@babel/plugin-transform-typeof-symbol': 7.26.7(@babel/core@7.26.9) - '@babel/plugin-transform-unicode-escapes': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-unicode-property-regex': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-unicode-regex': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-unicode-sets-regex': 7.25.9(@babel/core@7.26.9) - '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.26.9) - babel-plugin-polyfill-corejs2: 0.4.12(@babel/core@7.26.9) - babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.26.9) - babel-plugin-polyfill-regenerator: 0.6.3(@babel/core@7.26.9) - core-js-compat: 3.40.0 + '@babel/plugin-transform-unicode-escapes@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-property-regex@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-regex@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/plugin-transform-unicode-sets-regex@7.27.1(@babel/core@7.27.1)': + dependencies: + '@babel/core': 7.27.1 + '@babel/helper-create-regexp-features-plugin': 7.27.1(@babel/core@7.27.1) + '@babel/helper-plugin-utils': 7.27.1 + + '@babel/preset-env@7.27.2(@babel/core@7.27.1)': + dependencies: + '@babel/compat-data': 7.27.2 + '@babel/core': 7.27.1 + '@babel/helper-compilation-targets': 7.27.2 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-bugfix-firefox-class-in-computed-class-key': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-safari-class-field-initializer-scope': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-safari-id-destructuring-collision-in-function-expression': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-v8-spread-parameters-in-optional-chaining': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-bugfix-v8-static-class-fields-redefine-readonly': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-proposal-private-property-in-object': 7.21.0-placeholder-for-preset-env.2(@babel/core@7.27.1) + '@babel/plugin-syntax-import-assertions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-unicode-sets-regex': 7.18.6(@babel/core@7.27.1) + '@babel/plugin-transform-arrow-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-async-generator-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-async-to-generator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoped-functions': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-block-scoping': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-class-static-block': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-classes': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-computed-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-destructuring': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-dotall-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-duplicate-keys': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-duplicate-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-dynamic-import': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-exponentiation-operator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-export-namespace-from': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-for-of': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-function-name': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-json-strings': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-logical-assignment-operators': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-member-expression-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-amd': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-systemjs': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-umd': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-named-capturing-groups-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-new-target': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-nullish-coalescing-operator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-numeric-separator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-object-rest-spread': 7.27.2(@babel/core@7.27.1) + '@babel/plugin-transform-object-super': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-optional-catch-binding': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-optional-chaining': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-parameters': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-private-methods': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-private-property-in-object': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-property-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-regenerator': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-regexp-modifiers': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-reserved-words': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-shorthand-properties': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-spread': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-sticky-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-template-literals': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-typeof-symbol': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-escapes': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-property-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-regex': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-unicode-sets-regex': 7.27.1(@babel/core@7.27.1) + '@babel/preset-modules': 0.1.6-no-external-plugins(@babel/core@7.27.1) + babel-plugin-polyfill-corejs2: 0.4.13(@babel/core@7.27.1) + babel-plugin-polyfill-corejs3: 0.11.1(@babel/core@7.27.1) + babel-plugin-polyfill-regenerator: 0.6.4(@babel/core@7.27.1) + core-js-compat: 3.42.0 semver: 6.3.1 transitivePeerDependencies: - supports-color - '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.26.9)': + '@babel/preset-modules@0.1.6-no-external-plugins(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/types': 7.26.9 + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/types': 7.27.1 esutils: 2.0.3 - '@babel/preset-typescript@7.26.0(@babel/core@7.26.9)': + '@babel/preset-typescript@7.27.1(@babel/core@7.27.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-plugin-utils': 7.26.5 - '@babel/helper-validator-option': 7.25.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-transform-modules-commonjs': 7.26.3(@babel/core@7.26.9) - '@babel/plugin-transform-typescript': 7.26.8(@babel/core@7.26.9) + '@babel/core': 7.27.1 + '@babel/helper-plugin-utils': 7.27.1 + '@babel/helper-validator-option': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-modules-commonjs': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-transform-typescript': 7.27.1(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - '@babel/runtime@7.26.9': - dependencies: - regenerator-runtime: 0.14.1 + '@babel/runtime@7.27.1': {} - '@babel/template@7.26.9': + '@babel/template@7.27.2': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 + '@babel/code-frame': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 - '@babel/traverse@7.26.9': + '@babel/traverse@7.27.1': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/generator': 7.26.9 - '@babel/parser': 7.26.9 - '@babel/template': 7.26.9 - '@babel/types': 7.26.9 - debug: 4.4.0 + '@babel/code-frame': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/parser': 7.27.2 + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 + debug: 4.4.1 globals: 11.12.0 transitivePeerDependencies: - supports-color - '@babel/types@7.26.9': + '@babel/types@7.27.1': dependencies: - '@babel/helper-string-parser': 7.25.9 - '@babel/helper-validator-identifier': 7.25.9 + '@babel/helper-string-parser': 7.27.1 + '@babel/helper-validator-identifier': 7.27.1 '@bcoe/v8-coverage@0.2.3': {} @@ -4240,33 +4226,31 @@ snapshots: '@types/tough-cookie': 4.0.5 tough-cookie: 4.1.4 - '@eslint-community/eslint-utils@4.4.1(eslint@9.20.1)': + '@eslint-community/eslint-utils@4.7.0(eslint@9.27.0)': dependencies: - eslint: 9.20.1 + eslint: 9.27.0 eslint-visitor-keys: 3.4.3 '@eslint-community/regexpp@4.12.1': {} - '@eslint/config-array@0.19.2': + '@eslint/config-array@0.20.0': dependencies: '@eslint/object-schema': 2.1.6 - debug: 4.4.0 + debug: 4.4.1 minimatch: 3.1.2 transitivePeerDependencies: - supports-color - '@eslint/core@0.10.0': - dependencies: - '@types/json-schema': 7.0.15 + '@eslint/config-helpers@0.2.2': {} - '@eslint/core@0.11.0': + '@eslint/core@0.14.0': dependencies: '@types/json-schema': 7.0.15 - '@eslint/eslintrc@3.2.0': + '@eslint/eslintrc@3.3.1': dependencies: ajv: 6.12.6 - debug: 4.4.0 + debug: 4.4.1 espree: 10.3.0 globals: 14.0.0 ignore: 5.3.2 @@ -4277,13 +4261,13 @@ snapshots: transitivePeerDependencies: - supports-color - '@eslint/js@9.20.0': {} + '@eslint/js@9.27.0': {} '@eslint/object-schema@2.1.6': {} - '@eslint/plugin-kit@0.2.5': + '@eslint/plugin-kit@0.3.1': dependencies: - '@eslint/core': 0.10.0 + '@eslint/core': 0.14.0 levn: 0.4.1 '@humanfs/core@0.19.1': {} @@ -4297,19 +4281,19 @@ snapshots: '@humanwhocodes/retry@0.3.1': {} - '@humanwhocodes/retry@0.4.1': {} + '@humanwhocodes/retry@0.4.3': {} - '@inquirer/confirm@5.1.5(@types/node@22.13.4)': + '@inquirer/confirm@5.1.10(@types/node@22.15.21)': dependencies: - '@inquirer/core': 10.1.6(@types/node@22.13.4) - '@inquirer/type': 3.0.4(@types/node@22.13.4) + '@inquirer/core': 10.1.11(@types/node@22.15.21) + '@inquirer/type': 3.0.6(@types/node@22.15.21) optionalDependencies: - '@types/node': 22.13.4 + '@types/node': 22.15.21 - '@inquirer/core@10.1.6(@types/node@22.13.4)': + '@inquirer/core@10.1.11(@types/node@22.15.21)': dependencies: - '@inquirer/figures': 1.0.10 - '@inquirer/type': 3.0.4(@types/node@22.13.4) + '@inquirer/figures': 1.0.11 + '@inquirer/type': 3.0.6(@types/node@22.15.21) ansi-escapes: 4.3.2 cli-width: 4.1.0 mute-stream: 2.0.0 @@ -4317,13 +4301,13 @@ snapshots: wrap-ansi: 6.2.0 yoctocolors-cjs: 2.1.2 optionalDependencies: - '@types/node': 22.13.4 + '@types/node': 22.15.21 - '@inquirer/figures@1.0.10': {} + '@inquirer/figures@1.0.11': {} - '@inquirer/type@3.0.4(@types/node@22.13.4)': + '@inquirer/type@3.0.6(@types/node@22.15.21)': optionalDependencies: - '@types/node': 22.13.4 + '@types/node': 22.15.21 '@istanbuljs/load-nyc-config@1.1.0': dependencies: @@ -4338,7 +4322,7 @@ snapshots: '@jest/console@29.7.0': dependencies: '@jest/types': 29.6.3 - '@types/node': 22.13.4 + '@types/node': 22.15.21 chalk: 4.1.2 jest-message-util: 29.7.0 jest-util: 29.7.0 @@ -4351,14 +4335,14 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.4 + '@types/node': 22.15.21 ansi-escapes: 4.3.2 chalk: 4.1.2 ci-info: 3.9.0 exit: 0.1.2 graceful-fs: 4.2.11 jest-changed-files: 29.7.0 - jest-config: 29.7.0(@types/node@22.13.4) + jest-config: 29.7.0(@types/node@22.15.21) jest-haste-map: 29.7.0 jest-message-util: 29.7.0 jest-regex-util: 29.6.3 @@ -4383,7 +4367,7 @@ snapshots: dependencies: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.4 + '@types/node': 22.15.21 jest-mock: 29.7.0 '@jest/expect-utils@29.7.0': @@ -4401,7 +4385,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@sinonjs/fake-timers': 10.3.0 - '@types/node': 22.13.4 + '@types/node': 22.15.21 jest-message-util: 29.7.0 jest-mock: 29.7.0 jest-util: 29.7.0 @@ -4423,7 +4407,7 @@ snapshots: '@jest/transform': 29.7.0 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 - '@types/node': 22.13.4 + '@types/node': 22.15.21 chalk: 4.1.2 collect-v8-coverage: 1.0.2 exit: 0.1.2 @@ -4470,7 +4454,7 @@ snapshots: '@jest/transform@29.7.0': dependencies: - '@babel/core': 7.26.9 + '@babel/core': 7.27.1 '@jest/types': 29.6.3 '@jridgewell/trace-mapping': 0.3.25 babel-plugin-istanbul: 6.1.1 @@ -4482,7 +4466,7 @@ snapshots: jest-regex-util: 29.6.3 jest-util: 29.7.0 micromatch: 4.0.8 - pirates: 4.0.6 + pirates: 4.0.7 slash: 3.0.0 write-file-atomic: 4.0.2 transitivePeerDependencies: @@ -4493,7 +4477,7 @@ snapshots: '@jest/schemas': 29.6.3 '@types/istanbul-lib-coverage': 2.0.6 '@types/istanbul-reports': 3.0.4 - '@types/node': 22.13.4 + '@types/node': 22.15.21 '@types/yargs': 17.0.33 chalk: 4.1.2 @@ -4541,7 +4525,7 @@ snapshots: '@nodelib/fs.walk@1.2.8': dependencies: '@nodelib/fs.scandir': 2.1.5 - fastq: 1.19.0 + fastq: 1.19.1 '@open-draft/deferred-promise@2.2.0': {} @@ -4552,110 +4536,111 @@ snapshots: '@open-draft/until@2.1.0': {} - '@playwright/test@1.50.1': + '@playwright/test@1.52.0': dependencies: - playwright: 1.50.1 + playwright: 1.52.0 - '@rollup/plugin-babel@6.0.4(@babel/core@7.26.9)(@types/babel__core@7.20.5)(rollup@4.34.7)': + '@rollup/plugin-babel@6.0.4(@babel/core@7.27.1)(@types/babel__core@7.20.5)(rollup@4.41.1)': dependencies: - '@babel/core': 7.26.9 - '@babel/helper-module-imports': 7.25.9 - '@rollup/pluginutils': 5.1.4(rollup@4.34.7) + '@babel/core': 7.27.1 + '@babel/helper-module-imports': 7.27.1 + '@rollup/pluginutils': 5.1.4(rollup@4.41.1) optionalDependencies: '@types/babel__core': 7.20.5 - rollup: 4.34.7 + rollup: 4.41.1 transitivePeerDependencies: - supports-color - '@rollup/plugin-node-resolve@16.0.0(rollup@4.34.7)': + '@rollup/plugin-node-resolve@16.0.1(rollup@4.41.1)': dependencies: - '@rollup/pluginutils': 5.1.4(rollup@4.34.7) + '@rollup/pluginutils': 5.1.4(rollup@4.41.1) '@types/resolve': 1.20.2 deepmerge: 4.3.1 is-module: 1.0.0 resolve: 1.22.10 optionalDependencies: - rollup: 4.34.7 + rollup: 4.41.1 - '@rollup/plugin-terser@0.4.4(rollup@4.34.7)': + '@rollup/plugin-terser@0.4.4(rollup@4.41.1)': dependencies: serialize-javascript: 6.0.2 smob: 1.5.0 - terser: 5.39.0 + terser: 5.39.2 optionalDependencies: - rollup: 4.34.7 + rollup: 4.41.1 - '@rollup/pluginutils@5.1.4(rollup@4.34.7)': + '@rollup/pluginutils@5.1.4(rollup@4.41.1)': dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 estree-walker: 2.0.2 picomatch: 4.0.2 optionalDependencies: - rollup: 4.34.7 + rollup: 4.41.1 + + '@rollup/rollup-android-arm-eabi@4.41.1': + optional: true - '@rollup/rollup-android-arm-eabi@4.34.7': + '@rollup/rollup-android-arm64@4.41.1': optional: true - '@rollup/rollup-android-arm64@4.34.7': + '@rollup/rollup-darwin-arm64@4.41.1': optional: true - '@rollup/rollup-darwin-arm64@4.34.7': + '@rollup/rollup-darwin-x64@4.41.1': optional: true - '@rollup/rollup-darwin-x64@4.34.7': + '@rollup/rollup-freebsd-arm64@4.41.1': optional: true - '@rollup/rollup-freebsd-arm64@4.34.7': + '@rollup/rollup-freebsd-x64@4.41.1': optional: true - '@rollup/rollup-freebsd-x64@4.34.7': + '@rollup/rollup-linux-arm-gnueabihf@4.41.1': optional: true - '@rollup/rollup-linux-arm-gnueabihf@4.34.7': + '@rollup/rollup-linux-arm-musleabihf@4.41.1': optional: true - '@rollup/rollup-linux-arm-musleabihf@4.34.7': + '@rollup/rollup-linux-arm64-gnu@4.41.1': optional: true - '@rollup/rollup-linux-arm64-gnu@4.34.7': + '@rollup/rollup-linux-arm64-musl@4.41.1': optional: true - '@rollup/rollup-linux-arm64-musl@4.34.7': + '@rollup/rollup-linux-loongarch64-gnu@4.41.1': optional: true - '@rollup/rollup-linux-loongarch64-gnu@4.34.7': + '@rollup/rollup-linux-powerpc64le-gnu@4.41.1': optional: true - '@rollup/rollup-linux-powerpc64le-gnu@4.34.7': + '@rollup/rollup-linux-riscv64-gnu@4.41.1': optional: true - '@rollup/rollup-linux-riscv64-gnu@4.34.7': + '@rollup/rollup-linux-riscv64-musl@4.41.1': optional: true - '@rollup/rollup-linux-s390x-gnu@4.34.7': + '@rollup/rollup-linux-s390x-gnu@4.41.1': optional: true - '@rollup/rollup-linux-x64-gnu@4.34.7': + '@rollup/rollup-linux-x64-gnu@4.41.1': optional: true - '@rollup/rollup-linux-x64-musl@4.34.7': + '@rollup/rollup-linux-x64-musl@4.41.1': optional: true - '@rollup/rollup-win32-arm64-msvc@4.34.7': + '@rollup/rollup-win32-arm64-msvc@4.41.1': optional: true - '@rollup/rollup-win32-ia32-msvc@4.34.7': + '@rollup/rollup-win32-ia32-msvc@4.41.1': optional: true - '@rollup/rollup-win32-x64-msvc@4.34.7': + '@rollup/rollup-win32-x64-msvc@4.41.1': optional: true '@rtsao/scc@1.1.0': {} '@sinclair/typebox@0.27.8': {} - '@sindresorhus/merge-streams@2.3.0': {} - '@sinonjs/commons@3.0.1': dependencies: type-detect: 4.0.8 @@ -4666,8 +4651,8 @@ snapshots: '@testing-library/dom@10.4.0': dependencies: - '@babel/code-frame': 7.26.2 - '@babel/runtime': 7.26.9 + '@babel/code-frame': 7.27.1 + '@babel/runtime': 7.27.1 '@types/aria-query': 5.0.4 aria-query: 5.3.0 chalk: 4.1.2 @@ -4677,7 +4662,7 @@ snapshots: '@testing-library/jest-dom@6.6.3': dependencies: - '@adobe/css-tools': 4.4.2 + '@adobe/css-tools': 4.4.3 aria-query: 5.3.2 chalk: 3.0.0 css.escape: 1.5.1 @@ -4695,24 +4680,24 @@ snapshots: '@types/babel__core@7.20.5': dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 - '@types/babel__generator': 7.6.8 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 + '@types/babel__generator': 7.27.0 '@types/babel__template': 7.4.4 - '@types/babel__traverse': 7.20.6 + '@types/babel__traverse': 7.20.7 - '@types/babel__generator@7.6.8': + '@types/babel__generator@7.27.0': dependencies: - '@babel/types': 7.26.9 + '@babel/types': 7.27.1 '@types/babel__template@7.4.4': dependencies: - '@babel/parser': 7.26.9 - '@babel/types': 7.26.9 + '@babel/parser': 7.27.2 + '@babel/types': 7.27.1 - '@types/babel__traverse@7.20.6': + '@types/babel__traverse@7.20.7': dependencies: - '@babel/types': 7.26.9 + '@babel/types': 7.27.1 '@types/cookie@0.6.0': {} @@ -4720,11 +4705,11 @@ snapshots: dependencies: '@types/ms': 2.1.0 - '@types/estree@1.0.6': {} + '@types/estree@1.0.7': {} '@types/graceful-fs@4.1.9': dependencies: - '@types/node': 22.13.4 + '@types/node': 22.15.21 '@types/istanbul-lib-coverage@2.0.6': {} @@ -4752,9 +4737,9 @@ snapshots: '@types/jsdom@20.0.1': dependencies: - '@types/node': 22.13.4 + '@types/node': 22.15.21 '@types/tough-cookie': 4.0.5 - parse5: 7.2.1 + parse5: 7.3.0 '@types/json-schema@7.0.15': {} @@ -4762,9 +4747,9 @@ snapshots: '@types/ms@2.1.0': {} - '@types/node@22.13.4': + '@types/node@22.15.21': dependencies: - undici-types: 6.20.0 + undici-types: 6.21.0 '@types/resolve@1.20.2': {} @@ -4782,103 +4767,103 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.3 - '@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(typescript@5.7.3)': + '@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3)': dependencies: '@eslint-community/regexpp': 4.12.1 - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/type-utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.0 - eslint: 9.20.1 + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/type-utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 + eslint: 9.27.0 graphemer: 1.4.0 - ignore: 5.3.2 + ignore: 7.0.4 natural-compare: 1.4.0 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3)': + '@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - '@typescript-eslint/visitor-keys': 8.24.0 - debug: 4.4.0 - eslint: 9.20.1 - typescript: 5.7.3 + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/visitor-keys': 8.32.1 + debug: 4.4.1 + eslint: 9.27.0 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/scope-manager@8.24.0': + '@typescript-eslint/scope-manager@8.32.1': dependencies: - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/visitor-keys': 8.24.0 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/visitor-keys': 8.32.1 - '@typescript-eslint/type-utils@8.24.0(eslint@9.20.1)(typescript@5.7.3)': + '@typescript-eslint/type-utils@8.32.1(eslint@9.27.0)(typescript@5.8.3)': dependencies: - '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - debug: 4.4.0 - eslint: 9.20.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + debug: 4.4.1 + eslint: 9.27.0 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/types@8.24.0': {} + '@typescript-eslint/types@8.32.1': {} - '@typescript-eslint/typescript-estree@8.24.0(typescript@5.7.3)': + '@typescript-eslint/typescript-estree@8.32.1(typescript@5.8.3)': dependencies: - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/visitor-keys': 8.24.0 - debug: 4.4.0 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/visitor-keys': 8.32.1 + debug: 4.4.1 fast-glob: 3.3.3 is-glob: 4.0.3 minimatch: 9.0.5 - semver: 7.7.1 - ts-api-utils: 2.0.1(typescript@5.7.3) - typescript: 5.7.3 + semver: 7.7.2 + ts-api-utils: 2.1.0(typescript@5.8.3) + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/utils@8.24.0(eslint@9.20.1)(typescript@5.7.3)': + '@typescript-eslint/utils@8.32.1(eslint@9.27.0)(typescript@5.8.3)': dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1) - '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/typescript-estree': 8.24.0(typescript@5.7.3) - eslint: 9.20.1 - typescript: 5.7.3 + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0) + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/typescript-estree': 8.32.1(typescript@5.8.3) + eslint: 9.27.0 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - '@typescript-eslint/visitor-keys@8.24.0': + '@typescript-eslint/visitor-keys@8.32.1': dependencies: - '@typescript-eslint/types': 8.24.0 + '@typescript-eslint/types': 8.32.1 eslint-visitor-keys: 4.2.0 abab@2.0.6: {} acorn-globals@7.0.1: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 acorn-walk: 8.3.4 - acorn-jsx@5.3.2(acorn@8.14.0): + acorn-jsx@5.3.2(acorn@8.14.1): dependencies: - acorn: 8.14.0 + acorn: 8.14.1 acorn-walk@8.3.4: dependencies: - acorn: 8.14.0 + acorn: 8.14.1 - acorn@8.14.0: {} + acorn@8.14.1: {} agent-base@6.0.2: dependencies: - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -4920,7 +4905,7 @@ snapshots: array-buffer-byte-length@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-array-buffer: 3.0.5 array-includes@3.1.8: @@ -4929,12 +4914,13 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-object-atoms: 1.1.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 is-string: 1.1.1 - array.prototype.findlastindex@1.2.5: + array.prototype.findlastindex@1.2.6: dependencies: call-bind: 1.0.8 + call-bound: 1.0.4 define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 @@ -4962,21 +4948,21 @@ snapshots: define-properties: 1.2.1 es-abstract: 1.23.9 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 is-array-buffer: 3.0.5 async-function@1.0.0: {} asynckit@0.4.0: {} - autoprefixer@10.4.20(postcss@8.5.2): + autoprefixer@10.4.21(postcss@8.5.3): dependencies: - browserslist: 4.24.4 - caniuse-lite: 1.0.30001699 + browserslist: 4.24.5 + caniuse-lite: 1.0.30001718 fraction.js: 4.3.7 normalize-range: 0.1.2 picocolors: 1.1.1 - postcss: 8.5.2 + postcss: 8.5.3 postcss-value-parser: 4.2.0 available-typed-arrays@1.0.7: @@ -4985,15 +4971,15 @@ snapshots: axe-core@3.5.6: {} - axe-core@4.9.1: {} + axe-core@4.10.2: {} - babel-jest@29.7.0(@babel/core@7.26.9): + babel-jest@29.7.0(@babel/core@7.27.1): dependencies: - '@babel/core': 7.26.9 + '@babel/core': 7.27.1 '@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.26.9) + babel-preset-jest: 29.6.3(@babel/core@7.27.1) chalk: 4.1.2 graceful-fs: 4.2.11 slash: 3.0.0 @@ -5002,7 +4988,7 @@ snapshots: babel-plugin-istanbul@6.1.1: dependencies: - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 5.2.1 @@ -5012,7 +4998,7 @@ snapshots: babel-plugin-istanbul@7.0.0: dependencies: - '@babel/helper-plugin-utils': 7.26.5 + '@babel/helper-plugin-utils': 7.27.1 '@istanbuljs/load-nyc-config': 1.1.0 '@istanbuljs/schema': 0.1.3 istanbul-lib-instrument: 6.0.3 @@ -5022,59 +5008,59 @@ snapshots: babel-plugin-jest-hoist@29.6.3: dependencies: - '@babel/template': 7.26.9 - '@babel/types': 7.26.9 + '@babel/template': 7.27.2 + '@babel/types': 7.27.1 '@types/babel__core': 7.20.5 - '@types/babel__traverse': 7.20.6 + '@types/babel__traverse': 7.20.7 - babel-plugin-polyfill-corejs2@0.4.12(@babel/core@7.26.9): + babel-plugin-polyfill-corejs2@0.4.13(@babel/core@7.27.1): dependencies: - '@babel/compat-data': 7.26.8 - '@babel/core': 7.26.9 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.9) + '@babel/compat-data': 7.27.2 + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) semver: 6.3.1 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.26.9): + babel-plugin-polyfill-corejs3@0.11.1(@babel/core@7.27.1): dependencies: - '@babel/core': 7.26.9 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.9) - core-js-compat: 3.40.0 + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) + core-js-compat: 3.42.0 transitivePeerDependencies: - supports-color - babel-plugin-polyfill-regenerator@0.6.3(@babel/core@7.26.9): + babel-plugin-polyfill-regenerator@0.6.4(@babel/core@7.27.1): dependencies: - '@babel/core': 7.26.9 - '@babel/helper-define-polyfill-provider': 0.6.3(@babel/core@7.26.9) + '@babel/core': 7.27.1 + '@babel/helper-define-polyfill-provider': 0.6.4(@babel/core@7.27.1) transitivePeerDependencies: - supports-color - babel-preset-current-node-syntax@1.1.0(@babel/core@7.26.9): - dependencies: - '@babel/core': 7.26.9 - '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.26.9) - '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.26.9) - '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.26.9) - '@babel/plugin-syntax-import-attributes': 7.26.0(@babel/core@7.26.9) - '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.26.9) - '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.26.9) - '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.26.9) - '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.26.9) - '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.26.9) - '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.26.9) - - babel-preset-jest@29.6.3(@babel/core@7.26.9): - dependencies: - '@babel/core': 7.26.9 + babel-preset-current-node-syntax@1.1.0(@babel/core@7.27.1): + dependencies: + '@babel/core': 7.27.1 + '@babel/plugin-syntax-async-generators': 7.8.4(@babel/core@7.27.1) + '@babel/plugin-syntax-bigint': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-class-properties': 7.12.13(@babel/core@7.27.1) + '@babel/plugin-syntax-class-static-block': 7.14.5(@babel/core@7.27.1) + '@babel/plugin-syntax-import-attributes': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-import-meta': 7.10.4(@babel/core@7.27.1) + '@babel/plugin-syntax-json-strings': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-logical-assignment-operators': 7.10.4(@babel/core@7.27.1) + '@babel/plugin-syntax-nullish-coalescing-operator': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-numeric-separator': 7.10.4(@babel/core@7.27.1) + '@babel/plugin-syntax-object-rest-spread': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-optional-catch-binding': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-optional-chaining': 7.8.3(@babel/core@7.27.1) + '@babel/plugin-syntax-private-property-in-object': 7.14.5(@babel/core@7.27.1) + '@babel/plugin-syntax-top-level-await': 7.14.5(@babel/core@7.27.1) + + babel-preset-jest@29.6.3(@babel/core@7.27.1): + dependencies: + '@babel/core': 7.27.1 babel-plugin-jest-hoist: 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.1) balanced-match@1.0.2: {} @@ -5095,12 +5081,12 @@ snapshots: dependencies: fill-range: 7.1.1 - browserslist@4.24.4: + browserslist@4.24.5: dependencies: - caniuse-lite: 1.0.30001699 - electron-to-chromium: 1.5.101 + caniuse-lite: 1.0.30001718 + electron-to-chromium: 1.5.155 node-releases: 2.0.19 - update-browserslist-db: 1.1.2(browserslist@4.24.4) + update-browserslist-db: 1.1.3(browserslist@4.24.5) bser@2.1.1: dependencies: @@ -5117,13 +5103,13 @@ snapshots: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 set-function-length: 1.2.2 - call-bound@1.0.3: + call-bound@1.0.4: dependencies: call-bind-apply-helpers: 1.0.2 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 callsites@3.1.0: {} @@ -5131,7 +5117,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001699: {} + caniuse-lite@1.0.30001718: {} chalk@3.0.0: dependencies: @@ -5193,17 +5179,17 @@ snapshots: cookie@0.7.2: {} - core-js-compat@3.40.0: + core-js-compat@3.42.0: dependencies: - browserslist: 4.24.4 + browserslist: 4.24.5 - create-jest@29.7.0(@types/node@22.13.4): + create-jest@29.7.0(@types/node@22.15.21): dependencies: '@jest/types': 29.6.3 chalk: 4.1.2 exit: 0.1.2 graceful-fs: 4.2.11 - jest-config: 29.7.0(@types/node@22.13.4) + jest-config: 29.7.0(@types/node@22.15.21) jest-util: 29.7.0 prompts: 2.4.2 transitivePeerDependencies: @@ -5240,19 +5226,19 @@ snapshots: data-view-buffer@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 data-view-byte-length@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 data-view-byte-offset@1.0.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-data-view: 1.0.2 @@ -5260,13 +5246,13 @@ snapshots: dependencies: ms: 2.1.3 - debug@4.4.0: + debug@4.4.1: dependencies: ms: 2.1.3 decimal.js@10.5.0: {} - dedent@1.5.3: {} + dedent@1.6.0: {} deep-is@0.1.4: {} @@ -5286,7 +5272,7 @@ snapshots: delayed-stream@1.0.0: {} - dependency-graph@0.11.0: {} + dependency-graph@1.0.0: {} dequal@2.0.3: {} @@ -5312,13 +5298,13 @@ snapshots: es-errors: 1.3.0 gopd: 1.2.0 - electron-to-chromium@1.5.101: {} + electron-to-chromium@1.5.155: {} emittery@0.13.1: {} emoji-regex@8.0.0: {} - entities@4.5.0: {} + entities@6.0.0: {} error-ex@1.3.2: dependencies: @@ -5330,7 +5316,7 @@ snapshots: arraybuffer.prototype.slice: 1.0.4 available-typed-arrays: 1.0.7 call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 data-view-buffer: 1.0.2 data-view-byte-length: 1.0.2 data-view-byte-offset: 1.0.1 @@ -5340,7 +5326,7 @@ snapshots: es-set-tostringtag: 2.1.0 es-to-primitive: 1.3.0 function.prototype.name: 1.1.8 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 get-proto: 1.0.1 get-symbol-description: 1.1.0 globalthis: 1.0.4 @@ -5376,7 +5362,7 @@ snapshots: typed-array-byte-offset: 1.0.4 typed-array-length: 1.0.7 unbox-primitive: 1.1.0 - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 es-define-property@1.0.1: {} @@ -5389,7 +5375,7 @@ snapshots: es-set-tostringtag@2.1.0: dependencies: es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -5425,28 +5411,28 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@9.20.1): + eslint-module-utils@2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.27.0): dependencies: debug: 3.2.7 optionalDependencies: - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - eslint: 9.20.1 + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + eslint: 9.27.0 eslint-import-resolver-node: 0.3.9 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1): + eslint-plugin-import@2.31.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0): dependencies: '@rtsao/scc': 1.1.0 array-includes: 3.1.8 - array.prototype.findlastindex: 1.2.5 + array.prototype.findlastindex: 1.2.6 array.prototype.flat: 1.3.3 array.prototype.flatmap: 1.3.3 debug: 3.2.7 doctrine: 2.1.0 - eslint: 9.20.1 + eslint: 9.27.0 eslint-import-resolver-node: 0.3.9 - eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint-import-resolver-node@0.3.9)(eslint@9.20.1) + eslint-module-utils: 2.12.0(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint-import-resolver-node@0.3.9)(eslint@9.27.0) hasown: 2.0.2 is-core-module: 2.16.1 is-glob: 4.0.3 @@ -5458,56 +5444,56 @@ snapshots: string.prototype.trimend: 1.0.9 tsconfig-paths: 3.15.0 optionalDependencies: - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0)(typescript@5.8.3) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack - supports-color - eslint-plugin-jest-dom@5.5.0(@testing-library/dom@10.4.0)(eslint@9.20.1): + eslint-plugin-jest-dom@5.5.0(@testing-library/dom@10.4.0)(eslint@9.27.0): dependencies: - '@babel/runtime': 7.26.9 - eslint: 9.20.1 + '@babel/runtime': 7.27.1 + eslint: 9.27.0 requireindex: 1.2.0 optionalDependencies: '@testing-library/dom': 10.4.0 - eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(jest@29.7.0(@types/node@22.13.4))(typescript@5.7.3): + eslint-plugin-jest@28.11.0(@typescript-eslint/eslint-plugin@8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(jest@29.7.0(@types/node@22.15.21))(typescript@5.8.3): dependencies: - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - eslint: 9.20.1 + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + eslint: 9.27.0 optionalDependencies: - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(typescript@5.7.3) - jest: 29.7.0(@types/node@22.13.4) + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3) + jest: 29.7.0(@types/node@22.15.21) transitivePeerDependencies: - supports-color - typescript - eslint-plugin-perfectionist@4.9.0(eslint@9.20.1)(typescript@5.7.3): + eslint-plugin-perfectionist@4.13.0(eslint@9.27.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/types': 8.24.0 - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - eslint: 9.20.1 + '@typescript-eslint/types': 8.32.1 + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + eslint: 9.27.0 natural-orderby: 5.0.0 transitivePeerDependencies: - supports-color - typescript - eslint-plugin-playwright@2.2.0(eslint@9.20.1): + eslint-plugin-playwright@2.2.0(eslint@9.27.0): dependencies: - eslint: 9.20.1 + eslint: 9.27.0 globals: 13.24.0 - eslint-plugin-testing-library@7.1.1(eslint@9.20.1)(typescript@5.7.3): + eslint-plugin-testing-library@7.2.1(eslint@9.27.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/scope-manager': 8.24.0 - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - eslint: 9.20.1 + '@typescript-eslint/scope-manager': 8.32.1 + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + eslint: 9.27.0 transitivePeerDependencies: - supports-color - typescript - eslint-scope@8.2.0: + eslint-scope@8.3.0: dependencies: esrecurse: 4.3.0 estraverse: 5.3.0 @@ -5516,26 +5502,27 @@ snapshots: eslint-visitor-keys@4.2.0: {} - eslint@9.20.1: + eslint@9.27.0: dependencies: - '@eslint-community/eslint-utils': 4.4.1(eslint@9.20.1) + '@eslint-community/eslint-utils': 4.7.0(eslint@9.27.0) '@eslint-community/regexpp': 4.12.1 - '@eslint/config-array': 0.19.2 - '@eslint/core': 0.11.0 - '@eslint/eslintrc': 3.2.0 - '@eslint/js': 9.20.0 - '@eslint/plugin-kit': 0.2.5 + '@eslint/config-array': 0.20.0 + '@eslint/config-helpers': 0.2.2 + '@eslint/core': 0.14.0 + '@eslint/eslintrc': 3.3.1 + '@eslint/js': 9.27.0 + '@eslint/plugin-kit': 0.3.1 '@humanfs/node': 0.16.6 '@humanwhocodes/module-importer': 1.0.1 - '@humanwhocodes/retry': 0.4.1 - '@types/estree': 1.0.6 + '@humanwhocodes/retry': 0.4.3 + '@types/estree': 1.0.7 '@types/json-schema': 7.0.15 ajv: 6.12.6 chalk: 4.1.2 cross-spawn: 7.0.6 - debug: 4.4.0 + debug: 4.4.1 escape-string-regexp: 4.0.0 - eslint-scope: 8.2.0 + eslint-scope: 8.3.0 eslint-visitor-keys: 4.2.0 espree: 10.3.0 esquery: 1.6.0 @@ -5557,8 +5544,8 @@ snapshots: espree@10.3.0: dependencies: - acorn: 8.14.0 - acorn-jsx: 5.3.2(acorn@8.14.0) + acorn: 8.14.1 + acorn-jsx: 5.3.2(acorn@8.14.1) eslint-visitor-keys: 4.2.0 esprima@4.0.1: {} @@ -5613,14 +5600,18 @@ snapshots: fast-levenshtein@2.0.6: {} - fastq@1.19.0: + fastq@1.19.1: dependencies: - reusify: 1.0.4 + reusify: 1.1.0 fb-watchman@2.0.2: dependencies: bser: 2.1.1 + fdir@6.4.4(picomatch@4.0.2): + optionalDependencies: + picomatch: 4.0.2 + file-entry-cache@8.0.0: dependencies: flat-cache: 4.0.1 @@ -5641,10 +5632,10 @@ snapshots: flat-cache@4.0.1: dependencies: - flatted: 3.3.2 + flatted: 3.3.3 keyv: 4.5.4 - flatted@3.3.2: {} + flatted@3.3.3: {} for-each@0.3.5: dependencies: @@ -5680,7 +5671,7 @@ snapshots: function.prototype.name@1.1.8: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 functions-have-names: 1.2.3 hasown: 2.0.2 @@ -5692,7 +5683,7 @@ snapshots: get-caller-file@2.0.5: {} - get-intrinsic@1.2.7: + get-intrinsic@1.3.0: dependencies: call-bind-apply-helpers: 1.0.2 es-define-property: 1.0.1 @@ -5712,15 +5703,13 @@ snapshots: dunder-proto: 1.0.1 es-object-atoms: 1.1.1 - get-stdin@9.0.0: {} - get-stream@6.0.1: {} get-symbol-description@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 givens@1.3.9: {} @@ -5754,22 +5743,13 @@ snapshots: define-properties: 1.2.1 gopd: 1.2.0 - globby@14.1.0: - dependencies: - '@sindresorhus/merge-streams': 2.3.0 - fast-glob: 3.3.3 - ignore: 7.0.3 - path-type: 6.0.0 - slash: 5.1.0 - unicorn-magic: 0.3.0 - gopd@1.2.0: {} graceful-fs@4.2.11: {} graphemer@1.4.0: {} - graphql@16.10.0: {} + graphql@16.11.0: {} has-bigints@1.1.0: {} @@ -5805,14 +5785,14 @@ snapshots: dependencies: '@tootallnate/once': 2.0.0 agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color https-proxy-agent@5.0.1: dependencies: agent-base: 6.0.2 - debug: 4.4.0 + debug: 4.4.1 transitivePeerDependencies: - supports-color @@ -5824,7 +5804,7 @@ snapshots: ignore@5.3.2: {} - ignore@7.0.3: {} + ignore@7.0.4: {} import-fresh@3.3.1: dependencies: @@ -5856,15 +5836,15 @@ snapshots: is-array-buffer@3.0.5: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 is-arrayish@0.2.1: {} is-async-function@2.1.1: dependencies: async-function: 1.0.0 - call-bound: 1.0.3 + call-bound: 1.0.4 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -5879,7 +5859,7 @@ snapshots: is-boolean-object@1.2.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-callable@1.2.7: {} @@ -5890,20 +5870,20 @@ snapshots: is-data-view@1.0.2: dependencies: - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 is-typed-array: 1.1.15 is-date-object@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-extglob@2.1.1: {} is-finalizationregistry@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-fullwidth-code-point@3.0.0: {} @@ -5911,7 +5891,7 @@ snapshots: is-generator-function@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 get-proto: 1.0.1 has-tostringtag: 1.0.2 safe-regex-test: 1.1.0 @@ -5928,7 +5908,7 @@ snapshots: is-number-object@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-number@7.0.0: {} @@ -5937,7 +5917,7 @@ snapshots: is-regex@1.2.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 gopd: 1.2.0 has-tostringtag: 1.0.2 hasown: 2.0.2 @@ -5946,35 +5926,35 @@ snapshots: is-shared-array-buffer@1.0.4: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-stream@2.0.1: {} is-string@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-tostringtag: 1.0.2 is-symbol@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-symbols: 1.1.0 safe-regex-test: 1.1.0 is-typed-array@1.1.15: dependencies: - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 is-weakmap@2.0.2: {} is-weakref@1.1.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 is-weakset@2.0.4: dependencies: - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 isarray@2.0.5: {} @@ -5984,8 +5964,8 @@ snapshots: istanbul-lib-instrument@5.2.1: dependencies: - '@babel/core': 7.26.9 - '@babel/parser': 7.26.9 + '@babel/core': 7.27.1 + '@babel/parser': 7.27.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 semver: 6.3.1 @@ -5994,11 +5974,11 @@ snapshots: istanbul-lib-instrument@6.0.3: dependencies: - '@babel/core': 7.26.9 - '@babel/parser': 7.26.9 + '@babel/core': 7.27.1 + '@babel/parser': 7.27.2 '@istanbuljs/schema': 0.1.3 istanbul-lib-coverage: 3.2.2 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color @@ -6010,7 +5990,7 @@ snapshots: istanbul-lib-source-maps@4.0.1: dependencies: - debug: 4.4.0 + debug: 4.4.1 istanbul-lib-coverage: 3.2.2 source-map: 0.6.1 transitivePeerDependencies: @@ -6021,9 +6001,9 @@ snapshots: html-escaper: 2.0.2 istanbul-lib-report: 3.0.1 - jest-axe@9.0.0: + jest-axe@10.0.0: dependencies: - axe-core: 4.9.1 + axe-core: 4.10.2 chalk: 4.1.2 jest-matcher-utils: 29.2.2 lodash.merge: 4.6.2 @@ -6040,10 +6020,10 @@ snapshots: '@jest/expect': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.4 + '@types/node': 22.15.21 chalk: 4.1.2 co: 4.6.0 - dedent: 1.5.3 + dedent: 1.6.0 is-generator-fn: 2.1.0 jest-each: 29.7.0 jest-matcher-utils: 29.7.0 @@ -6060,16 +6040,16 @@ snapshots: - babel-plugin-macros - supports-color - jest-cli@29.7.0(@types/node@22.13.4): + jest-cli@29.7.0(@types/node@22.15.21): dependencies: '@jest/core': 29.7.0 '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 chalk: 4.1.2 - create-jest: 29.7.0(@types/node@22.13.4) + create-jest: 29.7.0(@types/node@22.15.21) exit: 0.1.2 import-local: 3.2.0 - jest-config: 29.7.0(@types/node@22.13.4) + jest-config: 29.7.0(@types/node@22.15.21) jest-util: 29.7.0 jest-validate: 29.7.0 yargs: 17.7.2 @@ -6079,12 +6059,12 @@ snapshots: - supports-color - ts-node - jest-config@29.7.0(@types/node@22.13.4): + jest-config@29.7.0(@types/node@22.15.21): dependencies: - '@babel/core': 7.26.9 + '@babel/core': 7.27.1 '@jest/test-sequencer': 29.7.0 '@jest/types': 29.6.3 - babel-jest: 29.7.0(@babel/core@7.26.9) + babel-jest: 29.7.0(@babel/core@7.27.1) chalk: 4.1.2 ci-info: 3.9.0 deepmerge: 4.3.1 @@ -6104,7 +6084,7 @@ snapshots: slash: 3.0.0 strip-json-comments: 3.1.1 optionalDependencies: - '@types/node': 22.13.4 + '@types/node': 22.15.21 transitivePeerDependencies: - babel-plugin-macros - supports-color @@ -6134,7 +6114,7 @@ snapshots: '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 '@types/jsdom': 20.0.1 - '@types/node': 22.13.4 + '@types/node': 22.15.21 jest-mock: 29.7.0 jest-util: 29.7.0 jsdom: 20.0.3 @@ -6148,16 +6128,15 @@ snapshots: '@jest/environment': 29.7.0 '@jest/fake-timers': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.4 + '@types/node': 22.15.21 jest-mock: 29.7.0 jest-util: 29.7.0 - jest-extended@4.0.2(jest@29.7.0(@types/node@22.13.4)): + jest-extended@5.0.3(jest@29.7.0(@types/node@22.15.21)): dependencies: jest-diff: 29.7.0 - jest-get-type: 29.6.3 optionalDependencies: - jest: 29.7.0(@types/node@22.13.4) + jest: 29.7.0(@types/node@22.15.21) jest-fixed-jsdom@0.0.9(jest-environment-jsdom@29.7.0): dependencies: @@ -6169,7 +6148,7 @@ snapshots: dependencies: '@jest/types': 29.6.3 '@types/graceful-fs': 4.1.9 - '@types/node': 22.13.4 + '@types/node': 22.15.21 anymatch: 3.1.3 fb-watchman: 2.0.2 graceful-fs: 4.2.11 @@ -6202,7 +6181,7 @@ snapshots: jest-message-util@29.7.0: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 '@jest/types': 29.6.3 '@types/stack-utils': 2.0.3 chalk: 4.1.2 @@ -6215,7 +6194,7 @@ snapshots: jest-mock@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.13.4 + '@types/node': 22.15.21 jest-util: 29.7.0 jest-pnp-resolver@1.2.3(jest-resolve@29.7.0): @@ -6250,7 +6229,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.4 + '@types/node': 22.15.21 chalk: 4.1.2 emittery: 0.13.1 graceful-fs: 4.2.11 @@ -6278,7 +6257,7 @@ snapshots: '@jest/test-result': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.4 + '@types/node': 22.15.21 chalk: 4.1.2 cjs-module-lexer: 1.4.3 collect-v8-coverage: 1.0.2 @@ -6298,15 +6277,15 @@ snapshots: jest-snapshot@29.7.0: dependencies: - '@babel/core': 7.26.9 - '@babel/generator': 7.26.9 - '@babel/plugin-syntax-jsx': 7.25.9(@babel/core@7.26.9) - '@babel/plugin-syntax-typescript': 7.25.9(@babel/core@7.26.9) - '@babel/types': 7.26.9 + '@babel/core': 7.27.1 + '@babel/generator': 7.27.1 + '@babel/plugin-syntax-jsx': 7.27.1(@babel/core@7.27.1) + '@babel/plugin-syntax-typescript': 7.27.1(@babel/core@7.27.1) + '@babel/types': 7.27.1 '@jest/expect-utils': 29.7.0 '@jest/transform': 29.7.0 '@jest/types': 29.6.3 - babel-preset-current-node-syntax: 1.1.0(@babel/core@7.26.9) + babel-preset-current-node-syntax: 1.1.0(@babel/core@7.27.1) chalk: 4.1.2 expect: 29.7.0 graceful-fs: 4.2.11 @@ -6317,14 +6296,14 @@ snapshots: jest-util: 29.7.0 natural-compare: 1.4.0 pretty-format: 29.7.0 - semver: 7.7.1 + semver: 7.7.2 transitivePeerDependencies: - supports-color jest-util@29.7.0: dependencies: '@jest/types': 29.6.3 - '@types/node': 22.13.4 + '@types/node': 22.15.21 chalk: 4.1.2 ci-info: 3.9.0 graceful-fs: 4.2.11 @@ -6343,7 +6322,7 @@ snapshots: dependencies: '@jest/test-result': 29.7.0 '@jest/types': 29.6.3 - '@types/node': 22.13.4 + '@types/node': 22.15.21 ansi-escapes: 4.3.2 chalk: 4.1.2 emittery: 0.13.1 @@ -6352,17 +6331,17 @@ snapshots: jest-worker@29.7.0: dependencies: - '@types/node': 22.13.4 + '@types/node': 22.15.21 jest-util: 29.7.0 merge-stream: 2.0.0 supports-color: 8.1.1 - jest@29.7.0(@types/node@22.13.4): + jest@29.7.0(@types/node@22.15.21): dependencies: '@jest/core': 29.7.0 '@jest/types': 29.6.3 import-local: 3.2.0 - jest-cli: 29.7.0(@types/node@22.13.4) + jest-cli: 29.7.0(@types/node@22.15.21) transitivePeerDependencies: - '@types/node' - babel-plugin-macros @@ -6390,7 +6369,7 @@ snapshots: jsdom@20.0.3: dependencies: abab: 2.0.6 - acorn: 8.14.0 + acorn: 8.14.1 acorn-globals: 7.0.1 cssom: 0.5.0 cssstyle: 2.3.0 @@ -6403,8 +6382,8 @@ snapshots: http-proxy-agent: 5.0.0 https-proxy-agent: 5.0.1 is-potential-custom-element-name: 1.0.1 - nwsapi: 2.2.16 - parse5: 7.2.1 + nwsapi: 2.2.20 + parse5: 7.3.0 saxes: 6.0.0 symbol-tree: 3.2.4 tough-cookie: 4.1.4 @@ -6413,7 +6392,7 @@ snapshots: whatwg-encoding: 2.0.0 whatwg-mimetype: 3.0.0 whatwg-url: 11.0.0 - ws: 8.18.0 + ws: 8.18.2 xml-name-validator: 4.0.0 transitivePeerDependencies: - bufferutil @@ -6488,7 +6467,7 @@ snapshots: make-dir@4.0.0: dependencies: - semver: 7.7.1 + semver: 7.7.2 makeerror@1.0.12: dependencies: @@ -6511,7 +6490,7 @@ snapshots: dependencies: mime-db: 1.52.0 - mime@4.0.6: {} + mime@4.0.7: {} mimic-fn@2.1.0: {} @@ -6529,34 +6508,34 @@ snapshots: ms@2.1.3: {} - msw@2.7.0(@types/node@22.13.4)(typescript@5.7.3): + msw@2.8.4(@types/node@22.15.21)(typescript@5.8.3): dependencies: '@bundled-es-modules/cookie': 2.0.1 '@bundled-es-modules/statuses': 1.0.1 '@bundled-es-modules/tough-cookie': 0.1.6 - '@inquirer/confirm': 5.1.5(@types/node@22.13.4) + '@inquirer/confirm': 5.1.10(@types/node@22.15.21) '@mswjs/interceptors': 0.37.6 '@open-draft/deferred-promise': 2.2.0 '@open-draft/until': 2.1.0 '@types/cookie': 0.6.0 '@types/statuses': 2.0.5 - graphql: 16.10.0 + graphql: 16.11.0 headers-polyfill: 4.0.3 is-node-process: 1.2.0 outvariant: 1.4.3 path-to-regexp: 6.3.0 picocolors: 1.1.1 strict-event-emitter: 0.5.1 - type-fest: 4.34.1 + type-fest: 4.41.0 yargs: 17.7.2 optionalDependencies: - typescript: 5.7.3 + typescript: 5.8.3 transitivePeerDependencies: - '@types/node' mute-stream@2.0.0: {} - nanoid@3.3.8: {} + nanoid@3.3.11: {} natural-compare@1.4.0: {} @@ -6574,7 +6553,7 @@ snapshots: dependencies: path-key: 3.1.1 - nwsapi@2.2.16: {} + nwsapi@2.2.20: {} object-inspect@1.13.4: {} @@ -6583,7 +6562,7 @@ snapshots: object.assign@4.1.7: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 has-symbols: 1.1.0 @@ -6605,7 +6584,7 @@ snapshots: object.values@1.2.1: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -6632,7 +6611,7 @@ snapshots: own-keys@1.0.1: dependencies: - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 object-keys: 1.1.1 safe-push-apply: 1.0.0 @@ -6660,14 +6639,14 @@ snapshots: parse-json@5.2.0: dependencies: - '@babel/code-frame': 7.26.2 + '@babel/code-frame': 7.27.1 error-ex: 1.3.2 json-parse-even-better-errors: 2.3.1 lines-and-columns: 1.2.4 - parse5@7.2.1: + parse5@7.3.0: dependencies: - entities: 4.5.0 + entities: 6.0.0 path-exists@4.0.0: {} @@ -6679,8 +6658,6 @@ snapshots: path-to-regexp@6.3.0: {} - path-type@6.0.0: {} - picocolors@1.1.1: {} picomatch@2.3.1: {} @@ -6691,71 +6668,70 @@ snapshots: pify@4.0.1: {} - pirates@4.0.6: {} + pirates@4.0.7: {} pkg-dir@4.2.0: dependencies: find-up: 4.1.0 - playwright-core@1.50.1: {} + playwright-core@1.52.0: {} - playwright@1.50.1: + playwright@1.52.0: dependencies: - playwright-core: 1.50.1 + playwright-core: 1.52.0 optionalDependencies: fsevents: 2.3.2 possible-typed-array-names@1.1.0: {} - postcss-cli@11.0.0(postcss@8.5.2): + postcss-cli@11.0.1(postcss@8.5.3): dependencies: chokidar: 3.6.0 - dependency-graph: 0.11.0 + dependency-graph: 1.0.0 fs-extra: 11.3.0 - get-stdin: 9.0.0 - globby: 14.1.0 picocolors: 1.1.1 - postcss: 8.5.2 - postcss-load-config: 5.1.0(postcss@8.5.2) - postcss-reporter: 7.1.0(postcss@8.5.2) + postcss: 8.5.3 + postcss-load-config: 5.1.0(postcss@8.5.3) + postcss-reporter: 7.1.0(postcss@8.5.3) pretty-hrtime: 1.0.3 read-cache: 1.0.0 slash: 5.1.0 + tinyglobby: 0.2.13 yargs: 17.7.2 transitivePeerDependencies: - jiti - tsx - postcss-import@16.1.0(postcss@8.5.2): + postcss-import@16.1.0(postcss@8.5.3): dependencies: - postcss: 8.5.2 + postcss: 8.5.3 postcss-value-parser: 4.2.0 read-cache: 1.0.0 resolve: 1.22.10 - postcss-load-config@5.1.0(postcss@8.5.2): + postcss-load-config@5.1.0(postcss@8.5.3): dependencies: lilconfig: 3.1.3 - yaml: 2.7.0 + yaml: 2.8.0 optionalDependencies: - postcss: 8.5.2 + postcss: 8.5.3 - postcss-load-config@6.0.1(postcss@8.5.2)(yaml@2.7.0): + postcss-load-config@6.0.1(postcss@8.5.3)(yaml@2.8.0): dependencies: lilconfig: 3.1.3 optionalDependencies: - postcss: 8.5.2 - yaml: 2.7.0 + postcss: 8.5.3 + yaml: 2.8.0 - postcss-nested@7.0.2(postcss@8.5.2): + postcss-nested@7.0.2(postcss@8.5.3): dependencies: - postcss: 8.5.2 + postcss: 8.5.3 postcss-selector-parser: 7.1.0 - postcss-reporter@7.1.0(postcss@8.5.2): + postcss-reporter@7.1.0(postcss@8.5.3): dependencies: picocolors: 1.1.1 - postcss: 8.5.2 + postcss: 8.5.3 thenby: 1.3.4 postcss-selector-parser@7.1.0: @@ -6765,15 +6741,15 @@ snapshots: postcss-value-parser@4.2.0: {} - postcss@8.5.2: + postcss@8.5.3: dependencies: - nanoid: 3.3.8 + nanoid: 3.3.11 picocolors: 1.1.1 source-map-js: 1.2.1 prelude-ls@1.2.1: {} - prettier@3.5.1: {} + prettier@3.5.3: {} pretty-format@27.5.1: dependencies: @@ -6834,7 +6810,7 @@ snapshots: es-abstract: 1.23.9 es-errors: 1.3.0 es-object-atoms: 1.1.1 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 get-proto: 1.0.1 which-builtin-type: 1.2.1 @@ -6844,12 +6820,6 @@ snapshots: regenerate@1.4.2: {} - regenerator-runtime@0.14.1: {} - - regenerator-transform@0.15.2: - dependencies: - '@babel/runtime': 7.26.9 - regexp.prototype.flags@1.5.4: dependencies: call-bind: 1.0.8 @@ -6896,36 +6866,37 @@ snapshots: path-parse: 1.0.7 supports-preserve-symlinks-flag: 1.0.0 - reusify@1.0.4: {} + reusify@1.1.0: {} rollup-plugin-serve@3.0.0: dependencies: - mime: 4.0.6 + mime: 4.0.7 opener: 1.5.2 - rollup@4.34.7: + rollup@4.41.1: dependencies: - '@types/estree': 1.0.6 + '@types/estree': 1.0.7 optionalDependencies: - '@rollup/rollup-android-arm-eabi': 4.34.7 - '@rollup/rollup-android-arm64': 4.34.7 - '@rollup/rollup-darwin-arm64': 4.34.7 - '@rollup/rollup-darwin-x64': 4.34.7 - '@rollup/rollup-freebsd-arm64': 4.34.7 - '@rollup/rollup-freebsd-x64': 4.34.7 - '@rollup/rollup-linux-arm-gnueabihf': 4.34.7 - '@rollup/rollup-linux-arm-musleabihf': 4.34.7 - '@rollup/rollup-linux-arm64-gnu': 4.34.7 - '@rollup/rollup-linux-arm64-musl': 4.34.7 - '@rollup/rollup-linux-loongarch64-gnu': 4.34.7 - '@rollup/rollup-linux-powerpc64le-gnu': 4.34.7 - '@rollup/rollup-linux-riscv64-gnu': 4.34.7 - '@rollup/rollup-linux-s390x-gnu': 4.34.7 - '@rollup/rollup-linux-x64-gnu': 4.34.7 - '@rollup/rollup-linux-x64-musl': 4.34.7 - '@rollup/rollup-win32-arm64-msvc': 4.34.7 - '@rollup/rollup-win32-ia32-msvc': 4.34.7 - '@rollup/rollup-win32-x64-msvc': 4.34.7 + '@rollup/rollup-android-arm-eabi': 4.41.1 + '@rollup/rollup-android-arm64': 4.41.1 + '@rollup/rollup-darwin-arm64': 4.41.1 + '@rollup/rollup-darwin-x64': 4.41.1 + '@rollup/rollup-freebsd-arm64': 4.41.1 + '@rollup/rollup-freebsd-x64': 4.41.1 + '@rollup/rollup-linux-arm-gnueabihf': 4.41.1 + '@rollup/rollup-linux-arm-musleabihf': 4.41.1 + '@rollup/rollup-linux-arm64-gnu': 4.41.1 + '@rollup/rollup-linux-arm64-musl': 4.41.1 + '@rollup/rollup-linux-loongarch64-gnu': 4.41.1 + '@rollup/rollup-linux-powerpc64le-gnu': 4.41.1 + '@rollup/rollup-linux-riscv64-gnu': 4.41.1 + '@rollup/rollup-linux-riscv64-musl': 4.41.1 + '@rollup/rollup-linux-s390x-gnu': 4.41.1 + '@rollup/rollup-linux-x64-gnu': 4.41.1 + '@rollup/rollup-linux-x64-musl': 4.41.1 + '@rollup/rollup-win32-arm64-msvc': 4.41.1 + '@rollup/rollup-win32-ia32-msvc': 4.41.1 + '@rollup/rollup-win32-x64-msvc': 4.41.1 fsevents: 2.3.3 run-parallel@1.2.0: @@ -6935,8 +6906,8 @@ snapshots: safe-array-concat@1.1.3: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 - get-intrinsic: 1.2.7 + call-bound: 1.0.4 + get-intrinsic: 1.3.0 has-symbols: 1.1.0 isarray: 2.0.5 @@ -6949,7 +6920,7 @@ snapshots: safe-regex-test@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-regex: 1.2.1 @@ -6963,7 +6934,7 @@ snapshots: semver@6.3.1: {} - semver@7.7.1: {} + semver@7.7.2: {} serialize-javascript@6.0.2: dependencies: @@ -6974,7 +6945,7 @@ snapshots: define-data-property: 1.1.4 es-errors: 1.3.0 function-bind: 1.1.2 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 gopd: 1.2.0 has-property-descriptors: 1.0.2 @@ -7004,16 +6975,16 @@ snapshots: side-channel-map@1.0.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 object-inspect: 1.13.4 side-channel-weakmap@1.0.2: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 - get-intrinsic: 1.2.7 + get-intrinsic: 1.3.0 object-inspect: 1.13.4 side-channel-map: 1.0.1 @@ -7077,7 +7048,7 @@ snapshots: string.prototype.trim@1.2.10: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-data-property: 1.1.4 define-properties: 1.2.1 es-abstract: 1.23.9 @@ -7087,7 +7058,7 @@ snapshots: string.prototype.trimend@1.0.9: dependencies: call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 define-properties: 1.2.1 es-object-atoms: 1.1.1 @@ -7125,10 +7096,10 @@ snapshots: symbol-tree@3.2.4: {} - terser@5.39.0: + terser@5.39.2: dependencies: '@jridgewell/source-map': 0.3.6 - acorn: 8.14.0 + acorn: 8.14.1 commander: 2.20.3 source-map-support: 0.5.21 @@ -7140,6 +7111,11 @@ snapshots: thenby@1.3.4: {} + tinyglobby@0.2.13: + dependencies: + fdir: 6.4.4(picomatch@4.0.2) + picomatch: 4.0.2 + tmpl@1.0.5: {} to-regex-range@5.0.1: @@ -7157,9 +7133,9 @@ snapshots: dependencies: punycode: 2.3.1 - ts-api-utils@2.0.1(typescript@5.7.3): + ts-api-utils@2.1.0(typescript@5.8.3): dependencies: - typescript: 5.7.3 + typescript: 5.8.3 tsconfig-paths@3.15.0: dependencies: @@ -7180,11 +7156,11 @@ snapshots: type-fest@0.21.3: {} - type-fest@4.34.1: {} + type-fest@4.41.0: {} typed-array-buffer@1.0.3: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 es-errors: 1.3.0 is-typed-array: 1.1.15 @@ -7215,26 +7191,26 @@ snapshots: possible-typed-array-names: 1.1.0 reflect.getprototypeof: 1.0.10 - typescript-eslint@8.24.0(eslint@9.20.1)(typescript@5.7.3): + typescript-eslint@8.32.1(eslint@9.27.0)(typescript@5.8.3): dependencies: - '@typescript-eslint/eslint-plugin': 8.24.0(@typescript-eslint/parser@8.24.0(eslint@9.20.1)(typescript@5.7.3))(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/parser': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - '@typescript-eslint/utils': 8.24.0(eslint@9.20.1)(typescript@5.7.3) - eslint: 9.20.1 - typescript: 5.7.3 + '@typescript-eslint/eslint-plugin': 8.32.1(@typescript-eslint/parser@8.32.1(eslint@9.27.0)(typescript@5.8.3))(eslint@9.27.0)(typescript@5.8.3) + '@typescript-eslint/parser': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + '@typescript-eslint/utils': 8.32.1(eslint@9.27.0)(typescript@5.8.3) + eslint: 9.27.0 + typescript: 5.8.3 transitivePeerDependencies: - supports-color - typescript@5.7.3: {} + typescript@5.8.3: {} unbox-primitive@1.1.0: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 has-bigints: 1.1.0 has-symbols: 1.1.0 which-boxed-primitive: 1.1.1 - undici-types@6.20.0: {} + undici-types@6.21.0: {} unicode-canonical-property-names-ecmascript@2.0.1: {} @@ -7247,15 +7223,13 @@ snapshots: unicode-property-aliases-ecmascript@2.1.0: {} - unicorn-magic@0.3.0: {} - universalify@0.2.0: {} universalify@2.0.1: {} - update-browserslist-db@1.1.2(browserslist@4.24.4): + update-browserslist-db@1.1.3(browserslist@4.24.5): dependencies: - browserslist: 4.24.4 + browserslist: 4.24.5 escalade: 3.2.0 picocolors: 1.1.1 @@ -7307,7 +7281,7 @@ snapshots: which-builtin-type@1.2.1: dependencies: - call-bound: 1.0.3 + call-bound: 1.0.4 function.prototype.name: 1.1.8 has-tostringtag: 1.0.2 is-async-function: 2.1.1 @@ -7319,7 +7293,7 @@ snapshots: isarray: 2.0.5 which-boxed-primitive: 1.1.1 which-collection: 1.0.2 - which-typed-array: 1.1.18 + which-typed-array: 1.1.19 which-collection@1.0.2: dependencies: @@ -7328,12 +7302,13 @@ snapshots: is-weakmap: 2.0.2 is-weakset: 2.0.4 - which-typed-array@1.1.18: + which-typed-array@1.1.19: dependencies: available-typed-arrays: 1.0.7 call-bind: 1.0.8 - call-bound: 1.0.3 + call-bound: 1.0.4 for-each: 0.3.5 + get-proto: 1.0.1 gopd: 1.2.0 has-tostringtag: 1.0.2 @@ -7362,7 +7337,7 @@ snapshots: imurmurhash: 0.1.4 signal-exit: 3.0.7 - ws@8.18.0: {} + ws@8.18.2: {} xml-name-validator@4.0.0: {} @@ -7372,7 +7347,7 @@ snapshots: yallist@3.1.1: {} - yaml@2.7.0: {} + yaml@2.8.0: {} yargs-parser@21.1.1: {} diff --git a/src/nodeElement/index.ts b/src/nodeElement/index.ts index 1a855c2e..79e58644 100644 --- a/src/nodeElement/index.ts +++ b/src/nodeElement/index.ts @@ -52,9 +52,7 @@ class NodeElement { public init(node: Node): void { this.node = node; - if (!node.element) { - node.element = this.treeElement; - } + node.element ??= this.treeElement; this.element = node.element; } diff --git a/src/scrollHandler.ts b/src/scrollHandler.ts index 1689a625..72f8e019 100644 --- a/src/scrollHandler.ts +++ b/src/scrollHandler.ts @@ -44,12 +44,10 @@ export default class ScrollHandler { } private getScrollParent(): ScrollParent { - if (!this.scrollParent) { - this.scrollParent = createScrollParent( - this.treeElement, - this.refreshHitAreas, - ); - } + this.scrollParent ??= createScrollParent( + this.treeElement, + this.refreshHitAreas, + ); return this.scrollParent; } diff --git a/src/scrollHandler/containerScrollParent.ts b/src/scrollHandler/containerScrollParent.ts index b183700d..f11346fd 100644 --- a/src/scrollHandler/containerScrollParent.ts +++ b/src/scrollHandler/containerScrollParent.ts @@ -62,9 +62,7 @@ export default class ContainerScrollParent extends ScrollParent { } private getScrollParentTop() { - if (this.scrollParentTop == null) { - this.scrollParentTop = getOffsetTop(this.container); - } + this.scrollParentTop ??= getOffsetTop(this.container); return this.scrollParentTop; } diff --git a/src/scrollHandler/documentScrollParent.ts b/src/scrollHandler/documentScrollParent.ts index f89b87c8..bc7c0a6f 100644 --- a/src/scrollHandler/documentScrollParent.ts +++ b/src/scrollHandler/documentScrollParent.ts @@ -89,18 +89,14 @@ export default class DocumentScrollParent extends ScrollParent { private getDocumentScrollHeight() { // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height. - if (this.documentScrollHeight == null) { - this.documentScrollHeight = this.container.scrollHeight; - } + this.documentScrollHeight ??= this.container.scrollHeight; return this.documentScrollHeight; } private getDocumentScrollWidth() { // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width. - if (this.documentScrollWidth == null) { - this.documentScrollWidth = this.container.scrollWidth; - } + this.documentScrollWidth ??= this.container.scrollWidth; return this.documentScrollWidth; } diff --git a/src/tree.jquery.ts b/src/tree.jquery.ts index db177a75..54a15a61 100644 --- a/src/tree.jquery.ts +++ b/src/tree.jquery.ts @@ -247,9 +247,7 @@ export class JqTreeWidget extends SimpleWidget { this.options.rtl = this.getRtlOption(); - if (this.options.closedIcon == null) { - this.options.closedIcon = this.getDefaultClosedIcon(); - } + this.options.closedIcon ??= this.getDefaultClosedIcon(); this.connectHandlers(); @@ -373,9 +371,7 @@ export class JqTreeWidget extends SimpleWidget { onFinished = param2 as OnFinishOpenNode; } - if (slide == null) { - slide = this.options.slide; - } + slide ??= this.options.slide; return [slide, onFinished]; }; diff --git a/tree.jquery.debug.js b/tree.jquery.debug.js index 4c1ea434..0be5db23 100644 --- a/tree.jquery.debug.js +++ b/tree.jquery.debug.js @@ -21,15 +21,14 @@ var jqtree = (function (exports) { 'use strict'; class DataLoader { - constructor(_ref) { - let { - dataFilter, - loadData, - onLoadFailed, - onLoading, - treeElement, - triggerEvent - } = _ref; + constructor({ + dataFilter, + loadData, + onLoadFailed, + onLoading, + treeElement, + triggerEvent + }) { this.dataFilter = dataFilter; this.loadData = loadData; this.onLoadFailed = onLoadFailed; @@ -153,14 +152,13 @@ var jqtree = (function (exports) { } class DragElement { - constructor(_ref) { - let { - autoEscape, - nodeName, - offsetX, - offsetY, - treeElement - } = _ref; + constructor({ + autoEscape, + nodeName, + offsetX, + offsetY, + treeElement + }) { this.offsetX = offsetX; this.offsetY = offsetY; this.element = this.createElement(nodeName, autoEscape); @@ -186,14 +184,13 @@ var jqtree = (function (exports) { } } - const iterateVisibleNodes = (tree, _ref) => { - let { - handleAfterOpenFolder, - handleClosedFolder, - handleFirstNode, - handleNode, - handleOpenFolder - } = _ref; + const iterateVisibleNodes = (tree, { + handleAfterOpenFolder, + handleClosedFolder, + handleFirstNode, + handleNode, + handleOpenFolder + }) => { let isFirstNode = true; const iterate = (node, nextNode) => { let mustIterateInside = (node.is_open || !node.element) && node.hasChildren(); @@ -365,25 +362,24 @@ var jqtree = (function (exports) { const generateHitAreas = (tree, currentNode, treeBottom) => generateHitAreasFromPositions(generateHitPositions(tree, currentNode), treeBottom); class DragAndDropHandler { - constructor(_ref) { - let { - autoEscape, - getNodeElement, - getNodeElementForNode, - getScrollLeft, - getTree, - onCanMove, - onCanMoveTo, - onDragMove, - onDragStop, - onIsMoveHandle, - openFolderDelay, - openNode, - refreshElements, - slide, - treeElement, - triggerEvent - } = _ref; + constructor({ + autoEscape, + getNodeElement, + getNodeElementForNode, + getScrollLeft, + getTree, + onCanMove, + onCanMoveTo, + onDragMove, + onDragStop, + onIsMoveHandle, + openFolderDelay, + openNode, + refreshElements, + slide, + treeElement, + triggerEvent + }) { this.autoEscape = autoEscape; this.getNodeElement = getNodeElement; this.getNodeElementForNode = getNodeElementForNode; @@ -641,21 +637,20 @@ var jqtree = (function (exports) { } class ElementsRenderer { - constructor(_ref) { - let { - $element, - autoEscape, - buttonLeft, - closedIcon, - dragAndDrop, - getTree, - isNodeSelected, - onCreateLi, - openedIcon, - rtl, - showEmptyFolder, - tabIndex - } = _ref; + constructor({ + $element, + autoEscape, + buttonLeft, + closedIcon, + dragAndDrop, + getTree, + isNodeSelected, + onCreateLi, + openedIcon, + rtl, + showEmptyFolder, + tabIndex + }) { this.autoEscape = autoEscape; this.buttonLeft = buttonLeft; this.dragAndDrop = dragAndDrop; @@ -880,15 +875,14 @@ var jqtree = (function (exports) { } class KeyHandler { - constructor(_ref) { - let { - closeNode, - getSelectedNode, - isFocusOnTree, - keyboardSupport, - openNode, - selectNode - } = _ref; + constructor({ + closeNode, + getSelectedNode, + isFocusOnTree, + keyboardSupport, + openNode, + selectNode + }) { this.closeNode = closeNode; this.getSelectedNode = getSelectedNode; this.isFocusOnTree = isFocusOnTree; @@ -993,20 +987,19 @@ var jqtree = (function (exports) { }); class MouseHandler { - constructor(_ref) { - let { - element, - getMouseDelay, - getNode, - onClickButton, - onClickTitle, - onMouseCapture, - onMouseDrag, - onMouseStart, - onMouseStop, - triggerEvent, - useContextMenu - } = _ref; + constructor({ + element, + getMouseDelay, + getNode, + onClickButton, + onClickTitle, + onMouseCapture, + onMouseDrag, + onMouseStart, + onMouseStop, + triggerEvent, + useContextMenu + }) { this.element = element; this.getMouseDelay = getMouseDelay; this.getNode = getNode; @@ -1258,10 +1251,7 @@ var jqtree = (function (exports) { const isNodeRecordWithChildren = data => typeof data === "object" && "children" in data && data.children instanceof Array; class Node { - constructor() { - let nodeData = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : null; - let isRoot = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; - let nodeClass = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : Node; + constructor(nodeData = null, isRoot = false, nodeClass = Node) { this.name = ""; this.load_on_demand = false; this.isEmptyFolder = nodeData != null && isNodeRecordWithChildren(nodeData) && nodeData.children.length === 0; @@ -1369,8 +1359,7 @@ var jqtree = (function (exports) { /* Get the tree as data. */ - getData() { - let includeParent = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : false; + getData(includeParent = false) { const getDataFromNodes = nodes => { return nodes.map(node => { const tmpNode = {}; @@ -1417,8 +1406,7 @@ var jqtree = (function (exports) { } return level; } - getNextNode() { - let includeChildren = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : true; + getNextNode(includeChildren = true) { if (includeChildren && this.hasChildren()) { return this.children[0] ?? null; } else if (!this.parent) { @@ -1848,13 +1836,12 @@ var jqtree = (function (exports) { } class NodeElement { - constructor(_ref) { - let { - getScrollLeft, - node, - tabIndex, - treeElement - } = _ref; + constructor({ + getScrollLeft, + node, + tabIndex, + treeElement + }) { this.getScrollLeft = getScrollLeft; this.tabIndex = tabIndex; this.treeElement = treeElement; @@ -1876,9 +1863,7 @@ var jqtree = (function (exports) { } init(node) { this.node = node; - if (!node.element) { - node.element = this.treeElement; - } + node.element ??= this.treeElement; this.element = node.element; } select(mustSetFocus) { @@ -1907,16 +1892,15 @@ var jqtree = (function (exports) { } class FolderElement extends NodeElement { - constructor(_ref) { - let { - closedIconElement, - getScrollLeft, - node, - openedIconElement, - tabIndex, - treeElement, - triggerEvent - } = _ref; + constructor({ + closedIconElement, + getScrollLeft, + node, + openedIconElement, + tabIndex, + treeElement, + triggerEvent + }) { super({ getScrollLeft, node, @@ -1995,19 +1979,18 @@ var jqtree = (function (exports) { } class SaveStateHandler { - constructor(_ref) { - let { - addToSelection, - getNodeById, - getSelectedNodes, - getTree, - onGetStateFromStorage, - onSetStateFromStorage, - openNode, - refreshElements, - removeFromSelection, - saveState - } = _ref; + constructor({ + addToSelection, + getNodeById, + getSelectedNodes, + getTree, + onGetStateFromStorage, + onSetStateFromStorage, + openNode, + refreshElements, + removeFromSelection, + saveState + }) { this.addToSelection = addToSelection; this.getNodeById = getNodeById; this.getSelectedNodes = getSelectedNodes; @@ -2183,12 +2166,11 @@ var jqtree = (function (exports) { } } - class ContainerScrollParent { - constructor(_ref) { - let { - container, - refreshHitAreas - } = _ref; + class ScrollParent { + constructor({ + container, + refreshHitAreas + }) { this.container = container; this.refreshHitAreas = refreshHitAreas; } @@ -2197,7 +2179,7 @@ var jqtree = (function (exports) { if (this.horizontalScrollDirection !== newHorizontalScrollDirection) { this.horizontalScrollDirection = newHorizontalScrollDirection; if (this.horizontalScrollTimeout != null) { - window.clearTimeout(this.verticalScrollTimeout); + window.clearTimeout(this.horizontalScrollTimeout); } if (newHorizontalScrollDirection) { this.horizontalScrollTimeout = window.setTimeout(this.scrollHorizontally.bind(this), 40); @@ -2226,8 +2208,40 @@ var jqtree = (function (exports) { stopScrolling() { this.horizontalScrollDirection = undefined; this.verticalScrollDirection = undefined; - this.scrollParentTop = undefined; - this.scrollParentBottom = undefined; + } + scrollHorizontally() { + if (!this.horizontalScrollDirection) { + return; + } + const distance = this.horizontalScrollDirection === "left" ? -20 : 20; + this.container.scrollBy({ + behavior: "instant", + left: distance, + top: 0 + }); + this.refreshHitAreas(); + setTimeout(this.scrollHorizontally.bind(this), 40); + } + scrollVertically() { + if (!this.verticalScrollDirection) { + return; + } + const distance = this.verticalScrollDirection === "top" ? -20 : 20; + this.container.scrollBy({ + behavior: "instant", + left: 0, + top: distance + }); + this.refreshHitAreas(); + setTimeout(this.scrollVertically.bind(this), 40); + } + } + + class ContainerScrollParent extends ScrollParent { + stopScrolling() { + super.stopScrolling(); + this.horizontalScrollDirection = undefined; + this.verticalScrollDirection = undefined; } getNewHorizontalScrollDirection(pageX) { const scrollParentOffset = getElementPosition(this.container); @@ -2260,110 +2274,33 @@ var jqtree = (function (exports) { return this.scrollParentBottom; } getScrollParentTop() { - if (this.scrollParentTop == null) { - this.scrollParentTop = getOffsetTop(this.container); - } + this.scrollParentTop ??= getOffsetTop(this.container); return this.scrollParentTop; } - scrollHorizontally() { - if (!this.horizontalScrollDirection) { - return; - } - const distance = this.horizontalScrollDirection === "left" ? -20 : 20; - this.container.scrollBy({ - behavior: "instant", - left: distance, - top: 0 - }); - this.refreshHitAreas(); - setTimeout(this.scrollHorizontally.bind(this), 40); - } - scrollVertically() { - if (!this.verticalScrollDirection) { - return; - } - const distance = this.verticalScrollDirection === "top" ? -20 : 20; - this.container.scrollBy({ - behavior: "instant", - left: 0, - top: distance - }); - this.refreshHitAreas(); - setTimeout(this.scrollVertically.bind(this), 40); - } } - class DocumentScrollParent { - constructor(_ref) { - let { - refreshHitAreas, - treeElement - } = _ref; - this.refreshHitAreas = refreshHitAreas; + class DocumentScrollParent extends ScrollParent { + constructor({ + refreshHitAreas, + treeElement + }) { + super({ + container: document.documentElement, + refreshHitAreas + }); this.treeElement = treeElement; } - checkHorizontalScrolling(pageX) { - const newHorizontalScrollDirection = this.getNewHorizontalScrollDirection(pageX); - if (this.horizontalScrollDirection !== newHorizontalScrollDirection) { - this.horizontalScrollDirection = newHorizontalScrollDirection; - if (this.horizontalScrollTimeout != null) { - window.clearTimeout(this.horizontalScrollTimeout); - } - if (newHorizontalScrollDirection) { - this.horizontalScrollTimeout = window.setTimeout(this.scrollHorizontally.bind(this), 40); - } - } - } - checkVerticalScrolling(pageY) { - const newVerticalScrollDirection = this.getNewVerticalScrollDirection(pageY); - if (this.verticalScrollDirection !== newVerticalScrollDirection) { - this.verticalScrollDirection = newVerticalScrollDirection; - if (this.verticalScrollTimeout != null) { - window.clearTimeout(this.verticalScrollTimeout); - this.verticalScrollTimeout = undefined; - } - if (newVerticalScrollDirection) { - this.verticalScrollTimeout = window.setTimeout(this.scrollVertically.bind(this), 40); - } - } - } - getScrollLeft() { - return document.documentElement.scrollLeft; - } scrollToY(top) { const treeTop = getOffsetTop(this.treeElement); - document.documentElement.scrollTop = top + treeTop; + super.scrollToY(top + treeTop); } stopScrolling() { - this.horizontalScrollDirection = undefined; - this.verticalScrollDirection = undefined; + super.stopScrolling(); this.documentScrollHeight = undefined; this.documentScrollWidth = undefined; } - canScrollDown() { - const documentElement = document.documentElement; - return documentElement.scrollTop + documentElement.clientHeight < this.getDocumentScrollHeight(); - } - canScrollRight() { - const documentElement = document.documentElement; - return documentElement.scrollLeft + documentElement.clientWidth < this.getDocumentScrollWidth(); - } - getDocumentScrollHeight() { - // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height. - if (this.documentScrollHeight == null) { - this.documentScrollHeight = document.documentElement.scrollHeight; - } - return this.documentScrollHeight; - } - getDocumentScrollWidth() { - // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width. - if (this.documentScrollWidth == null) { - this.documentScrollWidth = document.documentElement.scrollWidth; - } - return this.documentScrollWidth; - } getNewHorizontalScrollDirection(pageX) { - const scrollLeft = document.documentElement.scrollLeft; + const scrollLeft = this.container.scrollLeft; const windowWidth = window.innerWidth; const isNearRightEdge = pageX > windowWidth - 20; const isNearLeftEdge = pageX - scrollLeft < 20; @@ -2376,7 +2313,7 @@ var jqtree = (function (exports) { return undefined; } getNewVerticalScrollDirection(pageY) { - const scrollTop = jQuery(document).scrollTop() ?? 0; + const scrollTop = this.container.scrollTop; const distanceTop = pageY - scrollTop; if (distanceTop < 20) { return "top"; @@ -2387,31 +2324,21 @@ var jqtree = (function (exports) { } return undefined; } - scrollHorizontally() { - if (!this.horizontalScrollDirection) { - return; - } - const distance = this.horizontalScrollDirection === "left" ? -20 : 20; - window.scrollBy({ - behavior: "instant", - left: distance, - top: 0 - }); - this.refreshHitAreas(); - setTimeout(this.scrollHorizontally.bind(this), 40); + canScrollDown() { + return this.container.scrollTop + this.container.clientHeight < this.getDocumentScrollHeight(); } - scrollVertically() { - if (!this.verticalScrollDirection) { - return; - } - const distance = this.verticalScrollDirection === "top" ? -20 : 20; - window.scrollBy({ - behavior: "instant", - left: 0, - top: distance - }); - this.refreshHitAreas(); - setTimeout(this.scrollVertically.bind(this), 40); + canScrollRight() { + return this.container.scrollLeft + this.container.clientWidth < this.getDocumentScrollWidth(); + } + getDocumentScrollHeight() { + // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height. + this.documentScrollHeight ??= this.container.scrollHeight; + return this.documentScrollHeight; + } + getDocumentScrollWidth() { + // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width. + this.documentScrollWidth ??= this.container.scrollWidth; + return this.documentScrollWidth; } } @@ -2449,11 +2376,10 @@ var jqtree = (function (exports) { }; class ScrollHandler { - constructor(_ref) { - let { - refreshHitAreas, - treeElement - } = _ref; + constructor({ + refreshHitAreas, + treeElement + }) { this.refreshHitAreas = refreshHitAreas; this.scrollParent = undefined; this.treeElement = treeElement; @@ -2478,18 +2404,15 @@ var jqtree = (function (exports) { this.getScrollParent().checkVerticalScrolling(positionInfo.pageY); } getScrollParent() { - if (!this.scrollParent) { - this.scrollParent = createScrollParent(this.treeElement, this.refreshHitAreas); - } + this.scrollParent ??= createScrollParent(this.treeElement, this.refreshHitAreas); return this.scrollParent; } } class SelectNodeHandler { - constructor(_ref) { - let { - getNodeById - } = _ref; + constructor({ + getNodeById + }) { this.getNodeById = getNodeById; this.selectedNodes = new Set(); this.clear(); @@ -2554,8 +2477,7 @@ var jqtree = (function (exports) { return false; } } - removeFromSelection(node) { - let includeChildren = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : false; + removeFromSelection(node, includeChildren = false) { if (node.id == null) { if (this.selectedSingleNode && node.element === this.selectedSingleNode.element) { this.selectedSingleNode = null; @@ -2627,7 +2549,7 @@ var jqtree = (function (exports) { }; // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access - jQuery.fn[widgetName] = function (argument1) { + jQuery.fn[widgetName] = function (argument1, ...args) { if (!argument1) { return createWidget(this, null); } else if (typeof argument1 === "object") { @@ -2639,9 +2561,6 @@ var jqtree = (function (exports) { destroyWidget(this); return undefined; } else { - for (var _len = arguments.length, args = new Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { - args[_key - 1] = arguments[_key]; - } return callFunction(this, functionName, args); } } else { @@ -2680,7 +2599,7 @@ var jqtree = (function (exports) { const NODE_PARAM_IS_EMPTY = "Node parameter is empty"; const PARAM_IS_EMPTY = "Parameter is empty: "; class JqTreeWidget extends SimpleWidget { - static defaults = (() => ({ + static defaults = { animationSpeed: "fast", autoEscape: true, autoOpen: false, @@ -2725,7 +2644,7 @@ var jqtree = (function (exports) { // The delay for starting dnd (in milliseconds) tabIndex: 0, useContextMenu: true - }))(); + }; addNodeAfter(newNodeInfo, existingNode) { const newNode = existingNode.addAfter(newNodeInfo); if (newNode) { @@ -2833,9 +2752,7 @@ var jqtree = (function (exports) { this.element = this.$el; this.isInitialized = false; this.options.rtl = this.getRtlOption(); - if (this.options.closedIcon == null) { - this.options.closedIcon = this.getDefaultClosedIcon(); - } + this.options.closedIcon ??= this.getDefaultClosedIcon(); this.connectHandlers(); this.initData(); } @@ -2918,9 +2835,7 @@ var jqtree = (function (exports) { slide = param1; onFinished = param2; } - if (slide == null) { - slide = this.options.slide; - } + slide ??= this.options.slide; return [slide, onFinished]; }; const [slide, onFinished] = parseParams(); @@ -2994,8 +2909,7 @@ var jqtree = (function (exports) { } return this.element; } - toggle(node) { - let slideParam = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + toggle(node, slideParam = null) { if (!node) { throw Error(NODE_PARAM_IS_EMPTY); } @@ -3433,9 +3347,7 @@ var jqtree = (function (exports) { return subtree === selectedNode || subtree.isParentOf(selectedNode); } } - loadFolderOnDemand(node) { - let slide = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - let onFinished = arguments.length > 2 ? arguments[2] : undefined; + loadFolderOnDemand(node, slide = true, onFinished) { node.is_loading = true; this.doLoadDataFromUrl(null, node, () => { this.openNodeInternal(node, slide, onFinished); @@ -3478,9 +3390,7 @@ var jqtree = (function (exports) { return false; } } - openNodeInternal(node) { - let slide = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; - let onFinished = arguments.length > 2 ? arguments[2] : undefined; + openNodeInternal(node, slide = true, onFinished) { const doOpenNode = (_node, _slide, _onFinished) => { if (!node.children.length) { return; diff --git a/tree.jquery.debug.js.map b/tree.jquery.debug.js.map index 972e3d0c..da5ff489 100644 --- a/tree.jquery.debug.js.map +++ b/tree.jquery.debug.js.map @@ -1 +1 @@ -{"version":3,"file":"tree.jquery.debug.js","sources":["src/dataLoader.ts","src/util.ts","src/dragAndDropHandler/binarySearch.ts","src/dragAndDropHandler/dragElement.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/elementsRenderer.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.ts","src/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/saveStateHandler.ts","src/scrollHandler/containerScrollParent.ts","src/scrollHandler/documentScrollParent.ts","src/scrollHandler/createScrollParent.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/simple.widget.ts","src/version.ts","src/tree.jquery.ts"],"sourcesContent":["import { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\n\nexport type HandleFinishedLoading = () => void;\n\ninterface DataLoaderParams {\n dataFilter?: DataFilter;\n loadData: LoadData;\n onLoadFailed?: OnLoadFailed;\n onLoading?: OnLoading;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private onLoadFailed?: OnLoadFailed;\n private onLoading?: OnLoading;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.onLoadFailed = onLoadFailed;\n this.onLoading = onLoading;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n public loadFromUrl(\n urlInfo: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const element = this.getDomElement(parentNode);\n this.addLoadingClass(element);\n this.notifyLoading(true, parentNode, element);\n\n const stopLoading = (): void => {\n this.removeLoadingClass(element);\n this.notifyLoading(false, parentNode, element);\n };\n\n const handleSuccess = (data: NodeData[] | string): void => {\n stopLoading();\n this.loadData(this.parseData(data), parentNode);\n\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n\n const handleError = (jqXHR: JQuery.jqXHR): void => {\n stopLoading();\n\n if (this.onLoadFailed) {\n this.onLoadFailed(jqXHR);\n }\n };\n\n this.submitRequest(urlInfo, handleSuccess, handleError);\n }\n\n private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode?.element) {\n return parentNode.element;\n } else {\n return this.treeElement;\n }\n }\n\n private notifyLoading(\n isLoading: boolean,\n node: Node | null,\n element: HTMLElement,\n ): void {\n const $el = jQuery(element);\n\n if (this.onLoading) {\n this.onLoading(isLoading, node, $el);\n }\n\n this.triggerEvent(\"tree.loading_data\", {\n $el,\n isLoading,\n node,\n });\n }\n\n private parseData(data: NodeData[] | string): NodeData[] {\n const getParsedData = () => {\n if (typeof data === \"string\") {\n return JSON.parse(data) as NodeData[];\n } else {\n return data;\n }\n };\n\n const parsedData = getParsedData();\n\n if (this.dataFilter) {\n return this.dataFilter(parsedData);\n } else {\n return parsedData;\n }\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private submitRequest(\n urlInfoInput: JQuery.AjaxSettings | string,\n handleSuccess: JQuery.Ajax.SuccessCallback,\n handleError: JQuery.Ajax.ErrorCallback,\n ): void {\n const urlInfo =\n typeof urlInfoInput === \"string\"\n ? { url: urlInfoInput }\n : urlInfoInput;\n\n const ajaxSettings: JQuery.AjaxSettings = {\n cache: false,\n dataType: \"json\",\n error: handleError,\n method: \"GET\",\n success: handleSuccess,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n}\n","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","function binarySearch(items: T[], compareFn: (a: T) => number): null | T {\n let low = 0;\n let high = items.length;\n\n while (low < high) {\n const mid = (low + high) >> 1;\n const item = items[mid];\n\n if (item === undefined) {\n return null;\n }\n\n const compareResult = compareFn(item);\n\n if (compareResult > 0) {\n high = mid;\n } else if (compareResult < 0) {\n low = mid + 1;\n } else {\n return item;\n }\n }\n\n return null;\n}\n\nexport default binarySearch;\n","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape);\n\n treeElement.appendChild(this.element);\n }\n\n 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","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, Position } from \"../node\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\nimport { HitArea } from \"./types\";\n\ninterface HitPosition {\n node: Node;\n position: null | Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (\n node: Node,\n position: null | Position,\n top: number,\n ) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, lastTop);\n } else {\n addHitPosition(node, \"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, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, \"after\", top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, \"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, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"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, null, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, null, 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, \"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) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n","import {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\nimport {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../jqtreeOptions\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport { Node } from \"../node\";\nimport NodeElement from \"../nodeElement\";\nimport { getElementPosition } from \"../util\";\nimport binarySearch from \"./binarySearch\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { DropHint, HitArea } from \"./types\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\n\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\nexport class DragAndDropHandler {\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\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: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\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 }: 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.openFolderDelay = openFolderDelay;\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 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, this.currentItem)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(\"jqtree-moving\");\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n const currentNode = this.currentItem.node;\n this.generateHitAreas(currentNode);\n this.currentItem = this.getNodeElementForNode(currentNode);\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(\"jqtree-moving\");\n }\n }\n }\n\n private canMoveToArea(area: HitArea, currentItem: NodeElement): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n return this.onCanMoveTo(currentItem.node, area.node, area.position);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n return binarySearch(this.hitAreas, (area) => {\n if (y < area.top) {\n return 1;\n } else if (y > area.bottom) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n private generateHitAreas(currentNode: Node): void {\n const tree = this.getTree();\n\n if (!tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n currentNode,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n /* Move the dragged node to the selected position in the tree. */\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea?.position &&\n this.canMoveToArea(this.hoveredArea, this.currentItem)\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 === \"inside\") {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n const event = this.triggerEvent(\"tree.move\", {\n move_info: {\n do_move: doMove,\n moved_node: movedNode,\n original_event: positionInfo.originalEvent,\n position,\n previous_parent: previousParent,\n target_node: targetNode,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return node.isFolder() && !node.is_open && area.position === \"inside\";\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this.openNode(folder, this.slide, () => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay,\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n}\n","import { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n $element: JQuery;\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n private $element: JQuery;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private isNodeSelected: IsNodeSelected;\n private onCreateLi?: OnCreateLi;\n private rtl?: boolean;\n\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n constructor({\n $element,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.dragAndDrop = dragAndDrop;\n this.$element = $element;\n this.getTree = getTree;\n this.isNodeSelected = isNodeSelected;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.openedIconElement = this.createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this.createButtonElement(closedIcon ?? \"-\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this.$element.empty();\n\n const tree = this.getTree();\n\n if (this.$element[0] && tree) {\n this.createDomElements(this.$element[0], tree.children, true, 1);\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\n }\n\n private createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `jqtree_common ${folderClasses}`;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the
  • element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = Boolean(this.isNodeSelected(node));\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const liClasses = [\"jqtree_common\"];\n\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = \"jqtree-title jqtree_common\";\n\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n\n classes += ` jqtree-title-button-${this.buttonLeft ? \"left\" : \"right\"}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this.setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n\n if (this.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this.dragAndDrop) {\n classString += \" jqtree-dnd\";\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `jqtree_common ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [\"jqtree-toggler\", \"jqtree_common\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (this.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n } else {\n classes.push(\"jqtree-toggler-right\");\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [\"jqtree-folder\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n\n return classes.join(\" \");\n }\n\n private setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n}\n","import {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getSelectedNode: GetSelectedNode;\n isFocusOnTree: IsFocusOnTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n}\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private getSelectedNode: GetSelectedNode;\n\n private isFocusOnTree: IsFocusOnTree;\n\n private keyboardSupport: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n constructor({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.getSelectedNode = getSelectedNode;\n this.isFocusOnTree = isFocusOnTree;\n this.keyboardSupport = keyboardSupport;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public deinit(): void {\n if (this.keyboardSupport) {\n document.removeEventListener(\"keydown\", this.handleKeyDown);\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 private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\n }\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n if (!this.canHandleKeyboard()) {\n return;\n }\n\n let isKeyHandled = false;\n\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n switch (e.key) {\n case \"ArrowDown\":\n isKeyHandled = this.moveDown(selectedNode);\n break;\n\n case \"ArrowLeft\":\n isKeyHandled = this.moveLeft(selectedNode);\n break;\n\n case \"ArrowRight\":\n isKeyHandled = this.moveRight(selectedNode);\n break;\n\n case \"ArrowUp\":\n isKeyHandled = this.moveUp(selectedNode);\n break;\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this.closeNode(selectedNode);\n return true;\n } else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n }\n\n private moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return false;\n } else {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextVisibleNode());\n } else {\n // Right expands a closed node\n this.openNode(selectedNode);\n return true;\n }\n }\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private selectNode(node: Node | null): boolean {\n if (!node) {\n return false;\n } else {\n this.originalSelectNode(node);\n\n return true;\n }\n }\n}\n","export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n","import { TriggerEvent } from \"./jqtreeMethodTypes\";\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ntype GetNode = (element: HTMLElement) => Node | null;\n\ninterface MouseHandlerParams {\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: (positionInfo: PositionInfo) => boolean;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private element: HTMLElement;\n private getMouseDelay: () => number;\n private getNode: GetNode;\n\n private isMouseDelayMet: boolean;\n\n private isMouseStarted: boolean;\n\n private mouseDelayTimer: null | number;\n\n private mouseDownInfo: null | PositionInfo;\n private onClickButton: (node: Node) => void;\n private onClickTitle: (node: Node) => void;\n\n private onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n\n private onMouseStart: (positionInfo: PositionInfo) => boolean;\n\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\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 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 private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest(\".jqtree-toggler\");\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const jqTreeElement =\n element.closest(\".jqtree-element\");\n\n if (jqTreeElement) {\n const node = this.getNode(jqTreeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n const event = this.triggerEvent(\"tree.click\", {\n click_event: e,\n node: clickTarget.node,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest(\n \"ul.jqtree-tree .jqtree-element\",\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n click_event: e,\n node,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n click_event: e,\n node: clickTarget.node,\n });\n }\n };\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private 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 mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseHandler;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n","import { isNodeRecordWithChildren } from \"./nodeUtils\";\n\nexport type Position = \"after\" | \"before\" | \"inside\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport class Node implements INode {\n [key: string]: unknown;\n\n public children: Node[];\n public element?: HTMLElement;\n public id?: NodeId;\n public idMapping: Map;\n public is_loading: boolean;\n public is_open: boolean;\n public isEmptyFolder: boolean;\n public load_on_demand: boolean;\n public name: string;\n public nodeClass?: typeof Node;\n public parent: Node | null;\n public tree?: Node;\n\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n\n if (isRoot) {\n this.idMapping = new Map();\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, node);\n }\n }\n\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /*\n Get the tree as data.\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record[] => {\n return nodes.map((node) => {\n const tmpNode: Record = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1];\n\n if (!lastChild) {\n return null;\n }\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\n }\n }\n }\n\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\n }\n\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\n }\n\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (\n !previousSibling.hasChildren() ||\n !previousSibling.is_open\n ) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n }\n\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n // Init Node from data without making it the root of the tree\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length\n ) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case \"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 \"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 \"inside\": {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n }\n }\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\n }\n\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setData(object): set attributes of the node\n\n Examples:\n setData('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n}\n","import { DropHint } from \"../dragAndDropHandler/types\";\n\nclass BorderDropHint implements DropHint {\n private hint?: HTMLElement;\n\n constructor(element: HTMLElement, scrollLeft: number) {\n const div = element.querySelector(\":scope > .jqtree-element\");\n\n if (!div) {\n this.hint = undefined;\n return;\n }\n\n const width = Math.max(element.offsetWidth + scrollLeft - 4, 0);\n const height = Math.max(element.clientHeight - 4, 0);\n\n const hint = document.createElement(\"span\");\n hint.className = \"jqtree-border\";\n hint.style.width = `${width}px`;\n hint.style.height = `${height}px`;\n\n this.hint = hint;\n\n div.append(this.hint);\n }\n\n public remove(): void {\n this.hint?.remove();\n }\n}\n\nexport default BorderDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { Node, Position } from \"../node\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n private node: Node;\n\n constructor(node: Node, element: HTMLElement, position: Position) {\n this.element = element;\n this.node = node;\n this.ghost = this.createGhostElement();\n\n switch (position) {\n case \"after\":\n this.moveAfter();\n break;\n\n case \"before\":\n this.moveBefore();\n break;\n\n case \"inside\": {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\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 private moveAfter(): void {\n this.element.after(this.ghost);\n }\n\n private moveBefore(): void {\n this.element.before(this.ghost);\n }\n\n private moveInside(): void {\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n private moveInsideOpenFolder(): void {\n const childElement = this.node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this.ghost);\n }\n }\n}\n\nexport default GhostDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\nimport { Node, Position } from \"../node\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private treeElement: HTMLElement;\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 addDropHint(position: Position): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.node, this.element, position);\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public init(node: Node): void {\n this.node = node;\n\n if (!node.element) {\n node.element = this.treeElement;\n }\n\n this.element = node.element;\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > span.jqtree-title\",\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === \"inside\";\n }\n}\n\nexport default NodeElement;\n","import { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\nimport { Position } from \"../node\";\nimport NodeElement, { NodeElementParams } from \"./index\";\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: HTMLElement | Text;\n openedIconElement?: HTMLElement | Text;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: HTMLElement | Text;\n private openedIconElement?: HTMLElement | Text;\n private triggerEvent: TriggerEvent;\n\n constructor({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.triggerEvent = triggerEvent;\n }\n\n public close(slide: boolean, animationSpeed: JQuery.Duration): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n const button = this.getButton();\n button.classList.add(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideUp(animationSpeed, doClose);\n } else {\n jQuery(this.getUl()).hide();\n doClose();\n }\n }\n\n public open(\n onFinished: OnFinishOpenNode | undefined,\n slide: boolean,\n animationSpeed: JQuery.Duration,\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 protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && 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 {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData) as unknown as SavedState;\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\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 private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else {\n return localStorage.getItem(this.getKeyName());\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state as unknown as SavedState;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getElementPosition, getOffsetTop } from \"../util\";\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ninterface Params {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\ntype VerticalScrollDirection = \"bottom\" | \"top\";\n\nexport default class ContainerScrollParent implements ScrollParent {\n private container: HTMLElement;\n private horizontalScrollDirection?: HorizontalScrollDirection;\n private horizontalScrollTimeout?: number;\n private refreshHitAreas: () => void;\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n private verticalScrollDirection?: VerticalScrollDirection;\n private verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: Params) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\n }\n\n 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 const containerWidth = this.container.getBoundingClientRect().width;\n\n const rightEdge = scrollParentOffset.left + containerWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n const containerHeight =\n this.container.getBoundingClientRect().height;\n this.scrollParentBottom =\n this.getScrollParentTop() + containerHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n if (this.scrollParentTop == null) {\n this.scrollParentTop = getOffsetTop(this.container);\n }\n\n return this.scrollParentTop;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getOffsetTop } from \"../util\";\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\ntype VerticalScrollDirection = \"bottom\" | \"top\";\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 canScrollDown() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollTop + documentElement.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollLeft + documentElement.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n if (this.documentScrollHeight == null) {\n this.documentScrollHeight = document.documentElement.scrollHeight;\n }\n\n return this.documentScrollHeight;\n }\n\n private getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n if (this.documentScrollWidth == null) {\n this.documentScrollWidth = document.documentElement.scrollWidth;\n }\n\n return this.documentScrollWidth;\n }\n\n private getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = document.documentElement.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n const isNearLeftEdge = pageX - scrollLeft < 20;\n\n if (isNearRightEdge && this.canScrollRight()) {\n return \"right\";\n }\n\n if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = jQuery(document).scrollTop() ?? 0;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n if (windowHeight - (pageY - scrollTop) < 20 && this.canScrollDown()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: distance, top: 0 });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: 0, top: distance });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n","import { PositionInfo } from \"./mouseUtils\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\nimport { ScrollParent } from \"./scrollHandler/types\";\n\ninterface ScrollHandlerParams {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class ScrollHandler {\n private refreshHitAreas: () => void;\n private scrollParent?: ScrollParent;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: ScrollHandlerParams) {\n this.refreshHitAreas = refreshHitAreas;\n this.scrollParent = undefined;\n this.treeElement = treeElement;\n }\n\n public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private getScrollParent(): ScrollParent {\n if (!this.scrollParent) {\n this.scrollParent = createScrollParent(\n this.treeElement,\n this.refreshHitAreas,\n );\n }\n\n return this.scrollParent;\n }\n}\n","import { GetNodeById } from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private selectedNodes: Set;\n private selectedSingleNode: Node | null;\n\n constructor({ getNodeById }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.selectedNodes = new Set();\n this.clear();\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n}\n","const register = (widgetClass: unknown, widgetName: string): void => {\n const getDataKey = (): string => `simple_widget_${widgetName}`;\n\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string,\n ): null | SimpleWidget => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: unknown): JQuery => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, dataKey);\n\n if (!existingWidget) {\n const simpleWidgetClass = widgetClass as typeof SimpleWidget;\n const widget = new simpleWidgetClass(el, options);\n\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n\n return $el;\n };\n\n const destroyWidget = ($el: JQuery): void => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const widget = getWidgetData(el, dataKey);\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, dataKey);\n }\n };\n\n const callFunction = (\n $el: JQuery,\n functionName: string,\n args: unknown[],\n ): unknown => {\n let result = null;\n\n for (const el of $el.get()) {\n const widget = jQuery.data(el, getDataKey()) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n const simpleWidget = widget as SimpleWidget;\n const widgetFunction = simpleWidget[functionName];\n\n if (widgetFunction && typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args) as unknown;\n }\n }\n }\n\n return result;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (jQuery.fn as any)[widgetName] = function (\n this: JQuery,\n argument1: unknown,\n ...args: unknown[]\n ) {\n if (!argument1) {\n return createWidget(this, null);\n } else if (typeof argument1 === \"object\") {\n const options = argument1 as unknown;\n return createWidget(this, options);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (argument1 === \"destroy\") {\n destroyWidget(this);\n return undefined;\n } else {\n return callFunction(this, functionName, args);\n }\n } else {\n return undefined;\n }\n };\n};\n\nexport default class SimpleWidget {\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public $el: JQuery;\n\n public options: WidgetOptions;\n\n constructor(el: HTMLElement, options: WidgetOptions) {\n this.$el = jQuery(el);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const defaults = (this.constructor as any).defaults as WidgetOptions;\n this.options = { ...defaults, ...options };\n }\n\n public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n public deinit(): void {\n //\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n}\n","const version = \"1.8.10\";\n\nexport default version;\n","import DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport { Node, Position } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport __version__ from \"./version\";\n\ninterface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends SimpleWidget {\n protected static defaults: JQTreeOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: undefined,\n data: undefined,\n dataFilter: undefined,\n dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n onCanMove: undefined, // Can this node be moved?\n onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanSelectNode: undefined,\n onCreateLi: undefined,\n onDragMove: undefined,\n onDragStop: undefined,\n onGetStateFromStorage: undefined,\n onIsMoveHandle: undefined,\n onLoadFailed: undefined,\n onLoading: undefined,\n onSetStateFromStorage: undefined,\n openedIcon: \"▼\",\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (cookie name)\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n useContextMenu: true,\n };\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\n private element: JQuery;\n\n private isInitialized: boolean;\n private keyHandler: KeyHandler;\n private mouseHandler: MouseHandler;\n private renderer: ElementsRenderer;\n private saveStateHandler: SaveStateHandler;\n private scrollHandler: ScrollHandler;\n private selectNodeHandler: SelectNodeHandler;\n private tree: Node;\n\n public addNodeAfter(\n newNodeInfo: NodeData,\n existingNode: Node,\n ): Node | null {\n const newNode = existingNode.addAfter(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addNodeBefore(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addBefore(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addParentNode(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addParent(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n public addToSelection(node?: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.addToSelection(node);\n this.openParents(node);\n\n this.getNodeElementForNode(node).select(mustSetFocus ?? true);\n\n this.saveState();\n\n return this.element;\n }\n\n public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.append(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public closeNode(node?: Node, slideParam?: boolean | null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.isFolder() || node.isEmptyFolder) {\n this.createFolderElement(node).close(\n slide,\n this.options.animationSpeed,\n );\n\n this.saveState();\n }\n\n return this.element;\n }\n\n public deinit(): void {\n this.element.empty();\n this.element.off();\n\n this.keyHandler.deinit();\n this.mouseHandler.deinit();\n\n this.tree = new Node({}, true);\n\n super.deinit();\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n public getNodeByHtmlElement(\n inputElement: HTMLElement | JQuery,\n ): Node | null {\n const element =\n inputElement instanceof HTMLElement\n ? inputElement\n : inputElement[0];\n\n if (!element) {\n return null;\n }\n\n return this.getNode(element);\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.tree.getNodeById(nodeId);\n }\n\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n public getSelectedNode(): false | Node {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n public getState(): null | SavedState {\n return this.saveStateHandler.getState();\n }\n\n public getStateFromStorage(): null | SavedState {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n public getTree(): Node {\n return this.tree;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public init(): void {\n super.init();\n\n this.element = this.$el;\n this.isInitialized = false;\n\n this.options.rtl = this.getRtlOption();\n\n if (this.options.closedIcon == null) {\n this.options.closedIcon = this.getDefaultClosedIcon();\n }\n\n this.connectHandlers();\n\n this.initData();\n }\n\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public isNodeSelected(node?: Node): boolean {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n public loadData(data: NodeData[], parentNode: Node | null): JQuery {\n this.doLoadData(data, parentNode);\n return this.element;\n }\n\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n public loadDataFromUrl(\n param1: Node | null | string,\n param2?: HandleFinishedLoading | Node | null,\n param3?: HandleFinishedLoading,\n ): JQuery {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(\n param1,\n param2 as Node | null,\n param3 ?? null,\n );\n } else {\n // first parameter is not url\n this.doLoadDataFromUrl(\n null,\n param1,\n param2 as HandleFinishedLoading | null,\n );\n }\n\n return this.element;\n }\n\n public moveDown(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveDown(selectedNode);\n }\n\n return this.element;\n }\n\n public moveNode(\n node?: Node,\n targetNode?: Node,\n position?: Position,\n ): 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 this.tree.moveNode(node, targetNode, position);\n this.refreshElements(null);\n\n return this.element;\n }\n\n public moveUp(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveUp(selectedNode);\n }\n\n return this.element;\n }\n\n public openNode(\n node?: Node,\n param1?: boolean | OnFinishOpenNode,\n param2?: OnFinishOpenNode,\n ): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const parseParams = (): [boolean, OnFinishOpenNode | undefined] => {\n let onFinished: null | OnFinishOpenNode;\n let slide: boolean | null;\n\n if (isFunction(param1)) {\n onFinished = param1 as OnFinishOpenNode;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n if (slide == null) {\n slide = this.options.slide;\n }\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this.openNodeInternal(node, slide, onFinished);\n return this.element;\n }\n\n public prependNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.prepend(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.element;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\n }\n\n public reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public removeFromSelection(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.removeFromSelection(node);\n\n this.getNodeElementForNode(node).deselect();\n this.saveState();\n\n return this.element;\n }\n\n public removeNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.parent) {\n throw Error(\"Node has no parent\");\n }\n\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this.refreshElements(parent);\n\n return this.element;\n }\n\n public scrollToNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.element) {\n return this.element;\n }\n\n const top =\n getOffsetTop(node.element) -\n getOffsetTop(this.$el.get(0) as HTMLElement);\n\n this.scrollHandler.scrollToY(top);\n\n return this.element;\n }\n\n public selectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): JQuery {\n this.doSelectNode(node, optionsParam);\n return this.element;\n }\n\n public setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record)[option] = value;\n return this.element;\n }\n\n public setState(state?: SavedState): JQuery {\n if (state) {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public toggle(node?: Node, slideParam: boolean | null = null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n public updateNode(node?: Node, data?: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!data) {\n return this.element;\n }\n\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data.children &&\n data.children instanceof Array\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children as Node[]);\n }\n }\n\n this.refreshElements(node);\n\n return this.element;\n }\n\n private connectHandlers() {\n const {\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onLoadFailed,\n onLoading,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this.options;\n\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this.getNodeElement.bind(this);\n const getNodeElementForNode = this.getNodeElementForNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const isFocusOnTree = this.isFocusOnTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this.openNodeInternal.bind(this);\n const refreshElements = this.refreshElements.bind(this);\n const refreshHitAreas = this.refreshHitAreas.bind(this);\n const selectNode = this.selectNode.bind(this);\n const $treeElement = this.element;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const dataLoader = new DataLoader({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n });\n\n const renderer = new ElementsRenderer({\n $element: $treeElement,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this.getNode.bind(this);\n const onMouseCapture = this.mouseCapture.bind(this);\n const onMouseDrag = this.mouseDrag.bind(this);\n const onMouseStart = this.mouseStart.bind(this);\n const onMouseStop = this.mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle: this.doSelectNode.bind(this),\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this.dataLoader = dataLoader;\n this.dndHandler = dndHandler;\n this.keyHandler = keyHandler;\n this.mouseHandler = mouseHandler;\n this.renderer = renderer;\n this.saveStateHandler = saveStateHandler;\n this.scrollHandler = scrollHandler;\n this.selectNodeHandler = selectNodeHandler;\n }\n\n private containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\n }\n\n private createFolderElement(node: Node) {\n const closedIconElement = this.renderer.closedIconElement;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const openedIconElement = this.renderer.openedIconElement;\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n return new FolderElement({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n });\n }\n\n private createNodeElement(node: Node) {\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n }\n\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n private doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (data) {\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n\n this.triggerEvent(\"tree.load_data\", {\n parent_node: parentNode,\n tree_data: data,\n });\n }\n\n private doLoadDataFromUrl(\n urlInfoParam: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n const urlInfo = urlInfoParam ?? this.getDataUrlInfo(parentNode);\n\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n }\n\n private doSelectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): void {\n const saveState = (): void => {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n };\n\n if (!node) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (this.options.onCanSelectNode) {\n return (\n this.options.selectable &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable;\n }\n };\n\n if (!canSelect()) {\n return;\n }\n\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this.triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node,\n });\n }\n } else {\n const deselectedNode = this.getSelectedNode() || null;\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselected_node: deselectedNode,\n node,\n });\n this.openParents(node);\n }\n\n saveState();\n }\n\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n } else if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n } else if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n } else {\n return 0;\n }\n }\n\n private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl ?? (this.element.data(\"url\") as null | string);\n\n const getUrlFromString = (url: string): JQuery.AjaxSettings => {\n const urlInfo: JQuery.AjaxSettings = { url };\n\n setUrlInfoData(urlInfo);\n\n return urlInfo;\n };\n\n const setUrlInfoData = (urlInfo: JQuery.AjaxSettings): void => {\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n const data = { node: node.id };\n urlInfo.data = data;\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n const data = { selected_node: selectedNodeId };\n urlInfo.data = data;\n }\n }\n };\n\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n } else if (typeof dataUrl === \"string\") {\n return getUrlFromString(dataUrl);\n } else if (dataUrl && typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n } else {\n return null;\n }\n }\n\n private getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n } else {\n // triangle to the right\n return \"►\";\n }\n }\n\n private getNode(element: HTMLElement): Node | null {\n const liElement = element.closest(\"li.jqtree_common\");\n\n if (liElement) {\n return jQuery(liElement).data(\"node\") as Node;\n } else {\n return null;\n }\n }\n\n private getNodeElement(element: HTMLElement): NodeElement | null {\n const node = this.getNode(element);\n if (node) {\n return this.getNodeElementForNode(node);\n } else {\n return null;\n }\n }\n\n private getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return this.createFolderElement(node);\n } else {\n return this.createNodeElement(node);\n }\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\n }\n }\n\n private getRtlOption(): boolean {\n if (this.options.rtl != null) {\n return this.options.rtl;\n } else {\n const dataRtl = this.element.data(\"rtl\") as unknown;\n\n if (\n dataRtl !== null &&\n dataRtl !== false &&\n dataRtl !== undefined\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n private initData(): void {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n } else {\n const dataUrl = this.getDataUrlInfo(null);\n\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n } else {\n this.doLoadData([], null);\n }\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (!this.isInitialized) {\n this.isInitialized = true;\n this.triggerEvent(\"tree.init\");\n }\n };\n\n this.tree = new this.options.nodeClass(\n null,\n true,\n this.options.nodeClass,\n );\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this.refreshElements(null);\n\n if (!mustLoadOnDemand) {\n doInit();\n } else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n }\n\n private isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return Boolean(\n activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.containsElement(activeElement as HTMLElement),\n );\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (!selectedNode) {\n return false;\n } else {\n return subtree === selectedNode || subtree.isParentOf(selectedNode);\n }\n }\n\n private loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n node.is_loading = true;\n\n this.doLoadDataFromUrl(null, node, () => {\n this.openNodeInternal(node, slide, onFinished);\n });\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this.refreshElements(parentNode);\n }\n\n private mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseCapture(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this.dndHandler.mouseDrag(positionInfo);\n\n this.scrollHandler.checkScrolling(positionInfo);\n return result;\n } else {\n return false;\n }\n }\n\n private mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n this.scrollHandler.stopScrolling();\n return this.dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n private openNodeInternal(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished?: OnFinishOpenNode,\n ): void => {\n if (!node.children.length) {\n return;\n }\n\n const folderElement = this.createFolderElement(_node);\n folderElement.open(\n _onFinished,\n _slide,\n this.options.animationSpeed,\n );\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n doOpenNode(parent, false);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this.triggerEvent(\"tree.refresh\");\n }\n\n private saveState(): void {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (node) {\n const nodeElement = this.getNodeElementForNode(node);\n nodeElement.select(mustSetFocus);\n }\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): [boolean, boolean] => {\n // result: is state restored, must load on demand?\n if (!this.options.saveState) {\n return [false, false];\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return [false, false];\n } else {\n const mustLoadOnDemand =\n this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n }\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n } else if (!node.hasChildren()) {\n return false;\n } else {\n node.is_open = true;\n return level !== maxLevel;\n }\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n private setInitialStateOnDemand(cbFinished: () => void): void {\n const restoreState = (): boolean => {\n if (!this.options.saveState) {\n return false;\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return false;\n } else {\n this.saveStateHandler.setInitialStateOnDemand(\n state,\n cbFinished,\n );\n\n return true;\n }\n }\n };\n\n const autoOpenNodes = (): void => {\n const maxLevel = this.getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNodeInternal(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n const openNodes = (): void => {\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n\n return false;\n } else {\n this.openNodeInternal(node, false);\n\n return level !== maxLevel;\n }\n });\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n openNodes();\n };\n\n if (!restoreState()) {\n autoOpenNodes();\n }\n }\n\n private triggerEvent(\n eventName: string,\n values?: Record,\n ): JQuery.Event {\n const event = jQuery.Event(eventName, values);\n this.element.trigger(event);\n return event;\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["DataLoader","constructor","_ref","dataFilter","loadData","onLoadFailed","onLoading","treeElement","triggerEvent","loadFromUrl","urlInfo","parentNode","onFinished","element","getDomElement","addLoadingClass","notifyLoading","stopLoading","removeLoadingClass","handleSuccess","data","parseData","handleError","jqXHR","submitRequest","classList","add","isLoading","node","$el","jQuery","getParsedData","JSON","parse","parsedData","remove","urlInfoInput","url","ajaxSettings","cache","dataType","error","method","success","toUpperCase","ajax","isInt","n","isFunction","v","getBoolString","value","getOffsetTop","getElementPosition","top","rect","getBoundingClientRect","left","x","window","scrollX","y","scrollY","binarySearch","items","compareFn","low","high","length","mid","item","undefined","compareResult","DragElement","autoEscape","nodeName","offsetX","offsetY","createElement","appendChild","move","pageX","pageY","style","document","textContent","innerHTML","position","iterateVisibleNodes","tree","handleAfterOpenFolder","handleClosedFolder","handleFirstNode","handleNode","handleOpenFolder","isFirstNode","iterate","nextNode","mustIterateInside","is_open","hasChildren","offsetParent","childrenLength","children","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","openFolderDelay","openNode","refreshElements","slide","hoveredArea","isDragging","currentItem","mouseCapture","positionInfo","target","mustCaptureElement","nodeElement","mouseDrag","dragElement","area","findHoveredArea","canMoveToArea","isFolder","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","originalEvent","mouseStart","refresh","name","mouseStop","moveItem","clear","removeHover","removeHitAreas","dimensions","getTreeDimensions","right","treePosition","clientWidth","movedNode","targetNode","previousParent","parent","doMove","moveNode","event","move_info","do_move","moved_node","original_event","previous_parent","target_node","isDefaultPrevented","previousGhost","folder","openFolder","openFolderTimer","setTimeout","clearTimeout","addDropHint","ElementsRenderer","$element","buttonLeft","closedIcon","dragAndDrop","isNodeSelected","onCreateLi","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","render","fromNode","renderFromNode","renderFromRoot","$previousLi","li","createLi","getLevel","after","createDomElements","empty","attachNodeData","div","createTextNode","nodeType","isRootNode","level","ul","createUl","createFolderLi","isSelected","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","className","setAttribute","buttonLink","cloneNode","titleSpan","createTitleSpan","Boolean","mustShowFolder","isEmptyFolder","createNodeLi","liClasses","classString","join","classes","setTreeItemAriaAttributes","role","is_loading","KeyHandler","closeNode","getSelectedNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","addEventListener","handleKeyDown","deinit","removeEventListener","moveDown","selectedNode","getNextVisibleNode","moveUp","getPreviousVisibleNode","canHandleKeyboard","e","isKeyHandled","key","moveLeft","moveRight","preventDefault","getParent","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","handleClick","handleDblclick","mouseDown","passive","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","removeMouseMoveEventListeners","getClickTarget","button","closest","type","jqTreeElement","clickTarget","stopPropagation","click_event","handleMouseDown","handleMouseUp","handleStartMouse","handleMouseMove","cancelable","mouseMove","touchMove","mouseUp","touchEnd","mouseDelay","startMouseDelayTimer","result","touches","isNodeRecordWithChildren","Array","Node","nodeData","arguments","isRoot","nodeClass","load_on_demand","setData","idMapping","Map","addAfter","nodeInfo","createNode","childIndex","getChildIndex","addChildAtPosition","loadChildrenFromData","addBefore","addChild","setParent","index","splice","addNodeToIndex","id","set","addParent","newParent","originalParent","append","filter","f","indexOf","getData","includeParent","getDataFromNodes","nodes","map","tmpNode","k","Object","prototype","hasOwnProperty","call","getLastChild","lastChild","getNextNode","includeChildren","nextSibling","getNextSibling","nextIndex","getNodeByCallback","callback","getNodeById","nodeId","get","getNodeByName","getNodeByNameMustExist","Error","getNodesByProperty","getPreviousNode","previousSibling","getPreviousSibling","previousIndex","initFromData","addNode","addChildren","childrenData","isParentOf","_iterate","loadFromData","removeChildren","childData","doRemoveChild","prepend","removeChild","removeNodeFromIndex","delete","o","getNodeClass","BorderDropHint","scrollLeft","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","moveAfter","moveBefore","moveInsideOpenFolder","moveInside","circleSpan","lineSpan","before","childElement","NodeElement","init","mustShowBorderDropHint","deselect","getTitleSpan","removeAttribute","blur","select","mustSetFocus","toString","focus","getUl","FolderElement","close","animationSpeed","getButton","icon","doClose","slideUp","hide","open","doOpen","slideDown","show","SaveStateHandler","addToSelection","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","getNodeIdToBeSelected","state","getStateFromStorage","selected_node","getState","getOpenNodeIds","openNodes","getSelectedNodeIds","selectedNodeIds","open_nodes","jsonData","loadFromStorage","parseState","stringify","localStorage","setItem","getKeyName","setInitialState","mustLoadOnDemand","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand","cbFinished","loadingCount","nodeIds","newNodesIds","loadAndOpenNode","getItem","selectedNodes","selectCount","ContainerScrollParent","container","refreshHitAreas","checkHorizontalScrolling","newHorizontalScrollDirection","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","verticalScrollTimeout","scrollHorizontally","bind","checkVerticalScrolling","newVerticalScrollDirection","getNewVerticalScrollDirection","verticalScrollDirection","scrollVertically","scrollToY","scrollTop","stopScrolling","scrollParentTop","scrollParentBottom","scrollParentOffset","containerWidth","rightEdge","leftEdge","isNearRightEdge","isNearLeftEdge","getScrollParentTop","getScrollParentBottom","containerHeight","distance","scrollBy","behavior","DocumentScrollParent","documentElement","treeTop","documentScrollHeight","documentScrollWidth","canScrollDown","getDocumentScrollHeight","canScrollRight","getDocumentScrollWidth","scrollHeight","scrollWidth","windowWidth","innerWidth","distanceTop","windowHeight","innerHeight","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","getParentWithOverflow","parentElement","createScrollParent","tagName","ScrollHandler","scrollParent","checkScrolling","getScrollParent","SelectNodeHandler","Set","selectedSingleNode","getSelectedNodesUnder","has","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","existingWidget","simpleWidgetClass","destroyWidget","destroy","removeData","callFunction","functionName","args","simpleWidget","widgetFunction","apply","fn","argument1","_len","_key","defaults","version","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","selectNodeHandler","openParents","appendNode","parentNodeParam","slideParam","createFolderElement","off","keyHandler","mouseHandler","getNodeByHtmlElement","inputElement","HTMLElement","saveStateHandler","getVersion","__version__","isInitialized","getRtlOption","getDefaultClosedIcon","connectHandlers","initData","dndHandler","doLoadData","loadDataFromUrl","param1","param2","param3","doLoadDataFromUrl","parseParams","openNodeInternal","prependNode","reload","removeNode","scrollToNode","scrollHandler","optionsParam","doSelectNode","setOption","option","setState","toggle","toJson","updateNode","idIsChanged","$treeElement","dataLoader","renderer","containsElement","createNodeElement","deselectCurrentNode","deselectNodes","selectedNodesUnderParent","loadSubtree","initTree","parent_node","tree_data","urlInfoParam","getDataUrlInfo","defaultOptions","mustToggle","selectOptions","canSelect","previous_node","deselectedNode","deselected_node","getAutoOpenMaxLevel","parseInt","getUrlFromString","setUrlInfoData","selectedNodeId","liElement","dataRtl","doInit","activeElement","isSelectedNodeInSubtree","subtree","loadFolderOnDemand","doOpenNode","_node","_slide","_onFinished","folderElement","mustSelect","selectCurrentNode","restoreState","autoOpenNodes","maxLevel","isRestored","eventName","values","Event","trigger"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree.jquery.debug.js","sources":["src/dataLoader.ts","src/util.ts","src/dragAndDropHandler/binarySearch.ts","src/dragAndDropHandler/dragElement.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/elementsRenderer.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.ts","src/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/saveStateHandler.ts","src/scrollHandler/scrollParent.ts","src/scrollHandler/containerScrollParent.ts","src/scrollHandler/documentScrollParent.ts","src/scrollHandler/createScrollParent.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/simple.widget.ts","src/version.ts","src/tree.jquery.ts"],"sourcesContent":["import { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\n\nexport type HandleFinishedLoading = () => void;\n\ninterface DataLoaderParams {\n dataFilter?: DataFilter;\n loadData: LoadData;\n onLoadFailed?: OnLoadFailed;\n onLoading?: OnLoading;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private onLoadFailed?: OnLoadFailed;\n private onLoading?: OnLoading;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.onLoadFailed = onLoadFailed;\n this.onLoading = onLoading;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n public loadFromUrl(\n urlInfo: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const element = this.getDomElement(parentNode);\n this.addLoadingClass(element);\n this.notifyLoading(true, parentNode, element);\n\n const stopLoading = (): void => {\n this.removeLoadingClass(element);\n this.notifyLoading(false, parentNode, element);\n };\n\n const handleSuccess = (data: NodeData[] | string): void => {\n stopLoading();\n this.loadData(this.parseData(data), parentNode);\n\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n\n const handleError = (jqXHR: JQuery.jqXHR): void => {\n stopLoading();\n\n if (this.onLoadFailed) {\n this.onLoadFailed(jqXHR);\n }\n };\n\n this.submitRequest(urlInfo, handleSuccess, handleError);\n }\n\n private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode?.element) {\n return parentNode.element;\n } else {\n return this.treeElement;\n }\n }\n\n private notifyLoading(\n isLoading: boolean,\n node: Node | null,\n element: HTMLElement,\n ): void {\n const $el = jQuery(element);\n\n if (this.onLoading) {\n this.onLoading(isLoading, node, $el);\n }\n\n this.triggerEvent(\"tree.loading_data\", {\n $el,\n isLoading,\n node,\n });\n }\n\n private parseData(data: NodeData[] | string): NodeData[] {\n const getParsedData = () => {\n if (typeof data === \"string\") {\n return JSON.parse(data) as NodeData[];\n } else {\n return data;\n }\n };\n\n const parsedData = getParsedData();\n\n if (this.dataFilter) {\n return this.dataFilter(parsedData);\n } else {\n return parsedData;\n }\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private submitRequest(\n urlInfoInput: JQuery.AjaxSettings | string,\n handleSuccess: JQuery.Ajax.SuccessCallback,\n handleError: JQuery.Ajax.ErrorCallback,\n ): void {\n const urlInfo =\n typeof urlInfoInput === \"string\"\n ? { url: urlInfoInput }\n : urlInfoInput;\n\n const ajaxSettings: JQuery.AjaxSettings = {\n cache: false,\n dataType: \"json\",\n error: handleError,\n method: \"GET\",\n success: handleSuccess,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n}\n","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","function binarySearch(items: T[], compareFn: (a: T) => number): null | T {\n let low = 0;\n let high = items.length;\n\n while (low < high) {\n const mid = (low + high) >> 1;\n const item = items[mid];\n\n if (item === undefined) {\n return null;\n }\n\n const compareResult = compareFn(item);\n\n if (compareResult > 0) {\n high = mid;\n } else if (compareResult < 0) {\n low = mid + 1;\n } else {\n return item;\n }\n }\n\n return null;\n}\n\nexport default binarySearch;\n","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape);\n\n treeElement.appendChild(this.element);\n }\n\n 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","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, Position } from \"../node\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\nimport { HitArea } from \"./types\";\n\ninterface HitPosition {\n node: Node;\n position: null | Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (\n node: Node,\n position: null | Position,\n top: number,\n ) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, lastTop);\n } else {\n addHitPosition(node, \"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, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, \"after\", top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, \"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, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"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, null, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, null, 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, \"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) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n","import {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\nimport {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../jqtreeOptions\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport { Node } from \"../node\";\nimport NodeElement from \"../nodeElement\";\nimport { getElementPosition } from \"../util\";\nimport binarySearch from \"./binarySearch\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { DropHint, HitArea } from \"./types\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\n\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\nexport class DragAndDropHandler {\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\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: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\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 }: 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.openFolderDelay = openFolderDelay;\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 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, this.currentItem)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(\"jqtree-moving\");\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n const currentNode = this.currentItem.node;\n this.generateHitAreas(currentNode);\n this.currentItem = this.getNodeElementForNode(currentNode);\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(\"jqtree-moving\");\n }\n }\n }\n\n private canMoveToArea(area: HitArea, currentItem: NodeElement): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n return this.onCanMoveTo(currentItem.node, area.node, area.position);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n return binarySearch(this.hitAreas, (area) => {\n if (y < area.top) {\n return 1;\n } else if (y > area.bottom) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n private generateHitAreas(currentNode: Node): void {\n const tree = this.getTree();\n\n if (!tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n currentNode,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n /* Move the dragged node to the selected position in the tree. */\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea?.position &&\n this.canMoveToArea(this.hoveredArea, this.currentItem)\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 === \"inside\") {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n const event = this.triggerEvent(\"tree.move\", {\n move_info: {\n do_move: doMove,\n moved_node: movedNode,\n original_event: positionInfo.originalEvent,\n position,\n previous_parent: previousParent,\n target_node: targetNode,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return node.isFolder() && !node.is_open && area.position === \"inside\";\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this.openNode(folder, this.slide, () => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay,\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n}\n","import { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n $element: JQuery;\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n private $element: JQuery;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private isNodeSelected: IsNodeSelected;\n private onCreateLi?: OnCreateLi;\n private rtl?: boolean;\n\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n constructor({\n $element,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.dragAndDrop = dragAndDrop;\n this.$element = $element;\n this.getTree = getTree;\n this.isNodeSelected = isNodeSelected;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.openedIconElement = this.createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this.createButtonElement(closedIcon ?? \"-\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this.$element.empty();\n\n const tree = this.getTree();\n\n if (this.$element[0] && tree) {\n this.createDomElements(this.$element[0], tree.children, true, 1);\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\n }\n\n private createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `jqtree_common ${folderClasses}`;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the
  • element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = Boolean(this.isNodeSelected(node));\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const liClasses = [\"jqtree_common\"];\n\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = \"jqtree-title jqtree_common\";\n\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n\n classes += ` jqtree-title-button-${this.buttonLeft ? \"left\" : \"right\"}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this.setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n\n if (this.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this.dragAndDrop) {\n classString += \" jqtree-dnd\";\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `jqtree_common ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [\"jqtree-toggler\", \"jqtree_common\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (this.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n } else {\n classes.push(\"jqtree-toggler-right\");\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [\"jqtree-folder\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n\n return classes.join(\" \");\n }\n\n private setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n}\n","import {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getSelectedNode: GetSelectedNode;\n isFocusOnTree: IsFocusOnTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n}\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private getSelectedNode: GetSelectedNode;\n\n private isFocusOnTree: IsFocusOnTree;\n\n private keyboardSupport: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n constructor({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.getSelectedNode = getSelectedNode;\n this.isFocusOnTree = isFocusOnTree;\n this.keyboardSupport = keyboardSupport;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public deinit(): void {\n if (this.keyboardSupport) {\n document.removeEventListener(\"keydown\", this.handleKeyDown);\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 private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\n }\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n if (!this.canHandleKeyboard()) {\n return;\n }\n\n let isKeyHandled = false;\n\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n switch (e.key) {\n case \"ArrowDown\":\n isKeyHandled = this.moveDown(selectedNode);\n break;\n\n case \"ArrowLeft\":\n isKeyHandled = this.moveLeft(selectedNode);\n break;\n\n case \"ArrowRight\":\n isKeyHandled = this.moveRight(selectedNode);\n break;\n\n case \"ArrowUp\":\n isKeyHandled = this.moveUp(selectedNode);\n break;\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this.closeNode(selectedNode);\n return true;\n } else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n }\n\n private moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return false;\n } else {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextVisibleNode());\n } else {\n // Right expands a closed node\n this.openNode(selectedNode);\n return true;\n }\n }\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private selectNode(node: Node | null): boolean {\n if (!node) {\n return false;\n } else {\n this.originalSelectNode(node);\n\n return true;\n }\n }\n}\n","export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n","import { TriggerEvent } from \"./jqtreeMethodTypes\";\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\n\nexport type GetNode = (element: HTMLElement) => Node | null;\nexport type MouseCapture = (positionInfo: PositionInfo) => boolean | null;\nexport type MouseStart = (positionInfo: PositionInfo) => boolean;\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ninterface MouseHandlerParams {\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: MouseCapture;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: MouseStart;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private element: HTMLElement;\n private getMouseDelay: () => number;\n private getNode: GetNode;\n\n private isMouseDelayMet: boolean;\n\n private isMouseStarted: boolean;\n\n private mouseDelayTimer: null | number;\n\n private mouseDownInfo: null | PositionInfo;\n private onClickButton: (node: Node) => void;\n private onClickTitle: (node: Node) => void;\n\n private onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n\n private onMouseStart: (positionInfo: PositionInfo) => boolean;\n\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\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 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 private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest(\".jqtree-toggler\");\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const jqTreeElement =\n element.closest(\".jqtree-element\");\n\n if (jqTreeElement) {\n const node = this.getNode(jqTreeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n const event = this.triggerEvent(\"tree.click\", {\n click_event: e,\n node: clickTarget.node,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest(\n \"ul.jqtree-tree .jqtree-element\",\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n click_event: e,\n node,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n click_event: e,\n node: clickTarget.node,\n });\n }\n };\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private 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 mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseHandler;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n","import { isNodeRecordWithChildren } from \"./nodeUtils\";\n\nexport type Position = \"after\" | \"before\" | \"inside\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport class Node implements INode {\n [key: string]: unknown;\n\n public children: Node[];\n public element?: HTMLElement;\n public id?: NodeId;\n public idMapping: Map;\n public is_loading: boolean;\n public is_open: boolean;\n public isEmptyFolder: boolean;\n public load_on_demand: boolean;\n public name: string;\n public nodeClass?: typeof Node;\n public parent: Node | null;\n public tree?: Node;\n\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n\n if (isRoot) {\n this.idMapping = new Map();\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, node);\n }\n }\n\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /*\n Get the tree as data.\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record[] => {\n return nodes.map((node) => {\n const tmpNode: Record = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1];\n\n if (!lastChild) {\n return null;\n }\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\n }\n }\n }\n\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\n }\n\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\n }\n\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (\n !previousSibling.hasChildren() ||\n !previousSibling.is_open\n ) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n }\n\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n // Init Node from data without making it the root of the tree\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length\n ) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case \"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 \"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 \"inside\": {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n }\n }\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\n }\n\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setData(object): set attributes of the node\n\n Examples:\n setData('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n}\n","import { DropHint } from \"../dragAndDropHandler/types\";\n\nclass BorderDropHint implements DropHint {\n private hint?: HTMLElement;\n\n constructor(element: HTMLElement, scrollLeft: number) {\n const div = element.querySelector(\":scope > .jqtree-element\");\n\n if (!div) {\n this.hint = undefined;\n return;\n }\n\n const width = Math.max(element.offsetWidth + scrollLeft - 4, 0);\n const height = Math.max(element.clientHeight - 4, 0);\n\n const hint = document.createElement(\"span\");\n hint.className = \"jqtree-border\";\n hint.style.width = `${width}px`;\n hint.style.height = `${height}px`;\n\n this.hint = hint;\n\n div.append(this.hint);\n }\n\n public remove(): void {\n this.hint?.remove();\n }\n}\n\nexport default BorderDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { Node, Position } from \"../node\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n private node: Node;\n\n constructor(node: Node, element: HTMLElement, position: Position) {\n this.element = element;\n this.node = node;\n this.ghost = this.createGhostElement();\n\n switch (position) {\n case \"after\":\n this.moveAfter();\n break;\n\n case \"before\":\n this.moveBefore();\n break;\n\n case \"inside\": {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\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 private moveAfter(): void {\n this.element.after(this.ghost);\n }\n\n private moveBefore(): void {\n this.element.before(this.ghost);\n }\n\n private moveInside(): void {\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n private moveInsideOpenFolder(): void {\n const childElement = this.node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this.ghost);\n }\n }\n}\n\nexport default GhostDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\nimport { Node, Position } from \"../node\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private treeElement: HTMLElement;\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 addDropHint(position: Position): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.node, this.element, position);\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public init(node: Node): void {\n this.node = node;\n\n node.element ??= this.treeElement;\n\n this.element = node.element;\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > span.jqtree-title\",\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === \"inside\";\n }\n}\n\nexport default NodeElement;\n","import { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\nimport { Position } from \"../node\";\nimport NodeElement, { NodeElementParams } from \"./index\";\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: HTMLElement | Text;\n openedIconElement?: HTMLElement | Text;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: HTMLElement | Text;\n private openedIconElement?: HTMLElement | Text;\n private triggerEvent: TriggerEvent;\n\n constructor({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.triggerEvent = triggerEvent;\n }\n\n public close(slide: boolean, animationSpeed: JQuery.Duration): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n const button = this.getButton();\n button.classList.add(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideUp(animationSpeed, doClose);\n } else {\n jQuery(this.getUl()).hide();\n doClose();\n }\n }\n\n public open(\n onFinished: OnFinishOpenNode | undefined,\n slide: boolean,\n animationSpeed: JQuery.Duration,\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 protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && 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 {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData) as unknown as SavedState;\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\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 private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else {\n return localStorage.getItem(this.getKeyName());\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state as unknown as SavedState;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n","export type HorizontalScrollDirection = \"left\" | \"right\";\nexport type VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface ConstructorParams {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport abstract class ScrollParent {\n protected container: HTMLElement;\n protected horizontalScrollDirection?: HorizontalScrollDirection;\n protected horizontalScrollTimeout?: number;\n\n protected refreshHitAreas: () => void;\n protected verticalScrollDirection?: VerticalScrollDirection;\n protected verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: ConstructorParams) {\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.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 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 }\n\n protected abstract getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined;\n protected abstract getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection;\n\n protected scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n protected scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import { getElementPosition, getOffsetTop } from \"../util\";\nimport {\n HorizontalScrollDirection,\n ScrollParent,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nexport default class ContainerScrollParent extends ScrollParent {\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n const containerWidth = this.container.getBoundingClientRect().width;\n\n const rightEdge = scrollParentOffset.left + containerWidth;\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 protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n const containerHeight =\n this.container.getBoundingClientRect().height;\n this.scrollParentBottom =\n this.getScrollParentTop() + containerHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n this.scrollParentTop ??= getOffsetTop(this.container);\n\n return this.scrollParentTop;\n }\n}\n","import { getOffsetTop } from \"../util\";\nimport {\n HorizontalScrollDirection,\n ScrollParent,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent extends ScrollParent {\n private documentScrollHeight?: number;\n private documentScrollWidth?: number;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n super({ container: document.documentElement, refreshHitAreas });\n\n this.treeElement = treeElement;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this.treeElement);\n\n super.scrollToY(top + treeTop);\n }\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.documentScrollHeight = undefined;\n this.documentScrollWidth = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = this.container.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 protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = this.container.scrollTop;\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 canScrollDown() {\n return (\n this.container.scrollTop + this.container.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n return (\n this.container.scrollLeft + this.container.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n this.documentScrollHeight ??= this.container.scrollHeight;\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 this.documentScrollWidth ??= this.container.scrollWidth;\n\n return this.documentScrollWidth;\n }\n}\n","import type { ScrollParent } from \"./scrollParent\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n","import { PositionInfo } from \"./mouseUtils\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\nimport { ScrollParent } from \"./scrollHandler/scrollParent\";\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 getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private getScrollParent(): ScrollParent {\n this.scrollParent ??= createScrollParent(\n this.treeElement,\n this.refreshHitAreas,\n );\n\n return this.scrollParent;\n }\n}\n","import { GetNodeById } from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private selectedNodes: Set;\n private selectedSingleNode: Node | null;\n\n constructor({ getNodeById }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.selectedNodes = new Set();\n this.clear();\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n}\n","const register = (widgetClass: unknown, widgetName: string): void => {\n const getDataKey = (): string => `simple_widget_${widgetName}`;\n\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string,\n ): null | SimpleWidget => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: unknown): JQuery => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, dataKey);\n\n if (!existingWidget) {\n const simpleWidgetClass = widgetClass as typeof SimpleWidget;\n const widget = new simpleWidgetClass(el, options);\n\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n\n return $el;\n };\n\n const destroyWidget = ($el: JQuery): void => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const widget = getWidgetData(el, dataKey);\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, dataKey);\n }\n };\n\n const callFunction = (\n $el: JQuery,\n functionName: string,\n args: unknown[],\n ): unknown => {\n let result = null;\n\n for (const el of $el.get()) {\n const widget = jQuery.data(el, getDataKey()) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n const simpleWidget = widget as SimpleWidget;\n const widgetFunction = simpleWidget[functionName];\n\n if (widgetFunction && typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args) as unknown;\n }\n }\n }\n\n return result;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (jQuery.fn as any)[widgetName] = function (\n this: JQuery,\n argument1: unknown,\n ...args: unknown[]\n ) {\n if (!argument1) {\n return createWidget(this, null);\n } else if (typeof argument1 === \"object\") {\n const options = argument1 as unknown;\n return createWidget(this, options);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (argument1 === \"destroy\") {\n destroyWidget(this);\n return undefined;\n } else {\n return callFunction(this, functionName, args);\n }\n } else {\n return undefined;\n }\n };\n};\n\nexport default class SimpleWidget {\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public $el: JQuery;\n\n public options: WidgetOptions;\n\n constructor(el: HTMLElement, options: WidgetOptions) {\n this.$el = jQuery(el);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const defaults = (this.constructor as any).defaults as WidgetOptions;\n this.options = { ...defaults, ...options };\n }\n\n public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n public deinit(): void {\n //\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n}\n","const version = \"1.8.10\";\n\nexport default version;\n","import DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport { Node, Position } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport __version__ from \"./version\";\n\ninterface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends SimpleWidget {\n protected static defaults: JQTreeOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: undefined,\n data: undefined,\n dataFilter: undefined,\n dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n onCanMove: undefined, // Can this node be moved?\n onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanSelectNode: undefined,\n onCreateLi: undefined,\n onDragMove: undefined,\n onDragStop: undefined,\n onGetStateFromStorage: undefined,\n onIsMoveHandle: undefined,\n onLoadFailed: undefined,\n onLoading: undefined,\n onSetStateFromStorage: undefined,\n openedIcon: \"▼\",\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (cookie name)\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n useContextMenu: true,\n };\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\n private element: JQuery;\n\n private isInitialized: boolean;\n private keyHandler: KeyHandler;\n private mouseHandler: MouseHandler;\n private renderer: ElementsRenderer;\n private saveStateHandler: SaveStateHandler;\n private scrollHandler: ScrollHandler;\n private selectNodeHandler: SelectNodeHandler;\n private tree: Node;\n\n public addNodeAfter(\n newNodeInfo: NodeData,\n existingNode: Node,\n ): Node | null {\n const newNode = existingNode.addAfter(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addNodeBefore(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addBefore(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addParentNode(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addParent(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n public addToSelection(node?: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.addToSelection(node);\n this.openParents(node);\n\n this.getNodeElementForNode(node).select(mustSetFocus ?? true);\n\n this.saveState();\n\n return this.element;\n }\n\n public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.append(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public closeNode(node?: Node, slideParam?: boolean | null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.isFolder() || node.isEmptyFolder) {\n this.createFolderElement(node).close(\n slide,\n this.options.animationSpeed,\n );\n\n this.saveState();\n }\n\n return this.element;\n }\n\n public deinit(): void {\n this.element.empty();\n this.element.off();\n\n this.keyHandler.deinit();\n this.mouseHandler.deinit();\n\n this.tree = new Node({}, true);\n\n super.deinit();\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n public getNodeByHtmlElement(\n inputElement: HTMLElement | JQuery,\n ): Node | null {\n const element =\n inputElement instanceof HTMLElement\n ? inputElement\n : inputElement[0];\n\n if (!element) {\n return null;\n }\n\n return this.getNode(element);\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.tree.getNodeById(nodeId);\n }\n\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n public getSelectedNode(): false | Node {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n public getState(): null | SavedState {\n return this.saveStateHandler.getState();\n }\n\n public getStateFromStorage(): null | SavedState {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n public getTree(): Node {\n return this.tree;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public init(): void {\n super.init();\n\n this.element = this.$el;\n this.isInitialized = false;\n\n this.options.rtl = this.getRtlOption();\n\n this.options.closedIcon ??= this.getDefaultClosedIcon();\n\n this.connectHandlers();\n\n this.initData();\n }\n\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public isNodeSelected(node?: Node): boolean {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n public loadData(data: NodeData[], parentNode: Node | null): JQuery {\n this.doLoadData(data, parentNode);\n return this.element;\n }\n\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n public loadDataFromUrl(\n param1: Node | null | string,\n param2?: HandleFinishedLoading | Node | null,\n param3?: HandleFinishedLoading,\n ): JQuery {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(\n param1,\n param2 as Node | null,\n param3 ?? null,\n );\n } else {\n // first parameter is not url\n this.doLoadDataFromUrl(\n null,\n param1,\n param2 as HandleFinishedLoading | null,\n );\n }\n\n return this.element;\n }\n\n public moveDown(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveDown(selectedNode);\n }\n\n return this.element;\n }\n\n public moveNode(\n node?: Node,\n targetNode?: Node,\n position?: Position,\n ): 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 this.tree.moveNode(node, targetNode, position);\n this.refreshElements(null);\n\n return this.element;\n }\n\n public moveUp(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveUp(selectedNode);\n }\n\n return this.element;\n }\n\n public openNode(\n node?: Node,\n param1?: boolean | OnFinishOpenNode,\n param2?: OnFinishOpenNode,\n ): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const parseParams = (): [boolean, OnFinishOpenNode | undefined] => {\n let onFinished: null | OnFinishOpenNode;\n let slide: boolean | null;\n\n if (isFunction(param1)) {\n onFinished = param1 as OnFinishOpenNode;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n slide ??= this.options.slide;\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this.openNodeInternal(node, slide, onFinished);\n return this.element;\n }\n\n public prependNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.prepend(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.element;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\n }\n\n public reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public removeFromSelection(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.removeFromSelection(node);\n\n this.getNodeElementForNode(node).deselect();\n this.saveState();\n\n return this.element;\n }\n\n public removeNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.parent) {\n throw Error(\"Node has no parent\");\n }\n\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this.refreshElements(parent);\n\n return this.element;\n }\n\n public scrollToNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.element) {\n return this.element;\n }\n\n const top =\n getOffsetTop(node.element) -\n getOffsetTop(this.$el.get(0) as HTMLElement);\n\n this.scrollHandler.scrollToY(top);\n\n return this.element;\n }\n\n public selectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): JQuery {\n this.doSelectNode(node, optionsParam);\n return this.element;\n }\n\n public setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record)[option] = value;\n return this.element;\n }\n\n public setState(state?: SavedState): JQuery {\n if (state) {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public toggle(node?: Node, slideParam: boolean | null = null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n public updateNode(node?: Node, data?: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!data) {\n return this.element;\n }\n\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data.children &&\n data.children instanceof Array\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children as Node[]);\n }\n }\n\n this.refreshElements(node);\n\n return this.element;\n }\n\n private connectHandlers() {\n const {\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onLoadFailed,\n onLoading,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this.options;\n\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this.getNodeElement.bind(this);\n const getNodeElementForNode = this.getNodeElementForNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const isFocusOnTree = this.isFocusOnTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this.openNodeInternal.bind(this);\n const refreshElements = this.refreshElements.bind(this);\n const refreshHitAreas = this.refreshHitAreas.bind(this);\n const selectNode = this.selectNode.bind(this);\n const $treeElement = this.element;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const dataLoader = new DataLoader({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n });\n\n const renderer = new ElementsRenderer({\n $element: $treeElement,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this.getNode.bind(this);\n const onMouseCapture = this.mouseCapture.bind(this);\n const onMouseDrag = this.mouseDrag.bind(this);\n const onMouseStart = this.mouseStart.bind(this);\n const onMouseStop = this.mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle: this.doSelectNode.bind(this),\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this.dataLoader = dataLoader;\n this.dndHandler = dndHandler;\n this.keyHandler = keyHandler;\n this.mouseHandler = mouseHandler;\n this.renderer = renderer;\n this.saveStateHandler = saveStateHandler;\n this.scrollHandler = scrollHandler;\n this.selectNodeHandler = selectNodeHandler;\n }\n\n private containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\n }\n\n private createFolderElement(node: Node) {\n const closedIconElement = this.renderer.closedIconElement;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const openedIconElement = this.renderer.openedIconElement;\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n return new FolderElement({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n });\n }\n\n private createNodeElement(node: Node) {\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n }\n\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n private doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (data) {\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n\n this.triggerEvent(\"tree.load_data\", {\n parent_node: parentNode,\n tree_data: data,\n });\n }\n\n private doLoadDataFromUrl(\n urlInfoParam: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n const urlInfo = urlInfoParam ?? this.getDataUrlInfo(parentNode);\n\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n }\n\n private doSelectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): void {\n const saveState = (): void => {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n };\n\n if (!node) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (this.options.onCanSelectNode) {\n return (\n this.options.selectable &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable;\n }\n };\n\n if (!canSelect()) {\n return;\n }\n\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this.triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node,\n });\n }\n } else {\n const deselectedNode = this.getSelectedNode() || null;\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselected_node: deselectedNode,\n node,\n });\n this.openParents(node);\n }\n\n saveState();\n }\n\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n } else if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n } else if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n } else {\n return 0;\n }\n }\n\n private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl ?? (this.element.data(\"url\") as null | string);\n\n const getUrlFromString = (url: string): JQuery.AjaxSettings => {\n const urlInfo: JQuery.AjaxSettings = { url };\n\n setUrlInfoData(urlInfo);\n\n return urlInfo;\n };\n\n const setUrlInfoData = (urlInfo: JQuery.AjaxSettings): void => {\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n const data = { node: node.id };\n urlInfo.data = data;\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n const data = { selected_node: selectedNodeId };\n urlInfo.data = data;\n }\n }\n };\n\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n } else if (typeof dataUrl === \"string\") {\n return getUrlFromString(dataUrl);\n } else if (dataUrl && typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n } else {\n return null;\n }\n }\n\n private getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n } else {\n // triangle to the right\n return \"►\";\n }\n }\n\n private getNode(element: HTMLElement): Node | null {\n const liElement = element.closest(\"li.jqtree_common\");\n\n if (liElement) {\n return jQuery(liElement).data(\"node\") as Node;\n } else {\n return null;\n }\n }\n\n private getNodeElement(element: HTMLElement): NodeElement | null {\n const node = this.getNode(element);\n if (node) {\n return this.getNodeElementForNode(node);\n } else {\n return null;\n }\n }\n\n private getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return this.createFolderElement(node);\n } else {\n return this.createNodeElement(node);\n }\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\n }\n }\n\n private getRtlOption(): boolean {\n if (this.options.rtl != null) {\n return this.options.rtl;\n } else {\n const dataRtl = this.element.data(\"rtl\") as unknown;\n\n if (\n dataRtl !== null &&\n dataRtl !== false &&\n dataRtl !== undefined\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n private initData(): void {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n } else {\n const dataUrl = this.getDataUrlInfo(null);\n\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n } else {\n this.doLoadData([], null);\n }\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (!this.isInitialized) {\n this.isInitialized = true;\n this.triggerEvent(\"tree.init\");\n }\n };\n\n this.tree = new this.options.nodeClass(\n null,\n true,\n this.options.nodeClass,\n );\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this.refreshElements(null);\n\n if (!mustLoadOnDemand) {\n doInit();\n } else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n }\n\n private isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return Boolean(\n activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.containsElement(activeElement as HTMLElement),\n );\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (!selectedNode) {\n return false;\n } else {\n return subtree === selectedNode || subtree.isParentOf(selectedNode);\n }\n }\n\n private loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n node.is_loading = true;\n\n this.doLoadDataFromUrl(null, node, () => {\n this.openNodeInternal(node, slide, onFinished);\n });\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this.refreshElements(parentNode);\n }\n\n private mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseCapture(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this.dndHandler.mouseDrag(positionInfo);\n\n this.scrollHandler.checkScrolling(positionInfo);\n return result;\n } else {\n return false;\n }\n }\n\n private mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n this.scrollHandler.stopScrolling();\n return this.dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n private openNodeInternal(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished?: OnFinishOpenNode,\n ): void => {\n if (!node.children.length) {\n return;\n }\n\n const folderElement = this.createFolderElement(_node);\n folderElement.open(\n _onFinished,\n _slide,\n this.options.animationSpeed,\n );\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n doOpenNode(parent, false);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this.triggerEvent(\"tree.refresh\");\n }\n\n private saveState(): void {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (node) {\n const nodeElement = this.getNodeElementForNode(node);\n nodeElement.select(mustSetFocus);\n }\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): [boolean, boolean] => {\n // result: is state restored, must load on demand?\n if (!this.options.saveState) {\n return [false, false];\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return [false, false];\n } else {\n const mustLoadOnDemand =\n this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n }\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n } else if (!node.hasChildren()) {\n return false;\n } else {\n node.is_open = true;\n return level !== maxLevel;\n }\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n private setInitialStateOnDemand(cbFinished: () => void): void {\n const restoreState = (): boolean => {\n if (!this.options.saveState) {\n return false;\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return false;\n } else {\n this.saveStateHandler.setInitialStateOnDemand(\n state,\n cbFinished,\n );\n\n return true;\n }\n }\n };\n\n const autoOpenNodes = (): void => {\n const maxLevel = this.getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNodeInternal(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n const openNodes = (): void => {\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n\n return false;\n } else {\n this.openNodeInternal(node, false);\n\n return level !== maxLevel;\n }\n });\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n openNodes();\n };\n\n if (!restoreState()) {\n autoOpenNodes();\n }\n }\n\n private triggerEvent(\n eventName: string,\n values?: Record,\n ): JQuery.Event {\n const event = jQuery.Event(eventName, values);\n this.element.trigger(event);\n return event;\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["DataLoader","constructor","dataFilter","loadData","onLoadFailed","onLoading","treeElement","triggerEvent","loadFromUrl","urlInfo","parentNode","onFinished","element","getDomElement","addLoadingClass","notifyLoading","stopLoading","removeLoadingClass","handleSuccess","data","parseData","handleError","jqXHR","submitRequest","classList","add","isLoading","node","$el","jQuery","getParsedData","JSON","parse","parsedData","remove","urlInfoInput","url","ajaxSettings","cache","dataType","error","method","success","toUpperCase","ajax","isInt","n","isFunction","v","getBoolString","value","getOffsetTop","getElementPosition","top","rect","getBoundingClientRect","left","x","window","scrollX","y","scrollY","binarySearch","items","compareFn","low","high","length","mid","item","undefined","compareResult","DragElement","autoEscape","nodeName","offsetX","offsetY","createElement","appendChild","move","pageX","pageY","style","document","textContent","innerHTML","position","iterateVisibleNodes","tree","handleAfterOpenFolder","handleClosedFolder","handleFirstNode","handleNode","handleOpenFolder","isFirstNode","iterate","nextNode","mustIterateInside","is_open","hasChildren","offsetParent","childrenLength","children","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","openFolderDelay","openNode","refreshElements","slide","hoveredArea","isDragging","currentItem","mouseCapture","positionInfo","target","mustCaptureElement","nodeElement","mouseDrag","dragElement","area","findHoveredArea","canMoveToArea","isFolder","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","originalEvent","mouseStart","refresh","name","mouseStop","moveItem","clear","removeHover","removeHitAreas","dimensions","getTreeDimensions","right","treePosition","clientWidth","movedNode","targetNode","previousParent","parent","doMove","moveNode","event","move_info","do_move","moved_node","original_event","previous_parent","target_node","isDefaultPrevented","previousGhost","folder","openFolder","openFolderTimer","setTimeout","clearTimeout","addDropHint","ElementsRenderer","$element","buttonLeft","closedIcon","dragAndDrop","isNodeSelected","onCreateLi","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","render","fromNode","renderFromNode","renderFromRoot","$previousLi","li","createLi","getLevel","after","createDomElements","empty","attachNodeData","div","createTextNode","nodeType","isRootNode","level","ul","createUl","createFolderLi","isSelected","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","className","setAttribute","buttonLink","cloneNode","titleSpan","createTitleSpan","Boolean","mustShowFolder","isEmptyFolder","createNodeLi","liClasses","classString","join","classes","setTreeItemAriaAttributes","role","is_loading","KeyHandler","closeNode","getSelectedNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","addEventListener","handleKeyDown","deinit","removeEventListener","moveDown","selectedNode","getNextVisibleNode","moveUp","getPreviousVisibleNode","canHandleKeyboard","e","isKeyHandled","key","moveLeft","moveRight","preventDefault","getParent","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","handleClick","handleDblclick","mouseDown","passive","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","removeMouseMoveEventListeners","getClickTarget","button","closest","type","jqTreeElement","clickTarget","stopPropagation","click_event","handleMouseDown","handleMouseUp","handleStartMouse","handleMouseMove","cancelable","mouseMove","touchMove","mouseUp","touchEnd","mouseDelay","startMouseDelayTimer","result","touches","isNodeRecordWithChildren","Array","Node","nodeData","isRoot","nodeClass","load_on_demand","setData","idMapping","Map","addAfter","nodeInfo","createNode","childIndex","getChildIndex","addChildAtPosition","loadChildrenFromData","addBefore","addChild","setParent","index","splice","addNodeToIndex","id","set","addParent","newParent","originalParent","append","filter","f","indexOf","getData","includeParent","getDataFromNodes","nodes","map","tmpNode","k","Object","prototype","hasOwnProperty","call","getLastChild","lastChild","getNextNode","includeChildren","nextSibling","getNextSibling","nextIndex","getNodeByCallback","callback","getNodeById","nodeId","get","getNodeByName","getNodeByNameMustExist","Error","getNodesByProperty","getPreviousNode","previousSibling","getPreviousSibling","previousIndex","initFromData","addNode","addChildren","childrenData","isParentOf","_iterate","loadFromData","removeChildren","childData","doRemoveChild","prepend","removeChild","removeNodeFromIndex","delete","o","getNodeClass","BorderDropHint","scrollLeft","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","moveAfter","moveBefore","moveInsideOpenFolder","moveInside","circleSpan","lineSpan","before","childElement","NodeElement","init","mustShowBorderDropHint","deselect","getTitleSpan","removeAttribute","blur","select","mustSetFocus","toString","focus","getUl","FolderElement","close","animationSpeed","getButton","icon","doClose","slideUp","hide","open","doOpen","slideDown","show","SaveStateHandler","addToSelection","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","getNodeIdToBeSelected","state","getStateFromStorage","selected_node","getState","getOpenNodeIds","openNodes","getSelectedNodeIds","selectedNodeIds","open_nodes","jsonData","loadFromStorage","parseState","stringify","localStorage","setItem","getKeyName","setInitialState","mustLoadOnDemand","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand","cbFinished","loadingCount","nodeIds","newNodesIds","loadAndOpenNode","getItem","selectedNodes","selectCount","ScrollParent","container","refreshHitAreas","checkHorizontalScrolling","newHorizontalScrollDirection","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","scrollHorizontally","bind","checkVerticalScrolling","newVerticalScrollDirection","getNewVerticalScrollDirection","verticalScrollDirection","verticalScrollTimeout","scrollVertically","scrollToY","scrollTop","stopScrolling","distance","scrollBy","behavior","ContainerScrollParent","scrollParentOffset","containerWidth","rightEdge","leftEdge","isNearRightEdge","isNearLeftEdge","getScrollParentTop","getScrollParentBottom","scrollParentBottom","containerHeight","scrollParentTop","DocumentScrollParent","documentElement","treeTop","documentScrollHeight","documentScrollWidth","windowWidth","innerWidth","canScrollRight","distanceTop","windowHeight","innerHeight","canScrollDown","getDocumentScrollHeight","getDocumentScrollWidth","scrollHeight","scrollWidth","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","getParentWithOverflow","parentElement","createScrollParent","tagName","ScrollHandler","scrollParent","checkScrolling","getScrollParent","SelectNodeHandler","Set","selectedSingleNode","getSelectedNodesUnder","has","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","existingWidget","simpleWidgetClass","destroyWidget","destroy","removeData","callFunction","functionName","args","simpleWidget","widgetFunction","apply","fn","argument1","defaults","version","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","selectNodeHandler","openParents","appendNode","parentNodeParam","slideParam","createFolderElement","off","keyHandler","mouseHandler","getNodeByHtmlElement","inputElement","HTMLElement","saveStateHandler","getVersion","__version__","isInitialized","getRtlOption","getDefaultClosedIcon","connectHandlers","initData","dndHandler","doLoadData","loadDataFromUrl","param1","param2","param3","doLoadDataFromUrl","parseParams","openNodeInternal","prependNode","reload","removeNode","scrollToNode","scrollHandler","optionsParam","doSelectNode","setOption","option","setState","toggle","toJson","updateNode","idIsChanged","$treeElement","dataLoader","renderer","containsElement","createNodeElement","deselectCurrentNode","deselectNodes","selectedNodesUnderParent","loadSubtree","initTree","parent_node","tree_data","urlInfoParam","getDataUrlInfo","defaultOptions","mustToggle","selectOptions","canSelect","previous_node","deselectedNode","deselected_node","getAutoOpenMaxLevel","parseInt","getUrlFromString","setUrlInfoData","selectedNodeId","liElement","dataRtl","doInit","activeElement","isSelectedNodeInSubtree","subtree","loadFolderOnDemand","doOpenNode","_node","_slide","_onFinished","folderElement","mustSelect","selectCurrentNode","restoreState","autoOpenNodes","maxLevel","isRestored","eventName","values","Event","trigger"],"mappings":"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"} \ No newline at end of file diff --git a/tree.jquery.js b/tree.jquery.js index fcd612a1..44d10b22 100644 --- a/tree.jquery.js +++ b/tree.jquery.js @@ -17,5 +17,5 @@ limitations under the License. @license */ -var jqtree=function(e){"use strict";class t{constructor(e){let{dataFilter:t,loadData:o,onLoadFailed:n,onLoading:r,treeElement:s,triggerEvent:i}=e;this.dataFilter=t,this.loadData=o,this.onLoadFailed=n,this.onLoading=r,this.treeElement=s,this.triggerEvent=i}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")}getDomElement(e){return e?.element?e.element:this.treeElement}notifyLoading(e,t,o){const n=jQuery(o);this.onLoading&&this.onLoading(e,t,n),this.triggerEvent("tree.loading_data",{$el:n,isLoading:e,node:t})}parseData(e){const t="string"==typeof e?JSON.parse(e):e;return this.dataFilter?this.dataFilter(t):t}removeLoadingClass(e){e.classList.remove("jqtree-loading")}submitRequest(e,t,o){const n={cache:!1,dataType:"json",error:o,method:"GET",success:t,..."string"==typeof e?{url:e}:e};n.method=n.method?.toUpperCase()??"GET",jQuery.ajax(n)}}const o=e=>e?"true":"false",n=e=>r(e).top,r=e=>{const t=e.getBoundingClientRect();return{left:t.x+window.scrollX,top:t.y+window.scrollY}};class s{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 i=(e,t,o,n)=>{const r=Math.min(t.length,4),s=Math.round((n-o)/r);let i=o;for(let o=0;o((e,t)=>{if(!e.length)return[];let o=e[0].top,n=[];const r=[];for(const t of e)t.top!==o&&n.length&&(i(r,n,o,t.top),o=t.top,n=[]),n.push(t);return i(r,n,o,t),r})(((e,t)=>{const o=[];let r=0;const s=(e,t,n)=>{o.push({node:e,position:t,top:n}),r=n};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,o)=>{s(e,e===t||o===t?null:"after",r)},handleClosedFolder:(e,o,r)=>{const i=n(r);e===t?s(e,null,i):(s(e,"inside",i),o!==t&&s(e,"after",i))},handleFirstNode:e=>{e!==t&&e.element&&s(e,"before",n(e.element))},handleNode:(e,o,r)=>{const i=n(r);s(e,e===t?null:"inside",i),s(e,o===t||e===t?null:"after",i)},handleOpenFolder:(e,o)=>{if(e===t){const t=n(o),r=o.clientHeight;return s(e,null,t),r>5&&s(e,null,t+r-5),!1}return e.children[0]!==t&&s(e,"inside",n(o)),!0}}),o})(e,t),o);class d{constructor(e){let{autoEscape:t,getNodeElement:o,getNodeElementForNode:n,getScrollLeft:r,getTree:s,onCanMove:i,onCanMoveTo:l,onDragMove:d,onDragStop:a,onIsMoveHandle:h,openFolderDelay:c,openNode:u,refreshElements:m,slide:g,treeElement:p,triggerEvent:f}=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.openFolderDelay=c,this.openNode=u,this.refreshElements=m,this.slide=g,this.treeElement=p,this.triggerEvent=f,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}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,this.currentItem)?(t.node.isFolder()||this.stopOpenFolderTimer(),this.hoveredArea!==t&&(this.hoveredArea=t,this.mustOpenFolderTimer(t)?this.startOpenFolderTimer(t.node):this.stopOpenFolderTimer(),this.updateDropHint())):(this.removeDropHint(),this.stopOpenFolderTimer(),this.hoveredArea=t),t||this.onDragMove&&this.onDragMove(this.currentItem.node,e.originalEvent),!0}mouseStart(e){if(!this.currentItem)return!1;this.refresh();const{left:t,top:o}=r(e.target),n=this.currentItem.node;return this.dragElement=new s({autoEscape:this.autoEscape??!0,nodeName:n.name,offsetX:e.pageX-t,offsetY:e.pageY-o,treeElement:this.treeElement}),this.isDragging=!0,this.currentItem.element.classList.add("jqtree-moving"),!0}mouseStop(e){this.moveItem(e),this.clear(),this.removeHover(),this.removeDropHint(),this.removeHitAreas();const t=this.currentItem;return this.currentItem&&(this.currentItem.element.classList.remove("jqtree-moving"),this.currentItem=null),this.isDragging=!1,!this.hoveredArea&&t&&this.onDragStop&&this.onDragStop(t.node,e.originalEvent),!1}refresh(){if(this.removeHitAreas(),this.currentItem){const e=this.currentItem.node;this.generateHitAreas(e),this.currentItem=this.getNodeElementForNode(e),this.isDragging&&this.currentItem.element.classList.add("jqtree-moving")}}canMoveToArea(e,t){return!this.onCanMoveTo||this.onCanMoveTo(t.node,e.node,e.position)}clear(){this.dragElement&&(this.dragElement.remove(),this.dragElement=null)}findHoveredArea(e,t){const o=this.getTreeDimensions();return eo.right||t>o.bottom?null:function(e,t){let o=0,n=e.length;for(;o>1,s=e[r];if(void 0===s)return null;const i=t(s);if(i>0)n=r;else{if(!(i<0))return s;o=r+1}}return null}(this.hitAreas,(e=>te.bottom?-1:0))}generateHitAreas(e){const t=this.getTree();this.hitAreas=t?l(t,e,this.getTreeDimensions().bottom):[]}getTreeDimensions(){const e=r(this.treeElement),t=e.left+this.getScrollLeft(),o=e.top;return{bottom:o+this.treeElement.clientHeight+16,left:t,right:t+this.treeElement.clientWidth,top:o}}moveItem(e){if(this.currentItem&&this.hoveredArea?.position&&this.canMoveToArea(this.hoveredArea,this.currentItem)){const t=this.currentItem.node,o=this.hoveredArea.node,n=this.hoveredArea.position,r=t.parent;"inside"===n&&(this.hoveredArea.node.is_open=!0);const s=()=>{const e=this.getTree();e&&(e.moveNode(t,o,n),this.treeElement.textContent="",this.refreshElements(null))};this.triggerEvent("tree.move",{move_info:{do_move:s,moved_node:t,original_event:e.originalEvent,position:n,previous_parent:r,target_node:o}}).isDefaultPrevented()||s()}}mustCaptureElement(e){const t=e.nodeName;return"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}mustOpenFolderTimer(e){const t=e.node;return t.isFolder()&&!t.is_open&&"inside"===e.position}removeDropHint(){this.previousGhost&&this.previousGhost.remove()}removeHitAreas(){this.hitAreas=[]}removeHover(){this.hoveredArea=null}startOpenFolderTimer(e){const t=()=>{this.openNode(e,this.slide,(()=>{this.refresh(),this.updateDropHint()}))};this.stopOpenFolderTimer();const o=this.openFolderDelay;!1!==o&&(this.openFolderTimer=window.setTimeout(t,o))}stopOpenFolderTimer(){this.openFolderTimer&&(clearTimeout(this.openFolderTimer),this.openFolderTimer=null)}updateDropHint(){if(!this.hoveredArea)return;this.removeDropHint();const e=this.getNodeElementForNode(this.hoveredArea.node);this.previousGhost=e.addDropHint(this.hoveredArea.position)}}class a{constructor(e){let{$element:t,autoEscape:o,buttonLeft:n,closedIcon:r,dragAndDrop:s,getTree:i,isNodeSelected:l,onCreateLi:d,openedIcon:a,rtl:h,showEmptyFolder:c,tabIndex:u}=e;this.autoEscape=o,this.buttonLeft=n,this.dragAndDrop=s,this.$element=t,this.getTree=i,this.isNodeSelected=l,this.onCreateLi=d,this.rtl=h,this.showEmptyFolder=c,this.tabIndex=u,this.openedIconElement=this.createButtonElement(a??"+"),this.closedIconElement=this.createButtonElement(r??"-")}render(e){e?.parent?this.renderFromNode(e):this.renderFromRoot()}renderFromNode(e){if(!e.element)return;const t=jQuery(e.element),o=this.createLi(e,e.getLevel());t.after(o),t.remove(),this.createDomElements(o,e.children,!1,e.getLevel()+1)}renderFromRoot(){this.$element.empty();const e=this.getTree();this.$element[0]&&e&&this.createDomElements(this.$element[0],e.children,!0,1)}attachNodeData(e,t){e.element=t,jQuery(t).data("node",e)}createButtonElement(e){if("string"==typeof e){const t=document.createElement("div");return t.innerHTML=e,document.createTextNode(t.innerHTML)}return e.nodeType?e:jQuery(e)[0]}createDomElements(e,t,o,n){const r=this.createUl(o);e.appendChild(r);for(const e of t){const t=this.createLi(e,n);r.appendChild(t),e.hasChildren()&&this.createDomElements(t,e.children,!1,n+1)}}createFolderLi(e,t,n){const r=this.getButtonClasses(e),s=this.getFolderClasses(e,n),i=e.is_open?this.openedIconElement:this.closedIconElement,l=document.createElement("li");l.className=`jqtree_common ${s}`,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=r,i&&a.appendChild(i.cloneNode(!0)),this.buttonLeft&&d.appendChild(a);const h=this.createTitleSpan(e.name,n,!0,t);return h.setAttribute("aria-expanded",o(e.is_open)),d.appendChild(h),this.buttonLeft||d.appendChild(a),l}createLi(e,t){const o=Boolean(this.isNodeSelected(e)),n=e.isFolder()||e.isEmptyFolder&&this.showEmptyFolder?this.createFolderLi(e,t,o):this.createNodeLi(e,t,o);return this.attachNodeData(e,n),this.onCreateLi&&this.onCreateLi(e,jQuery(n),o),n}createNodeLi(e,t,o){const n=["jqtree_common"];o&&n.push("jqtree-selected");const r=n.join(" "),s=document.createElement("li");s.className=r,s.setAttribute("role","none");const i=document.createElement("div");i.className="jqtree-element jqtree_common",i.setAttribute("role","none"),s.appendChild(i);const l=this.createTitleSpan(e.name,o,!1,t);return i.appendChild(l),s}createTitleSpan(e,t,o,n){const r=document.createElement("span");let s="jqtree-title jqtree_common";if(o&&(s+=" jqtree-title-folder"),s+=" jqtree-title-button-"+(this.buttonLeft?"left":"right"),r.className=s,t){const e=this.tabIndex;void 0!==e&&r.setAttribute("tabindex",`${e}`)}return this.setTreeItemAriaAttributes(r,e,n,t),this.autoEscape?r.textContent=e:r.innerHTML=e,r}createUl(e){let t,o;e?(t="jqtree-tree",o="tree",this.rtl&&(t+=" jqtree-rtl")):(t="",o="group"),this.dragAndDrop&&(t+=" jqtree-dnd");const n=document.createElement("ul");return n.className=`jqtree_common ${t}`,n.setAttribute("role",o),n}getButtonClasses(e){const t=["jqtree-toggler","jqtree_common"];return e.is_open||t.push("jqtree-closed"),this.buttonLeft?t.push("jqtree-toggler-left"):t.push("jqtree-toggler-right"),t.join(" ")}getFolderClasses(e,t){const o=["jqtree-folder"];return e.is_open||o.push("jqtree-closed"),t&&o.push("jqtree-selected"),e.is_loading&&o.push("jqtree-loading"),o.join(" ")}setTreeItemAriaAttributes(e,t,n,r){e.setAttribute("aria-label",t),e.setAttribute("aria-level",`${n}`),e.setAttribute("aria-selected",o(r)),e.setAttribute("role","treeitem")}}class h{constructor(e){let{closeNode:t,getSelectedNode:o,isFocusOnTree:n,keyboardSupport:r,openNode:s,selectNode:i}=e;this.closeNode=t,this.getSelectedNode=o,this.isFocusOnTree=n,this.keyboardSupport=r,this.openNode=s,this.originalSelectNode=i,r&&document.addEventListener("keydown",this.handleKeyDown)}deinit(){this.keyboardSupport&&document.removeEventListener("keydown",this.handleKeyDown)}moveDown(e){return this.selectNode(e.getNextVisibleNode())}moveUp(e){return this.selectNode(e.getPreviousVisibleNode())}canHandleKeyboard(){return this.keyboardSupport&&this.isFocusOnTree()}handleKeyDown=e=>{if(!this.canHandleKeyboard())return;let t=!1;const o=this.getSelectedNode();if(o)switch(e.key){case"ArrowDown":t=this.moveDown(o);break;case"ArrowLeft":t=this.moveLeft(o);break;case"ArrowRight":t=this.moveRight(o);break;case"ArrowUp":t=this.moveUp(o)}t&&e.preventDefault()};moveLeft(e){return e.isFolder()&&e.is_open?(this.closeNode(e),!0):this.selectNode(e.getParent())}moveRight(e){return!!e.isFolder()&&(e.is_open?this.selectNode(e.getNextVisibleNode()):(this.openNode(e),!0))}selectNode(e){return!!e&&(this.originalSelectNode(e),!0)}}const c=e=>({originalEvent:e,pageX:e.pageX,pageY:e.pageY,target:e.target}),u=(e,t)=>({originalEvent:t,pageX:e.pageX,pageY:e.pageY,target:e.target});class m{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()}getClickTarget(e){const t=e.closest(".jqtree-toggler");if(t){const e=this.getNode(t);if(e)return{node:e,type:"button"}}else{const t=e.closest(".jqtree-element");if(t){const e=this.getNode(t);if(e)return{node:e,type:"label"}}}return null}handleClick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);if(t)switch(t.type){case"button":this.onClickButton(t.node),e.preventDefault(),e.stopPropagation();break;case"label":this.triggerEvent("tree.click",{click_event:e,node:t.node}).isDefaultPrevented()||this.onClickTitle(t.node);break}};handleContextmenu=e=>{if(!e.target)return;const t=e.target.closest("ul.jqtree-tree .jqtree-element");if(t){const o=this.getNode(t);if(o)return e.preventDefault(),e.stopPropagation(),this.triggerEvent("tree.contextmenu",{click_event:e,node:o}),!1}return null};handleDblclick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);"label"===t?.type&&this.triggerEvent("tree.dblclick",{click_event:e,node:t.node})};handleMouseDown(e){return this.isMouseStarted&&this.handleMouseUp(e),this.mouseDownInfo=e,!!this.onMouseCapture(e)&&(this.handleStartMouse(),!0)}handleMouseMove(e,t){if(this.isMouseStarted)return this.onMouseDrag(t),void(e.cancelable&&e.preventDefault());this.isMouseDelayMet&&(this.mouseDownInfo&&(this.isMouseStarted=this.onMouseStart(this.mouseDownInfo)),this.isMouseStarted?(this.onMouseDrag(t),e.cancelable&&e.preventDefault()):this.handleMouseUp(t))}handleMouseUp(e){this.removeMouseMoveEventListeners(),this.isMouseDelayMet=!1,this.mouseDownInfo=null,this.isMouseStarted&&(this.isMouseStarted=!1,this.onMouseStop(e))}handleStartMouse(){document.addEventListener("mousemove",this.mouseMove,{passive:!1}),document.addEventListener("touchmove",this.touchMove,{passive:!1}),document.addEventListener("mouseup",this.mouseUp,{passive:!1}),document.addEventListener("touchend",this.touchEnd,{passive:!1});const e=this.getMouseDelay();e?this.startMouseDelayTimer(e):this.isMouseDelayMet=!0}mouseDown=e=>{if(0!==e.button)return;this.handleMouseDown(c(e))&&e.cancelable&&e.preventDefault()};mouseMove=e=>{this.handleMouseMove(e,c(e))};mouseUp=e=>{this.handleMouseUp(c(e))};removeMouseMoveEventListeners(){document.removeEventListener("mousemove",this.mouseMove),document.removeEventListener("touchmove",this.touchMove),document.removeEventListener("mouseup",this.mouseUp),document.removeEventListener("touchend",this.touchEnd)}startMouseDelayTimer(e){this.mouseDelayTimer&&clearTimeout(this.mouseDelayTimer),this.mouseDelayTimer=window.setTimeout((()=>{this.mouseDownInfo&&(this.isMouseDelayMet=!0)}),e),this.isMouseDelayMet=!1}touchEnd=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseUp(u(t,e))};touchMove=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseMove(e,u(t,e))};touchStart=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseDown(u(t,e))}}const g=e=>"object"==typeof e&&"children"in e&&e.children instanceof Array;class p{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]:p;this.name="",this.load_on_demand=!1,this.isEmptyFolder=null!=e&&g(e)&&0===e.children.length,this.setData(e),this.children=[],this.parent=null,t&&(this.idMapping=new Map,this.tree=this,this.nodeClass=o)}addAfter(e){if(this.parent){const t=this.createNode(e),o=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(t,o+1),t.loadChildrenFromData(e),t}return null}addBefore(e){if(this.parent){const t=this.createNode(e),o=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(t,o),t.loadChildrenFromData(e),t}return null}addChild(e){this.children.push(e),e.setParent(this)}addChildAtPosition(e,t){this.children.splice(t,0,e),e.setParent(this)}addNodeToIndex(e){null!=e.id&&this.idMapping.set(e.id,e)}addParent(e){if(this.parent){const t=this.createNode(e);this.tree&&t.setParent(this.tree);const o=this.parent;for(const e of o.children)t.addChild(e);return o.children=[],o.addChild(t),t}return null}append(e){const t=this.createNode(e);return this.addChild(t),t.loadChildrenFromData(e),t}filter(e){const t=[];return this.iterate((o=>(e(o)&&t.push(o),!0))),t}getChildIndex(e){return this.children.indexOf(e)}getData(){const e=t=>t.map((t=>{const o={};for(const e in t)if(-1===["parent","children","element","idMapping","load_on_demand","nodeClass","tree","isEmptyFolder"].indexOf(e)&&Object.prototype.hasOwnProperty.call(t,e)){const n=t[e];o[e]=n}return t.hasChildren()&&(o.children=e(t.children)),o}));return e(arguments.length>0&&void 0!==arguments[0]&&arguments[0]?[this]:this.children)}getLastChild(){if(this.hasChildren()){const e=this.children[this.children.length-1];return e?e.hasChildren()&&e.is_open?e.getLastChild():e:null}return null}getLevel(){let e=0,t=this;for(;t.parent;)e+=1,t=t.parent;return e}getNextNode(){if((!(arguments.length>0&&void 0!==arguments[0])||arguments[0])&&this.hasChildren())return this.children[0]??null;if(this.parent){const e=this.getNextSibling();return e||this.parent.getNextNode(!1)}return null}getNextSibling(){if(this.parent){const e=this.parent.getChildIndex(this)+1;return e!t&&(!e(o)||(t=o,!1)))),t}getNodeById(e){return this.idMapping.get(e)??null}getNodeByName(e){return this.getNodeByCallback((t=>t.name===e))}getNodeByNameMustExist(e){const t=this.getNodeByCallback((t=>t.name===e));if(!t)throw new Error(`Node with name ${e} not found`);return t}getNodesByProperty(e,t){return this.filter((o=>o[e]===t))}getParent(){return this.parent&&this.parent.parent?this.parent:null}getPreviousNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()?e.getLastChild():e:this.getParent()}return null}getPreviousSibling(){if(this.parent){const e=this.parent.getChildIndex(this)-1;return e>=0?this.parent.children[e]??null:null}return null}getPreviousVisibleNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()&&e.is_open?e.getLastChild():e:this.getParent()}return null}hasChildren(){return 0!==this.children.length}initFromData(e){const t=e=>{for(const t of e){const e=this.createNode();e.initFromData(t),this.addChild(e)}};(e=>{this.setData(e),g(e)&&e.children.length&&t(e.children)})(e)}isFolder(){return this.hasChildren()||this.load_on_demand}isParentOf(e){let t=e.parent;for(;t;){if(t===this)return!0;t=t.parent}return!1}iterate(e){const t=(o,n)=>{for(const r of o.children){e(r,n)&&r.hasChildren()&&t(r,n+1)}};t(this,0)}loadFromData(e){this.removeChildren();for(const t of e){const e=this.createNode(t);this.addChild(e),g(t)&&e.loadFromData(t.children)}return this}moveNode(e,t,o){if(!e.parent||e.isParentOf(t))return!1;switch(e.parent.doRemoveChild(e),o){case"after":return!!t.parent&&(t.parent.addChildAtPosition(e,t.parent.getChildIndex(t)+1),!0);case"before":return!!t.parent&&(t.parent.addChildAtPosition(e,t.parent.getChildIndex(t)),!0);case"inside":return t.addChildAtPosition(e,0),!0}}prepend(e){const t=this.createNode(e);return this.addChildAtPosition(t,0),t.loadChildrenFromData(e),t}remove(){this.parent&&(this.parent.removeChild(this),this.parent=null)}removeChild(e){e.removeChildren(),this.doRemoveChild(e)}removeChildren(){this.iterate((e=>(this.tree?.removeNodeFromIndex(e),!0))),this.children=[]}removeNodeFromIndex(e){null!=e.id&&this.idMapping.delete(e.id)}setData(e){if(e)if("string"==typeof e)this.name=e;else if("object"==typeof e)for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){const o=e[t];"label"===t||"name"===t?"string"==typeof o&&(this.name=o):"children"!==t&&"parent"!==t&&(this[t]=o)}}createNode(e){return new(this.getNodeClass())(e)}doRemoveChild(e){this.children.splice(this.getChildIndex(e),1),this.tree?.removeNodeFromIndex(e)}getNodeClass(){return this.nodeClass??this.tree?.nodeClass??p}loadChildrenFromData(e){g(e)&&e.children.length&&this.loadFromData(e.children)}setParent(e){this.parent=e,this.tree=e.tree,this.tree?.addNodeToIndex(this)}}class f{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 v{constructor(e,t,o){switch(this.element=t,this.node=e,this.ghost=this.createGhostElement(),o){case"after":this.moveAfter();break;case"before":this.moveBefore();break;case"inside":e.isFolder()&&e.is_open?this.moveInsideOpenFolder():this.moveInside()}}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}moveAfter(){this.element.after(this.ghost)}moveBefore(){this.element.before(this.ghost)}moveInside(){this.element.after(this.ghost),this.ghost.classList.add("jqtree-inside")}moveInsideOpenFolder(){const e=this.node.children[0]?.element;e&&e.before(this.ghost)}}class S{constructor(e){let{getScrollLeft:t,node:o,tabIndex:n,treeElement:r}=e;this.getScrollLeft=t,this.tabIndex=n,this.treeElement=r,this.init(o)}addDropHint(e){return this.mustShowBorderDropHint(e)?new f(this.element,this.getScrollLeft()):new v(this.node,this.element,e)}deselect(){this.element.classList.remove("jqtree-selected");const e=this.getTitleSpan();e.removeAttribute("tabindex"),e.setAttribute("aria-selected","false"),e.blur()}init(e){this.node=e,e.element||(e.element=this.treeElement),this.element=e.element}select(e){this.element.classList.add("jqtree-selected");const t=this.getTitleSpan(),o=this.tabIndex;null!=o&&t.setAttribute("tabindex",o.toString()),t.setAttribute("aria-selected","true"),e&&t.focus()}getTitleSpan(){return this.element.querySelector(":scope > .jqtree-element > span.jqtree-title")}getUl(){return this.element.querySelector(":scope > ul")}mustShowBorderDropHint(e){return"inside"===e}}class N extends S{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}close(e,t){if(!this.node.is_open)return;this.node.is_open=!1;const o=this.getButton();o.classList.add("jqtree-closed"),o.innerHTML="";const n=this.closedIconElement;if(n){const e=n.cloneNode(!0);o.appendChild(e)}const r=()=>{this.element.classList.add("jqtree-closed");this.getTitleSpan().setAttribute("aria-expanded","false"),this.triggerEvent("tree.close",{node:this.node})};e?jQuery(this.getUl()).slideUp(t,r):(jQuery(this.getUl()).hide(),r())}open(e,t,o){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())}mustShowBorderDropHint(e){return!this.node.is_open&&"inside"===e}getButton(){return this.element.querySelector(":scope > .jqtree-element > a.jqtree-toggler")}}class E{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}getNodeIdToBeSelected(){const e=this.getStateFromStorage();return e?.selected_node?e.selected_node[0]??null:null}getState(){return{open_nodes:(()=>{const e=[];return this.getTree()?.iterate((t=>(t.is_open&&t.id&&t.hasChildren()&&e.push(t.id),!0))),e})(),selected_node:(()=>{const e=[];return this.getSelectedNodes().forEach((t=>{null!=t.id&&e.push(t.id)})),e})()}}getStateFromStorage(){const e=this.loadFromStorage();return e?this.parseState(e):null}saveState(){const e=JSON.stringify(this.getState());this.onSetStateFromStorage?this.onSetStateFromStorage(e):localStorage.setItem(this.getKeyName(),e)}setInitialState(e){let t=!1;return e.open_nodes&&(t=this.openInitialNodes(e.open_nodes)),this.resetSelection(),e.selected_node&&this.selectInitialNodes(e.selected_node),t}setInitialStateOnDemand(e,t){let o=0,n=e.open_nodes;const r=()=>{if(!n)return;const r=[];for(const e of n){const t=this.getNodeById(e);t?t.is_loading||(t.load_on_demand?s(t):this.openNode(t,!1)):r.push(e)}n=r,e.selected_node&&this.selectInitialNodes(e.selected_node)&&this.refreshElements(null),0===o&&t()},s=e=>{o+=1,this.openNode(e,!1,(()=>{o-=1,r()}))};r()}getKeyName(){return"string"==typeof this.saveStateOption?this.saveStateOption:"tree"}loadFromStorage(){return this.onGetStateFromStorage?this.onGetStateFromStorage():localStorage.getItem(this.getKeyName())}openInitialNodes(e){let t=!1;for(const o of e){const e=this.getNodeById(o);e&&(e.load_on_demand?t=!0:e.is_open=!0)}return t}parseState(e){const t=JSON.parse(e);var o;return t.selected_node&&("number"==typeof(o=t.selected_node)&&o%1==0)&&(t.selected_node=[t.selected_node]),t}resetSelection(){this.getSelectedNodes().forEach((e=>{this.removeFromSelection(e)}))}selectInitialNodes(e){let t=0;for(const o of e){const e=this.getNodeById(o);e&&(t+=1,this.addToSelection(e))}return 0!==t}}class D{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=r(this.container),o=this.container.getBoundingClientRect().width,n=t.left+o,s=t.left;return e>n-20?"right":ethis.getScrollParentBottom()?"bottom":void 0}getScrollParentBottom(){if(null==this.scrollParentBottom){const e=this.container.getBoundingClientRect().height;this.scrollParentBottom=this.getScrollParentTop()+e}return this.scrollParentBottom}getScrollParentTop(){return null==this.scrollParentTop&&(this.scrollParentTop=n(this.container)),this.scrollParentTop}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:e,top:0}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:0,top:e}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}}class y{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=n(this.treeElement);document.documentElement.scrollTop=e+t}stopScrolling(){this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0,this.documentScrollHeight=void 0,this.documentScrollWidth=void 0}canScrollDown(){const e=document.documentElement;return e.scrollTop+e.clientHeightwindow.innerWidth-20&&this.canScrollRight()?"right":t?"left":void 0}getNewVerticalScrollDirection(e){const t=jQuery(document).scrollTop()??0;if(e-t<20)return"top";return window.innerHeight-(e-t)<20&&this.canScrollDown()?"bottom":void 0}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;window.scrollBy({behavior:"instant",left:e,top:0}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;window.scrollBy({behavior:"instant",left:0,top:e}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}}const b=e=>"auto"===e||"scroll"===e,C=e=>{const t=getComputedStyle(e);return b(t.overflowX)||b(t.overflowY)},F=(e,t)=>{const o=(e=>{if(C(e))return e;let t=e.parentElement;for(;t;){if(C(t))return t;t=t.parentElement}return null})(e);return o&&"HTML"!==o.tagName?new D({container:o,refreshHitAreas:t}):new y({refreshHitAreas:t,treeElement:e})};class T{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)}getScrollLeft(){return this.getScrollParent().getScrollLeft()}scrollToY(e){this.getScrollParent().scrollToY(e)}stopScrolling(){this.getScrollParent().stopScrolling()}checkHorizontalScrolling(e){this.getScrollParent().checkHorizontalScrolling(e.pageX)}checkVerticalScrolling(e){this.getScrollParent().checkVerticalScrolling(e.pageY)}getScrollParent(){return this.scrollParent||(this.scrollParent=F(this.treeElement,this.refreshHitAreas)),this.scrollParent}}class I{constructor(e){let{getNodeById:t}=e;this.getNodeById=t,this.selectedNodes=new Set,this.clear()}addToSelection(e){null!=e.id?this.selectedNodes.add(e.id):this.selectedSingleNode=e}clear(){this.selectedNodes.clear(),this.selectedSingleNode=null}getSelectedNode(){const e=this.getSelectedNodes();return!!e.length&&(e[0]??!1)}getSelectedNodes(){if(this.selectedSingleNode)return[this.selectedSingleNode];{const e=[];return this.selectedNodes.forEach((t=>{const o=this.getNodeById(t);o&&e.push(o)})),e}}getSelectedNodesUnder(e){if(this.selectedSingleNode)return e.isParentOf(this.selectedSingleNode)?[this.selectedSingleNode]:[];{const t=[];return this.selectedNodes.forEach((o=>{const n=this.getNodeById(o);n&&e.isParentOf(n)&&t.push(n)})),t}}isNodeSelected(e){return null!=e.id?this.selectedNodes.has(e.id):!!this.selectedSingleNode&&this.selectedSingleNode.element===e.element}removeFromSelection(e){let t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];null==e.id?this.selectedSingleNode&&e.element===this.selectedSingleNode.element&&(this.selectedSingleNode=null):(this.selectedNodes.delete(e.id),t&&e.iterate((()=>(null!=e.id&&this.selectedNodes.delete(e.id),!0))))}}const L=(e,t)=>{const o=()=>`simple_widget_${t}`,n=(e,t)=>{const o=jQuery.data(e,t);return o&&o instanceof w?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(e){if(!e)return r(this,null);if("object"==typeof e){return r(this,e)}if("string"==typeof e&&"_"!==e[0]){const r=e;if("destroy"===e)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);for(var t=arguments.length,s=new Array(t>1?t-1:0),i=1;i{let r=null;for(const s of e.get()){const e=jQuery.data(s,o());if(e&&e instanceof w){const o=e[t];o&&"function"==typeof o&&(r=o.apply(e,n))}}return r})(this,r,s)}}};class w{static defaults={};constructor(e,t){this.$el=jQuery(e);const o=this.constructor.defaults;this.options={...o,...t}}static register(e,t){L(e,t)}deinit(){}destroy(){this.deinit()}init(){}}const M="Node parameter is empty",H="Parameter is empty: ";class A extends w{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:p,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}))();addNodeAfter(e,t){const o=t.addAfter(e);return o&&this.refreshElements(t.parent),o}addNodeBefore(e,t){if(!t)throw Error(H+"existingNode");const o=t.addBefore(e);return o&&this.refreshElements(t.parent),o}addParentNode(e,t){if(!t)throw Error(H+"existingNode");const o=t.addParent(e);return o&&this.refreshElements(o.parent),o}addToSelection(e,t){if(!e)throw Error(M);return this.selectNodeHandler.addToSelection(e),this.openParents(e),this.getNodeElementForNode(e).select(t??!0),this.saveState(),this.element}appendNode(e,t){const o=t??this.tree,n=o.append(e);return this.refreshElements(o),n}closeNode(e,t){if(!e)throw Error(M);const o=t??this.options.slide;return(e.isFolder()||e.isEmptyFolder)&&(this.createFolderElement(e).close(o,this.options.animationSpeed),this.saveState()),this.element}deinit(){this.element.empty(),this.element.off(),this.keyHandler.deinit(),this.mouseHandler.deinit(),this.tree=new p({},!0),super.deinit()}getNodeByCallback(e){return this.tree.getNodeByCallback(e)}getNodeByHtmlElement(e){const t=e instanceof HTMLElement?e:e[0];return t?this.getNode(t):null}getNodeById(e){return this.tree.getNodeById(e)}getNodeByName(e){return this.tree.getNodeByName(e)}getNodeByNameMustExist(e){return this.tree.getNodeByNameMustExist(e)}getNodesByProperty(e,t){return this.tree.getNodesByProperty(e,t)}getSelectedNode(){return this.selectNodeHandler.getSelectedNode()}getSelectedNodes(){return this.selectNodeHandler.getSelectedNodes()}getState(){return this.saveStateHandler.getState()}getStateFromStorage(){return this.saveStateHandler.getStateFromStorage()}getTree(){return this.tree}getVersion(){return"1.8.10"}init(){super.init(),this.element=this.$el,this.isInitialized=!1,this.options.rtl=this.getRtlOption(),null==this.options.closedIcon&&(this.options.closedIcon=this.getDefaultClosedIcon()),this.connectHandlers(),this.initData()}isDragging(){return this.dndHandler.isDragging}isNodeSelected(e){if(!e)throw Error(M);return this.selectNodeHandler.isNodeSelected(e)}loadData(e,t){return this.doLoadData(e,t),this.element}loadDataFromUrl(e,t,o){return"string"==typeof e?this.doLoadDataFromUrl(e,t,o??null):this.doLoadDataFromUrl(null,e,t),this.element}moveDown(){const e=this.getSelectedNode();return e&&this.keyHandler.moveDown(e),this.element}moveNode(e,t,o){if(!e)throw Error(M);if(!t)throw Error(H+"targetNode");if(!o)throw Error(H+"position");return this.tree.moveNode(e,t,o),this.refreshElements(null),this.element}moveUp(){const e=this.getSelectedNode();return e&&this.keyHandler.moveUp(e),this.element}openNode(e,t,o){if(!e)throw Error(M);const[n,r]=(()=>{let e,n;return"function"==typeof t?(e=t,n=null):(n=t,e=o),null==n&&(n=this.options.slide),[n,e]})();return this.openNodeInternal(e,n,r),this.element}prependNode(e,t){const o=t??this.tree,n=o.prepend(e);return this.refreshElements(o),n}refresh(){return this.refreshElements(null),this.element}refreshHitAreas(){return this.dndHandler.refresh(),this.element}reload(e){return this.doLoadDataFromUrl(null,null,e),this.element}removeFromSelection(e){if(!e)throw Error(M);return this.selectNodeHandler.removeFromSelection(e),this.getNodeElementForNode(e).deselect(),this.saveState(),this.element}removeNode(e){if(!e)throw Error(M);if(!e.parent)throw Error("Node has no parent");this.selectNodeHandler.removeFromSelection(e,!0);const t=e.parent;return e.remove(),this.refreshElements(t),this.element}scrollToNode(e){if(!e)throw Error(M);if(!e.element)return this.element;const t=n(e.element)-n(this.$el.get(0));return this.scrollHandler.scrollToY(t),this.element}selectNode(e,t){return this.doSelectNode(e,t),this.element}setOption(e,t){return this.options[e]=t,this.element}setState(e){return e&&(this.saveStateHandler.setInitialState(e),this.refreshElements(null)),this.element}toggle(e){let t=arguments.length>1&&void 0!==arguments[1]?arguments[1]:null;if(!e)throw Error(M);const o=t??this.options.slide;return e.is_open?this.closeNode(e,o):this.openNode(e,o),this.element}toJson(){return JSON.stringify(this.tree.getData())}updateNode(e,t){if(!e)throw Error(M);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}connectHandlers(){const{autoEscape:e,buttonLeft:o,closedIcon:n,dataFilter:r,dragAndDrop:s,keyboardSupport:i,onCanMove:l,onCanMoveTo:c,onCreateLi:u,onDragMove:g,onDragStop:p,onGetStateFromStorage:f,onIsMoveHandle:v,onLoadFailed:S,onLoading:N,onSetStateFromStorage:D,openedIcon:y,openFolderDelay:b,rtl:C,saveState:F,showEmptyFolder:L,slide:w,tabIndex:M}=this.options,H=this.closeNode.bind(this),A=this.getNodeElement.bind(this),_=this.getNodeElementForNode.bind(this),j=this.getNodeById.bind(this),x=this.getSelectedNode.bind(this),B=this.getTree.bind(this),P=this.isFocusOnTree.bind(this),k=this.loadData.bind(this),q=this.openNodeInternal.bind(this),O=this.refreshElements.bind(this),U=this.refreshHitAreas.bind(this),z=this.selectNode.bind(this),Q=this.element,V=this.element.get(0),Y=this.triggerEvent.bind(this),R=new I({getNodeById:j}),$=R.addToSelection.bind(R),X=R.getSelectedNodes.bind(R),G=R.isNodeSelected.bind(R),W=R.removeFromSelection.bind(R),K=new t({dataFilter:r,loadData:k,onLoadFailed:S,onLoading:N,treeElement:V,triggerEvent:Y}),J=new E({addToSelection:$,getNodeById:j,getSelectedNodes:X,getTree:B,onGetStateFromStorage:f,onSetStateFromStorage:D,openNode:q,refreshElements:O,removeFromSelection:W,saveState:F}),Z=new T({refreshHitAreas:U,treeElement:V}),ee=Z.getScrollLeft.bind(Z),te=new d({autoEscape:e,getNodeElement:A,getNodeElementForNode:_,getScrollLeft:ee,getTree:B,onCanMove:l,onCanMoveTo:c,onDragMove:g,onDragStop:p,onIsMoveHandle:v,openFolderDelay:b,openNode:q,refreshElements:O,slide:w,treeElement:V,triggerEvent:Y}),oe=new h({closeNode:H,getSelectedNode:x,isFocusOnTree:P,keyboardSupport:i,openNode:q,selectNode:z}),ne=new a({$element:Q,autoEscape:e,buttonLeft:o,closedIcon:n,dragAndDrop:s,getTree:B,isNodeSelected:G,onCreateLi:u,openedIcon:y,rtl:C,showEmptyFolder:L,tabIndex:M}),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 m({element:V,getMouseDelay:()=>this.options.startDndDelay??0,getNode:re,onClickButton:this.toggle.bind(this),onClickTitle:this.doSelectNode.bind(this),onMouseCapture:se,onMouseDrag:ie,onMouseStart:le,onMouseStop:de,triggerEvent:Y,useContextMenu:this.options.useContextMenu});this.dataLoader=K,this.dndHandler=te,this.keyHandler=oe,this.mouseHandler=ae,this.renderer=ne,this.saveStateHandler=J,this.scrollHandler=Z,this.selectNodeHandler=R}containsElement(e){const t=this.getNode(e);return null!=t&&t.tree===this.tree}createFolderElement(e){const t=this.renderer.closedIconElement,o=this.scrollHandler.getScrollLeft.bind(this.scrollHandler),n=this.renderer.openedIconElement,r=this.options.tabIndex,s=this.element.get(0),i=this.triggerEvent.bind(this);return new N({closedIconElement:t,getScrollLeft:o,node:e,openedIconElement:n,tabIndex:r,treeElement:s,triggerEvent:i})}createNodeElement(e){const t=this.scrollHandler.getScrollLeft.bind(this.scrollHandler),o=this.options.tabIndex,n=this.element.get(0);return new S({getScrollLeft:t,node:e,tabIndex:o,treeElement:n})}deselectCurrentNode(){const e=this.getSelectedNode();e&&this.removeFromSelection(e)}deselectNodes(e){const t=this.selectNodeHandler.getSelectedNodesUnder(e);for(const e of t)this.selectNodeHandler.removeFromSelection(e)}doLoadData(e,t){e&&(t?(this.deselectNodes(t),this.loadSubtree(e,t)):this.initTree(e),this.isDragging()&&this.dndHandler.refresh()),this.triggerEvent("tree.load_data",{parent_node:t,tree_data:e})}doLoadDataFromUrl(e,t,o){const n=e??this.getDataUrlInfo(t);this.dataLoader.loadFromUrl(n,t,o)}doSelectNode(e,t){const o=()=>{this.options.saveState&&this.saveStateHandler.saveState()};if(!e)return this.deselectCurrentNode(),void o();const n={mustSetFocus:!0,mustToggle:!0,...t??{}};if((()=>this.options.onCanSelectNode?this.options.selectable&&this.options.onCanSelectNode(e):this.options.selectable)()){if(this.selectNodeHandler.isNodeSelected(e))n.mustToggle&&(this.deselectCurrentNode(),this.triggerEvent("tree.select",{node:null,previous_node:e}));else{const t=this.getSelectedNode()||null;this.deselectCurrentNode(),this.addToSelection(e,n.mustSetFocus),this.triggerEvent("tree.select",{deselected_node:t,node:e}),this.openParents(e)}o()}}getAutoOpenMaxLevel(){return!0===this.options.autoOpen?-1:"number"==typeof this.options.autoOpen?this.options.autoOpen:"string"==typeof this.options.autoOpen?parseInt(this.options.autoOpen,10):0}getDataUrlInfo(e){const t=this.options.dataUrl??this.element.data("url"),o=t=>{if(e?.id){const o={node:e.id};t.data=o}else{const e=this.getNodeIdToBeSelected();if(e){const o={selected_node:e};t.data=o}}};return"function"==typeof t?t(e):"string"==typeof t?(e=>{const t={url:e};return o(t),t})(t):t&&"object"==typeof t?(o(t),t):null}getDefaultClosedIcon(){return this.options.rtl?"◀":"►"}getNode(e){const t=e.closest("li.jqtree_common");return t?jQuery(t).data("node"):null}getNodeElement(e){const t=this.getNode(e);return t?this.getNodeElementForNode(t):null}getNodeElementForNode(e){return e.isFolder()?this.createFolderElement(e):this.createNodeElement(e)}getNodeIdToBeSelected(){return this.options.saveState?this.saveStateHandler.getNodeIdToBeSelected():null}getRtlOption(){if(null!=this.options.rtl)return this.options.rtl;{const e=this.element.data("rtl");return null!==e&&!1!==e&&void 0!==e}}initData(){if(this.options.data)this.doLoadData(this.options.data,null);else{this.getDataUrlInfo(null)?this.doLoadDataFromUrl(null,null,null):this.doLoadData([],null)}}initTree(e){const t=()=>{this.isInitialized||(this.isInitialized=!0,this.triggerEvent("tree.init"))};this.tree=new this.options.nodeClass(null,!0,this.options.nodeClass),this.selectNodeHandler.clear(),this.tree.loadFromData(e);const o=this.setInitialState();this.refreshElements(null),o?this.setInitialStateOnDemand(t):t()}isFocusOnTree(){const e=document.activeElement;return Boolean(e&&"SPAN"===e.tagName&&this.containsElement(e))}isSelectedNodeInSubtree(e){const t=this.getSelectedNode();return!!t&&(e===t||e.isParentOf(t))}loadFolderOnDemand(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2?arguments[2]:void 0;e.is_loading=!0,this.doLoadDataFromUrl(null,e,(()=>{this.openNodeInternal(e,t,o)}))}loadSubtree(e,t){t.loadFromData(e),t.load_on_demand=!1,t.is_loading=!1,this.refreshElements(t)}mouseCapture(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseCapture(e)}mouseDrag(e){if(this.options.dragAndDrop){const t=this.dndHandler.mouseDrag(e);return this.scrollHandler.checkScrolling(e),t}return!1}mouseStart(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseStart(e)}mouseStop(e){return!!this.options.dragAndDrop&&(this.scrollHandler.stopScrolling(),this.dndHandler.mouseStop(e))}openNodeInternal(e){let t=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],o=arguments.length>2?arguments[2]:void 0;const n=(t,o,n)=>{if(!e.children.length)return;this.createFolderElement(t).open(n,o,this.options.animationSpeed)};if(e.isFolder()||e.isEmptyFolder)if(e.load_on_demand)this.loadFolderOnDemand(e,t,o);else{let r=e.parent;for(;r;)r.parent&&n(r,!1),r=r.parent;n(e,t,o),this.saveState()}}openParents(e){const t=e.parent;t?.parent&&!t.is_open&&this.openNode(t,!1)}refreshElements(e){const t=this.isFocusOnTree(),o=!!e&&this.isSelectedNodeInSubtree(e);this.renderer.render(e),o&&this.selectCurrentNode(t),this.triggerEvent("tree.refresh")}saveState(){this.options.saveState&&this.saveStateHandler.saveState()}selectCurrentNode(e){const t=this.getSelectedNode();if(t){this.getNodeElementForNode(t).select(e)}}setInitialState(){const e=()=>{if(!1===this.options.autoOpen)return!1;const e=this.getAutoOpenMaxLevel();let t=!1;return this.tree.iterate(((o,n)=>o.load_on_demand?(t=!0,!1):!!o.hasChildren()&&(o.is_open=!0,n!==e))),t};let[t,o]=(()=>{if(this.options.saveState){const e=this.saveStateHandler.getStateFromStorage();if(e){return[!0,this.saveStateHandler.setInitialState(e)]}return[!1,!1]}return[!1,!1]})();return t||(o=e()),o}setInitialStateOnDemand(e){const t=()=>{const t=this.getAutoOpenMaxLevel();let o=0;const n=e=>{o+=1,this.openNodeInternal(e,!1,(()=>{o-=1,r()}))},r=()=>{this.tree.iterate(((e,o)=>e.load_on_demand?(e.is_loading||n(e),!1):(this.openNodeInternal(e,!1),o!==t))),0===o&&e()};r()};(()=>{if(this.options.saveState){const t=this.saveStateHandler.getStateFromStorage();return!!t&&(this.saveStateHandler.setInitialStateOnDemand(t,e),!0)}return!1})()||t()}triggerEvent(e,t){const o=jQuery.Event(e,t);return this.element.trigger(o),o}}return w.register(A,"tree"),e.JqTreeWidget=A,e}({}); +var jqtree=function(e){"use strict";class t{constructor({dataFilter:e,loadData:t,onLoadFailed:o,onLoading:n,treeElement:s,triggerEvent:r}){this.dataFilter=e,this.loadData=t,this.onLoadFailed=o,this.onLoading=n,this.treeElement=s,this.triggerEvent=r}loadFromUrl(e,t,o){if(!e)return;const n=this.getDomElement(t);this.addLoadingClass(n),this.notifyLoading(!0,t,n);const s=()=>{this.removeLoadingClass(n),this.notifyLoading(!1,t,n)};this.submitRequest(e,(e=>{s(),this.loadData(this.parseData(e),t),o&&"function"==typeof o&&o()}),(e=>{s(),this.onLoadFailed&&this.onLoadFailed(e)}))}addLoadingClass(e){e.classList.add("jqtree-loading")}getDomElement(e){return e?.element?e.element:this.treeElement}notifyLoading(e,t,o){const n=jQuery(o);this.onLoading&&this.onLoading(e,t,n),this.triggerEvent("tree.loading_data",{$el:n,isLoading:e,node:t})}parseData(e){const t="string"==typeof e?JSON.parse(e):e;return this.dataFilter?this.dataFilter(t):t}removeLoadingClass(e){e.classList.remove("jqtree-loading")}submitRequest(e,t,o){const n={cache:!1,dataType:"json",error:o,method:"GET",success:t,..."string"==typeof e?{url:e}:e};n.method=n.method?.toUpperCase()??"GET",jQuery.ajax(n)}}const o=e=>e?"true":"false",n=e=>s(e).top,s=e=>{const t=e.getBoundingClientRect();return{left:t.x+window.scrollX,top:t.y+window.scrollY}};class r{constructor({autoEscape:e,nodeName:t,offsetX:o,offsetY:n,treeElement:s}){this.offsetX=o,this.offsetY=n,this.element=this.createElement(t,e),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 i=(e,t,o,n)=>{const s=Math.min(t.length,4),r=Math.round((n-o)/s);let i=o;for(let o=0;o((e,t)=>{if(!e.length)return[];let o=e[0].top,n=[];const s=[];for(const t of e)t.top!==o&&n.length&&(i(s,n,o,t.top),o=t.top,n=[]),n.push(t);return i(s,n,o,t),s})(((e,t)=>{const o=[];let s=0;const r=(e,t,n)=>{o.push({node:e,position:t,top:n}),s=n};return((e,{handleAfterOpenFolder:t,handleClosedFolder:o,handleFirstNode:n,handleNode:s,handleOpenFolder:r})=>{let i=!0;const l=(e,d)=>{let a=(e.is_open||!e.element)&&e.hasChildren(),h=null;if(e.element?.offsetParent&&(h=e.element,i&&(n(e),i=!1),e.hasChildren()?e.is_open?r(e,e.element)||(a=!1):o(e,d,h):s(e,d,e.element)),a){const o=e.children.length;e.children.forEach(((t,n)=>{const s=e.children[n];if(s)if(n===o-1)l(s,null);else{const t=e.children[n+1];t&&l(s,t)}})),e.is_open&&h&&t(e,d)}};l(e,null)})(e,{handleAfterOpenFolder:(e,o)=>{r(e,e===t||o===t?null:"after",s)},handleClosedFolder:(e,o,s)=>{const i=n(s);e===t?r(e,null,i):(r(e,"inside",i),o!==t&&r(e,"after",i))},handleFirstNode:e=>{e!==t&&e.element&&r(e,"before",n(e.element))},handleNode:(e,o,s)=>{const i=n(s);r(e,e===t?null:"inside",i),r(e,o===t||e===t?null:"after",i)},handleOpenFolder:(e,o)=>{if(e===t){const t=n(o),s=o.clientHeight;return r(e,null,t),s>5&&r(e,null,t+s-5),!1}return e.children[0]!==t&&r(e,"inside",n(o)),!0}}),o})(e,t),o);class d{constructor({autoEscape:e,getNodeElement:t,getNodeElementForNode:o,getScrollLeft:n,getTree:s,onCanMove:r,onCanMoveTo:i,onDragMove:l,onDragStop:d,onIsMoveHandle:a,openFolderDelay:h,openNode:c,refreshElements:u,slide:m,treeElement:g,triggerEvent:p}){this.autoEscape=e,this.getNodeElement=t,this.getNodeElementForNode=o,this.getScrollLeft=n,this.getTree=s,this.onCanMove=r,this.onCanMoveTo=i,this.onDragMove=l,this.onDragStop=d,this.onIsMoveHandle=a,this.openFolderDelay=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}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,this.currentItem)?(t.node.isFolder()||this.stopOpenFolderTimer(),this.hoveredArea!==t&&(this.hoveredArea=t,this.mustOpenFolderTimer(t)?this.startOpenFolderTimer(t.node):this.stopOpenFolderTimer(),this.updateDropHint())):(this.removeDropHint(),this.stopOpenFolderTimer(),this.hoveredArea=t),t||this.onDragMove&&this.onDragMove(this.currentItem.node,e.originalEvent),!0}mouseStart(e){if(!this.currentItem)return!1;this.refresh();const{left:t,top:o}=s(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}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(){if(this.removeHitAreas(),this.currentItem){const e=this.currentItem.node;this.generateHitAreas(e),this.currentItem=this.getNodeElementForNode(e),this.isDragging&&this.currentItem.element.classList.add("jqtree-moving")}}canMoveToArea(e,t){return!this.onCanMoveTo||this.onCanMoveTo(t.node,e.node,e.position)}clear(){this.dragElement&&(this.dragElement.remove(),this.dragElement=null)}findHoveredArea(e,t){const o=this.getTreeDimensions();return eo.right||t>o.bottom?null:function(e,t){let o=0,n=e.length;for(;o>1,r=e[s];if(void 0===r)return null;const i=t(r);if(i>0)n=s;else{if(!(i<0))return r;o=s+1}}return null}(this.hitAreas,(e=>te.bottom?-1:0))}generateHitAreas(e){const t=this.getTree();this.hitAreas=t?l(t,e,this.getTreeDimensions().bottom):[]}getTreeDimensions(){const e=s(this.treeElement),t=e.left+this.getScrollLeft(),o=e.top;return{bottom:o+this.treeElement.clientHeight+16,left:t,right:t+this.treeElement.clientWidth,top:o}}moveItem(e){if(this.currentItem&&this.hoveredArea?.position&&this.canMoveToArea(this.hoveredArea,this.currentItem)){const t=this.currentItem.node,o=this.hoveredArea.node,n=this.hoveredArea.position,s=t.parent;"inside"===n&&(this.hoveredArea.node.is_open=!0);const r=()=>{const e=this.getTree();e&&(e.moveNode(t,o,n),this.treeElement.textContent="",this.refreshElements(null))};this.triggerEvent("tree.move",{move_info:{do_move:r,moved_node:t,original_event:e.originalEvent,position:n,previous_parent:s,target_node:o}}).isDefaultPrevented()||r()}}mustCaptureElement(e){const t=e.nodeName;return"INPUT"!==t&&"SELECT"!==t&&"TEXTAREA"!==t}mustOpenFolderTimer(e){const t=e.node;return t.isFolder()&&!t.is_open&&"inside"===e.position}removeDropHint(){this.previousGhost&&this.previousGhost.remove()}removeHitAreas(){this.hitAreas=[]}removeHover(){this.hoveredArea=null}startOpenFolderTimer(e){const t=()=>{this.openNode(e,this.slide,(()=>{this.refresh(),this.updateDropHint()}))};this.stopOpenFolderTimer();const o=this.openFolderDelay;!1!==o&&(this.openFolderTimer=window.setTimeout(t,o))}stopOpenFolderTimer(){this.openFolderTimer&&(clearTimeout(this.openFolderTimer),this.openFolderTimer=null)}updateDropHint(){if(!this.hoveredArea)return;this.removeDropHint();const e=this.getNodeElementForNode(this.hoveredArea.node);this.previousGhost=e.addDropHint(this.hoveredArea.position)}}class a{constructor({$element:e,autoEscape:t,buttonLeft:o,closedIcon:n,dragAndDrop:s,getTree:r,isNodeSelected:i,onCreateLi:l,openedIcon:d,rtl:a,showEmptyFolder:h,tabIndex:c}){this.autoEscape=t,this.buttonLeft=o,this.dragAndDrop=s,this.$element=e,this.getTree=r,this.isNodeSelected=i,this.onCreateLi=l,this.rtl=a,this.showEmptyFolder=h,this.tabIndex=c,this.openedIconElement=this.createButtonElement(d??"+"),this.closedIconElement=this.createButtonElement(n??"-")}render(e){e?.parent?this.renderFromNode(e):this.renderFromRoot()}renderFromNode(e){if(!e.element)return;const t=jQuery(e.element),o=this.createLi(e,e.getLevel());t.after(o),t.remove(),this.createDomElements(o,e.children,!1,e.getLevel()+1)}renderFromRoot(){this.$element.empty();const e=this.getTree();this.$element[0]&&e&&this.createDomElements(this.$element[0],e.children,!0,1)}attachNodeData(e,t){e.element=t,jQuery(t).data("node",e)}createButtonElement(e){if("string"==typeof e){const t=document.createElement("div");return t.innerHTML=e,document.createTextNode(t.innerHTML)}return e.nodeType?e:jQuery(e)[0]}createDomElements(e,t,o,n){const s=this.createUl(o);e.appendChild(s);for(const e of t){const t=this.createLi(e,n);s.appendChild(t),e.hasChildren()&&this.createDomElements(t,e.children,!1,n+1)}}createFolderLi(e,t,n){const s=this.getButtonClasses(e),r=this.getFolderClasses(e,n),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=s,i&&a.appendChild(i.cloneNode(!0)),this.buttonLeft&&d.appendChild(a);const h=this.createTitleSpan(e.name,n,!0,t);return h.setAttribute("aria-expanded",o(e.is_open)),d.appendChild(h),this.buttonLeft||d.appendChild(a),l}createLi(e,t){const o=Boolean(this.isNodeSelected(e)),n=e.isFolder()||e.isEmptyFolder&&this.showEmptyFolder?this.createFolderLi(e,t,o):this.createNodeLi(e,t,o);return this.attachNodeData(e,n),this.onCreateLi&&this.onCreateLi(e,jQuery(n),o),n}createNodeLi(e,t,o){const n=["jqtree_common"];o&&n.push("jqtree-selected");const s=n.join(" "),r=document.createElement("li");r.className=s,r.setAttribute("role","none");const i=document.createElement("div");i.className="jqtree-element jqtree_common",i.setAttribute("role","none"),r.appendChild(i);const l=this.createTitleSpan(e.name,o,!1,t);return i.appendChild(l),r}createTitleSpan(e,t,o,n){const s=document.createElement("span");let r="jqtree-title jqtree_common";if(o&&(r+=" jqtree-title-folder"),r+=" jqtree-title-button-"+(this.buttonLeft?"left":"right"),s.className=r,t){const e=this.tabIndex;void 0!==e&&s.setAttribute("tabindex",`${e}`)}return this.setTreeItemAriaAttributes(s,e,n,t),this.autoEscape?s.textContent=e:s.innerHTML=e,s}createUl(e){let t,o;e?(t="jqtree-tree",o="tree",this.rtl&&(t+=" jqtree-rtl")):(t="",o="group"),this.dragAndDrop&&(t+=" jqtree-dnd");const n=document.createElement("ul");return n.className=`jqtree_common ${t}`,n.setAttribute("role",o),n}getButtonClasses(e){const t=["jqtree-toggler","jqtree_common"];return e.is_open||t.push("jqtree-closed"),this.buttonLeft?t.push("jqtree-toggler-left"):t.push("jqtree-toggler-right"),t.join(" ")}getFolderClasses(e,t){const o=["jqtree-folder"];return e.is_open||o.push("jqtree-closed"),t&&o.push("jqtree-selected"),e.is_loading&&o.push("jqtree-loading"),o.join(" ")}setTreeItemAriaAttributes(e,t,n,s){e.setAttribute("aria-label",t),e.setAttribute("aria-level",`${n}`),e.setAttribute("aria-selected",o(s)),e.setAttribute("role","treeitem")}}class h{constructor({closeNode:e,getSelectedNode:t,isFocusOnTree:o,keyboardSupport:n,openNode:s,selectNode:r}){this.closeNode=e,this.getSelectedNode=t,this.isFocusOnTree=o,this.keyboardSupport=n,this.openNode=s,this.originalSelectNode=r,n&&document.addEventListener("keydown",this.handleKeyDown)}deinit(){this.keyboardSupport&&document.removeEventListener("keydown",this.handleKeyDown)}moveDown(e){return this.selectNode(e.getNextVisibleNode())}moveUp(e){return this.selectNode(e.getPreviousVisibleNode())}canHandleKeyboard(){return this.keyboardSupport&&this.isFocusOnTree()}handleKeyDown=e=>{if(!this.canHandleKeyboard())return;let t=!1;const o=this.getSelectedNode();if(o)switch(e.key){case"ArrowDown":t=this.moveDown(o);break;case"ArrowLeft":t=this.moveLeft(o);break;case"ArrowRight":t=this.moveRight(o);break;case"ArrowUp":t=this.moveUp(o)}t&&e.preventDefault()};moveLeft(e){return e.isFolder()&&e.is_open?(this.closeNode(e),!0):this.selectNode(e.getParent())}moveRight(e){return!!e.isFolder()&&(e.is_open?this.selectNode(e.getNextVisibleNode()):(this.openNode(e),!0))}selectNode(e){return!!e&&(this.originalSelectNode(e),!0)}}const c=e=>({originalEvent:e,pageX:e.pageX,pageY:e.pageY,target:e.target}),u=(e,t)=>({originalEvent:t,pageX:e.pageX,pageY:e.pageY,target:e.target});class m{constructor({element:e,getMouseDelay:t,getNode:o,onClickButton:n,onClickTitle:s,onMouseCapture:r,onMouseDrag:i,onMouseStart:l,onMouseStop:d,triggerEvent:a,useContextMenu:h}){this.element=e,this.getMouseDelay=t,this.getNode=o,this.onClickButton=n,this.onClickTitle=s,this.onMouseCapture=r,this.onMouseDrag=i,this.onMouseStart=l,this.onMouseStop=d,this.triggerEvent=a,this.useContextMenu=h,e.addEventListener("click",this.handleClick),e.addEventListener("dblclick",this.handleDblclick),e.addEventListener("mousedown",this.mouseDown,{passive:!1}),e.addEventListener("touchstart",this.touchStart,{passive:!1}),h&&e.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()}getClickTarget(e){const t=e.closest(".jqtree-toggler");if(t){const e=this.getNode(t);if(e)return{node:e,type:"button"}}else{const t=e.closest(".jqtree-element");if(t){const e=this.getNode(t);if(e)return{node:e,type:"label"}}}return null}handleClick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);if(t)switch(t.type){case"button":this.onClickButton(t.node),e.preventDefault(),e.stopPropagation();break;case"label":this.triggerEvent("tree.click",{click_event:e,node:t.node}).isDefaultPrevented()||this.onClickTitle(t.node);break}};handleContextmenu=e=>{if(!e.target)return;const t=e.target.closest("ul.jqtree-tree .jqtree-element");if(t){const o=this.getNode(t);if(o)return e.preventDefault(),e.stopPropagation(),this.triggerEvent("tree.contextmenu",{click_event:e,node:o}),!1}return null};handleDblclick=e=>{if(!e.target)return;const t=this.getClickTarget(e.target);"label"===t?.type&&this.triggerEvent("tree.dblclick",{click_event:e,node:t.node})};handleMouseDown(e){return this.isMouseStarted&&this.handleMouseUp(e),this.mouseDownInfo=e,!!this.onMouseCapture(e)&&(this.handleStartMouse(),!0)}handleMouseMove(e,t){if(this.isMouseStarted)return this.onMouseDrag(t),void(e.cancelable&&e.preventDefault());this.isMouseDelayMet&&(this.mouseDownInfo&&(this.isMouseStarted=this.onMouseStart(this.mouseDownInfo)),this.isMouseStarted?(this.onMouseDrag(t),e.cancelable&&e.preventDefault()):this.handleMouseUp(t))}handleMouseUp(e){this.removeMouseMoveEventListeners(),this.isMouseDelayMet=!1,this.mouseDownInfo=null,this.isMouseStarted&&(this.isMouseStarted=!1,this.onMouseStop(e))}handleStartMouse(){document.addEventListener("mousemove",this.mouseMove,{passive:!1}),document.addEventListener("touchmove",this.touchMove,{passive:!1}),document.addEventListener("mouseup",this.mouseUp,{passive:!1}),document.addEventListener("touchend",this.touchEnd,{passive:!1});const e=this.getMouseDelay();e?this.startMouseDelayTimer(e):this.isMouseDelayMet=!0}mouseDown=e=>{if(0!==e.button)return;this.handleMouseDown(c(e))&&e.cancelable&&e.preventDefault()};mouseMove=e=>{this.handleMouseMove(e,c(e))};mouseUp=e=>{this.handleMouseUp(c(e))};removeMouseMoveEventListeners(){document.removeEventListener("mousemove",this.mouseMove),document.removeEventListener("touchmove",this.touchMove),document.removeEventListener("mouseup",this.mouseUp),document.removeEventListener("touchend",this.touchEnd)}startMouseDelayTimer(e){this.mouseDelayTimer&&clearTimeout(this.mouseDelayTimer),this.mouseDelayTimer=window.setTimeout((()=>{this.mouseDownInfo&&(this.isMouseDelayMet=!0)}),e),this.isMouseDelayMet=!1}touchEnd=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseUp(u(t,e))};touchMove=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseMove(e,u(t,e))};touchStart=e=>{if(e.touches.length>1)return;const t=e.touches[0];t&&this.handleMouseDown(u(t,e))}}const g=e=>"object"==typeof e&&"children"in e&&e.children instanceof Array;class p{constructor(e=null,t=!1,o=p){this.name="",this.load_on_demand=!1,this.isEmptyFolder=null!=e&&g(e)&&0===e.children.length,this.setData(e),this.children=[],this.parent=null,t&&(this.idMapping=new Map,this.tree=this,this.nodeClass=o)}addAfter(e){if(this.parent){const t=this.createNode(e),o=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(t,o+1),t.loadChildrenFromData(e),t}return null}addBefore(e){if(this.parent){const t=this.createNode(e),o=this.parent.getChildIndex(this);return this.parent.addChildAtPosition(t,o),t.loadChildrenFromData(e),t}return null}addChild(e){this.children.push(e),e.setParent(this)}addChildAtPosition(e,t){this.children.splice(t,0,e),e.setParent(this)}addNodeToIndex(e){null!=e.id&&this.idMapping.set(e.id,e)}addParent(e){if(this.parent){const t=this.createNode(e);this.tree&&t.setParent(this.tree);const o=this.parent;for(const e of o.children)t.addChild(e);return o.children=[],o.addChild(t),t}return null}append(e){const t=this.createNode(e);return this.addChild(t),t.loadChildrenFromData(e),t}filter(e){const t=[];return this.iterate((o=>(e(o)&&t.push(o),!0))),t}getChildIndex(e){return this.children.indexOf(e)}getData(e=!1){const t=e=>e.map((e=>{const o={};for(const t in e)if(-1===["parent","children","element","idMapping","load_on_demand","nodeClass","tree","isEmptyFolder"].indexOf(t)&&Object.prototype.hasOwnProperty.call(e,t)){const n=e[t];o[t]=n}return e.hasChildren()&&(o.children=t(e.children)),o}));return t(e?[this]:this.children)}getLastChild(){if(this.hasChildren()){const e=this.children[this.children.length-1];return e?e.hasChildren()&&e.is_open?e.getLastChild():e:null}return null}getLevel(){let e=0,t=this;for(;t.parent;)e+=1,t=t.parent;return e}getNextNode(e=!0){if(e&&this.hasChildren())return this.children[0]??null;if(this.parent){const e=this.getNextSibling();return e||this.parent.getNextNode(!1)}return null}getNextSibling(){if(this.parent){const e=this.parent.getChildIndex(this)+1;return e!t&&(!e(o)||(t=o,!1)))),t}getNodeById(e){return this.idMapping.get(e)??null}getNodeByName(e){return this.getNodeByCallback((t=>t.name===e))}getNodeByNameMustExist(e){const t=this.getNodeByCallback((t=>t.name===e));if(!t)throw new Error(`Node with name ${e} not found`);return t}getNodesByProperty(e,t){return this.filter((o=>o[e]===t))}getParent(){return this.parent&&this.parent.parent?this.parent:null}getPreviousNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()?e.getLastChild():e:this.getParent()}return null}getPreviousSibling(){if(this.parent){const e=this.parent.getChildIndex(this)-1;return e>=0?this.parent.children[e]??null:null}return null}getPreviousVisibleNode(){if(this.parent){const e=this.getPreviousSibling();return e?e.hasChildren()&&e.is_open?e.getLastChild():e:this.getParent()}return null}hasChildren(){return 0!==this.children.length}initFromData(e){const t=e=>{for(const t of e){const e=this.createNode();e.initFromData(t),this.addChild(e)}};(e=>{this.setData(e),g(e)&&e.children.length&&t(e.children)})(e)}isFolder(){return this.hasChildren()||this.load_on_demand}isParentOf(e){let t=e.parent;for(;t;){if(t===this)return!0;t=t.parent}return!1}iterate(e){const t=(o,n)=>{for(const s of o.children){e(s,n)&&s.hasChildren()&&t(s,n+1)}};t(this,0)}loadFromData(e){this.removeChildren();for(const t of e){const e=this.createNode(t);this.addChild(e),g(t)&&e.loadFromData(t.children)}return this}moveNode(e,t,o){if(!e.parent||e.isParentOf(t))return!1;switch(e.parent.doRemoveChild(e),o){case"after":return!!t.parent&&(t.parent.addChildAtPosition(e,t.parent.getChildIndex(t)+1),!0);case"before":return!!t.parent&&(t.parent.addChildAtPosition(e,t.parent.getChildIndex(t)),!0);case"inside":return t.addChildAtPosition(e,0),!0}}prepend(e){const t=this.createNode(e);return this.addChildAtPosition(t,0),t.loadChildrenFromData(e),t}remove(){this.parent&&(this.parent.removeChild(this),this.parent=null)}removeChild(e){e.removeChildren(),this.doRemoveChild(e)}removeChildren(){this.iterate((e=>(this.tree?.removeNodeFromIndex(e),!0))),this.children=[]}removeNodeFromIndex(e){null!=e.id&&this.idMapping.delete(e.id)}setData(e){if(e)if("string"==typeof e)this.name=e;else if("object"==typeof e)for(const t in e)if(Object.prototype.hasOwnProperty.call(e,t)){const o=e[t];"label"===t||"name"===t?"string"==typeof o&&(this.name=o):"children"!==t&&"parent"!==t&&(this[t]=o)}}createNode(e){return new(this.getNodeClass())(e)}doRemoveChild(e){this.children.splice(this.getChildIndex(e),1),this.tree?.removeNodeFromIndex(e)}getNodeClass(){return this.nodeClass??this.tree?.nodeClass??p}loadChildrenFromData(e){g(e)&&e.children.length&&this.loadFromData(e.children)}setParent(e){this.parent=e,this.tree=e.tree,this.tree?.addNodeToIndex(this)}}class f{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),s=Math.max(e.clientHeight-4,0),r=document.createElement("span");r.className="jqtree-border",r.style.width=`${n}px`,r.style.height=`${s}px`,this.hint=r,o.append(this.hint)}remove(){this.hint?.remove()}}class S{constructor(e,t,o){switch(this.element=t,this.node=e,this.ghost=this.createGhostElement(),o){case"after":this.moveAfter();break;case"before":this.moveBefore();break;case"inside":e.isFolder()&&e.is_open?this.moveInsideOpenFolder():this.moveInside()}}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}moveAfter(){this.element.after(this.ghost)}moveBefore(){this.element.before(this.ghost)}moveInside(){this.element.after(this.ghost),this.ghost.classList.add("jqtree-inside")}moveInsideOpenFolder(){const e=this.node.children[0]?.element;e&&e.before(this.ghost)}}class v{constructor({getScrollLeft:e,node:t,tabIndex:o,treeElement:n}){this.getScrollLeft=e,this.tabIndex=o,this.treeElement=n,this.init(t)}addDropHint(e){return this.mustShowBorderDropHint(e)?new f(this.element,this.getScrollLeft()):new S(this.node,this.element,e)}deselect(){this.element.classList.remove("jqtree-selected");const e=this.getTitleSpan();e.removeAttribute("tabindex"),e.setAttribute("aria-selected","false"),e.blur()}init(e){this.node=e,e.element??=this.treeElement,this.element=e.element}select(e){this.element.classList.add("jqtree-selected");const t=this.getTitleSpan(),o=this.tabIndex;null!=o&&t.setAttribute("tabindex",o.toString()),t.setAttribute("aria-selected","true"),e&&t.focus()}getTitleSpan(){return this.element.querySelector(":scope > .jqtree-element > span.jqtree-title")}getUl(){return this.element.querySelector(":scope > ul")}mustShowBorderDropHint(e){return"inside"===e}}class N extends v{constructor({closedIconElement:e,getScrollLeft:t,node:o,openedIconElement:n,tabIndex:s,treeElement:r,triggerEvent:i}){super({getScrollLeft:t,node:o,tabIndex:s,treeElement:r}),this.closedIconElement=e,this.openedIconElement=n,this.triggerEvent=i}close(e,t){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 s=()=>{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,s):(jQuery(this.getUl()).hide(),s())}open(e,t,o){if(this.node.is_open)return;this.node.is_open=!0;const n=this.getButton();n.classList.remove("jqtree-closed"),n.innerHTML="";const s=this.openedIconElement;if(s){const e=s.cloneNode(!0);n.appendChild(e)}const r=()=>{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,r):(jQuery(this.getUl()).show(),r())}mustShowBorderDropHint(e){return!this.node.is_open&&"inside"===e}getButton(){return this.element.querySelector(":scope > .jqtree-element > a.jqtree-toggler")}}class E{constructor({addToSelection:e,getNodeById:t,getSelectedNodes:o,getTree:n,onGetStateFromStorage:s,onSetStateFromStorage:r,openNode:i,refreshElements:l,removeFromSelection:d,saveState:a}){this.addToSelection=e,this.getNodeById=t,this.getSelectedNodes=o,this.getTree=n,this.onGetStateFromStorage=s,this.onSetStateFromStorage=r,this.openNode=i,this.refreshElements=l,this.removeFromSelection=d,this.saveStateOption=a}getNodeIdToBeSelected(){const e=this.getStateFromStorage();return e?.selected_node?e.selected_node[0]??null:null}getState(){return{open_nodes:(()=>{const e=[];return this.getTree()?.iterate((t=>(t.is_open&&t.id&&t.hasChildren()&&e.push(t.id),!0))),e})(),selected_node:(()=>{const e=[];return this.getSelectedNodes().forEach((t=>{null!=t.id&&e.push(t.id)})),e})()}}getStateFromStorage(){const e=this.loadFromStorage();return e?this.parseState(e):null}saveState(){const e=JSON.stringify(this.getState());this.onSetStateFromStorage?this.onSetStateFromStorage(e):localStorage.setItem(this.getKeyName(),e)}setInitialState(e){let t=!1;return e.open_nodes&&(t=this.openInitialNodes(e.open_nodes)),this.resetSelection(),e.selected_node&&this.selectInitialNodes(e.selected_node),t}setInitialStateOnDemand(e,t){let o=0,n=e.open_nodes;const s=()=>{if(!n)return;const s=[];for(const e of n){const t=this.getNodeById(e);t?t.is_loading||(t.load_on_demand?r(t):this.openNode(t,!1)):s.push(e)}n=s,e.selected_node&&this.selectInitialNodes(e.selected_node)&&this.refreshElements(null),0===o&&t()},r=e=>{o+=1,this.openNode(e,!1,(()=>{o-=1,s()}))};s()}getKeyName(){return"string"==typeof this.saveStateOption?this.saveStateOption:"tree"}loadFromStorage(){return this.onGetStateFromStorage?this.onGetStateFromStorage():localStorage.getItem(this.getKeyName())}openInitialNodes(e){let t=!1;for(const o of e){const e=this.getNodeById(o);e&&(e.load_on_demand?t=!0:e.is_open=!0)}return t}parseState(e){const t=JSON.parse(e);var o;return t.selected_node&&("number"==typeof(o=t.selected_node)&&o%1==0)&&(t.selected_node=[t.selected_node]),t}resetSelection(){this.getSelectedNodes().forEach((e=>{this.removeFromSelection(e)}))}selectInitialNodes(e){let t=0;for(const o of e){const e=this.getNodeById(o);e&&(t+=1,this.addToSelection(e))}return 0!==t}}class D{constructor({container:e,refreshHitAreas:t}){this.container=e,this.refreshHitAreas=t}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 this.container.scrollLeft}scrollToY(e){this.container.scrollTop=e}stopScrolling(){this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0}scrollHorizontally(){if(!this.horizontalScrollDirection)return;const e="left"===this.horizontalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:e,top:0}),this.refreshHitAreas(),setTimeout(this.scrollHorizontally.bind(this),40)}scrollVertically(){if(!this.verticalScrollDirection)return;const e="top"===this.verticalScrollDirection?-20:20;this.container.scrollBy({behavior:"instant",left:0,top:e}),this.refreshHitAreas(),setTimeout(this.scrollVertically.bind(this),40)}}class y extends D{stopScrolling(){super.stopScrolling(),this.horizontalScrollDirection=void 0,this.verticalScrollDirection=void 0}getNewHorizontalScrollDirection(e){const t=s(this.container),o=this.container.getBoundingClientRect().width,n=t.left+o,r=t.left;return e>n-20?"right":ethis.getScrollParentBottom()?"bottom":void 0}getScrollParentBottom(){if(null==this.scrollParentBottom){const e=this.container.getBoundingClientRect().height;this.scrollParentBottom=this.getScrollParentTop()+e}return this.scrollParentBottom}getScrollParentTop(){return this.scrollParentTop??=n(this.container),this.scrollParentTop}}class b extends D{constructor({refreshHitAreas:e,treeElement:t}){super({container:document.documentElement,refreshHitAreas:e}),this.treeElement=t}scrollToY(e){const t=n(this.treeElement);super.scrollToY(e+t)}stopScrolling(){super.stopScrolling(),this.documentScrollHeight=void 0,this.documentScrollWidth=void 0}getNewHorizontalScrollDirection(e){const t=e-this.container.scrollLeft<20;return e>window.innerWidth-20&&this.canScrollRight()?"right":t?"left":void 0}getNewVerticalScrollDirection(e){const t=this.container.scrollTop;if(e-t<20)return"top";return window.innerHeight-(e-t)<20&&this.canScrollDown()?"bottom":void 0}canScrollDown(){return this.container.scrollTop+this.container.clientHeight"auto"===e||"scroll"===e,F=e=>{const t=getComputedStyle(e);return C(t.overflowX)||C(t.overflowY)},I=(e,t)=>{const o=(e=>{if(F(e))return e;let t=e.parentElement;for(;t;){if(F(t))return t;t=t.parentElement}return null})(e);return o&&"HTML"!==o.tagName?new y({container:o,refreshHitAreas:t}):new b({refreshHitAreas:t,treeElement:e})};class T{constructor({refreshHitAreas:e,treeElement:t}){this.refreshHitAreas=e,this.scrollParent=void 0,this.treeElement=t}checkScrolling(e){this.checkVerticalScrolling(e),this.checkHorizontalScrolling(e)}getScrollLeft(){return this.getScrollParent().getScrollLeft()}scrollToY(e){this.getScrollParent().scrollToY(e)}stopScrolling(){this.getScrollParent().stopScrolling()}checkHorizontalScrolling(e){this.getScrollParent().checkHorizontalScrolling(e.pageX)}checkVerticalScrolling(e){this.getScrollParent().checkVerticalScrolling(e.pageY)}getScrollParent(){return this.scrollParent??=I(this.treeElement,this.refreshHitAreas),this.scrollParent}}class L{constructor({getNodeById:e}){this.getNodeById=e,this.selectedNodes=new Set,this.clear()}addToSelection(e){null!=e.id?this.selectedNodes.add(e.id):this.selectedSingleNode=e}clear(){this.selectedNodes.clear(),this.selectedSingleNode=null}getSelectedNode(){const e=this.getSelectedNodes();return!!e.length&&(e[0]??!1)}getSelectedNodes(){if(this.selectedSingleNode)return[this.selectedSingleNode];{const e=[];return this.selectedNodes.forEach((t=>{const o=this.getNodeById(t);o&&e.push(o)})),e}}getSelectedNodesUnder(e){if(this.selectedSingleNode)return e.isParentOf(this.selectedSingleNode)?[this.selectedSingleNode]:[];{const t=[];return this.selectedNodes.forEach((o=>{const n=this.getNodeById(o);n&&e.isParentOf(n)&&t.push(n)})),t}}isNodeSelected(e){return null!=e.id?this.selectedNodes.has(e.id):!!this.selectedSingleNode&&this.selectedSingleNode.element===e.element}removeFromSelection(e,t=!1){null==e.id?this.selectedSingleNode&&e.element===this.selectedSingleNode.element&&(this.selectedSingleNode=null):(this.selectedNodes.delete(e.id),t&&e.iterate((()=>(null!=e.id&&this.selectedNodes.delete(e.id),!0))))}}const M=(e,t)=>{const o=()=>`simple_widget_${t}`,n=(e,t)=>{const o=jQuery.data(e,t);return o&&o instanceof H?o:null},s=(t,s)=>{const r=o();for(const o of t.get()){if(!n(o,r)){const t=new e(o,s);jQuery.data(o,r)||jQuery.data(o,r,t),t.init()}}return t};jQuery.fn[t]=function(e,...t){if(!e)return s(this,null);if("object"==typeof e){return s(this,e)}if("string"==typeof e&&"_"!==e[0]){const s=e;return"destroy"===e?void(e=>{const t=o();for(const o of e.get()){const e=n(o,t);e&&e.destroy(),jQuery.removeData(o,t)}})(this):((e,t,n)=>{let s=null;for(const r of e.get()){const e=jQuery.data(r,o());if(e&&e instanceof H){const o=e[t];o&&"function"==typeof o&&(s=o.apply(e,n))}}return s})(this,s,t)}}};class H{static defaults={};constructor(e,t){this.$el=jQuery(e);const o=this.constructor.defaults;this.options={...o,...t}}static register(e,t){M(e,t)}deinit(){}destroy(){this.deinit()}init(){}}const w="Node parameter is empty",A="Parameter is empty: ";class _ extends H{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:p,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};addNodeAfter(e,t){const o=t.addAfter(e);return o&&this.refreshElements(t.parent),o}addNodeBefore(e,t){if(!t)throw Error(A+"existingNode");const o=t.addBefore(e);return o&&this.refreshElements(t.parent),o}addParentNode(e,t){if(!t)throw Error(A+"existingNode");const o=t.addParent(e);return o&&this.refreshElements(o.parent),o}addToSelection(e,t){if(!e)throw Error(w);return this.selectNodeHandler.addToSelection(e),this.openParents(e),this.getNodeElementForNode(e).select(t??!0),this.saveState(),this.element}appendNode(e,t){const o=t??this.tree,n=o.append(e);return this.refreshElements(o),n}closeNode(e,t){if(!e)throw Error(w);const o=t??this.options.slide;return(e.isFolder()||e.isEmptyFolder)&&(this.createFolderElement(e).close(o,this.options.animationSpeed),this.saveState()),this.element}deinit(){this.element.empty(),this.element.off(),this.keyHandler.deinit(),this.mouseHandler.deinit(),this.tree=new p({},!0),super.deinit()}getNodeByCallback(e){return this.tree.getNodeByCallback(e)}getNodeByHtmlElement(e){const t=e instanceof HTMLElement?e:e[0];return t?this.getNode(t):null}getNodeById(e){return this.tree.getNodeById(e)}getNodeByName(e){return this.tree.getNodeByName(e)}getNodeByNameMustExist(e){return this.tree.getNodeByNameMustExist(e)}getNodesByProperty(e,t){return this.tree.getNodesByProperty(e,t)}getSelectedNode(){return this.selectNodeHandler.getSelectedNode()}getSelectedNodes(){return this.selectNodeHandler.getSelectedNodes()}getState(){return this.saveStateHandler.getState()}getStateFromStorage(){return this.saveStateHandler.getStateFromStorage()}getTree(){return this.tree}getVersion(){return"1.8.10"}init(){super.init(),this.element=this.$el,this.isInitialized=!1,this.options.rtl=this.getRtlOption(),this.options.closedIcon??=this.getDefaultClosedIcon(),this.connectHandlers(),this.initData()}isDragging(){return this.dndHandler.isDragging}isNodeSelected(e){if(!e)throw Error(w);return this.selectNodeHandler.isNodeSelected(e)}loadData(e,t){return this.doLoadData(e,t),this.element}loadDataFromUrl(e,t,o){return"string"==typeof e?this.doLoadDataFromUrl(e,t,o??null):this.doLoadDataFromUrl(null,e,t),this.element}moveDown(){const e=this.getSelectedNode();return e&&this.keyHandler.moveDown(e),this.element}moveNode(e,t,o){if(!e)throw Error(w);if(!t)throw Error(A+"targetNode");if(!o)throw Error(A+"position");return this.tree.moveNode(e,t,o),this.refreshElements(null),this.element}moveUp(){const e=this.getSelectedNode();return e&&this.keyHandler.moveUp(e),this.element}openNode(e,t,o){if(!e)throw Error(w);const[n,s]=(()=>{let e,n;return"function"==typeof t?(e=t,n=null):(n=t,e=o),n??=this.options.slide,[n,e]})();return this.openNodeInternal(e,n,s),this.element}prependNode(e,t){const o=t??this.tree,n=o.prepend(e);return this.refreshElements(o),n}refresh(){return this.refreshElements(null),this.element}refreshHitAreas(){return this.dndHandler.refresh(),this.element}reload(e){return this.doLoadDataFromUrl(null,null,e),this.element}removeFromSelection(e){if(!e)throw Error(w);return this.selectNodeHandler.removeFromSelection(e),this.getNodeElementForNode(e).deselect(),this.saveState(),this.element}removeNode(e){if(!e)throw Error(w);if(!e.parent)throw Error("Node has no parent");this.selectNodeHandler.removeFromSelection(e,!0);const t=e.parent;return e.remove(),this.refreshElements(t),this.element}scrollToNode(e){if(!e)throw Error(w);if(!e.element)return this.element;const t=n(e.element)-n(this.$el.get(0));return this.scrollHandler.scrollToY(t),this.element}selectNode(e,t){return this.doSelectNode(e,t),this.element}setOption(e,t){return this.options[e]=t,this.element}setState(e){return e&&(this.saveStateHandler.setInitialState(e),this.refreshElements(null)),this.element}toggle(e,t=null){if(!e)throw Error(w);const o=t??this.options.slide;return e.is_open?this.closeNode(e,o):this.openNode(e,o),this.element}toJson(){return JSON.stringify(this.tree.getData())}updateNode(e,t){if(!e)throw Error(w);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}connectHandlers(){const{autoEscape:e,buttonLeft:o,closedIcon:n,dataFilter:s,dragAndDrop:r,keyboardSupport:i,onCanMove:l,onCanMoveTo:c,onCreateLi:u,onDragMove:g,onDragStop:p,onGetStateFromStorage:f,onIsMoveHandle:S,onLoadFailed:v,onLoading:N,onSetStateFromStorage:D,openedIcon:y,openFolderDelay:b,rtl:C,saveState:F,showEmptyFolder:I,slide:M,tabIndex:H}=this.options,w=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),k=this.openNodeInternal.bind(this),O=this.refreshElements.bind(this),U=this.refreshHitAreas.bind(this),z=this.selectNode.bind(this),Q=this.element,Y=this.element.get(0),R=this.triggerEvent.bind(this),$=new L({getNodeById:j}),V=$.addToSelection.bind($),X=$.getSelectedNodes.bind($),G=$.isNodeSelected.bind($),W=$.removeFromSelection.bind($),K=new t({dataFilter:s,loadData:q,onLoadFailed:v,onLoading:N,treeElement:Y,triggerEvent:R}),J=new E({addToSelection:V,getNodeById:j,getSelectedNodes:X,getTree:B,onGetStateFromStorage:f,onSetStateFromStorage:D,openNode:k,refreshElements:O,removeFromSelection:W,saveState:F}),Z=new T({refreshHitAreas:U,treeElement:Y}),ee=Z.getScrollLeft.bind(Z),te=new d({autoEscape:e,getNodeElement:A,getNodeElementForNode:_,getScrollLeft:ee,getTree:B,onCanMove:l,onCanMoveTo:c,onDragMove:g,onDragStop:p,onIsMoveHandle:S,openFolderDelay:b,openNode:k,refreshElements:O,slide:M,treeElement:Y,triggerEvent:R}),oe=new h({closeNode:w,getSelectedNode:x,isFocusOnTree:P,keyboardSupport:i,openNode:k,selectNode:z}),ne=new a({$element:Q,autoEscape:e,buttonLeft:o,closedIcon:n,dragAndDrop:r,getTree:B,isNodeSelected:G,onCreateLi:u,openedIcon:y,rtl:C,showEmptyFolder:I,tabIndex:H}),se=this.getNode.bind(this),re=this.mouseCapture.bind(this),ie=this.mouseDrag.bind(this),le=this.mouseStart.bind(this),de=this.mouseStop.bind(this),ae=new m({element:Y,getMouseDelay:()=>this.options.startDndDelay??0,getNode:se,onClickButton:this.toggle.bind(this),onClickTitle:this.doSelectNode.bind(this),onMouseCapture:re,onMouseDrag:ie,onMouseStart:le,onMouseStop:de,triggerEvent:R,useContextMenu:this.options.useContextMenu});this.dataLoader=K,this.dndHandler=te,this.keyHandler=oe,this.mouseHandler=ae,this.renderer=ne,this.saveStateHandler=J,this.scrollHandler=Z,this.selectNodeHandler=$}containsElement(e){const t=this.getNode(e);return null!=t&&t.tree===this.tree}createFolderElement(e){const t=this.renderer.closedIconElement,o=this.scrollHandler.getScrollLeft.bind(this.scrollHandler),n=this.renderer.openedIconElement,s=this.options.tabIndex,r=this.element.get(0),i=this.triggerEvent.bind(this);return new N({closedIconElement:t,getScrollLeft:o,node:e,openedIconElement:n,tabIndex:s,treeElement:r,triggerEvent:i})}createNodeElement(e){const t=this.scrollHandler.getScrollLeft.bind(this.scrollHandler),o=this.options.tabIndex,n=this.element.get(0);return new v({getScrollLeft:t,node:e,tabIndex:o,treeElement:n})}deselectCurrentNode(){const e=this.getSelectedNode();e&&this.removeFromSelection(e)}deselectNodes(e){const t=this.selectNodeHandler.getSelectedNodesUnder(e);for(const e of t)this.selectNodeHandler.removeFromSelection(e)}doLoadData(e,t){e&&(t?(this.deselectNodes(t),this.loadSubtree(e,t)):this.initTree(e),this.isDragging()&&this.dndHandler.refresh()),this.triggerEvent("tree.load_data",{parent_node:t,tree_data:e})}doLoadDataFromUrl(e,t,o){const n=e??this.getDataUrlInfo(t);this.dataLoader.loadFromUrl(n,t,o)}doSelectNode(e,t){const o=()=>{this.options.saveState&&this.saveStateHandler.saveState()};if(!e)return this.deselectCurrentNode(),void o();const n={mustSetFocus:!0,mustToggle:!0,...t??{}};if((()=>this.options.onCanSelectNode?this.options.selectable&&this.options.onCanSelectNode(e):this.options.selectable)()){if(this.selectNodeHandler.isNodeSelected(e))n.mustToggle&&(this.deselectCurrentNode(),this.triggerEvent("tree.select",{node:null,previous_node:e}));else{const t=this.getSelectedNode()||null;this.deselectCurrentNode(),this.addToSelection(e,n.mustSetFocus),this.triggerEvent("tree.select",{deselected_node:t,node:e}),this.openParents(e)}o()}}getAutoOpenMaxLevel(){return!0===this.options.autoOpen?-1:"number"==typeof this.options.autoOpen?this.options.autoOpen:"string"==typeof this.options.autoOpen?parseInt(this.options.autoOpen,10):0}getDataUrlInfo(e){const t=this.options.dataUrl??this.element.data("url"),o=t=>{if(e?.id){const o={node:e.id};t.data=o}else{const e=this.getNodeIdToBeSelected();if(e){const o={selected_node:e};t.data=o}}};return"function"==typeof t?t(e):"string"==typeof t?(e=>{const t={url:e};return o(t),t})(t):t&&"object"==typeof t?(o(t),t):null}getDefaultClosedIcon(){return this.options.rtl?"◀":"►"}getNode(e){const t=e.closest("li.jqtree_common");return t?jQuery(t).data("node"):null}getNodeElement(e){const t=this.getNode(e);return t?this.getNodeElementForNode(t):null}getNodeElementForNode(e){return e.isFolder()?this.createFolderElement(e):this.createNodeElement(e)}getNodeIdToBeSelected(){return this.options.saveState?this.saveStateHandler.getNodeIdToBeSelected():null}getRtlOption(){if(null!=this.options.rtl)return this.options.rtl;{const e=this.element.data("rtl");return null!==e&&!1!==e&&void 0!==e}}initData(){if(this.options.data)this.doLoadData(this.options.data,null);else{this.getDataUrlInfo(null)?this.doLoadDataFromUrl(null,null,null):this.doLoadData([],null)}}initTree(e){const t=()=>{this.isInitialized||(this.isInitialized=!0,this.triggerEvent("tree.init"))};this.tree=new this.options.nodeClass(null,!0,this.options.nodeClass),this.selectNodeHandler.clear(),this.tree.loadFromData(e);const o=this.setInitialState();this.refreshElements(null),o?this.setInitialStateOnDemand(t):t()}isFocusOnTree(){const e=document.activeElement;return Boolean(e&&"SPAN"===e.tagName&&this.containsElement(e))}isSelectedNodeInSubtree(e){const t=this.getSelectedNode();return!!t&&(e===t||e.isParentOf(t))}loadFolderOnDemand(e,t=!0,o){e.is_loading=!0,this.doLoadDataFromUrl(null,e,(()=>{this.openNodeInternal(e,t,o)}))}loadSubtree(e,t){t.loadFromData(e),t.load_on_demand=!1,t.is_loading=!1,this.refreshElements(t)}mouseCapture(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseCapture(e)}mouseDrag(e){if(this.options.dragAndDrop){const t=this.dndHandler.mouseDrag(e);return this.scrollHandler.checkScrolling(e),t}return!1}mouseStart(e){return!!this.options.dragAndDrop&&this.dndHandler.mouseStart(e)}mouseStop(e){return!!this.options.dragAndDrop&&(this.scrollHandler.stopScrolling(),this.dndHandler.mouseStop(e))}openNodeInternal(e,t=!0,o){const n=(t,o,n)=>{if(!e.children.length)return;this.createFolderElement(t).open(n,o,this.options.animationSpeed)};if(e.isFolder()||e.isEmptyFolder)if(e.load_on_demand)this.loadFolderOnDemand(e,t,o);else{let s=e.parent;for(;s;)s.parent&&n(s,!1),s=s.parent;n(e,t,o),this.saveState()}}openParents(e){const t=e.parent;t?.parent&&!t.is_open&&this.openNode(t,!1)}refreshElements(e){const t=this.isFocusOnTree(),o=!!e&&this.isSelectedNodeInSubtree(e);this.renderer.render(e),o&&this.selectCurrentNode(t),this.triggerEvent("tree.refresh")}saveState(){this.options.saveState&&this.saveStateHandler.saveState()}selectCurrentNode(e){const t=this.getSelectedNode();if(t){this.getNodeElementForNode(t).select(e)}}setInitialState(){const e=()=>{if(!1===this.options.autoOpen)return!1;const e=this.getAutoOpenMaxLevel();let t=!1;return this.tree.iterate(((o,n)=>o.load_on_demand?(t=!0,!1):!!o.hasChildren()&&(o.is_open=!0,n!==e))),t};let[t,o]=(()=>{if(this.options.saveState){const e=this.saveStateHandler.getStateFromStorage();if(e){return[!0,this.saveStateHandler.setInitialState(e)]}return[!1,!1]}return[!1,!1]})();return t||(o=e()),o}setInitialStateOnDemand(e){const t=()=>{const t=this.getAutoOpenMaxLevel();let o=0;const n=e=>{o+=1,this.openNodeInternal(e,!1,(()=>{o-=1,s()}))},s=()=>{this.tree.iterate(((e,o)=>e.load_on_demand?(e.is_loading||n(e),!1):(this.openNodeInternal(e,!1),o!==t))),0===o&&e()};s()};(()=>{if(this.options.saveState){const t=this.saveStateHandler.getStateFromStorage();return!!t&&(this.saveStateHandler.setInitialStateOnDemand(t,e),!0)}return!1})()||t()}triggerEvent(e,t){const o=jQuery.Event(e,t);return this.element.trigger(o),o}}return H.register(_,"tree"),e.JqTreeWidget=_,e}({}); //# sourceMappingURL=tree.jquery.js.map diff --git a/tree.jquery.js.map b/tree.jquery.js.map index 52031ccb..746035a5 100644 --- a/tree.jquery.js.map +++ b/tree.jquery.js.map @@ -1 +1 @@ -{"version":3,"file":"tree.jquery.js","sources":["src/dataLoader.ts","src/util.ts","src/dragAndDropHandler/dragElement.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/dragAndDropHandler/binarySearch.ts","src/elementsRenderer.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.ts","src/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/saveStateHandler.ts","src/scrollHandler/containerScrollParent.ts","src/scrollHandler/documentScrollParent.ts","src/scrollHandler/createScrollParent.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/simple.widget.ts","src/version.ts","src/tree.jquery.ts"],"sourcesContent":["import { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\n\nexport type HandleFinishedLoading = () => void;\n\ninterface DataLoaderParams {\n dataFilter?: DataFilter;\n loadData: LoadData;\n onLoadFailed?: OnLoadFailed;\n onLoading?: OnLoading;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private onLoadFailed?: OnLoadFailed;\n private onLoading?: OnLoading;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.onLoadFailed = onLoadFailed;\n this.onLoading = onLoading;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n public loadFromUrl(\n urlInfo: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const element = this.getDomElement(parentNode);\n this.addLoadingClass(element);\n this.notifyLoading(true, parentNode, element);\n\n const stopLoading = (): void => {\n this.removeLoadingClass(element);\n this.notifyLoading(false, parentNode, element);\n };\n\n const handleSuccess = (data: NodeData[] | string): void => {\n stopLoading();\n this.loadData(this.parseData(data), parentNode);\n\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n\n const handleError = (jqXHR: JQuery.jqXHR): void => {\n stopLoading();\n\n if (this.onLoadFailed) {\n this.onLoadFailed(jqXHR);\n }\n };\n\n this.submitRequest(urlInfo, handleSuccess, handleError);\n }\n\n private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode?.element) {\n return parentNode.element;\n } else {\n return this.treeElement;\n }\n }\n\n private notifyLoading(\n isLoading: boolean,\n node: Node | null,\n element: HTMLElement,\n ): void {\n const $el = jQuery(element);\n\n if (this.onLoading) {\n this.onLoading(isLoading, node, $el);\n }\n\n this.triggerEvent(\"tree.loading_data\", {\n $el,\n isLoading,\n node,\n });\n }\n\n private parseData(data: NodeData[] | string): NodeData[] {\n const getParsedData = () => {\n if (typeof data === \"string\") {\n return JSON.parse(data) as NodeData[];\n } else {\n return data;\n }\n };\n\n const parsedData = getParsedData();\n\n if (this.dataFilter) {\n return this.dataFilter(parsedData);\n } else {\n return parsedData;\n }\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private submitRequest(\n urlInfoInput: JQuery.AjaxSettings | string,\n handleSuccess: JQuery.Ajax.SuccessCallback,\n handleError: JQuery.Ajax.ErrorCallback,\n ): void {\n const urlInfo =\n typeof urlInfoInput === \"string\"\n ? { url: urlInfoInput }\n : urlInfoInput;\n\n const ajaxSettings: JQuery.AjaxSettings = {\n cache: false,\n dataType: \"json\",\n error: handleError,\n method: \"GET\",\n success: handleSuccess,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n}\n","export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const isFunction = (v: unknown): boolean => typeof v === \"function\";\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n\nexport const getOffsetTop = (element: HTMLElement) =>\n getElementPosition(element).top;\n\nexport const getElementPosition = (element: HTMLElement) => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape);\n\n treeElement.appendChild(this.element);\n }\n\n 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","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, Position } from \"../node\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\nimport { HitArea } from \"./types\";\n\ninterface HitPosition {\n node: Node;\n position: null | Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (\n node: Node,\n position: null | Position,\n top: number,\n ) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, lastTop);\n } else {\n addHitPosition(node, \"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, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, \"after\", top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, \"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, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"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, null, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, null, 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, \"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) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n","import {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\nimport {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../jqtreeOptions\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport { Node } from \"../node\";\nimport NodeElement from \"../nodeElement\";\nimport { getElementPosition } from \"../util\";\nimport binarySearch from \"./binarySearch\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { DropHint, HitArea } from \"./types\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\n\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\nexport class DragAndDropHandler {\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\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: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\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 }: 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.openFolderDelay = openFolderDelay;\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 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, this.currentItem)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(\"jqtree-moving\");\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n const currentNode = this.currentItem.node;\n this.generateHitAreas(currentNode);\n this.currentItem = this.getNodeElementForNode(currentNode);\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(\"jqtree-moving\");\n }\n }\n }\n\n private canMoveToArea(area: HitArea, currentItem: NodeElement): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n return this.onCanMoveTo(currentItem.node, area.node, area.position);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n return binarySearch(this.hitAreas, (area) => {\n if (y < area.top) {\n return 1;\n } else if (y > area.bottom) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n private generateHitAreas(currentNode: Node): void {\n const tree = this.getTree();\n\n if (!tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n currentNode,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n /* Move the dragged node to the selected position in the tree. */\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea?.position &&\n this.canMoveToArea(this.hoveredArea, this.currentItem)\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 === \"inside\") {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n const event = this.triggerEvent(\"tree.move\", {\n move_info: {\n do_move: doMove,\n moved_node: movedNode,\n original_event: positionInfo.originalEvent,\n position,\n previous_parent: previousParent,\n target_node: targetNode,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return node.isFolder() && !node.is_open && area.position === \"inside\";\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this.openNode(folder, this.slide, () => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay,\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n}\n","function binarySearch(items: T[], compareFn: (a: T) => number): null | T {\n let low = 0;\n let high = items.length;\n\n while (low < high) {\n const mid = (low + high) >> 1;\n const item = items[mid];\n\n if (item === undefined) {\n return null;\n }\n\n const compareResult = compareFn(item);\n\n if (compareResult > 0) {\n high = mid;\n } else if (compareResult < 0) {\n low = mid + 1;\n } else {\n return item;\n }\n }\n\n return null;\n}\n\nexport default binarySearch;\n","import { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n $element: JQuery;\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n private $element: JQuery;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private isNodeSelected: IsNodeSelected;\n private onCreateLi?: OnCreateLi;\n private rtl?: boolean;\n\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n constructor({\n $element,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.dragAndDrop = dragAndDrop;\n this.$element = $element;\n this.getTree = getTree;\n this.isNodeSelected = isNodeSelected;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.openedIconElement = this.createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this.createButtonElement(closedIcon ?? \"-\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this.$element.empty();\n\n const tree = this.getTree();\n\n if (this.$element[0] && tree) {\n this.createDomElements(this.$element[0], tree.children, true, 1);\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\n }\n\n private createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `jqtree_common ${folderClasses}`;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the
  • element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = Boolean(this.isNodeSelected(node));\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const liClasses = [\"jqtree_common\"];\n\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = \"jqtree-title jqtree_common\";\n\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n\n classes += ` jqtree-title-button-${this.buttonLeft ? \"left\" : \"right\"}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this.setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n\n if (this.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this.dragAndDrop) {\n classString += \" jqtree-dnd\";\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `jqtree_common ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [\"jqtree-toggler\", \"jqtree_common\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (this.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n } else {\n classes.push(\"jqtree-toggler-right\");\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [\"jqtree-folder\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n\n return classes.join(\" \");\n }\n\n private setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n}\n","import {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getSelectedNode: GetSelectedNode;\n isFocusOnTree: IsFocusOnTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n}\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private getSelectedNode: GetSelectedNode;\n\n private isFocusOnTree: IsFocusOnTree;\n\n private keyboardSupport: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n constructor({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.getSelectedNode = getSelectedNode;\n this.isFocusOnTree = isFocusOnTree;\n this.keyboardSupport = keyboardSupport;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public deinit(): void {\n if (this.keyboardSupport) {\n document.removeEventListener(\"keydown\", this.handleKeyDown);\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 private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\n }\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n if (!this.canHandleKeyboard()) {\n return;\n }\n\n let isKeyHandled = false;\n\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n switch (e.key) {\n case \"ArrowDown\":\n isKeyHandled = this.moveDown(selectedNode);\n break;\n\n case \"ArrowLeft\":\n isKeyHandled = this.moveLeft(selectedNode);\n break;\n\n case \"ArrowRight\":\n isKeyHandled = this.moveRight(selectedNode);\n break;\n\n case \"ArrowUp\":\n isKeyHandled = this.moveUp(selectedNode);\n break;\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this.closeNode(selectedNode);\n return true;\n } else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n }\n\n private moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return false;\n } else {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextVisibleNode());\n } else {\n // Right expands a closed node\n this.openNode(selectedNode);\n return true;\n }\n }\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private selectNode(node: Node | null): boolean {\n if (!node) {\n return false;\n } else {\n this.originalSelectNode(node);\n\n return true;\n }\n }\n}\n","export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n","import { TriggerEvent } from \"./jqtreeMethodTypes\";\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ntype GetNode = (element: HTMLElement) => Node | null;\n\ninterface MouseHandlerParams {\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: (positionInfo: PositionInfo) => boolean;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private element: HTMLElement;\n private getMouseDelay: () => number;\n private getNode: GetNode;\n\n private isMouseDelayMet: boolean;\n\n private isMouseStarted: boolean;\n\n private mouseDelayTimer: null | number;\n\n private mouseDownInfo: null | PositionInfo;\n private onClickButton: (node: Node) => void;\n private onClickTitle: (node: Node) => void;\n\n private onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n\n private onMouseStart: (positionInfo: PositionInfo) => boolean;\n\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\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 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 private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest(\".jqtree-toggler\");\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const jqTreeElement =\n element.closest(\".jqtree-element\");\n\n if (jqTreeElement) {\n const node = this.getNode(jqTreeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n const event = this.triggerEvent(\"tree.click\", {\n click_event: e,\n node: clickTarget.node,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest(\n \"ul.jqtree-tree .jqtree-element\",\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n click_event: e,\n node,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n click_event: e,\n node: clickTarget.node,\n });\n }\n };\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private 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 mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseHandler;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n","import { isNodeRecordWithChildren } from \"./nodeUtils\";\n\nexport type Position = \"after\" | \"before\" | \"inside\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport class Node implements INode {\n [key: string]: unknown;\n\n public children: Node[];\n public element?: HTMLElement;\n public id?: NodeId;\n public idMapping: Map;\n public is_loading: boolean;\n public is_open: boolean;\n public isEmptyFolder: boolean;\n public load_on_demand: boolean;\n public name: string;\n public nodeClass?: typeof Node;\n public parent: Node | null;\n public tree?: Node;\n\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n\n if (isRoot) {\n this.idMapping = new Map();\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, node);\n }\n }\n\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /*\n Get the tree as data.\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record[] => {\n return nodes.map((node) => {\n const tmpNode: Record = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1];\n\n if (!lastChild) {\n return null;\n }\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\n }\n }\n }\n\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\n }\n\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\n }\n\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (\n !previousSibling.hasChildren() ||\n !previousSibling.is_open\n ) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n }\n\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n // Init Node from data without making it the root of the tree\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length\n ) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case \"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 \"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 \"inside\": {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n }\n }\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\n }\n\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setData(object): set attributes of the node\n\n Examples:\n setData('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n}\n","import { DropHint } from \"../dragAndDropHandler/types\";\n\nclass BorderDropHint implements DropHint {\n private hint?: HTMLElement;\n\n constructor(element: HTMLElement, scrollLeft: number) {\n const div = element.querySelector(\":scope > .jqtree-element\");\n\n if (!div) {\n this.hint = undefined;\n return;\n }\n\n const width = Math.max(element.offsetWidth + scrollLeft - 4, 0);\n const height = Math.max(element.clientHeight - 4, 0);\n\n const hint = document.createElement(\"span\");\n hint.className = \"jqtree-border\";\n hint.style.width = `${width}px`;\n hint.style.height = `${height}px`;\n\n this.hint = hint;\n\n div.append(this.hint);\n }\n\n public remove(): void {\n this.hint?.remove();\n }\n}\n\nexport default BorderDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { Node, Position } from \"../node\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n private node: Node;\n\n constructor(node: Node, element: HTMLElement, position: Position) {\n this.element = element;\n this.node = node;\n this.ghost = this.createGhostElement();\n\n switch (position) {\n case \"after\":\n this.moveAfter();\n break;\n\n case \"before\":\n this.moveBefore();\n break;\n\n case \"inside\": {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\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 private moveAfter(): void {\n this.element.after(this.ghost);\n }\n\n private moveBefore(): void {\n this.element.before(this.ghost);\n }\n\n private moveInside(): void {\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n private moveInsideOpenFolder(): void {\n const childElement = this.node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this.ghost);\n }\n }\n}\n\nexport default GhostDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\nimport { Node, Position } from \"../node\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private treeElement: HTMLElement;\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 addDropHint(position: Position): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.node, this.element, position);\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public init(node: Node): void {\n this.node = node;\n\n if (!node.element) {\n node.element = this.treeElement;\n }\n\n this.element = node.element;\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > span.jqtree-title\",\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === \"inside\";\n }\n}\n\nexport default NodeElement;\n","import { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\nimport { Position } from \"../node\";\nimport NodeElement, { NodeElementParams } from \"./index\";\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: HTMLElement | Text;\n openedIconElement?: HTMLElement | Text;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: HTMLElement | Text;\n private openedIconElement?: HTMLElement | Text;\n private triggerEvent: TriggerEvent;\n\n constructor({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.triggerEvent = triggerEvent;\n }\n\n public close(slide: boolean, animationSpeed: JQuery.Duration): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n const button = this.getButton();\n button.classList.add(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideUp(animationSpeed, doClose);\n } else {\n jQuery(this.getUl()).hide();\n doClose();\n }\n }\n\n public open(\n onFinished: OnFinishOpenNode | undefined,\n slide: boolean,\n animationSpeed: JQuery.Duration,\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 protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && 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 {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData) as unknown as SavedState;\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\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 private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else {\n return localStorage.getItem(this.getKeyName());\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state as unknown as SavedState;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getElementPosition, getOffsetTop } from \"../util\";\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ninterface Params {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\ntype VerticalScrollDirection = \"bottom\" | \"top\";\n\nexport default class ContainerScrollParent implements ScrollParent {\n private container: HTMLElement;\n private horizontalScrollDirection?: HorizontalScrollDirection;\n private horizontalScrollTimeout?: number;\n private refreshHitAreas: () => void;\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n private verticalScrollDirection?: VerticalScrollDirection;\n private verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: Params) {\n this.container = container;\n this.refreshHitAreas = refreshHitAreas;\n }\n\n 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 const containerWidth = this.container.getBoundingClientRect().width;\n\n const rightEdge = scrollParentOffset.left + containerWidth;\n const leftEdge = scrollParentOffset.left;\n const isNearRightEdge = pageX > rightEdge - 20;\n const isNearLeftEdge = pageX < leftEdge + 20;\n\n if (isNearRightEdge) {\n return \"right\";\n } else if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n const containerHeight =\n this.container.getBoundingClientRect().height;\n this.scrollParentBottom =\n this.getScrollParentTop() + containerHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n if (this.scrollParentTop == null) {\n this.scrollParentTop = getOffsetTop(this.container);\n }\n\n return this.scrollParentTop;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport { getOffsetTop } from \"../util\";\n\ntype HorizontalScrollDirection = \"left\" | \"right\";\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\ntype VerticalScrollDirection = \"bottom\" | \"top\";\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 canScrollDown() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollTop + documentElement.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n const documentElement = document.documentElement;\n\n return (\n documentElement.scrollLeft + documentElement.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n if (this.documentScrollHeight == null) {\n this.documentScrollHeight = document.documentElement.scrollHeight;\n }\n\n return this.documentScrollHeight;\n }\n\n private getDocumentScrollWidth() {\n // Store the original scroll width because the scroll width can increase when the drag element is moved beyond the scroll width.\n if (this.documentScrollWidth == null) {\n this.documentScrollWidth = document.documentElement.scrollWidth;\n }\n\n return this.documentScrollWidth;\n }\n\n private getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = document.documentElement.scrollLeft;\n const windowWidth = window.innerWidth;\n\n const isNearRightEdge = pageX > windowWidth - 20;\n const isNearLeftEdge = pageX - scrollLeft < 20;\n\n if (isNearRightEdge && this.canScrollRight()) {\n return \"right\";\n }\n\n if (isNearLeftEdge) {\n return \"left\";\n }\n\n return undefined;\n }\n\n private getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = jQuery(document).scrollTop() ?? 0;\n const distanceTop = pageY - scrollTop;\n\n if (distanceTop < 20) {\n return \"top\";\n }\n\n const windowHeight = window.innerHeight;\n\n if (windowHeight - (pageY - scrollTop) < 20 && this.canScrollDown()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: distance, top: 0 });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n private scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n window.scrollBy({ behavior: \"instant\", left: 0, top: distance });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import type { ScrollParent } from \"./types\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n","import { PositionInfo } from \"./mouseUtils\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\nimport { ScrollParent } from \"./scrollHandler/types\";\n\ninterface ScrollHandlerParams {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class ScrollHandler {\n private refreshHitAreas: () => void;\n private scrollParent?: ScrollParent;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: ScrollHandlerParams) {\n this.refreshHitAreas = refreshHitAreas;\n this.scrollParent = undefined;\n this.treeElement = treeElement;\n }\n\n public checkScrolling(positionInfo: PositionInfo): void {\n this.checkVerticalScrolling(positionInfo);\n this.checkHorizontalScrolling(positionInfo);\n }\n\n public getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private getScrollParent(): ScrollParent {\n if (!this.scrollParent) {\n this.scrollParent = createScrollParent(\n this.treeElement,\n this.refreshHitAreas,\n );\n }\n\n return this.scrollParent;\n }\n}\n","import { GetNodeById } from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private selectedNodes: Set;\n private selectedSingleNode: Node | null;\n\n constructor({ getNodeById }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.selectedNodes = new Set();\n this.clear();\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n}\n","const register = (widgetClass: unknown, widgetName: string): void => {\n const getDataKey = (): string => `simple_widget_${widgetName}`;\n\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string,\n ): null | SimpleWidget => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: unknown): JQuery => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, dataKey);\n\n if (!existingWidget) {\n const simpleWidgetClass = widgetClass as typeof SimpleWidget;\n const widget = new simpleWidgetClass(el, options);\n\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n\n return $el;\n };\n\n const destroyWidget = ($el: JQuery): void => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const widget = getWidgetData(el, dataKey);\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, dataKey);\n }\n };\n\n const callFunction = (\n $el: JQuery,\n functionName: string,\n args: unknown[],\n ): unknown => {\n let result = null;\n\n for (const el of $el.get()) {\n const widget = jQuery.data(el, getDataKey()) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n const simpleWidget = widget as SimpleWidget;\n const widgetFunction = simpleWidget[functionName];\n\n if (widgetFunction && typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args) as unknown;\n }\n }\n }\n\n return result;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (jQuery.fn as any)[widgetName] = function (\n this: JQuery,\n argument1: unknown,\n ...args: unknown[]\n ) {\n if (!argument1) {\n return createWidget(this, null);\n } else if (typeof argument1 === \"object\") {\n const options = argument1 as unknown;\n return createWidget(this, options);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (argument1 === \"destroy\") {\n destroyWidget(this);\n return undefined;\n } else {\n return callFunction(this, functionName, args);\n }\n } else {\n return undefined;\n }\n };\n};\n\nexport default class SimpleWidget {\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public $el: JQuery;\n\n public options: WidgetOptions;\n\n constructor(el: HTMLElement, options: WidgetOptions) {\n this.$el = jQuery(el);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const defaults = (this.constructor as any).defaults as WidgetOptions;\n this.options = { ...defaults, ...options };\n }\n\n public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n public deinit(): void {\n //\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n}\n","const version = \"1.8.10\";\n\nexport default version;\n","import DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport { Node, Position } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport __version__ from \"./version\";\n\ninterface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends SimpleWidget {\n protected static defaults: JQTreeOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: undefined,\n data: undefined,\n dataFilter: undefined,\n dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n onCanMove: undefined, // Can this node be moved?\n onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanSelectNode: undefined,\n onCreateLi: undefined,\n onDragMove: undefined,\n onDragStop: undefined,\n onGetStateFromStorage: undefined,\n onIsMoveHandle: undefined,\n onLoadFailed: undefined,\n onLoading: undefined,\n onSetStateFromStorage: undefined,\n openedIcon: \"▼\",\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (cookie name)\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n useContextMenu: true,\n };\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\n private element: JQuery;\n\n private isInitialized: boolean;\n private keyHandler: KeyHandler;\n private mouseHandler: MouseHandler;\n private renderer: ElementsRenderer;\n private saveStateHandler: SaveStateHandler;\n private scrollHandler: ScrollHandler;\n private selectNodeHandler: SelectNodeHandler;\n private tree: Node;\n\n public addNodeAfter(\n newNodeInfo: NodeData,\n existingNode: Node,\n ): Node | null {\n const newNode = existingNode.addAfter(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addNodeBefore(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addBefore(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addParentNode(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addParent(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n public addToSelection(node?: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.addToSelection(node);\n this.openParents(node);\n\n this.getNodeElementForNode(node).select(mustSetFocus ?? true);\n\n this.saveState();\n\n return this.element;\n }\n\n public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.append(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public closeNode(node?: Node, slideParam?: boolean | null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.isFolder() || node.isEmptyFolder) {\n this.createFolderElement(node).close(\n slide,\n this.options.animationSpeed,\n );\n\n this.saveState();\n }\n\n return this.element;\n }\n\n public deinit(): void {\n this.element.empty();\n this.element.off();\n\n this.keyHandler.deinit();\n this.mouseHandler.deinit();\n\n this.tree = new Node({}, true);\n\n super.deinit();\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n public getNodeByHtmlElement(\n inputElement: HTMLElement | JQuery,\n ): Node | null {\n const element =\n inputElement instanceof HTMLElement\n ? inputElement\n : inputElement[0];\n\n if (!element) {\n return null;\n }\n\n return this.getNode(element);\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.tree.getNodeById(nodeId);\n }\n\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n public getSelectedNode(): false | Node {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n public getState(): null | SavedState {\n return this.saveStateHandler.getState();\n }\n\n public getStateFromStorage(): null | SavedState {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n public getTree(): Node {\n return this.tree;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public init(): void {\n super.init();\n\n this.element = this.$el;\n this.isInitialized = false;\n\n this.options.rtl = this.getRtlOption();\n\n if (this.options.closedIcon == null) {\n this.options.closedIcon = this.getDefaultClosedIcon();\n }\n\n this.connectHandlers();\n\n this.initData();\n }\n\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public isNodeSelected(node?: Node): boolean {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n public loadData(data: NodeData[], parentNode: Node | null): JQuery {\n this.doLoadData(data, parentNode);\n return this.element;\n }\n\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n public loadDataFromUrl(\n param1: Node | null | string,\n param2?: HandleFinishedLoading | Node | null,\n param3?: HandleFinishedLoading,\n ): JQuery {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(\n param1,\n param2 as Node | null,\n param3 ?? null,\n );\n } else {\n // first parameter is not url\n this.doLoadDataFromUrl(\n null,\n param1,\n param2 as HandleFinishedLoading | null,\n );\n }\n\n return this.element;\n }\n\n public moveDown(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveDown(selectedNode);\n }\n\n return this.element;\n }\n\n public moveNode(\n node?: Node,\n targetNode?: Node,\n position?: Position,\n ): 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 this.tree.moveNode(node, targetNode, position);\n this.refreshElements(null);\n\n return this.element;\n }\n\n public moveUp(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveUp(selectedNode);\n }\n\n return this.element;\n }\n\n public openNode(\n node?: Node,\n param1?: boolean | OnFinishOpenNode,\n param2?: OnFinishOpenNode,\n ): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const parseParams = (): [boolean, OnFinishOpenNode | undefined] => {\n let onFinished: null | OnFinishOpenNode;\n let slide: boolean | null;\n\n if (isFunction(param1)) {\n onFinished = param1 as OnFinishOpenNode;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n if (slide == null) {\n slide = this.options.slide;\n }\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this.openNodeInternal(node, slide, onFinished);\n return this.element;\n }\n\n public prependNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.prepend(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.element;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\n }\n\n public reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public removeFromSelection(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.removeFromSelection(node);\n\n this.getNodeElementForNode(node).deselect();\n this.saveState();\n\n return this.element;\n }\n\n public removeNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.parent) {\n throw Error(\"Node has no parent\");\n }\n\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this.refreshElements(parent);\n\n return this.element;\n }\n\n public scrollToNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.element) {\n return this.element;\n }\n\n const top =\n getOffsetTop(node.element) -\n getOffsetTop(this.$el.get(0) as HTMLElement);\n\n this.scrollHandler.scrollToY(top);\n\n return this.element;\n }\n\n public selectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): JQuery {\n this.doSelectNode(node, optionsParam);\n return this.element;\n }\n\n public setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record)[option] = value;\n return this.element;\n }\n\n public setState(state?: SavedState): JQuery {\n if (state) {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public toggle(node?: Node, slideParam: boolean | null = null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n public updateNode(node?: Node, data?: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!data) {\n return this.element;\n }\n\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data.children &&\n data.children instanceof Array\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children as Node[]);\n }\n }\n\n this.refreshElements(node);\n\n return this.element;\n }\n\n private connectHandlers() {\n const {\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onLoadFailed,\n onLoading,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this.options;\n\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this.getNodeElement.bind(this);\n const getNodeElementForNode = this.getNodeElementForNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const isFocusOnTree = this.isFocusOnTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this.openNodeInternal.bind(this);\n const refreshElements = this.refreshElements.bind(this);\n const refreshHitAreas = this.refreshHitAreas.bind(this);\n const selectNode = this.selectNode.bind(this);\n const $treeElement = this.element;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const dataLoader = new DataLoader({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n });\n\n const renderer = new ElementsRenderer({\n $element: $treeElement,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this.getNode.bind(this);\n const onMouseCapture = this.mouseCapture.bind(this);\n const onMouseDrag = this.mouseDrag.bind(this);\n const onMouseStart = this.mouseStart.bind(this);\n const onMouseStop = this.mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle: this.doSelectNode.bind(this),\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this.dataLoader = dataLoader;\n this.dndHandler = dndHandler;\n this.keyHandler = keyHandler;\n this.mouseHandler = mouseHandler;\n this.renderer = renderer;\n this.saveStateHandler = saveStateHandler;\n this.scrollHandler = scrollHandler;\n this.selectNodeHandler = selectNodeHandler;\n }\n\n private containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\n }\n\n private createFolderElement(node: Node) {\n const closedIconElement = this.renderer.closedIconElement;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const openedIconElement = this.renderer.openedIconElement;\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n return new FolderElement({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n });\n }\n\n private createNodeElement(node: Node) {\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n }\n\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n private doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (data) {\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n\n this.triggerEvent(\"tree.load_data\", {\n parent_node: parentNode,\n tree_data: data,\n });\n }\n\n private doLoadDataFromUrl(\n urlInfoParam: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n const urlInfo = urlInfoParam ?? this.getDataUrlInfo(parentNode);\n\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n }\n\n private doSelectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): void {\n const saveState = (): void => {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n };\n\n if (!node) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (this.options.onCanSelectNode) {\n return (\n this.options.selectable &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable;\n }\n };\n\n if (!canSelect()) {\n return;\n }\n\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this.triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node,\n });\n }\n } else {\n const deselectedNode = this.getSelectedNode() || null;\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselected_node: deselectedNode,\n node,\n });\n this.openParents(node);\n }\n\n saveState();\n }\n\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n } else if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n } else if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n } else {\n return 0;\n }\n }\n\n private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl ?? (this.element.data(\"url\") as null | string);\n\n const getUrlFromString = (url: string): JQuery.AjaxSettings => {\n const urlInfo: JQuery.AjaxSettings = { url };\n\n setUrlInfoData(urlInfo);\n\n return urlInfo;\n };\n\n const setUrlInfoData = (urlInfo: JQuery.AjaxSettings): void => {\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n const data = { node: node.id };\n urlInfo.data = data;\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n const data = { selected_node: selectedNodeId };\n urlInfo.data = data;\n }\n }\n };\n\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n } else if (typeof dataUrl === \"string\") {\n return getUrlFromString(dataUrl);\n } else if (dataUrl && typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n } else {\n return null;\n }\n }\n\n private getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n } else {\n // triangle to the right\n return \"►\";\n }\n }\n\n private getNode(element: HTMLElement): Node | null {\n const liElement = element.closest(\"li.jqtree_common\");\n\n if (liElement) {\n return jQuery(liElement).data(\"node\") as Node;\n } else {\n return null;\n }\n }\n\n private getNodeElement(element: HTMLElement): NodeElement | null {\n const node = this.getNode(element);\n if (node) {\n return this.getNodeElementForNode(node);\n } else {\n return null;\n }\n }\n\n private getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return this.createFolderElement(node);\n } else {\n return this.createNodeElement(node);\n }\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\n }\n }\n\n private getRtlOption(): boolean {\n if (this.options.rtl != null) {\n return this.options.rtl;\n } else {\n const dataRtl = this.element.data(\"rtl\") as unknown;\n\n if (\n dataRtl !== null &&\n dataRtl !== false &&\n dataRtl !== undefined\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n private initData(): void {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n } else {\n const dataUrl = this.getDataUrlInfo(null);\n\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n } else {\n this.doLoadData([], null);\n }\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (!this.isInitialized) {\n this.isInitialized = true;\n this.triggerEvent(\"tree.init\");\n }\n };\n\n this.tree = new this.options.nodeClass(\n null,\n true,\n this.options.nodeClass,\n );\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this.refreshElements(null);\n\n if (!mustLoadOnDemand) {\n doInit();\n } else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n }\n\n private isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return Boolean(\n activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.containsElement(activeElement as HTMLElement),\n );\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (!selectedNode) {\n return false;\n } else {\n return subtree === selectedNode || subtree.isParentOf(selectedNode);\n }\n }\n\n private loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n node.is_loading = true;\n\n this.doLoadDataFromUrl(null, node, () => {\n this.openNodeInternal(node, slide, onFinished);\n });\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this.refreshElements(parentNode);\n }\n\n private mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseCapture(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this.dndHandler.mouseDrag(positionInfo);\n\n this.scrollHandler.checkScrolling(positionInfo);\n return result;\n } else {\n return false;\n }\n }\n\n private mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n this.scrollHandler.stopScrolling();\n return this.dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n private openNodeInternal(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished?: OnFinishOpenNode,\n ): void => {\n if (!node.children.length) {\n return;\n }\n\n const folderElement = this.createFolderElement(_node);\n folderElement.open(\n _onFinished,\n _slide,\n this.options.animationSpeed,\n );\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n doOpenNode(parent, false);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this.triggerEvent(\"tree.refresh\");\n }\n\n private saveState(): void {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (node) {\n const nodeElement = this.getNodeElementForNode(node);\n nodeElement.select(mustSetFocus);\n }\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): [boolean, boolean] => {\n // result: is state restored, must load on demand?\n if (!this.options.saveState) {\n return [false, false];\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return [false, false];\n } else {\n const mustLoadOnDemand =\n this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n }\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n } else if (!node.hasChildren()) {\n return false;\n } else {\n node.is_open = true;\n return level !== maxLevel;\n }\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n private setInitialStateOnDemand(cbFinished: () => void): void {\n const restoreState = (): boolean => {\n if (!this.options.saveState) {\n return false;\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return false;\n } else {\n this.saveStateHandler.setInitialStateOnDemand(\n state,\n cbFinished,\n );\n\n return true;\n }\n }\n };\n\n const autoOpenNodes = (): void => {\n const maxLevel = this.getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNodeInternal(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n const openNodes = (): void => {\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n\n return false;\n } else {\n this.openNodeInternal(node, false);\n\n return level !== maxLevel;\n }\n });\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n openNodes();\n };\n\n if (!restoreState()) {\n autoOpenNodes();\n }\n }\n\n private triggerEvent(\n eventName: string,\n values?: Record,\n ): JQuery.Event {\n const event = jQuery.Event(eventName, values);\n this.element.trigger(event);\n return event;\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["DataLoader","constructor","_ref","dataFilter","loadData","onLoadFailed","onLoading","treeElement","triggerEvent","this","loadFromUrl","urlInfo","parentNode","onFinished","element","getDomElement","addLoadingClass","notifyLoading","stopLoading","removeLoadingClass","submitRequest","data","parseData","jqXHR","classList","add","isLoading","node","$el","jQuery","parsedData","JSON","parse","remove","urlInfoInput","handleSuccess","handleError","ajaxSettings","cache","dataType","error","method","success","url","toUpperCase","ajax","getBoolString","value","getOffsetTop","getElementPosition","top","rect","getBoundingClientRect","left","x","window","scrollX","y","scrollY","DragElement","autoEscape","nodeName","offsetX","offsetY","createElement","appendChild","move","pageX","pageY","style","document","textContent","innerHTML","position","generateHitAreasForGroup","hitAreas","positionsInGroup","bottom","positionCount","Math","min","length","areaHeight","round","areaTop","i","push","generateHitAreas","tree","currentNode","treeBottom","generateHitAreasFromPositions","hitPositions","previousTop","group","generateHitPositions","lastTop","addHitPosition","iterateVisibleNodes","handleAfterOpenFolder","handleClosedFolder","handleFirstNode","handleNode","handleOpenFolder","isFirstNode","iterate","nextNode","mustIterateInside","is_open","hasChildren","offsetParent","childrenLength","children","forEach","_","child","nextChild","height","clientHeight","DragAndDropHandler","getNodeElement","getNodeElementForNode","getScrollLeft","getTree","onCanMove","onCanMoveTo","onDragMove","onDragStop","onIsMoveHandle","openFolderDelay","openNode","refreshElements","slide","hoveredArea","isDragging","currentItem","mouseCapture","positionInfo","target","mustCaptureElement","nodeElement","mouseDrag","dragElement","area","findHoveredArea","canMoveToArea","isFolder","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","originalEvent","mouseStart","refresh","name","mouseStop","moveItem","clear","removeHover","removeHitAreas","dimensions","getTreeDimensions","right","items","compareFn","low","high","mid","item","undefined","compareResult","binarySearch","treePosition","clientWidth","movedNode","targetNode","previousParent","parent","doMove","moveNode","move_info","do_move","moved_node","original_event","previous_parent","target_node","isDefaultPrevented","previousGhost","folder","openFolder","openFolderTimer","setTimeout","clearTimeout","addDropHint","ElementsRenderer","$element","buttonLeft","closedIcon","dragAndDrop","isNodeSelected","onCreateLi","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","render","fromNode","renderFromNode","renderFromRoot","$previousLi","li","createLi","getLevel","after","createDomElements","empty","attachNodeData","div","createTextNode","nodeType","isRootNode","level","ul","createUl","createFolderLi","isSelected","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","className","setAttribute","buttonLink","cloneNode","titleSpan","createTitleSpan","Boolean","isEmptyFolder","createNodeLi","liClasses","classString","join","classes","setTreeItemAriaAttributes","role","is_loading","KeyHandler","closeNode","getSelectedNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","addEventListener","handleKeyDown","deinit","removeEventListener","moveDown","selectedNode","getNextVisibleNode","moveUp","getPreviousVisibleNode","canHandleKeyboard","e","isKeyHandled","key","moveLeft","moveRight","preventDefault","getParent","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","handleClick","handleDblclick","mouseDown","passive","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","removeMouseMoveEventListeners","getClickTarget","button","closest","type","jqTreeElement","clickTarget","stopPropagation","click_event","handleMouseDown","handleMouseUp","handleStartMouse","handleMouseMove","cancelable","mouseMove","touchMove","mouseUp","touchEnd","mouseDelay","startMouseDelayTimer","touches","isNodeRecordWithChildren","Array","Node","nodeData","arguments","isRoot","nodeClass","load_on_demand","setData","idMapping","Map","addAfter","nodeInfo","createNode","childIndex","getChildIndex","addChildAtPosition","loadChildrenFromData","addBefore","addChild","setParent","index","splice","addNodeToIndex","id","set","addParent","newParent","originalParent","append","filter","f","result","indexOf","getData","getDataFromNodes","nodes","map","tmpNode","k","Object","prototype","hasOwnProperty","call","v","getLastChild","lastChild","getNextNode","nextSibling","getNextSibling","nextIndex","getNodeByCallback","callback","getNodeById","nodeId","get","getNodeByName","getNodeByNameMustExist","n","Error","getNodesByProperty","getPreviousNode","previousSibling","getPreviousSibling","previousIndex","initFromData","addChildren","childrenData","addNode","isParentOf","_iterate","loadFromData","removeChildren","childData","doRemoveChild","prepend","removeChild","removeNodeFromIndex","delete","o","getNodeClass","BorderDropHint","scrollLeft","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","moveAfter","moveBefore","moveInsideOpenFolder","moveInside","circleSpan","lineSpan","before","childElement","NodeElement","init","mustShowBorderDropHint","deselect","getTitleSpan","removeAttribute","blur","select","mustSetFocus","toString","focus","getUl","FolderElement","super","close","animationSpeed","getButton","icon","doClose","slideUp","hide","open","doOpen","slideDown","show","SaveStateHandler","addToSelection","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","getNodeIdToBeSelected","state","getStateFromStorage","selected_node","getState","open_nodes","getOpenNodeIds","openNodes","getSelectedNodeIds","selectedNodeIds","jsonData","loadFromStorage","parseState","stringify","localStorage","setItem","getKeyName","setInitialState","mustLoadOnDemand","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand","cbFinished","loadingCount","nodeIds","newNodesIds","loadAndOpenNode","getItem","selectCount","ContainerScrollParent","container","refreshHitAreas","checkHorizontalScrolling","newHorizontalScrollDirection","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","verticalScrollTimeout","scrollHorizontally","bind","checkVerticalScrolling","newVerticalScrollDirection","getNewVerticalScrollDirection","verticalScrollDirection","scrollVertically","scrollToY","scrollTop","stopScrolling","scrollParentTop","scrollParentBottom","scrollParentOffset","containerWidth","rightEdge","leftEdge","getScrollParentTop","getScrollParentBottom","containerHeight","distance","scrollBy","behavior","DocumentScrollParent","documentElement","treeTop","documentScrollHeight","documentScrollWidth","canScrollDown","getDocumentScrollHeight","canScrollRight","getDocumentScrollWidth","scrollHeight","scrollWidth","isNearLeftEdge","innerWidth","innerHeight","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","createScrollParent","parentElement","getParentWithOverflow","tagName","ScrollHandler","scrollParent","checkScrolling","getScrollParent","SelectNodeHandler","selectedNodes","Set","selectedSingleNode","getSelectedNodesUnder","has","includeChildren","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","fn","argument1","functionName","destroy","removeData","destroyWidget","_len","args","_key","callFunction","widgetFunction","apply","static","defaults","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","selectNodeHandler","openParents","appendNode","parentNodeParam","slideParam","createFolderElement","off","keyHandler","mouseHandler","getNodeByHtmlElement","inputElement","HTMLElement","saveStateHandler","getVersion","isInitialized","getRtlOption","getDefaultClosedIcon","connectHandlers","initData","dndHandler","doLoadData","loadDataFromUrl","param1","param2","param3","doLoadDataFromUrl","parseParams","openNodeInternal","prependNode","reload","removeNode","scrollToNode","scrollHandler","optionsParam","doSelectNode","setOption","option","setState","toggle","toJson","updateNode","idIsChanged","$treeElement","dataLoader","renderer","containsElement","createNodeElement","deselectCurrentNode","deselectNodes","selectedNodesUnderParent","loadSubtree","initTree","parent_node","tree_data","urlInfoParam","getDataUrlInfo","selectOptions","mustToggle","canSelect","previous_node","deselectedNode","deselected_node","getAutoOpenMaxLevel","parseInt","setUrlInfoData","selectedNodeId","getUrlFromString","liElement","dataRtl","doInit","activeElement","isSelectedNodeInSubtree","subtree","loadFolderOnDemand","doOpenNode","_node","_slide","_onFinished","mustSelect","selectCurrentNode","autoOpenNodes","maxLevel","isRestored","restoreState","eventName","values","event","Event","trigger"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"tree.jquery.js","sources":["src/dataLoader.ts","src/util.ts","src/dragAndDropHandler/dragElement.ts","src/dragAndDropHandler/iterateVisibleNodes.ts","src/dragAndDropHandler/generateHitAreas.ts","src/dragAndDropHandler/index.ts","src/dragAndDropHandler/binarySearch.ts","src/elementsRenderer.ts","src/keyHandler.ts","src/mouseUtils.ts","src/mouseHandler.ts","src/nodeUtils.ts","src/node.ts","src/nodeElement/borderDropHint.ts","src/nodeElement/ghostDropHint.ts","src/nodeElement/index.ts","src/nodeElement/folderElement.ts","src/saveStateHandler.ts","src/scrollHandler/scrollParent.ts","src/scrollHandler/containerScrollParent.ts","src/scrollHandler/documentScrollParent.ts","src/scrollHandler/createScrollParent.ts","src/scrollHandler.ts","src/selectNodeHandler.ts","src/simple.widget.ts","src/version.ts","src/tree.jquery.ts"],"sourcesContent":["import { LoadData, TriggerEvent } from \"./jqtreeMethodTypes\";\nimport { DataFilter, OnLoadFailed, OnLoading } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\n\nexport type HandleFinishedLoading = () => void;\n\ninterface DataLoaderParams {\n dataFilter?: DataFilter;\n loadData: LoadData;\n onLoadFailed?: OnLoadFailed;\n onLoading?: OnLoading;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\n\nexport default class DataLoader {\n private dataFilter?: DataFilter;\n private loadData: LoadData;\n private onLoadFailed?: OnLoadFailed;\n private onLoading?: OnLoading;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n }: DataLoaderParams) {\n this.dataFilter = dataFilter;\n this.loadData = loadData;\n this.onLoadFailed = onLoadFailed;\n this.onLoading = onLoading;\n this.treeElement = treeElement;\n this.triggerEvent = triggerEvent;\n }\n\n public loadFromUrl(\n urlInfo: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n if (!urlInfo) {\n return;\n }\n\n const element = this.getDomElement(parentNode);\n this.addLoadingClass(element);\n this.notifyLoading(true, parentNode, element);\n\n const stopLoading = (): void => {\n this.removeLoadingClass(element);\n this.notifyLoading(false, parentNode, element);\n };\n\n const handleSuccess = (data: NodeData[] | string): void => {\n stopLoading();\n this.loadData(this.parseData(data), parentNode);\n\n if (onFinished && typeof onFinished === \"function\") {\n onFinished();\n }\n };\n\n const handleError = (jqXHR: JQuery.jqXHR): void => {\n stopLoading();\n\n if (this.onLoadFailed) {\n this.onLoadFailed(jqXHR);\n }\n };\n\n this.submitRequest(urlInfo, handleSuccess, handleError);\n }\n\n private addLoadingClass(element: HTMLElement): void {\n element.classList.add(\"jqtree-loading\");\n }\n\n private getDomElement(parentNode: Node | null): HTMLElement {\n if (parentNode?.element) {\n return parentNode.element;\n } else {\n return this.treeElement;\n }\n }\n\n private notifyLoading(\n isLoading: boolean,\n node: Node | null,\n element: HTMLElement,\n ): void {\n const $el = jQuery(element);\n\n if (this.onLoading) {\n this.onLoading(isLoading, node, $el);\n }\n\n this.triggerEvent(\"tree.loading_data\", {\n $el,\n isLoading,\n node,\n });\n }\n\n private parseData(data: NodeData[] | string): NodeData[] {\n const getParsedData = () => {\n if (typeof data === \"string\") {\n return JSON.parse(data) as NodeData[];\n } else {\n return data;\n }\n };\n\n const parsedData = getParsedData();\n\n if (this.dataFilter) {\n return this.dataFilter(parsedData);\n } else {\n return parsedData;\n }\n }\n\n private removeLoadingClass(element: HTMLElement): void {\n element.classList.remove(\"jqtree-loading\");\n }\n\n private submitRequest(\n urlInfoInput: JQuery.AjaxSettings | string,\n handleSuccess: JQuery.Ajax.SuccessCallback,\n handleError: JQuery.Ajax.ErrorCallback,\n ): void {\n const urlInfo =\n typeof urlInfoInput === \"string\"\n ? { url: urlInfoInput }\n : urlInfoInput;\n\n const ajaxSettings: JQuery.AjaxSettings = {\n cache: false,\n dataType: \"json\",\n error: handleError,\n method: \"GET\",\n success: handleSuccess,\n ...urlInfo,\n };\n\n ajaxSettings.method = ajaxSettings.method?.toUpperCase() ?? \"GET\";\n\n void jQuery.ajax(ajaxSettings);\n }\n}\n","export const isInt = (n: unknown): boolean =>\n typeof n === \"number\" && n % 1 === 0;\n\nexport const isFunction = (v: unknown): boolean => typeof v === \"function\";\n\nexport const getBoolString = (value: unknown): string =>\n value ? \"true\" : \"false\";\n\nexport const getOffsetTop = (element: HTMLElement) =>\n getElementPosition(element).top;\n\nexport const getElementPosition = (element: HTMLElement) => {\n const rect = element.getBoundingClientRect();\n\n return {\n left: rect.x + window.scrollX,\n top: rect.y + window.scrollY,\n };\n};\n","interface DragElementParams {\n autoEscape: boolean;\n nodeName: string;\n offsetX: number;\n offsetY: number;\n treeElement: HTMLElement;\n}\n\nclass DragElement {\n private element: HTMLElement;\n private offsetX: number;\n private offsetY: number;\n\n constructor({\n autoEscape,\n nodeName,\n offsetX,\n offsetY,\n treeElement,\n }: DragElementParams) {\n this.offsetX = offsetX;\n this.offsetY = offsetY;\n\n this.element = this.createElement(nodeName, autoEscape);\n\n treeElement.appendChild(this.element);\n }\n\n 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","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, Position } from \"../node\";\nimport { getOffsetTop } from \"../util\";\nimport iterateVisibleNodes from \"./iterateVisibleNodes\";\nimport { HitArea } from \"./types\";\n\ninterface HitPosition {\n node: Node;\n position: null | Position;\n top: number;\n}\n\nexport const generateHitPositions = (\n tree: Node,\n currentNode: Node,\n): HitPosition[] => {\n const hitPositions: HitPosition[] = [];\n let lastTop = 0;\n\n const addHitPosition = (\n node: Node,\n position: null | Position,\n top: number,\n ) => {\n hitPositions.push({\n node,\n position,\n top,\n });\n lastTop = top;\n };\n\n const handleAfterOpenFolder = (node: Node, nextNode: Node | null) => {\n if (node === currentNode || nextNode === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, lastTop);\n } else {\n addHitPosition(node, \"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, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n\n // Cannot move before current item\n if (nextNode !== currentNode) {\n addHitPosition(node, \"after\", top);\n }\n }\n };\n\n const handleFirstNode = (node: Node) => {\n if (node !== currentNode && node.element) {\n addHitPosition(node, \"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, null, top);\n } else {\n addHitPosition(node, \"inside\", top);\n }\n\n if (nextNode === currentNode || node === currentNode) {\n // Cannot move before or after current item\n addHitPosition(node, null, top);\n } else {\n addHitPosition(node, \"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, null, top);\n\n if (height > 5) {\n // Subtract 5 pixels to allow more space for the next element.\n addHitPosition(node, null, 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, \"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) {\n hitAreas.push({\n bottom: areaTop + areaHeight,\n node: position.node,\n position: position.position,\n top: areaTop,\n });\n }\n\n areaTop += areaHeight;\n }\n};\n\nexport const generateHitAreasFromPositions = (\n hitPositions: HitPosition[],\n treeBottom: number,\n): HitArea[] => {\n if (!hitPositions.length) {\n return [];\n }\n\n let previousTop = (hitPositions[0] as HitPosition).top;\n let group: HitPosition[] = [];\n const hitAreas: HitArea[] = [];\n\n for (const position of hitPositions) {\n if (position.top !== previousTop && group.length) {\n generateHitAreasForGroup(\n hitAreas,\n group,\n previousTop,\n position.top,\n );\n\n previousTop = position.top;\n group = [];\n }\n\n group.push(position);\n }\n\n generateHitAreasForGroup(hitAreas, group, previousTop, treeBottom);\n\n return hitAreas;\n};\n\nconst generateHitAreas = (tree: Node, currentNode: Node, treeBottom: number) =>\n generateHitAreasFromPositions(\n generateHitPositions(tree, currentNode),\n treeBottom,\n );\n\nexport default generateHitAreas;\n","import {\n GetScrollLeft,\n GetTree,\n OpenNode,\n RefreshElements,\n TriggerEvent,\n} from \"../jqtreeMethodTypes\";\nimport {\n DragMethod,\n OnCanMove,\n OnCanMoveTo,\n OnIsMoveHandle,\n} from \"../jqtreeOptions\";\nimport { PositionInfo } from \"../mouseUtils\";\nimport { Node } from \"../node\";\nimport NodeElement from \"../nodeElement\";\nimport { getElementPosition } from \"../util\";\nimport binarySearch from \"./binarySearch\";\nimport DragElement from \"./dragElement\";\nimport generateHitAreas from \"./generateHitAreas\";\nimport { DropHint, HitArea } from \"./types\";\n\ninterface Dimensions {\n bottom: number;\n left: number;\n right: number;\n top: number;\n}\n\ninterface DragAndDropHandlerParams {\n autoEscape?: boolean;\n getNodeElement: GetNodeElement;\n getNodeElementForNode: GetNodeElementForNode;\n getScrollLeft: GetScrollLeft;\n getTree: GetTree;\n onCanMove?: OnCanMove;\n onCanMoveTo?: OnCanMoveTo;\n onDragMove?: DragMethod;\n onDragStop?: DragMethod;\n onIsMoveHandle?: OnIsMoveHandle;\n openFolderDelay: false | number;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n slide: boolean;\n treeElement: HTMLElement;\n triggerEvent: TriggerEvent;\n}\ntype GetNodeElement = (element: HTMLElement) => NodeElement | null;\n\ntype GetNodeElementForNode = (node: Node) => NodeElement;\n\nexport class DragAndDropHandler {\n public currentItem: NodeElement | null;\n public hitAreas: HitArea[];\n public hoveredArea: HitArea | null;\n public isDragging: boolean;\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: false | number;\n private openFolderTimer: null | number;\n private openNode: OpenNode;\n private previousGhost: DropHint | null;\n private refreshElements: RefreshElements;\n private slide: boolean;\n private treeElement: HTMLElement;\n private triggerEvent: TriggerEvent;\n\n constructor({\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 }: 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.openFolderDelay = openFolderDelay;\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 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, this.currentItem)) {\n if (!area.node.isFolder()) {\n this.stopOpenFolderTimer();\n }\n\n if (this.hoveredArea !== area) {\n this.hoveredArea = area;\n\n // If this is a closed folder, start timer to open it\n if (this.mustOpenFolderTimer(area)) {\n this.startOpenFolderTimer(area.node);\n } else {\n this.stopOpenFolderTimer();\n }\n\n this.updateDropHint();\n }\n } else {\n this.removeDropHint();\n this.stopOpenFolderTimer();\n this.hoveredArea = area;\n }\n\n if (!area) {\n if (this.onDragMove) {\n this.onDragMove(\n this.currentItem.node,\n positionInfo.originalEvent,\n );\n }\n }\n\n return true;\n }\n\n public mouseStart(positionInfo: PositionInfo): boolean {\n if (!this.currentItem) {\n return false;\n }\n\n this.refresh();\n\n const { left, top } = getElementPosition(positionInfo.target);\n\n const node = this.currentItem.node;\n\n this.dragElement = new DragElement({\n autoEscape: this.autoEscape ?? true,\n nodeName: node.name,\n offsetX: positionInfo.pageX - left,\n offsetY: positionInfo.pageY - top,\n treeElement: this.treeElement,\n });\n\n this.isDragging = true;\n this.currentItem.element.classList.add(\"jqtree-moving\");\n\n return true;\n }\n\n public mouseStop(positionInfo: PositionInfo): boolean {\n this.moveItem(positionInfo);\n this.clear();\n this.removeHover();\n this.removeDropHint();\n this.removeHitAreas();\n\n const currentItem = this.currentItem;\n\n if (this.currentItem) {\n this.currentItem.element.classList.remove(\"jqtree-moving\");\n this.currentItem = null;\n }\n\n this.isDragging = false;\n\n if (!this.hoveredArea && currentItem) {\n if (this.onDragStop) {\n this.onDragStop(currentItem.node, positionInfo.originalEvent);\n }\n }\n\n return false;\n }\n\n public refresh(): void {\n this.removeHitAreas();\n\n if (this.currentItem) {\n const currentNode = this.currentItem.node;\n this.generateHitAreas(currentNode);\n this.currentItem = this.getNodeElementForNode(currentNode);\n\n if (this.isDragging) {\n this.currentItem.element.classList.add(\"jqtree-moving\");\n }\n }\n }\n\n private canMoveToArea(area: HitArea, currentItem: NodeElement): boolean {\n if (!this.onCanMoveTo) {\n return true;\n }\n\n return this.onCanMoveTo(currentItem.node, area.node, area.position);\n }\n\n private clear(): void {\n if (this.dragElement) {\n this.dragElement.remove();\n this.dragElement = null;\n }\n }\n\n private findHoveredArea(x: number, y: number): HitArea | null {\n const dimensions = this.getTreeDimensions();\n\n if (\n x < dimensions.left ||\n y < dimensions.top ||\n x > dimensions.right ||\n y > dimensions.bottom\n ) {\n return null;\n }\n\n return binarySearch(this.hitAreas, (area) => {\n if (y < area.top) {\n return 1;\n } else if (y > area.bottom) {\n return -1;\n } else {\n return 0;\n }\n });\n }\n\n private generateHitAreas(currentNode: Node): void {\n const tree = this.getTree();\n\n if (!tree) {\n this.hitAreas = [];\n } else {\n this.hitAreas = generateHitAreas(\n tree,\n currentNode,\n this.getTreeDimensions().bottom,\n );\n }\n }\n\n private getTreeDimensions(): Dimensions {\n // Return the dimensions of the tree. Add a margin to the bottom to allow\n // to drag-and-drop after the last element.\n const treePosition = getElementPosition(this.treeElement);\n const left = treePosition.left + this.getScrollLeft();\n const top = treePosition.top;\n\n return {\n bottom: top + this.treeElement.clientHeight + 16,\n left,\n right: left + this.treeElement.clientWidth,\n top,\n };\n }\n\n /* Move the dragged node to the selected position in the tree. */\n private moveItem(positionInfo: PositionInfo): void {\n if (\n this.currentItem &&\n this.hoveredArea?.position &&\n this.canMoveToArea(this.hoveredArea, this.currentItem)\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 === \"inside\") {\n this.hoveredArea.node.is_open = true;\n }\n\n const doMove = (): void => {\n const tree = this.getTree();\n\n if (tree) {\n tree.moveNode(movedNode, targetNode, position);\n\n this.treeElement.textContent = \"\";\n this.refreshElements(null);\n }\n };\n\n const event = this.triggerEvent(\"tree.move\", {\n move_info: {\n do_move: doMove,\n moved_node: movedNode,\n original_event: positionInfo.originalEvent,\n position,\n previous_parent: previousParent,\n target_node: targetNode,\n },\n });\n\n if (!event.isDefaultPrevented()) {\n doMove();\n }\n }\n }\n\n private mustCaptureElement(element: HTMLElement): boolean {\n const nodeName = element.nodeName;\n\n return (\n nodeName !== \"INPUT\" &&\n nodeName !== \"SELECT\" &&\n nodeName !== \"TEXTAREA\"\n );\n }\n\n private mustOpenFolderTimer(area: HitArea): boolean {\n const node = area.node;\n\n return node.isFolder() && !node.is_open && area.position === \"inside\";\n }\n\n private removeDropHint(): void {\n if (this.previousGhost) {\n this.previousGhost.remove();\n }\n }\n\n private removeHitAreas(): void {\n this.hitAreas = [];\n }\n\n private removeHover(): void {\n this.hoveredArea = null;\n }\n\n private startOpenFolderTimer(folder: Node): void {\n const openFolder = (): void => {\n this.openNode(folder, this.slide, () => {\n this.refresh();\n this.updateDropHint();\n });\n };\n\n this.stopOpenFolderTimer();\n\n const openFolderDelay = this.openFolderDelay;\n\n if (openFolderDelay !== false) {\n this.openFolderTimer = window.setTimeout(\n openFolder,\n openFolderDelay,\n );\n }\n }\n\n private stopOpenFolderTimer(): void {\n if (this.openFolderTimer) {\n clearTimeout(this.openFolderTimer);\n this.openFolderTimer = null;\n }\n }\n\n private updateDropHint(): void {\n if (!this.hoveredArea) {\n return;\n }\n\n // remove previous drop hint\n this.removeDropHint();\n\n // add new drop hint\n const nodeElement = this.getNodeElementForNode(this.hoveredArea.node);\n this.previousGhost = nodeElement.addDropHint(this.hoveredArea.position);\n }\n}\n","function binarySearch(items: T[], compareFn: (a: T) => number): null | T {\n let low = 0;\n let high = items.length;\n\n while (low < high) {\n const mid = (low + high) >> 1;\n const item = items[mid];\n\n if (item === undefined) {\n return null;\n }\n\n const compareResult = compareFn(item);\n\n if (compareResult > 0) {\n high = mid;\n } else if (compareResult < 0) {\n low = mid + 1;\n } else {\n return item;\n }\n }\n\n return null;\n}\n\nexport default binarySearch;\n","import { GetTree, IsNodeSelected } from \"./jqtreeMethodTypes\";\nimport { IconElement, OnCreateLi } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { getBoolString } from \"./util\";\n\ninterface ElementsRendererParams {\n $element: JQuery;\n autoEscape: boolean;\n buttonLeft: boolean;\n closedIcon?: IconElement;\n dragAndDrop: boolean;\n getTree: GetTree;\n isNodeSelected: IsNodeSelected;\n onCreateLi?: OnCreateLi;\n openedIcon?: IconElement;\n rtl?: boolean;\n showEmptyFolder: boolean;\n tabIndex?: number;\n}\n\nexport default class ElementsRenderer {\n public closedIconElement?: HTMLElement | Text;\n public openedIconElement?: HTMLElement | Text;\n private $element: JQuery;\n private autoEscape: boolean;\n private buttonLeft: boolean;\n private dragAndDrop: boolean;\n private getTree: GetTree;\n private isNodeSelected: IsNodeSelected;\n private onCreateLi?: OnCreateLi;\n private rtl?: boolean;\n\n private showEmptyFolder: boolean;\n private tabIndex?: number;\n\n constructor({\n $element,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n }: ElementsRendererParams) {\n this.autoEscape = autoEscape;\n this.buttonLeft = buttonLeft;\n this.dragAndDrop = dragAndDrop;\n this.$element = $element;\n this.getTree = getTree;\n this.isNodeSelected = isNodeSelected;\n this.onCreateLi = onCreateLi;\n this.rtl = rtl;\n this.showEmptyFolder = showEmptyFolder;\n this.tabIndex = tabIndex;\n this.openedIconElement = this.createButtonElement(openedIcon ?? \"+\");\n this.closedIconElement = this.createButtonElement(closedIcon ?? \"-\");\n }\n\n public render(fromNode: Node | null): void {\n if (fromNode?.parent) {\n this.renderFromNode(fromNode);\n } else {\n this.renderFromRoot();\n }\n }\n\n public renderFromNode(node: Node): void {\n if (!node.element) {\n return;\n }\n\n // remember current li\n const $previousLi = jQuery(node.element);\n\n // create element\n const li = this.createLi(node, node.getLevel());\n\n // add element to dom\n $previousLi.after(li);\n\n // remove previous li\n $previousLi.remove();\n\n // create children\n this.createDomElements(li, node.children, false, node.getLevel() + 1);\n }\n\n public renderFromRoot(): void {\n this.$element.empty();\n\n const tree = this.getTree();\n\n if (this.$element[0] && tree) {\n this.createDomElements(this.$element[0], tree.children, true, 1);\n }\n }\n\n private attachNodeData(node: Node, li: HTMLElement): void {\n node.element = li;\n jQuery(li).data(\"node\", node);\n }\n\n private createButtonElement(\n value: IconElement,\n ): HTMLElement | Text | undefined {\n if (typeof value === \"string\") {\n // convert value to html\n const div = document.createElement(\"div\");\n div.innerHTML = value;\n\n return document.createTextNode(div.innerHTML);\n } else if ((value as HTMLElement).nodeType) {\n return value as HTMLElement;\n } else {\n return jQuery(value)[0];\n }\n }\n\n private createDomElements(\n element: Element,\n children: Node[],\n isRootNode: boolean,\n level: number,\n ): void {\n const ul = this.createUl(isRootNode);\n element.appendChild(ul);\n\n for (const child of children) {\n const li = this.createLi(child, level);\n ul.appendChild(li);\n\n if (child.hasChildren()) {\n this.createDomElements(li, child.children, false, level + 1);\n }\n }\n }\n\n private createFolderLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const buttonClasses = this.getButtonClasses(node);\n const folderClasses = this.getFolderClasses(node, isSelected);\n\n const iconElement = node.is_open\n ? this.openedIconElement\n : this.closedIconElement;\n\n // li\n const li = document.createElement(\"li\");\n li.className = `jqtree_common ${folderClasses}`;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // button link\n const buttonLink = document.createElement(\"a\");\n buttonLink.className = buttonClasses;\n\n if (iconElement) {\n buttonLink.appendChild(iconElement.cloneNode(true));\n }\n\n if (this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n true,\n level,\n );\n titleSpan.setAttribute(\"aria-expanded\", getBoolString(node.is_open));\n div.appendChild(titleSpan);\n\n if (!this.buttonLeft) {\n div.appendChild(buttonLink);\n }\n\n return li;\n }\n\n /* Create the
  • element\n * Attach it to node.element.\n * Call onCreateLi\n */\n private createLi(node: Node, level: number): HTMLLIElement {\n const isSelected = Boolean(this.isNodeSelected(node));\n\n const mustShowFolder =\n node.isFolder() || (node.isEmptyFolder && this.showEmptyFolder);\n\n const li = mustShowFolder\n ? this.createFolderLi(node, level, isSelected)\n : this.createNodeLi(node, level, isSelected);\n\n this.attachNodeData(node, li);\n\n if (this.onCreateLi) {\n this.onCreateLi(node, jQuery(li), isSelected);\n }\n\n return li;\n }\n\n private createNodeLi(\n node: Node,\n level: number,\n isSelected: boolean,\n ): HTMLLIElement {\n const liClasses = [\"jqtree_common\"];\n\n if (isSelected) {\n liClasses.push(\"jqtree-selected\");\n }\n\n const classString = liClasses.join(\" \");\n\n // li\n const li = document.createElement(\"li\");\n li.className = classString;\n li.setAttribute(\"role\", \"none\");\n\n // div\n const div = document.createElement(\"div\");\n div.className = \"jqtree-element jqtree_common\";\n div.setAttribute(\"role\", \"none\");\n\n li.appendChild(div);\n\n // title span\n const titleSpan = this.createTitleSpan(\n node.name,\n isSelected,\n false,\n level,\n );\n div.appendChild(titleSpan);\n\n return li;\n }\n\n private createTitleSpan(\n nodeName: string,\n isSelected: boolean,\n isFolder: boolean,\n level: number,\n ): HTMLSpanElement {\n const titleSpan = document.createElement(\"span\");\n\n let classes = \"jqtree-title jqtree_common\";\n\n if (isFolder) {\n classes += \" jqtree-title-folder\";\n }\n\n classes += ` jqtree-title-button-${this.buttonLeft ? \"left\" : \"right\"}`;\n\n titleSpan.className = classes;\n\n if (isSelected) {\n const tabIndex = this.tabIndex;\n\n if (tabIndex !== undefined) {\n titleSpan.setAttribute(\"tabindex\", `${tabIndex}`);\n }\n }\n\n this.setTreeItemAriaAttributes(titleSpan, nodeName, level, isSelected);\n\n if (this.autoEscape) {\n titleSpan.textContent = nodeName;\n } else {\n titleSpan.innerHTML = nodeName;\n }\n\n return titleSpan;\n }\n\n private createUl(isRootNode: boolean): HTMLUListElement {\n let classString;\n let role;\n\n if (!isRootNode) {\n classString = \"\";\n role = \"group\";\n } else {\n classString = \"jqtree-tree\";\n role = \"tree\";\n\n if (this.rtl) {\n classString += \" jqtree-rtl\";\n }\n }\n\n if (this.dragAndDrop) {\n classString += \" jqtree-dnd\";\n }\n\n const ul = document.createElement(\"ul\");\n ul.className = `jqtree_common ${classString}`;\n\n ul.setAttribute(\"role\", role);\n\n return ul;\n }\n\n private getButtonClasses(node: Node): string {\n const classes = [\"jqtree-toggler\", \"jqtree_common\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (this.buttonLeft) {\n classes.push(\"jqtree-toggler-left\");\n } else {\n classes.push(\"jqtree-toggler-right\");\n }\n\n return classes.join(\" \");\n }\n\n private getFolderClasses(node: Node, isSelected: boolean): string {\n const classes = [\"jqtree-folder\"];\n\n if (!node.is_open) {\n classes.push(\"jqtree-closed\");\n }\n\n if (isSelected) {\n classes.push(\"jqtree-selected\");\n }\n\n if (node.is_loading) {\n classes.push(\"jqtree-loading\");\n }\n\n return classes.join(\" \");\n }\n\n private setTreeItemAriaAttributes(\n element: HTMLElement,\n name: string,\n level: number,\n isSelected: boolean,\n ) {\n element.setAttribute(\"aria-label\", name);\n element.setAttribute(\"aria-level\", `${level}`);\n element.setAttribute(\"aria-selected\", getBoolString(isSelected));\n element.setAttribute(\"role\", \"treeitem\");\n }\n}\n","import {\n CloseNode,\n GetSelectedNode,\n IsFocusOnTree,\n OpenNode,\n SelectNode,\n} from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface KeyHandlerParams {\n closeNode: CloseNode;\n getSelectedNode: GetSelectedNode;\n isFocusOnTree: IsFocusOnTree;\n keyboardSupport: boolean;\n openNode: OpenNode;\n selectNode: SelectNode;\n}\n\nexport default class KeyHandler {\n private closeNode: CloseNode;\n private getSelectedNode: GetSelectedNode;\n\n private isFocusOnTree: IsFocusOnTree;\n\n private keyboardSupport: boolean;\n private openNode: OpenNode;\n private originalSelectNode: SelectNode;\n constructor({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n }: KeyHandlerParams) {\n this.closeNode = closeNode;\n this.getSelectedNode = getSelectedNode;\n this.isFocusOnTree = isFocusOnTree;\n this.keyboardSupport = keyboardSupport;\n this.openNode = openNode;\n this.originalSelectNode = selectNode;\n\n if (keyboardSupport) {\n document.addEventListener(\"keydown\", this.handleKeyDown);\n }\n }\n\n public deinit(): void {\n if (this.keyboardSupport) {\n document.removeEventListener(\"keydown\", this.handleKeyDown);\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 private canHandleKeyboard(): boolean {\n return this.keyboardSupport && this.isFocusOnTree();\n }\n\n private handleKeyDown = (e: KeyboardEvent): void => {\n if (!this.canHandleKeyboard()) {\n return;\n }\n\n let isKeyHandled = false;\n\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n switch (e.key) {\n case \"ArrowDown\":\n isKeyHandled = this.moveDown(selectedNode);\n break;\n\n case \"ArrowLeft\":\n isKeyHandled = this.moveLeft(selectedNode);\n break;\n\n case \"ArrowRight\":\n isKeyHandled = this.moveRight(selectedNode);\n break;\n\n case \"ArrowUp\":\n isKeyHandled = this.moveUp(selectedNode);\n break;\n }\n }\n\n if (isKeyHandled) {\n e.preventDefault();\n }\n };\n\n private moveLeft(selectedNode: Node): boolean {\n if (selectedNode.isFolder() && selectedNode.is_open) {\n // Left on an open node closes the node\n this.closeNode(selectedNode);\n return true;\n } else {\n // Left on a closed or end node moves focus to the node's parent\n return this.selectNode(selectedNode.getParent());\n }\n }\n\n private moveRight(selectedNode: Node): boolean {\n if (!selectedNode.isFolder()) {\n return false;\n } else {\n // folder node\n if (selectedNode.is_open) {\n // Right moves to the first child of an open node\n return this.selectNode(selectedNode.getNextVisibleNode());\n } else {\n // Right expands a closed node\n this.openNode(selectedNode);\n return true;\n }\n }\n }\n\n /* Select the node.\n * Don't do anything if the node is null.\n * Result: a different node was selected.\n */\n private selectNode(node: Node | null): boolean {\n if (!node) {\n return false;\n } else {\n this.originalSelectNode(node);\n\n return true;\n }\n }\n}\n","export interface PositionInfo {\n originalEvent: Event;\n pageX: number;\n pageY: number;\n target: HTMLElement;\n}\n\nexport const getPositionInfoFromMouseEvent = (e: MouseEvent): PositionInfo => ({\n originalEvent: e,\n pageX: e.pageX,\n pageY: e.pageY,\n target: e.target as HTMLElement,\n});\n\nexport const getPositionInfoFromTouch = (\n touch: Touch,\n e: TouchEvent,\n): PositionInfo => ({\n originalEvent: e,\n pageX: touch.pageX,\n pageY: touch.pageY,\n target: touch.target as HTMLElement,\n});\n","import { TriggerEvent } from \"./jqtreeMethodTypes\";\nimport {\n getPositionInfoFromMouseEvent,\n getPositionInfoFromTouch,\n PositionInfo,\n} from \"./mouseUtils\";\nimport { Node } from \"./node\";\n\nexport type GetNode = (element: HTMLElement) => Node | null;\nexport type MouseCapture = (positionInfo: PositionInfo) => boolean | null;\nexport type MouseStart = (positionInfo: PositionInfo) => boolean;\n\ninterface ClickTarget {\n node: Node;\n type: \"button\" | \"label\";\n}\n\ninterface MouseHandlerParams {\n element: HTMLElement;\n getMouseDelay: () => number;\n getNode: GetNode;\n onClickButton: (node: Node) => void;\n onClickTitle: (node: Node) => void;\n onMouseCapture: MouseCapture;\n onMouseDrag: (positionInfo: PositionInfo) => void;\n onMouseStart: MouseStart;\n onMouseStop: (positionInfo: PositionInfo) => void;\n triggerEvent: TriggerEvent;\n useContextMenu: boolean;\n}\n\nclass MouseHandler {\n private element: HTMLElement;\n private getMouseDelay: () => number;\n private getNode: GetNode;\n\n private isMouseDelayMet: boolean;\n\n private isMouseStarted: boolean;\n\n private mouseDelayTimer: null | number;\n\n private mouseDownInfo: null | PositionInfo;\n private onClickButton: (node: Node) => void;\n private onClickTitle: (node: Node) => void;\n\n private onMouseCapture: (positionInfo: PositionInfo) => boolean | null;\n\n private onMouseDrag: (positionInfo: PositionInfo) => void;\n\n private onMouseStart: (positionInfo: PositionInfo) => boolean;\n\n private onMouseStop: (positionInfo: PositionInfo) => void;\n\n private triggerEvent: TriggerEvent;\n private useContextMenu: boolean;\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 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 private getClickTarget(element: HTMLElement): ClickTarget | null {\n const button = element.closest(\".jqtree-toggler\");\n\n if (button) {\n const node = this.getNode(button);\n\n if (node) {\n return {\n node,\n type: \"button\",\n };\n }\n } else {\n const jqTreeElement =\n element.closest(\".jqtree-element\");\n\n if (jqTreeElement) {\n const node = this.getNode(jqTreeElement);\n if (node) {\n return {\n node,\n type: \"label\",\n };\n }\n }\n }\n\n return null;\n }\n private handleClick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (!clickTarget) {\n return;\n }\n\n switch (clickTarget.type) {\n case \"button\":\n this.onClickButton(clickTarget.node);\n\n e.preventDefault();\n e.stopPropagation();\n break;\n\n case \"label\": {\n const event = this.triggerEvent(\"tree.click\", {\n click_event: e,\n node: clickTarget.node,\n });\n\n if (!event.isDefaultPrevented()) {\n this.onClickTitle(clickTarget.node);\n }\n break;\n }\n }\n };\n\n private handleContextmenu = (e: MouseEvent) => {\n if (!e.target) {\n return;\n }\n\n const div = (e.target as HTMLElement).closest(\n \"ul.jqtree-tree .jqtree-element\",\n );\n\n if (div) {\n const node = this.getNode(div);\n if (node) {\n e.preventDefault();\n e.stopPropagation();\n\n this.triggerEvent(\"tree.contextmenu\", {\n click_event: e,\n node,\n });\n return false;\n }\n }\n\n return null;\n };\n\n private handleDblclick = (e: MouseEvent): void => {\n if (!e.target) {\n return;\n }\n\n const clickTarget = this.getClickTarget(e.target as HTMLElement);\n\n if (clickTarget?.type === \"label\") {\n this.triggerEvent(\"tree.dblclick\", {\n click_event: e,\n node: clickTarget.node,\n });\n }\n };\n\n private handleMouseDown(positionInfo: PositionInfo): boolean {\n // We may have missed mouseup (out of window)\n if (this.isMouseStarted) {\n this.handleMouseUp(positionInfo);\n }\n\n this.mouseDownInfo = positionInfo;\n\n if (!this.onMouseCapture(positionInfo)) {\n return false;\n }\n\n this.handleStartMouse();\n\n return true;\n }\n\n private handleMouseMove(\n e: MouseEvent | TouchEvent,\n positionInfo: PositionInfo,\n ): void {\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n return;\n }\n\n if (!this.isMouseDelayMet) {\n return;\n }\n\n if (this.mouseDownInfo) {\n this.isMouseStarted = this.onMouseStart(this.mouseDownInfo);\n }\n\n if (this.isMouseStarted) {\n this.onMouseDrag(positionInfo);\n\n if (e.cancelable) {\n e.preventDefault();\n }\n } else {\n this.handleMouseUp(positionInfo);\n }\n }\n private handleMouseUp(positionInfo: PositionInfo): void {\n this.removeMouseMoveEventListeners();\n this.isMouseDelayMet = false;\n this.mouseDownInfo = null;\n\n if (this.isMouseStarted) {\n this.isMouseStarted = false;\n this.onMouseStop(positionInfo);\n }\n }\n\n private handleStartMouse(): void {\n document.addEventListener(\"mousemove\", this.mouseMove, {\n passive: false,\n });\n document.addEventListener(\"touchmove\", this.touchMove, {\n passive: false,\n });\n document.addEventListener(\"mouseup\", this.mouseUp, { passive: false });\n document.addEventListener(\"touchend\", this.touchEnd, {\n passive: false,\n });\n\n const mouseDelay = this.getMouseDelay();\n\n if (mouseDelay) {\n this.startMouseDelayTimer(mouseDelay);\n } else {\n this.isMouseDelayMet = true;\n }\n }\n\n private 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 mouseMove = (e: MouseEvent): void => {\n this.handleMouseMove(e, getPositionInfoFromMouseEvent(e));\n };\n\n private mouseUp = (e: MouseEvent): void => {\n this.handleMouseUp(getPositionInfoFromMouseEvent(e));\n };\n\n private removeMouseMoveEventListeners() {\n document.removeEventListener(\"mousemove\", this.mouseMove);\n document.removeEventListener(\"touchmove\", this.touchMove);\n document.removeEventListener(\"mouseup\", this.mouseUp);\n document.removeEventListener(\"touchend\", this.touchEnd);\n }\n\n private startMouseDelayTimer(mouseDelay: number): void {\n if (this.mouseDelayTimer) {\n clearTimeout(this.mouseDelayTimer);\n }\n\n this.mouseDelayTimer = window.setTimeout(() => {\n if (this.mouseDownInfo) {\n this.isMouseDelayMet = true;\n }\n }, mouseDelay);\n\n this.isMouseDelayMet = false;\n }\n\n private touchEnd = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseUp(getPositionInfoFromTouch(touch, e));\n };\n\n private touchMove = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseMove(e, getPositionInfoFromTouch(touch, e));\n };\n\n private touchStart = (e: TouchEvent): void => {\n if (e.touches.length > 1) {\n return;\n }\n\n const touch = e.touches[0];\n\n if (!touch) {\n return;\n }\n\n this.handleMouseDown(getPositionInfoFromTouch(touch, e));\n };\n}\n\nexport default MouseHandler;\n","interface NodeRecordWithChildren extends NodeRecord {\n children: NodeData[];\n}\n\nexport const isNodeRecordWithChildren = (\n data: NodeData,\n): data is NodeRecordWithChildren =>\n typeof data === \"object\" &&\n \"children\" in data &&\n data.children instanceof Array;\n","import { isNodeRecordWithChildren } from \"./nodeUtils\";\n\nexport type Position = \"after\" | \"before\" | \"inside\";\n\ntype IterateCallback = (node: Node, level: number) => boolean;\n\nexport class Node implements INode {\n [key: string]: unknown;\n\n public children: Node[];\n public element?: HTMLElement;\n public id?: NodeId;\n public idMapping: Map;\n public is_loading: boolean;\n public is_open: boolean;\n public isEmptyFolder: boolean;\n public load_on_demand: boolean;\n public name: string;\n public nodeClass?: typeof Node;\n public parent: Node | null;\n public tree?: Node;\n\n constructor(\n nodeData: NodeData | null = null,\n isRoot = false,\n nodeClass = Node,\n ) {\n this.name = \"\";\n this.load_on_demand = false;\n\n this.isEmptyFolder =\n nodeData != null &&\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length === 0;\n\n this.setData(nodeData);\n\n this.children = [];\n this.parent = null;\n\n if (isRoot) {\n this.idMapping = new Map();\n this.tree = this;\n this.nodeClass = nodeClass;\n }\n }\n\n public addAfter(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex + 1);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n public addBefore(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const node = this.createNode(nodeInfo);\n\n const childIndex = this.parent.getChildIndex(this);\n this.parent.addChildAtPosition(node, childIndex);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n }\n\n /*\n Add child.\n\n tree.addChild(\n new Node('child1')\n );\n */\n public addChild(node: Node): void {\n this.children.push(node);\n node.setParent(this);\n }\n\n /*\n Add child at position. Index starts at 0.\n\n tree.addChildAtPosition(\n new Node('abc'),\n 1\n );\n */\n public addChildAtPosition(node: Node, index: number): void {\n this.children.splice(index, 0, node);\n node.setParent(this);\n }\n\n public addNodeToIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.set(node.id, node);\n }\n }\n\n public addParent(nodeInfo: NodeData): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const newParent = this.createNode(nodeInfo);\n\n if (this.tree) {\n newParent.setParent(this.tree);\n }\n const originalParent = this.parent;\n\n for (const child of originalParent.children) {\n newParent.addChild(child);\n }\n\n originalParent.children = [];\n originalParent.addChild(newParent);\n return newParent;\n }\n }\n\n public append(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChild(node);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public filter(f: (node: Node) => boolean): Node[] {\n const result: Node[] = [];\n\n this.iterate((node: Node) => {\n if (f(node)) {\n result.push(node);\n }\n\n return true;\n });\n\n return result;\n }\n\n /*\n Get child index.\n\n var index = getChildIndex(node);\n */\n public getChildIndex(node: Node): number {\n return this.children.indexOf(node);\n }\n\n /*\n Get the tree as data.\n */\n public getData(includeParent = false): NodeRecord[] {\n const getDataFromNodes = (nodes: Node[]): Record[] => {\n return nodes.map((node) => {\n const tmpNode: Record = {};\n\n for (const k in node) {\n if (\n [\n \"parent\",\n \"children\",\n \"element\",\n \"idMapping\",\n \"load_on_demand\",\n \"nodeClass\",\n \"tree\",\n \"isEmptyFolder\",\n ].indexOf(k) === -1 &&\n Object.prototype.hasOwnProperty.call(node, k)\n ) {\n const v = node[k];\n tmpNode[k] = v;\n }\n }\n\n if (node.hasChildren()) {\n tmpNode.children = getDataFromNodes(node.children);\n }\n\n return tmpNode;\n });\n };\n\n if (includeParent) {\n return getDataFromNodes([this]);\n } else {\n return getDataFromNodes(this.children);\n }\n }\n\n public getLastChild(): Node | null {\n if (!this.hasChildren()) {\n return null;\n } else {\n const lastChild = this.children[this.children.length - 1];\n\n if (!lastChild) {\n return null;\n }\n\n if (!(lastChild.hasChildren() && lastChild.is_open)) {\n return lastChild;\n } else {\n return lastChild.getLastChild();\n }\n }\n }\n\n public getLevel(): number {\n let level = 0;\n let node: Node = this; // eslint-disable-line @typescript-eslint/no-this-alias\n\n while (node.parent) {\n level += 1;\n node = node.parent;\n }\n\n return level;\n }\n\n public getNextNode(includeChildren = true): Node | null {\n if (includeChildren && this.hasChildren()) {\n return this.children[0] ?? null;\n } else if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n\n if (nextSibling) {\n return nextSibling;\n } else {\n return this.parent.getNextNode(false);\n }\n }\n }\n\n public getNextSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const nextIndex = this.parent.getChildIndex(this) + 1;\n if (nextIndex < this.parent.children.length) {\n return this.parent.children[nextIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getNextVisibleNode(): Node | null {\n if (this.hasChildren() && this.is_open) {\n // First child\n return this.children[0] ?? null;\n } else {\n if (!this.parent) {\n return null;\n } else {\n const nextSibling = this.getNextSibling();\n if (nextSibling) {\n // Next sibling\n return nextSibling;\n } else {\n // Next node of parent\n return this.parent.getNextNode(false);\n }\n }\n }\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n let result: Node | null = null;\n\n this.iterate((node: Node) => {\n if (result) {\n return false;\n } else if (callback(node)) {\n result = node;\n return false;\n } else {\n return true;\n }\n });\n\n return result;\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.idMapping.get(nodeId) ?? null;\n }\n\n public getNodeByName(name: string): Node | null {\n return this.getNodeByCallback((node: Node) => node.name === name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n const node = this.getNodeByCallback((n: Node) => n.name === name);\n\n if (!node) {\n throw new Error(`Node with name ${name} not found`);\n }\n\n return node;\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.filter((node: Node) => node[key] === value);\n }\n\n public getParent(): Node | null {\n // Return parent except if it is the root node\n if (!this.parent) {\n return null;\n } else if (!this.parent.parent) {\n // Root node -> null\n return null;\n } else {\n return this.parent;\n }\n }\n\n public getPreviousNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (previousSibling.hasChildren()) {\n return previousSibling.getLastChild();\n } else {\n return previousSibling;\n }\n }\n }\n\n public getPreviousSibling(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousIndex = this.parent.getChildIndex(this) - 1;\n if (previousIndex >= 0) {\n return this.parent.children[previousIndex] ?? null;\n } else {\n return null;\n }\n }\n }\n\n public getPreviousVisibleNode(): Node | null {\n if (!this.parent) {\n return null;\n } else {\n const previousSibling = this.getPreviousSibling();\n\n if (!previousSibling) {\n return this.getParent();\n } else if (\n !previousSibling.hasChildren() ||\n !previousSibling.is_open\n ) {\n // Previous sibling\n return previousSibling;\n } else {\n // Last child of previous sibling\n return previousSibling.getLastChild();\n }\n }\n }\n\n /*\n Does the tree have children?\n\n if (tree.hasChildren()) {\n //\n }\n */\n public hasChildren(): boolean {\n return this.children.length !== 0;\n }\n\n // Init Node from data without making it the root of the tree\n public initFromData(data: NodeData): void {\n const addNode = (nodeData: NodeData): void => {\n this.setData(nodeData);\n\n if (\n isNodeRecordWithChildren(nodeData) &&\n nodeData.children.length\n ) {\n addChildren(nodeData.children);\n }\n };\n\n const addChildren = (childrenData: NodeData[]): void => {\n for (const child of childrenData) {\n const node = this.createNode();\n node.initFromData(child);\n this.addChild(node);\n }\n };\n\n addNode(data);\n }\n\n public isFolder(): boolean {\n return this.hasChildren() || this.load_on_demand;\n }\n\n public isParentOf(node: Node): boolean {\n let parent = node.parent;\n\n while (parent) {\n if (parent === this) {\n return true;\n }\n\n parent = parent.parent;\n }\n\n return false;\n }\n\n /*\n Iterate over all the nodes in the tree.\n\n Calls callback with (node, level).\n\n The callback must return true to continue the iteration on current node.\n\n tree.iterate(\n function(node, level) {\n console.log(node.name);\n\n // stop iteration after level 2\n return (level <= 2);\n }\n );\n\n */\n public iterate(callback: IterateCallback): void {\n const _iterate = (node: Node, level: number): void => {\n for (const child of node.children) {\n const result = callback(child, level);\n\n if (result && child.hasChildren()) {\n _iterate(child, level + 1);\n }\n }\n };\n\n _iterate(this, 0);\n }\n\n /*\n Create tree from data.\n\n Structure of data is:\n [\n {\n name: 'node1',\n children: [\n { name: 'child1' },\n { name: 'child2' }\n ]\n },\n {\n name: 'node2'\n }\n ]\n */\n public loadFromData(data: NodeData[]): this {\n this.removeChildren();\n\n for (const childData of data) {\n const node = this.createNode(childData);\n this.addChild(node);\n\n if (isNodeRecordWithChildren(childData)) {\n node.loadFromData(childData.children);\n }\n }\n\n return this;\n }\n\n /*\n Move node relative to another node.\n\n Argument position: Position.BEFORE, Position.AFTER or Position.Inside\n\n // move node1 after node2\n tree.moveNode(node1, node2, Position.AFTER);\n */\n public moveNode(\n movedNode: Node,\n targetNode: Node,\n position: Position,\n ): boolean {\n if (!movedNode.parent || movedNode.isParentOf(targetNode)) {\n // - Node is parent of target node\n // - Or, parent is empty\n return false;\n } else {\n movedNode.parent.doRemoveChild(movedNode);\n\n switch (position) {\n case \"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 \"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 \"inside\": {\n // move inside as first child\n targetNode.addChildAtPosition(movedNode, 0);\n return true;\n }\n }\n }\n }\n\n public prepend(nodeInfo: NodeData): Node {\n const node = this.createNode(nodeInfo);\n this.addChildAtPosition(node, 0);\n\n node.loadChildrenFromData(nodeInfo);\n return node;\n }\n\n public remove(): void {\n if (this.parent) {\n this.parent.removeChild(this);\n this.parent = null;\n }\n }\n\n /*\n Remove child. This also removes the children of the node.\n\n tree.removeChild(tree.children[0]);\n */\n public removeChild(node: Node): void {\n // remove children from the index\n node.removeChildren();\n\n this.doRemoveChild(node);\n }\n\n public removeChildren(): void {\n this.iterate((child: Node) => {\n this.tree?.removeNodeFromIndex(child);\n return true;\n });\n\n this.children = [];\n }\n\n public removeNodeFromIndex(node: Node): void {\n if (node.id != null) {\n this.idMapping.delete(node.id);\n }\n }\n\n /*\n Set the data of this node.\n\n setData(string): set the name of the node\n setData(object): set attributes of the node\n\n Examples:\n setData('node1')\n\n setData({ name: 'node1', id: 1});\n\n setData({ name: 'node2', id: 2, color: 'green'});\n\n * This is an internal function; it is not in the docs\n * Does not remove existing node values\n */\n public setData(o: NodeData | null): void {\n if (!o) {\n return;\n } else if (typeof o === \"string\") {\n this.name = o;\n } else if (typeof o === \"object\") {\n for (const key in o) {\n if (Object.prototype.hasOwnProperty.call(o, key)) {\n const value = o[key];\n\n if (key === \"label\" || key === \"name\") {\n // You can use the 'label' key instead of 'name'; this is a legacy feature\n if (typeof value === \"string\") {\n this.name = value;\n }\n } else if (key !== \"children\" && key !== \"parent\") {\n // You can't update the children or the parent using this function\n this[key] = value;\n }\n }\n }\n }\n }\n\n private createNode(nodeData?: NodeData): Node {\n const nodeClass = this.getNodeClass();\n return new nodeClass(nodeData);\n }\n\n private doRemoveChild(node: Node): void {\n this.children.splice(this.getChildIndex(node), 1);\n this.tree?.removeNodeFromIndex(node);\n }\n\n private getNodeClass(): typeof Node {\n return this.nodeClass ?? this.tree?.nodeClass ?? Node;\n }\n\n // Load children data from nodeInfo if it has children\n private loadChildrenFromData(nodeInfo: NodeData) {\n if (isNodeRecordWithChildren(nodeInfo) && nodeInfo.children.length) {\n this.loadFromData(nodeInfo.children);\n }\n }\n\n private setParent(parent: Node): void {\n this.parent = parent;\n this.tree = parent.tree;\n this.tree?.addNodeToIndex(this);\n }\n}\n","import { DropHint } from \"../dragAndDropHandler/types\";\n\nclass BorderDropHint implements DropHint {\n private hint?: HTMLElement;\n\n constructor(element: HTMLElement, scrollLeft: number) {\n const div = element.querySelector(\":scope > .jqtree-element\");\n\n if (!div) {\n this.hint = undefined;\n return;\n }\n\n const width = Math.max(element.offsetWidth + scrollLeft - 4, 0);\n const height = Math.max(element.clientHeight - 4, 0);\n\n const hint = document.createElement(\"span\");\n hint.className = \"jqtree-border\";\n hint.style.width = `${width}px`;\n hint.style.height = `${height}px`;\n\n this.hint = hint;\n\n div.append(this.hint);\n }\n\n public remove(): void {\n this.hint?.remove();\n }\n}\n\nexport default BorderDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { Node, Position } from \"../node\";\n\nclass GhostDropHint implements DropHint {\n private element: HTMLElement;\n private ghost: HTMLElement;\n private node: Node;\n\n constructor(node: Node, element: HTMLElement, position: Position) {\n this.element = element;\n this.node = node;\n this.ghost = this.createGhostElement();\n\n switch (position) {\n case \"after\":\n this.moveAfter();\n break;\n\n case \"before\":\n this.moveBefore();\n break;\n\n case \"inside\": {\n if (node.isFolder() && node.is_open) {\n this.moveInsideOpenFolder();\n } else {\n this.moveInside();\n }\n }\n }\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 private moveAfter(): void {\n this.element.after(this.ghost);\n }\n\n private moveBefore(): void {\n this.element.before(this.ghost);\n }\n\n private moveInside(): void {\n this.element.after(this.ghost);\n this.ghost.classList.add(\"jqtree-inside\");\n }\n\n private moveInsideOpenFolder(): void {\n const childElement = this.node.children[0]?.element;\n\n if (childElement) {\n childElement.before(this.ghost);\n }\n }\n}\n\nexport default GhostDropHint;\n","import { DropHint } from \"../dragAndDropHandler/types\";\nimport { GetScrollLeft } from \"../jqtreeMethodTypes\";\nimport { Node, Position } from \"../node\";\nimport BorderDropHint from \"./borderDropHint\";\nimport GhostDropHint from \"./ghostDropHint\";\n\nexport interface NodeElementParams {\n getScrollLeft: GetScrollLeft;\n node: Node;\n tabIndex?: number;\n treeElement: HTMLElement;\n}\n\nclass NodeElement {\n public element: HTMLElement;\n public node: Node;\n private getScrollLeft: GetScrollLeft;\n private tabIndex?: number;\n private treeElement: HTMLElement;\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 addDropHint(position: Position): DropHint {\n if (this.mustShowBorderDropHint(position)) {\n return new BorderDropHint(this.element, this.getScrollLeft());\n } else {\n return new GhostDropHint(this.node, this.element, position);\n }\n }\n\n public deselect(): void {\n this.element.classList.remove(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.removeAttribute(\"tabindex\");\n titleSpan.setAttribute(\"aria-selected\", \"false\");\n\n titleSpan.blur();\n }\n\n public init(node: Node): void {\n this.node = node;\n\n node.element ??= this.treeElement;\n\n this.element = node.element;\n }\n\n public select(mustSetFocus: boolean): void {\n this.element.classList.add(\"jqtree-selected\");\n\n const titleSpan = this.getTitleSpan();\n const tabIndex = this.tabIndex;\n\n // Check for null or undefined\n if (tabIndex != null) {\n titleSpan.setAttribute(\"tabindex\", tabIndex.toString());\n }\n\n titleSpan.setAttribute(\"aria-selected\", \"true\");\n\n if (mustSetFocus) {\n titleSpan.focus();\n }\n }\n\n protected getTitleSpan(): HTMLSpanElement {\n return this.element.querySelector(\n \":scope > .jqtree-element > span.jqtree-title\",\n ) as HTMLSpanElement;\n }\n\n protected getUl(): HTMLUListElement {\n return this.element.querySelector(\":scope > ul\") as HTMLUListElement;\n }\n\n protected mustShowBorderDropHint(position: Position): boolean {\n return position === \"inside\";\n }\n}\n\nexport default NodeElement;\n","import { OnFinishOpenNode, TriggerEvent } from \"../jqtreeMethodTypes\";\nimport { Position } from \"../node\";\nimport NodeElement, { NodeElementParams } from \"./index\";\n\ninterface FolderElementParams extends NodeElementParams {\n closedIconElement?: HTMLElement | Text;\n openedIconElement?: HTMLElement | Text;\n triggerEvent: TriggerEvent;\n}\n\nclass FolderElement extends NodeElement {\n private closedIconElement?: HTMLElement | Text;\n private openedIconElement?: HTMLElement | Text;\n private triggerEvent: TriggerEvent;\n\n constructor({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n }: FolderElementParams) {\n super({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n\n this.closedIconElement = closedIconElement;\n this.openedIconElement = openedIconElement;\n this.triggerEvent = triggerEvent;\n }\n\n public close(slide: boolean, animationSpeed: JQuery.Duration): void {\n if (!this.node.is_open) {\n return;\n }\n\n this.node.is_open = false;\n\n const button = this.getButton();\n button.classList.add(\"jqtree-closed\");\n button.innerHTML = \"\";\n\n const closedIconElement = this.closedIconElement;\n\n if (closedIconElement) {\n const icon = closedIconElement.cloneNode(true);\n button.appendChild(icon);\n }\n\n const doClose = (): void => {\n this.element.classList.add(\"jqtree-closed\");\n\n const titleSpan = this.getTitleSpan();\n titleSpan.setAttribute(\"aria-expanded\", \"false\");\n\n this.triggerEvent(\"tree.close\", {\n node: this.node,\n });\n };\n\n if (slide) {\n jQuery(this.getUl()).slideUp(animationSpeed, doClose);\n } else {\n jQuery(this.getUl()).hide();\n doClose();\n }\n }\n\n public open(\n onFinished: OnFinishOpenNode | undefined,\n slide: boolean,\n animationSpeed: JQuery.Duration,\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 protected mustShowBorderDropHint(position: Position): boolean {\n return !this.node.is_open && 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 {\n AddToSelection,\n GetNodeById,\n GetSelectedNodes,\n GetTree,\n OpenNode,\n RefreshElements,\n RemoveFromSelection,\n} from \"./jqtreeMethodTypes\";\nimport { OnGetStateFromStorage, OnSetStateFromStorage } from \"./jqtreeOptions\";\nimport { Node } from \"./node\";\nimport { isInt } from \"./util\";\n\nexport interface SavedState {\n open_nodes?: NodeId[];\n selected_node?: NodeId[];\n}\n\ninterface SaveStateHandlerParams {\n addToSelection: AddToSelection;\n getNodeById: GetNodeById;\n getSelectedNodes: GetSelectedNodes;\n getTree: GetTree;\n onGetStateFromStorage?: OnGetStateFromStorage;\n onSetStateFromStorage?: OnSetStateFromStorage;\n openNode: OpenNode;\n refreshElements: RefreshElements;\n removeFromSelection: RemoveFromSelection;\n saveState: boolean | string;\n}\n\nexport default class SaveStateHandler {\n private addToSelection: AddToSelection;\n private getNodeById: GetNodeById;\n private getSelectedNodes: GetSelectedNodes;\n private getTree: GetTree;\n private onGetStateFromStorage?: OnGetStateFromStorage;\n private onSetStateFromStorage?: OnSetStateFromStorage;\n private openNode: OpenNode;\n private refreshElements: RefreshElements;\n private removeFromSelection: RemoveFromSelection;\n private saveStateOption: boolean | string;\n\n constructor({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n }: SaveStateHandlerParams) {\n this.addToSelection = addToSelection;\n this.getNodeById = getNodeById;\n this.getSelectedNodes = getSelectedNodes;\n this.getTree = getTree;\n this.onGetStateFromStorage = onGetStateFromStorage;\n this.onSetStateFromStorage = onSetStateFromStorage;\n this.openNode = openNode;\n this.refreshElements = refreshElements;\n this.removeFromSelection = removeFromSelection;\n this.saveStateOption = saveState;\n }\n\n public getNodeIdToBeSelected(): NodeId | null {\n const state = this.getStateFromStorage();\n\n if (state?.selected_node) {\n return state.selected_node[0] ?? null;\n } else {\n return null;\n }\n }\n\n public getState(): SavedState {\n const getOpenNodeIds = (): NodeId[] => {\n const openNodes: NodeId[] = [];\n\n this.getTree()?.iterate((node: Node) => {\n if (node.is_open && node.id && node.hasChildren()) {\n openNodes.push(node.id);\n }\n return true;\n });\n\n return openNodes;\n };\n\n const getSelectedNodeIds = (): NodeId[] => {\n const selectedNodeIds: NodeId[] = [];\n\n this.getSelectedNodes().forEach((node) => {\n if (node.id != null) {\n selectedNodeIds.push(node.id);\n }\n });\n\n return selectedNodeIds;\n };\n\n return {\n open_nodes: getOpenNodeIds(),\n selected_node: getSelectedNodeIds(),\n };\n }\n\n public getStateFromStorage(): null | SavedState {\n const jsonData = this.loadFromStorage();\n\n if (jsonData) {\n return this.parseState(jsonData) as unknown as SavedState;\n } else {\n return null;\n }\n }\n\n public saveState(): void {\n const state = JSON.stringify(this.getState());\n\n if (this.onSetStateFromStorage) {\n this.onSetStateFromStorage(state);\n } else {\n localStorage.setItem(this.getKeyName(), state);\n }\n }\n\n /*\n Set initial state\n Don't handle nodes that are loaded on demand\n\n result: must load on demand (boolean)\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 private getKeyName(): string {\n if (typeof this.saveStateOption === \"string\") {\n return this.saveStateOption;\n } else {\n return \"tree\";\n }\n }\n\n private loadFromStorage(): null | string {\n if (this.onGetStateFromStorage) {\n return this.onGetStateFromStorage();\n } else {\n return localStorage.getItem(this.getKeyName());\n }\n }\n\n private openInitialNodes(nodeIds: NodeId[]): boolean {\n let mustLoadOnDemand = false;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n if (!node.load_on_demand) {\n node.is_open = true;\n } else {\n mustLoadOnDemand = true;\n }\n }\n }\n\n return mustLoadOnDemand;\n }\n\n private parseState(jsonData: string): SavedState {\n const state = JSON.parse(jsonData) as Record;\n\n // Check if selected_node is an int (instead of an array)\n if (state.selected_node && isInt(state.selected_node)) {\n // Convert to array\n state.selected_node = [state.selected_node];\n }\n\n return state as unknown as SavedState;\n }\n\n private resetSelection(): void {\n const selectedNodes = this.getSelectedNodes();\n\n selectedNodes.forEach((node) => {\n this.removeFromSelection(node);\n });\n }\n\n private selectInitialNodes(nodeIds: NodeId[]): boolean {\n let selectCount = 0;\n\n for (const nodeId of nodeIds) {\n const node = this.getNodeById(nodeId);\n\n if (node) {\n selectCount += 1;\n\n this.addToSelection(node);\n }\n }\n\n return selectCount !== 0;\n }\n}\n","export type HorizontalScrollDirection = \"left\" | \"right\";\nexport type VerticalScrollDirection = \"bottom\" | \"top\";\n\ninterface ConstructorParams {\n container: HTMLElement;\n refreshHitAreas: () => void;\n}\n\nexport abstract class ScrollParent {\n protected container: HTMLElement;\n protected horizontalScrollDirection?: HorizontalScrollDirection;\n protected horizontalScrollTimeout?: number;\n\n protected refreshHitAreas: () => void;\n protected verticalScrollDirection?: VerticalScrollDirection;\n protected verticalScrollTimeout?: number;\n\n constructor({ container, refreshHitAreas }: ConstructorParams) {\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.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 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 }\n\n protected abstract getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined;\n protected abstract getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection;\n\n protected scrollHorizontally() {\n if (!this.horizontalScrollDirection) {\n return;\n }\n\n const distance = this.horizontalScrollDirection === \"left\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: distance,\n top: 0,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollHorizontally.bind(this), 40);\n }\n\n protected scrollVertically() {\n if (!this.verticalScrollDirection) {\n return;\n }\n\n const distance = this.verticalScrollDirection === \"top\" ? -20 : 20;\n this.container.scrollBy({\n behavior: \"instant\",\n left: 0,\n top: distance,\n });\n\n this.refreshHitAreas();\n\n setTimeout(this.scrollVertically.bind(this), 40);\n }\n}\n","import { getElementPosition, getOffsetTop } from \"../util\";\nimport {\n HorizontalScrollDirection,\n ScrollParent,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\nexport default class ContainerScrollParent extends ScrollParent {\n private scrollParentBottom?: number;\n private scrollParentTop?: number;\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.horizontalScrollDirection = undefined;\n this.verticalScrollDirection = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollParentOffset = getElementPosition(this.container);\n const containerWidth = this.container.getBoundingClientRect().width;\n\n const rightEdge = scrollParentOffset.left + containerWidth;\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 protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n if (pageY < this.getScrollParentTop()) {\n return \"top\";\n }\n\n if (pageY > this.getScrollParentBottom()) {\n return \"bottom\";\n }\n\n return undefined;\n }\n\n private getScrollParentBottom() {\n if (this.scrollParentBottom == null) {\n const containerHeight =\n this.container.getBoundingClientRect().height;\n this.scrollParentBottom =\n this.getScrollParentTop() + containerHeight;\n }\n\n return this.scrollParentBottom;\n }\n\n private getScrollParentTop() {\n this.scrollParentTop ??= getOffsetTop(this.container);\n\n return this.scrollParentTop;\n }\n}\n","import { getOffsetTop } from \"../util\";\nimport {\n HorizontalScrollDirection,\n ScrollParent,\n VerticalScrollDirection,\n} from \"./scrollParent\";\n\ninterface Params {\n refreshHitAreas: () => void;\n treeElement: HTMLElement;\n}\n\nexport default class DocumentScrollParent extends ScrollParent {\n private documentScrollHeight?: number;\n private documentScrollWidth?: number;\n private treeElement: HTMLElement;\n\n constructor({ refreshHitAreas, treeElement }: Params) {\n super({ container: document.documentElement, refreshHitAreas });\n\n this.treeElement = treeElement;\n }\n\n public scrollToY(top: number): void {\n const treeTop = getOffsetTop(this.treeElement);\n\n super.scrollToY(top + treeTop);\n }\n\n public stopScrolling() {\n super.stopScrolling();\n\n this.documentScrollHeight = undefined;\n this.documentScrollWidth = undefined;\n }\n\n protected getNewHorizontalScrollDirection(\n pageX: number,\n ): HorizontalScrollDirection | undefined {\n const scrollLeft = this.container.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 protected getNewVerticalScrollDirection(\n pageY: number,\n ): undefined | VerticalScrollDirection {\n const scrollTop = this.container.scrollTop;\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 canScrollDown() {\n return (\n this.container.scrollTop + this.container.clientHeight <\n this.getDocumentScrollHeight()\n );\n }\n\n private canScrollRight() {\n return (\n this.container.scrollLeft + this.container.clientWidth <\n this.getDocumentScrollWidth()\n );\n }\n\n private getDocumentScrollHeight() {\n // Store the original scroll height because the scroll height can increase when the drag element is moved beyond the scroll height.\n this.documentScrollHeight ??= this.container.scrollHeight;\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 this.documentScrollWidth ??= this.container.scrollWidth;\n\n return this.documentScrollWidth;\n }\n}\n","import type { ScrollParent } from \"./scrollParent\";\n\nimport ContainerScrollParent from \"./containerScrollParent\";\nimport DocumentScrollParent from \"./documentScrollParent\";\n\nconst isOverflow = (overflowValue: string) =>\n overflowValue === \"auto\" || overflowValue === \"scroll\";\n\nconst hasOverFlow = (element: HTMLElement): boolean => {\n const style = getComputedStyle(element);\n\n return isOverflow(style.overflowX) || isOverflow(style.overflowY);\n};\n\nconst getParentWithOverflow = (\n treeElement: HTMLElement,\n): HTMLElement | null => {\n if (hasOverFlow(treeElement)) {\n return treeElement;\n }\n\n let parent = treeElement.parentElement;\n\n while (parent) {\n if (hasOverFlow(parent)) {\n return parent;\n }\n\n parent = parent.parentElement;\n }\n\n return null;\n};\n\nconst createScrollParent = (\n treeElement: HTMLElement,\n refreshHitAreas: () => void,\n): ScrollParent => {\n const container = getParentWithOverflow(treeElement);\n\n if (container && container.tagName !== \"HTML\") {\n return new ContainerScrollParent({\n container,\n refreshHitAreas,\n });\n } else {\n return new DocumentScrollParent({ refreshHitAreas, treeElement });\n }\n};\n\nexport default createScrollParent;\n","import { PositionInfo } from \"./mouseUtils\";\nimport createScrollParent from \"./scrollHandler/createScrollParent\";\nimport { ScrollParent } from \"./scrollHandler/scrollParent\";\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 getScrollLeft(): number {\n return this.getScrollParent().getScrollLeft();\n }\n\n public scrollToY(top: number): void {\n this.getScrollParent().scrollToY(top);\n }\n\n public stopScrolling() {\n this.getScrollParent().stopScrolling();\n }\n\n private checkHorizontalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkHorizontalScrolling(positionInfo.pageX);\n }\n\n private checkVerticalScrolling(positionInfo: PositionInfo): void {\n this.getScrollParent().checkVerticalScrolling(positionInfo.pageY);\n }\n\n private getScrollParent(): ScrollParent {\n this.scrollParent ??= createScrollParent(\n this.treeElement,\n this.refreshHitAreas,\n );\n\n return this.scrollParent;\n }\n}\n","import { GetNodeById } from \"./jqtreeMethodTypes\";\nimport { Node } from \"./node\";\n\ninterface SelectNodeHandlerParameters {\n getNodeById: GetNodeById;\n}\n\nexport default class SelectNodeHandler {\n private getNodeById: GetNodeById;\n private selectedNodes: Set;\n private selectedSingleNode: Node | null;\n\n constructor({ getNodeById }: SelectNodeHandlerParameters) {\n this.getNodeById = getNodeById;\n this.selectedNodes = new Set();\n this.clear();\n }\n\n public addToSelection(node: Node): void {\n if (node.id != null) {\n this.selectedNodes.add(node.id);\n } else {\n this.selectedSingleNode = node;\n }\n }\n\n public clear(): void {\n this.selectedNodes.clear();\n this.selectedSingleNode = null;\n }\n\n public getSelectedNode(): false | Node {\n const selectedNodes = this.getSelectedNodes();\n\n if (selectedNodes.length) {\n return selectedNodes[0] ?? false;\n } else {\n return false;\n }\n }\n\n public getSelectedNodes(): Node[] {\n if (this.selectedSingleNode) {\n return [this.selectedSingleNode];\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public getSelectedNodesUnder(parent: Node): Node[] {\n if (this.selectedSingleNode) {\n if (parent.isParentOf(this.selectedSingleNode)) {\n return [this.selectedSingleNode];\n } else {\n return [];\n }\n } else {\n const selectedNodes: Node[] = [];\n\n this.selectedNodes.forEach((id) => {\n const node = this.getNodeById(id);\n if (node && parent.isParentOf(node)) {\n selectedNodes.push(node);\n }\n });\n\n return selectedNodes;\n }\n }\n\n public isNodeSelected(node: Node): boolean {\n if (node.id != null) {\n return this.selectedNodes.has(node.id);\n } else if (this.selectedSingleNode) {\n return this.selectedSingleNode.element === node.element;\n } else {\n return false;\n }\n }\n\n public removeFromSelection(node: Node, includeChildren = false): void {\n if (node.id == null) {\n if (\n this.selectedSingleNode &&\n node.element === this.selectedSingleNode.element\n ) {\n this.selectedSingleNode = null;\n }\n } else {\n this.selectedNodes.delete(node.id);\n\n if (includeChildren) {\n node.iterate(() => {\n if (node.id != null) {\n this.selectedNodes.delete(node.id);\n }\n return true;\n });\n }\n }\n }\n}\n","const register = (widgetClass: unknown, widgetName: string): void => {\n const getDataKey = (): string => `simple_widget_${widgetName}`;\n\n const getWidgetData = (\n el: HTMLElement,\n dataKey: string,\n ): null | SimpleWidget => {\n const widget = jQuery.data(el, dataKey) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n return widget;\n } else {\n return null;\n }\n };\n\n const createWidget = ($el: JQuery, options: unknown): JQuery => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const existingWidget = getWidgetData(el, dataKey);\n\n if (!existingWidget) {\n const simpleWidgetClass = widgetClass as typeof SimpleWidget;\n const widget = new simpleWidgetClass(el, options);\n\n if (!jQuery.data(el, dataKey)) {\n jQuery.data(el, dataKey, widget);\n }\n\n // Call init after setting data, so we can call methods\n widget.init();\n }\n }\n\n return $el;\n };\n\n const destroyWidget = ($el: JQuery): void => {\n const dataKey = getDataKey();\n\n for (const el of $el.get()) {\n const widget = getWidgetData(el, dataKey);\n\n if (widget) {\n widget.destroy();\n }\n\n jQuery.removeData(el, dataKey);\n }\n };\n\n const callFunction = (\n $el: JQuery,\n functionName: string,\n args: unknown[],\n ): unknown => {\n let result = null;\n\n for (const el of $el.get()) {\n const widget = jQuery.data(el, getDataKey()) as unknown;\n\n if (widget && widget instanceof SimpleWidget) {\n const simpleWidget = widget as SimpleWidget;\n const widgetFunction = simpleWidget[functionName];\n\n if (widgetFunction && typeof widgetFunction === \"function\") {\n result = widgetFunction.apply(widget, args) as unknown;\n }\n }\n }\n\n return result;\n };\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n (jQuery.fn as any)[widgetName] = function (\n this: JQuery,\n argument1: unknown,\n ...args: unknown[]\n ) {\n if (!argument1) {\n return createWidget(this, null);\n } else if (typeof argument1 === \"object\") {\n const options = argument1 as unknown;\n return createWidget(this, options);\n } else if (typeof argument1 === \"string\" && argument1[0] !== \"_\") {\n const functionName = argument1;\n\n if (argument1 === \"destroy\") {\n destroyWidget(this);\n return undefined;\n } else {\n return callFunction(this, functionName, args);\n }\n } else {\n return undefined;\n }\n };\n};\n\nexport default class SimpleWidget {\n [key: string]: unknown;\n\n protected static defaults: unknown = {};\n\n public $el: JQuery;\n\n public options: WidgetOptions;\n\n constructor(el: HTMLElement, options: WidgetOptions) {\n this.$el = jQuery(el);\n\n // eslint-disable-next-line @typescript-eslint/no-unsafe-member-access\n const defaults = (this.constructor as any).defaults as WidgetOptions;\n this.options = { ...defaults, ...options };\n }\n\n public static register(widgetClass: unknown, widgetName: string): void {\n register(widgetClass, widgetName);\n }\n\n public deinit(): void {\n //\n }\n\n public destroy(): void {\n this.deinit();\n }\n\n public init(): void {\n //\n }\n}\n","const version = \"1.8.10\";\n\nexport default version;\n","import DataLoader, { HandleFinishedLoading } from \"./dataLoader\";\nimport { DragAndDropHandler } from \"./dragAndDropHandler\";\nimport ElementsRenderer from \"./elementsRenderer\";\nimport { OnFinishOpenNode } from \"./jqtreeMethodTypes\";\nimport { JQTreeOptions } from \"./jqtreeOptions\";\nimport KeyHandler from \"./keyHandler\";\nimport MouseHandler from \"./mouseHandler\";\nimport { PositionInfo } from \"./mouseUtils\";\nimport { Node, Position } from \"./node\";\nimport NodeElement from \"./nodeElement\";\nimport FolderElement from \"./nodeElement/folderElement\";\nimport SaveStateHandler, { SavedState } from \"./saveStateHandler\";\nimport ScrollHandler from \"./scrollHandler\";\nimport SelectNodeHandler from \"./selectNodeHandler\";\nimport SimpleWidget from \"./simple.widget\";\nimport { getOffsetTop, isFunction } from \"./util\";\nimport __version__ from \"./version\";\n\ninterface SelectNodeOptions {\n mustSetFocus?: boolean;\n mustToggle?: boolean;\n}\n\nconst NODE_PARAM_IS_EMPTY = \"Node parameter is empty\";\nconst PARAM_IS_EMPTY = \"Parameter is empty: \";\n\nexport class JqTreeWidget extends SimpleWidget {\n protected static defaults: JQTreeOptions = {\n animationSpeed: \"fast\",\n autoEscape: true,\n autoOpen: false, // true / false / int (open n levels starting at 0)\n buttonLeft: true,\n // The symbol to use for a closed node - â–º BLACK RIGHT-POINTING POINTER\n // http://www.fileformat.info/info/unicode/char/25ba/index.htm\n closedIcon: undefined,\n data: undefined,\n dataFilter: undefined,\n dataUrl: undefined,\n dragAndDrop: false,\n keyboardSupport: true,\n nodeClass: Node,\n onCanMove: undefined, // Can this node be moved?\n onCanMoveTo: undefined, // Can this node be moved to this position? function(moved_node, target_node, position)\n onCanSelectNode: undefined,\n onCreateLi: undefined,\n onDragMove: undefined,\n onDragStop: undefined,\n onGetStateFromStorage: undefined,\n onIsMoveHandle: undefined,\n onLoadFailed: undefined,\n onLoading: undefined,\n onSetStateFromStorage: undefined,\n openedIcon: \"▼\",\n openFolderDelay: 500, // The delay for opening a folder during drag and drop; the value is in milliseconds\n // The symbol to use for an open node - â–¼ BLACK DOWN-POINTING TRIANGLE\n // http://www.fileformat.info/info/unicode/char/25bc/index.htm\n rtl: undefined, // right-to-left support; true / false (default)\n saveState: false, // true / false / string (cookie name)\n selectable: true,\n showEmptyFolder: false,\n slide: true, // must display slide animation?\n startDndDelay: 300, // The delay for starting dnd (in milliseconds)\n tabIndex: 0,\n useContextMenu: true,\n };\n\n private dataLoader: DataLoader;\n private dndHandler: DragAndDropHandler;\n private element: JQuery;\n\n private isInitialized: boolean;\n private keyHandler: KeyHandler;\n private mouseHandler: MouseHandler;\n private renderer: ElementsRenderer;\n private saveStateHandler: SaveStateHandler;\n private scrollHandler: ScrollHandler;\n private selectNodeHandler: SelectNodeHandler;\n private tree: Node;\n\n public addNodeAfter(\n newNodeInfo: NodeData,\n existingNode: Node,\n ): Node | null {\n const newNode = existingNode.addAfter(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addNodeBefore(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addBefore(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(existingNode.parent);\n }\n\n return newNode;\n }\n\n public addParentNode(\n newNodeInfo: NodeData,\n existingNode?: Node,\n ): Node | null {\n if (!existingNode) {\n throw Error(PARAM_IS_EMPTY + \"existingNode\");\n }\n\n const newNode = existingNode.addParent(newNodeInfo);\n\n if (newNode) {\n this.refreshElements(newNode.parent);\n }\n\n return newNode;\n }\n\n public addToSelection(node?: Node, mustSetFocus?: boolean): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.addToSelection(node);\n this.openParents(node);\n\n this.getNodeElementForNode(node).select(mustSetFocus ?? true);\n\n this.saveState();\n\n return this.element;\n }\n\n public appendNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.append(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public closeNode(node?: Node, slideParam?: boolean | null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.isFolder() || node.isEmptyFolder) {\n this.createFolderElement(node).close(\n slide,\n this.options.animationSpeed,\n );\n\n this.saveState();\n }\n\n return this.element;\n }\n\n public deinit(): void {\n this.element.empty();\n this.element.off();\n\n this.keyHandler.deinit();\n this.mouseHandler.deinit();\n\n this.tree = new Node({}, true);\n\n super.deinit();\n }\n\n public getNodeByCallback(callback: (node: Node) => boolean): Node | null {\n return this.tree.getNodeByCallback(callback);\n }\n\n public getNodeByHtmlElement(\n inputElement: HTMLElement | JQuery,\n ): Node | null {\n const element =\n inputElement instanceof HTMLElement\n ? inputElement\n : inputElement[0];\n\n if (!element) {\n return null;\n }\n\n return this.getNode(element);\n }\n\n public getNodeById(nodeId: NodeId): Node | null {\n return this.tree.getNodeById(nodeId);\n }\n\n public getNodeByName(name: string): Node | null {\n return this.tree.getNodeByName(name);\n }\n\n public getNodeByNameMustExist(name: string): Node {\n return this.tree.getNodeByNameMustExist(name);\n }\n\n public getNodesByProperty(key: string, value: unknown): Node[] {\n return this.tree.getNodesByProperty(key, value);\n }\n\n public getSelectedNode(): false | Node {\n return this.selectNodeHandler.getSelectedNode();\n }\n\n public getSelectedNodes(): Node[] {\n return this.selectNodeHandler.getSelectedNodes();\n }\n\n public getState(): null | SavedState {\n return this.saveStateHandler.getState();\n }\n\n public getStateFromStorage(): null | SavedState {\n return this.saveStateHandler.getStateFromStorage();\n }\n\n public getTree(): Node {\n return this.tree;\n }\n\n public getVersion(): string {\n return __version__;\n }\n\n public init(): void {\n super.init();\n\n this.element = this.$el;\n this.isInitialized = false;\n\n this.options.rtl = this.getRtlOption();\n\n this.options.closedIcon ??= this.getDefaultClosedIcon();\n\n this.connectHandlers();\n\n this.initData();\n }\n\n public isDragging(): boolean {\n return this.dndHandler.isDragging;\n }\n\n public isNodeSelected(node?: Node): boolean {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n return this.selectNodeHandler.isNodeSelected(node);\n }\n\n public loadData(data: NodeData[], parentNode: Node | null): JQuery {\n this.doLoadData(data, parentNode);\n return this.element;\n }\n\n /*\n signatures:\n - loadDataFromUrl(url, parent_node=null, on_finished=null)\n loadDataFromUrl('/my_data');\n loadDataFromUrl('/my_data', node1);\n loadDataFromUrl('/my_data', node1, function() { console.log('finished'); });\n loadDataFromUrl('/my_data', null, function() { console.log('finished'); });\n\n - loadDataFromUrl(parent_node=null, on_finished=null)\n loadDataFromUrl();\n loadDataFromUrl(node1);\n loadDataFromUrl(null, function() { console.log('finished'); });\n loadDataFromUrl(node1, function() { console.log('finished'); });\n */\n public loadDataFromUrl(\n param1: Node | null | string,\n param2?: HandleFinishedLoading | Node | null,\n param3?: HandleFinishedLoading,\n ): JQuery {\n if (typeof param1 === \"string\") {\n // first parameter is url\n this.doLoadDataFromUrl(\n param1,\n param2 as Node | null,\n param3 ?? null,\n );\n } else {\n // first parameter is not url\n this.doLoadDataFromUrl(\n null,\n param1,\n param2 as HandleFinishedLoading | null,\n );\n }\n\n return this.element;\n }\n\n public moveDown(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveDown(selectedNode);\n }\n\n return this.element;\n }\n\n public moveNode(\n node?: Node,\n targetNode?: Node,\n position?: Position,\n ): 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 this.tree.moveNode(node, targetNode, position);\n this.refreshElements(null);\n\n return this.element;\n }\n\n public moveUp(): JQuery {\n const selectedNode = this.getSelectedNode();\n if (selectedNode) {\n this.keyHandler.moveUp(selectedNode);\n }\n\n return this.element;\n }\n\n public openNode(\n node?: Node,\n param1?: boolean | OnFinishOpenNode,\n param2?: OnFinishOpenNode,\n ): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const parseParams = (): [boolean, OnFinishOpenNode | undefined] => {\n let onFinished: null | OnFinishOpenNode;\n let slide: boolean | null;\n\n if (isFunction(param1)) {\n onFinished = param1 as OnFinishOpenNode;\n slide = null;\n } else {\n slide = param1 as boolean;\n onFinished = param2 as OnFinishOpenNode;\n }\n\n slide ??= this.options.slide;\n\n return [slide, onFinished];\n };\n\n const [slide, onFinished] = parseParams();\n\n this.openNodeInternal(node, slide, onFinished);\n return this.element;\n }\n\n public prependNode(newNodeInfo: NodeData, parentNodeParam?: Node): Node {\n const parentNode = parentNodeParam ?? this.tree;\n\n const node = parentNode.prepend(newNodeInfo);\n\n this.refreshElements(parentNode);\n\n return node;\n }\n\n public refresh(): JQuery {\n this.refreshElements(null);\n return this.element;\n }\n\n public refreshHitAreas(): JQuery {\n this.dndHandler.refresh();\n return this.element;\n }\n\n public reload(onFinished: HandleFinishedLoading | null): JQuery {\n this.doLoadDataFromUrl(null, null, onFinished);\n return this.element;\n }\n\n public removeFromSelection(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n this.selectNodeHandler.removeFromSelection(node);\n\n this.getNodeElementForNode(node).deselect();\n this.saveState();\n\n return this.element;\n }\n\n public removeNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.parent) {\n throw Error(\"Node has no parent\");\n }\n\n this.selectNodeHandler.removeFromSelection(node, true); // including children\n\n const parent = node.parent;\n node.remove();\n this.refreshElements(parent);\n\n return this.element;\n }\n\n public scrollToNode(node?: Node): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!node.element) {\n return this.element;\n }\n\n const top =\n getOffsetTop(node.element) -\n getOffsetTop(this.$el.get(0) as HTMLElement);\n\n this.scrollHandler.scrollToY(top);\n\n return this.element;\n }\n\n public selectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): JQuery {\n this.doSelectNode(node, optionsParam);\n return this.element;\n }\n\n public setOption(option: string, value: unknown): JQuery {\n (this.options as unknown as Record)[option] = value;\n return this.element;\n }\n\n public setState(state?: SavedState): JQuery {\n if (state) {\n this.saveStateHandler.setInitialState(state);\n this.refreshElements(null);\n }\n\n return this.element;\n }\n\n public toggle(node?: Node, slideParam: boolean | null = null): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n const slide = slideParam ?? this.options.slide;\n\n if (node.is_open) {\n this.closeNode(node, slide);\n } else {\n this.openNode(node, slide);\n }\n\n return this.element;\n }\n\n public toJson(): string {\n return JSON.stringify(this.tree.getData());\n }\n\n public updateNode(node?: Node, data?: NodeData): JQuery {\n if (!node) {\n throw Error(NODE_PARAM_IS_EMPTY);\n }\n\n if (!data) {\n return this.element;\n }\n\n const idIsChanged =\n typeof data === \"object\" && data.id && data.id !== node.id;\n\n if (idIsChanged) {\n this.tree.removeNodeFromIndex(node);\n }\n\n node.setData(data);\n\n if (idIsChanged) {\n this.tree.addNodeToIndex(node);\n }\n\n if (\n typeof data === \"object\" &&\n data.children &&\n data.children instanceof Array\n ) {\n node.removeChildren();\n\n if (data.children.length) {\n node.loadFromData(data.children as Node[]);\n }\n }\n\n this.refreshElements(node);\n\n return this.element;\n }\n\n private connectHandlers() {\n const {\n autoEscape,\n buttonLeft,\n closedIcon,\n dataFilter,\n dragAndDrop,\n keyboardSupport,\n onCanMove,\n onCanMoveTo,\n onCreateLi,\n onDragMove,\n onDragStop,\n onGetStateFromStorage,\n onIsMoveHandle,\n onLoadFailed,\n onLoading,\n onSetStateFromStorage,\n openedIcon,\n openFolderDelay,\n rtl,\n saveState,\n showEmptyFolder,\n slide,\n tabIndex,\n } = this.options;\n\n const closeNode = this.closeNode.bind(this);\n const getNodeElement = this.getNodeElement.bind(this);\n const getNodeElementForNode = this.getNodeElementForNode.bind(this);\n const getNodeById = this.getNodeById.bind(this);\n const getSelectedNode = this.getSelectedNode.bind(this);\n const getTree = this.getTree.bind(this);\n const isFocusOnTree = this.isFocusOnTree.bind(this);\n const loadData = this.loadData.bind(this);\n const openNode = this.openNodeInternal.bind(this);\n const refreshElements = this.refreshElements.bind(this);\n const refreshHitAreas = this.refreshHitAreas.bind(this);\n const selectNode = this.selectNode.bind(this);\n const $treeElement = this.element;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n const selectNodeHandler = new SelectNodeHandler({\n getNodeById,\n });\n\n const addToSelection =\n selectNodeHandler.addToSelection.bind(selectNodeHandler);\n const getSelectedNodes =\n selectNodeHandler.getSelectedNodes.bind(selectNodeHandler);\n const isNodeSelected =\n selectNodeHandler.isNodeSelected.bind(selectNodeHandler);\n const removeFromSelection =\n selectNodeHandler.removeFromSelection.bind(selectNodeHandler);\n const getMouseDelay = () => this.options.startDndDelay ?? 0;\n\n const dataLoader = new DataLoader({\n dataFilter,\n loadData,\n onLoadFailed,\n onLoading,\n treeElement,\n triggerEvent,\n });\n\n const saveStateHandler = new SaveStateHandler({\n addToSelection,\n getNodeById,\n getSelectedNodes,\n getTree,\n onGetStateFromStorage,\n onSetStateFromStorage,\n openNode,\n refreshElements,\n removeFromSelection,\n saveState,\n });\n\n const scrollHandler = new ScrollHandler({\n refreshHitAreas,\n treeElement,\n });\n\n const getScrollLeft = scrollHandler.getScrollLeft.bind(scrollHandler);\n\n const dndHandler = new DragAndDropHandler({\n autoEscape,\n getNodeElement,\n getNodeElementForNode,\n getScrollLeft,\n getTree,\n onCanMove,\n onCanMoveTo,\n onDragMove,\n onDragStop,\n onIsMoveHandle,\n openFolderDelay,\n openNode,\n refreshElements,\n slide,\n treeElement,\n triggerEvent,\n });\n\n const keyHandler = new KeyHandler({\n closeNode,\n getSelectedNode,\n isFocusOnTree,\n keyboardSupport,\n openNode,\n selectNode,\n });\n\n const renderer = new ElementsRenderer({\n $element: $treeElement,\n autoEscape,\n buttonLeft,\n closedIcon,\n dragAndDrop,\n getTree,\n isNodeSelected,\n onCreateLi,\n openedIcon,\n rtl,\n showEmptyFolder,\n tabIndex,\n });\n\n const getNode = this.getNode.bind(this);\n const onMouseCapture = this.mouseCapture.bind(this);\n const onMouseDrag = this.mouseDrag.bind(this);\n const onMouseStart = this.mouseStart.bind(this);\n const onMouseStop = this.mouseStop.bind(this);\n\n const mouseHandler = new MouseHandler({\n element: treeElement,\n getMouseDelay,\n getNode,\n onClickButton: this.toggle.bind(this),\n onClickTitle: this.doSelectNode.bind(this),\n onMouseCapture,\n onMouseDrag,\n onMouseStart,\n onMouseStop,\n triggerEvent,\n useContextMenu: this.options.useContextMenu,\n });\n\n this.dataLoader = dataLoader;\n this.dndHandler = dndHandler;\n this.keyHandler = keyHandler;\n this.mouseHandler = mouseHandler;\n this.renderer = renderer;\n this.saveStateHandler = saveStateHandler;\n this.scrollHandler = scrollHandler;\n this.selectNodeHandler = selectNodeHandler;\n }\n\n private containsElement(element: HTMLElement): boolean {\n const node = this.getNode(element);\n\n return node != null && node.tree === this.tree;\n }\n\n private createFolderElement(node: Node) {\n const closedIconElement = this.renderer.closedIconElement;\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const openedIconElement = this.renderer.openedIconElement;\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n const triggerEvent = this.triggerEvent.bind(this);\n\n return new FolderElement({\n closedIconElement,\n getScrollLeft,\n node,\n openedIconElement,\n tabIndex,\n treeElement,\n triggerEvent,\n });\n }\n\n private createNodeElement(node: Node) {\n const getScrollLeft = this.scrollHandler.getScrollLeft.bind(\n this.scrollHandler,\n );\n const tabIndex = this.options.tabIndex;\n const treeElement = this.element.get(0) as HTMLElement;\n\n return new NodeElement({\n getScrollLeft,\n node,\n tabIndex,\n treeElement,\n });\n }\n\n private deselectCurrentNode(): void {\n const node = this.getSelectedNode();\n if (node) {\n this.removeFromSelection(node);\n }\n }\n\n private deselectNodes(parentNode: Node): void {\n const selectedNodesUnderParent =\n this.selectNodeHandler.getSelectedNodesUnder(parentNode);\n for (const n of selectedNodesUnderParent) {\n this.selectNodeHandler.removeFromSelection(n);\n }\n }\n\n private doLoadData(data: NodeData[] | null, parentNode: Node | null): void {\n if (data) {\n if (parentNode) {\n this.deselectNodes(parentNode);\n this.loadSubtree(data, parentNode);\n } else {\n this.initTree(data);\n }\n\n if (this.isDragging()) {\n this.dndHandler.refresh();\n }\n }\n\n this.triggerEvent(\"tree.load_data\", {\n parent_node: parentNode,\n tree_data: data,\n });\n }\n\n private doLoadDataFromUrl(\n urlInfoParam: JQuery.AjaxSettings | null | string,\n parentNode: Node | null,\n onFinished: HandleFinishedLoading | null,\n ): void {\n const urlInfo = urlInfoParam ?? this.getDataUrlInfo(parentNode);\n\n this.dataLoader.loadFromUrl(urlInfo, parentNode, onFinished);\n }\n\n private doSelectNode(\n node: Node | null,\n optionsParam?: SelectNodeOptions,\n ): void {\n const saveState = (): void => {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n };\n\n if (!node) {\n // Called with empty node -> deselect current node\n this.deselectCurrentNode();\n saveState();\n return;\n }\n const defaultOptions = { mustSetFocus: true, mustToggle: true };\n const selectOptions = { ...defaultOptions, ...(optionsParam ?? {}) };\n\n const canSelect = (): boolean => {\n if (this.options.onCanSelectNode) {\n return (\n this.options.selectable &&\n this.options.onCanSelectNode(node)\n );\n } else {\n return this.options.selectable;\n }\n };\n\n if (!canSelect()) {\n return;\n }\n\n if (this.selectNodeHandler.isNodeSelected(node)) {\n if (selectOptions.mustToggle) {\n this.deselectCurrentNode();\n this.triggerEvent(\"tree.select\", {\n node: null,\n previous_node: node,\n });\n }\n } else {\n const deselectedNode = this.getSelectedNode() || null;\n this.deselectCurrentNode();\n this.addToSelection(node, selectOptions.mustSetFocus);\n\n this.triggerEvent(\"tree.select\", {\n deselected_node: deselectedNode,\n node,\n });\n this.openParents(node);\n }\n\n saveState();\n }\n\n private getAutoOpenMaxLevel(): number {\n if (this.options.autoOpen === true) {\n return -1;\n } else if (typeof this.options.autoOpen === \"number\") {\n return this.options.autoOpen;\n } else if (typeof this.options.autoOpen === \"string\") {\n return parseInt(this.options.autoOpen, 10);\n } else {\n return 0;\n }\n }\n\n private getDataUrlInfo(node: Node | null): JQuery.AjaxSettings | null {\n const dataUrl =\n this.options.dataUrl ?? (this.element.data(\"url\") as null | string);\n\n const getUrlFromString = (url: string): JQuery.AjaxSettings => {\n const urlInfo: JQuery.AjaxSettings = { url };\n\n setUrlInfoData(urlInfo);\n\n return urlInfo;\n };\n\n const setUrlInfoData = (urlInfo: JQuery.AjaxSettings): void => {\n if (node?.id) {\n // Load on demand of a subtree; add node parameter\n const data = { node: node.id };\n urlInfo.data = data;\n } else {\n // Add selected_node parameter\n const selectedNodeId = this.getNodeIdToBeSelected();\n if (selectedNodeId) {\n const data = { selected_node: selectedNodeId };\n urlInfo.data = data;\n }\n }\n };\n\n if (typeof dataUrl === \"function\") {\n return dataUrl(node);\n } else if (typeof dataUrl === \"string\") {\n return getUrlFromString(dataUrl);\n } else if (dataUrl && typeof dataUrl === \"object\") {\n setUrlInfoData(dataUrl);\n return dataUrl;\n } else {\n return null;\n }\n }\n\n private getDefaultClosedIcon(): string {\n if (this.options.rtl) {\n // triangle to the left\n return \"◀\";\n } else {\n // triangle to the right\n return \"►\";\n }\n }\n\n private getNode(element: HTMLElement): Node | null {\n const liElement = element.closest(\"li.jqtree_common\");\n\n if (liElement) {\n return jQuery(liElement).data(\"node\") as Node;\n } else {\n return null;\n }\n }\n\n private getNodeElement(element: HTMLElement): NodeElement | null {\n const node = this.getNode(element);\n if (node) {\n return this.getNodeElementForNode(node);\n } else {\n return null;\n }\n }\n\n private getNodeElementForNode(node: Node): NodeElement {\n if (node.isFolder()) {\n return this.createFolderElement(node);\n } else {\n return this.createNodeElement(node);\n }\n }\n\n private getNodeIdToBeSelected(): NodeId | null {\n if (this.options.saveState) {\n return this.saveStateHandler.getNodeIdToBeSelected();\n } else {\n return null;\n }\n }\n\n private getRtlOption(): boolean {\n if (this.options.rtl != null) {\n return this.options.rtl;\n } else {\n const dataRtl = this.element.data(\"rtl\") as unknown;\n\n if (\n dataRtl !== null &&\n dataRtl !== false &&\n dataRtl !== undefined\n ) {\n return true;\n } else {\n return false;\n }\n }\n }\n\n private initData(): void {\n if (this.options.data) {\n this.doLoadData(this.options.data, null);\n } else {\n const dataUrl = this.getDataUrlInfo(null);\n\n if (dataUrl) {\n this.doLoadDataFromUrl(null, null, null);\n } else {\n this.doLoadData([], null);\n }\n }\n }\n\n private initTree(data: NodeData[]): void {\n const doInit = (): void => {\n if (!this.isInitialized) {\n this.isInitialized = true;\n this.triggerEvent(\"tree.init\");\n }\n };\n\n this.tree = new this.options.nodeClass(\n null,\n true,\n this.options.nodeClass,\n );\n\n this.selectNodeHandler.clear();\n\n this.tree.loadFromData(data);\n\n const mustLoadOnDemand = this.setInitialState();\n\n this.refreshElements(null);\n\n if (!mustLoadOnDemand) {\n doInit();\n } else {\n // Load data on demand and then init the tree\n this.setInitialStateOnDemand(doInit);\n }\n }\n\n private isFocusOnTree(): boolean {\n const activeElement = document.activeElement;\n\n return Boolean(\n activeElement &&\n activeElement.tagName === \"SPAN\" &&\n this.containsElement(activeElement as HTMLElement),\n );\n }\n\n private isSelectedNodeInSubtree(subtree: Node): boolean {\n const selectedNode = this.getSelectedNode();\n\n if (!selectedNode) {\n return false;\n } else {\n return subtree === selectedNode || subtree.isParentOf(selectedNode);\n }\n }\n\n private loadFolderOnDemand(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n node.is_loading = true;\n\n this.doLoadDataFromUrl(null, node, () => {\n this.openNodeInternal(node, slide, onFinished);\n });\n }\n\n private loadSubtree(data: NodeData[], parentNode: Node): void {\n parentNode.loadFromData(data);\n\n parentNode.load_on_demand = false;\n parentNode.is_loading = false;\n\n this.refreshElements(parentNode);\n }\n\n private mouseCapture(positionInfo: PositionInfo): boolean | null {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseCapture(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseDrag(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n const result = this.dndHandler.mouseDrag(positionInfo);\n\n this.scrollHandler.checkScrolling(positionInfo);\n return result;\n } else {\n return false;\n }\n }\n\n private mouseStart(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n return this.dndHandler.mouseStart(positionInfo);\n } else {\n return false;\n }\n }\n\n private mouseStop(positionInfo: PositionInfo): boolean {\n if (this.options.dragAndDrop) {\n this.scrollHandler.stopScrolling();\n return this.dndHandler.mouseStop(positionInfo);\n } else {\n return false;\n }\n }\n\n private openNodeInternal(\n node: Node,\n slide = true,\n onFinished?: OnFinishOpenNode,\n ): void {\n const doOpenNode = (\n _node: Node,\n _slide: boolean,\n _onFinished?: OnFinishOpenNode,\n ): void => {\n if (!node.children.length) {\n return;\n }\n\n const folderElement = this.createFolderElement(_node);\n folderElement.open(\n _onFinished,\n _slide,\n this.options.animationSpeed,\n );\n };\n\n if (node.isFolder() || node.isEmptyFolder) {\n if (node.load_on_demand) {\n this.loadFolderOnDemand(node, slide, onFinished);\n } else {\n let parent = node.parent;\n\n while (parent) {\n // nb: do not open root element\n if (parent.parent) {\n doOpenNode(parent, false);\n }\n parent = parent.parent;\n }\n\n doOpenNode(node, slide, onFinished);\n this.saveState();\n }\n }\n }\n\n private openParents(node: Node) {\n const parent = node.parent;\n\n if (parent?.parent && !parent.is_open) {\n this.openNode(parent, false);\n }\n }\n\n /*\n Redraw the tree or part of the tree.\n from_node: redraw this subtree\n */\n private refreshElements(fromNode: Node | null): void {\n const mustSetFocus = this.isFocusOnTree();\n const mustSelect = fromNode\n ? this.isSelectedNodeInSubtree(fromNode)\n : false;\n\n this.renderer.render(fromNode);\n\n if (mustSelect) {\n this.selectCurrentNode(mustSetFocus);\n }\n\n this.triggerEvent(\"tree.refresh\");\n }\n\n private saveState(): void {\n if (this.options.saveState) {\n this.saveStateHandler.saveState();\n }\n }\n\n private selectCurrentNode(mustSetFocus: boolean): void {\n const node = this.getSelectedNode();\n if (node) {\n const nodeElement = this.getNodeElementForNode(node);\n nodeElement.select(mustSetFocus);\n }\n }\n\n // Set initial state, either by restoring the state or auto-opening nodes\n // result: must load nodes on demand?\n private setInitialState(): boolean {\n const restoreState = (): [boolean, boolean] => {\n // result: is state restored, must load on demand?\n if (!this.options.saveState) {\n return [false, false];\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return [false, false];\n } else {\n const mustLoadOnDemand =\n this.saveStateHandler.setInitialState(state);\n\n // return true: the state is restored\n return [true, mustLoadOnDemand];\n }\n }\n };\n\n const autoOpenNodes = (): boolean => {\n // result: must load on demand?\n if (this.options.autoOpen === false) {\n return false;\n }\n\n const maxLevel = this.getAutoOpenMaxLevel();\n let mustLoadOnDemand = false;\n\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n mustLoadOnDemand = true;\n return false;\n } else if (!node.hasChildren()) {\n return false;\n } else {\n node.is_open = true;\n return level !== maxLevel;\n }\n });\n\n return mustLoadOnDemand;\n };\n\n let [isRestored, mustLoadOnDemand] = restoreState(); // eslint-disable-line prefer-const\n\n if (!isRestored) {\n mustLoadOnDemand = autoOpenNodes();\n }\n\n return mustLoadOnDemand;\n }\n\n // Set the initial state for nodes that are loaded on demand\n // Call cb_finished when done\n private setInitialStateOnDemand(cbFinished: () => void): void {\n const restoreState = (): boolean => {\n if (!this.options.saveState) {\n return false;\n } else {\n const state = this.saveStateHandler.getStateFromStorage();\n\n if (!state) {\n return false;\n } else {\n this.saveStateHandler.setInitialStateOnDemand(\n state,\n cbFinished,\n );\n\n return true;\n }\n }\n };\n\n const autoOpenNodes = (): void => {\n const maxLevel = this.getAutoOpenMaxLevel();\n let loadingCount = 0;\n\n const loadAndOpenNode = (node: Node): void => {\n loadingCount += 1;\n this.openNodeInternal(node, false, () => {\n loadingCount -= 1;\n openNodes();\n });\n };\n\n const openNodes = (): void => {\n this.tree.iterate((node: Node, level: number) => {\n if (node.load_on_demand) {\n if (!node.is_loading) {\n loadAndOpenNode(node);\n }\n\n return false;\n } else {\n this.openNodeInternal(node, false);\n\n return level !== maxLevel;\n }\n });\n\n if (loadingCount === 0) {\n cbFinished();\n }\n };\n\n openNodes();\n };\n\n if (!restoreState()) {\n autoOpenNodes();\n }\n }\n\n private triggerEvent(\n eventName: string,\n values?: Record,\n ): JQuery.Event {\n const event = jQuery.Event(eventName, values);\n this.element.trigger(event);\n return event;\n }\n}\n\nSimpleWidget.register(JqTreeWidget, \"tree\");\n"],"names":["DataLoader","constructor","dataFilter","loadData","onLoadFailed","onLoading","treeElement","triggerEvent","this","loadFromUrl","urlInfo","parentNode","onFinished","element","getDomElement","addLoadingClass","notifyLoading","stopLoading","removeLoadingClass","submitRequest","data","parseData","jqXHR","classList","add","isLoading","node","$el","jQuery","parsedData","JSON","parse","remove","urlInfoInput","handleSuccess","handleError","ajaxSettings","cache","dataType","error","method","success","url","toUpperCase","ajax","getBoolString","value","getOffsetTop","getElementPosition","top","rect","getBoundingClientRect","left","x","window","scrollX","y","scrollY","DragElement","autoEscape","nodeName","offsetX","offsetY","createElement","appendChild","move","pageX","pageY","style","document","textContent","innerHTML","position","generateHitAreasForGroup","hitAreas","positionsInGroup","bottom","positionCount","Math","min","length","areaHeight","round","areaTop","i","push","generateHitAreas","tree","currentNode","treeBottom","generateHitAreasFromPositions","hitPositions","previousTop","group","generateHitPositions","lastTop","addHitPosition","iterateVisibleNodes","handleAfterOpenFolder","handleClosedFolder","handleFirstNode","handleNode","handleOpenFolder","isFirstNode","iterate","nextNode","mustIterateInside","is_open","hasChildren","offsetParent","childrenLength","children","forEach","_","child","nextChild","height","clientHeight","DragAndDropHandler","getNodeElement","getNodeElementForNode","getScrollLeft","getTree","onCanMove","onCanMoveTo","onDragMove","onDragStop","onIsMoveHandle","openFolderDelay","openNode","refreshElements","slide","hoveredArea","isDragging","currentItem","mouseCapture","positionInfo","target","mustCaptureElement","nodeElement","mouseDrag","dragElement","area","findHoveredArea","canMoveToArea","isFolder","stopOpenFolderTimer","mustOpenFolderTimer","startOpenFolderTimer","updateDropHint","removeDropHint","originalEvent","mouseStart","refresh","name","mouseStop","moveItem","clear","removeHover","removeHitAreas","dimensions","getTreeDimensions","right","items","compareFn","low","high","mid","item","undefined","compareResult","binarySearch","treePosition","clientWidth","movedNode","targetNode","previousParent","parent","doMove","moveNode","move_info","do_move","moved_node","original_event","previous_parent","target_node","isDefaultPrevented","previousGhost","folder","openFolder","openFolderTimer","setTimeout","clearTimeout","addDropHint","ElementsRenderer","$element","buttonLeft","closedIcon","dragAndDrop","isNodeSelected","onCreateLi","openedIcon","rtl","showEmptyFolder","tabIndex","openedIconElement","createButtonElement","closedIconElement","render","fromNode","renderFromNode","renderFromRoot","$previousLi","li","createLi","getLevel","after","createDomElements","empty","attachNodeData","div","createTextNode","nodeType","isRootNode","level","ul","createUl","createFolderLi","isSelected","buttonClasses","getButtonClasses","folderClasses","getFolderClasses","iconElement","className","setAttribute","buttonLink","cloneNode","titleSpan","createTitleSpan","Boolean","isEmptyFolder","createNodeLi","liClasses","classString","join","classes","setTreeItemAriaAttributes","role","is_loading","KeyHandler","closeNode","getSelectedNode","isFocusOnTree","keyboardSupport","selectNode","originalSelectNode","addEventListener","handleKeyDown","deinit","removeEventListener","moveDown","selectedNode","getNextVisibleNode","moveUp","getPreviousVisibleNode","canHandleKeyboard","e","isKeyHandled","key","moveLeft","moveRight","preventDefault","getParent","getPositionInfoFromMouseEvent","getPositionInfoFromTouch","touch","MouseHandler","getMouseDelay","getNode","onClickButton","onClickTitle","onMouseCapture","onMouseDrag","onMouseStart","onMouseStop","useContextMenu","handleClick","handleDblclick","mouseDown","passive","touchStart","handleContextmenu","isMouseStarted","mouseDelayTimer","isMouseDelayMet","mouseDownInfo","removeMouseMoveEventListeners","getClickTarget","button","closest","type","jqTreeElement","clickTarget","stopPropagation","click_event","handleMouseDown","handleMouseUp","handleStartMouse","handleMouseMove","cancelable","mouseMove","touchMove","mouseUp","touchEnd","mouseDelay","startMouseDelayTimer","touches","isNodeRecordWithChildren","Array","Node","nodeData","isRoot","nodeClass","load_on_demand","setData","idMapping","Map","addAfter","nodeInfo","createNode","childIndex","getChildIndex","addChildAtPosition","loadChildrenFromData","addBefore","addChild","setParent","index","splice","addNodeToIndex","id","set","addParent","newParent","originalParent","append","filter","f","result","indexOf","getData","includeParent","getDataFromNodes","nodes","map","tmpNode","k","Object","prototype","hasOwnProperty","call","v","getLastChild","lastChild","getNextNode","includeChildren","nextSibling","getNextSibling","nextIndex","getNodeByCallback","callback","getNodeById","nodeId","get","getNodeByName","getNodeByNameMustExist","n","Error","getNodesByProperty","getPreviousNode","previousSibling","getPreviousSibling","previousIndex","initFromData","addChildren","childrenData","addNode","isParentOf","_iterate","loadFromData","removeChildren","childData","doRemoveChild","prepend","removeChild","removeNodeFromIndex","delete","o","getNodeClass","BorderDropHint","scrollLeft","querySelector","hint","width","max","offsetWidth","GhostDropHint","ghost","createGhostElement","moveAfter","moveBefore","moveInsideOpenFolder","moveInside","circleSpan","lineSpan","before","childElement","NodeElement","init","mustShowBorderDropHint","deselect","getTitleSpan","removeAttribute","blur","select","mustSetFocus","toString","focus","getUl","FolderElement","super","close","animationSpeed","getButton","icon","doClose","slideUp","hide","open","doOpen","slideDown","show","SaveStateHandler","addToSelection","getSelectedNodes","onGetStateFromStorage","onSetStateFromStorage","removeFromSelection","saveState","saveStateOption","getNodeIdToBeSelected","state","getStateFromStorage","selected_node","getState","open_nodes","getOpenNodeIds","openNodes","getSelectedNodeIds","selectedNodeIds","jsonData","loadFromStorage","parseState","stringify","localStorage","setItem","getKeyName","setInitialState","mustLoadOnDemand","openInitialNodes","resetSelection","selectInitialNodes","setInitialStateOnDemand","cbFinished","loadingCount","nodeIds","newNodesIds","loadAndOpenNode","getItem","selectCount","ScrollParent","container","refreshHitAreas","checkHorizontalScrolling","newHorizontalScrollDirection","getNewHorizontalScrollDirection","horizontalScrollDirection","horizontalScrollTimeout","scrollHorizontally","bind","checkVerticalScrolling","newVerticalScrollDirection","getNewVerticalScrollDirection","verticalScrollDirection","verticalScrollTimeout","scrollVertically","scrollToY","scrollTop","stopScrolling","distance","scrollBy","behavior","ContainerScrollParent","scrollParentOffset","containerWidth","rightEdge","leftEdge","getScrollParentTop","getScrollParentBottom","scrollParentBottom","containerHeight","scrollParentTop","DocumentScrollParent","documentElement","treeTop","documentScrollHeight","documentScrollWidth","isNearLeftEdge","innerWidth","canScrollRight","innerHeight","canScrollDown","getDocumentScrollHeight","getDocumentScrollWidth","scrollHeight","scrollWidth","isOverflow","overflowValue","hasOverFlow","getComputedStyle","overflowX","overflowY","createScrollParent","parentElement","getParentWithOverflow","tagName","ScrollHandler","scrollParent","checkScrolling","getScrollParent","SelectNodeHandler","selectedNodes","Set","selectedSingleNode","getSelectedNodesUnder","has","register","widgetClass","widgetName","getDataKey","getWidgetData","el","dataKey","widget","SimpleWidget","createWidget","options","fn","argument1","args","functionName","destroy","removeData","destroyWidget","callFunction","widgetFunction","apply","static","defaults","NODE_PARAM_IS_EMPTY","PARAM_IS_EMPTY","JqTreeWidget","autoOpen","dataUrl","onCanSelectNode","selectable","startDndDelay","addNodeAfter","newNodeInfo","existingNode","newNode","addNodeBefore","addParentNode","selectNodeHandler","openParents","appendNode","parentNodeParam","slideParam","createFolderElement","off","keyHandler","mouseHandler","getNodeByHtmlElement","inputElement","HTMLElement","saveStateHandler","getVersion","isInitialized","getRtlOption","getDefaultClosedIcon","connectHandlers","initData","dndHandler","doLoadData","loadDataFromUrl","param1","param2","param3","doLoadDataFromUrl","parseParams","openNodeInternal","prependNode","reload","removeNode","scrollToNode","scrollHandler","optionsParam","doSelectNode","setOption","option","setState","toggle","toJson","updateNode","idIsChanged","$treeElement","dataLoader","renderer","containsElement","createNodeElement","deselectCurrentNode","deselectNodes","selectedNodesUnderParent","loadSubtree","initTree","parent_node","tree_data","urlInfoParam","getDataUrlInfo","selectOptions","mustToggle","canSelect","previous_node","deselectedNode","deselected_node","getAutoOpenMaxLevel","parseInt","setUrlInfoData","selectedNodeId","getUrlFromString","liElement","dataRtl","doInit","activeElement","isSelectedNodeInSubtree","subtree","loadFolderOnDemand","doOpenNode","_node","_slide","_onFinished","mustSelect","selectCurrentNode","autoOpenNodes","maxLevel","isRestored","restoreState","eventName","values","event","Event","trigger"],"mappings":"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"} \ No newline at end of file diff --git a/tsconfig.json b/tsconfig.json index c41ac446..09ea2a06 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -3,6 +3,7 @@ "exclude": ["_site", "node_modules"], "include": ["src/**/*"], "compilerOptions": { + "erasableSyntaxOnly": true, "esModuleInterop": true, "lib": ["ES2022", "DOM", "DOM.Iterable"], "module": "ESNext",