"@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"
"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": {
"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",
}
},
"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"
}
},
}
},
"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": {
}
},
"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": {
"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",
"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": "*"
"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": {
"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",
}
},
"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": {
}
},
"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"
}
},
"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"
},
}
},
"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": {
}
},
"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",
}
},
"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"
}
},
"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": {
}
},
"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": {
"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",
}
},
"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": {
"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"
}
}
},
"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",
"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",
"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",
"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"
"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",
"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",
}
},
"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",
"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",
"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",
-{"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<HTMLElement>}\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<HTMLElement>, // empty if none\n // focusableNodes: Array<HTMLElement>, // 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 // <body> 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<HTMLElement>}\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<HTMLElement>, // empty if none\n // focusableNodes: Array<HTMLElement>, // 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 // <body> 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