From 77606cf1363a4f73c5ed474bd4cbd34e6b500550 Mon Sep 17 00:00:00 2001 From: Alexander Ebert Date: Wed, 13 Nov 2024 13:08:44 +0100 Subject: [PATCH] Update the NPM dependencies --- package-lock.json | 1129 ++++++++++++----- package.json | 14 +- .../3rdParty/focus-trap/focus-trap.umd.min.js | 4 +- .../focus-trap/focus-trap.umd.min.js.map | 2 +- 4 files changed, 841 insertions(+), 308 deletions(-) diff --git a/package-lock.json b/package-lock.json index 34345ef42e..85c4530e32 100644 --- a/package-lock.json +++ b/package-lock.json @@ -10,26 +10,26 @@ "@googlemaps/markerclusterer": "2.0.15", "@types/facebook-js-sdk": "^3.3.12", "@types/google.maps": "^3.58.1", - "@types/jquery": "^3.5.30", + "@types/jquery": "^3.5.32", "@types/pica": "5.1.3", - "@types/prismjs": "^1.26.4", + "@types/prismjs": "^1.26.5", "@types/twitter-for-web": "0.0.6", - "@woltlab/editor": "git+https://github.com/WoltLab/editor.git#efa5ffdc4a094c55ef015b29c9d5024649a8ea32", + "@woltlab/editor": "git+https://github.com/WoltLab/editor.git#ebd849dd0abb0826fd4c56b29d88a79b45a4f9fb", "@woltlab/visual-dom-diff": "git+https://github.com/WoltLab/visual-dom-diff.git#e5b51fce3157d1eda310566fc1f86101341d1fea", "@woltlab/zxcvbn": "git+https://github.com/WoltLab/zxcvbn.git#5b582b24e437f1883ccad3c37dae7c3c5f1e7da3", - "focus-trap": "^7.6.0", + "focus-trap": "^7.6.1", "html-parsed-element": "^0.4.1", - "perfect-scrollbar": "^1.5.5", + "perfect-scrollbar": "^1.5.6", "qr-creator": "^1.0.0", "reflect-metadata": "^0.2.2", "tabbable": "^6.2.0", "tslib": "^2.8.1" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^8.12.2", - "@typescript-eslint/parser": "^8.12.2", + "@typescript-eslint/eslint-plugin": "^8.14.0", + "@typescript-eslint/parser": "^8.14.0", "esbuild": "^0.24.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "eslint-config-prettier": "^9.1.0", "prettier": "^3.3.3", "typescript": "^5.6.3" @@ -44,162 +44,400 @@ "node": ">=0.10.0" } }, + "node_modules/@ckeditor/ckeditor5-adapter-ckfinder": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-adapter-ckfinder/-/ckeditor5-adapter-ckfinder-43.3.1.tgz", + "integrity": "sha512-fOnEq31euR9B/awWZCOc8KfgLwwG4ACtqBhSv7Hu6VOgHa5TKWyWAdhr9ILSiUp7NMfYJoTQStbxcXZIWPqQXQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-upload": "43.3.1", + "ckeditor5": "43.3.1" + } + }, "node_modules/@ckeditor/ckeditor5-alignment": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-41.3.0.tgz", - "integrity": "sha512-n+4AaxVoHjWvdkGVxCODlQFUGYqpUnQX7FwXD8xb4iXhcWmIhlMM81hTJ0KReJPwBfDxcre1NR+Kn9hWcgQlOg==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-alignment/-/ckeditor5-alignment-43.3.1.tgz", + "integrity": "sha512-E+04zNdNBFDNgQajrWl8iFQqA1sB29y/XDFFRK+bzhcUaWdMadr88yodjHHdcax8/zI+GzBElCvWGEGchyrL+Q==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" } }, - "node_modules/@ckeditor/ckeditor5-autosave": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-41.3.0.tgz", - "integrity": "sha512-uSJws3JAYTkz/oxyZpINdfghMMWFqFarfjwsUv90sC1rQgjWq6aBqJaPvtn/sZzLg9wqxdId0DjjRlzp6ggqNA==", + "node_modules/@ckeditor/ckeditor5-autoformat": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autoformat/-/ckeditor5-autoformat-43.3.1.tgz", + "integrity": "sha512-hSQxIXIObrMfxijMPmz8odOtz/wD5SwuGZWVoF5km3EtRQxZwAcQr1Vjy+VHHPo6PZ+o3YoLP+IHCaULtNobYg==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-autosave": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-autosave/-/ckeditor5-autosave-43.3.1.tgz", + "integrity": "sha512-28667m7ea0wBZMb3uIzgipanB4DrDvKn4o+mRUDExlRT8M14vn1u/ILX8ZJy28Rihbg2wPcVh6rP3zoQjcucHw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1", "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-basic-styles": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-41.3.0.tgz", - "integrity": "sha512-FSH/pmrApZZqZ83LHXsQkjQK5fRai7UUyqkPBsL/mgTm05/MLgyuoGYTR5+ogRTh05IQV6Wt9aMtRoboAtLCrw==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-basic-styles/-/ckeditor5-basic-styles-43.3.1.tgz", + "integrity": "sha512-1RBnPmgsIoxPL7wZhId2KsfPujITbEAfzHhi0c6m4kuWlkmcVXYldWvUvCvAUguAznx4LOxhKlp6RdFSPTFTbg==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "ckeditor5": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-block-quote": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-41.3.0.tgz", - "integrity": "sha512-md1xncrU4GQRHaJMVtON6F+7cVz+IaqEKtovnODja5CWMIrDfBQ+JMECo3UjGUn1V7nJgF+MUODnUI4+Ns4Ngw==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-block-quote/-/ckeditor5-block-quote-43.3.1.tgz", + "integrity": "sha512-cgY4GKwMlIVLnhszPoc1ortp+T/s3TLowrwRFtWYxTKSsHWBGFlZUL6oMASPunpXvvJqHcgnKlCMxVSh2VMCkQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-enter": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-ckbox": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckbox/-/ckeditor5-ckbox-43.3.1.tgz", + "integrity": "sha512-KObL9w/QBWJi0lG2zfm+x124Kzd7aVt+UaJHJEwsAPwhZvqM0LCUeR6wwb0oCN6ph5qrCjXoj09z7z8Txk5IwA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-upload": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "blurhash": "2.0.5", + "ckeditor5": "43.3.1", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-ckfinder": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ckfinder/-/ckeditor5-ckfinder-43.3.1.tgz", + "integrity": "sha512-Yji6c1/0H5fExDcT+NNyQQePx2cd8Ul1Xuko1UVmsLN2Vhi7VIDJjEkCFndJozd8VQqI62Obe1GTyjmapBV5+A==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-clipboard": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-41.3.0.tgz", - "integrity": "sha512-ZVCl4L4FggW64DtL5m1RPSKEo6HwkTViu7m+cN6NXT7VAV4SVEvxhL1vYpz/vhBBPZLw6kSELX17fbI3PbIa0g==", - "dependencies": { - "@ckeditor/ckeditor5-core": "41.3.0", - "@ckeditor/ckeditor5-engine": "41.3.0", - "@ckeditor/ckeditor5-ui": "41.3.0", - "@ckeditor/ckeditor5-utils": "41.3.0", - "@ckeditor/ckeditor5-widget": "41.3.0", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-clipboard/-/ckeditor5-clipboard-43.3.1.tgz", + "integrity": "sha512-Ke6fVEy1fF3AWHMtKvF1pAoDYBVOG4q+gDHD8+dcV6KPK1uA/CR0mw6TZsslQQquT4jC79y05IWu2bq1Mxv01w==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "@ckeditor/ckeditor5-widget": "43.3.1", "lodash-es": "4.17.21" } }, + "node_modules/@ckeditor/ckeditor5-cloud-services": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-cloud-services/-/ckeditor5-cloud-services-43.3.1.tgz", + "integrity": "sha512-JppySF+uWedDXPTVZBsTfZCe3qedDAdWSgw0Ww/qi4/sPFcgf/MaQ0LBHbl2Ii7JlJjng82F1F2kv9Ny/Rkauw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" + } + }, "node_modules/@ckeditor/ckeditor5-code-block": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-41.3.0.tgz", - "integrity": "sha512-7W8OCPBn2xzmfaFiPTonelxfi8k2TW2UeMY5chvl+9MmG9dnOwy0z7bIyO7uUzic+4dJxZB77/n9fjQWrWauuA==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-code-block/-/ckeditor5-code-block-43.3.1.tgz", + "integrity": "sha512-UGhGCPNfFXLua0TmszLSWX6BlkemaPULN1EZ+FBPsUZb757qWWWVWI9GKLmAc4jSPqOv+azU+JAZJzX9bE1oYA==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-clipboard": "43.3.1", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-enter": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-core": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-41.3.0.tgz", - "integrity": "sha512-3K1dQJTawbCJtaytZvIkax8fZjN7lns0IFEbu2MWTBGlXmifiDyRDRJe6/e/0sGSiKGsoBGIky8M0iYzqLbd3g==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-core/-/ckeditor5-core-43.3.1.tgz", + "integrity": "sha512-6pil2OF4auF3PKrg1Oa86CqC91ZYc+NuHih0ebM0JW/I06d+0smnJg5dw4yN7mKbghbJS8mNrusxA5cf6Hkh6w==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "@ckeditor/ckeditor5-watchdog": "43.3.1", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-easy-image": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-easy-image/-/ckeditor5-easy-image-43.3.1.tgz", + "integrity": "sha512-Cd5NojL0Vfa1SQj6uzbP3oSHvQY5ys2hXF/2jNsYKLePTCybSvGkg5REv1JifM6kSNRH1VXdad7a2LkqvXnCnA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-upload": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-editor-balloon": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-balloon/-/ckeditor5-editor-balloon-43.3.1.tgz", + "integrity": "sha512-klS1FZG29nJE/XbfRXrXtwYU/9uCFdi7xGbYfaJnmyNt54h46aiquKacosbiffA87Tr5sT3Oqm3dBbNlsU158w==", + "license": "GPL-2.0-or-later", "dependencies": { - "@ckeditor/ckeditor5-engine": "41.3.0", - "@ckeditor/ckeditor5-utils": "41.3.0", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1", "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-editor-classic": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-41.3.0.tgz", - "integrity": "sha512-yhs078iq0eSQpZ9+RQAWxSTsJoqYEbGomhlHebjHc9bpsTFFA4T8vcroWTvhRmySEpbHfRnADxQBj0ZGQfyDdA==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-classic/-/ckeditor5-editor-classic-43.3.1.tgz", + "integrity": "sha512-wjBeXUQBuvz6CmGlb5XncJ9cHE7tozU6eoorycfSTQCzqr5uE57LWTlKclU42w7MgS2ya5V2kLnncr0ZqrZ2Vw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-editor-decoupled": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-decoupled/-/ckeditor5-editor-decoupled-43.3.1.tgz", + "integrity": "sha512-aw2iZ+WCcCu9sUAnsHhsXZWLeVPyiLhZfpZDuEWjPlvsrCfT0RfSuwMcfx7l9PREA09VR8+6MTstm61EG8dmWQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-editor-inline": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-inline/-/ckeditor5-editor-inline-43.3.1.tgz", + "integrity": "sha512-3iZiWl2aM1bCnS52NeBoAqCVowABhWrBlns27JEGKZ+LNPZroMie7uKuMX3YQGYE2awFnsyP6XofoJtu6CcKCA==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-editor-multi-root": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-editor-multi-root/-/ckeditor5-editor-multi-root-43.3.1.tgz", + "integrity": "sha512-HDgfTuotrHW91AZ+x+lumwo1tngRRZ87dnHT8kjSRFWAeXPSd2Kw986++Oj9K080+idZaYLF+IutAOqvCT32sw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1", "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-engine": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-41.3.0.tgz", - "integrity": "sha512-H+t3o5zuoyTzygCP2V/x0WEd2Vn3I1XwJtDbvcXDz1C05dbWf5UUAj/xIsgoIgmOl+HKNVLhPiCjZGXXZhCNzQ==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-engine/-/ckeditor5-engine-43.3.1.tgz", + "integrity": "sha512-Fkv3ibQLDPVHFH0z4/+gA5wrkPVWOen+Cjv/NecNBeAszZUo+F2j9RwvQ1zHwtGb0RWj3+BWOPgo8jhSe7tFgA==", + "license": "GPL-2.0-or-later", "dependencies": { - "@ckeditor/ckeditor5-utils": "41.3.0", + "@ckeditor/ckeditor5-utils": "43.3.1", "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-enter": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-41.3.0.tgz", - "integrity": "sha512-b061fD75nm9KMq/OXa6ilEMk9LJOrLMAst0/kX6ig0q9nE0VSkwkXqVAtCRbliEf0GIqQCjUvm2EoDuFeGWKeQ==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-enter/-/ckeditor5-enter-43.3.1.tgz", + "integrity": "sha512-xaHnU2RbfYi8ilfN260pB3YDvJ9lE4SfiFQusyRdWkeBo5gDAGBbQY+qCC/hmxkr/yftNZfK+d7Ow93xXtqEwg==", + "license": "GPL-2.0-or-later", "dependencies": { - "@ckeditor/ckeditor5-core": "41.3.0", - "@ckeditor/ckeditor5-engine": "41.3.0", - "@ckeditor/ckeditor5-utils": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-essentials": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-41.3.0.tgz", - "integrity": "sha512-K6RXnNujsaF/m5BYMiEDE6WeGqs3JHnorK5JutsQ+QebqVs3P4nG78NmyFvf42FfgPKrpap2vyWky1M/DVFVOQ==", - "dependencies": { - "ckeditor5": "41.3.0" + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-essentials/-/ckeditor5-essentials-43.3.1.tgz", + "integrity": "sha512-bZtzXhmBz8XF9J4eUxOjURmw0HJPKIqo18a6vNxg07W8z3ouHMb9ke//4z4FF9N/1dbtA7a2+jIACO6WvXrX4A==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "43.3.1", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-enter": "43.3.1", + "@ckeditor/ckeditor5-select-all": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-undo": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-find-and-replace": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-find-and-replace/-/ckeditor5-find-and-replace-43.3.1.tgz", + "integrity": "sha512-U9dyK8yQgxGTUphRbqdUJbvfi5v7zzijCo3Kj51NxyWwOFh7SGReQxHDGn44DmSRold6lg4F1sbXeFdwu1o+WA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1", + "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-font": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-font/-/ckeditor5-font-41.3.0.tgz", - "integrity": "sha512-CfJmS5rURMuCrssYGkqtfAF62YTx5B/lyZfR5d+nCPFSWWNjkVBzvGtR0jyVlLiaL+aaQBRys+s7DcwwVKUdyA==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-font/-/ckeditor5-font-43.3.1.tgz", + "integrity": "sha512-NOeBtScqMuBLVWFPuW0snleh7rMFkNb006yzDIG6JApnF3Vxi0JLQXub/lPHPgw5srqJ3z159DWT++exoyz/mQ==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-heading": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-41.3.0.tgz", - "integrity": "sha512-n8Og5x8IM8+MAFPh87DW/RqopMTJzPiONESt6XzvcHf+BLreImPwIy4abIpHbm1eAaQpv4ojHuMMYWSfOmv2JQ==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-heading/-/ckeditor5-heading-43.3.1.tgz", + "integrity": "sha512-cc8H027Y2OwvYDGMTbBSzE+oZaiLMZtlUnkgiolMw/OQ59ysONYi+KqyMzBMTuaXrkP3CLM57ZbsVGASQ3IQmQ==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-paragraph": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-highlight": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-41.3.0.tgz", - "integrity": "sha512-eAPb9wSFcm7gHeI1WMIW9ZxJfjMe1AmIoD6o2Ved8bqw8zsMy0b+7+wTUQ1iMHRO7QAVRWg8XZG2kgDPr4Yqsw==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-highlight/-/ckeditor5-highlight-43.3.1.tgz", + "integrity": "sha512-XVJq1YP4IAaWQBAyY1xlKOfzkpnclUH8zTUPaW3TZUGK5t6W/vFT+KAzYfUp7PdBb+PP8/O47FwKTvIQBkbqFw==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "ckeditor5": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-horizontal-line": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-41.3.0.tgz", - "integrity": "sha512-l4MP0uiGOudciUwnpenXOHv0Z3sp606CIxshVbgAuWF8LTEhHOGUaHHRDWI/YnQgmKiolotTan1WYNa1bhULJw==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-horizontal-line/-/ckeditor5-horizontal-line-43.3.1.tgz", + "integrity": "sha512-zkKe0S9gBXwveBUzUuCBPWyrzHQor/zcMCCX9YQk1StUxtRRsURNvWOoFeoG+Vf5jMGSA2gpnBgIo70WrX4A3A==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-widget": "43.3.1", + "ckeditor5": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-html-embed": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-41.3.0.tgz", - "integrity": "sha512-+qFSnhmmGp2QtP4JDq5c4MQS0keKfpBKP2/rZaWYl70539JfhQBJrH+I03dz+881SenNPAqMRxFRoks062gGvw==", - "dependencies": { - "ckeditor5": "41.3.0" + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-embed/-/ckeditor5-html-embed-43.3.1.tgz", + "integrity": "sha512-VqIhhPwMgAzmPqjvQUQYaFmCFglkg203W+LSVCwrvgVZ9mVtKbkhwCHBJnLhG7qatar7Gg93bObfAFdAjsaR2A==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "@ckeditor/ckeditor5-widget": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-html-support": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-html-support/-/ckeditor5-html-support-43.3.1.tgz", + "integrity": "sha512-cnQ+kCPYH5GiSe5S+13Fr0vuS7DzT4Onx11fvOkssUujtAJ1e/C7hNf5Ehd+SOAgr5IzevutA/+OeR2KHGjIag==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-enter": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "@ckeditor/ckeditor5-widget": "43.3.1", + "ckeditor5": "43.3.1", + "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-image": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-41.3.0.tgz", - "integrity": "sha512-G7vbgtycwW2USQfcbNn3iT7d+/7phKuwwZX7aaDQvFX4ciqeBVDIh9d/v3UYqPhBU5sWA5aILsXwrrM2CimFBw==", - "dependencies": { - "@ckeditor/ckeditor5-ui": "41.3.0", - "ckeditor5": "41.3.0", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-image/-/ckeditor5-image-43.3.1.tgz", + "integrity": "sha512-QgHxZtWpclzQ5SUrh1oMsGFCvjykxge5IKe96iKUyAVrhyQp60RhW8DdAElHnPUg3wwILMYE7cKMphknCxcVkQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "43.3.1", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-undo": "43.3.1", + "@ckeditor/ckeditor5-upload": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "@ckeditor/ckeditor5-widget": "43.3.1", + "ckeditor5": "43.3.1", "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-indent": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-41.3.0.tgz", - "integrity": "sha512-GbqTHvWnLjqlqqxmmC1gO0Tfg6mXjah6TuI/JvRzID1fOwddFKFrBX+bk9LlWz0HlGEouW/aDTihbyE4ODZXXQ==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-indent/-/ckeditor5-indent-43.3.1.tgz", + "integrity": "sha512-CPU50tumKH7rJ6f9QEB/LHSyzKul9xP/43F1IesvOBWnOkAxQ2QI51oORT5WdKn4B0Z56ojAm48Q/ZUtsef+3w==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-inspector": { @@ -211,104 +449,278 @@ "npm": ">=5.7.1" } }, - "node_modules/@ckeditor/ckeditor5-link": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-41.3.0.tgz", - "integrity": "sha512-JW6Og4lnDsSKjGyL5FKvSU3690oTtu5e/aVNn81NQqZpfczcDvgqjD7fdPwgI4cuvepa+six1N8uEVABjvjtSQ==", + "node_modules/@ckeditor/ckeditor5-language": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-language/-/ckeditor5-language-43.3.1.tgz", + "integrity": "sha512-M7npJRhLoZksnvjZ0fS+6hbAN4RebgZCE2bT9b3Z8Df2Alfy0GJEwJL5aQsYpr+78QFeytTpqzjxXLNLjOyEqA==", + "license": "GPL-2.0-or-later", "dependencies": { - "@ckeditor/ckeditor5-ui": "41.3.0", - "ckeditor5": "41.3.0", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-link": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-link/-/ckeditor5-link-43.3.1.tgz", + "integrity": "sha512-duTA7harmvZPZ2LbJ8tHnOrhx5lGk6AGavbDzK2xuicMncivm+amrkl/b771uA3Rr6gclHY77ZPcOuVaK+dp/g==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "43.3.1", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "@ckeditor/ckeditor5-widget": "43.3.1", + "ckeditor5": "43.3.1", "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-list": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-41.3.0.tgz", - "integrity": "sha512-UxdRba5hLkP1Nl/gfbNoivcvXdQYavcgZZl36zO+CCuEgIcP7qcFRhye2oitiGZ1tSJfXD2/JAkkLOITdsKSjg==", - "dependencies": { - "ckeditor5": "41.3.0" + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-list/-/ckeditor5-list-43.3.1.tgz", + "integrity": "sha512-PuR6uJ/SKvaXIgqTO3MUnX+00/xB/TalStiVqZqqG0xlYg47/eb6hul+4fmTPV7ahlJaon6Y3nO49TsPbbhApQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "43.3.1", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-enter": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-markdown-gfm": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-markdown-gfm/-/ckeditor5-markdown-gfm-43.3.1.tgz", + "integrity": "sha512-aVP2FqQP7okSAorQoItcYRbOd0J2O1ubGjtvGGzl3uC5TuKAtlWYWcBfiVTHKxCCtxywPRiEgBxwoGuB5mlwhA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "43.3.1", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "ckeditor5": "43.3.1", + "marked": "4.0.12", + "turndown": "7.2.0", + "turndown-plugin-gfm": "1.0.2" + } + }, + "node_modules/@ckeditor/ckeditor5-media-embed": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-media-embed/-/ckeditor5-media-embed-43.3.1.tgz", + "integrity": "sha512-3xMIaH/NTNEKv+lu1cRIIPGgDJgYI1DB+5NMXNVL3UGQkXdqW7PtgFDsOnhQwTAbyKpy+fHDngLb3eZuRdDkKw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "43.3.1", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-undo": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "@ckeditor/ckeditor5-widget": "43.3.1", + "ckeditor5": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-mention": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-41.3.0.tgz", - "integrity": "sha512-jhXtsm+dw8g9b/Y6xK9LngwdXsRI23YRYjXzJxdlPR92eLB3nLIx1zD8FvqJarfVCTVjrYbp0FPTr3FjjddSuQ==", - "dependencies": { - "ckeditor5": "41.3.0", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-mention/-/ckeditor5-mention-43.3.1.tgz", + "integrity": "sha512-yrOdynVNOS72RjTjhFHzv3Ofbm0eTBKFhuibxdKFfHtTR0QIqSVB5jU+aW1+Jq5LG73E+9eYtip5paSjkqJMWQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1", "lodash-es": "4.17.21" } }, + "node_modules/@ckeditor/ckeditor5-minimap": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-minimap/-/ckeditor5-minimap-43.3.1.tgz", + "integrity": "sha512-2b0b4mZtRIHAvN/MFAVeqiGt58TZI7ixLcgJo0MHNesYlIk6v13opDWhQ9oefNe8OwJMkD3fAHMlAcg+fUqA9g==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-page-break": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-page-break/-/ckeditor5-page-break-43.3.1.tgz", + "integrity": "sha512-6AI2GGJveEm/2GESUY01wSPM7AeqHqVuX4Hon20uCAXHYCQkDubOHJ0yV3oFXl7iHeO6Ue2DdlSLayIUXCLoEQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-widget": "43.3.1", + "ckeditor5": "43.3.1" + } + }, "node_modules/@ckeditor/ckeditor5-paragraph": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-41.3.0.tgz", - "integrity": "sha512-9wcGu99fltVZNq+vn6PEiib+4pERIR8ntDZr+Gi++4jqDEehVbQbaqKRwy/fLCl0JFaRVnmtsRm+iaUnkL3R3Q==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paragraph/-/ckeditor5-paragraph-43.3.1.tgz", + "integrity": "sha512-16ry56X+uXuZEzGZwLS8zpX2DtWN/CHHu5pSz0r2VDZ1zUGLsq/MXutotZfzMMjgdED3x4mJRQE+WgiyRrlKDg==", + "license": "GPL-2.0-or-later", "dependencies": { - "@ckeditor/ckeditor5-core": "41.3.0", - "@ckeditor/ckeditor5-ui": "41.3.0", - "@ckeditor/ckeditor5-utils": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-paste-from-office": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-41.3.0.tgz", - "integrity": "sha512-jItJg9tpQxSv3FjH90RSX+bZmqwVlHZcgTRI03rkQlwi+hlneP6Cu8vxRt0zRRbNLxy0gdnk6QpD1vbq/8riHQ==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-paste-from-office/-/ckeditor5-paste-from-office-43.3.1.tgz", + "integrity": "sha512-LLf1KB11jeYLDpQPq0d2QVPxQxp9kEibPAF4rGD4stPpRx9d+DbwmE59Y5wVASKvYJo+yNpR9CGWsE4ZgjwTWw==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-clipboard": "43.3.1", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "ckeditor5": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-remove-format": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-41.3.0.tgz", - "integrity": "sha512-QOeVjT/ct2VLBd3ch4Ua/xjQs/5iXaIMjGidMLWvN8TiOYRq50dyy7ecjS4TPyzeQUVa7jd0fZiXTCjgHYZ2yA==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-remove-format/-/ckeditor5-remove-format-43.3.1.tgz", + "integrity": "sha512-m7zvvYzHN/HExT0NoILXauVFI/AKQyuzPqqCI/VO1Ft5mLswXGuK6vmO1U10SmGz85etYZjEipKuouf2Anyqxg==", + "license": "GPL-2.0-or-later", "dependencies": { - "ckeditor5": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" } }, - "node_modules/@ckeditor/ckeditor5-select-all": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-41.3.0.tgz", - "integrity": "sha512-w14V7OHVVB9NlO536+NYPvgNk0XCNufO2oxO0B4Tf4iQi6U3LYxyMJwotHDwhJqYVHofLQyeuwFF3Y2N1d1NnQ==", + "node_modules/@ckeditor/ckeditor5-restricted-editing": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-restricted-editing/-/ckeditor5-restricted-editing-43.3.1.tgz", + "integrity": "sha512-L6sA6UrUPy4Q3AzF8yQGsgEadO1IcZv53Ijevk9KuD7dwLF4f9x4ukUFLlGRpoYHPAW/+RpADp2PPegjKHo9QQ==", + "license": "GPL-2.0-or-later", "dependencies": { - "@ckeditor/ckeditor5-core": "41.3.0", - "@ckeditor/ckeditor5-ui": "41.3.0", - "@ckeditor/ckeditor5-utils": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-select-all": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-select-all/-/ckeditor5-select-all-43.3.1.tgz", + "integrity": "sha512-oYQ8uF6hmlX7OefpJ0FflvKddAkEffg3fKMT2FAINwqxhX+O7h9RQZ79AiOkTab7HUTIkbhM5AlhFJIXiX0Z7Q==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-show-blocks": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-show-blocks/-/ckeditor5-show-blocks-43.3.1.tgz", + "integrity": "sha512-o+IhZnjMmoF2qd4l1GqQqroeIEA29QAIOYfvrdMKZGrzVGmjbvwyNkbJRyZlAYhZqX8tLDPaPGn0tl+onhWtzw==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-source-editing": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-source-editing/-/ckeditor5-source-editing-43.3.1.tgz", + "integrity": "sha512-Pq7WthQAiKa3A3q82bHqNRjQ/xlOpSX9kZHLm+CDH8XACxZbBF6Unz4JPR9zJRuQxkoFs314DM/PG6pPZQgXXA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-theme-lark": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-special-characters": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-special-characters/-/ckeditor5-special-characters-43.3.1.tgz", + "integrity": "sha512-3iwrtISndl5hc+/LuSXht69xqkEv95zg8Qxv+ovREA3pvtgt5u9O0t7ELcmUeTTEs/hJkF2FDplIYQj5zIvO+g==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1" + } + }, + "node_modules/@ckeditor/ckeditor5-style": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-style/-/ckeditor5-style-43.3.1.tgz", + "integrity": "sha512-2+ATPa5y4ZUkak5xFTTDeUPhuCAYB4OPNt/QjMvrQjpEwXoWDJ4f8GqR9oFFsqEGMm65GrUp/xIQW8WRH43Kng==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1", + "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-table": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-41.3.0.tgz", - "integrity": "sha512-0oz7gP2TTRPZy3sss3TKoJ9Kpf9/mmQgH17VTMotF2CKJbPZdP7m8NciFH5CPqRuWZZKMCXn02pZyqhA+U+7HA==", - "dependencies": { - "ckeditor5": "41.3.0", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-table/-/ckeditor5-table-43.3.1.tgz", + "integrity": "sha512-Qr3GkKELnG1EY7Bu9dGQBkGTqhVnygeHKDCTEG9m218shYsI5L6jFftGUzWmJzMpm3hNFkyYv+1YWaIoqfRzIQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-clipboard": "43.3.1", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "@ckeditor/ckeditor5-widget": "43.3.1", + "ckeditor5": "43.3.1", "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-theme-lark": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-41.3.0.tgz", - "integrity": "sha512-WKlgqDhajGkxakQ/ub45g4Zo5JoP3SCAlLsRQoiosm63twEoGlIB4F/zYJpSc1GtdZQf/dPFKYpE1mcr6wBc/A==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-theme-lark/-/ckeditor5-theme-lark-43.3.1.tgz", + "integrity": "sha512-kAgeGx66jT31FFYwAoc43oX5ehQtiYE57OJWlPTXrDXxyq0Y+LYFW2/bp4UVYdZK+OKv9dp1Do3VQfxJoGzFjg==", + "license": "GPL-2.0-or-later", "dependencies": { - "@ckeditor/ckeditor5-ui": "41.3.0" + "@ckeditor/ckeditor5-ui": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-typing": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-41.3.0.tgz", - "integrity": "sha512-xboj4s3GcG+pwOYZeVUle8RkRE+De7OsejnzcwCwx+wJ2PkOwbSyVdXQIdRq+DSPxfISGjyFXGinSWiUx0taJg==", - "dependencies": { - "@ckeditor/ckeditor5-core": "41.3.0", - "@ckeditor/ckeditor5-engine": "41.3.0", - "@ckeditor/ckeditor5-utils": "41.3.0", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-typing/-/ckeditor5-typing-43.3.1.tgz", + "integrity": "sha512-sK45GlrOHqWOphVnzDKe3kofVJGhSRk34UQJnyXgMN+35QJqypnJeBYBnnHWL8+nK0S4zk9oQO3PuiRH6gg/WQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-ui": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-41.3.0.tgz", - "integrity": "sha512-F/zDk3584klgeoP2VyQmXn4cx0ekkfB8JD8JpqVNPAcLlw6HRdP9zhSTc9fDkA8QGnRIA/M0cXm3qXYS1Vms0Q==", - "dependencies": { - "@ckeditor/ckeditor5-core": "41.3.0", - "@ckeditor/ckeditor5-utils": "41.3.0", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-ui/-/ckeditor5-ui-43.3.1.tgz", + "integrity": "sha512-dbR4FK6mCkI89h4Joyf1PZt0Xsq0N+sZg05Z6BpYz6GS9U35C7J9bHxN469dvaIc8bJws4eYJ5x+St3LcvlduQ==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", "color-convert": "2.0.1", "color-parse": "1.4.2", "lodash-es": "4.17.21", @@ -316,51 +728,70 @@ } }, "node_modules/@ckeditor/ckeditor5-undo": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-41.3.0.tgz", - "integrity": "sha512-o9zNt8joLzepvoR4eFtA7wklmi7PaA94iHk6QqE0xYL0y6qhwH+RharJRfftMaYAEUTRK4LeVXY6tjRmV5QRXQ==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-undo/-/ckeditor5-undo-43.3.1.tgz", + "integrity": "sha512-UxrWPlHzL/DKuxp4R5mlQvy995Ozehh5hQxY5yvL285Dzv6PY5pk627Wv/qS8AyfLMyVNiFO9bDWBIcT9igQRA==", + "license": "GPL-2.0-or-later", "dependencies": { - "@ckeditor/ckeditor5-core": "41.3.0", - "@ckeditor/ckeditor5-engine": "41.3.0", - "@ckeditor/ckeditor5-ui": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-upload": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-41.3.0.tgz", - "integrity": "sha512-ya7251S5oyqYzYNK4Ioz8L6Z4Dp93FItmm3uBAoEyWV0t0F0HeFpX+iWDTi9tfw6OgzZ8B0jPb6WYiAnrw2V3g==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-upload/-/ckeditor5-upload-43.3.1.tgz", + "integrity": "sha512-uOEhCgqgiK4V/CnbnuwHU/NUOG4ioQE5KUUtVmRG2xjQKg5C1uIT2dig+wnKw8vOdwVTMD2hVt7/OC/whQuheQ==", + "license": "GPL-2.0-or-later", "dependencies": { - "@ckeditor/ckeditor5-core": "41.3.0", - "@ckeditor/ckeditor5-utils": "41.3.0" + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1" } }, "node_modules/@ckeditor/ckeditor5-utils": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-41.3.0.tgz", - "integrity": "sha512-MhsmTLklzwmMo7JFEVqul8eFOX3pD91mF8XfxH3qOb/GPxMmN0cCLVkY+W/WE/YCr5HZcWym3v0rVnUjqGZ6jQ==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-utils/-/ckeditor5-utils-43.3.1.tgz", + "integrity": "sha512-4CyM3AP+DcfuPuw+zceI3UTh3HcusnvFVeRPPw6j3Qe29/jadZYsdvkdo9KsDaiwgx0ctooKCuY9SfAcd/CZNQ==", + "license": "GPL-2.0-or-later", "dependencies": { + "@ckeditor/ckeditor5-ui": "43.3.1", "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-watchdog": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-41.3.0.tgz", - "integrity": "sha512-TVROhUR5hHy+2cbbuRc/+EO9xFcC8z/tWcMwOGlRIIwLJUu5GXWiCInF+wV0sG7IYdGIEEoOiTPiHzOSQSt5lQ==", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-watchdog/-/ckeditor5-watchdog-43.3.1.tgz", + "integrity": "sha512-d9gh0QIrrImIe2SFLo/IBLdpgC9REVkvUTv//qLbUaM2ffBboMnpJYPAB/hgl8ev4lkDvCrivlGjc/80COfGTQ==", + "license": "GPL-2.0-or-later", "dependencies": { "lodash-es": "4.17.21" } }, "node_modules/@ckeditor/ckeditor5-widget": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-41.3.0.tgz", - "integrity": "sha512-Cf0C6+G3LP4fZnPMmuCo1TknsGoikb7sz0MgW+16h1UGmNu5QpyOH9oGnHeDbeVFKyR4Ld0Li9Kw9+oJL9g6OA==", - "dependencies": { - "@ckeditor/ckeditor5-core": "41.3.0", - "@ckeditor/ckeditor5-engine": "41.3.0", - "@ckeditor/ckeditor5-enter": "41.3.0", - "@ckeditor/ckeditor5-typing": "41.3.0", - "@ckeditor/ckeditor5-ui": "41.3.0", - "@ckeditor/ckeditor5-utils": "41.3.0", + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-widget/-/ckeditor5-widget-43.3.1.tgz", + "integrity": "sha512-0naXUVC6BFLnuj3lu5aTfRxmqV6py9+zqGHdJJZ0x8uSg9qcfUCLEQvA59bqzNteRya/lZeZhYKj8IcGnbB1oA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-enter": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "lodash-es": "4.17.21" + } + }, + "node_modules/@ckeditor/ckeditor5-word-count": { + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/@ckeditor/ckeditor5-word-count/-/ckeditor5-word-count-43.3.1.tgz", + "integrity": "sha512-W0Ic7y4/ePVqW22pHuXv5HRAbaDJFO13rUqyTZqU2H2ExZdMbJN6eT/UVhnO1XvKs/+jdKGO3LGWXt9QmmtkhA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "ckeditor5": "43.3.1", "lodash-es": "4.17.21" } }, @@ -788,9 +1219,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.11.1", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.1.tgz", - "integrity": "sha512-m4DVN9ZqskZoLU5GlWZadwDnYo3vAEydiUayB9widCl9ffWx2IvPnp6n3on5rJmziJSw9Bv+Z3ChDVdMwXCY8Q==", + "version": "4.12.1", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.12.1.tgz", + "integrity": "sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==", "dev": true, "license": "MIT", "engines": { @@ -847,9 +1278,9 @@ } }, "node_modules/@eslint/js": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.13.0.tgz", - "integrity": "sha512-IFLyoY4d72Z5y/6o/BazFBezupzI/taV8sGumxTAVw3lXG9A6md1Dc34T9s1FoD/an9pJH8RHbAxsaEbBed9lA==", + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-9.14.0.tgz", + "integrity": "sha512-pFoEtFWCPyDOl+C6Ift+wC7Ro89otjigCf5vcuWqWgqNSQbRrpjSvdeE6ofLz4dHmyxD5f7gIdGT4+p36L6Twg==", "dev": true, "license": "MIT", "engines": { @@ -940,6 +1371,12 @@ "url": "https://github.com/sponsors/nzakas" } }, + "node_modules/@mixmark-io/domino": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/@mixmark-io/domino/-/domino-2.2.0.tgz", + "integrity": "sha512-Y28PR25bHXUg88kCV7nivXrP2Nj2RueZ3/l/jdx6J9f8J4nsEGcgX0Qe6lt7Pa+J79+kPiJU3LguR6O/6zrLOw==", + "license": "BSD-2-Clause" + }, "node_modules/@nodelib/fs.scandir": { "version": "2.1.5", "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", @@ -1002,9 +1439,9 @@ "integrity": "sha512-X9QTSvGJ0nCfMzYOnaVs/k6/4L+7F5uCS+4iUmkLEls6J9S/Phv+m/i3mDeyc49ZBgwab3EFO1HEoBY7k98EGQ==" }, "node_modules/@types/jquery": { - "version": "3.5.30", - "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.30.tgz", - "integrity": "sha512-nbWKkkyb919DOUxjmRVk8vwtDb0/k8FKncmUKFi+NY+QXqWltooxTrswvz4LspQwxvLdvzBN1TImr6cw3aQx2A==", + "version": "3.5.32", + "resolved": "https://registry.npmjs.org/@types/jquery/-/jquery-3.5.32.tgz", + "integrity": "sha512-b9Xbf4CkMqS02YH8zACqN1xzdxc3cO735Qe5AbSUFmyOiaWAbcpqh9Wna+Uk0vgACvoQHpWDg2rGdHkYPLmCiQ==", "license": "MIT", "dependencies": { "@types/sizzle": "*" @@ -1024,9 +1461,9 @@ "license": "MIT" }, "node_modules/@types/prismjs": { - "version": "1.26.4", - "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.4.tgz", - "integrity": "sha512-rlAnzkW2sZOjbqZ743IHUhFcvzaGbqijwOu8QZnZCjfQzBqFE3s4lOTJEsxikImav9uzz/42I+O7YUs1mWgMlg==", + "version": "1.26.5", + "resolved": "https://registry.npmjs.org/@types/prismjs/-/prismjs-1.26.5.tgz", + "integrity": "sha512-AUZTa7hQ2KY5L7AmtSiqxlhWxb4ina0yd8hNbl4TWuqnv/pFP0nDMb3YrfSBf4hJVGLh2YEIBfKaBW/9UEl6IQ==", "license": "MIT" }, "node_modules/@types/sizzle": { @@ -1046,17 +1483,17 @@ "integrity": "sha512-3NoqvZC2W5gAC5DZbTpCeJ251vGQmgcWIHQJGq2J240HY6ErQ9aWKkwfoKJlHLx+A83WPNTZ9+3cd2ILxbvr1w==" }, "node_modules/@typescript-eslint/eslint-plugin": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.13.0.tgz", - "integrity": "sha512-nQtBLiZYMUPkclSeC3id+x4uVd1SGtHuElTxL++SfP47jR0zfkZBJHc+gL4qPsgTuypz0k8Y2GheaDYn6Gy3rg==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/eslint-plugin/-/eslint-plugin-8.14.0.tgz", + "integrity": "sha512-tqp8H7UWFaZj0yNO6bycd5YjMwxa6wIHOLZvWPkidwbgLCsBMetQoGj7DPuAlWa2yGO3H48xmPwjhsSPPCGU5w==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/regexpp": "^4.10.0", - "@typescript-eslint/scope-manager": "8.13.0", - "@typescript-eslint/type-utils": "8.13.0", - "@typescript-eslint/utils": "8.13.0", - "@typescript-eslint/visitor-keys": "8.13.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/type-utils": "8.14.0", + "@typescript-eslint/utils": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "graphemer": "^1.4.0", "ignore": "^5.3.1", "natural-compare": "^1.4.0", @@ -1080,16 +1517,16 @@ } }, "node_modules/@typescript-eslint/parser": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.13.0.tgz", - "integrity": "sha512-w0xp+xGg8u/nONcGw1UXAr6cjCPU1w0XVyBs6Zqaj5eLmxkKQAByTdV/uGgNN5tVvN/kKpoQlP2cL7R+ajZZIQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/parser/-/parser-8.14.0.tgz", + "integrity": "sha512-2p82Yn9juUJq0XynBXtFCyrBDb6/dJombnz6vbo6mgQEtWHfvHbQuEa9kAOVIt1c9YFwi7H6WxtPj1kg+80+RA==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/scope-manager": "8.13.0", - "@typescript-eslint/types": "8.13.0", - "@typescript-eslint/typescript-estree": "8.13.0", - "@typescript-eslint/visitor-keys": "8.13.0", + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4" }, "engines": { @@ -1109,14 +1546,14 @@ } }, "node_modules/@typescript-eslint/scope-manager": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.13.0.tgz", - "integrity": "sha512-XsGWww0odcUT0gJoBZ1DeulY1+jkaHUciUq4jKNv4cpInbvvrtDoyBH9rE/n2V29wQJPk8iCH1wipra9BhmiMA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-8.14.0.tgz", + "integrity": "sha512-aBbBrnW9ARIDn92Zbo7rguLnqQ/pOrUguVpbUwzOhkFg2npFDwTgPGqFqE0H5feXcOoJOfX3SxlJaKEVtq54dw==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.13.0", - "@typescript-eslint/visitor-keys": "8.13.0" + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1127,14 +1564,14 @@ } }, "node_modules/@typescript-eslint/type-utils": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.13.0.tgz", - "integrity": "sha512-Rqnn6xXTR316fP4D2pohZenJnp+NwQ1mo7/JM+J1LWZENSLkJI8ID8QNtlvFeb0HnFSK94D6q0cnMX6SbE5/vA==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/type-utils/-/type-utils-8.14.0.tgz", + "integrity": "sha512-Xcz9qOtZuGusVOH5Uk07NGs39wrKkf3AxlkK79RBK6aJC1l03CobXjJbwBPSidetAOV+5rEVuiT1VSBUOAsanQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/typescript-estree": "8.13.0", - "@typescript-eslint/utils": "8.13.0", + "@typescript-eslint/typescript-estree": "8.14.0", + "@typescript-eslint/utils": "8.14.0", "debug": "^4.3.4", "ts-api-utils": "^1.3.0" }, @@ -1152,9 +1589,9 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.13.0.tgz", - "integrity": "sha512-4cyFErJetFLckcThRUFdReWJjVsPCqyBlJTi6IDEpc1GWCIIZRFxVppjWLIMcQhNGhdWJJRYFHpHoDWvMlDzng==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-8.14.0.tgz", + "integrity": "sha512-yjeB9fnO/opvLJFAsPNYlKPnEM8+z4og09Pk504dkqonT02AyL5Z9SSqlE0XqezS93v6CXn49VHvB2G7XSsl0g==", "dev": true, "license": "MIT", "engines": { @@ -1166,14 +1603,14 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.13.0.tgz", - "integrity": "sha512-v7SCIGmVsRK2Cy/LTLGN22uea6SaUIlpBcO/gnMGT/7zPtxp90bphcGf4fyrCQl3ZtiBKqVTG32hb668oIYy1g==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-8.14.0.tgz", + "integrity": "sha512-OPXPLYKGZi9XS/49rdaCbR5j/S14HazviBlUQFvSKz3npr3NikF+mrgK7CFVur6XEt95DZp/cmke9d5i3vtVnQ==", "dev": true, "license": "BSD-2-Clause", "dependencies": { - "@typescript-eslint/types": "8.13.0", - "@typescript-eslint/visitor-keys": "8.13.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/visitor-keys": "8.14.0", "debug": "^4.3.4", "fast-glob": "^3.3.2", "is-glob": "^4.0.3", @@ -1221,16 +1658,16 @@ } }, "node_modules/@typescript-eslint/utils": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.13.0.tgz", - "integrity": "sha512-A1EeYOND6Uv250nybnLZapeXpYMl8tkzYUxqmoKAWnI4sei3ihf2XdZVd+vVOmHGcp3t+P7yRrNsyyiXTvShFQ==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-8.14.0.tgz", + "integrity": "sha512-OGqj6uB8THhrHj0Fk27DcHPojW7zKwKkPmHXHvQ58pLYp4hy8CSUdTKykKeh+5vFqTTVmjz0zCOOPKRovdsgHA==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", - "@typescript-eslint/scope-manager": "8.13.0", - "@typescript-eslint/types": "8.13.0", - "@typescript-eslint/typescript-estree": "8.13.0" + "@typescript-eslint/scope-manager": "8.14.0", + "@typescript-eslint/types": "8.14.0", + "@typescript-eslint/typescript-estree": "8.14.0" }, "engines": { "node": "^18.18.0 || ^20.9.0 || >=21.1.0" @@ -1244,13 +1681,13 @@ } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "8.13.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.13.0.tgz", - "integrity": "sha512-7N/+lztJqH4Mrf0lb10R/CbI1EaAMMGyF5y0oJvFoAhafwgiRA7TXyd8TFn8FC8k5y2dTsYogg238qavRGNnlw==", + "version": "8.14.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-8.14.0.tgz", + "integrity": "sha512-vG0XZo8AdTH9OE6VFRwAZldNc7qtJ/6NLGWak+BtENuEUXGZgFpihILPiBvKXvJ2nFu27XNGC6rKiwuaoMbYzQ==", "dev": true, "license": "MIT", "dependencies": { - "@typescript-eslint/types": "8.13.0", + "@typescript-eslint/types": "8.14.0", "eslint-visitor-keys": "^3.4.3" }, "engines": { @@ -1262,36 +1699,36 @@ } }, "node_modules/@woltlab/editor": { - "resolved": "git+ssh://git@github.com/WoltLab/editor.git#efa5ffdc4a094c55ef015b29c9d5024649a8ea32", - "integrity": "sha512-R5ymdCAZ62OHkEwsqDEErzJA8r8JxDvBmNvNfxYB2cTzs8JJ/3ZRq3kYPLvCL2HnlY1S/i9eReYwlJdTx2+oaQ==", - "dependencies": { - "@ckeditor/ckeditor5-alignment": "^41.3.0", - "@ckeditor/ckeditor5-autosave": "^41.3.0", - "@ckeditor/ckeditor5-basic-styles": "^41.3.0", - "@ckeditor/ckeditor5-block-quote": "^41.3.0", - "@ckeditor/ckeditor5-code-block": "^41.3.0", - "@ckeditor/ckeditor5-editor-classic": "^41.3.0", - "@ckeditor/ckeditor5-engine": "^41.3.0", - "@ckeditor/ckeditor5-essentials": "^41.3.0", - "@ckeditor/ckeditor5-font": "^41.3.0", - "@ckeditor/ckeditor5-heading": "^41.3.0", - "@ckeditor/ckeditor5-highlight": "^41.3.0", - "@ckeditor/ckeditor5-horizontal-line": "^41.3.0", - "@ckeditor/ckeditor5-html-embed": "^41.3.0", - "@ckeditor/ckeditor5-image": "^41.3.0", - "@ckeditor/ckeditor5-indent": "^41.3.0", - "@ckeditor/ckeditor5-link": "^41.3.0", - "@ckeditor/ckeditor5-list": "^41.3.0", - "@ckeditor/ckeditor5-mention": "^41.3.0", - "@ckeditor/ckeditor5-paragraph": "^41.3.0", - "@ckeditor/ckeditor5-paste-from-office": "^41.3.0", - "@ckeditor/ckeditor5-remove-format": "^41.3.0", - "@ckeditor/ckeditor5-table": "^41.3.0", - "@ckeditor/ckeditor5-theme-lark": "^41.3.0", - "@ckeditor/ckeditor5-ui": "^41.3.0", - "@ckeditor/ckeditor5-undo": "^41.3.0", - "@ckeditor/ckeditor5-utils": "^41.3.0", - "@ckeditor/ckeditor5-widget": "^41.3.0" + "resolved": "git+ssh://git@github.com/WoltLab/editor.git#ebd849dd0abb0826fd4c56b29d88a79b45a4f9fb", + "integrity": "sha512-f7hv0XvBN5IbS3Az1ROHUJ9yRrBJXxlsult2uhYcF+MHm7QwS30ZX7ERCKm1vtCZ0FQ+N/ttiqKiYaPgwSrX3A==", + "dependencies": { + "@ckeditor/ckeditor5-alignment": "^43.3.1", + "@ckeditor/ckeditor5-autosave": "^43.3.1", + "@ckeditor/ckeditor5-basic-styles": "^43.3.1", + "@ckeditor/ckeditor5-block-quote": "^43.3.1", + "@ckeditor/ckeditor5-code-block": "^43.3.1", + "@ckeditor/ckeditor5-editor-classic": "^43.3.1", + "@ckeditor/ckeditor5-engine": "^43.3.1", + "@ckeditor/ckeditor5-essentials": "^43.3.1", + "@ckeditor/ckeditor5-font": "^43.3.1", + "@ckeditor/ckeditor5-heading": "^43.3.1", + "@ckeditor/ckeditor5-highlight": "^43.3.1", + "@ckeditor/ckeditor5-horizontal-line": "^43.3.1", + "@ckeditor/ckeditor5-html-embed": "^43.3.1", + "@ckeditor/ckeditor5-image": "^43.3.1", + "@ckeditor/ckeditor5-indent": "^43.3.1", + "@ckeditor/ckeditor5-link": "^43.3.1", + "@ckeditor/ckeditor5-list": "^43.3.1", + "@ckeditor/ckeditor5-mention": "^43.3.1", + "@ckeditor/ckeditor5-paragraph": "^43.3.1", + "@ckeditor/ckeditor5-paste-from-office": "^43.3.1", + "@ckeditor/ckeditor5-remove-format": "^43.3.1", + "@ckeditor/ckeditor5-table": "^43.3.1", + "@ckeditor/ckeditor5-theme-lark": "^43.3.1", + "@ckeditor/ckeditor5-ui": "^43.3.1", + "@ckeditor/ckeditor5-undo": "^43.3.1", + "@ckeditor/ckeditor5-utils": "^43.3.1", + "@ckeditor/ckeditor5-widget": "^43.3.1" } }, "node_modules/@woltlab/visual-dom-diff": { @@ -1383,6 +1820,12 @@ "dev": true, "license": "MIT" }, + "node_modules/blurhash": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/blurhash/-/blurhash-2.0.5.tgz", + "integrity": "sha512-cRygWd7kGBQO3VEhPiTgq4Wc43ctsM+o46urrmPOiuAe+07fzlSB9OJVdpgDL0jPqXUVQ9ht7aq7kxOeJHRK+w==", + "license": "MIT" + }, "node_modules/brace-expansion": { "version": "1.1.11", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", @@ -1434,23 +1877,68 @@ } }, "node_modules/ckeditor5": { - "version": "41.3.0", - "resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-41.3.0.tgz", - "integrity": "sha512-H9+Gv9DZQHxiPjaaWo0FHFeYBDWv0Je9WvudLyLaCwh9FVVEZNcPqVmxe55M1mIdQJSXNn8Q663orct09pqdfw==", - "dependencies": { - "@ckeditor/ckeditor5-clipboard": "41.3.0", - "@ckeditor/ckeditor5-core": "41.3.0", - "@ckeditor/ckeditor5-engine": "41.3.0", - "@ckeditor/ckeditor5-enter": "41.3.0", - "@ckeditor/ckeditor5-paragraph": "41.3.0", - "@ckeditor/ckeditor5-select-all": "41.3.0", - "@ckeditor/ckeditor5-typing": "41.3.0", - "@ckeditor/ckeditor5-ui": "41.3.0", - "@ckeditor/ckeditor5-undo": "41.3.0", - "@ckeditor/ckeditor5-upload": "41.3.0", - "@ckeditor/ckeditor5-utils": "41.3.0", - "@ckeditor/ckeditor5-watchdog": "41.3.0", - "@ckeditor/ckeditor5-widget": "41.3.0" + "version": "43.3.1", + "resolved": "https://registry.npmjs.org/ckeditor5/-/ckeditor5-43.3.1.tgz", + "integrity": "sha512-ZZ6nIdlr9rCCp21o9d5/mVUeVPwpQKEVxkeq1MU/Jax1w8U6rnMiQWxB954Ky/HNjhZ1v1ll2+VRzb7XA+1emA==", + "license": "GPL-2.0-or-later", + "dependencies": { + "@ckeditor/ckeditor5-adapter-ckfinder": "43.3.1", + "@ckeditor/ckeditor5-alignment": "43.3.1", + "@ckeditor/ckeditor5-autoformat": "43.3.1", + "@ckeditor/ckeditor5-autosave": "43.3.1", + "@ckeditor/ckeditor5-basic-styles": "43.3.1", + "@ckeditor/ckeditor5-block-quote": "43.3.1", + "@ckeditor/ckeditor5-ckbox": "43.3.1", + "@ckeditor/ckeditor5-ckfinder": "43.3.1", + "@ckeditor/ckeditor5-clipboard": "43.3.1", + "@ckeditor/ckeditor5-cloud-services": "43.3.1", + "@ckeditor/ckeditor5-code-block": "43.3.1", + "@ckeditor/ckeditor5-core": "43.3.1", + "@ckeditor/ckeditor5-easy-image": "43.3.1", + "@ckeditor/ckeditor5-editor-balloon": "43.3.1", + "@ckeditor/ckeditor5-editor-classic": "43.3.1", + "@ckeditor/ckeditor5-editor-decoupled": "43.3.1", + "@ckeditor/ckeditor5-editor-inline": "43.3.1", + "@ckeditor/ckeditor5-editor-multi-root": "43.3.1", + "@ckeditor/ckeditor5-engine": "43.3.1", + "@ckeditor/ckeditor5-enter": "43.3.1", + "@ckeditor/ckeditor5-essentials": "43.3.1", + "@ckeditor/ckeditor5-find-and-replace": "43.3.1", + "@ckeditor/ckeditor5-font": "43.3.1", + "@ckeditor/ckeditor5-heading": "43.3.1", + "@ckeditor/ckeditor5-highlight": "43.3.1", + "@ckeditor/ckeditor5-horizontal-line": "43.3.1", + "@ckeditor/ckeditor5-html-embed": "43.3.1", + "@ckeditor/ckeditor5-html-support": "43.3.1", + "@ckeditor/ckeditor5-image": "43.3.1", + "@ckeditor/ckeditor5-indent": "43.3.1", + "@ckeditor/ckeditor5-language": "43.3.1", + "@ckeditor/ckeditor5-link": "43.3.1", + "@ckeditor/ckeditor5-list": "43.3.1", + "@ckeditor/ckeditor5-markdown-gfm": "43.3.1", + "@ckeditor/ckeditor5-media-embed": "43.3.1", + "@ckeditor/ckeditor5-mention": "43.3.1", + "@ckeditor/ckeditor5-minimap": "43.3.1", + "@ckeditor/ckeditor5-page-break": "43.3.1", + "@ckeditor/ckeditor5-paragraph": "43.3.1", + "@ckeditor/ckeditor5-paste-from-office": "43.3.1", + "@ckeditor/ckeditor5-remove-format": "43.3.1", + "@ckeditor/ckeditor5-restricted-editing": "43.3.1", + "@ckeditor/ckeditor5-select-all": "43.3.1", + "@ckeditor/ckeditor5-show-blocks": "43.3.1", + "@ckeditor/ckeditor5-source-editing": "43.3.1", + "@ckeditor/ckeditor5-special-characters": "43.3.1", + "@ckeditor/ckeditor5-style": "43.3.1", + "@ckeditor/ckeditor5-table": "43.3.1", + "@ckeditor/ckeditor5-theme-lark": "43.3.1", + "@ckeditor/ckeditor5-typing": "43.3.1", + "@ckeditor/ckeditor5-ui": "43.3.1", + "@ckeditor/ckeditor5-undo": "43.3.1", + "@ckeditor/ckeditor5-upload": "43.3.1", + "@ckeditor/ckeditor5-utils": "43.3.1", + "@ckeditor/ckeditor5-watchdog": "43.3.1", + "@ckeditor/ckeditor5-widget": "43.3.1", + "@ckeditor/ckeditor5-word-count": "43.3.1" } }, "node_modules/color-convert": { @@ -1473,6 +1961,7 @@ "version": "1.4.2", "resolved": "https://registry.npmjs.org/color-parse/-/color-parse-1.4.2.tgz", "integrity": "sha512-RI7s49/8yqDj3fECFZjUI1Yi0z/Gq1py43oNJivAIIDSyJiOZLfYCRQEgn8HEVAj++PcRe8AnL2XF0fRJ3BTnA==", + "license": "MIT", "dependencies": { "color-name": "^1.0.0" } @@ -1579,22 +2068,22 @@ } }, "node_modules/eslint": { - "version": "9.13.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.13.0.tgz", - "integrity": "sha512-EYZK6SX6zjFHST/HRytOdA/zE72Cq/bfw45LSyuwrdvcclb/gqV8RRQxywOBEWO2+WDpva6UZa4CcDeJKzUCFA==", + "version": "9.14.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-9.14.0.tgz", + "integrity": "sha512-c2FHsVBr87lnUtjP4Yhvk4yEhKrQavGafRA/Se1ouse8PfbfC/Qh9Mxa00yWsZRlqeUB9raXip0aiiUZkgnr9g==", "dev": true, "license": "MIT", "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", - "@eslint-community/regexpp": "^4.11.0", + "@eslint-community/regexpp": "^4.12.1", "@eslint/config-array": "^0.18.0", "@eslint/core": "^0.7.0", "@eslint/eslintrc": "^3.1.0", - "@eslint/js": "9.13.0", + "@eslint/js": "9.14.0", "@eslint/plugin-kit": "^0.2.0", - "@humanfs/node": "^0.16.5", + "@humanfs/node": "^0.16.6", "@humanwhocodes/module-importer": "^1.0.1", - "@humanwhocodes/retry": "^0.3.1", + "@humanwhocodes/retry": "^0.4.0", "@types/estree": "^1.0.6", "@types/json-schema": "^7.0.15", "ajv": "^6.12.4", @@ -1602,9 +2091,9 @@ "cross-spawn": "^7.0.2", "debug": "^4.3.2", "escape-string-regexp": "^4.0.0", - "eslint-scope": "^8.1.0", - "eslint-visitor-keys": "^4.1.0", - "espree": "^10.2.0", + "eslint-scope": "^8.2.0", + "eslint-visitor-keys": "^4.2.0", + "espree": "^10.3.0", "esquery": "^1.5.0", "esutils": "^2.0.2", "fast-deep-equal": "^3.1.3", @@ -1681,6 +2170,20 @@ "url": "https://opencollective.com/eslint" } }, + "node_modules/eslint/node_modules/@humanwhocodes/retry": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/@humanwhocodes/retry/-/retry-0.4.1.tgz", + "integrity": "sha512-c7hNEllBlenFTHBky65mhq8WD2kbN9Q6gk0bTk8lSBvc554jpXSkST1iePudpt7+A/AQvuHs9EMqjHDXMY1lrA==", + "dev": true, + "license": "Apache-2.0", + "engines": { + "node": ">=18.18" + }, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/nzakas" + } + }, "node_modules/eslint/node_modules/eslint-visitor-keys": { "version": "4.2.0", "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.2.0.tgz", @@ -1891,9 +2394,9 @@ "license": "ISC" }, "node_modules/focus-trap": { - "version": "7.6.0", - "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.0.tgz", - "integrity": "sha512-1td0l3pMkWJLFipobUcGaf+5DTY4PLDDrcqoSaKP8ediO/CoWCCYk/fT/Y2A4e6TNB+Sh6clRJCjOPPnKoNHnQ==", + "version": "7.6.1", + "resolved": "https://registry.npmjs.org/focus-trap/-/focus-trap-7.6.1.tgz", + "integrity": "sha512-nB8y4nQl8PshahLpGKZOq1sb0xrMVFSn6at7u/qOsBZTlZRzaapISGENcB6mOkoezbClZyiMwEF/dGY8AZ00rA==", "license": "MIT", "dependencies": { "tabbable": "^6.2.0" @@ -2098,7 +2601,8 @@ "node_modules/lodash-es": { "version": "4.17.21", "resolved": "https://registry.npmjs.org/lodash-es/-/lodash-es-4.17.21.tgz", - "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==" + "integrity": "sha512-mKnC+QJ9pWVzv+C4/U3rRsHapFfHvQFoFB92e52xeyGMcX6/OlIl78je1u8vePzYZSkkogMPJ2yjxxsb89cxyw==", + "license": "MIT" }, "node_modules/lodash.merge": { "version": "4.6.2", @@ -2106,6 +2610,18 @@ "integrity": "sha512-0KpjqXRVvrYyCsX1swR/XTK0va6VQkQM6MNo7PqW77ByjAhoARA8EfrP1N4+KlKj8YS0ZUCtRT/YUuhyYDujIQ==", "dev": true }, + "node_modules/marked": { + "version": "4.0.12", + "resolved": "https://registry.npmjs.org/marked/-/marked-4.0.12.tgz", + "integrity": "sha512-hgibXWrEDNBWgGiK18j/4lkS6ihTe9sxtV4Q1OQppb/0zzyPSzoFANBa5MfsG/zgsWklmNnhm0XACZOH/0HBiQ==", + "license": "MIT", + "bin": { + "marked": "bin/marked.js" + }, + "engines": { + "node": ">= 12" + } + }, "node_modules/merge2": { "version": "1.4.1", "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", @@ -2234,9 +2750,10 @@ } }, "node_modules/perfect-scrollbar": { - "version": "1.5.5", - "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.5.tgz", - "integrity": "sha512-dzalfutyP3e/FOpdlhVryN4AJ5XDVauVWxybSkLZmakFE2sS3y3pc4JnSprw8tGmHvkaG5Edr5T7LBTZ+WWU2g==" + "version": "1.5.6", + "resolved": "https://registry.npmjs.org/perfect-scrollbar/-/perfect-scrollbar-1.5.6.tgz", + "integrity": "sha512-rixgxw3SxyJbCaSpo1n35A/fwI1r2rdwMKOTCg/AcG+xOEyZcE8UHVjpZMFCVImzsFoCZeJTT+M/rdEIQYO2nw==", + "license": "MIT" }, "node_modules/picomatch": { "version": "2.3.1", @@ -2474,6 +2991,21 @@ "integrity": "sha512-oJFu94HQb+KVduSUQL7wnpmqnfmLsOA/nAh6b6EH0wCEoK0/mPeXU6c3wKDV83MkOuHPRHtSXKKU99IBazS/2w==", "license": "0BSD" }, + "node_modules/turndown": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/turndown/-/turndown-7.2.0.tgz", + "integrity": "sha512-eCZGBN4nNNqM9Owkv9HAtWRYfLA4h909E/WGAWWBpmB275ehNhZyk87/Tpvjbp0jjNl9XwCsbe6bm6CqFsgD+A==", + "license": "MIT", + "dependencies": { + "@mixmark-io/domino": "^2.2.0" + } + }, + "node_modules/turndown-plugin-gfm": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/turndown-plugin-gfm/-/turndown-plugin-gfm-1.0.2.tgz", + "integrity": "sha512-vwz9tfvF7XN/jE0dGoBei3FXWuvll78ohzCZQuOb+ZjWrs3a0XhQVomJEb2Qh4VHTPNRO4GPZh0V7VRbiWwkRg==", + "license": "MIT" + }, "node_modules/type-check": { "version": "0.4.0", "resolved": "https://registry.npmjs.org/type-check/-/type-check-0.4.0.tgz", @@ -2513,7 +3045,8 @@ "node_modules/vanilla-colorful": { "version": "0.7.2", "resolved": "https://registry.npmjs.org/vanilla-colorful/-/vanilla-colorful-0.7.2.tgz", - "integrity": "sha512-z2YZusTFC6KnLERx1cgoIRX2CjPRP0W75N+3CC6gbvdX5Ch47rZkEMGO2Xnf+IEmi3RiFLxS18gayMA27iU7Kg==" + "integrity": "sha512-z2YZusTFC6KnLERx1cgoIRX2CjPRP0W75N+3CC6gbvdX5Ch47rZkEMGO2Xnf+IEmi3RiFLxS18gayMA27iU7Kg==", + "license": "MIT" }, "node_modules/which": { "version": "2.0.2", diff --git a/package.json b/package.json index ce774e24d8..a1e5b43099 100644 --- a/package.json +++ b/package.json @@ -4,10 +4,10 @@ "bundle-web-components": "npx esbuild ts/WoltLabSuite/WebComponent/index.ts --minify --bundle --watch --outfile=wcfsetup/install/files/js/WoltLabSuite/WebComponent.min.js" }, "devDependencies": { - "@typescript-eslint/eslint-plugin": "^8.12.2", - "@typescript-eslint/parser": "^8.12.2", + "@typescript-eslint/eslint-plugin": "^8.14.0", + "@typescript-eslint/parser": "^8.14.0", "esbuild": "^0.24.0", - "eslint": "^9.13.0", + "eslint": "^9.14.0", "eslint-config-prettier": "^9.1.0", "prettier": "^3.3.3", "typescript": "^5.6.3" @@ -17,16 +17,16 @@ "@googlemaps/markerclusterer": "2.0.15", "@types/facebook-js-sdk": "^3.3.12", "@types/google.maps": "^3.58.1", - "@types/jquery": "^3.5.30", + "@types/jquery": "^3.5.32", "@types/pica": "5.1.3", - "@types/prismjs": "^1.26.4", + "@types/prismjs": "^1.26.5", "@types/twitter-for-web": "0.0.6", "@woltlab/editor": "git+https://github.com/WoltLab/editor.git#ebd849dd0abb0826fd4c56b29d88a79b45a4f9fb", "@woltlab/visual-dom-diff": "git+https://github.com/WoltLab/visual-dom-diff.git#e5b51fce3157d1eda310566fc1f86101341d1fea", "@woltlab/zxcvbn": "git+https://github.com/WoltLab/zxcvbn.git#5b582b24e437f1883ccad3c37dae7c3c5f1e7da3", - "focus-trap": "^7.6.0", + "focus-trap": "^7.6.1", "html-parsed-element": "^0.4.1", - "perfect-scrollbar": "^1.5.5", + "perfect-scrollbar": "^1.5.6", "qr-creator": "^1.0.0", "reflect-metadata": "^0.2.2", "tabbable": "^6.2.0", diff --git a/wcfsetup/install/files/js/3rdParty/focus-trap/focus-trap.umd.min.js b/wcfsetup/install/files/js/3rdParty/focus-trap/focus-trap.umd.min.js index b3f5c62ccf..dc052c6025 100644 --- a/wcfsetup/install/files/js/3rdParty/focus-trap/focus-trap.umd.min.js +++ b/wcfsetup/install/files/js/3rdParty/focus-trap/focus-trap.umd.min.js @@ -1,6 +1,6 @@ /*! -* focus-trap 7.6.0 +* focus-trap 7.6.1 * @license MIT, https://github.com/focus-trap/focus-trap/blob/master/LICENSE */ -!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("tabbable")):"function"==typeof define&&define.amd?define(["exports","tabbable"],t):(e="undefined"!=typeof globalThis?globalThis:e||self,function(){var n=e.focusTrap,o=e.focusTrap={};t(o,e.tabbable),o.noConflict=function(){return e.focusTrap=n,o}}())}(this,(function(e,t){"use strict";function n(e,t,n){return(t=function(e){var t=function(e,t){if("object"!=typeof e||!e)return e;var n=e[Symbol.toPrimitive];if(void 0!==n){var o=n.call(e,t||"default");if("object"!=typeof o)return o;throw new TypeError("@@toPrimitive must return a primitive value.")}return("string"===t?String:Number)(e)}(e,"string");return"symbol"==typeof t?t:t+""}(t))in e?Object.defineProperty(e,t,{value:n,enumerable:!0,configurable:!0,writable:!0}):e[t]=n,e}function o(e,t){var n=Object.keys(e);if(Object.getOwnPropertySymbols){var o=Object.getOwnPropertySymbols(e);t&&(o=o.filter((function(t){return Object.getOwnPropertyDescriptor(e,t).enumerable}))),n.push.apply(n,o)}return n}function a(e){for(var t=1;t0){var n=e[e.length-1];n!==t&&n.pause()}var o=e.indexOf(t);-1===o||e.splice(o,1),e.push(t)},i=function(e,t){var n=e.indexOf(t);-1!==n&&e.splice(n,1),e.length>0&&e[e.length-1].unpause()},u=function(e){return"Tab"===(null==e?void 0:e.key)||9===(null==e?void 0:e.keyCode)},c=function(e){return u(e)&&!e.shiftKey},s=function(e){return u(e)&&e.shiftKey},l=function(e){return setTimeout(e,0)},b=function(e,t){var n=-1;return e.every((function(e,o){return!t(e)||(n=o,!1)})),n},d=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o1?n-1:0),a=1;a=0)e=p.activeElement;else{var n=h.tabbableGroups[0];e=n&&n.firstTabbableNode||T("fallbackFocus")}if(!e)throw new Error("Your focus-trap needs to have at least one focusable element");return e},N=function(){if(h.containerGroups=h.containers.map((function(e){var n=t.tabbable(e,y.tabbableOptions),o=t.focusable(e,y.tabbableOptions),a=n.length>0?n[0]:void 0,r=n.length>0?n[n.length-1]:void 0,i=o.find((function(e){return t.isTabbable(e)})),u=o.slice().reverse().find((function(e){return t.isTabbable(e)})),c=!!n.find((function(e){return t.getTabIndex(e)>0}));return{container:e,tabbableNodes:n,focusableNodes:o,posTabIndexesFound:c,firstTabbableNode:a,lastTabbableNode:r,firstDomTabbableNode:i,lastDomTabbableNode:u,nextTabbableNode:function(e){var a=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],r=n.indexOf(e);return r<0?a?o.slice(o.indexOf(e)+1).find((function(e){return t.isTabbable(e)})):o.slice(0,o.indexOf(e)).reverse().find((function(e){return t.isTabbable(e)})):n[r+(a?1:-1)]}}})),h.tabbableGroups=h.containerGroups.filter((function(e){return e.tabbableNodes.length>0})),h.tabbableGroups.length<=0&&!T("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(h.containerGroups.find((function(e){return e.posTabIndexesFound}))&&h.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},O=function(e){var t=e.activeElement;if(t)return t.shadowRoot&&null!==t.shadowRoot.activeElement?O(t.shadowRoot):t},E=function(e){!1!==e&&e!==O(document)&&(e&&e.focus?(e.focus({preventScroll:!!y.preventScroll}),h.mostRecentlyFocusedNode=e,function(e){return e.tagName&&"input"===e.tagName.toLowerCase()&&"function"==typeof e.select}(e)&&e.select()):E(F()))},k=function(e){var t=T("setReturnFocus",e);return t||!1!==t&&e},P=function(e){var n=e.target,o=e.event,a=e.isBackward,r=void 0!==a&&a;n=n||f(o),N();var i=null;if(h.tabbableGroups.length>0){var c=g(n,o),s=c>=0?h.containerGroups[c]:void 0;if(c<0)i=r?h.tabbableGroups[h.tabbableGroups.length-1].lastTabbableNode:h.tabbableGroups[0].firstTabbableNode;else if(r){var l=b(h.tabbableGroups,(function(e){var t=e.firstTabbableNode;return n===t}));if(l<0&&(s.container===n||t.isFocusable(n,y.tabbableOptions)&&!t.isTabbable(n,y.tabbableOptions)&&!s.nextTabbableNode(n,!1))&&(l=c),l>=0){var d=0===l?h.tabbableGroups.length-1:l-1,v=h.tabbableGroups[d];i=t.getTabIndex(n)>=0?v.lastTabbableNode:v.lastDomTabbableNode}else u(o)||(i=s.nextTabbableNode(n,!1))}else{var p=b(h.tabbableGroups,(function(e){var t=e.lastTabbableNode;return n===t}));if(p<0&&(s.container===n||t.isFocusable(n,y.tabbableOptions)&&!t.isTabbable(n,y.tabbableOptions)&&!s.nextTabbableNode(n))&&(p=c),p>=0){var m=p===h.tabbableGroups.length-1?0:p+1,w=h.tabbableGroups[m];i=t.getTabIndex(n)>=0?w.firstTabbableNode:w.firstDomTabbableNode}else u(o)||(i=s.nextTabbableNode(n))}}else i=T("fallbackFocus");return i},D=function(e){var t=f(e);g(t,e)>=0||(d(y.clickOutsideDeactivates,e)?o.deactivate({returnFocus:y.returnFocusOnDeactivate}):d(y.allowOutsideClick,e)||e.preventDefault())},x=function(e){var n=f(e),o=g(n,e)>=0;if(o||n instanceof Document)o&&(h.mostRecentlyFocusedNode=n);else{var a;e.stopImmediatePropagation();var r=!0;if(h.mostRecentlyFocusedNode)if(t.getTabIndex(h.mostRecentlyFocusedNode)>0){var i=g(h.mostRecentlyFocusedNode),u=h.containerGroups[i].tabbableNodes;if(u.length>0){var c=u.findIndex((function(e){return e===h.mostRecentlyFocusedNode}));c>=0&&(y.isKeyForward(h.recentNavEvent)?c+1=0&&(a=u[c-1],r=!1))}}else h.containerGroups.some((function(e){return e.tabbableNodes.some((function(e){return t.getTabIndex(e)>0}))}))||(r=!1);else r=!1;r&&(a=P({target:h.mostRecentlyFocusedNode,isBackward:y.isKeyBackward(h.recentNavEvent)})),E(a||(h.mostRecentlyFocusedNode||F()))}h.recentNavEvent=void 0},G=function(e){(y.isKeyForward(e)||y.isKeyBackward(e))&&function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];h.recentNavEvent=e;var n=P({event:e,isBackward:t});n&&(u(e)&&e.preventDefault(),E(n))}(e,y.isKeyBackward(e))},R=function(e){var t;"Escape"!==(null==(t=e)?void 0:t.key)&&"Esc"!==(null==t?void 0:t.key)&&27!==(null==t?void 0:t.keyCode)||!1===d(y.escapeDeactivates,e)||(e.preventDefault(),o.deactivate())},I=function(e){var t=f(e);g(t,e)>=0||d(y.clickOutsideDeactivates,e)||d(y.allowOutsideClick,e)||(e.preventDefault(),e.stopImmediatePropagation())},j=function(){if(h.active)return r(m,o),h.delayInitialFocusTimer=y.delayInitialFocus?l((function(){E(F())})):E(F()),p.addEventListener("focusin",x,!0),p.addEventListener("mousedown",D,{capture:!0,passive:!1}),p.addEventListener("touchstart",D,{capture:!0,passive:!1}),p.addEventListener("click",I,{capture:!0,passive:!1}),p.addEventListener("keydown",G,{capture:!0,passive:!1}),p.addEventListener("keydown",R),o},L=function(){if(h.active)return p.removeEventListener("focusin",x,!0),p.removeEventListener("mousedown",D,!0),p.removeEventListener("touchstart",D,!0),p.removeEventListener("click",I,!0),p.removeEventListener("keydown",G,!0),p.removeEventListener("keydown",R),o},B="undefined"!=typeof window&&"MutationObserver"in window?new MutationObserver((function(e){e.some((function(e){return Array.from(e.removedNodes).some((function(e){return e===h.mostRecentlyFocusedNode}))}))&&E(F())})):void 0,C=function(){B&&(B.disconnect(),h.active&&!h.paused&&h.containers.map((function(e){B.observe(e,{subtree:!0,childList:!0})})))};return(o={get active(){return h.active},get paused(){return h.paused},activate:function(e){if(h.active)return this;var t=w(e,"onActivate"),n=w(e,"onPostActivate"),o=w(e,"checkCanFocusTrap");o||N(),h.active=!0,h.paused=!1,h.nodeFocusedBeforeActivation=p.activeElement,null==t||t();var a=function(){o&&N(),j(),C(),null==n||n()};return o?(o(h.containers.concat()).then(a,a),this):(a(),this)},deactivate:function(e){if(!h.active)return this;var t=a({onDeactivate:y.onDeactivate,onPostDeactivate:y.onPostDeactivate,checkCanReturnFocus:y.checkCanReturnFocus},e);clearTimeout(h.delayInitialFocusTimer),h.delayInitialFocusTimer=void 0,L(),h.active=!1,h.paused=!1,C(),i(m,o);var n=w(t,"onDeactivate"),r=w(t,"onPostDeactivate"),u=w(t,"checkCanReturnFocus"),c=w(t,"returnFocus","returnFocusOnDeactivate");null==n||n();var s=function(){l((function(){c&&E(k(h.nodeFocusedBeforeActivation)),null==r||r()}))};return c&&u?(u(k(h.nodeFocusedBeforeActivation)).then(s,s),this):(s(),this)},pause:function(e){if(h.paused||!h.active)return this;var t=w(e,"onPause"),n=w(e,"onPostPause");return h.paused=!0,null==t||t(),L(),C(),null==n||n(),this},unpause:function(e){if(!h.paused||!h.active)return this;var t=w(e,"onUnpause"),n=w(e,"onPostUnpause");return h.paused=!1,null==t||t(),N(),j(),C(),null==n||n(),this},updateContainerElements:function(e){var t=[].concat(e).filter(Boolean);return h.containers=t.map((function(e){return"string"==typeof e?p.querySelector(e):e})),h.active&&N(),C(),this}}).updateContainerElements(e),o},Object.defineProperty(e,"__esModule",{value:!0})})); +!function(e,t){"object"==typeof exports&&"undefined"!=typeof module?t(exports,require("tabbable")):"function"==typeof define&&define.amd?define(["exports","tabbable"],t):(e="undefined"!=typeof globalThis?globalThis:e||self,function(){var n=e.focusTrap,o=e.focusTrap={};t(o,e.tabbable),o.noConflict=function(){return e.focusTrap=n,o}}())}(this,(function(e,t){"use strict";function n(e,t){(null==t||t>e.length)&&(t=e.length);for(var n=0,o=Array(t);n0){var n=e[e.length-1];n!==t&&n.pause()}var o=e.indexOf(t);-1===o||e.splice(o,1),e.push(t)},c=function(e,t){var n=e.indexOf(t);-1!==n&&e.splice(n,1),e.length>0&&e[e.length-1].unpause()},s=function(e){return"Tab"===(null==e?void 0:e.key)||9===(null==e?void 0:e.keyCode)},l=function(e){return s(e)&&!e.shiftKey},b=function(e){return s(e)&&e.shiftKey},d=function(e){return setTimeout(e,0)},f=function(e,t){var n=-1;return e.every((function(e,o){return!t(e)||(n=o,!1)})),n},v=function(e){for(var t=arguments.length,n=new Array(t>1?t-1:0),o=1;o1&&void 0!==arguments[1]?arguments[1]:{},n=t.hasFallback,o=void 0!==n&&n,a=t.params,u=void 0===a?[]:a,c=h[e];if("function"==typeof c&&(c=c.apply(void 0,i(u))),!0===c&&(c=void 0),!c){if(void 0===c||!1===c)return c;throw new Error("`".concat(e,"` was specified but was not a node, or did not return a node"))}var s=c;if("string"==typeof c){try{s=r.querySelector(c)}catch(t){throw new Error("`".concat(e,'` appears to be an invalid selector; error="').concat(t.message,'"'))}if(!s&&!o)throw new Error("`".concat(e,"` as selector refers to no known node"))}return s},N=function(){var e=F("initialFocus",{hasFallback:!0});if(!1===e)return!1;if(void 0===e||e&&!t.isFocusable(e,h.tabbableOptions))if(T(r.activeElement)>=0)e=r.activeElement;else{var n=w.tabbableGroups[0];e=n&&n.firstTabbableNode||F("fallbackFocus")}else null===e&&(e=F("fallbackFocus"));if(!e)throw new Error("Your focus-trap needs to have at least one focusable element");return e},O=function(){if(w.containerGroups=w.containers.map((function(e){var n=t.tabbable(e,h.tabbableOptions),o=t.focusable(e,h.tabbableOptions),r=n.length>0?n[0]:void 0,a=n.length>0?n[n.length-1]:void 0,i=o.find((function(e){return t.isTabbable(e)})),u=o.slice().reverse().find((function(e){return t.isTabbable(e)})),c=!!n.find((function(e){return t.getTabIndex(e)>0}));return{container:e,tabbableNodes:n,focusableNodes:o,posTabIndexesFound:c,firstTabbableNode:r,lastTabbableNode:a,firstDomTabbableNode:i,lastDomTabbableNode:u,nextTabbableNode:function(e){var r=!(arguments.length>1&&void 0!==arguments[1])||arguments[1],a=n.indexOf(e);return a<0?r?o.slice(o.indexOf(e)+1).find((function(e){return t.isTabbable(e)})):o.slice(0,o.indexOf(e)).reverse().find((function(e){return t.isTabbable(e)})):n[a+(r?1:-1)]}}})),w.tabbableGroups=w.containerGroups.filter((function(e){return e.tabbableNodes.length>0})),w.tabbableGroups.length<=0&&!F("fallbackFocus"))throw new Error("Your focus-trap must have at least one container with at least one tabbable node in it at all times");if(w.containerGroups.find((function(e){return e.posTabIndexesFound}))&&w.containerGroups.length>1)throw new Error("At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.")},E=function(e){var t=e.activeElement;if(t)return t.shadowRoot&&null!==t.shadowRoot.activeElement?E(t.shadowRoot):t},k=function(e){!1!==e&&e!==E(document)&&(e&&e.focus?(e.focus({preventScroll:!!h.preventScroll}),w.mostRecentlyFocusedNode=e,function(e){return e.tagName&&"input"===e.tagName.toLowerCase()&&"function"==typeof e.select}(e)&&e.select()):k(N()))},D=function(e){var t=F("setReturnFocus",{params:[e]});return t||!1!==t&&e},P=function(e){var n=e.target,o=e.event,r=e.isBackward,a=void 0!==r&&r;n=n||p(o),O();var i=null;if(w.tabbableGroups.length>0){var u=T(n,o),c=u>=0?w.containerGroups[u]:void 0;if(u<0)i=a?w.tabbableGroups[w.tabbableGroups.length-1].lastTabbableNode:w.tabbableGroups[0].firstTabbableNode;else if(a){var l=f(w.tabbableGroups,(function(e){var t=e.firstTabbableNode;return n===t}));if(l<0&&(c.container===n||t.isFocusable(n,h.tabbableOptions)&&!t.isTabbable(n,h.tabbableOptions)&&!c.nextTabbableNode(n,!1))&&(l=u),l>=0){var b=0===l?w.tabbableGroups.length-1:l-1,d=w.tabbableGroups[b];i=t.getTabIndex(n)>=0?d.lastTabbableNode:d.lastDomTabbableNode}else s(o)||(i=c.nextTabbableNode(n,!1))}else{var v=f(w.tabbableGroups,(function(e){var t=e.lastTabbableNode;return n===t}));if(v<0&&(c.container===n||t.isFocusable(n,h.tabbableOptions)&&!t.isTabbable(n,h.tabbableOptions)&&!c.nextTabbableNode(n))&&(v=u),v>=0){var m=v===w.tabbableGroups.length-1?0:v+1,y=w.tabbableGroups[m];i=t.getTabIndex(n)>=0?y.firstTabbableNode:y.firstDomTabbableNode}else s(o)||(i=c.nextTabbableNode(n))}}else i=F("fallbackFocus");return i},x=function(e){var t=p(e);T(t,e)>=0||(v(h.clickOutsideDeactivates,e)?o.deactivate({returnFocus:h.returnFocusOnDeactivate}):v(h.allowOutsideClick,e)||e.preventDefault())},G=function(e){var n=p(e),o=T(n,e)>=0;if(o||n instanceof Document)o&&(w.mostRecentlyFocusedNode=n);else{var r;e.stopImmediatePropagation();var a=!0;if(w.mostRecentlyFocusedNode)if(t.getTabIndex(w.mostRecentlyFocusedNode)>0){var i=T(w.mostRecentlyFocusedNode),u=w.containerGroups[i].tabbableNodes;if(u.length>0){var c=u.findIndex((function(e){return e===w.mostRecentlyFocusedNode}));c>=0&&(h.isKeyForward(w.recentNavEvent)?c+1=0&&(r=u[c-1],a=!1))}}else w.containerGroups.some((function(e){return e.tabbableNodes.some((function(e){return t.getTabIndex(e)>0}))}))||(a=!1);else a=!1;a&&(r=P({target:w.mostRecentlyFocusedNode,isBackward:h.isKeyBackward(w.recentNavEvent)})),k(r||(w.mostRecentlyFocusedNode||N()))}w.recentNavEvent=void 0},I=function(e){(h.isKeyForward(e)||h.isKeyBackward(e))&&function(e){var t=arguments.length>1&&void 0!==arguments[1]&&arguments[1];w.recentNavEvent=e;var n=P({event:e,isBackward:t});n&&(s(e)&&e.preventDefault(),k(n))}(e,h.isKeyBackward(e))},R=function(e){var t;"Escape"!==(null==(t=e)?void 0:t.key)&&"Esc"!==(null==t?void 0:t.key)&&27!==(null==t?void 0:t.keyCode)||!1===v(h.escapeDeactivates,e)||(e.preventDefault(),o.deactivate())},j=function(e){var t=p(e);T(t,e)>=0||v(h.clickOutsideDeactivates,e)||v(h.allowOutsideClick,e)||(e.preventDefault(),e.stopImmediatePropagation())},A=function(){if(w.active)return u(y,o),w.delayInitialFocusTimer=h.delayInitialFocus?d((function(){k(N())})):k(N()),r.addEventListener("focusin",G,!0),r.addEventListener("mousedown",x,{capture:!0,passive:!1}),r.addEventListener("touchstart",x,{capture:!0,passive:!1}),r.addEventListener("click",j,{capture:!0,passive:!1}),r.addEventListener("keydown",I,{capture:!0,passive:!1}),r.addEventListener("keydown",R),o},L=function(){if(w.active)return r.removeEventListener("focusin",G,!0),r.removeEventListener("mousedown",x,!0),r.removeEventListener("touchstart",x,!0),r.removeEventListener("click",j,!0),r.removeEventListener("keydown",I,!0),r.removeEventListener("keydown",R),o},S="undefined"!=typeof window&&"MutationObserver"in window?new MutationObserver((function(e){e.some((function(e){return Array.from(e.removedNodes).some((function(e){return e===w.mostRecentlyFocusedNode}))}))&&k(N())})):void 0,C=function(){S&&(S.disconnect(),w.active&&!w.paused&&w.containers.map((function(e){S.observe(e,{subtree:!0,childList:!0})})))};return(o={get active(){return w.active},get paused(){return w.paused},activate:function(e){if(w.active)return this;var t=g(e,"onActivate"),n=g(e,"onPostActivate"),o=g(e,"checkCanFocusTrap");o||O(),w.active=!0,w.paused=!1,w.nodeFocusedBeforeActivation=r.activeElement,null==t||t();var a=function(){o&&O(),A(),C(),null==n||n()};return o?(o(w.containers.concat()).then(a,a),this):(a(),this)},deactivate:function(e){if(!w.active)return this;var t=a({onDeactivate:h.onDeactivate,onPostDeactivate:h.onPostDeactivate,checkCanReturnFocus:h.checkCanReturnFocus},e);clearTimeout(w.delayInitialFocusTimer),w.delayInitialFocusTimer=void 0,L(),w.active=!1,w.paused=!1,C(),c(y,o);var n=g(t,"onDeactivate"),r=g(t,"onPostDeactivate"),i=g(t,"checkCanReturnFocus"),u=g(t,"returnFocus","returnFocusOnDeactivate");null==n||n();var s=function(){d((function(){u&&k(D(w.nodeFocusedBeforeActivation)),null==r||r()}))};return u&&i?(i(D(w.nodeFocusedBeforeActivation)).then(s,s),this):(s(),this)},pause:function(e){if(w.paused||!w.active)return this;var t=g(e,"onPause"),n=g(e,"onPostPause");return w.paused=!0,null==t||t(),L(),C(),null==n||n(),this},unpause:function(e){if(!w.paused||!w.active)return this;var t=g(e,"onUnpause"),n=g(e,"onPostUnpause");return w.paused=!1,null==t||t(),O(),A(),C(),null==n||n(),this},updateContainerElements:function(e){var t=[].concat(e).filter(Boolean);return w.containers=t.map((function(e){return"string"==typeof e?r.querySelector(e):e})),w.active&&O(),C(),this}}).updateContainerElements(e),o}})); //# sourceMappingURL=focus-trap.umd.min.js.map diff --git a/wcfsetup/install/files/js/3rdParty/focus-trap/focus-trap.umd.min.js.map b/wcfsetup/install/files/js/3rdParty/focus-trap/focus-trap.umd.min.js.map index 12f0a78521..2dffc2fc3e 100644 --- a/wcfsetup/install/files/js/3rdParty/focus-trap/focus-trap.umd.min.js.map +++ b/wcfsetup/install/files/js/3rdParty/focus-trap/focus-trap.umd.min.js.map @@ -1 +1 @@ -{"version":3,"file":"focus-trap.umd.min.js","sources":["../index.js"],"sourcesContent":["import {\n tabbable,\n focusable,\n isFocusable,\n isTabbable,\n getTabIndex,\n} from 'tabbable';\n\nconst activeFocusTraps = {\n activateTrap(trapStack, trap) {\n if (trapStack.length > 0) {\n const activeTrap = trapStack[trapStack.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n\n const trapIndex = trapStack.indexOf(trap);\n if (trapIndex === -1) {\n trapStack.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapStack.splice(trapIndex, 1);\n trapStack.push(trap);\n }\n },\n\n deactivateTrap(trapStack, trap) {\n const trapIndex = trapStack.indexOf(trap);\n if (trapIndex !== -1) {\n trapStack.splice(trapIndex, 1);\n }\n\n if (trapStack.length > 0) {\n trapStack[trapStack.length - 1].unpause();\n }\n },\n};\n\nconst isSelectableInput = function (node) {\n return (\n node.tagName &&\n node.tagName.toLowerCase() === 'input' &&\n typeof node.select === 'function'\n );\n};\n\nconst isEscapeEvent = function (e) {\n return e?.key === 'Escape' || e?.key === 'Esc' || e?.keyCode === 27;\n};\n\nconst isTabEvent = function (e) {\n return e?.key === 'Tab' || e?.keyCode === 9;\n};\n\n// checks for TAB by default\nconst isKeyForward = function (e) {\n return isTabEvent(e) && !e.shiftKey;\n};\n\n// checks for SHIFT+TAB by default\nconst isKeyBackward = function (e) {\n return isTabEvent(e) && e.shiftKey;\n};\n\nconst delay = function (fn) {\n return setTimeout(fn, 0);\n};\n\n// Array.find/findIndex() are not supported on IE; this replicates enough\n// of Array.findIndex() for our needs\nconst findIndex = function (arr, fn) {\n let idx = -1;\n\n arr.every(function (value, i) {\n if (fn(value)) {\n idx = i;\n return false; // break\n }\n\n return true; // next\n });\n\n return idx;\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n * the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nconst valueOrHandler = function (value, ...params) {\n return typeof value === 'function' ? value(...params) : value;\n};\n\nconst getActualTarget = function (event) {\n // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n // shadow host. However, event.target.composedPath() will be an array of\n // nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n // outer-most (the host HTML document). If we have access to composedPath(),\n // then use its first element; otherwise, fall back to event.target (and\n // this only works for an _open_ shadow DOM; otherwise,\n // composedPath()[0] === event.target always).\n return event.target.shadowRoot && typeof event.composedPath === 'function'\n ? event.composedPath()[0]\n : event.target;\n};\n\n// NOTE: this must be _outside_ `createFocusTrap()` to make sure all traps in this\n// current instance use the same stack if `userOptions.trapStack` isn't specified\nconst internalTrapStack = [];\n\nconst createFocusTrap = function (elements, userOptions) {\n // SSR: a live trap shouldn't be created in this type of environment so this\n // should be safe code to execute if the `document` option isn't specified\n const doc = userOptions?.document || document;\n\n const trapStack = userOptions?.trapStack || internalTrapStack;\n\n const config = {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true,\n isKeyForward,\n isKeyBackward,\n ...userOptions,\n };\n\n const state = {\n // containers given to createFocusTrap()\n // @type {Array}\n containers: [],\n\n // list of objects identifying tabbable nodes in `containers` in the trap\n // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n // is active, but the trap should never get to a state where there isn't at least one group\n // with at least one tabbable node in it (that would lead to an error condition that would\n // result in an error being thrown)\n // @type {Array<{\n // container: HTMLElement,\n // tabbableNodes: Array, // empty if none\n // focusableNodes: Array, // empty if none\n // posTabIndexesFound: boolean,\n // firstTabbableNode: HTMLElement|undefined,\n // lastTabbableNode: HTMLElement|undefined,\n // firstDomTabbableNode: HTMLElement|undefined,\n // lastDomTabbableNode: HTMLElement|undefined,\n // nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n // }>}\n containerGroups: [], // same order/length as `containers` list\n\n // references to objects in `containerGroups`, but only those that actually have\n // tabbable nodes in them\n // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n // the same length\n tabbableGroups: [],\n\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n\n // timer ID for when delayInitialFocus is true and initial focus in this trap\n // has been delayed during activation\n delayInitialFocusTimer: undefined,\n\n // the most recent KeyboardEvent for the configured nav key (typically [SHIFT+]TAB), if any\n recentNavEvent: undefined,\n };\n\n let trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n /**\n * Gets a configuration option value.\n * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n * value will be taken from this object. Otherwise, value will be taken from base configuration.\n * @param {string} optionName Name of the option whose value is sought.\n * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n * IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n */\n const getOption = (configOverrideOptions, optionName, configOptionName) => {\n return configOverrideOptions &&\n configOverrideOptions[optionName] !== undefined\n ? configOverrideOptions[optionName]\n : config[configOptionName || optionName];\n };\n\n /**\n * Finds the index of the container that contains the element.\n * @param {HTMLElement} element\n * @param {Event} [event] If available, and `element` isn't directly found in any container,\n * the event's composed path is used to see if includes any known trap containers in the\n * case where the element is inside a Shadow DOM.\n * @returns {number} Index of the container in either `state.containers` or\n * `state.containerGroups` (the order/length of these lists are the same); -1\n * if the element isn't found.\n */\n const findContainerIndex = function (element, event) {\n const composedPath =\n typeof event?.composedPath === 'function'\n ? event.composedPath()\n : undefined;\n // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n // nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n // and we still need to find the element in there\n return state.containerGroups.findIndex(\n ({ container, tabbableNodes }) =>\n container.contains(element) ||\n // fall back to explicit tabbable search which will take into consideration any\n // web components if the `tabbableOptions.getShadowRoot` option was used for\n // the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n // look inside web components even if open)\n composedPath?.includes(container) ||\n tabbableNodes.find((node) => node === element)\n );\n };\n\n /**\n * Gets the node for the given option, which is expected to be an option that\n * can be either a DOM node, a string that is a selector to get a node, `false`\n * (if a node is explicitly NOT given), or a function that returns any of these\n * values.\n * @param {string} optionName\n * @returns {undefined | false | HTMLElement | SVGElement} Returns\n * `undefined` if the option is not specified; `false` if the option\n * resolved to `false` (node explicitly not given); otherwise, the resolved\n * DOM node.\n * @throws {Error} If the option is set, not `false`, and is not, or does not\n * resolve to a node.\n */\n const getNodeForOption = function (optionName, ...params) {\n let optionValue = config[optionName];\n\n if (typeof optionValue === 'function') {\n optionValue = optionValue(...params);\n }\n\n if (optionValue === true) {\n optionValue = undefined; // use default value\n }\n\n if (!optionValue) {\n if (optionValue === undefined || optionValue === false) {\n return optionValue;\n }\n // else, empty string (invalid), null (invalid), 0 (invalid)\n\n throw new Error(\n `\\`${optionName}\\` was specified but was not a node, or did not return a node`\n );\n }\n\n let node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n if (typeof optionValue === 'string') {\n node = doc.querySelector(optionValue); // resolve to node, or null if fails\n if (!node) {\n throw new Error(\n `\\`${optionName}\\` as selector refers to no known node`\n );\n }\n }\n\n return node;\n };\n\n const getInitialFocusNode = function () {\n let node = getNodeForOption('initialFocus');\n\n // false explicitly indicates we want no initialFocus at all\n if (node === false) {\n return false;\n }\n\n if (node === undefined || !isFocusable(node, config.tabbableOptions)) {\n // option not specified nor focusable: use fallback options\n if (findContainerIndex(doc.activeElement) >= 0) {\n node = doc.activeElement;\n } else {\n const firstTabbableGroup = state.tabbableGroups[0];\n const firstTabbableNode =\n firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n node = firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n }\n\n if (!node) {\n throw new Error(\n 'Your focus-trap needs to have at least one focusable element'\n );\n }\n\n return node;\n };\n\n const updateTabbableNodes = function () {\n state.containerGroups = state.containers.map((container) => {\n const tabbableNodes = tabbable(container, config.tabbableOptions);\n\n // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n // are a superset of tabbable nodes since nodes with negative `tabindex` attributes\n // are focusable but not tabbable\n const focusableNodes = focusable(container, config.tabbableOptions);\n\n const firstTabbableNode =\n tabbableNodes.length > 0 ? tabbableNodes[0] : undefined;\n const lastTabbableNode =\n tabbableNodes.length > 0\n ? tabbableNodes[tabbableNodes.length - 1]\n : undefined;\n\n const firstDomTabbableNode = focusableNodes.find((node) =>\n isTabbable(node)\n );\n const lastDomTabbableNode = focusableNodes\n .slice()\n .reverse()\n .find((node) => isTabbable(node));\n\n const posTabIndexesFound = !!tabbableNodes.find(\n (node) => getTabIndex(node) > 0\n );\n\n return {\n container,\n tabbableNodes,\n focusableNodes,\n\n /** True if at least one node with positive `tabindex` was found in this container. */\n posTabIndexesFound,\n\n /** First tabbable node in container, __tabindex__ order; `undefined` if none. */\n firstTabbableNode,\n /** Last tabbable node in container, __tabindex__ order; `undefined` if none. */\n lastTabbableNode,\n\n // NOTE: DOM order is NOT NECESSARILY \"document position\" order, but figuring that out\n // would require more than just https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // because that API doesn't work with Shadow DOM as well as it should (@see\n // https://github.com/whatwg/dom/issues/320) and since this first/last is only needed, so far,\n // to address an edge case related to positive tabindex support, this seems like a much easier,\n // \"close enough most of the time\" alternative for positive tabindexes which should generally\n // be avoided anyway...\n /** First tabbable node in container, __DOM__ order; `undefined` if none. */\n firstDomTabbableNode,\n /** Last tabbable node in container, __DOM__ order; `undefined` if none. */\n lastDomTabbableNode,\n\n /**\n * Finds the __tabbable__ node that follows the given node in the specified direction,\n * in this container, if any.\n * @param {HTMLElement} node\n * @param {boolean} [forward] True if going in forward tab order; false if going\n * in reverse.\n * @returns {HTMLElement|undefined} The next tabbable node, if any.\n */\n nextTabbableNode(node, forward = true) {\n const nodeIdx = tabbableNodes.indexOf(node);\n if (nodeIdx < 0) {\n // either not tabbable nor focusable, or was focused but not tabbable (negative tabindex):\n // since `node` should at least have been focusable, we assume that's the case and mimic\n // what browsers do, which is set focus to the next node in __document position order__,\n // regardless of positive tabindexes, if any -- and for reasons explained in the NOTE\n // above related to `firstDomTabbable` and `lastDomTabbable` properties, we fall back to\n // basic DOM order\n if (forward) {\n return focusableNodes\n .slice(focusableNodes.indexOf(node) + 1)\n .find((el) => isTabbable(el));\n }\n\n return focusableNodes\n .slice(0, focusableNodes.indexOf(node))\n .reverse()\n .find((el) => isTabbable(el));\n }\n\n return tabbableNodes[nodeIdx + (forward ? 1 : -1)];\n },\n };\n });\n\n state.tabbableGroups = state.containerGroups.filter(\n (group) => group.tabbableNodes.length > 0\n );\n\n // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n if (\n state.tabbableGroups.length <= 0 &&\n !getNodeForOption('fallbackFocus') // returning false not supported for this option\n ) {\n throw new Error(\n 'Your focus-trap must have at least one container with at least one tabbable node in it at all times'\n );\n }\n\n // NOTE: Positive tabindexes are only properly supported in single-container traps because\n // doing it across multiple containers where tabindexes could be all over the place\n // would require Tabbable to support multiple containers, would require additional\n // specialized Shadow DOM support, and would require Tabbable's multi-container support\n // to look at those containers in document position order rather than user-provided\n // order (as they are treated in Focus-trap, for legacy reasons). See discussion on\n // https://github.com/focus-trap/focus-trap/issues/375 for more details.\n if (\n state.containerGroups.find((g) => g.posTabIndexesFound) &&\n state.containerGroups.length > 1\n ) {\n throw new Error(\n \"At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.\"\n );\n }\n };\n\n /**\n * Gets the current activeElement. If it's a web-component and has open shadow-root\n * it will recursively search inside shadow roots for the \"true\" activeElement.\n *\n * @param {Document | ShadowRoot} el\n *\n * @returns {HTMLElement} The element that currently has the focus\n **/\n const getActiveElement = function (el) {\n const activeElement = el.activeElement;\n\n if (!activeElement) {\n return;\n }\n\n if (\n activeElement.shadowRoot &&\n activeElement.shadowRoot.activeElement !== null\n ) {\n return getActiveElement(activeElement.shadowRoot);\n }\n\n return activeElement;\n };\n\n const tryFocus = function (node) {\n if (node === false) {\n return;\n }\n\n if (node === getActiveElement(document)) {\n return;\n }\n\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n\n node.focus({ preventScroll: !!config.preventScroll });\n // NOTE: focus() API does not trigger focusIn event so set MRU node manually\n state.mostRecentlyFocusedNode = node;\n\n if (isSelectableInput(node)) {\n node.select();\n }\n };\n\n const getReturnFocusNode = function (previousActiveElement) {\n const node = getNodeForOption('setReturnFocus', previousActiveElement);\n return node ? node : node === false ? false : previousActiveElement;\n };\n\n /**\n * Finds the next node (in either direction) where focus should move according to a\n * keyboard focus-in event.\n * @param {Object} params\n * @param {Node} [params.target] Known target __from which__ to navigate, if any.\n * @param {KeyboardEvent|FocusEvent} [params.event] Event to use if `target` isn't known (event\n * will be used to determine the `target`). Ignored if `target` is specified.\n * @param {boolean} [params.isBackward] True if focus should move backward.\n * @returns {Node|undefined} The next node, or `undefined` if a next node couldn't be\n * determined given the current state of the trap.\n */\n const findNextNavNode = function ({ target, event, isBackward = false }) {\n target = target || getActualTarget(event);\n updateTabbableNodes();\n\n let destinationNode = null;\n\n if (state.tabbableGroups.length > 0) {\n // make sure the target is actually contained in a group\n // NOTE: the target may also be the container itself if it's focusable\n // with tabIndex='-1' and was given initial focus\n const containerIndex = findContainerIndex(target, event);\n const containerGroup =\n containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n\n if (containerIndex < 0) {\n // target not found in any group: quite possible focus has escaped the trap,\n // so bring it back into...\n if (isBackward) {\n // ...the last node in the last group\n destinationNode =\n state.tabbableGroups[state.tabbableGroups.length - 1]\n .lastTabbableNode;\n } else {\n // ...the first node in the first group\n destinationNode = state.tabbableGroups[0].firstTabbableNode;\n }\n } else if (isBackward) {\n // REVERSE\n\n // is the target the first tabbable node in a group?\n let startOfGroupIndex = findIndex(\n state.tabbableGroups,\n ({ firstTabbableNode }) => target === firstTabbableNode\n );\n\n if (\n startOfGroupIndex < 0 &&\n (containerGroup.container === target ||\n (isFocusable(target, config.tabbableOptions) &&\n !isTabbable(target, config.tabbableOptions) &&\n !containerGroup.nextTabbableNode(target, false)))\n ) {\n // an exception case where the target is either the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle shift+tab as if focus were on the container's\n // first tabbable node, and go to the last tabbable node of the LAST group\n startOfGroupIndex = containerIndex;\n }\n\n if (startOfGroupIndex >= 0) {\n // YES: then shift+tab should go to the last tabbable node in the\n // previous group (and wrap around to the last tabbable node of\n // the LAST group if it's the first tabbable node of the FIRST group)\n const destinationGroupIndex =\n startOfGroupIndex === 0\n ? state.tabbableGroups.length - 1\n : startOfGroupIndex - 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n\n destinationNode =\n getTabIndex(target) >= 0\n ? destinationGroup.lastTabbableNode\n : destinationGroup.lastDomTabbableNode;\n } else if (!isTabEvent(event)) {\n // user must have customized the nav keys so we have to move focus manually _within_\n // the active group: do this based on the order determined by tabbable()\n destinationNode = containerGroup.nextTabbableNode(target, false);\n }\n } else {\n // FORWARD\n\n // is the target the last tabbable node in a group?\n let lastOfGroupIndex = findIndex(\n state.tabbableGroups,\n ({ lastTabbableNode }) => target === lastTabbableNode\n );\n\n if (\n lastOfGroupIndex < 0 &&\n (containerGroup.container === target ||\n (isFocusable(target, config.tabbableOptions) &&\n !isTabbable(target, config.tabbableOptions) &&\n !containerGroup.nextTabbableNode(target)))\n ) {\n // an exception case where the target is the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle tab as if focus were on the container's\n // last tabbable node, and go to the first tabbable node of the FIRST group\n lastOfGroupIndex = containerIndex;\n }\n\n if (lastOfGroupIndex >= 0) {\n // YES: then tab should go to the first tabbable node in the next\n // group (and wrap around to the first tabbable node of the FIRST\n // group if it's the last tabbable node of the LAST group)\n const destinationGroupIndex =\n lastOfGroupIndex === state.tabbableGroups.length - 1\n ? 0\n : lastOfGroupIndex + 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n\n destinationNode =\n getTabIndex(target) >= 0\n ? destinationGroup.firstTabbableNode\n : destinationGroup.firstDomTabbableNode;\n } else if (!isTabEvent(event)) {\n // user must have customized the nav keys so we have to move focus manually _within_\n // the active group: do this based on the order determined by tabbable()\n destinationNode = containerGroup.nextTabbableNode(target);\n }\n }\n } else {\n // no groups available\n // NOTE: the fallbackFocus option does not support returning false to opt-out\n destinationNode = getNodeForOption('fallbackFocus');\n }\n\n return destinationNode;\n };\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n const checkPointerDown = function (e) {\n const target = getActualTarget(e);\n\n if (findContainerIndex(target, e) >= 0) {\n // allow the click since it ocurred inside the trap\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n // immediately deactivate the trap\n trap.deactivate({\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked (and if not focusable, to \"nothing\"); by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node), whether the\n // outside click was on a focusable node or not\n returnFocus: config.returnFocusOnDeactivate,\n });\n return;\n }\n\n // This is needed for mobile devices.\n // (If we'll only let `click` events through,\n // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n if (valueOrHandler(config.allowOutsideClick, e)) {\n // allow the click outside the trap to take place\n return;\n }\n\n // otherwise, prevent the click\n e.preventDefault();\n };\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n // NOTE: the focusIn event is NOT cancelable, so if focus escapes, it may cause unexpected\n // scrolling if the node that got focused was out of view; there's nothing we can do to\n // prevent that from happening by the time we discover that focus escaped\n const checkFocusIn = function (event) {\n const target = getActualTarget(event);\n const targetContained = findContainerIndex(target, event) >= 0;\n\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (targetContained || target instanceof Document) {\n if (targetContained) {\n state.mostRecentlyFocusedNode = target;\n }\n } else {\n // escaped! pull it back in to where it just left\n event.stopImmediatePropagation();\n\n // focus will escape if the MRU node had a positive tab index and user tried to nav forward;\n // it will also escape if the MRU node had a 0 tab index and user tried to nav backward\n // toward a node with a positive tab index\n let nextNode; // next node to focus, if we find one\n let navAcrossContainers = true;\n if (state.mostRecentlyFocusedNode) {\n if (getTabIndex(state.mostRecentlyFocusedNode) > 0) {\n // MRU container index must be >=0 otherwise we wouldn't have it as an MRU node...\n const mruContainerIdx = findContainerIndex(\n state.mostRecentlyFocusedNode\n );\n // there MAY not be any tabbable nodes in the container if there are at least 2 containers\n // and the MRU node is focusable but not tabbable (focus-trap requires at least 1 container\n // with at least one tabbable node in order to function, so this could be the other container\n // with nothing tabbable in it)\n const { tabbableNodes } = state.containerGroups[mruContainerIdx];\n if (tabbableNodes.length > 0) {\n // MRU tab index MAY not be found if the MRU node is focusable but not tabbable\n const mruTabIdx = tabbableNodes.findIndex(\n (node) => node === state.mostRecentlyFocusedNode\n );\n if (mruTabIdx >= 0) {\n if (config.isKeyForward(state.recentNavEvent)) {\n if (mruTabIdx + 1 < tabbableNodes.length) {\n nextNode = tabbableNodes[mruTabIdx + 1];\n navAcrossContainers = false;\n }\n // else, don't wrap within the container as focus should move to next/previous\n // container\n } else {\n if (mruTabIdx - 1 >= 0) {\n nextNode = tabbableNodes[mruTabIdx - 1];\n navAcrossContainers = false;\n }\n // else, don't wrap within the container as focus should move to next/previous\n // container\n }\n // else, don't find in container order without considering direction too\n }\n }\n // else, no tabbable nodes in that container (which means we must have at least one other\n // container with at least one tabbable node in it, otherwise focus-trap would've thrown\n // an error the last time updateTabbableNodes() was run): find next node among all known\n // containers\n } else {\n // check to see if there's at least one tabbable node with a positive tab index inside\n // the trap because focus seems to escape when navigating backward from a tabbable node\n // with tabindex=0 when this is the case (instead of wrapping to the tabbable node with\n // the greatest positive tab index like it should)\n if (\n !state.containerGroups.some((g) =>\n g.tabbableNodes.some((n) => getTabIndex(n) > 0)\n )\n ) {\n // no containers with tabbable nodes with positive tab indexes which means the focus\n // escaped for some other reason and we should just execute the fallback to the\n // MRU node or initial focus node, if any\n navAcrossContainers = false;\n }\n }\n } else {\n // no MRU node means we're likely in some initial condition when the trap has just\n // been activated and initial focus hasn't been given yet, in which case we should\n // fall through to trying to focus the initial focus node, which is what should\n // happen below at this point in the logic\n navAcrossContainers = false;\n }\n\n if (navAcrossContainers) {\n nextNode = findNextNavNode({\n // move FROM the MRU node, not event-related node (which will be the node that is\n // outside the trap causing the focus escape we're trying to fix)\n target: state.mostRecentlyFocusedNode,\n isBackward: config.isKeyBackward(state.recentNavEvent),\n });\n }\n\n if (nextNode) {\n tryFocus(nextNode);\n } else {\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n }\n\n state.recentNavEvent = undefined; // clear\n };\n\n // Hijack key nav events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n const checkKeyNav = function (event, isBackward = false) {\n state.recentNavEvent = event;\n\n const destinationNode = findNextNavNode({ event, isBackward });\n if (destinationNode) {\n if (isTabEvent(event)) {\n // since tab natively moves focus, we wouldn't have a destination node unless we\n // were on the edge of a container and had to move to the next/previous edge, in\n // which case we want to prevent default to keep the browser from moving focus\n // to where it normally would\n event.preventDefault();\n }\n tryFocus(destinationNode);\n }\n // else, let the browser take care of [shift+]tab and move the focus\n };\n\n const checkTabKey = function (event) {\n if (config.isKeyForward(event) || config.isKeyBackward(event)) {\n checkKeyNav(event, config.isKeyBackward(event));\n }\n };\n\n // we use a different event phase for the Escape key to allow canceling the event and checking for this in escapeDeactivates\n const checkEscapeKey = function (event) {\n if (\n isEscapeEvent(event) &&\n valueOrHandler(config.escapeDeactivates, event) !== false\n ) {\n event.preventDefault();\n trap.deactivate();\n }\n };\n\n const checkClick = function (e) {\n const target = getActualTarget(e);\n\n if (findContainerIndex(target, e) >= 0) {\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n return;\n }\n\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n\n //\n // EVENT LISTENERS\n //\n\n const addListeners = function () {\n if (!state.active) {\n return;\n }\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trapStack, trap);\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n state.delayInitialFocusTimer = config.delayInitialFocus\n ? delay(function () {\n tryFocus(getInitialFocusNode());\n })\n : tryFocus(getInitialFocusNode());\n\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('keydown', checkTabKey, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('keydown', checkEscapeKey);\n\n return trap;\n };\n\n const removeListeners = function () {\n if (!state.active) {\n return;\n }\n\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkTabKey, true);\n doc.removeEventListener('keydown', checkEscapeKey);\n\n return trap;\n };\n\n //\n // MUTATION OBSERVER\n //\n\n const checkDomRemoval = function (mutations) {\n const isFocusedNodeRemoved = mutations.some(function (mutation) {\n const removedNodes = Array.from(mutation.removedNodes);\n return removedNodes.some(function (node) {\n return node === state.mostRecentlyFocusedNode;\n });\n });\n\n // If the currently focused is removed then browsers will move focus to the\n // element. If this happens, try to move focus back into the trap.\n if (isFocusedNodeRemoved) {\n tryFocus(getInitialFocusNode());\n }\n };\n\n // Use MutationObserver - if supported - to detect if focused node is removed\n // from the DOM.\n const mutationObserver =\n typeof window !== 'undefined' && 'MutationObserver' in window\n ? new MutationObserver(checkDomRemoval)\n : undefined;\n\n const updateObservedNodes = function () {\n if (!mutationObserver) {\n return;\n }\n\n mutationObserver.disconnect();\n if (state.active && !state.paused) {\n state.containers.map(function (container) {\n mutationObserver.observe(container, {\n subtree: true,\n childList: true,\n });\n });\n }\n };\n\n //\n // TRAP DEFINITION\n //\n\n trap = {\n get active() {\n return state.active;\n },\n\n get paused() {\n return state.paused;\n },\n\n activate(activateOptions) {\n if (state.active) {\n return this;\n }\n\n const onActivate = getOption(activateOptions, 'onActivate');\n const onPostActivate = getOption(activateOptions, 'onPostActivate');\n const checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n\n if (!checkCanFocusTrap) {\n updateTabbableNodes();\n }\n\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n\n onActivate?.();\n\n const finishActivation = () => {\n if (checkCanFocusTrap) {\n updateTabbableNodes();\n }\n addListeners();\n updateObservedNodes();\n onPostActivate?.();\n };\n\n if (checkCanFocusTrap) {\n checkCanFocusTrap(state.containers.concat()).then(\n finishActivation,\n finishActivation\n );\n return this;\n }\n\n finishActivation();\n return this;\n },\n\n deactivate(deactivateOptions) {\n if (!state.active) {\n return this;\n }\n\n const options = {\n onDeactivate: config.onDeactivate,\n onPostDeactivate: config.onPostDeactivate,\n checkCanReturnFocus: config.checkCanReturnFocus,\n ...deactivateOptions,\n };\n\n clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n state.delayInitialFocusTimer = undefined;\n\n removeListeners();\n state.active = false;\n state.paused = false;\n updateObservedNodes();\n\n activeFocusTraps.deactivateTrap(trapStack, trap);\n\n const onDeactivate = getOption(options, 'onDeactivate');\n const onPostDeactivate = getOption(options, 'onPostDeactivate');\n const checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n const returnFocus = getOption(\n options,\n 'returnFocus',\n 'returnFocusOnDeactivate'\n );\n\n onDeactivate?.();\n\n const finishDeactivation = () => {\n delay(() => {\n if (returnFocus) {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n }\n onPostDeactivate?.();\n });\n };\n\n if (returnFocus && checkCanReturnFocus) {\n checkCanReturnFocus(\n getReturnFocusNode(state.nodeFocusedBeforeActivation)\n ).then(finishDeactivation, finishDeactivation);\n return this;\n }\n\n finishDeactivation();\n return this;\n },\n\n pause(pauseOptions) {\n if (state.paused || !state.active) {\n return this;\n }\n\n const onPause = getOption(pauseOptions, 'onPause');\n const onPostPause = getOption(pauseOptions, 'onPostPause');\n\n state.paused = true;\n onPause?.();\n\n removeListeners();\n updateObservedNodes();\n\n onPostPause?.();\n return this;\n },\n\n unpause(unpauseOptions) {\n if (!state.paused || !state.active) {\n return this;\n }\n\n const onUnpause = getOption(unpauseOptions, 'onUnpause');\n const onPostUnpause = getOption(unpauseOptions, 'onPostUnpause');\n\n state.paused = false;\n onUnpause?.();\n\n updateTabbableNodes();\n addListeners();\n updateObservedNodes();\n\n onPostUnpause?.();\n return this;\n },\n\n updateContainerElements(containerElements) {\n const elementsAsArray = [].concat(containerElements).filter(Boolean);\n\n state.containers = elementsAsArray.map((element) =>\n typeof element === 'string' ? doc.querySelector(element) : element\n );\n\n if (state.active) {\n updateTabbableNodes();\n }\n\n updateObservedNodes();\n\n return this;\n },\n };\n\n // initialize container elements\n trap.updateContainerElements(elements);\n\n return trap;\n};\n\nexport { createFocusTrap };\n"],"names":["activeFocusTraps","trapStack","trap","length","activeTrap","pause","trapIndex","indexOf","splice","push","unpause","isTabEvent","e","key","keyCode","isKeyForward","shiftKey","isKeyBackward","delay","fn","setTimeout","findIndex","arr","idx","every","value","i","valueOrHandler","_len","arguments","params","Array","_key","apply","getActualTarget","event","target","shadowRoot","composedPath","internalTrapStack","elements","userOptions","doc","document","config","_objectSpread","returnFocusOnDeactivate","escapeDeactivates","delayInitialFocus","state","containers","containerGroups","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","active","paused","delayInitialFocusTimer","undefined","recentNavEvent","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","element","_ref","container","tabbableNodes","contains","includes","find","node","getNodeForOption","optionValue","_len2","_key2","Error","concat","querySelector","getInitialFocusNode","isFocusable","tabbableOptions","activeElement","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","map","tabbable","focusableNodes","focusable","lastTabbableNode","firstDomTabbableNode","isTabbable","lastDomTabbableNode","slice","reverse","posTabIndexesFound","getTabIndex","nextTabbableNode","forward","nodeIdx","el","filter","group","g","getActiveElement","tryFocus","focus","preventScroll","tagName","toLowerCase","select","isSelectableInput","getReturnFocusNode","previousActiveElement","findNextNavNode","_ref2","_ref2$isBackward","isBackward","destinationNode","containerIndex","containerGroup","startOfGroupIndex","_ref3","destinationGroupIndex","destinationGroup","lastOfGroupIndex","_ref4","checkPointerDown","clickOutsideDeactivates","deactivate","returnFocus","allowOutsideClick","preventDefault","checkFocusIn","targetContained","Document","nextNode","stopImmediatePropagation","navAcrossContainers","mruContainerIdx","mruTabIdx","some","n","checkTabKey","checkKeyNav","checkEscapeKey","checkClick","addListeners","addEventListener","capture","passive","removeListeners","removeEventListener","mutationObserver","window","MutationObserver","mutations","mutation","from","removedNodes","updateObservedNodes","disconnect","observe","subtree","childList","activate","activateOptions","this","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","then","deactivateOptions","options","onDeactivate","onPostDeactivate","checkCanReturnFocus","clearTimeout","finishDeactivation","pauseOptions","onPause","onPostPause","unpauseOptions","onUnpause","onPostUnpause","updateContainerElements","containerElements","elementsAsArray","Boolean"],"mappings":"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"} \ No newline at end of file +{"version":3,"file":"focus-trap.umd.min.js","sources":["../index.js"],"sourcesContent":["import {\n tabbable,\n focusable,\n isFocusable,\n isTabbable,\n getTabIndex,\n} from 'tabbable';\n\nconst activeFocusTraps = {\n activateTrap(trapStack, trap) {\n if (trapStack.length > 0) {\n const activeTrap = trapStack[trapStack.length - 1];\n if (activeTrap !== trap) {\n activeTrap.pause();\n }\n }\n\n const trapIndex = trapStack.indexOf(trap);\n if (trapIndex === -1) {\n trapStack.push(trap);\n } else {\n // move this existing trap to the front of the queue\n trapStack.splice(trapIndex, 1);\n trapStack.push(trap);\n }\n },\n\n deactivateTrap(trapStack, trap) {\n const trapIndex = trapStack.indexOf(trap);\n if (trapIndex !== -1) {\n trapStack.splice(trapIndex, 1);\n }\n\n if (trapStack.length > 0) {\n trapStack[trapStack.length - 1].unpause();\n }\n },\n};\n\nconst isSelectableInput = function (node) {\n return (\n node.tagName &&\n node.tagName.toLowerCase() === 'input' &&\n typeof node.select === 'function'\n );\n};\n\nconst isEscapeEvent = function (e) {\n return e?.key === 'Escape' || e?.key === 'Esc' || e?.keyCode === 27;\n};\n\nconst isTabEvent = function (e) {\n return e?.key === 'Tab' || e?.keyCode === 9;\n};\n\n// checks for TAB by default\nconst isKeyForward = function (e) {\n return isTabEvent(e) && !e.shiftKey;\n};\n\n// checks for SHIFT+TAB by default\nconst isKeyBackward = function (e) {\n return isTabEvent(e) && e.shiftKey;\n};\n\nconst delay = function (fn) {\n return setTimeout(fn, 0);\n};\n\n// Array.find/findIndex() are not supported on IE; this replicates enough\n// of Array.findIndex() for our needs\nconst findIndex = function (arr, fn) {\n let idx = -1;\n\n arr.every(function (value, i) {\n if (fn(value)) {\n idx = i;\n return false; // break\n }\n\n return true; // next\n });\n\n return idx;\n};\n\n/**\n * Get an option's value when it could be a plain value, or a handler that provides\n * the value.\n * @param {*} value Option's value to check.\n * @param {...*} [params] Any parameters to pass to the handler, if `value` is a function.\n * @returns {*} The `value`, or the handler's returned value.\n */\nconst valueOrHandler = function (value, ...params) {\n return typeof value === 'function' ? value(...params) : value;\n};\n\nconst getActualTarget = function (event) {\n // NOTE: If the trap is _inside_ a shadow DOM, event.target will always be the\n // shadow host. However, event.target.composedPath() will be an array of\n // nodes \"clicked\" from inner-most (the actual element inside the shadow) to\n // outer-most (the host HTML document). If we have access to composedPath(),\n // then use its first element; otherwise, fall back to event.target (and\n // this only works for an _open_ shadow DOM; otherwise,\n // composedPath()[0] === event.target always).\n return event.target.shadowRoot && typeof event.composedPath === 'function'\n ? event.composedPath()[0]\n : event.target;\n};\n\n// NOTE: this must be _outside_ `createFocusTrap()` to make sure all traps in this\n// current instance use the same stack if `userOptions.trapStack` isn't specified\nconst internalTrapStack = [];\n\nconst createFocusTrap = function (elements, userOptions) {\n // SSR: a live trap shouldn't be created in this type of environment so this\n // should be safe code to execute if the `document` option isn't specified\n const doc = userOptions?.document || document;\n\n const trapStack = userOptions?.trapStack || internalTrapStack;\n\n const config = {\n returnFocusOnDeactivate: true,\n escapeDeactivates: true,\n delayInitialFocus: true,\n isKeyForward,\n isKeyBackward,\n ...userOptions,\n };\n\n const state = {\n // containers given to createFocusTrap()\n // @type {Array}\n containers: [],\n\n // list of objects identifying tabbable nodes in `containers` in the trap\n // NOTE: it's possible that a group has no tabbable nodes if nodes get removed while the trap\n // is active, but the trap should never get to a state where there isn't at least one group\n // with at least one tabbable node in it (that would lead to an error condition that would\n // result in an error being thrown)\n // @type {Array<{\n // container: HTMLElement,\n // tabbableNodes: Array, // empty if none\n // focusableNodes: Array, // empty if none\n // posTabIndexesFound: boolean,\n // firstTabbableNode: HTMLElement|undefined,\n // lastTabbableNode: HTMLElement|undefined,\n // firstDomTabbableNode: HTMLElement|undefined,\n // lastDomTabbableNode: HTMLElement|undefined,\n // nextTabbableNode: (node: HTMLElement, forward: boolean) => HTMLElement|undefined\n // }>}\n containerGroups: [], // same order/length as `containers` list\n\n // references to objects in `containerGroups`, but only those that actually have\n // tabbable nodes in them\n // NOTE: same order as `containers` and `containerGroups`, but __not necessarily__\n // the same length\n tabbableGroups: [],\n\n nodeFocusedBeforeActivation: null,\n mostRecentlyFocusedNode: null,\n active: false,\n paused: false,\n\n // timer ID for when delayInitialFocus is true and initial focus in this trap\n // has been delayed during activation\n delayInitialFocusTimer: undefined,\n\n // the most recent KeyboardEvent for the configured nav key (typically [SHIFT+]TAB), if any\n recentNavEvent: undefined,\n };\n\n let trap; // eslint-disable-line prefer-const -- some private functions reference it, and its methods reference private functions, so we must declare here and define later\n\n /**\n * Gets a configuration option value.\n * @param {Object|undefined} configOverrideOptions If true, and option is defined in this set,\n * value will be taken from this object. Otherwise, value will be taken from base configuration.\n * @param {string} optionName Name of the option whose value is sought.\n * @param {string|undefined} [configOptionName] Name of option to use __instead of__ `optionName`\n * IIF `configOverrideOptions` is not defined. Otherwise, `optionName` is used.\n */\n const getOption = (configOverrideOptions, optionName, configOptionName) => {\n return configOverrideOptions &&\n configOverrideOptions[optionName] !== undefined\n ? configOverrideOptions[optionName]\n : config[configOptionName || optionName];\n };\n\n /**\n * Finds the index of the container that contains the element.\n * @param {HTMLElement} element\n * @param {Event} [event] If available, and `element` isn't directly found in any container,\n * the event's composed path is used to see if includes any known trap containers in the\n * case where the element is inside a Shadow DOM.\n * @returns {number} Index of the container in either `state.containers` or\n * `state.containerGroups` (the order/length of these lists are the same); -1\n * if the element isn't found.\n */\n const findContainerIndex = function (element, event) {\n const composedPath =\n typeof event?.composedPath === 'function'\n ? event.composedPath()\n : undefined;\n // NOTE: search `containerGroups` because it's possible a group contains no tabbable\n // nodes, but still contains focusable nodes (e.g. if they all have `tabindex=-1`)\n // and we still need to find the element in there\n return state.containerGroups.findIndex(\n ({ container, tabbableNodes }) =>\n container.contains(element) ||\n // fall back to explicit tabbable search which will take into consideration any\n // web components if the `tabbableOptions.getShadowRoot` option was used for\n // the trap, enabling shadow DOM support in tabbable (`Node.contains()` doesn't\n // look inside web components even if open)\n composedPath?.includes(container) ||\n tabbableNodes.find((node) => node === element)\n );\n };\n\n /**\n * Gets the node for the given option, which is expected to be an option that\n * can be either a DOM node, a string that is a selector to get a node, `false`\n * (if a node is explicitly NOT given), or a function that returns any of these\n * values.\n * @param {string} optionName\n * @param {Object} options\n * @param {boolean} [options.hasFallback] True if the option could be a selector string\n * and the option allows for a fallback scenario in the case where the selector is\n * valid but does not match a node (i.e. the queried node doesn't exist in the DOM).\n * @param {Array} [options.params] Params to pass to the option if it's a function.\n * @returns {undefined | null | false | HTMLElement | SVGElement} Returns\n * `undefined` if the option is not specified; `null` if the option didn't resolve\n * to a node but `options.hasFallback=true`, `false` if the option resolved to `false`\n * (node explicitly not given); otherwise, the resolved DOM node.\n * @throws {Error} If the option is set, not `false`, and is not, or does not\n * resolve to a node, unless the option is a selector string and `options.hasFallback=true`.\n */\n const getNodeForOption = function (\n optionName,\n { hasFallback = false, params = [] } = {}\n ) {\n let optionValue = config[optionName];\n\n if (typeof optionValue === 'function') {\n optionValue = optionValue(...params);\n }\n\n if (optionValue === true) {\n optionValue = undefined; // use default value\n }\n\n if (!optionValue) {\n if (optionValue === undefined || optionValue === false) {\n return optionValue;\n }\n // else, empty string (invalid), null (invalid), 0 (invalid)\n\n throw new Error(\n `\\`${optionName}\\` was specified but was not a node, or did not return a node`\n );\n }\n\n let node = optionValue; // could be HTMLElement, SVGElement, or non-empty string at this point\n\n if (typeof optionValue === 'string') {\n try {\n node = doc.querySelector(optionValue); // resolve to node, or null if fails\n } catch (err) {\n throw new Error(\n `\\`${optionName}\\` appears to be an invalid selector; error=\"${err.message}\"`\n );\n }\n\n if (!node) {\n if (!hasFallback) {\n throw new Error(\n `\\`${optionName}\\` as selector refers to no known node`\n );\n }\n // else, `node` MUST be `null` because that's what `Document.querySelector()` returns\n // if the selector is valid but doesn't match anything\n }\n }\n\n return node;\n };\n\n const getInitialFocusNode = function () {\n let node = getNodeForOption('initialFocus', { hasFallback: true });\n\n // false explicitly indicates we want no initialFocus at all\n if (node === false) {\n return false;\n }\n\n if (\n node === undefined ||\n (node && !isFocusable(node, config.tabbableOptions))\n ) {\n // option not specified nor focusable: use fallback options\n if (findContainerIndex(doc.activeElement) >= 0) {\n node = doc.activeElement;\n } else {\n const firstTabbableGroup = state.tabbableGroups[0];\n const firstTabbableNode =\n firstTabbableGroup && firstTabbableGroup.firstTabbableNode;\n\n // NOTE: `fallbackFocus` option function cannot return `false` (not supported)\n node = firstTabbableNode || getNodeForOption('fallbackFocus');\n }\n } else if (node === null) {\n // option is a VALID selector string that doesn't yield a node: use the `fallbackFocus`\n // option instead of the default behavior when the option isn't specified at all\n node = getNodeForOption('fallbackFocus');\n }\n\n if (!node) {\n throw new Error(\n 'Your focus-trap needs to have at least one focusable element'\n );\n }\n\n return node;\n };\n\n const updateTabbableNodes = function () {\n state.containerGroups = state.containers.map((container) => {\n const tabbableNodes = tabbable(container, config.tabbableOptions);\n\n // NOTE: if we have tabbable nodes, we must have focusable nodes; focusable nodes\n // are a superset of tabbable nodes since nodes with negative `tabindex` attributes\n // are focusable but not tabbable\n const focusableNodes = focusable(container, config.tabbableOptions);\n\n const firstTabbableNode =\n tabbableNodes.length > 0 ? tabbableNodes[0] : undefined;\n const lastTabbableNode =\n tabbableNodes.length > 0\n ? tabbableNodes[tabbableNodes.length - 1]\n : undefined;\n\n const firstDomTabbableNode = focusableNodes.find((node) =>\n isTabbable(node)\n );\n const lastDomTabbableNode = focusableNodes\n .slice()\n .reverse()\n .find((node) => isTabbable(node));\n\n const posTabIndexesFound = !!tabbableNodes.find(\n (node) => getTabIndex(node) > 0\n );\n\n return {\n container,\n tabbableNodes,\n focusableNodes,\n\n /** True if at least one node with positive `tabindex` was found in this container. */\n posTabIndexesFound,\n\n /** First tabbable node in container, __tabindex__ order; `undefined` if none. */\n firstTabbableNode,\n /** Last tabbable node in container, __tabindex__ order; `undefined` if none. */\n lastTabbableNode,\n\n // NOTE: DOM order is NOT NECESSARILY \"document position\" order, but figuring that out\n // would require more than just https://developer.mozilla.org/en-US/docs/Web/API/Node/compareDocumentPosition\n // because that API doesn't work with Shadow DOM as well as it should (@see\n // https://github.com/whatwg/dom/issues/320) and since this first/last is only needed, so far,\n // to address an edge case related to positive tabindex support, this seems like a much easier,\n // \"close enough most of the time\" alternative for positive tabindexes which should generally\n // be avoided anyway...\n /** First tabbable node in container, __DOM__ order; `undefined` if none. */\n firstDomTabbableNode,\n /** Last tabbable node in container, __DOM__ order; `undefined` if none. */\n lastDomTabbableNode,\n\n /**\n * Finds the __tabbable__ node that follows the given node in the specified direction,\n * in this container, if any.\n * @param {HTMLElement} node\n * @param {boolean} [forward] True if going in forward tab order; false if going\n * in reverse.\n * @returns {HTMLElement|undefined} The next tabbable node, if any.\n */\n nextTabbableNode(node, forward = true) {\n const nodeIdx = tabbableNodes.indexOf(node);\n if (nodeIdx < 0) {\n // either not tabbable nor focusable, or was focused but not tabbable (negative tabindex):\n // since `node` should at least have been focusable, we assume that's the case and mimic\n // what browsers do, which is set focus to the next node in __document position order__,\n // regardless of positive tabindexes, if any -- and for reasons explained in the NOTE\n // above related to `firstDomTabbable` and `lastDomTabbable` properties, we fall back to\n // basic DOM order\n if (forward) {\n return focusableNodes\n .slice(focusableNodes.indexOf(node) + 1)\n .find((el) => isTabbable(el));\n }\n\n return focusableNodes\n .slice(0, focusableNodes.indexOf(node))\n .reverse()\n .find((el) => isTabbable(el));\n }\n\n return tabbableNodes[nodeIdx + (forward ? 1 : -1)];\n },\n };\n });\n\n state.tabbableGroups = state.containerGroups.filter(\n (group) => group.tabbableNodes.length > 0\n );\n\n // throw if no groups have tabbable nodes and we don't have a fallback focus node either\n if (\n state.tabbableGroups.length <= 0 &&\n !getNodeForOption('fallbackFocus') // returning false not supported for this option\n ) {\n throw new Error(\n 'Your focus-trap must have at least one container with at least one tabbable node in it at all times'\n );\n }\n\n // NOTE: Positive tabindexes are only properly supported in single-container traps because\n // doing it across multiple containers where tabindexes could be all over the place\n // would require Tabbable to support multiple containers, would require additional\n // specialized Shadow DOM support, and would require Tabbable's multi-container support\n // to look at those containers in document position order rather than user-provided\n // order (as they are treated in Focus-trap, for legacy reasons). See discussion on\n // https://github.com/focus-trap/focus-trap/issues/375 for more details.\n if (\n state.containerGroups.find((g) => g.posTabIndexesFound) &&\n state.containerGroups.length > 1\n ) {\n throw new Error(\n \"At least one node with a positive tabindex was found in one of your focus-trap's multiple containers. Positive tabindexes are only supported in single-container focus-traps.\"\n );\n }\n };\n\n /**\n * Gets the current activeElement. If it's a web-component and has open shadow-root\n * it will recursively search inside shadow roots for the \"true\" activeElement.\n *\n * @param {Document | ShadowRoot} el\n *\n * @returns {HTMLElement} The element that currently has the focus\n **/\n const getActiveElement = function (el) {\n const activeElement = el.activeElement;\n\n if (!activeElement) {\n return;\n }\n\n if (\n activeElement.shadowRoot &&\n activeElement.shadowRoot.activeElement !== null\n ) {\n return getActiveElement(activeElement.shadowRoot);\n }\n\n return activeElement;\n };\n\n const tryFocus = function (node) {\n if (node === false) {\n return;\n }\n\n if (node === getActiveElement(document)) {\n return;\n }\n\n if (!node || !node.focus) {\n tryFocus(getInitialFocusNode());\n return;\n }\n\n node.focus({ preventScroll: !!config.preventScroll });\n // NOTE: focus() API does not trigger focusIn event so set MRU node manually\n state.mostRecentlyFocusedNode = node;\n\n if (isSelectableInput(node)) {\n node.select();\n }\n };\n\n const getReturnFocusNode = function (previousActiveElement) {\n const node = getNodeForOption('setReturnFocus', {\n params: [previousActiveElement],\n });\n return node ? node : node === false ? false : previousActiveElement;\n };\n\n /**\n * Finds the next node (in either direction) where focus should move according to a\n * keyboard focus-in event.\n * @param {Object} params\n * @param {Node} [params.target] Known target __from which__ to navigate, if any.\n * @param {KeyboardEvent|FocusEvent} [params.event] Event to use if `target` isn't known (event\n * will be used to determine the `target`). Ignored if `target` is specified.\n * @param {boolean} [params.isBackward] True if focus should move backward.\n * @returns {Node|undefined} The next node, or `undefined` if a next node couldn't be\n * determined given the current state of the trap.\n */\n const findNextNavNode = function ({ target, event, isBackward = false }) {\n target = target || getActualTarget(event);\n updateTabbableNodes();\n\n let destinationNode = null;\n\n if (state.tabbableGroups.length > 0) {\n // make sure the target is actually contained in a group\n // NOTE: the target may also be the container itself if it's focusable\n // with tabIndex='-1' and was given initial focus\n const containerIndex = findContainerIndex(target, event);\n const containerGroup =\n containerIndex >= 0 ? state.containerGroups[containerIndex] : undefined;\n\n if (containerIndex < 0) {\n // target not found in any group: quite possible focus has escaped the trap,\n // so bring it back into...\n if (isBackward) {\n // ...the last node in the last group\n destinationNode =\n state.tabbableGroups[state.tabbableGroups.length - 1]\n .lastTabbableNode;\n } else {\n // ...the first node in the first group\n destinationNode = state.tabbableGroups[0].firstTabbableNode;\n }\n } else if (isBackward) {\n // REVERSE\n\n // is the target the first tabbable node in a group?\n let startOfGroupIndex = findIndex(\n state.tabbableGroups,\n ({ firstTabbableNode }) => target === firstTabbableNode\n );\n\n if (\n startOfGroupIndex < 0 &&\n (containerGroup.container === target ||\n (isFocusable(target, config.tabbableOptions) &&\n !isTabbable(target, config.tabbableOptions) &&\n !containerGroup.nextTabbableNode(target, false)))\n ) {\n // an exception case where the target is either the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle shift+tab as if focus were on the container's\n // first tabbable node, and go to the last tabbable node of the LAST group\n startOfGroupIndex = containerIndex;\n }\n\n if (startOfGroupIndex >= 0) {\n // YES: then shift+tab should go to the last tabbable node in the\n // previous group (and wrap around to the last tabbable node of\n // the LAST group if it's the first tabbable node of the FIRST group)\n const destinationGroupIndex =\n startOfGroupIndex === 0\n ? state.tabbableGroups.length - 1\n : startOfGroupIndex - 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n\n destinationNode =\n getTabIndex(target) >= 0\n ? destinationGroup.lastTabbableNode\n : destinationGroup.lastDomTabbableNode;\n } else if (!isTabEvent(event)) {\n // user must have customized the nav keys so we have to move focus manually _within_\n // the active group: do this based on the order determined by tabbable()\n destinationNode = containerGroup.nextTabbableNode(target, false);\n }\n } else {\n // FORWARD\n\n // is the target the last tabbable node in a group?\n let lastOfGroupIndex = findIndex(\n state.tabbableGroups,\n ({ lastTabbableNode }) => target === lastTabbableNode\n );\n\n if (\n lastOfGroupIndex < 0 &&\n (containerGroup.container === target ||\n (isFocusable(target, config.tabbableOptions) &&\n !isTabbable(target, config.tabbableOptions) &&\n !containerGroup.nextTabbableNode(target)))\n ) {\n // an exception case where the target is the container itself, or\n // a non-tabbable node that was given focus (i.e. tabindex is negative\n // and user clicked on it or node was programmatically given focus)\n // and is not followed by any other tabbable node, in which\n // case, we should handle tab as if focus were on the container's\n // last tabbable node, and go to the first tabbable node of the FIRST group\n lastOfGroupIndex = containerIndex;\n }\n\n if (lastOfGroupIndex >= 0) {\n // YES: then tab should go to the first tabbable node in the next\n // group (and wrap around to the first tabbable node of the FIRST\n // group if it's the last tabbable node of the LAST group)\n const destinationGroupIndex =\n lastOfGroupIndex === state.tabbableGroups.length - 1\n ? 0\n : lastOfGroupIndex + 1;\n\n const destinationGroup = state.tabbableGroups[destinationGroupIndex];\n\n destinationNode =\n getTabIndex(target) >= 0\n ? destinationGroup.firstTabbableNode\n : destinationGroup.firstDomTabbableNode;\n } else if (!isTabEvent(event)) {\n // user must have customized the nav keys so we have to move focus manually _within_\n // the active group: do this based on the order determined by tabbable()\n destinationNode = containerGroup.nextTabbableNode(target);\n }\n }\n } else {\n // no groups available\n // NOTE: the fallbackFocus option does not support returning false to opt-out\n destinationNode = getNodeForOption('fallbackFocus');\n }\n\n return destinationNode;\n };\n\n // This needs to be done on mousedown and touchstart instead of click\n // so that it precedes the focus event.\n const checkPointerDown = function (e) {\n const target = getActualTarget(e);\n\n if (findContainerIndex(target, e) >= 0) {\n // allow the click since it ocurred inside the trap\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n // immediately deactivate the trap\n trap.deactivate({\n // NOTE: by setting `returnFocus: false`, deactivate() will do nothing,\n // which will result in the outside click setting focus to the node\n // that was clicked (and if not focusable, to \"nothing\"); by setting\n // `returnFocus: true`, we'll attempt to re-focus the node originally-focused\n // on activation (or the configured `setReturnFocus` node), whether the\n // outside click was on a focusable node or not\n returnFocus: config.returnFocusOnDeactivate,\n });\n return;\n }\n\n // This is needed for mobile devices.\n // (If we'll only let `click` events through,\n // then on mobile they will be blocked anyways if `touchstart` is blocked.)\n if (valueOrHandler(config.allowOutsideClick, e)) {\n // allow the click outside the trap to take place\n return;\n }\n\n // otherwise, prevent the click\n e.preventDefault();\n };\n\n // In case focus escapes the trap for some strange reason, pull it back in.\n // NOTE: the focusIn event is NOT cancelable, so if focus escapes, it may cause unexpected\n // scrolling if the node that got focused was out of view; there's nothing we can do to\n // prevent that from happening by the time we discover that focus escaped\n const checkFocusIn = function (event) {\n const target = getActualTarget(event);\n const targetContained = findContainerIndex(target, event) >= 0;\n\n // In Firefox when you Tab out of an iframe the Document is briefly focused.\n if (targetContained || target instanceof Document) {\n if (targetContained) {\n state.mostRecentlyFocusedNode = target;\n }\n } else {\n // escaped! pull it back in to where it just left\n event.stopImmediatePropagation();\n\n // focus will escape if the MRU node had a positive tab index and user tried to nav forward;\n // it will also escape if the MRU node had a 0 tab index and user tried to nav backward\n // toward a node with a positive tab index\n let nextNode; // next node to focus, if we find one\n let navAcrossContainers = true;\n if (state.mostRecentlyFocusedNode) {\n if (getTabIndex(state.mostRecentlyFocusedNode) > 0) {\n // MRU container index must be >=0 otherwise we wouldn't have it as an MRU node...\n const mruContainerIdx = findContainerIndex(\n state.mostRecentlyFocusedNode\n );\n // there MAY not be any tabbable nodes in the container if there are at least 2 containers\n // and the MRU node is focusable but not tabbable (focus-trap requires at least 1 container\n // with at least one tabbable node in order to function, so this could be the other container\n // with nothing tabbable in it)\n const { tabbableNodes } = state.containerGroups[mruContainerIdx];\n if (tabbableNodes.length > 0) {\n // MRU tab index MAY not be found if the MRU node is focusable but not tabbable\n const mruTabIdx = tabbableNodes.findIndex(\n (node) => node === state.mostRecentlyFocusedNode\n );\n if (mruTabIdx >= 0) {\n if (config.isKeyForward(state.recentNavEvent)) {\n if (mruTabIdx + 1 < tabbableNodes.length) {\n nextNode = tabbableNodes[mruTabIdx + 1];\n navAcrossContainers = false;\n }\n // else, don't wrap within the container as focus should move to next/previous\n // container\n } else {\n if (mruTabIdx - 1 >= 0) {\n nextNode = tabbableNodes[mruTabIdx - 1];\n navAcrossContainers = false;\n }\n // else, don't wrap within the container as focus should move to next/previous\n // container\n }\n // else, don't find in container order without considering direction too\n }\n }\n // else, no tabbable nodes in that container (which means we must have at least one other\n // container with at least one tabbable node in it, otherwise focus-trap would've thrown\n // an error the last time updateTabbableNodes() was run): find next node among all known\n // containers\n } else {\n // check to see if there's at least one tabbable node with a positive tab index inside\n // the trap because focus seems to escape when navigating backward from a tabbable node\n // with tabindex=0 when this is the case (instead of wrapping to the tabbable node with\n // the greatest positive tab index like it should)\n if (\n !state.containerGroups.some((g) =>\n g.tabbableNodes.some((n) => getTabIndex(n) > 0)\n )\n ) {\n // no containers with tabbable nodes with positive tab indexes which means the focus\n // escaped for some other reason and we should just execute the fallback to the\n // MRU node or initial focus node, if any\n navAcrossContainers = false;\n }\n }\n } else {\n // no MRU node means we're likely in some initial condition when the trap has just\n // been activated and initial focus hasn't been given yet, in which case we should\n // fall through to trying to focus the initial focus node, which is what should\n // happen below at this point in the logic\n navAcrossContainers = false;\n }\n\n if (navAcrossContainers) {\n nextNode = findNextNavNode({\n // move FROM the MRU node, not event-related node (which will be the node that is\n // outside the trap causing the focus escape we're trying to fix)\n target: state.mostRecentlyFocusedNode,\n isBackward: config.isKeyBackward(state.recentNavEvent),\n });\n }\n\n if (nextNode) {\n tryFocus(nextNode);\n } else {\n tryFocus(state.mostRecentlyFocusedNode || getInitialFocusNode());\n }\n }\n\n state.recentNavEvent = undefined; // clear\n };\n\n // Hijack key nav events on the first and last focusable nodes of the trap,\n // in order to prevent focus from escaping. If it escapes for even a\n // moment it can end up scrolling the page and causing confusion so we\n // kind of need to capture the action at the keydown phase.\n const checkKeyNav = function (event, isBackward = false) {\n state.recentNavEvent = event;\n\n const destinationNode = findNextNavNode({ event, isBackward });\n if (destinationNode) {\n if (isTabEvent(event)) {\n // since tab natively moves focus, we wouldn't have a destination node unless we\n // were on the edge of a container and had to move to the next/previous edge, in\n // which case we want to prevent default to keep the browser from moving focus\n // to where it normally would\n event.preventDefault();\n }\n tryFocus(destinationNode);\n }\n // else, let the browser take care of [shift+]tab and move the focus\n };\n\n const checkTabKey = function (event) {\n if (config.isKeyForward(event) || config.isKeyBackward(event)) {\n checkKeyNav(event, config.isKeyBackward(event));\n }\n };\n\n // we use a different event phase for the Escape key to allow canceling the event and checking for this in escapeDeactivates\n const checkEscapeKey = function (event) {\n if (\n isEscapeEvent(event) &&\n valueOrHandler(config.escapeDeactivates, event) !== false\n ) {\n event.preventDefault();\n trap.deactivate();\n }\n };\n\n const checkClick = function (e) {\n const target = getActualTarget(e);\n\n if (findContainerIndex(target, e) >= 0) {\n return;\n }\n\n if (valueOrHandler(config.clickOutsideDeactivates, e)) {\n return;\n }\n\n if (valueOrHandler(config.allowOutsideClick, e)) {\n return;\n }\n\n e.preventDefault();\n e.stopImmediatePropagation();\n };\n\n //\n // EVENT LISTENERS\n //\n\n const addListeners = function () {\n if (!state.active) {\n return;\n }\n\n // There can be only one listening focus trap at a time\n activeFocusTraps.activateTrap(trapStack, trap);\n\n // Delay ensures that the focused element doesn't capture the event\n // that caused the focus trap activation.\n state.delayInitialFocusTimer = config.delayInitialFocus\n ? delay(function () {\n tryFocus(getInitialFocusNode());\n })\n : tryFocus(getInitialFocusNode());\n\n doc.addEventListener('focusin', checkFocusIn, true);\n doc.addEventListener('mousedown', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('touchstart', checkPointerDown, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('click', checkClick, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('keydown', checkTabKey, {\n capture: true,\n passive: false,\n });\n doc.addEventListener('keydown', checkEscapeKey);\n\n return trap;\n };\n\n const removeListeners = function () {\n if (!state.active) {\n return;\n }\n\n doc.removeEventListener('focusin', checkFocusIn, true);\n doc.removeEventListener('mousedown', checkPointerDown, true);\n doc.removeEventListener('touchstart', checkPointerDown, true);\n doc.removeEventListener('click', checkClick, true);\n doc.removeEventListener('keydown', checkTabKey, true);\n doc.removeEventListener('keydown', checkEscapeKey);\n\n return trap;\n };\n\n //\n // MUTATION OBSERVER\n //\n\n const checkDomRemoval = function (mutations) {\n const isFocusedNodeRemoved = mutations.some(function (mutation) {\n const removedNodes = Array.from(mutation.removedNodes);\n return removedNodes.some(function (node) {\n return node === state.mostRecentlyFocusedNode;\n });\n });\n\n // If the currently focused is removed then browsers will move focus to the\n // element. If this happens, try to move focus back into the trap.\n if (isFocusedNodeRemoved) {\n tryFocus(getInitialFocusNode());\n }\n };\n\n // Use MutationObserver - if supported - to detect if focused node is removed\n // from the DOM.\n const mutationObserver =\n typeof window !== 'undefined' && 'MutationObserver' in window\n ? new MutationObserver(checkDomRemoval)\n : undefined;\n\n const updateObservedNodes = function () {\n if (!mutationObserver) {\n return;\n }\n\n mutationObserver.disconnect();\n if (state.active && !state.paused) {\n state.containers.map(function (container) {\n mutationObserver.observe(container, {\n subtree: true,\n childList: true,\n });\n });\n }\n };\n\n //\n // TRAP DEFINITION\n //\n\n trap = {\n get active() {\n return state.active;\n },\n\n get paused() {\n return state.paused;\n },\n\n activate(activateOptions) {\n if (state.active) {\n return this;\n }\n\n const onActivate = getOption(activateOptions, 'onActivate');\n const onPostActivate = getOption(activateOptions, 'onPostActivate');\n const checkCanFocusTrap = getOption(activateOptions, 'checkCanFocusTrap');\n\n if (!checkCanFocusTrap) {\n updateTabbableNodes();\n }\n\n state.active = true;\n state.paused = false;\n state.nodeFocusedBeforeActivation = doc.activeElement;\n\n onActivate?.();\n\n const finishActivation = () => {\n if (checkCanFocusTrap) {\n updateTabbableNodes();\n }\n addListeners();\n updateObservedNodes();\n onPostActivate?.();\n };\n\n if (checkCanFocusTrap) {\n checkCanFocusTrap(state.containers.concat()).then(\n finishActivation,\n finishActivation\n );\n return this;\n }\n\n finishActivation();\n return this;\n },\n\n deactivate(deactivateOptions) {\n if (!state.active) {\n return this;\n }\n\n const options = {\n onDeactivate: config.onDeactivate,\n onPostDeactivate: config.onPostDeactivate,\n checkCanReturnFocus: config.checkCanReturnFocus,\n ...deactivateOptions,\n };\n\n clearTimeout(state.delayInitialFocusTimer); // noop if undefined\n state.delayInitialFocusTimer = undefined;\n\n removeListeners();\n state.active = false;\n state.paused = false;\n updateObservedNodes();\n\n activeFocusTraps.deactivateTrap(trapStack, trap);\n\n const onDeactivate = getOption(options, 'onDeactivate');\n const onPostDeactivate = getOption(options, 'onPostDeactivate');\n const checkCanReturnFocus = getOption(options, 'checkCanReturnFocus');\n const returnFocus = getOption(\n options,\n 'returnFocus',\n 'returnFocusOnDeactivate'\n );\n\n onDeactivate?.();\n\n const finishDeactivation = () => {\n delay(() => {\n if (returnFocus) {\n tryFocus(getReturnFocusNode(state.nodeFocusedBeforeActivation));\n }\n onPostDeactivate?.();\n });\n };\n\n if (returnFocus && checkCanReturnFocus) {\n checkCanReturnFocus(\n getReturnFocusNode(state.nodeFocusedBeforeActivation)\n ).then(finishDeactivation, finishDeactivation);\n return this;\n }\n\n finishDeactivation();\n return this;\n },\n\n pause(pauseOptions) {\n if (state.paused || !state.active) {\n return this;\n }\n\n const onPause = getOption(pauseOptions, 'onPause');\n const onPostPause = getOption(pauseOptions, 'onPostPause');\n\n state.paused = true;\n onPause?.();\n\n removeListeners();\n updateObservedNodes();\n\n onPostPause?.();\n return this;\n },\n\n unpause(unpauseOptions) {\n if (!state.paused || !state.active) {\n return this;\n }\n\n const onUnpause = getOption(unpauseOptions, 'onUnpause');\n const onPostUnpause = getOption(unpauseOptions, 'onPostUnpause');\n\n state.paused = false;\n onUnpause?.();\n\n updateTabbableNodes();\n addListeners();\n updateObservedNodes();\n\n onPostUnpause?.();\n return this;\n },\n\n updateContainerElements(containerElements) {\n const elementsAsArray = [].concat(containerElements).filter(Boolean);\n\n state.containers = elementsAsArray.map((element) =>\n typeof element === 'string' ? doc.querySelector(element) : element\n );\n\n if (state.active) {\n updateTabbableNodes();\n }\n\n updateObservedNodes();\n\n return this;\n },\n };\n\n // initialize container elements\n trap.updateContainerElements(elements);\n\n return trap;\n};\n\nexport { createFocusTrap };\n"],"names":["activeFocusTraps","trapStack","trap","length","activeTrap","pause","trapIndex","indexOf","splice","push","unpause","isTabEvent","e","key","keyCode","isKeyForward","shiftKey","isKeyBackward","delay","fn","setTimeout","findIndex","arr","idx","every","value","i","valueOrHandler","_len","arguments","params","Array","_key","apply","getActualTarget","event","target","shadowRoot","composedPath","internalTrapStack","elements","userOptions","doc","document","config","_objectSpread","returnFocusOnDeactivate","escapeDeactivates","delayInitialFocus","state","containers","containerGroups","tabbableGroups","nodeFocusedBeforeActivation","mostRecentlyFocusedNode","active","paused","delayInitialFocusTimer","undefined","recentNavEvent","getOption","configOverrideOptions","optionName","configOptionName","findContainerIndex","element","_ref","container","tabbableNodes","contains","includes","find","node","getNodeForOption","_ref2","_ref2$hasFallback","hasFallback","_ref2$params","optionValue","_toConsumableArray","Error","concat","querySelector","err","message","getInitialFocusNode","isFocusable","tabbableOptions","activeElement","firstTabbableGroup","firstTabbableNode","updateTabbableNodes","map","tabbable","focusableNodes","focusable","lastTabbableNode","firstDomTabbableNode","isTabbable","lastDomTabbableNode","slice","reverse","posTabIndexesFound","getTabIndex","nextTabbableNode","forward","nodeIdx","el","filter","group","g","getActiveElement","tryFocus","focus","preventScroll","tagName","toLowerCase","select","isSelectableInput","getReturnFocusNode","previousActiveElement","findNextNavNode","_ref3","_ref3$isBackward","isBackward","destinationNode","containerIndex","containerGroup","startOfGroupIndex","_ref4","destinationGroupIndex","destinationGroup","lastOfGroupIndex","_ref5","checkPointerDown","clickOutsideDeactivates","deactivate","returnFocus","allowOutsideClick","preventDefault","checkFocusIn","targetContained","Document","nextNode","stopImmediatePropagation","navAcrossContainers","mruContainerIdx","mruTabIdx","some","n","checkTabKey","checkKeyNav","checkEscapeKey","checkClick","addListeners","addEventListener","capture","passive","removeListeners","removeEventListener","mutationObserver","window","MutationObserver","mutations","mutation","from","removedNodes","updateObservedNodes","disconnect","observe","subtree","childList","activate","activateOptions","this","onActivate","onPostActivate","checkCanFocusTrap","finishActivation","then","deactivateOptions","options","onDeactivate","onPostDeactivate","checkCanReturnFocus","clearTimeout","finishDeactivation","pauseOptions","onPause","onPostPause","unpauseOptions","onUnpause","onPostUnpause","updateContainerElements","containerElements","elementsAsArray","Boolean"],"mappings":"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"} \ No newline at end of file -- 2.20.1