This run took 65 seconds.
From a2c2907929f919d4db79c4f4a987bdbd9a5bcc79 Mon Sep 17 00:00:00 2001 From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org> Date: Wed, 24 Jul 2024 04:28:02 +0000 Subject: [PATCH] build: Updating dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit composer: * mediawiki/minus-x: 1.1.1 → 1.1.3 * php-parallel-lint/php-parallel-lint: 1.3.2 → 1.4.0 npm: * eslint-config-wikimedia: 0.26.0 → 0.28.2 * grunt-banana-checker: 0.11.1 → 0.13.0 * grunt-stylelint: 0.19.0 → 0.20.1 * stylelint-config-wikimedia: 0.16.1 → 0.17.2 Change-Id: Iaef420a5dc5d163dc24adc2629516f52e519bf9a --- composer.json | 4 +- package-lock.json | 3689 ++++++++--------- package.json | 8 +- resources/VersionCheck.js | 6 +- resources/VisualData.js | 14 +- resources/VisualDataContentBlock.js | 10 +- resources/VisualDataDatatables.js | 2 +- resources/VisualDataFormField.js | 45 +- resources/VisualDataForms.js | 116 +- resources/VisualDataFunctions.js | 14 +- resources/VisualDataGeolocation.js | 14 +- resources/VisualDataInputConfig.js | 30 +- resources/VisualDataProcessModel.js | 5 +- resources/VisualDataSchemas.js | 58 +- resources/VisualDataUpload.js | 30 +- resources/VisualDataWindowManager.js | 1 - .../VisualDataButtonMultiselectWidget.js | 2 +- resources/Widgets/VisualDataDropdownWidget.js | 2 +- resources/Widgets/VisualDataMaptiler.js | 10 +- .../VisualDataMenuTagSearchMultiselect.js | 10 +- resources/Widgets/VisualDataTinyMCE.js | 1 - resources/Widgets/VisualDataVisualEditor.js | 8 +- resources/Widgets/VisualDataintlTelInput.js | 12 +- 23 files changed, 1855 insertions(+), 2236 deletions(-) diff --git a/composer.json b/composer.json index 65986e5..8a49490 100644 --- a/composer.json +++ b/composer.json @@ -1,9 +1,9 @@ { "require-dev": { "mediawiki/mediawiki-codesniffer": "43.0.0", - "mediawiki/minus-x": "1.1.1", + "mediawiki/minus-x": "1.1.3", "php-parallel-lint/php-console-highlighter": "1.0.0", - "php-parallel-lint/php-parallel-lint": "1.3.2" + "php-parallel-lint/php-parallel-lint": "1.4.0" }, "scripts": { "test": [ diff --git a/package-lock.json b/package-lock.json index 7fffced..cfbd8cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,12 +6,12 @@ "": { "name": "VisualData", "devDependencies": { - "eslint-config-wikimedia": "0.26.0", + "eslint-config-wikimedia": "0.28.2", "grunt": "1.6.1", - "grunt-banana-checker": "0.11.1", + "grunt-banana-checker": "0.13.0", "grunt-eslint": "24.3.0", - "grunt-stylelint": "0.19.0", - "stylelint-config-wikimedia": "0.16.1" + "grunt-stylelint": "0.20.1", + "stylelint-config-wikimedia": "0.17.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -24,107 +24,37 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -202,9 +132,9 @@ } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.4.0.tgz", - "integrity": "sha512-/PPLr2g5PAUCKAPEbfyk6/baZA+WJHQtUhPkoCQMpyRE8I0lXrG1QFRN8e5s3ZYxM8d/g5BZc6lH3s8Op7/VEg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -220,13 +150,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.2" + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.2.tgz", - "integrity": "sha512-wCDUe/MAw7npAHFLyW3QjSyLA66S5QFaV1jIXlNQvdJ8RzXDSgALa49eWcUO6P55ARQaz0TsDdAgdRgkXFYY8g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -243,9 +173,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.6.tgz", - "integrity": "sha512-R6AKl9vaU0It7D7TR2lQn0pre5aQfdeqHRePlaRCY8rHL3l9eVlNRpsEVDKFi/zAjzv68CxH2M5kqbhPFPKjvw==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -261,14 +191,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.4.0", - "@csstools/css-tokenizer": "^2.2.2" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/selector-specificity": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz", - "integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", + "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", "dev": true, "funding": [ { @@ -287,18 +217,31 @@ "postcss-selector-parser": "^6.0.13" } }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.37.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz", - "integrity": "sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==", + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz", + "integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==", "dev": true, "dependencies": { - "comment-parser": "1.3.1", + "@types/eslint": "^8.56.5", + "@types/estree": "^1.0.5", + "@typescript-eslint/types": "^7.2.0", + "comment-parser": "1.4.1", "esquery": "^1.5.0", "jsdoc-type-pratt-parser": "~4.0.0" }, "engines": { - "node": "^14 || ^16 || ^17 || ^18 || ^19 || ^20" + "node": ">=16" } }, "node_modules/@eslint-community/eslint-utils": { @@ -317,9 +260,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -349,22 +292,23 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -385,9 +329,10 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true }, "node_modules/@mdn/browser-compat-data": { @@ -431,6 +376,68 @@ "node": ">= 8" } }, + "node_modules/@stylistic/stylelint-config": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-1.0.1.tgz", + "integrity": "sha512-JgFP88HZEyo34k9RpWVdcQJtLPrMxYE58IO3qypXhmvE/NmZohj+xjDtQ8UfaarnYsLecnldw57/GHum07Ctdw==", + "dev": true, + "dependencies": { + "@stylistic/stylelint-plugin": "^2.0.0" + }, + "engines": { + "node": "^18.12 || >=20.9" + }, + "peerDependencies": { + "stylelint": "^16.0.2" + } + }, + "node_modules/@stylistic/stylelint-plugin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-2.0.0.tgz", + "integrity": "sha512-dHKuT6PGd1WGZLOTuozAM7GdQzdmlmnFXYzvV1jYJXXpcCpV/OJ3+n8TXpMkoOeKHpJydY43EOoZTO1W/FOA4Q==", + "dev": true, + "dependencies": { + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5", + "is-plain-object": "^5.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "style-search": "^0.1.0", + "stylelint": "^16.0.2" + }, + "engines": { + "node": "^18.12 || >=20.9" + }, + "peerDependencies": { + "stylelint": "^16.0.2" + } + }, + "node_modules/@stylistic/stylelint-plugin/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.11", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", + "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -443,35 +450,23 @@ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, - "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true - }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", + "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -479,12 +474,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", + "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -492,21 +487,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", + "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -518,65 +514,63 @@ } } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@typescript-eslint/utils": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", + "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.17.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/typescript-estree": "7.17.0" + }, "engines": { - "node": ">=4.0" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", + "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "7.17.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -596,9 +590,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -708,12 +702,12 @@ } }, "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/ast-metadata-inferer": { @@ -763,21 +757,21 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "funding": [ { @@ -794,10 +788,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -807,9 +801,9 @@ } }, "node_modules/browserslist-config-wikimedia": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.1.tgz", - "integrity": "sha512-jf532fUf/gaxiKdHgGCQUT552P5up3RpG+CzLixOQBJ5FwDmYQSRLYHCFUA9s3KMOHh4P3xVp+NUaGNxvtoT9g==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz", + "integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==", "dev": true }, "node_modules/builtin-modules": { @@ -824,15 +818,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -842,52 +827,10 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", "dev": true, "funding": [ { @@ -921,9 +864,9 @@ } }, "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", "dev": true, "funding": [ { @@ -957,14 +900,17 @@ } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/color-convert": { @@ -1001,9 +947,9 @@ } }, "node_modules/comment-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", - "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true, "engines": { "node": ">= 12.0.0" @@ -1015,6 +961,19 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -1022,15 +981,15 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -1062,51 +1021,14 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true, "engines": { "node": ">=12 || >=16" } }, - "node_modules/css-rule-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha512-qiio/Zkr8I19jh/XuzEkK8OKDQRTrEYaRyIHy4Bwh/tPUe0w8GcQs7r6x24Yc9lT+FbnZFYULxEIXCmaymguUQ==", - "dev": true, - "dependencies": { - "css-tokenize": "^1.0.1", - "duplexer2": "0.0.2", - "ldjson-stream": "^1.2.1", - "through2": "^0.6.3" - }, - "bin": { - "css-rule-stream": "index.js" - } - }, - "node_modules/css-rule-stream/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/css-rule-stream/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, "node_modules/css-tokenize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", @@ -1152,9 +1074,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -1168,65 +1090,19 @@ } } }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=0.10.0" } }, "node_modules/dir-glob": { @@ -1254,27 +1130,26 @@ } }, "node_modules/doiuse": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-4.4.1.tgz", - "integrity": "sha512-TUpr1/YNg20IB09tZmwGCTsTQoxj8jUld/hUZprZMj8vj0VpAJySXEWCr8WMvqvgzk0/kG/FxeSMGKode4UjPg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-6.0.2.tgz", + "integrity": "sha512-eBTs23NOX+EAYPr4RbCR6J4DRW/TML3uMo37y0X1whlkersDYFCk9HmCl09KX98cis22VKsV1QaxfVNauJ3NBw==", "dev": true, "dependencies": { - "browserslist": "^4.16.1", - "caniuse-lite": "^1.0.30001179", - "css-rule-stream": "^1.1.0", - "duplexer2": "0.0.2", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001487", + "css-tokenize": "^1.0.1", + "duplexify": "^4.1.2", "ldjson-stream": "^1.2.1", "multimatch": "^5.0.0", - "postcss": "^8.2.4", - "source-map": "^0.7.3", - "through2": "^4.0.2", - "yargs": "^16.2.0" + "postcss": "^8.4.21", + "source-map": "^0.7.4", + "yargs": "^17.7.1" }, "bin": { - "doiuse": "cli.js" + "doiuse": "bin/cli.js" }, "engines": { - "node": ">=10" + "node": ">=16" } }, "node_modules/dom-serializer": { @@ -1332,19 +1207,45 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "readable-stream": "~1.1.9" + "safe-buffer": "~5.2.0" } }, "node_modules/electron-to-chromium": { - "version": "1.4.615", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", - "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", + "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", "dev": true }, "node_modules/emoji-regex": { @@ -1353,6 +1254,28 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -1365,6 +1288,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1375,9 +1307,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -1396,16 +1328,16 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1451,10 +1383,13 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", - "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, + "dependencies": { + "semver": "^7.5.4" + }, "engines": { "node": ">=12" }, @@ -1463,28 +1398,28 @@ } }, "node_modules/eslint-config-wikimedia": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.26.0.tgz", - "integrity": "sha512-TAXTySls9k3oWs754rIjlcd9PBLvYeMvjqjiuU8u4gweu0UDgBJGslf+zcvVNXEooAtyLZdENjrzDDjG8ssS7Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz", + "integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==", "dev": true, "dependencies": { - "browserslist-config-wikimedia": "^0.5.1", - "eslint": "^8.53.0", + "browserslist-config-wikimedia": "^0.7.0", + "eslint": "^8.57.0", "eslint-plugin-compat": "^4.2.0", - "eslint-plugin-es-x": "^7.3.0", - "eslint-plugin-jest": "^27.6.0", - "eslint-plugin-jsdoc": "^42.0.0", - "eslint-plugin-json-es": "^1.5.7", - "eslint-plugin-mediawiki": "^0.5.0", - "eslint-plugin-mocha": "^10.2.0", - "eslint-plugin-n": "^16.0.1", - "eslint-plugin-no-jquery": "^2.7.0", - "eslint-plugin-qunit": "^7.3.4", + "eslint-plugin-es-x": "^7.6.0", + "eslint-plugin-jest": "^28.5.0", + "eslint-plugin-jsdoc": "48.2.5", + "eslint-plugin-json-es": "^1.6.0", + "eslint-plugin-mediawiki": "^0.7.0", + "eslint-plugin-mocha": "^10.4.3", + "eslint-plugin-n": "^17.7.0", + "eslint-plugin-no-jquery": "^3.0.1", + "eslint-plugin-qunit": "^8.1.1", "eslint-plugin-security": "^1.7.1", - "eslint-plugin-unicorn": "^47.0.0", - "eslint-plugin-vue": "^9.18.1", - "eslint-plugin-wdio": "^7.19.4", - "eslint-plugin-yml": "^1.10.0" + "eslint-plugin-unicorn": "^53.0.0", + "eslint-plugin-vue": "^9.26.0", + "eslint-plugin-wdio": "^8.24.12", + "eslint-plugin-yml": "^1.14.0" } }, "node_modules/eslint-plugin-compat": { @@ -1509,39 +1444,40 @@ } }, "node_modules/eslint-plugin-es-x": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", - "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0", - "eslint-compat-utils": "^0.1.2" + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, "peerDependencies": { "eslint": ">=8" } }, "node_modules/eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "version": "28.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", + "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "^5.10.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0", - "eslint": "^7.0.0 || ^8.0.0", + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", "jest": "*" }, "peerDependenciesMeta": { @@ -1554,31 +1490,32 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "42.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-42.0.0.tgz", - "integrity": "sha512-qXYr45G8atPKowZbIOdmABukMzu9IMjAlj6j5Fe0iuUItznWSXUDiBj57ejXcbt8bkPrg83333nuz+cqGKFgcQ==", + "version": "48.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.5.tgz", + "integrity": "sha512-ZeTfKV474W1N9niWfawpwsXGu+ZoMXu4417eBROX31d7ZuOk8zyG66SO77DpJ2+A9Wa2scw/jRqBPnnQo7VbcQ==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.37.0", + "@es-joy/jsdoccomment": "~0.43.0", "are-docs-informative": "^0.0.2", - "comment-parser": "1.3.1", + "comment-parser": "1.4.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.5.0", - "semver": "^7.3.8", - "spdx-expression-parse": "^3.0.1" + "is-builtin-module": "^3.2.1", + "semver": "^7.6.1", + "spdx-expression-parse": "^4.0.0" }, "engines": { - "node": "^14 || ^16 || ^17 || ^18 || ^19" + "node": ">=18" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-json-es": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz", - "integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.6.0.tgz", + "integrity": "sha512-xVn6hufGQH1Aa+yqOhQ43Cq28GuitTcMpQh+uaUh27U2qnVLBrvkN+2xQSnv6zpdLEPS35JCNhq4kvhR+PQCgw==", "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0", @@ -1589,125 +1526,116 @@ } }, "node_modules/eslint-plugin-mediawiki": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.5.0.tgz", - "integrity": "sha512-rjkHFyv3VDan/dmu7YpD1Rl9h64NOlz4mqqesRN316R+571+ymmb6lXVOdNMbT8H1iPhmtHc+nijVLVkn7pYDw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.7.0.tgz", + "integrity": "sha512-1Y2nsFDPp96xOZCB5ivZAgqYe9i6w2u64VoCIaAzPyZnd/2h8VQR3CtD+u4Yk/KrpbKq9AAJjrs5LS8VAz6KOA==", "dev": true, "dependencies": { - "eslint-plugin-vue": "^8.7.1", + "eslint-plugin-vue": "^9.23.0", "upath": "^2.0.1" }, "peerDependencies": { "eslint": ">=5.0.0" } }, - "node_modules/eslint-plugin-mediawiki/node_modules/eslint-plugin-vue": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz", - "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==", + "node_modules/eslint-plugin-mocha": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.3.tgz", + "integrity": "sha512-emc4TVjq5Ht0/upR+psftuz6IBG5q279p+1dSRDeHf+NS9aaerBi3lXKo1SEzwC29hFIW21gO89CEWSvRsi8IQ==", "dev": true, "dependencies": { "eslint-utils": "^3.0.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.0.1", - "postcss-selector-parser": "^6.0.9", - "semver": "^7.3.5", - "vue-eslint-parser": "^8.0.1" + "globals": "^13.24.0", + "rambda": "^7.4.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-mediawiki/node_modules/vue-eslint-parser": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", - "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==", + "node_modules/eslint-plugin-n": { + "version": "17.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.9.0.tgz", + "integrity": "sha512-CPSaXDXdrT4nsrOrO4mT4VB6FMUkoySRkHWuuJJHVqsIEjIeZgMY1H7AzSwPbDScikBmLN82KeM1u7ixV7PzGg==", "dev": true, "dependencies": { - "debug": "^4.3.2", - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.5" + "@eslint-community/eslint-utils": "^4.4.0", + "enhanced-resolve": "^5.17.0", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^15.0.0", + "ignore": "^5.2.4", + "minimatch": "^9.0.0", + "semver": "^7.5.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://opencollective.com/eslint" }, "peerDependencies": { - "eslint": ">=6.0.0" + "eslint": ">=8.23.0" } }, - "node_modules/eslint-plugin-mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.2.0.tgz", - "integrity": "sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ==", + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "eslint-utils": "^3.0.0", - "rambda": "^7.4.0" - }, + "balanced-match": "^1.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.8.0.tgz", + "integrity": "sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=18" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-n": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.5.0.tgz", - "integrity": "sha512-Hw02Bj1QrZIlKyj471Tb1jSReTl4ghIMHGuBGiMVmw+s0jOPbI4CBuYpGbZr+tdQ+VAvSK6FDSta3J4ib/SKHQ==", + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.5.0", - "get-tsconfig": "^4.7.0", - "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", - "semver": "^7.5.3" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/eslint-plugin-no-jquery": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz", - "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz", + "integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==", "dev": true, "peerDependencies": { - "eslint": ">=2.3.0" + "eslint": ">=8.0.0" } }, "node_modules/eslint-plugin-qunit": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.3.4.tgz", - "integrity": "sha512-EbDM0zJerH9zVdUswMJpcFF7wrrpvsGuYfNexUpa5hZkkdFhaFcX+yD+RSK4Nrauw4psMGlcqeWUMhaVo+Manw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-8.1.1.tgz", + "integrity": "sha512-j3xhiAf2Wvr8Dfwl5T6tlJ+F55vqYE9ZdAHUOTzq1lGerYrXzOS46RvK4SSWug2D8sl3ZYr2lA4/hgVXgLloxw==", "dev": true, "dependencies": { "eslint-utils": "^3.0.0", "requireindex": "^1.2.0" }, "engines": { - "node": "12.x || 14.x || >=16.0.0" + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, "node_modules/eslint-plugin-security": { @@ -1720,76 +1648,141 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "47.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz", - "integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==", + "version": "53.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-53.0.0.tgz", + "integrity": "sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-validator-identifier": "^7.24.5", "@eslint-community/eslint-utils": "^4.4.0", - "ci-info": "^3.8.0", + "@eslint/eslintrc": "^3.0.2", + "ci-info": "^4.0.0", "clean-regexp": "^1.0.0", + "core-js-compat": "^3.37.0", "esquery": "^1.5.0", "indent-string": "^4.0.0", "is-builtin-module": "^3.2.1", "jsesc": "^3.0.2", - "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.24", + "regexp-tree": "^0.1.27", "regjsparser": "^0.10.0", - "safe-regex": "^2.1.1", - "semver": "^7.3.8", + "semver": "^7.6.1", "strip-indent": "^3.0.0" }, "engines": { - "node": ">=16" + "node": ">=18.18" }, "funding": { "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=8.38.0" + "eslint": ">=8.56.0" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint-plugin-vue": { - "version": "9.19.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz", - "integrity": "sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", + "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.13", - "semver": "^7.5.4", - "vue-eslint-parser": "^9.3.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", + "vue-eslint-parser": "^9.4.3", "xml-name-validator": "^4.0.0" }, "engines": { "node": "^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-wdio": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.25.3.tgz", - "integrity": "sha512-2zbYwV14Md9FNlyhaIILVGPB6w4bu2eJdOTywDUs2Qy4ebcQNwrxB0qCaf7Rm4O+T0Ir+tdYHYBBfbDocSLKng==", + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-8.37.0.tgz", + "integrity": "sha512-X217zXxSqj1IPWu3bxN7D/xEUmNk7Jg5lBf2JwYH3mCogaqL2tnHZnwt0EQ5D9oEejfEl2+4zqHSzhXq1X7F2A==", "dev": true, "engines": { - "node": ">=12.0.0" + "node": "^16.13 || >=18" } }, "node_modules/eslint-plugin-yml": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.11.0.tgz", - "integrity": "sha512-NBZP1NDGy0u38pY5ieix75jxS9GNOJy9xd4gQa0rU4gWbfEsVhKDwuFaQ6RJpDbv6Lq5TtcAZS/YnAc0oeRw0w==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.14.0.tgz", + "integrity": "sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==", "dev": true, "dependencies": { "debug": "^4.3.2", - "eslint-compat-utils": "^0.1.1", + "eslint-compat-utils": "^0.5.0", "lodash": "^4.17.21", "natural-compare": "^1.4.0", "yaml-eslint-parser": "^1.2.1" @@ -2010,6 +2003,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -2041,9 +2040,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -2123,9 +2122,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/for-in": { @@ -2174,9 +2173,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", + "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -2309,6 +2308,12 @@ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -2343,15 +2348,18 @@ } }, "node_modules/grunt-banana-checker": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.1.tgz", - "integrity": "sha512-CF0h/TXaX9sbF2yIz+fUfJc4Zvms7XGYQ7ZYMD5+vv0LMZzSFf7JSHXDaBEs72nQWw4r4ap5fOW3baAliW+0bQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.13.0.tgz", + "integrity": "sha512-uAUKILcP69Q4OJHHV2wzxqVaoXB8G3Uh/XuSJLn0Bk/9+WiUY/Q4+OX7dUhrPPeDZPtoGh37qqJLVvZlDTUecg==", "dev": true, + "dependencies": { + "chalk": "4.1.2" + }, "bin": { "banana-checker": "src/cli.js" }, "engines": { - "node": ">=8" + "node": ">=16" } }, "node_modules/grunt-cli": { @@ -2461,18 +2469,18 @@ } }, "node_modules/grunt-stylelint": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.19.0.tgz", - "integrity": "sha512-td+OvkfQ/2bYXNTBAlnpXmfa6sddLSloXRp1zoUONcMScbvEq5S3GSkOZKpCjK90WSjTYR0L7WYFcMVd1TXd+w==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz", + "integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==", "dev": true, "dependencies": { "chalk": "^4.1.2" }, "engines": { - "node": ">=16" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "15.x" + "stylelint": "16.x" } }, "node_modules/grunt/node_modules/argparse": { @@ -2515,15 +2523,6 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2616,9 +2615,9 @@ } }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -2640,15 +2639,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -2789,15 +2779,6 @@ "node": ">=8" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2946,11 +2927,10 @@ } }, "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true, - "peer": true + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", + "dev": true }, "node_modules/ldjson-stream": { "version": "1.2.1", @@ -2962,28 +2942,6 @@ "through2": "^0.6.1" } }, - "node_modules/ldjson-stream/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ldjson-stream/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3076,18 +3034,6 @@ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -3109,18 +3055,6 @@ "node": ">=0.10.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -3138,100 +3072,12 @@ "dev": true }, "node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3247,12 +3093,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3280,20 +3126,6 @@ "node": "*" } }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3319,15 +3151,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -3662,9 +3485,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -3689,9 +3512,9 @@ } }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "dev": true, "funding": [ { @@ -3709,17 +3532,17 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-html": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.5.0.tgz", - "integrity": "sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.6.0.tgz", + "integrity": "sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==", "dev": true, "dependencies": { "htmlparser2": "^8.0.0", @@ -3732,11 +3555,27 @@ } }, "node_modules/postcss-html/node_modules/js-tokens": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.2.tgz", - "integrity": "sha512-Olnt+V7xYdvGze9YTbGFZIfQXuGV4R3nQwwl8BrtgaPE/wq8UFpUHWuTNc05saowhSr1ZO6tx+V6RjE9D5YQog==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", + "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", "dev": true }, + "node_modules/postcss-html/node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, "node_modules/postcss-less": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz", @@ -3749,12 +3588,6 @@ "postcss": "^8.3.5" } }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, "node_modules/postcss-resolve-nested-selector": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", @@ -3762,25 +3595,35 @@ "dev": true }, "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", + "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=18.0" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.31" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -3834,18 +3677,6 @@ } ] }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/rambda": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", @@ -3978,49 +3809,6 @@ "node": ">= 0.10" } }, - "node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/regexp-tree": { "version": "0.1.27", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", @@ -4210,13 +3998,10 @@ "dev": true }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -4293,9 +4078,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4311,16 +4096,26 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", @@ -4328,9 +4123,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, "node_modules/split2": { @@ -4342,34 +4137,18 @@ "through2": "~0.6.1" } }, - "node_modules/split2/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/split2/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true + }, "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -4433,105 +4212,141 @@ "dev": true }, "node_modules/stylelint": { - "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.7.0.tgz", + "integrity": "sha512-Q1ATiXlz+wYr37a7TGsfvqYn2nSR3T/isw3IWlZQzFzCNoACHuGBb6xBplZXz56/uDRJHIygxjh7jbV/8isewA==", "dev": true, - "peer": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13", + "@csstools/selector-specificity": "^3.1.1", + "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.1", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", + "debug": "^4.3.5", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^7.0.0", + "file-entry-cache": "^9.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^5.3.1", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.34.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", + "meow": "^13.2.0", + "micromatch": "^4.0.7", "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.28", + "picocolors": "^1.0.1", + "postcss": "^8.4.39", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.1.0", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", + "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "bin": { "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" + "node": ">=18.12.0" } }, "node_modules/stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz", + "integrity": "sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==", "dev": true, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.10.0" + "stylelint": "^16.0.0" } }, "node_modules/stylelint-config-wikimedia": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.16.1.tgz", - "integrity": "sha512-FDVUyDyCBap2o2HAeJqIobdVdSTur5HFX5FymoKrzfMIYWxIV/55lTpyL1PR71TfVMaroDXJrIftLFW9mXKFhQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz", + "integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==", "dev": true, "dependencies": { - "browserslist-config-wikimedia": "0.5.0", - "postcss-html": "1.5.0", + "@stylistic/stylelint-config": "1.0.1", + "@stylistic/stylelint-plugin": "2.0.0", + "browserslist-config-wikimedia": "0.7.0", + "postcss-html": "1.6.0", "postcss-less": "6.0.0", - "stylelint": "15.10.1", - "stylelint-config-recommended": "13.0.0", - "stylelint-no-unsupported-browser-features": "6.1.0", - "stylelint-stylistic": "0.4.3" + "stylelint": "16.2.0", + "stylelint-config-recommended": "14.0.0", + "stylelint-no-unsupported-browser-features": "8.0.1" }, "peerDependencies": { "postcss-less": "^6.0.0" } }, + "node_modules/stylelint-config-wikimedia/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/stylelint-config-wikimedia/node_modules/balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, - "node_modules/stylelint-config-wikimedia/node_modules/browserslist-config-wikimedia": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz", - "integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==", - "dev": true + "node_modules/stylelint-config-wikimedia/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/stylelint-config-wikimedia/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } }, "node_modules/stylelint-config-wikimedia/node_modules/global-modules": { "version": "2.0.0", @@ -4569,9 +4384,9 @@ } }, "node_modules/stylelint-config-wikimedia/node_modules/known-css-properties": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", - "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true }, "node_modules/stylelint-config-wikimedia/node_modules/resolve-from": { @@ -4583,48 +4398,61 @@ "node": ">=8" } }, + "node_modules/stylelint-config-wikimedia/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/stylelint-config-wikimedia/node_modules/stylelint": { - "version": "15.10.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.1.tgz", - "integrity": "sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.0.tgz", + "integrity": "sha512-gwqU5AkIb52wrAzzn+359S3NIJDMl02TXLUaV2tzA/L6jUdpTwNt+MCxHlc8+Hb2bUHlYVo92YeSIryF2gJthA==", "dev": true, "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.0", - "@csstools/css-tokenizer": "^2.1.1", - "@csstools/media-query-list-parser": "^2.1.2", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^2.5.0", + "@csstools/css-tokenizer": "^2.2.3", + "@csstools/media-query-list-parser": "^2.1.7", + "@csstools/selector-specificity": "^3.0.1", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.1.0", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.1", "css-tree": "^2.3.1", "debug": "^4.3.4", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^5.3.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.27.0", + "known-css-properties": "^0.29.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", + "meow": "^13.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.24", + "postcss": "^8.4.33", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.0.15", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", + "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", "table": "^6.8.1", @@ -4634,7 +4462,7 @@ "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "funding": { "type": "opencollective", @@ -4654,66 +4482,62 @@ } }, "node_modules/stylelint-no-unsupported-browser-features": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz", - "integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.0.1.tgz", + "integrity": "sha512-tc8Xn5DaqJhxTmbA4H8gZbYdAz027NfuSZv5+cVieQb7BtBrF/1/iKYdpcGwXPl3GtqkQrisiXuGqKkKnzWcLw==", "dev": true, "dependencies": { - "doiuse": "^4.4.1", - "lodash": "^4.17.15", - "postcss": "^8.4.16" + "doiuse": "^6.0.2", + "postcss": "^8.4.32" }, "engines": { - "node": ">=14" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^14.0.0||^15.0.0" + "stylelint": "^16.0.2" } }, - "node_modules/stylelint-stylistic": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/stylelint-stylistic/-/stylelint-stylistic-0.4.3.tgz", - "integrity": "sha512-WphmneK3MRrm5ixvRPWy7+c9+EQUh0FPvNMXW/N9VD85vyqtpxUejpD+mxubVVht0fRgidcqBxtW3s3tU2Ujhw==", - "deprecated": "This package has been deprecated in favor of @stylistic/stylelint-plugin", - "dev": true, - "dependencies": { - "is-plain-object": "^5.0.0", - "postcss": "^8.4.21", - "postcss-media-query-parser": "^0.2.3", - "postcss-value-parser": "^4.2.0", - "style-search": "^0.1.0" - }, - "peerDependencies": { - "stylelint": "^15.0.0" - } - }, - "node_modules/stylelint-stylistic/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/stylelint/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", - "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz", + "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==", "dev": true, - "peer": true, "dependencies": { - "flat-cache": "^3.2.0" + "flat-cache": "^5.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=18" + } + }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "dev": true, + "dependencies": { + "flatted": "^3.3.1", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=18" } }, "node_modules/stylelint/node_modules/global-modules": { @@ -4721,7 +4545,6 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "peer": true, "dependencies": { "global-prefix": "^3.0.0" }, @@ -4734,7 +4557,6 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "peer": true, "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -4749,7 +4571,6 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -4759,17 +4580,30 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "peer": true, "engines": { "node": ">=8" } }, + "node_modules/stylelint/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/stylelint/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "peer": true, "dependencies": { "isexe": "^2.0.0" }, @@ -4821,9 +4655,9 @@ "dev": true }, "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -4837,15 +4671,15 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -4858,6 +4692,15 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4865,35 +4708,25 @@ "dev": true }, "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "dependencies": { - "readable-stream": "3" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, "node_modules/to-regex-range": { @@ -4908,37 +4741,16 @@ "node": ">=8.0" } }, - "node_modules/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, "engines": { - "node": ">= 6" + "node": ">=16" }, "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "typescript": ">=4.2.0" } }, "node_modules/type-check": { @@ -4966,9 +4778,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "peer": true, "bin": { @@ -5012,9 +4824,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -5031,8 +4843,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -5078,10 +4890,20 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/vue-eslint-parser": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", - "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -5180,25 +5002,22 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } }, "node_modules/yaml-eslint-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", - "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.3.tgz", + "integrity": "sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==", "dev": true, "dependencies": { "eslint-visitor-keys": "^3.0.0", @@ -5213,30 +5032,30 @@ } }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yocto-queue": { @@ -5253,95 +5072,38 @@ } }, "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" } }, "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true }, "@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "dependencies": { "ansi-styles": { @@ -5403,39 +5165,48 @@ } }, "@csstools/css-parser-algorithms": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.4.0.tgz", - "integrity": "sha512-/PPLr2g5PAUCKAPEbfyk6/baZA+WJHQtUhPkoCQMpyRE8I0lXrG1QFRN8e5s3ZYxM8d/g5BZc6lH3s8Op7/VEg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "requires": {} }, "@csstools/css-tokenizer": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.2.tgz", - "integrity": "sha512-wCDUe/MAw7npAHFLyW3QjSyLA66S5QFaV1jIXlNQvdJ8RzXDSgALa49eWcUO6P55ARQaz0TsDdAgdRgkXFYY8g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true }, "@csstools/media-query-list-parser": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.6.tgz", - "integrity": "sha512-R6AKl9vaU0It7D7TR2lQn0pre5aQfdeqHRePlaRCY8rHL3l9eVlNRpsEVDKFi/zAjzv68CxH2M5kqbhPFPKjvw==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "requires": {} }, "@csstools/selector-specificity": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz", - "integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", + "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", "dev": true, "requires": {} }, + "@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true + }, "@es-joy/jsdoccomment": { - "version": "0.37.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz", - "integrity": "sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==", + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz", + "integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==", "dev": true, "requires": { - "comment-parser": "1.3.1", + "@types/eslint": "^8.56.5", + "@types/estree": "^1.0.5", + "@typescript-eslint/types": "^7.2.0", + "comment-parser": "1.4.1", "esquery": "^1.5.0", "jsdoc-type-pratt-parser": "~4.0.0" } @@ -5450,9 +5221,9 @@ } }, "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true }, "@eslint/eslintrc": { @@ -5473,19 +5244,19 @@ } }, "@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" } }, @@ -5496,9 +5267,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "@mdn/browser-compat-data": { @@ -5533,6 +5304,55 @@ "fastq": "^1.6.0" } }, + "@stylistic/stylelint-config": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-1.0.1.tgz", + "integrity": "sha512-JgFP88HZEyo34k9RpWVdcQJtLPrMxYE58IO3qypXhmvE/NmZohj+xjDtQ8UfaarnYsLecnldw57/GHum07Ctdw==", + "dev": true, + "requires": { + "@stylistic/stylelint-plugin": "^2.0.0" + } + }, + "@stylistic/stylelint-plugin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-2.0.0.tgz", + "integrity": "sha512-dHKuT6PGd1WGZLOTuozAM7GdQzdmlmnFXYzvV1jYJXXpcCpV/OJ3+n8TXpMkoOeKHpJydY43EOoZTO1W/FOA4Q==", + "dev": true, + "requires": { + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5", + "is-plain-object": "^5.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "style-search": "^0.1.0", + "stylelint": "^16.0.2" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "@types/eslint": { + "version": "8.56.11", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", + "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -5545,97 +5365,84 @@ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, - "@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, "@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, - "@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true - }, "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", + "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0" } }, "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", + "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", + "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "balanced-match": "^1.0.0" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } } } }, + "@typescript-eslint/utils": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", + "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.17.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/typescript-estree": "7.17.0" + } + }, "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", + "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "7.17.0", + "eslint-visitor-keys": "^3.4.3" } }, "@ungap/structured-clone": { @@ -5651,9 +5458,9 @@ "dev": true }, "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true }, "acorn-jsx": { @@ -5727,9 +5534,9 @@ "dev": true }, "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true }, "ast-metadata-inferer": { @@ -5776,30 +5583,30 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.1.0" } }, "browserslist-config-wikimedia": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.1.tgz", - "integrity": "sha512-jf532fUf/gaxiKdHgGCQUT552P5up3RpG+CzLixOQBJ5FwDmYQSRLYHCFUA9s3KMOHh4P3xVp+NUaGNxvtoT9g==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz", + "integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==", "dev": true }, "builtin-modules": { @@ -5808,51 +5615,16 @@ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "requires": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "dependencies": { - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - } - } - }, "caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", "dev": true }, "chalk": { @@ -5866,9 +5638,9 @@ } }, "ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", "dev": true }, "clean-regexp": { @@ -5889,13 +5661,13 @@ } }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, @@ -5927,9 +5699,9 @@ "dev": true }, "comment-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", - "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true }, "concat-map": { @@ -5938,6 +5710,15 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dev": true, + "requires": { + "browserslist": "^4.23.0" + } + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -5945,15 +5726,15 @@ "dev": true }, "cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "requires": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" } }, "cross-spawn": { @@ -5968,47 +5749,11 @@ } }, "css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true }, - "css-rule-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha512-qiio/Zkr8I19jh/XuzEkK8OKDQRTrEYaRyIHy4Bwh/tPUe0w8GcQs7r6x24Yc9lT+FbnZFYULxEIXCmaymguUQ==", - "dev": true, - "requires": { - "css-tokenize": "^1.0.1", - "duplexer2": "0.0.2", - "ldjson-stream": "^1.2.1", - "through2": "^0.6.3" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, "css-tokenize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", @@ -6042,44 +5787,14 @@ "dev": true }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "requires": { "ms": "2.1.2" } }, - "decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -6111,21 +5826,20 @@ } }, "doiuse": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-4.4.1.tgz", - "integrity": "sha512-TUpr1/YNg20IB09tZmwGCTsTQoxj8jUld/hUZprZMj8vj0VpAJySXEWCr8WMvqvgzk0/kG/FxeSMGKode4UjPg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-6.0.2.tgz", + "integrity": "sha512-eBTs23NOX+EAYPr4RbCR6J4DRW/TML3uMo37y0X1whlkersDYFCk9HmCl09KX98cis22VKsV1QaxfVNauJ3NBw==", "dev": true, "requires": { - "browserslist": "^4.16.1", - "caniuse-lite": "^1.0.30001179", - "css-rule-stream": "^1.1.0", - "duplexer2": "0.0.2", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001487", + "css-tokenize": "^1.0.1", + "duplexify": "^4.1.2", "ldjson-stream": "^1.2.1", "multimatch": "^5.0.0", - "postcss": "^8.2.4", - "source-map": "^0.7.3", - "through2": "^4.0.2", - "yargs": "^16.2.0" + "postcss": "^8.4.21", + "source-map": "^0.7.4", + "yargs": "^17.7.1" } }, "dom-serializer": { @@ -6165,19 +5879,44 @@ "domhandler": "^5.0.3" } }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", + "duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", "dev": true, "requires": { - "readable-stream": "~1.1.9" + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } } }, "electron-to-chromium": { - "version": "1.4.615", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", - "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", + "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", "dev": true }, "emoji-regex": { @@ -6186,12 +5925,37 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6202,9 +5966,9 @@ } }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true }, "escape-string-regexp": { @@ -6214,16 +5978,16 @@ "dev": true }, "eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -6260,35 +6024,37 @@ } }, "eslint-compat-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", - "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, - "requires": {} + "requires": { + "semver": "^7.5.4" + } }, "eslint-config-wikimedia": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.26.0.tgz", - "integrity": "sha512-TAXTySls9k3oWs754rIjlcd9PBLvYeMvjqjiuU8u4gweu0UDgBJGslf+zcvVNXEooAtyLZdENjrzDDjG8ssS7Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz", + "integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==", "dev": true, "requires": { - "browserslist-config-wikimedia": "^0.5.1", - "eslint": "^8.53.0", + "browserslist-config-wikimedia": "^0.7.0", + "eslint": "^8.57.0", "eslint-plugin-compat": "^4.2.0", - "eslint-plugin-es-x": "^7.3.0", - "eslint-plugin-jest": "^27.6.0", - "eslint-plugin-jsdoc": "^42.0.0", - "eslint-plugin-json-es": "^1.5.7", - "eslint-plugin-mediawiki": "^0.5.0", - "eslint-plugin-mocha": "^10.2.0", - "eslint-plugin-n": "^16.0.1", - "eslint-plugin-no-jquery": "^2.7.0", - "eslint-plugin-qunit": "^7.3.4", + "eslint-plugin-es-x": "^7.6.0", + "eslint-plugin-jest": "^28.5.0", + "eslint-plugin-jsdoc": "48.2.5", + "eslint-plugin-json-es": "^1.6.0", + "eslint-plugin-mediawiki": "^0.7.0", + "eslint-plugin-mocha": "^10.4.3", + "eslint-plugin-n": "^17.7.0", + "eslint-plugin-no-jquery": "^3.0.1", + "eslint-plugin-qunit": "^8.1.1", "eslint-plugin-security": "^1.7.1", - "eslint-plugin-unicorn": "^47.0.0", - "eslint-plugin-vue": "^9.18.1", - "eslint-plugin-wdio": "^7.19.4", - "eslint-plugin-yml": "^1.10.0" + "eslint-plugin-unicorn": "^53.0.0", + "eslint-plugin-vue": "^9.26.0", + "eslint-plugin-wdio": "^8.24.12", + "eslint-plugin-yml": "^1.14.0" } }, "eslint-plugin-compat": { @@ -6307,45 +6073,46 @@ } }, "eslint-plugin-es-x": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", - "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0", - "eslint-compat-utils": "^0.1.2" + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" } }, "eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "version": "28.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", + "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", "dev": true, "requires": { - "@typescript-eslint/utils": "^5.10.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" } }, "eslint-plugin-jsdoc": { - "version": "42.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-42.0.0.tgz", - "integrity": "sha512-qXYr45G8atPKowZbIOdmABukMzu9IMjAlj6j5Fe0iuUItznWSXUDiBj57ejXcbt8bkPrg83333nuz+cqGKFgcQ==", + "version": "48.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.5.tgz", + "integrity": "sha512-ZeTfKV474W1N9niWfawpwsXGu+ZoMXu4417eBROX31d7ZuOk8zyG66SO77DpJ2+A9Wa2scw/jRqBPnnQo7VbcQ==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "~0.37.0", + "@es-joy/jsdoccomment": "~0.43.0", "are-docs-informative": "^0.0.2", - "comment-parser": "1.3.1", + "comment-parser": "1.4.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.5.0", - "semver": "^7.3.8", - "spdx-expression-parse": "^3.0.1" + "is-builtin-module": "^3.2.1", + "semver": "^7.6.1", + "spdx-expression-parse": "^4.0.0" } }, "eslint-plugin-json-es": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz", - "integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.6.0.tgz", + "integrity": "sha512-xVn6hufGQH1Aa+yqOhQ43Cq28GuitTcMpQh+uaUh27U2qnVLBrvkN+2xQSnv6zpdLEPS35JCNhq4kvhR+PQCgw==", "dev": true, "requires": { "eslint-visitor-keys": "^3.3.0", @@ -6353,85 +6120,79 @@ } }, "eslint-plugin-mediawiki": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.5.0.tgz", - "integrity": "sha512-rjkHFyv3VDan/dmu7YpD1Rl9h64NOlz4mqqesRN316R+571+ymmb6lXVOdNMbT8H1iPhmtHc+nijVLVkn7pYDw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.7.0.tgz", + "integrity": "sha512-1Y2nsFDPp96xOZCB5ivZAgqYe9i6w2u64VoCIaAzPyZnd/2h8VQR3CtD+u4Yk/KrpbKq9AAJjrs5LS8VAz6KOA==", "dev": true, "requires": { - "eslint-plugin-vue": "^8.7.1", + "eslint-plugin-vue": "^9.23.0", "upath": "^2.0.1" - }, - "dependencies": { - "eslint-plugin-vue": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz", - "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==", - "dev": true, - "requires": { - "eslint-utils": "^3.0.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.0.1", - "postcss-selector-parser": "^6.0.9", - "semver": "^7.3.5", - "vue-eslint-parser": "^8.0.1" - } - }, - "vue-eslint-parser": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", - "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==", - "dev": true, - "requires": { - "debug": "^4.3.2", - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.5" - } - } } }, "eslint-plugin-mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.2.0.tgz", - "integrity": "sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.3.tgz", + "integrity": "sha512-emc4TVjq5Ht0/upR+psftuz6IBG5q279p+1dSRDeHf+NS9aaerBi3lXKo1SEzwC29hFIW21gO89CEWSvRsi8IQ==", "dev": true, "requires": { "eslint-utils": "^3.0.0", + "globals": "^13.24.0", "rambda": "^7.4.0" } }, "eslint-plugin-n": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.5.0.tgz", - "integrity": "sha512-Hw02Bj1QrZIlKyj471Tb1jSReTl4ghIMHGuBGiMVmw+s0jOPbI4CBuYpGbZr+tdQ+VAvSK6FDSta3J4ib/SKHQ==", + "version": "17.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.9.0.tgz", + "integrity": "sha512-CPSaXDXdrT4nsrOrO4mT4VB6FMUkoySRkHWuuJJHVqsIEjIeZgMY1H7AzSwPbDScikBmLN82KeM1u7ixV7PzGg==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", + "enhanced-resolve": "^5.17.0", "eslint-plugin-es-x": "^7.5.0", "get-tsconfig": "^4.7.0", + "globals": "^15.0.0", "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", + "minimatch": "^9.0.0", "semver": "^7.5.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "globals": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.8.0.tgz", + "integrity": "sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "eslint-plugin-no-jquery": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz", - "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz", + "integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==", "dev": true, "requires": {} }, "eslint-plugin-qunit": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.3.4.tgz", - "integrity": "sha512-EbDM0zJerH9zVdUswMJpcFF7wrrpvsGuYfNexUpa5hZkkdFhaFcX+yD+RSK4Nrauw4psMGlcqeWUMhaVo+Manw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-8.1.1.tgz", + "integrity": "sha512-j3xhiAf2Wvr8Dfwl5T6tlJ+F55vqYE9ZdAHUOTzq1lGerYrXzOS46RvK4SSWug2D8sl3ZYr2lA4/hgVXgLloxw==", "dev": true, "requires": { "eslint-utils": "^3.0.0", @@ -6448,58 +6209,101 @@ } }, "eslint-plugin-unicorn": { - "version": "47.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz", - "integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==", + "version": "53.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-53.0.0.tgz", + "integrity": "sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-validator-identifier": "^7.24.5", "@eslint-community/eslint-utils": "^4.4.0", - "ci-info": "^3.8.0", + "@eslint/eslintrc": "^3.0.2", + "ci-info": "^4.0.0", "clean-regexp": "^1.0.0", + "core-js-compat": "^3.37.0", "esquery": "^1.5.0", "indent-string": "^4.0.0", "is-builtin-module": "^3.2.1", "jsesc": "^3.0.2", - "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.24", + "regexp-tree": "^0.1.27", "regjsparser": "^0.10.0", - "safe-regex": "^2.1.1", - "semver": "^7.3.8", + "semver": "^7.6.1", "strip-indent": "^3.0.0" + }, + "dependencies": { + "@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true + }, + "espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "requires": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + } + }, + "globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true + } } }, "eslint-plugin-vue": { - "version": "9.19.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz", - "integrity": "sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", + "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.13", - "semver": "^7.5.4", - "vue-eslint-parser": "^9.3.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", + "vue-eslint-parser": "^9.4.3", "xml-name-validator": "^4.0.0" } }, "eslint-plugin-wdio": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.25.3.tgz", - "integrity": "sha512-2zbYwV14Md9FNlyhaIILVGPB6w4bu2eJdOTywDUs2Qy4ebcQNwrxB0qCaf7Rm4O+T0Ir+tdYHYBBfbDocSLKng==", + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-8.37.0.tgz", + "integrity": "sha512-X217zXxSqj1IPWu3bxN7D/xEUmNk7Jg5lBf2JwYH3mCogaqL2tnHZnwt0EQ5D9oEejfEl2+4zqHSzhXq1X7F2A==", "dev": true }, "eslint-plugin-yml": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.11.0.tgz", - "integrity": "sha512-NBZP1NDGy0u38pY5ieix75jxS9GNOJy9xd4gQa0rU4gWbfEsVhKDwuFaQ6RJpDbv6Lq5TtcAZS/YnAc0oeRw0w==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.14.0.tgz", + "integrity": "sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==", "dev": true, "requires": { "debug": "^4.3.2", - "eslint-compat-utils": "^0.1.1", + "eslint-compat-utils": "^0.5.0", "lodash": "^4.17.21", "natural-compare": "^1.4.0", "yaml-eslint-parser": "^1.2.1" @@ -6654,6 +6458,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, "fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -6679,9 +6489,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -6740,9 +6550,9 @@ } }, "flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "for-in": { @@ -6779,9 +6589,9 @@ "dev": true }, "get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", + "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", "dev": true, "requires": { "resolve-pkg-maps": "^1.0.0" @@ -6880,6 +6690,12 @@ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -6944,10 +6760,13 @@ } }, "grunt-banana-checker": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.1.tgz", - "integrity": "sha512-CF0h/TXaX9sbF2yIz+fUfJc4Zvms7XGYQ7ZYMD5+vv0LMZzSFf7JSHXDaBEs72nQWw4r4ap5fOW3baAliW+0bQ==", - "dev": true + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.13.0.tgz", + "integrity": "sha512-uAUKILcP69Q4OJHHV2wzxqVaoXB8G3Uh/XuSJLn0Bk/9+WiUY/Q4+OX7dUhrPPeDZPtoGh37qqJLVvZlDTUecg==", + "dev": true, + "requires": { + "chalk": "4.1.2" + } }, "grunt-cli": { "version": "1.4.3", @@ -7028,19 +6847,13 @@ } }, "grunt-stylelint": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.19.0.tgz", - "integrity": "sha512-td+OvkfQ/2bYXNTBAlnpXmfa6sddLSloXRp1zoUONcMScbvEq5S3GSkOZKpCjK90WSjTYR0L7WYFcMVd1TXd+w==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz", + "integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==", "dev": true, "requires": { "chalk": "^4.1.2" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true + } }, "has-flag": { "version": "4.0.0", @@ -7106,9 +6919,9 @@ } }, "ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true }, "import-fresh": { @@ -7121,12 +6934,6 @@ "resolve-from": "^4.0.0" } }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -7234,12 +7041,6 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -7358,11 +7159,10 @@ "dev": true }, "known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true, - "peer": true + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", + "dev": true }, "ldjson-stream": { "version": "1.2.1", @@ -7372,30 +7172,6 @@ "requires": { "split2": "^0.2.1", "through2": "^0.6.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } } }, "levn": { @@ -7477,15 +7253,6 @@ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -7501,12 +7268,6 @@ "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, "mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -7520,76 +7281,10 @@ "dev": true }, "meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - } - }, - "read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "requires": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - } - }, - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - } - } + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true }, "merge2": { "version": "1.4.1", @@ -7598,12 +7293,12 @@ "dev": true }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -7622,17 +7317,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7650,14 +7334,6 @@ "array-union": "^2.1.0", "arrify": "^2.0.1", "minimatch": "^3.0.4" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } } }, "nanoid": { @@ -7906,9 +7582,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "picomatch": { @@ -7924,20 +7600,20 @@ "dev": true }, "postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "dev": true, "requires": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" } }, "postcss-html": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.5.0.tgz", - "integrity": "sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.6.0.tgz", + "integrity": "sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==", "dev": true, "requires": { "htmlparser2": "^8.0.0", @@ -7947,10 +7623,17 @@ }, "dependencies": { "js-tokens": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.2.tgz", - "integrity": "sha512-Olnt+V7xYdvGze9YTbGFZIfQXuGV4R3nQwwl8BrtgaPE/wq8UFpUHWuTNc05saowhSr1ZO6tx+V6RjE9D5YQog==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", + "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", "dev": true + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "requires": {} } } }, @@ -7961,12 +7644,6 @@ "dev": true, "requires": {} }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, "postcss-resolve-nested-selector": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", @@ -7974,16 +7651,16 @@ "dev": true }, "postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", + "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", "dev": true, "requires": {} }, "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -8014,12 +7691,6 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, "rambda": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", @@ -8123,33 +7794,6 @@ "resolve": "^1.9.0" } }, - "redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "requires": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true - }, - "strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "requires": { - "min-indent": "^1.0.1" - } - } - } - }, "regexp-tree": { "version": "0.1.27", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", @@ -8270,13 +7914,10 @@ "dev": true }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true }, "shebang-command": { "version": "2.0.0", @@ -8323,9 +7964,9 @@ "dev": true }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true }, "spdx-correct": { @@ -8336,18 +7977,30 @@ "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + } } }, "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -8355,9 +8008,9 @@ } }, "spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, "split2": { @@ -8367,30 +8020,6 @@ "dev": true, "requires": { "through2": "~0.6.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } } }, "sprintf-js": { @@ -8399,6 +8028,12 @@ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true }, + "stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -8447,69 +8082,81 @@ "dev": true }, "stylelint": { - "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.7.0.tgz", + "integrity": "sha512-Q1ATiXlz+wYr37a7TGsfvqYn2nSR3T/isw3IWlZQzFzCNoACHuGBb6xBplZXz56/uDRJHIygxjh7jbV/8isewA==", "dev": true, - "peer": true, "requires": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13", + "@csstools/selector-specificity": "^3.1.1", + "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.1", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", + "debug": "^4.3.5", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^7.0.0", + "file-entry-cache": "^9.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^5.3.1", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.34.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", + "meow": "^13.2.0", + "micromatch": "^4.0.7", "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.28", + "picocolors": "^1.0.1", + "postcss": "^8.4.39", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.1.0", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", + "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, "balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "peer": true + "dev": true }, "file-entry-cache": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", - "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz", + "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==", + "dev": true, + "requires": { + "flat-cache": "^5.0.0" + } + }, + "flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", "dev": true, - "peer": true, "requires": { - "flat-cache": "^3.2.0" + "flatted": "^3.3.1", + "keyv": "^4.5.4" } }, "global-modules": { @@ -8517,7 +8164,6 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "peer": true, "requires": { "global-prefix": "^3.0.0" } @@ -8527,7 +8173,6 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "peer": true, "requires": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -8538,22 +8183,28 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "peer": true + "dev": true }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "peer": true + "requires": { + "ansi-regex": "^6.0.1" + } }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "peer": true, "requires": { "isexe": "^2.0.0" } @@ -8561,38 +8212,58 @@ } }, "stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz", + "integrity": "sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==", "dev": true, "requires": {} }, "stylelint-config-wikimedia": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.16.1.tgz", - "integrity": "sha512-FDVUyDyCBap2o2HAeJqIobdVdSTur5HFX5FymoKrzfMIYWxIV/55lTpyL1PR71TfVMaroDXJrIftLFW9mXKFhQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz", + "integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==", "dev": true, "requires": { - "browserslist-config-wikimedia": "0.5.0", - "postcss-html": "1.5.0", + "@stylistic/stylelint-config": "1.0.1", + "@stylistic/stylelint-plugin": "2.0.0", + "browserslist-config-wikimedia": "0.7.0", + "postcss-html": "1.6.0", "postcss-less": "6.0.0", - "stylelint": "15.10.1", - "stylelint-config-recommended": "13.0.0", - "stylelint-no-unsupported-browser-features": "6.1.0", - "stylelint-stylistic": "0.4.3" + "stylelint": "16.2.0", + "stylelint-config-recommended": "14.0.0", + "stylelint-no-unsupported-browser-features": "8.0.1" }, "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, "balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, - "browserslist-config-wikimedia": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz", - "integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==", - "dev": true + "file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "requires": { + "flat-cache": "^4.0.0" + } + }, + "flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + } }, "global-modules": { "version": "2.0.0", @@ -8621,9 +8292,9 @@ "dev": true }, "known-css-properties": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", - "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true }, "resolve-from": { @@ -8632,48 +8303,55 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, "stylelint": { - "version": "15.10.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.1.tgz", - "integrity": "sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.0.tgz", + "integrity": "sha512-gwqU5AkIb52wrAzzn+359S3NIJDMl02TXLUaV2tzA/L6jUdpTwNt+MCxHlc8+Hb2bUHlYVo92YeSIryF2gJthA==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^2.3.0", - "@csstools/css-tokenizer": "^2.1.1", - "@csstools/media-query-list-parser": "^2.1.2", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^2.5.0", + "@csstools/css-tokenizer": "^2.2.3", + "@csstools/media-query-list-parser": "^2.1.7", + "@csstools/selector-specificity": "^3.0.1", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.1.0", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.1", "css-tree": "^2.3.1", "debug": "^4.3.4", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^5.3.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.27.0", + "known-css-properties": "^0.29.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", + "meow": "^13.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.24", + "postcss": "^8.4.33", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.0.15", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", + "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", "table": "^6.8.1", @@ -8692,35 +8370,13 @@ } }, "stylelint-no-unsupported-browser-features": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz", - "integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==", - "dev": true, - "requires": { - "doiuse": "^4.4.1", - "lodash": "^4.17.15", - "postcss": "^8.4.16" - } - }, - "stylelint-stylistic": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/stylelint-stylistic/-/stylelint-stylistic-0.4.3.tgz", - "integrity": "sha512-WphmneK3MRrm5ixvRPWy7+c9+EQUh0FPvNMXW/N9VD85vyqtpxUejpD+mxubVVht0fRgidcqBxtW3s3tU2Ujhw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.0.1.tgz", + "integrity": "sha512-tc8Xn5DaqJhxTmbA4H8gZbYdAz027NfuSZv5+cVieQb7BtBrF/1/iKYdpcGwXPl3GtqkQrisiXuGqKkKnzWcLw==", "dev": true, "requires": { - "is-plain-object": "^5.0.0", - "postcss": "^8.4.21", - "postcss-media-query-parser": "^0.2.3", - "postcss-value-parser": "^4.2.0", - "style-search": "^0.1.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } + "doiuse": "^6.0.2", + "postcss": "^8.4.32" } }, "supports-color": { @@ -8755,9 +8411,9 @@ "dev": true }, "table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -8768,15 +8424,15 @@ }, "dependencies": { "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" } }, "json-schema-traverse": { @@ -8787,6 +8443,12 @@ } } }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -8794,32 +8456,25 @@ "dev": true }, "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "requires": { - "readable-stream": "3" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" }, "dependencies": { "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "requires": { - "safe-buffer": "~5.2.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } } } @@ -8833,26 +8488,12 @@ "is-number": "^7.0.0" } }, - "trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, - "requires": { - "tslib": "^1.8.1" - } + "requires": {} }, "type-check": { "version": "0.4.0", @@ -8870,9 +8511,9 @@ "dev": true }, "typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "peer": true }, @@ -8899,13 +8540,13 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" } }, "uri-js": { @@ -8940,12 +8581,24 @@ "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + } } }, "vue-eslint-parser": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", - "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", "dev": true, "requires": { "debug": "^4.3.4", @@ -9011,22 +8664,16 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true }, "yaml-eslint-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", - "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.3.tgz", + "integrity": "sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==", "dev": true, "requires": { "eslint-visitor-keys": "^3.0.0", @@ -9035,24 +8682,24 @@ } }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true }, "yocto-queue": { diff --git a/package.json b/package.json index 8815f3b..38d3bd4 100644 --- a/package.json +++ b/package.json @@ -5,11 +5,11 @@ "test": "grunt test" }, "devDependencies": { - "eslint-config-wikimedia": "0.26.0", + "eslint-config-wikimedia": "0.28.2", "grunt": "1.6.1", - "grunt-banana-checker": "0.11.1", + "grunt-banana-checker": "0.13.0", "grunt-eslint": "24.3.0", - "grunt-stylelint": "0.19.0", - "stylelint-config-wikimedia": "0.16.1" + "grunt-stylelint": "0.20.1", + "stylelint-config-wikimedia": "0.17.2" } } diff --git a/resources/VersionCheck.js b/resources/VersionCheck.js index 06d625f..a337266 100644 --- a/resources/VersionCheck.js +++ b/resources/VersionCheck.js @@ -18,7 +18,7 @@ * @author thomas-topway-it <support@topway.it> * @copyright Copyright © 2021-2023, https://wikisphere.org */ -$( function () { +$( () => { if ( !mw.config.get( 'visualdata-show-notice-outdated-version' ) || mw.cookie.get( 'visualdata-check-latest-version' ) @@ -27,12 +27,12 @@ $( function () { } // display every 3 days - mw.loader.using( 'mediawiki.api', function () { + mw.loader.using( 'mediawiki.api', () => { new mw.Api() .postWithToken( 'csrf', { action: 'visualdata-check-latest-version' } ) - .done( function ( res ) { + .done( ( res ) => { if ( 'visualdata-check-latest-version' in res ) { if ( res[ 'visualdata-check-latest-version' ].result === 2 ) { var messageWidget = new OO.ui.MessageWidget( { diff --git a/resources/VisualData.js b/resources/VisualData.js index 196c94d..b81c428 100644 --- a/resources/VisualData.js +++ b/resources/VisualData.js @@ -41,7 +41,7 @@ VisualData = ( function () { }; new mw.Api() .postWithToken( 'csrf', payload ) - .done( function ( res ) { + .done( ( res ) => { if ( payload.action in res ) { var data = res[ payload.action ]; for ( var i in data ) { @@ -53,7 +53,7 @@ VisualData = ( function () { reject(); } } ) - .fail( function ( res ) { + .fail( ( res ) => { // eslint-disable-next-line no-console console.error( 'visualdata-load-data error', res ); reject( res ); @@ -74,7 +74,7 @@ VisualData = ( function () { return new Promise( ( resolve, reject ) => { new mw.Api() .postWithToken( 'csrf', payload ) - .done( function ( res ) { + .done( ( res ) => { if ( payload.action in res ) { var thisSchemas = JSON.parse( res[ payload.action ].schemas ); for ( var i in thisSchemas ) { @@ -86,7 +86,7 @@ VisualData = ( function () { } } } ) - .fail( function ( res ) { + .fail( ( res ) => { // eslint-disable-next-line no-console console.error( 'visualdata-get-schemas', res ); reject( res ); @@ -107,7 +107,7 @@ VisualData = ( function () { switch ( action ) { case 'update': - Schemas = jQuery.extend( Schemas, data.schemas ); + Schemas = Object.assign( Schemas, data.schemas ); break; case 'delete': @@ -117,13 +117,13 @@ VisualData = ( function () { break; case 'create': - Schemas = jQuery.extend( Schemas, data.schemas ); + Schemas = Object.assign( Schemas, data.schemas ); Schemas = VisualDataFunctions.sortObjectByKeys( Schemas ); break; case 'rename': delete Schemas[ data[ 'previous-label' ] ]; - Schemas = jQuery.extend( Schemas, data.schemas ); + Schemas = Object.assign( Schemas, data.schemas ); Schemas = VisualDataFunctions.sortObjectByKeys( Schemas ); break; } diff --git a/resources/VisualDataContentBlock.js b/resources/VisualDataContentBlock.js index 09c4f26..16ebe19 100644 --- a/resources/VisualDataContentBlock.js +++ b/resources/VisualDataContentBlock.js @@ -97,9 +97,7 @@ const VisualDataContentBlock = function ( phpConfig, windowManager ) { } ) ); - items = items.filter( function ( x ) { - return !( 'items' in x ) || x.items.length; - } ); + items = items.filter( ( x ) => !( 'items' in x ) || x.items.length ); this.isEmpty = !items.length; @@ -185,11 +183,11 @@ const VisualDataContentBlock = function ( phpConfig, windowManager ) { VisualDataFunctions.renameObjectKey( ParentObj, CurrentKey, objName ); - ParentObj[ objName ] = $.extend( ParentObj[ objName ], { wiki: obj } ); + ParentObj[ objName ] = Object.assign( ParentObj[ objName ], { wiki: obj } ); Callback(); - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); } @@ -200,7 +198,7 @@ const VisualDataContentBlock = function ( phpConfig, windowManager ) { ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; diff --git a/resources/VisualDataDatatables.js b/resources/VisualDataDatatables.js index 302b635..5e30678 100644 --- a/resources/VisualDataDatatables.js +++ b/resources/VisualDataDatatables.js @@ -39,7 +39,7 @@ const VisualDataDatatables = function () { }; }; -$( function () { +$( () => { var visualdataDatatables = new VisualDataDatatables(); $( '.visualdata.datatable' ).each( function () { diff --git a/resources/VisualDataFormField.js b/resources/VisualDataFormField.js index 85fc035..d98989c 100644 --- a/resources/VisualDataFormField.js +++ b/resources/VisualDataFormField.js @@ -91,8 +91,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { // remove options inputs and lookup widgets // except multiselect return ret.filter( - ( x ) => - ( VisualDataFunctions.lookupInputs.indexOf( x ) === -1 && + ( x ) => ( VisualDataFunctions.lookupInputs.indexOf( x ) === -1 && VisualDataFunctions.optionsInputs.indexOf( x ) === -1 ) || VisualDataFunctions.isMultiselect( x ) ); @@ -248,7 +247,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { return false; } - selectOptionsFrom.on( 'change', function ( value ) { + selectOptionsFrom.on( 'change', ( value ) => { fieldOptionsValues.toggle( value === 'options-values' ); fieldWikilist.toggle( value === 'options-wikilist' ); fieldOptionsLabelFormula.toggle( value !== 'options-askquery' ); @@ -308,7 +307,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { layout.toggle( visibleItems ); // eslint-disable-next-line no-unused-vars - availableInputsInput.on( 'change', function ( value ) { + availableInputsInput.on( 'change', ( value ) => { onSelectAvailableInputs(); } ); @@ -480,12 +479,12 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { layout.toggle( visibleItems ); // eslint-disable-next-line no-unused-vars - availableInputsInput.on( 'change', function ( value ) { + availableInputsInput.on( 'change', ( value ) => { onSelectAvailableInputs(); } ); // eslint-disable-next-line no-unused-vars - selectOptionsFrom.on( 'change', function ( value ) { + selectOptionsFrom.on( 'change', ( value ) => { onSelectAvailableInputs(); } ); @@ -567,10 +566,8 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { // ------------------ show-if ----------------- - var otherFields = Object.keys( ParentObj ).filter( ( x ) => { - return ( x !== CurrentKey && ParentObj[ x ].wiki.type === 'property' && - ParentObj[ x ].wiki[ 'multiple-items' ] === false ); - } ); + var otherFields = Object.keys( ParentObj ).filter( ( x ) => ( x !== CurrentKey && ParentObj[ x ].wiki.type === 'property' && + ParentObj[ x ].wiki[ 'multiple-items' ] === false ) ); var showifFieldInput = new OO.ui.DropdownInputWidget( { options: VisualDataFunctions.createDropDownOptions( otherFields, { key: 'value' } ), @@ -598,7 +595,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { value: getPropertyValue( 'showif-value' ) } ); - showifConditionInput.on( 'change', function ( value ) { + showifConditionInput.on( 'change', ( value ) => { showifValueInput.toggle( value !== '!null' ); updateModelShowif( getPropertyValue( 'visibility' ) === 'condition' ); } ); @@ -730,7 +727,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { } ); // eslint-disable-next-line no-unused-vars - SMWpropertiesInput.on( 'change', function ( value ) { + SMWpropertiesInput.on( 'change', ( value ) => { redrawAvailableInputs(); } ); @@ -805,7 +802,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { } ); // eslint-disable-next-line no-unused-vars - jsonSchemaFormatInput.on( 'change', function ( value ) { + jsonSchemaFormatInput.on( 'change', ( value ) => { redrawAvailableInputs(); } ); @@ -822,7 +819,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { items.push( fieldjsonSchemaFormatInput ); - jsonSchemaInput.on( 'change', function ( value ) { + jsonSchemaInput.on( 'change', ( value ) => { switch ( value ) { case 'string': fieldjsonSchemaFormatInput.toggle( true ); @@ -845,7 +842,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { ); if ( Config.SMW ) { - propertyModelInput.on( 'change', function ( value ) { + propertyModelInput.on( 'change', ( value ) => { switch ( value ) { case 'smw-property': fieldSMWpropertiesInput.toggle( true ); @@ -916,7 +913,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { value: availableInputsValue } ); - availableInputsInput.on( 'change', function ( value ) { + availableInputsInput.on( 'change', ( value ) => { var thisDefaultValueInput = getDefaultValueInput(); // eslint-disable-next-line no-use-before-define @@ -943,7 +940,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { defaultInputConfig ); - inputConfigButton.on( 'click', function () { + inputConfigButton.on( 'click', () => { var dataType = null; if ( Config.SMW ) { var SMWproperty = getPropertyValue( 'SMW-property' ); @@ -987,7 +984,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { align: 'top' } ); - multipleItemsInput.on( 'change', function ( value ) { + multipleItemsInput.on( 'change', ( value ) => { redrawAvailableInputs(); layoutParentSchema.toggle( value ); fieldRequiredInput.toggle( !value ); @@ -1125,7 +1122,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { updateModelShowif( value === 'condition' ); } - visibilityInput.on( 'change', function ( value ) { + visibilityInput.on( 'change', ( value ) => { onVisibilityInputChange( value ); } ); @@ -1164,15 +1161,13 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { Model.default = thisDefaultValueInput; } - items = items.filter( function ( x ) { - return !( 'items' in x ) || x.items.length; - } ); + items = items.filter( ( x ) => !( 'items' in x ) || x.items.length ); this.isEmpty = !items.length; this.fieldset.addItems( items ); - setTimeout( function () { + setTimeout( () => { VisualDataFunctions.removeNbspFromLayoutHeader( '#visualdata-processDialogEditField' ); @@ -1302,7 +1297,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { Callback(); - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); } @@ -1313,7 +1308,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; diff --git a/resources/VisualDataForms.js b/resources/VisualDataForms.js index 7456234..102e297 100644 --- a/resources/VisualDataForms.js +++ b/resources/VisualDataForms.js @@ -22,8 +22,6 @@ /* eslint-disable no-tabs */ /* eslint-disable no-unused-vars */ /* eslint-disable no-underscore-dangle */ -/* eslint-disable es-x/no-async-functions */ -/* eslint-disable compat/compat */ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager ) { var Model = {}; @@ -67,7 +65,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // @FIXME destroy/reinitialize on tab change function showVisualEditor() { function timeOut( i ) { - setTimeout( function () { + setTimeout( () => { if ( InputWidgets[ i ] && InputWidgets[ i ].$element.parent().is( ':visible' ) @@ -121,7 +119,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager } } - mw.loader.using( 'ext.VisualData.Maptiler', function () { + mw.loader.using( 'ext.VisualData.Maptiler', () => { var visualDataMaptiler = new VisualDataMaptiler(); visualDataMaptiler.initialize( obj.element, obj.data ); } ); @@ -250,7 +248,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager SchemasLayout.setTabPanel( schemaName ); if ( init ) { - SchemasLayout.on( 'set', function () { + SchemasLayout.on( 'set', () => { onTabSelect( SchemasLayout.getCurrentTabPanelName() ); } ); } @@ -260,7 +258,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager SchemasLayout.setPage( schemaName ); if ( init ) { - SchemasLayout.on( 'set', function () { + SchemasLayout.on( 'set', () => { onTabSelect( SchemasLayout.getCurrentPageName() ); } ); } @@ -277,7 +275,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // create deep copy, otherwise changes are // copied to Forms[ form ].properties[ property ][ 'input-config' ] - var inputConfig = $.extend( + var inputConfig = Object.assign( {}, // *** important !! cast to object VisualDataFunctions.deepCopy( field[ 'input-config' ] ), { value: config.data, required: required } @@ -493,7 +491,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager var askQuery = field[ 'options-askquery' ]; var regExp = new RegExp( '<' + sourceModel.pathNoIndex + '>' ); if ( regExp.test( askQuery ) ) { - ProcessModel.getModel( 'schema', sourceModel.schemaName ).then( function ( res ) { + ProcessModel.getModel( 'schema', sourceModel.schemaName ).then( ( res ) => { for ( var i in res.flatten ) { if ( res.flatten[ i ].pathNoIndex === sourceModel.pathNoIndex ) { @@ -567,14 +565,14 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager return new Promise( ( resolve, reject ) => { new mw.Api() .postWithToken( 'csrf', payload ) - .done( function ( thisRes ) { + .done( ( thisRes ) => { if ( payload.action in thisRes ) { var thisData = thisRes[ payload.action ]; thisData = JSON.parse( thisData.result ); resolve( thisData ); } } ) - .fail( function ( thisRes ) { + .fail( ( thisRes ) => { // eslint-disable-next-line no-console console.error( 'visualdata-askquery', thisRes ); reject( thisRes ); @@ -633,7 +631,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager OO.ui.mixin.GroupWidget.call( this, - $.extend( + Object.assign( { $group: this.$element }, @@ -736,7 +734,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // Mixin constructors OO.ui.mixin.GroupElement.call( this, - $.extend( + Object.assign( { $group: this.$element }, @@ -760,12 +758,12 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager var inputWidget = getInputWidget( config ); - inputWidget.on( 'change', function () { + inputWidget.on( 'change', () => { updateFieldsVisibility( config.model ); clearDependentFields( config.model.pathNoIndex ); } ); - inputWidget.$element.find( 'input' ).on( 'blur', function () { + inputWidget.$element.find( 'input' ).on( 'blur', () => { updateFieldsVisibility( config.model ); updateDependentFields( config.model ); } ); @@ -847,7 +845,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager fileUploadGroupWidget.removeItems( [ item ] ); }; - restoreButton.on( 'click', function () { + restoreButton.on( 'click', () => { inputWidget.toggle( false ); restoreButton.toggle( false ); fileUploadGroupWidget.removeItems( [ fileItemWidget ] ); @@ -861,12 +859,12 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // @FIXME move to FileItemWidget - this.on( 'fileUploaded', function ( file ) { + this.on( 'fileUploaded', ( file ) => { // eslint-disable-next-line no-console console.log( 'event fileUploaded', file ); } ); - this.on( 'fileUploadInit', function ( file ) { + this.on( 'fileUploadInit', ( file ) => { // eslint-disable-next-line no-console console.log( 'event fileUploadInit', file ); restoreButton.toggle( false ); @@ -875,20 +873,20 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager this.on( 'fileUploadProgress', - function ( file, progress, estimatedRemainingTime ) { + ( file, progress, estimatedRemainingTime ) => { loadedFiles[ file.name ].progress( progress, estimatedRemainingTime ); } ); - this.on( 'fileUploadComplete', function ( file, res ) { + this.on( 'fileUploadComplete', ( file, res ) => { loadedFiles[ file.name ].uploadComplete( file, res ); } ); - this.on( 'fileUploadErrorMessage', function ( file, errorMessage ) { + this.on( 'fileUploadErrorMessage', ( file, errorMessage ) => { loadedFiles[ file.name ].errorMessage( errorMessage ); } ); - this.on( 'fileUploadFail', function ( file, res ) { + this.on( 'fileUploadFail', ( file, res ) => { loadedFiles[ file.name ].fail( res ); } ); @@ -967,7 +965,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager var searchWidgetResults = searchWidget.getResults(); searchWidgetResults.multiselect = true; - searchWidgetResults.on( 'press', function ( value ) { + searchWidgetResults.on( 'press', ( value ) => { if ( value === null ) { return; } @@ -1046,7 +1044,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // }); } - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); @@ -1055,7 +1053,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager ProcessDialogSearch.prototype.getTeardownProcess = function ( data ) { return ProcessDialogSearch.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; @@ -1318,7 +1316,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager OO.ui.mixin.GroupWidget.call( this, - $.extend( { $group: this.$element }, config ) + Object.assign( { $group: this.$element }, config ) ); // OO.EventEmitter.call( this ); @@ -1373,7 +1371,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager flags: [ 'destructive' ] } ); - deleteButton.on( 'click', function () { + deleteButton.on( 'click', () => { Form.schemas.splice( Form.schemas.indexOf( data.schema.wiki.name ), 1 ); // delete Form.jsonData.schemas[ data.schema.wiki.name ]; delete ModelSchemas[ data.schema.wiki.name ]; @@ -1394,7 +1392,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // classes: ["VisualDataOptionsListDeleteButton"], } ); - editButton.on( 'click', function () { + editButton.on( 'click', () => { VisualDataSchemas.openSchemaDialog( [ data.schema.wiki.name ], 'properties' @@ -1531,11 +1529,11 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager GroupWidget.prototype.formLoaded = function () { // if ( this.data.root === true ) { - setTimeout( function () { + setTimeout( () => { VisualDataFunctions.removeNbspFromLayoutHeader( 'form' ); }, 30 ); - setTimeout( function () { + setTimeout( () => { VisualDataFunctions.removeNbspFromLayoutHeader( '#visualdataform-wrapper-dialog-' + FormID ); @@ -1656,7 +1654,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager function getFreeTextInput( wikitext, thisConfig ) { var thisInputWidget; - thisConfig = $.extend( + thisConfig = Object.assign( { name: `${ FormID }-model-freetext`, id: `${ FormID }-model-freetext` @@ -1666,7 +1664,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager if ( !wikitext || !Config.VEForAll ) { thisInputWidget = new OO.ui.MultilineTextInputWidget( - $.extend( + Object.assign( { autosize: true, rows: 6 @@ -1861,7 +1859,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager Model[ 'target-slot' ] = targetSlotInput; - targetSlotInput.on( 'change', function ( value ) { + targetSlotInput.on( 'change', ( value ) => { if ( freeTextField ) { freeTextField.toggle( value !== 'main' ); } @@ -1931,7 +1929,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager value: Config.contentModel } ); - contentModelInput.on( 'change', async function ( value ) { + contentModelInput.on( 'change', async ( value ) => { if ( !( 'freetext' in Model ) ) { return; } @@ -1998,7 +1996,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager OO.ui.mixin.GroupWidget.call( this, - $.extend( + Object.assign( { $group: this.$element }, @@ -2066,7 +2064,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // flags: ["destructive"], // classes: ["VisualDataOptionsListDeleteButton"], } ); - deleteButton.on( 'click', function () { + deleteButton.on( 'click', () => { if ( !( 'minItems' in self.schema ) || self.items.length > self.schema.minItems @@ -2239,7 +2237,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager icon: 'add' } ); - addOption.on( 'click', function () { + addOption.on( 'click', () => { if ( !( 'maxItems' in schema ) || self.optionsList.items.length < schema.maxItems @@ -2612,9 +2610,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // for some reason appending the method // halts the execution combined with mw.loader - categories = categories.filter( function onlyUnique( value, index, self ) { - return self.indexOf( value ) === index; - } ); + categories = categories.filter( ( value, index, self ) => self.indexOf( value ) === index ); // create title and free text input if ( !userDefined && !editFreeText && !editCategories && !editContentModel ) { @@ -2651,8 +2647,8 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager } function updatePanels() { - ProcessModel.getModel( 'fetch' ).then( function ( res ) { - Form.jsonData.schemas = $.extend( Form.jsonData.schemas, res ); + ProcessModel.getModel( 'fetch' ).then( ( res ) => { + Form.jsonData.schemas = Object.assign( Form.jsonData.schemas, res ); removeSchemasPanel(); @@ -2753,7 +2749,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager action = !hasMultiplePanels() ? 'validate&submit' : 'submit'; } - ProcessModel.getModel( action ).then( async function ( res ) { + ProcessModel.getModel( action ).then( async ( res ) => { if ( typeof res === 'boolean' && res === false ) { return; } @@ -2871,7 +2867,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager var self = this; return ProcessDialog.super.prototype.getActionProcess .call( this, action ) - .next( function () { + .next( () => { switch ( action ) { case 'back': var panels = PropertiesStack.getItems(); @@ -2887,7 +2883,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager ); break; case 'validate': - ProcessModel.getModel( 'validate' ).then( function ( res ) { + ProcessModel.getModel( 'validate' ).then( ( res ) => { if ( typeof res === 'boolean' ) { return; } @@ -2903,7 +2899,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager case 'validate&submit': case 'submit': case 'delete': - return ProcessModel.getModel( action ).then( function ( res ) { + return ProcessModel.getModel( action ).then( ( res ) => { if ( action.indexOf( 'submit' ) !== 1 && typeof res === 'boolean' ) { return; } @@ -2916,7 +2912,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager return new Promise( ( resolve, reject ) => { new mw.Api() .postWithToken( 'csrf', payload ) - .done( function ( thisRes ) { + .done( ( thisRes ) => { resolve(); if ( payload.action in thisRes ) { var data = JSON.parse( thisRes[ payload.action ].result ); @@ -2939,7 +2935,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager } } } ) - .fail( function ( thisRes ) { + .fail( ( thisRes ) => { // eslint-disable-next-line no-console console.error( 'visualdata-submit-form', res ); reject( thisRes ); @@ -2962,7 +2958,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; @@ -2979,7 +2975,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager }; function getFormAttributes( jsondata ) { - return $.extend( + return Object.assign( { formID: FormID, config: Config @@ -3084,7 +3080,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager flags: [ 'primary', 'progressive' ] } ); - editButton.on( 'click', function () { + editButton.on( 'click', () => { initializePropertiesStack(); var thisClasses = []; @@ -3118,7 +3114,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager widget = button; } - button.on( 'click', function () { + button.on( 'click', () => { var args = [ Form.options.value ]; if ( Form.options.schema !== '' && schemaHasData( Form.options.schema ) ) { @@ -3147,7 +3143,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager label: Form.options.title } ); - popupButton.on( 'click', function () { + popupButton.on( 'click', () => { initializePropertiesStack(); var thisClasses = []; @@ -3215,8 +3211,8 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // type: "submit", } ); - ValidateButton.on( 'click', function () { - ProcessModel.getModel( 'validate' ).then( function ( res ) { + ValidateButton.on( 'click', () => { + ProcessModel.getModel( 'validate' ).then( ( res ) => { if ( typeof res === 'boolean' && res === false ) { return; } @@ -3254,7 +3250,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager icon: 'arrowPrevious' } ); - GoBackButton.on( 'click', function () { + GoBackButton.on( 'click', () => { var thisPanels = PropertiesStack.getItems(); PropertiesStack.setItem( thisPanels[ 0 ] ); @@ -3436,7 +3432,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager }; }; -$( function () { +$( () => { var schemas = JSON.parse( mw.config.get( 'visualdata-schemas' ) ); // console.log("schemas", schemas); @@ -3464,7 +3460,7 @@ $( function () { var form = pageForms[ formID ]; - form = $.extend( + form = Object.assign( { freetext: '', jsonData: {}, @@ -3483,7 +3479,7 @@ $( function () { } if ( formID in submissionData ) { - form = $.extend( + form = Object.assign( form, submissionData[ formID ] ); @@ -3514,7 +3510,7 @@ $( function () { var MutationObserver = window.MutationObserver || window.WebKitMutationObserver; if ( MutationObserver ) { - var observer = new MutationObserver( function ( mutations, thisObserver ) { + var observer = new MutationObserver( ( mutations, thisObserver ) => { for ( var instance of instances ) { instance.mutationChange(); } @@ -3533,7 +3529,7 @@ $( function () { VisualData.setVars( config, schemas, init() ); } else { - mw.loader.using( 'ext.VisualData.ManageSchemas', function () { + mw.loader.using( 'ext.VisualData.ManageSchemas', () => { var instances = init(); VisualData.setVars( config, schemas, instances ); VisualDataSchemas.setVars( diff --git a/resources/VisualDataFunctions.js b/resources/VisualDataFunctions.js index 1129b81..57ecea6 100644 --- a/resources/VisualDataFunctions.js +++ b/resources/VisualDataFunctions.js @@ -437,7 +437,7 @@ VisualDataFunctions = ( function () { var Input = function ( configInput ) { Input.super.call( this, - jQuery.extend( configInput, { indicator: 'required' } ) + Object.assign( configInput, { indicator: 'required' } ) ); this.constructorName = constructor.name; }; @@ -483,7 +483,7 @@ VisualDataFunctions = ( function () { var ret = {}; Object.keys( object ) .sort() - .forEach( function ( key ) { + .forEach( ( key ) => { ret[ key ] = object[ key ]; } ); return ret; @@ -575,8 +575,8 @@ VisualDataFunctions = ( function () { } function createToolGroup( toolFactory, groupName, tools ) { - tools.forEach( function ( tool ) { - var obj = jQuery.extend( {}, tool ); + tools.forEach( ( tool ) => { + var obj = Object.assign( {}, tool ); obj.group = groupName; var config = tool.config ? tool.config : {}; delete obj.config; @@ -666,7 +666,7 @@ VisualDataFunctions = ( function () { // @TODO or return promise return windowManager - .openWindow( 'message', $.extend( obj, options ) ) + .openWindow( 'message', Object.assign( obj, options ) ) .closed.then( function ( action ) { return action.action === 'accept' && callback ? callback.apply( this, args ) : @@ -722,7 +722,7 @@ VisualDataFunctions = ( function () { } function createDropDownOptions( obj, config ) { - var config = jQuery.extend( { key: 'key', value: 'value' }, config || {} ); + var config = Object.assign( { key: 'key', value: 'value' }, config || {} ); var ret = []; for ( var i in obj ) { var label = config.value === 'value' ? obj[ i ] : i; @@ -746,7 +746,7 @@ VisualDataFunctions = ( function () { callback( resolve, reject ); } else { if ( n <= maxAttempts ) { - setTimeout( function () { + setTimeout( () => { init( ++n ); }, 50 ); } else if ( callbackMaxAttempts ) { diff --git a/resources/VisualDataGeolocation.js b/resources/VisualDataGeolocation.js index 280b8a1..a2051f5 100644 --- a/resources/VisualDataGeolocation.js +++ b/resources/VisualDataGeolocation.js @@ -275,7 +275,7 @@ const VisualDataGeolocation = function ( phpConfig, windowManager ) { defaultMaptilerMapConfig ); - maptilerMapConfigButton.on( 'click', function () { + maptilerMapConfigButton.on( 'click', () => { VisualDataInputConfigInst.openDialog( Model[ 'maptiler-map-config' ], 'maptiler-map', @@ -305,7 +305,7 @@ const VisualDataGeolocation = function ( phpConfig, windowManager ) { defaultMaptilerGeocodingConfig ); - maptilerGeocodingConfigButton.on( 'click', function () { + maptilerGeocodingConfigButton.on( 'click', () => { VisualDataInputConfigInst.openDialog( Model[ 'maptiler-geocoding-config' ], 'maptiler-geocoding', @@ -411,9 +411,7 @@ const VisualDataGeolocation = function ( phpConfig, windowManager ) { items.push( longitudeInputHelpField ); - items = items.filter( function ( x ) { - return !( 'items' in x ) || x.items.length; - } ); + items = items.filter( ( x ) => !( 'items' in x ) || x.items.length ); this.isEmpty = !items.length; @@ -537,11 +535,11 @@ const VisualDataGeolocation = function ( phpConfig, windowManager ) { VisualDataFunctions.renameObjectKey( ParentObj, CurrentKey, objName ); - ParentObj[ objName ] = $.extend( ParentObj[ objName ], { wiki: obj } ); + ParentObj[ objName ] = Object.assign( ParentObj[ objName ], { wiki: obj } ); Callback(); - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); } @@ -552,7 +550,7 @@ const VisualDataGeolocation = function ( phpConfig, windowManager ) { ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; diff --git a/resources/VisualDataInputConfig.js b/resources/VisualDataInputConfig.js index bd8bbce..a90316b 100644 --- a/resources/VisualDataInputConfig.js +++ b/resources/VisualDataInputConfig.js @@ -125,7 +125,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { switch ( inputName ) { case 'mw.widgets.DateInputWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { precision: [ 'day/month', " Date precision to use, 'day' or 'month'" ], inputFormat: [ 'string', @@ -152,7 +152,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { } ); case 'mw.widgets.TitleInputWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { limit: [ 'integer', 'Number of results to show' ], namespace: [ 'integer', 'Namespace to prepend to queries' ], maxLength: [ 'integer', 'Maximum query length' ], @@ -191,7 +191,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { } ); case 'mw.widgets.UserInputWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { limit: [ 'integer', 'Number of results to show' ] } ); @@ -401,25 +401,25 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { }; switch ( inputName ) { case 'OO.ui.MenuTagMultiselectWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { clearInputOnChoose: [ 'boolean', 'Clear the text input value when a menu option is chosen' ] } ); case 'mw.widgets.CategoryMultiselectWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { limit: [ 'integer', 'Maximum number of results to load' ] } ); case 'mw.widgets.TitlesMultiselectWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { clearInputOnChoose: [ 'boolean', 'clear input on choose' ], inputPosition: [ 'string', 'input position' ], allowEditTags: [ 'boolean', 'clear input on choose' ] } ); case 'mw.widgets.UsersMultiselectWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { limit: [ 'integer', 'Number of results to show' ], // name: [ // 'string', @@ -707,7 +707,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { switch ( inputName ) { case 'mw.widgets.datetime.DateTimeInputWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { type: [ 'string', "Whether to act like a 'date'" ], required: [ 'boolean', 'Whether a value is required' ], clearable: [ 'boolean', 'Whether to provide for blanking the value.' ], @@ -973,7 +973,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { // we don't rely anymore on searchWidgetResults.findSelectedItems() // to handle non-visible highlighted items - searchWidgetResults.on( 'press', function ( value ) { + searchWidgetResults.on( 'press', ( value ) => { if ( value === null ) { return; } @@ -1034,7 +1034,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { panelLayout.populateFieldset(); } - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); @@ -1043,7 +1043,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { ProcessDialogSearch.prototype.getTeardownProcess = function ( data ) { return ProcessDialogSearch.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; @@ -1143,9 +1143,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { ); } - items = items.filter( function ( x ) { - return !( 'items' in x ) || x.items.length; - } ); + items = items.filter( ( x ) => !( 'items' in x ) || x.items.length ); this.isEmpty = !items.length; @@ -1261,7 +1259,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { } Callback.setValue( obj ); - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); } @@ -1272,7 +1270,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; diff --git a/resources/VisualDataProcessModel.js b/resources/VisualDataProcessModel.js index 0b1b920..80e8aa5 100644 --- a/resources/VisualDataProcessModel.js +++ b/resources/VisualDataProcessModel.js @@ -19,7 +19,6 @@ * @copyright Copyright © 2023, https://wikisphere.org */ -/* eslint-disable no-tabs */ /* eslint-disable no-unused-vars */ /* eslint-disable no-underscore-dangle */ @@ -128,10 +127,10 @@ const VisualDataProcessModel = function ( switch ( error.keyword ) { case 'uniqueItems': if ( Removed.indexOf( `${ VisualDataFunctions.escapeJsonPtr( schemaName ) }${ error.instancePath }/${ error.params.j }` ) === -1 ) { - AjvErrors.push( $.extend( VisualDataFunctions.deepCopy( error ), { instancePath: `${ error.instancePath }/${ error.params.i }` } ) ); + AjvErrors.push( Object.assign( VisualDataFunctions.deepCopy( error ), { instancePath: `${ error.instancePath }/${ error.params.i }` } ) ); } if ( Removed.indexOf( `${ VisualDataFunctions.escapeJsonPtr( schemaName ) }${ error.instancePath }/${ error.params.i }` ) === -1 ) { - AjvErrors.push( $.extend( VisualDataFunctions.deepCopy( error ), { instancePath: `${ error.instancePath }/${ error.params.j }` } ) ); + AjvErrors.push( Object.assign( VisualDataFunctions.deepCopy( error ), { instancePath: `${ error.instancePath }/${ error.params.j }` } ) ); } break; default: diff --git a/resources/VisualDataSchemas.js b/resources/VisualDataSchemas.js index 39a0115..102bb6b 100644 --- a/resources/VisualDataSchemas.js +++ b/resources/VisualDataSchemas.js @@ -54,9 +54,7 @@ VisualDataSchemas = ( function () { return ret; } return Object.keys( obj ) - .map( ( i ) => { - return obj[ i ]; - } ) + .map( ( i ) => obj[ i ] ) .map( ( x ) => x.getValue() ); } @@ -128,7 +126,7 @@ VisualDataSchemas = ( function () { var datatable = $( '#' + getDatatableId( panel ) ).DataTable(); var ret = {}; // eslint-disable-next-line no-unused-vars, array-callback-return - datatable.rows().every( function ( rowIdx, tableLoop, rowLoop ) { + datatable.rows().every( ( rowIdx, tableLoop, rowLoop ) => { var key = Object.keys( fields )[ rowIdx ]; if ( key in fields ) { ret[ key ] = fields[ key ]; @@ -308,9 +306,7 @@ VisualDataSchemas = ( function () { columns: [ '' ].concat( mw.msg( 'visualdata-jsmodule-schemas-properties-columns' ) .split( /\s*,\s*/ ) - .map( function ( x ) { - return { title: x }; - } ) + .map( ( x ) => ( { title: x } ) ) ) } ); @@ -343,7 +339,7 @@ VisualDataSchemas = ( function () { initializeNestedDataTable( panel ); }; - buttonWidgetEdit.on( 'click', function () { + buttonWidgetEdit.on( 'click', () => { // switch by subschema type (if array) switch ( thisItem.wiki.type ) { case 'property': @@ -380,13 +376,13 @@ VisualDataSchemas = ( function () { flags: [ 'destructive' ] } ); - buttonWidgetDelete.on( 'click', function () { + buttonWidgetDelete.on( 'click', () => { VisualDataFunctions.OOUIAlert( new OO.ui.HtmlSnippet( mw.msg( 'visualdata-jsmodule-schemas-delete-confirm' ) ), { size: 'medium' }, - function () { + () => { delete currentItem[ propName ][ key ]; // *** or delete the row manually initializeNestedDataTable( panel ); @@ -534,11 +530,11 @@ VisualDataSchemas = ( function () { this.$body.append( booklet.$element ); booklet.setPage( data.initialTab ); - booklet.on( 'set', function ( value ) { + booklet.on( 'set', ( value ) => { initPropertiesTab( value.name ); } ); - setTimeout( function () { + setTimeout( () => { initPropertiesTab( data.initialTab ); VisualDataFunctions.removeNbspFromLayoutHeader( '#visualdata-ProcessDialogEditData' @@ -645,7 +641,7 @@ VisualDataSchemas = ( function () { var callApi = function ( postData, resolve, reject ) { new mw.Api() .postWithToken( 'csrf', postData ) - .done( function ( res ) { + .done( ( res ) => { resolve(); if ( payload.action in res ) { var data = res[ payload.action ]; @@ -669,7 +665,7 @@ VisualDataSchemas = ( function () { { size: 'medium' }, callApi, [ - $.extend( postData, { + Object.assign( postData, { 'confirm-job-execution': true } ), resolve, @@ -701,7 +697,7 @@ VisualDataSchemas = ( function () { } ); } } ) - .fail( function ( res ) { + .fail( ( res ) => { // eslint-disable-next-line no-console console.error( 'visualdata-save-schema', res ); reject( res ); @@ -709,7 +705,7 @@ VisualDataSchemas = ( function () { }; return new Promise( ( resolve, reject ) => { - mw.loader.using( 'mediawiki.api', function () { + mw.loader.using( 'mediawiki.api', () => { callApi( payload, resolve, reject ); } ); } ).catch( ( err ) => { @@ -725,7 +721,7 @@ VisualDataSchemas = ( function () { ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { Models.pop(); SelectedItems.pop(); WindowManager.removeActiveWindow(); @@ -814,7 +810,7 @@ VisualDataSchemas = ( function () { ] ); booklet.setPage( 'page1' ); - booklet.on( 'set', function ( value ) { + booklet.on( 'set', ( value ) => { if ( value.name !== 'page1' && !$.fn.DataTable.isDataTable( '#' + getDatatableId( value.name ) ) @@ -826,7 +822,7 @@ VisualDataSchemas = ( function () { this.$body.append( booklet.$element ); - setTimeout( function () { + setTimeout( () => { VisualDataFunctions.removeNbspFromLayoutHeader( '#visualdata-ProcessDialogEditProperties' ); @@ -849,7 +845,7 @@ VisualDataSchemas = ( function () { ) { if ( obj[ 'multiple-items' ] ) { currentItem.wiki = parentSchema; - currentItem.items = $.extend( currentItem.items, { wiki: obj } ); + currentItem.items = Object.assign( currentItem.items, { wiki: obj } ); return currentItem; } @@ -860,7 +856,7 @@ VisualDataSchemas = ( function () { // move child to parent if ( !obj[ 'multiple-items' ] ) { // currentItem.type should be always array - return $.extend( + return Object.assign( currentItem.type === 'array' ? currentItem.items : currentItem, { wiki: obj } ); @@ -870,7 +866,7 @@ VisualDataSchemas = ( function () { return { type: 'array', wiki: parentSchema, - items: $.extend( currentItem, { wiki: obj } ) + items: Object.assign( currentItem, { wiki: obj } ) }; } @@ -989,7 +985,7 @@ VisualDataSchemas = ( function () { break; } - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); @@ -1000,7 +996,7 @@ VisualDataSchemas = ( function () { var self = this; return ProcessDialogNested.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { Models.pop(); SelectedItems.pop(); initializeNestedDataTable( self.data.propName ); @@ -1307,7 +1303,7 @@ VisualDataSchemas = ( function () { layoutParentSchema.toggle( multipleItemsInputValue ); nameInput.setDisabled( multipleItemsInputValue ); - multipleItemsInput.on( 'change', function ( enabled ) { + multipleItemsInput.on( 'change', ( enabled ) => { layoutParentSchema.toggle( enabled ); nameInput.setDisabled( enabled ); } ); @@ -1398,7 +1394,7 @@ VisualDataSchemas = ( function () { } ); } else { SelectedItems.push( - jQuery.extend( + Object.assign( { properties: {}, @@ -1461,7 +1457,7 @@ VisualDataSchemas = ( function () { VisualDataFunctions.OOUIAlert( new OO.ui.HtmlSnippet( mw.msg( 'visualdata-jsmodule-missing-json-diff-library' ) ), { size: 'medium', actions: [ OO.ui.MessageDialog.static.actions[ 0 ] ] - }, function () { + }, () => { // 15 days var timeLapse = 15 * 86400; mw.cookie.set( 'visualdata-check-json-diff-library', true, { @@ -1510,9 +1506,7 @@ VisualDataSchemas = ( function () { columns: mw .msg( 'visualdata-jsmodule-schemas-columns' ) .split( /\s*,\s*/ ) - .map( function ( x ) { - return { title: x }; - } ) + .map( ( x ) => ( { title: x } ) ) } ); DataTable.on( 'click', 'tr', function () { @@ -1526,7 +1520,7 @@ VisualDataSchemas = ( function () { function openSchemaDialog( label, initialTab ) { if ( !Object.keys( Schemas[ label ] ).length ) { - VisualData.loadSchemas( [ label ] ).then( function ( schemas ) { + VisualData.loadSchemas( [ label ] ).then( ( schemas ) => { for ( var i in schemas ) { Schemas[ i ] = schemas[ i ]; } @@ -1738,7 +1732,7 @@ VisualDataSchemas = ( function () { }; }() ); -$( function () { +$( () => { var config = JSON.parse( mw.config.get( 'visualdata-config' ) ); // console.log("config", config); diff --git a/resources/VisualDataUpload.js b/resources/VisualDataUpload.js index a131aa0..b571f73 100644 --- a/resources/VisualDataUpload.js +++ b/resources/VisualDataUpload.js @@ -94,20 +94,20 @@ // this.upload.setFilename( this.selectFileWidget.getValue().name ); this.upload.upload().then( - function ( res ) { + ( res ) => { deferred.resolve(); layout.parentWidget.emit( 'fileUploadComplete', file, res ); }, - function () { + () => { // These errors will be thrown while the user is on the info page. - layout.getErrorMessageForStateDetails().then( function ( errorMessage ) { + layout.getErrorMessageForStateDetails().then( ( errorMessage ) => { // eslint-disable-next-line no-console console.error( 'errorMessage', errorMessage ); deferred.reject( errorMessage ); layout.parentWidget.emit( 'fileUploadErrorMessage', file, errorMessage ); } ); }, - function ( progress ) { + ( progress ) => { var elapsedTime = mw.now() - startTime, estimatedTotalTime = ( 1 / progress ) * elapsedTime, estimatedRemainingTime = moment.duration( @@ -125,7 +125,7 @@ ); // cancel uploading - deferred.fail( function ( res ) { + deferred.fail( ( res ) => { // layout.setPage( 'upload' ); layout.parentWidget.emit( 'fileUploadFail', file, res ); } ); @@ -174,7 +174,7 @@ ) ); } else if ( Array.isArray( warnings.duplicate ) ) { - warnings.duplicate.forEach( function ( filename ) { + warnings.duplicate.forEach( ( filename ) => { var $a = $( '<a>' ).text( filename ), href = mw.Title.makeTitle( mw.config.get( 'wgNamespaceIds' ).file, @@ -257,7 +257,7 @@ // Validation (if the SFW is for a stashed file, this never fires) this.selectFileWidget.on( 'change', this.onUploadFormChange.bind( this ) ); - this.selectFileWidget.on( 'change', function () { + this.selectFileWidget.on( 'change', () => { layout.updateFilePreview(); } ); @@ -280,16 +280,16 @@ this.selectFileWidget .loadAndGetImageUrl() .done( - function ( url ) { + ( url ) => { this.filePreview.$element.find( 'p' ).remove(); this.filePreview.$element.css( 'background-image', 'url(' + url + ')' ); this.infoForm.$element.addClass( 'mw-upload-bookletLayout-hasThumbnail' ); - }.bind( this ) + } ) .fail( - function () { + () => { this.filePreview.$element.find( 'p' ).remove(); if ( this.selectFileWidget.getValue() ) { this.filePreview.$element.append( @@ -300,7 +300,7 @@ this.infoForm.$element.removeClass( 'mw-upload-bookletLayout-hasThumbnail' ); - }.bind( this ) + } ); }; @@ -353,9 +353,9 @@ this.on( 'fileUploadProgress', - function ( progress ) { + ( progress ) => { this.progressBarWidget.setProgress( progress * 100 ); - }.bind( this ) + } ); this.filenameWidget.on( 'change', this.onInfoFormChange.bind( this ) ); @@ -370,10 +370,10 @@ this.filenameWidget.getValidity(), this.descriptionWidget.getValidity() ) - .done( function () { + .done( () => { layout.emit( 'infoValid', true ); } ) - .fail( function () { + .fail( () => { layout.emit( 'infoValid', false ); } ); }; diff --git a/resources/VisualDataWindowManager.js b/resources/VisualDataWindowManager.js index 9f4b647..aca33ee 100644 --- a/resources/VisualDataWindowManager.js +++ b/resources/VisualDataWindowManager.js @@ -20,7 +20,6 @@ */ // @see https://doc.wikimedia.org/oojs-ui/master/js/ -// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-implicit-globals VisualDataWindowManager = function () { diff --git a/resources/Widgets/VisualDataButtonMultiselectWidget.js b/resources/Widgets/VisualDataButtonMultiselectWidget.js index fe04060..72f557f 100644 --- a/resources/Widgets/VisualDataButtonMultiselectWidget.js +++ b/resources/Widgets/VisualDataButtonMultiselectWidget.js @@ -48,7 +48,7 @@ value: $.inArray( this.options[ i ], config.selected ) !== -1 } ); - this.items[ i ].on( 'change', function () { + this.items[ i ].on( 'change', () => { self.emit( 'change', self.getValue().join().trim() ); } ); } diff --git a/resources/Widgets/VisualDataDropdownWidget.js b/resources/Widgets/VisualDataDropdownWidget.js index 50f9133..962a738 100644 --- a/resources/Widgets/VisualDataDropdownWidget.js +++ b/resources/Widgets/VisualDataDropdownWidget.js @@ -46,7 +46,7 @@ this.select = select; - select.on( 'change', function () { + select.on( 'change', () => { self.emit( 'change', self.getValue() ); } ); diff --git a/resources/Widgets/VisualDataMaptiler.js b/resources/Widgets/VisualDataMaptiler.js index b2f043a..cc32c0f 100644 --- a/resources/Widgets/VisualDataMaptiler.js +++ b/resources/Widgets/VisualDataMaptiler.js @@ -44,7 +44,7 @@ var zoomInput = data.model.properties.zoom.input; var mapId = 'visualdata-maptiler-map-' + data.path; - VisualDataFunctions.loadScripts( this.scripts, function ( e ) { + VisualDataFunctions.loadScripts( this.scripts, ( e ) => { if ( $( '#' + jQuery.escapeSelector( mapId ) ).length ) { return; } @@ -113,14 +113,14 @@ function onDragEnd() { var lngLat = marker.getLngLat(); - setTimeout( function () { + setTimeout( () => { lngInput.setValue( lngLat.lng ); latInput.setValue( lngLat.lat ); zoomInput.setValue( map.getZoom() ); }, 100 ); } - map.on( 'load', function () { + map.on( 'load', () => { if ( !marker ) { marker = new maptilersdk.Marker( { draggable: true @@ -143,10 +143,10 @@ } // update marker - data.model.properties.latitude.input.on( 'change', function ( value ) { + data.model.properties.latitude.input.on( 'change', ( value ) => { marker.setLngLat( [ lngInput.getValue(), value ] ); } ); - data.model.properties.longitude.input.on( 'change', function ( value ) { + data.model.properties.longitude.input.on( 'change', ( value ) => { marker.setLngLat( [ value, latInput.getValue() ] ); } ); diff --git a/resources/Widgets/VisualDataMenuTagSearchMultiselect.js b/resources/Widgets/VisualDataMenuTagSearchMultiselect.js index 7f1fd67..9669f3a 100644 --- a/resources/Widgets/VisualDataMenuTagSearchMultiselect.js +++ b/resources/Widgets/VisualDataMenuTagSearchMultiselect.js @@ -55,7 +55,7 @@ // Mixin constructors OO.ui.mixin.PendingElement.call( this, - $.extend( {}, config, { $pending: this.$handle } ) + Object.assign( {}, config, { $pending: this.$handle } ) ); // Event handler to call the autocomplete methods @@ -95,7 +95,7 @@ function () { this.getMenu().clearItems(); this.getNewMenuItems( this.input.$input.val() ).then( - function ( items ) { + ( items ) => { var existingItems, menu = this.getMenu(); @@ -105,9 +105,7 @@ } // Array of strings of the data of OO.ui.MenuOptionsWidgets - existingItems = menu.getItems().map( function ( item ) { - return item.data; - } ); + existingItems = menu.getItems().map( ( item ) => item.data ); // Remove if items' data already exists for ( var i in items ) { @@ -128,7 +126,7 @@ } menu.addItems( ret ).toggle( true ); - }.bind( this ) + } ); }; diff --git a/resources/Widgets/VisualDataTinyMCE.js b/resources/Widgets/VisualDataTinyMCE.js index d30f373..e82c70e 100644 --- a/resources/Widgets/VisualDataTinyMCE.js +++ b/resources/Widgets/VisualDataTinyMCE.js @@ -19,7 +19,6 @@ * @copyright Copyright © 2024, https://wikisphere.org */ -/* eslint-disable no-tabs */ /* eslint-disable no-unused-vars */ ( function () { diff --git a/resources/Widgets/VisualDataVisualEditor.js b/resources/Widgets/VisualDataVisualEditor.js index 780a786..99348d7 100644 --- a/resources/Widgets/VisualDataVisualEditor.js +++ b/resources/Widgets/VisualDataVisualEditor.js @@ -49,7 +49,7 @@ this.Editor = null; this.initialized = false; - setTimeout( function () { + setTimeout( () => { if ( self.$element.parent().is( ':visible' ) ) { self.initialize(); } @@ -68,7 +68,7 @@ var self = this; self.initialized = true; - this.loadVEForAll().then( function () { + this.loadVEForAll().then( () => { // if (!self.isHtml) { // return; // } @@ -107,7 +107,7 @@ resolve(); }; var callbackMaxAttempts = function ( resolve, reject ) { - jQuery( document ).on( 'VEForAllLoaded', function ( e ) { + jQuery( document ).on( 'VEForAllLoaded', ( e ) => { self.textarea.applyVisualEditor(); resolve(); } ); @@ -161,7 +161,7 @@ // } return new Promise( ( resolve, reject ) => { - $.when( editor.updateContent() ).then( function () { + $.when( editor.updateContent() ).then( () => { // @see ext.veforall.target.js // *** sometimes convertToWikiText is not called // based on focus diff --git a/resources/Widgets/VisualDataintlTelInput.js b/resources/Widgets/VisualDataintlTelInput.js index 699a8f1..7cf401a 100644 --- a/resources/Widgets/VisualDataintlTelInput.js +++ b/resources/Widgets/VisualDataintlTelInput.js @@ -52,7 +52,7 @@ // self.emit("change", self.config.value); // }); - input.on( 'blur', function () { + input.on( 'blur', () => { self.formatNumber(); } ); @@ -67,20 +67,18 @@ self.iti = window.intlTelInput( input.get( 0 ), - $.extend( + Object.assign( { utilsScript: 'https://cdn.jsdelivr.net/npm/intl-tel-input@18.3.3/build/js/utils.js', initialCountry: 'auto', geoIpLookup: function ( callback ) { fetch( 'https://ipapi.co/json' ) - .then( function ( res ) { - return res.json(); - } ) - .then( function ( data ) { + .then( ( res ) => res.json() ) + .then( ( data ) => { callback( data.country_code ); } ) - .catch( function () { + .catch( () => { callback( 'us' ); } ); } -- 2.39.2
$ date --- stdout --- Wed Jul 24 04:27:09 UTC 2024 --- end --- $ git clone file:///srv/git/mediawiki-extensions-VisualData.git repo --depth=1 -b master --- stderr --- Cloning into 'repo'... --- stdout --- --- end --- $ git config user.name libraryupgrader --- stdout --- --- end --- $ git config user.email tools.libraryupgrader@tools.wmflabs.org --- stdout --- --- end --- $ git submodule update --init --- stdout --- --- end --- $ grr init --- stdout --- Installed commit-msg hook. --- end --- $ git show-ref refs/heads/master --- stdout --- 541a7bb3893565e08058ae32b5bd13ae8edc26b2 refs/heads/master --- end --- $ /usr/bin/npm audit --json --- stdout --- { "auditReportVersion": 2, "vulnerabilities": { "braces": { "name": "braces", "severity": "high", "isDirect": false, "via": [ { "source": 1098094, "name": "braces", "dependency": "braces", "title": "Uncontrolled resource consumption in braces", "url": "https://github.com/advisories/GHSA-grv7-fg5c-xmjg", "severity": "high", "cwe": [ "CWE-400", "CWE-1050" ], "cvss": { "score": 7.5, "vectorString": "CVSS:3.1/AV:N/AC:L/PR:N/UI:N/S:U/C:N/I:N/A:H" }, "range": "<3.0.3" } ], "effects": [], "range": "<3.0.3", "nodes": [ "node_modules/braces" ], "fixAvailable": true } }, "metadata": { "vulnerabilities": { "info": 0, "low": 0, "moderate": 0, "high": 1, "critical": 0, "total": 1 }, "dependencies": { "prod": 1, "dev": 436, "optional": 0, "peer": 10, "peerOptional": 0, "total": 436 } } } --- end --- $ /usr/bin/composer install --- stderr --- No composer.lock file present. Updating dependencies to latest instead of installing from lock file. See https://getcomposer.org/install for more information. Loading composer repositories with package information Updating dependencies Lock file operations: 23 installs, 0 updates, 0 removals - Locking composer/semver (3.4.0) - Locking composer/spdx-licenses (1.5.8) - Locking dealerdirect/phpcodesniffer-composer-installer (v1.0.0) - Locking mediawiki/mediawiki-codesniffer (v43.0.0) - Locking mediawiki/minus-x (1.1.1) - Locking php-parallel-lint/php-console-color (v1.0.1) - Locking php-parallel-lint/php-console-highlighter (v1.0.0) - Locking php-parallel-lint/php-parallel-lint (v1.3.2) - Locking phpcsstandards/phpcsextra (1.1.2) - Locking phpcsstandards/phpcsutils (1.0.9) - Locking psr/container (2.0.2) - Locking squizlabs/php_codesniffer (3.8.1) - Locking swaggest/json-diff (v3.11.0) - Locking symfony/console (v5.4.41) - Locking symfony/deprecation-contracts (v3.5.0) - Locking symfony/polyfill-ctype (v1.30.0) - Locking symfony/polyfill-intl-grapheme (v1.30.0) - Locking symfony/polyfill-intl-normalizer (v1.30.0) - Locking symfony/polyfill-mbstring (v1.30.0) - Locking symfony/polyfill-php73 (v1.30.0) - Locking symfony/polyfill-php80 (v1.30.0) - Locking symfony/service-contracts (v3.5.0) - Locking symfony/string (v6.4.9) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 23 installs, 0 updates, 0 removals 0 [>---------------------------] 0 [->--------------------------] - Installing squizlabs/php_codesniffer (3.8.1): Extracting archive - Installing dealerdirect/phpcodesniffer-composer-installer (v1.0.0): Extracting archive - Installing symfony/polyfill-php80 (v1.30.0): Extracting archive - Installing phpcsstandards/phpcsutils (1.0.9): Extracting archive - Installing phpcsstandards/phpcsextra (1.1.2): Extracting archive - Installing symfony/polyfill-mbstring (v1.30.0): Extracting archive - Installing composer/spdx-licenses (1.5.8): Extracting archive - Installing composer/semver (3.4.0): Extracting archive - Installing mediawiki/mediawiki-codesniffer (v43.0.0): Extracting archive - Installing symfony/polyfill-intl-normalizer (v1.30.0): Extracting archive - Installing symfony/polyfill-intl-grapheme (v1.30.0): Extracting archive - Installing symfony/polyfill-ctype (v1.30.0): Extracting archive - Installing symfony/string (v6.4.9): Extracting archive - Installing symfony/deprecation-contracts (v3.5.0): Extracting archive - Installing psr/container (2.0.2): Extracting archive - Installing symfony/service-contracts (v3.5.0): Extracting archive - Installing symfony/polyfill-php73 (v1.30.0): Extracting archive - Installing symfony/console (v5.4.41): Extracting archive - Installing mediawiki/minus-x (1.1.1): Extracting archive - Installing php-parallel-lint/php-console-color (v1.0.1): Extracting archive - Installing php-parallel-lint/php-console-highlighter (v1.0.0): Extracting archive - Installing php-parallel-lint/php-parallel-lint (v1.3.2): Extracting archive - Installing swaggest/json-diff (v3.11.0): Extracting archive 0/21 [>---------------------------] 0% 20/21 [==========================>-] 95% 21/21 [============================] 100% 4 package suggestions were added by new dependencies, use `composer suggest` to see details. Generating autoload files 14 packages you are using are looking for funding. Use the `composer fund` command to find out more! --- stdout --- PHP CodeSniffer Config installed_paths set to ../../mediawiki/mediawiki-codesniffer,../../phpcsstandards/phpcsextra,../../phpcsstandards/phpcsutils --- end --- Upgrading n:eslint-config-wikimedia from 0.26.0 -> 0.28.2 Upgrading n:grunt-banana-checker from 0.11.1 -> 0.13.0 Upgrading n:grunt-stylelint from 0.19.0 -> 0.20.1 Upgrading n:stylelint-config-wikimedia from 0.16.1 -> 0.17.2 $ /usr/bin/npm install --- stderr --- npm WARN deprecated @humanwhocodes/config-array@0.11.14: Use @eslint/config-array instead npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead --- stdout --- added 419 packages, and audited 420 packages in 6s 90 packages are looking for funding run `npm fund` for details found 0 vulnerabilities --- end --- $ package-lock-lint package-lock.json --- stdout --- Checking package-lock.json --- end --- $ /usr/bin/npm install grunt-eslint@24.3.0 --save-exact --- stdout --- up to date, audited 420 packages in 1s 90 packages are looking for funding run `npm fund` for details found 0 vulnerabilities --- end --- $ package-lock-lint package-lock.json --- stdout --- Checking package-lock.json --- end --- $ ./node_modules/.bin/eslint resources/VisualData.js resources/VisualDataDatatables.js resources/Widgets/VisualDataButtonMultiselectWidget.js resources/Widgets/VisualDataMaptiler.js resources/VisualDataFunctions.js resources/VisualDataProcessModel.js resources/Widgets/VisualDataMenuTagSearchMultiselect.js resources/VisualDataFormField.js i18n/de.json resources/Widgets/VisualDataRatingWidget.js resources/VisualDataForms.js extension.json resources/Widgets/VisualDataTinyMCE.js resources/Widgets/VisualDataintlTelInput.js composer.json Gruntfile.js resources/VisualDataWindowManager.js resources/Widgets/VisualDataLookupElement.js resources/VisualDataInputConfig.js resources/VisualDataGeolocation.js resources/VersionCheck.js resources/VisualDataContentBlock.js resources/VisualDataSchemas.js resources/Widgets/VisualDataVisualEditor.js package.json i18n/qqq.json i18n/en.json resources/VisualDataUpload.js resources/Widgets/VisualDataDropdownWidget.js package-lock.json --fix --- stdout --- /src/repo/resources/VersionCheck.js 57:22 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector 62:18 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 65:9 warning Where possible, maintain application state in JS to avoid slower DOM queries no-jquery/no-class-state /src/repo/resources/VisualDataDatatables.js 45:2 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector 48:7 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern /src/repo/resources/VisualDataFormField.js 1082:4 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector /src/repo/resources/VisualDataForms.js 71:6 warning Selector extensions are not allowed no-jquery/no-sizzle 80:1 warning This line has a length of 106. Maximum allowed is 100 max-len 209:5 warning Selector extensions are not allowed no-jquery/no-sizzle 408:1 warning This line has a length of 110. Maximum allowed is 100 max-len 510:1 warning This line has a length of 117. Maximum allowed is 100 max-len 527:1 warning This line has a length of 131. Maximum allowed is 100 max-len 1362:26 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1430:6 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1433:7 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1436:7 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1465:7 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1468:8 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1471:8 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 2097:5 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 2254:1 warning This line has a length of 107. Maximum allowed is 100 max-len 2396:1 warning This line has a length of 109. Maximum allowed is 100 max-len 2726:1 warning This line has a length of 102. Maximum allowed is 100 max-len 2744:7 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 2918:1 warning This line has a length of 102. Maximum allowed is 100 max-len 3042:10 warning Selector extensions are not allowed no-jquery/no-sizzle 3122:1 warning This line has a length of 108. Maximum allowed is 100 max-len 3127:1 warning This line has a length of 105. Maximum allowed is 100 max-len 3347:15 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 3371:1 warning This line has a length of 119. Maximum allowed is 100 max-len 3418:3 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector /src/repo/resources/VisualDataInputConfig.js 838:1 warning This line has a length of 110. Maximum allowed is 100 max-len /src/repo/resources/VisualDataProcessModel.js 159:11 warning Selector extensions are not allowed no-jquery/no-sizzle /src/repo/resources/VisualDataSchemas.js 327:1 warning This line has a length of 103. Maximum allowed is 100 max-len 1496:15 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector 1671:4 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector 1674:15 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1690:4 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector /src/repo/resources/Widgets/VisualDataButtonMultiselectWidget.js 48:12 warning Prefer Array#indexOf to $.inArray no-jquery/no-in-array /src/repo/resources/Widgets/VisualDataDropdownWidget.js 38:7 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 53:7 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern /src/repo/resources/Widgets/VisualDataMaptiler.js 61:1 warning This line has a length of 119. Maximum allowed is 100 max-len /src/repo/resources/Widgets/VisualDataMenuTagSearchMultiselect.js 29:1 warning Invalid JSDoc tag name "mixins" jsdoc/check-tag-names 49:1 warning This line has a length of 110. Maximum allowed is 100 max-len 50:1 warning This line has a length of 107. Maximum allowed is 100 max-len /src/repo/resources/Widgets/VisualDataRatingWidget.js 38:19 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 45:8 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 67:6 warning Selector extensions are not allowed no-jquery/no-sizzle /src/repo/resources/Widgets/VisualDataTinyMCE.js 38:3 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 38:19 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal /src/repo/resources/Widgets/VisualDataVisualEditor.js 40:3 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 40:19 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 47:3 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 53:9 warning Selector extensions are not allowed no-jquery/no-sizzle /src/repo/resources/Widgets/VisualDataintlTelInput.js 38:7 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern ✖ 55 problems (0 errors, 55 warnings) --- end --- $ ./node_modules/.bin/eslint resources/VisualData.js resources/VisualDataDatatables.js resources/Widgets/VisualDataButtonMultiselectWidget.js resources/Widgets/VisualDataMaptiler.js resources/VisualDataFunctions.js resources/VisualDataProcessModel.js resources/Widgets/VisualDataMenuTagSearchMultiselect.js resources/VisualDataFormField.js i18n/de.json resources/Widgets/VisualDataRatingWidget.js resources/VisualDataForms.js extension.json resources/Widgets/VisualDataTinyMCE.js resources/Widgets/VisualDataintlTelInput.js composer.json Gruntfile.js resources/VisualDataWindowManager.js resources/Widgets/VisualDataLookupElement.js resources/VisualDataInputConfig.js resources/VisualDataGeolocation.js resources/VersionCheck.js resources/VisualDataContentBlock.js resources/VisualDataSchemas.js resources/Widgets/VisualDataVisualEditor.js package.json i18n/qqq.json i18n/en.json resources/VisualDataUpload.js resources/Widgets/VisualDataDropdownWidget.js package-lock.json -f json --- stdout --- [{"filePath":"/src/repo/Gruntfile.js","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/composer.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/extension.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/de.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/en.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/i18n/qqq.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package-lock.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/package.json","messages":[],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"indent","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"no-extra-parens","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VersionCheck.js","messages":[{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":57,"column":22,"nodeType":"CallExpression","endLine":57,"endColumn":45},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":62,"column":18,"nodeType":"CallExpression","endLine":62,"endColumn":41},{"ruleId":"no-jquery/no-class-state","severity":1,"message":"Where possible, maintain application state in JS to avoid slower DOM queries","line":65,"column":9,"nodeType":"CallExpression","endLine":65,"endColumn":75}],"suppressedMessages":[],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2021-2023, https://wikisphere.org\n */\n$( () => {\n\tif (\n\t\t!mw.config.get( 'visualdata-show-notice-outdated-version' ) ||\n\t\tmw.cookie.get( 'visualdata-check-latest-version' )\n\t) {\n\t\treturn;\n\t}\n\n\t// display every 3 days\n\tmw.loader.using( 'mediawiki.api', () => {\n\t\tnew mw.Api()\n\t\t\t.postWithToken( 'csrf', {\n\t\t\t\taction: 'visualdata-check-latest-version'\n\t\t\t} )\n\t\t\t.done( ( res ) => {\n\t\t\t\tif ( 'visualdata-check-latest-version' in res ) {\n\t\t\t\t\tif ( res[ 'visualdata-check-latest-version' ].result === 2 ) {\n\t\t\t\t\t\tvar messageWidget = new OO.ui.MessageWidget( {\n\t\t\t\t\t\t\ttype: 'warning',\n\t\t\t\t\t\t\tlabel: new OO.ui.HtmlSnippet(\n\t\t\t\t\t\t\t\tmw.msg(\n\t\t\t\t\t\t\t\t\t'visualdata-jsmodule-outdated-version'\n\t\t\t\t\t\t\t\t)\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t// *** this does not work before ooui v0.43.0\n\t\t\t\t\t\t\tshowClose: true\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tvar closeFunction = function () {\n\t\t\t\t\t\t\tvar three_days = 3 * 86400;\n\t\t\t\t\t\t\tmw.cookie.set( 'visualdata-check-latest-version', true, {\n\t\t\t\t\t\t\t\tpath: '/',\n\t\t\t\t\t\t\t\texpires: three_days\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t$( messageWidget.$element ).parent().remove();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tmessageWidget.on( 'close', closeFunction );\n\t\t\t\t\t\tvar selector = $( '#visualdata-form' ).length ?\n\t\t\t\t\t\t\t'#visualdata-form' :\n\t\t\t\t\t\t\t'.VisualDataFormWrapper';\n\t\t\t\t\t\t$( selector )\n\t\t\t\t\t\t\t.first()\n\t\t\t\t\t\t\t.prepend( $( '<div><br/></div>' ).prepend( messageWidget.$element ) );\n\n\t\t\t\t\t\tif (\n\t\t\t\t\t\t\t!messageWidget.$element.hasClass( 'oo-ui-messageWidget-showClose' )\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\tmessageWidget.$element.addClass( 'oo-ui-messageWidget-showClose' );\n\t\t\t\t\t\t\tvar closeButton = new OO.ui.ButtonWidget( {\n\t\t\t\t\t\t\t\tclasses: [ 'oo-ui-messageWidget-close' ],\n\t\t\t\t\t\t\t\tframed: false,\n\t\t\t\t\t\t\t\ticon: 'close',\n\t\t\t\t\t\t\t\tlabel: OO.ui.msg( 'ooui-popup-widget-close-button-aria-label' ),\n\t\t\t\t\t\t\t\tinvisibleLabel: true\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tcloseButton.on( 'click', closeFunction );\n\t\t\t\t\t\t\tmessageWidget.$element.append( closeButton.$element );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t} );\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualData.js","messages":[],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":25,"column":1,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":147,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":58,"column":6,"nodeType":"MemberExpression","messageId":"unexpected","endLine":58,"endColumn":19,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[1845,1896],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":64,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":64,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":91,"column":6,"nodeType":"MemberExpression","messageId":"unexpected","endLine":91,"endColumn":19,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[2843,2890],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataContentBlock.js","messages":[],"suppressedMessages":[{"ruleId":"no-unused-vars","severity":2,"message":"'VisualDataContentBlock' is assigned a value but never used.","line":23,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":23,"endColumn":29,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'Config' is assigned a value but never used.","line":25,"column":6,"nodeType":"Identifier","messageId":"unusedVar","endLine":25,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'data' is assigned a value but never used.","line":67,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":67,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'property' is defined but never used.","line":108,"column":45,"nodeType":"Identifier","messageId":"unusedVar","endLine":108,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataDatatables.js","messages":[{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":45,"column":2,"nodeType":"CallExpression","endLine":45,"endColumn":30},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":48,"column":7,"nodeType":"VariableDeclarator","endLine":48,"endColumn":24}],"suppressedMessages":[{"ruleId":"no-unused-vars","severity":2,"message":"'obj' is defined but never used.","line":27,"column":31,"nodeType":"Identifier","messageId":"unusedVar","endLine":27,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'data' is defined but never used.","line":31,"column":27,"nodeType":"Identifier","messageId":"unusedVar","endLine":31,"endColumn":31,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'callback' is defined but never used.","line":31,"column":33,"nodeType":"Identifier","messageId":"unusedVar","endLine":31,"endColumn":41,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'visualdataDatatables' is assigned a value but never used.","line":43,"column":6,"nodeType":"Identifier","messageId":"unusedVar","endLine":43,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'preloadData' is assigned a value but never used.","line":46,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":46,"endColumn":18,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'count' is assigned a value but never used.","line":49,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":49,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'tableData' is assigned a value but never used.","line":50,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":50,"endColumn":16,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2021-2023, https://wikisphere.org\n */\n\n/* eslint-disable no-unused-vars */\n\nconst VisualDataDatatables = function () {\n\tvar cacheLimit = 40000;\n\n\tvar getCacheKey = function ( obj ) {\n\t\t// @TODO\n\t};\n\n\tvar callApi = function ( data, callback ) {\n\t\t// @TODO\n\t};\n\n\treturn {\n\t\tgetCacheKey,\n\t\tcallApi,\n\t\tcacheLimit\n\t};\n};\n\n$( () => {\n\tvar visualdataDatatables = new VisualDataDatatables();\n\n\t$( '.visualdata.datatable' ).each( function () {\n\t\tvar preloadData = {};\n\n\t\tvar table = $( this );\n\t\tvar count = table.data( 'count' );\n\t\tvar tableData = table.data();\n\n\t\tvar conf = {\n\t\t\tpageLength: 20\n\t\t};\n\t\t$( this ).DataTable( conf );\n\t} );\n} );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataFormField.js","messages":[{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":1082,"column":4,"nodeType":"CallExpression","endLine":1082,"endColumn":61}],"suppressedMessages":[{"ruleId":"no-unused-vars","severity":2,"message":"'VisualDataFormField' is assigned a value but never used.","line":25,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":25,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":74,"column":5,"nodeType":"MemberExpression","messageId":"unexpected","endLine":74,"endColumn":18,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[2000,2058],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":216,"column":14,"nodeType":"Program","messageId":"unexpectedTab","endLine":216,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":216,"column":32,"nodeType":"Program","messageId":"unexpectedTab","endLine":216,"endColumn":33,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'value' is defined but never used.","line":310,"column":40,"nodeType":"Identifier","messageId":"unusedVar","endLine":310,"endColumn":45,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":369,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":369,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":372,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":372,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":402,"column":14,"nodeType":"Program","messageId":"unexpectedTab","endLine":402,"endColumn":15,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":402,"column":32,"nodeType":"Program","messageId":"unexpectedTab","endLine":402,"endColumn":33,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'value' is defined but never used.","line":482,"column":40,"nodeType":"Identifier","messageId":"unusedVar","endLine":482,"endColumn":45,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'value' is defined but never used.","line":487,"column":37,"nodeType":"Identifier","messageId":"unusedVar","endLine":487,"endColumn":42,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'data' is assigned a value but never used.","line":511,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":511,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'value' is defined but never used.","line":730,"column":39,"nodeType":"Identifier","messageId":"unusedVar","endLine":730,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":746,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":746,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":747,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":747,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'value' is defined but never used.","line":805,"column":41,"nodeType":"Identifier","messageId":"unusedVar","endLine":805,"endColumn":46,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-use-before-define","severity":2,"message":"'defaultValueInput' was used before it was defined.","line":920,"column":20,"nodeType":"Identifier","messageId":"usedBeforeDefined","endLine":920,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":950,"column":6,"nodeType":"MemberExpression","messageId":"unexpected","endLine":950,"endColumn":19,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[26528,26586],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1007,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1007,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1008,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1008,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1009,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1009,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1010,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1010,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1011,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1011,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1021,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1021,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1022,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1022,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1023,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1023,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1024,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1024,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1045,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1045,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1046,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1046,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1052,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1052,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1053,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1053,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1054,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1054,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1055,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1055,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1056,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1056,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'property' is defined but never used.","line":1178,"column":45,"nodeType":"Identifier","messageId":"unusedVar","endLine":1178,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright ©2023-2024, https://wikisphere.org\n */\n\n/* eslint-disable no-tabs */\n\n// eslint-disable-next-line no-unused-vars\nconst VisualDataFormField = function ( phpConfig, windowManager, schemas ) {\n\tvar Config = phpConfig;\n\tvar WindowManager = windowManager;\n\tvar Schemas = schemas;\n\tvar VisualDataInputConfigInst = new VisualDataInputConfig(\n\t\tphpConfig,\n\t\twindowManager\n\t);\n\n\tvar ProcessDialog;\n\tvar Model;\n\tvar ParentObj;\n\tvar panelLayout;\n\tvar CurrentKey;\n\tvar Callback;\n\n\tfunction inArray( val, arr ) {\n\t\treturn arr.indexOf( val ) !== -1;\n\t}\n\n\tfunction getCurrentItem() {\n\t\tif ( !( CurrentKey in ParentObj ) ) {\n\t\t\treturn null;\n\t\t}\n\t\treturn ParentObj[ CurrentKey ];\n\t}\n\n\tfunction getPropertyValue( value, propName ) {\n\t\treturn VisualDataSchemas.getPropertyValue( value, propName, {\n\t\t\tgetCurrentItem: getCurrentItem,\n\t\t\tgetModel: getModel\n\t\t} );\n\t}\n\n\tfunction getModel() {\n\t\treturn Model;\n\t}\n\n\tfunction getAvailableInputs(\n\t\tpropertyModel,\n\t\tSMWproperty,\n\t\tJSONSchemaType,\n\t\tstringFormat,\n\t\tmultipleItems\n\t) {\n\t\tif ( Config.SMW && propertyModel === 'smw-property' ) {\n\t\t\tvar dataType = VisualDataSMW.getSemanticProperty( SMWproperty, 'type' );\n\t\t\tif ( !dataType ) {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error( SMWproperty + ' property does not exist' );\n\t\t\t\tdataType = '_wpg';\n\t\t\t}\n\t\t\tvar ret = VisualDataSMW.getAvailableInputs( dataType );\n\t\t} else {\n\t\t\tret = VisualDataFunctions.getAvailableInputs(\n\t\t\t\tJSONSchemaType,\n\t\t\t\tstringFormat,\n\t\t\t\tConfig\n\t\t\t);\n\t\t}\n\n\t\t// remove multiselects\n\t\tif ( multipleItems === false ) {\n\t\t\treturn ret.filter( ( x ) => !VisualDataFunctions.isMultiselect( x ) );\n\t\t}\n\n\t\t// remove options inputs and lookup widgets\n\t\t// except multiselect\n\t\treturn ret.filter(\n\t\t\t( x ) => ( VisualDataFunctions.lookupInputs.indexOf( x ) === -1 &&\n\t\t\t\t\tVisualDataFunctions.optionsInputs.indexOf( x ) === -1 ) ||\n\t\t\t\tVisualDataFunctions.isMultiselect( x )\n\t\t);\n\t}\n\n\t// @TODO move in VisualDataInputConfig ?\n\tfunction handleOptionsInputs( availableInputsInput, parentItems ) {\n\t\tvar items = [];\n\t\tvar layout = new OO.ui.PanelLayout( {\n\t\t\texpanded: false,\n\t\t\tpadded: true,\n\t\t\tframed: true,\n\t\t\tclasses: []\n\t\t} );\n\t\tvar fieldset = new OO.ui.FieldsetLayout( {\n\t\t\tlabel: 'Options'\n\t\t} );\n\t\tlayout.$element.append( fieldset.$element );\n\n\t\tparentItems.push( layout );\n\n\t\tvar optionsValues = getPropertyValue( 'options-values' ) || [];\n\n\t\tvar selectOptionsFromValue = 'options-values';\n\t\tvar wikilistValue = getPropertyValue( 'options-wikilist' );\n\n\t\t// @TODO add more data sources\n\t\tif ( !optionsValues.length ) {\n\t\t\tif ( wikilistValue ) {\n\t\t\t\tselectOptionsFromValue = 'options-wikilist';\n\t\t\t} else if ( getPropertyValue( 'options-askquery' ) ) {\n\t\t\t\tselectOptionsFromValue = 'options-askquery';\n\t\t\t}\n\t\t}\n\n\t\tvar selectOptionsFrom = new OO.ui.RadioSelectInputWidget( {\n\t\t\toptions: [\n\t\t\t\t{\n\t\t\t\t\tdata: 'options-values',\n\t\t\t\t\tlabel: mw.msg(\n\t\t\t\t\t\t'visualdata-jsmodule-formfield-optionsfrom-values'\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdata: 'options-wikilist',\n\t\t\t\t\tlabel: mw.msg(\n\t\t\t\t\t\t'visualdata-jsmodule-formfield-optionsfrom-wikilist'\n\t\t\t\t\t)\n\t\t\t\t},\n\t\t\t\t{\n\t\t\t\t\tdata: 'options-askquery',\n\t\t\t\t\tlabel: mw.msg(\n\t\t\t\t\t\t'visualdata-jsmodule-formfield-optionsfrom-askquery'\n\t\t\t\t\t)\n\t\t\t\t}\n\t\t\t],\n\t\t\tvalue: selectOptionsFromValue\n\t\t} );\n\n\t\tvar nullValueInput = new OO.ui.ToggleSwitchWidget( {\n\t\t\tvalue: getPropertyValue( 'options-allow-null' )\n\t\t} );\n\n\t\tvar fieldNullValue = new OO.ui.FieldLayout( nullValueInput, {\n\t\t\tlabel: '',\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-nullvalue' ),\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( fieldNullValue );\n\n\t\t// used to clear \"options-values\", \"options-wikilist\", \"options-askquery\"\n\t\t// Model.selectOptionsFrom = selectOptionsFrom;\n\n\t\tvar fieldSelectOptionsFrom = new OO.ui.FieldLayout( selectOptionsFrom, {\n\t\t\tlabel: new OO.ui.HtmlSnippet(\n\t\t\t\tmw.msg( 'visualdata-jsmodule-formfield-options-from' )\n\t\t\t),\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( fieldSelectOptionsFrom );\n\n\t\tvar messageWidgetOptionsAskQuery = new OO.ui.MessageWidget( {\n\t\t\ttype: 'info',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-message-options-askquery' ),\n\t\t\tinvisibleLabel: false,\n\t\t\tclasses: [ 'VisualDataFormFieldMessage' ]\n\t\t} );\n\n\t\titems.push( messageWidgetOptionsAskQuery );\n\n\t\tvar optionsValuesInput = new OO.ui.TagMultiselectWidget( {\n\t\t\tselected: optionsValues.filter( ( x ) => x !== '' ),\n\t\t\tallowArbitrary: true,\n\t\t\torientation: 'vertical'\n\t\t} );\n\n\t\tvar fieldOptionsValues = new OO.ui.FieldLayout( optionsValuesInput, {\n\t\t\tlabel: '',\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-options-values' ),\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( fieldOptionsValues );\n\n\t\tvar wikilistInput = new mw.widgets.TitleInputWidget( {\n\t\t\tvalue: wikilistValue\n\t\t} );\n\n\t\tvar fieldWikilist = new OO.ui.FieldLayout( wikilistInput, {\n\t\t\tlabel: '',\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-wikilist' ),\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( fieldWikilist );\n\n\t\t// ////////\t@credits: WikiTeq\t///////\n\t\tvar optionsLabelFormulaInput = new OO.ui.MultilineTextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'options-label-formula' ),\n\t\t\tautosize: true,\n\t\t\trows: 1\n\t\t} );\n\n\t\tvar fieldOptionsLabelFormula = new OO.ui.FieldLayout(\n\t\t\toptionsLabelFormulaInput,\n\t\t\t{\n\t\t\t\tlabel: mw.msg(\n\t\t\t\t\t'visualdata-jsmodule-formfield-options-label-formula'\n\t\t\t\t),\n\t\t\t\thelp: mw.msg(\n\t\t\t\t\t'visualdata-jsmodule-formfield-options-label-formula-help'\n\t\t\t\t),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t}\n\t\t);\n\n\t\titems.push( fieldOptionsLabelFormula );\n\n\t\t// ///////////////////////////\n\n\t\tfunction hasVisibleItems( thisFieldset ) {\n\t\t\tfor ( var item of thisFieldset.items ) {\n\t\t\t\tif ( item.isVisible() ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tselectOptionsFrom.on( 'change', ( value ) => {\n\t\t\tfieldOptionsValues.toggle( value === 'options-values' );\n\t\t\tfieldWikilist.toggle( value === 'options-wikilist' );\n\t\t\tfieldOptionsLabelFormula.toggle( value !== 'options-askquery' );\n\t\t\tmessageWidgetOptionsAskQuery.toggle( value === 'options-askquery' );\n\t\t} );\n\n\t\tvar modelMap = {\n\t\t\tselectOptionsFrom: selectOptionsFrom,\n\t\t\t'options-allow-null': nullValueInput,\n\t\t\t'options-values': optionsValuesInput,\n\t\t\t'options-wikilist': wikilistInput,\n\t\t\t'options-label-formula': optionsLabelFormulaInput\n\t\t};\n\n\t\tfunction updateModel( thisVisibleItems ) {\n\t\t\tfor ( var i in modelMap ) {\n\t\t\t\tif ( thisVisibleItems ) {\n\t\t\t\t\tModel[ i ] = modelMap[ i ];\n\t\t\t\t} else {\n\t\t\t\t\tdelete Model[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction onSelectAvailableInputs() {\n\t\t\tvar availableInputsValue = availableInputsInput.getValue();\n\t\t\tvar thisSelectOptionsFromValue = selectOptionsFrom.getValue();\n\t\t\tvar optionInput = inArray( availableInputsValue, VisualDataFunctions.optionsInputs );\n\n\t\t\tfieldSelectOptionsFrom.toggle( optionInput );\n\n\t\t\tmessageWidgetOptionsAskQuery.toggle( optionInput && thisSelectOptionsFromValue === 'options-wikilist' );\n\t\t\tfieldNullValue.toggle( optionInput );\n\n\t\t\tfieldOptionsValues.toggle(\n\t\t\t\toptionInput &&\n\t\t\t\t\t( !thisSelectOptionsFromValue ||\n\t\t\t\t\t\tthisSelectOptionsFromValue === 'options-values' )\n\t\t\t);\n\t\t\tfieldWikilist.toggle( optionInput && thisSelectOptionsFromValue === 'options-wikilist' );\n\n\t\t\tfieldOptionsLabelFormula.toggle(\n\t\t\t\tthisSelectOptionsFromValue !== 'options-askquery' &&\n\t\t\t\tinArray( availableInputsValue, VisualDataFunctions.labelFormulaInputs ) &&\n\t\t\t\t!inArray( availableInputsValue, VisualDataFunctions.lookupInputs )\n\t\t\t);\n\n\t\t\tvar thisVisibleItems = hasVisibleItems( fieldset );\n\t\t\tupdateModel( thisVisibleItems );\n\t\t\tlayout.toggle( thisVisibleItems );\n\t\t}\n\n\t\tfieldset.addItems( items );\n\n\t\tvar visibleItems = hasVisibleItems( fieldset );\n\t\tupdateModel( visibleItems );\n\t\tlayout.toggle( visibleItems );\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tavailableInputsInput.on( 'change', ( value ) => {\n\t\t\tonSelectAvailableInputs();\n\t\t} );\n\n\t\tonSelectAvailableInputs();\n\n\t\treturn selectOptionsFrom;\n\t}\n\n\tfunction handleQueryOptions( availableInputsInput, selectOptionsFrom, parentItems ) {\n\t\tvar items = [];\n\t\tvar layout = new OO.ui.PanelLayout( {\n\t\t\texpanded: false,\n\t\t\tpadded: true,\n\t\t\tframed: true,\n\t\t\tclasses: []\n\t\t} );\n\t\tvar fieldset = new OO.ui.FieldsetLayout( {\n\t\t\tlabel: 'Options'\n\t\t} );\n\t\tlayout.$element.append( fieldset.$element );\n\n\t\tparentItems.push( layout );\n\n\t\tvar askqueryInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'options-askquery' )\n\t\t} );\n\n\t\tvar fieldAskquery = new OO.ui.FieldLayout( askqueryInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-askquery-label' ),\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-askquery-help' ),\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( fieldAskquery );\n\n\t\tvar schemaInput = new OO.ui.DropdownInputWidget( {\n\t\t\toptions: VisualDataFunctions.createDropDownOptions(\n\t\t\t\tObject.keys( Schemas ),\n\t\t\t\t{ key: 'value' }\n\t\t\t),\n\t\t\tvalue: getPropertyValue( 'askquery-schema' )\n\t\t} );\n\n\t\tvar fieldSchema = new OO.ui.FieldLayout( schemaInput, {\n\t\t\tlabel: mw.msg(\n\t\t\t\t'visualdata-jsmodule-formfield-askquery-schema-label'\n\t\t\t),\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-askquery-schema-help' ),\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( fieldSchema );\n\n\t\tvar printoutsInputValue = getPropertyValue( 'askquery-printouts' ) || [];\n\n\t\t// var printoutsInput = new mw.widgets.TitlesMultiselectWidget({\n\t\t// \tselected: printoutsInputValue,\n\n\t\t// https://www.semantic-mediawiki.org/wiki/Help:Namespaces\n\t\t// \tnamespace: 102,\n\t\t// });\n\n\t\tvar printoutsInput = new OO.ui.TagMultiselectWidget( {\n\t\t\tallowArbitrary: true,\n\t\t\tselected: printoutsInputValue\n\t\t} );\n\n\t\tvar fieldPrintouts = new OO.ui.FieldLayout( printoutsInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-printouts' ),\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-printouts-help' ),\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( fieldPrintouts );\n\n\t\tvar optionFormulaInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'options-query-formula' )\n\t\t} );\n\n\t\tvar fieldOptionFormula = new OO.ui.FieldLayout( optionFormulaInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-optionformula' ),\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-optionformula-help' ),\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( fieldOptionFormula );\n\n\t\t// ////////\t@credits: WikiTeq\t///////\n\n\t\tvar optionsLabelFormulaInput = new OO.ui.MultilineTextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'options-label-formula' ),\n\t\t\tautosize: true,\n\t\t\trows: 1\n\t\t} );\n\n\t\tvar fieldOptionsLabelFormula = new OO.ui.FieldLayout(\n\t\t\toptionsLabelFormulaInput,\n\t\t\t{\n\t\t\t\tlabel: mw.msg(\n\t\t\t\t\t'visualdata-jsmodule-formfield-options-label-formula'\n\t\t\t\t),\n\t\t\t\thelp: mw.msg(\n\t\t\t\t\t'visualdata-jsmodule-formfield-options-label-formula-help'\n\t\t\t\t),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t}\n\t\t);\n\n\t\titems.push( fieldOptionsLabelFormula );\n\t\t// ///////////////////////////\n\n\t\tvar modelMap = {\n\t\t\t'options-askquery': askqueryInput,\n\t\t\t'askquery-schema': schemaInput,\n\t\t\t'askquery-printouts': printoutsInput,\n\t\t\t'options-query-formula': optionFormulaInput,\n\t\t\t'options-label-formula': optionsLabelFormulaInput\n\t\t};\n\n\t\tfunction updateModel( thisVisibleItems ) {\n\t\t\tfor ( var i in modelMap ) {\n\t\t\t\tif ( thisVisibleItems ) {\n\t\t\t\t\tModel[ i ] = modelMap[ i ];\n\t\t\t\t} else {\n\t\t\t\t\tdelete Model[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tfunction hasVisibleItems( thisFieldset ) {\n\t\t\tfor ( var item of thisFieldset.items ) {\n\t\t\t\tif ( item.isVisible() ) {\n\t\t\t\t\treturn true;\n\t\t\t\t}\n\t\t\t}\n\t\t\treturn false;\n\t\t}\n\n\t\tfunction onSelectAvailableInputs() {\n\t\t\tvar availableInputsValue = availableInputsInput.getValue();\n\t\t\tvar selectOptionsFromValue = selectOptionsFrom.getValue();\n\n\t\t\tvar optionInput = ( selectOptionsFromValue === 'options-askquery' &&\n\t\t\t\tinArray( availableInputsValue, VisualDataFunctions.optionsInputs ) );\n\t\t\tvar lookupInput = inArray( availableInputsValue, VisualDataFunctions.lookupInputs );\n\t\t\tvar labelFormulaInput = ( selectOptionsFromValue === 'options-askquery' &&\n\t\t\t\tinArray( availableInputsValue, VisualDataFunctions.labelFormulaInputs ) );\n\n\t\t\tfieldAskquery.toggle( lookupInput || optionInput );\n\t\t\tfieldPrintouts.toggle( lookupInput || optionInput );\n\t\t\tfieldSchema.toggle( lookupInput || optionInput );\n\t\t\tfieldOptionFormula.toggle( lookupInput || optionInput );\n\t\t\tfieldOptionsLabelFormula.toggle( labelFormulaInput );\n\n\t\t\tvar thisVisibleItems = hasVisibleItems( fieldset );\n\t\t\tupdateModel( thisVisibleItems );\n\t\t\tlayout.toggle( thisVisibleItems );\n\t\t}\n\n\t\tfieldset.addItems( items );\n\n\t\tvar visibleItems = hasVisibleItems( fieldset );\n\t\tupdateModel( visibleItems );\n\t\tlayout.toggle( visibleItems );\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tavailableInputsInput.on( 'change', ( value ) => {\n\t\t\tonSelectAvailableInputs();\n\t\t} );\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tselectOptionsFrom.on( 'change', ( value ) => {\n\t\t\tonSelectAvailableInputs();\n\t\t} );\n\n\t\tonSelectAvailableInputs();\n\t}\n\n\tfunction PanelLayout( config ) {\n\t\tPanelLayout.super.call( this, config );\n\n\t\tthis.fieldset = new OO.ui.FieldsetLayout( {\n\t\t\tlabel: ''\n\t\t} );\n\n\t\tthis.populateFieldset();\n\n\t\tthis.$element.append( this.fieldset.$element );\n\t}\n\n\tOO.inheritClass( PanelLayout, OO.ui.PanelLayout );\n\tPanelLayout.prototype.populateFieldset = function () {\n\t\tthis.fieldset.clearItems();\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tvar data = this.data;\n\t\tvar items = [];\n\n\t\tvar currentItem = getCurrentItem();\n\t\tvar parentSchema = {};\n\n\t\t// @see VisualDataSchemas\n\t\tif (\n\t\t\tcurrentItem &&\n\t\t\tcurrentItem.type === 'array' &&\n\t\t\tVisualDataFunctions.isObject( currentItem.items )\n\t\t) {\n\t\t\tparentSchema = currentItem;\n\t\t\tcurrentItem = currentItem.items; // JSON.parse(JSON.stringify(currentItem.items));\n\t\t}\n\n\t\tvar nameInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'name' ) || CurrentKey\n\t\t} );\n\n\t\tModel.name = nameInput;\n\n\t\titems.push(\n\t\t\tnew OO.ui.FieldLayout( nameInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-name' ),\n\t\t\t\thelpInline: true,\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-name-help' ),\n\t\t\t\talign: 'top'\n\t\t\t} )\n\t\t);\n\n\t\tvar visibilityInputValue = getPropertyValue( 'visibility' );\n\n\t\tvar visibilityInput = new OO.ui.DropdownInputWidget( {\n\t\t\toptions: VisualDataFunctions.createDropDownOptions( {\n\t\t\t\tvisible: mw.msg( 'visualdata-jsmodule-formfield-visibility-visible' ),\n\t\t\t\tcondition: mw.msg( 'visualdata-jsmodule-formfield-visibility-condition' ),\n\t\t\t\thidden: mw.msg( 'visualdata-jsmodule-formfield-visibility-hidden' ),\n\t\t\t\t'oncreate-only': mw.msg(\n\t\t\t\t\t'visualdata-jsmodule-formfield-visibility-create-only'\n\t\t\t\t)\n\t\t\t} ),\n\t\t\tvalue: visibilityInputValue\n\t\t} );\n\n\t\tModel.visibility = visibilityInput;\n\n\t\titems.push(\n\t\t\tnew OO.ui.FieldLayout( visibilityInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-visibility-label' ),\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-visibility-help' ),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t} )\n\t\t);\n\n\t\t// ------------------ show-if -----------------\n\n\t\tvar otherFields = Object.keys( ParentObj ).filter( ( x ) => ( x !== CurrentKey && ParentObj[ x ].wiki.type === 'property' &&\n\t\t\t\tParentObj[ x ].wiki[ 'multiple-items' ] === false ) );\n\n\t\tvar showifFieldInput = new OO.ui.DropdownInputWidget( {\n\t\t\toptions: VisualDataFunctions.createDropDownOptions( otherFields, { key: 'value' } ),\n\t\t\tvalue: getPropertyValue( 'showif-field' )\n\t\t} );\n\n\t\tvar showifConditionInput = new OO.ui.DropdownInputWidget( {\n\t\t\t// @https://github.com/Knowledge-Wiki/SemanticResultFormats/blob/561e5304e17fccc894d7b38ab88a03b75606d6c8/formats/datatables/Api.php\n\t\t\toptions: VisualDataFunctions.createDropDownOptions( {\n\t\t\t\t'=': mw.msg( 'visualdata-jsmodule-formfield-showif-condition-=' ),\n\t\t\t\t'!=': mw.msg( 'visualdata-jsmodule-formfield-showif-condition-!=' ),\n\t\t\t\tstarts: mw.msg( 'visualdata-jsmodule-formfield-showif-condition-starts' ),\n\t\t\t\t'!starts': mw.msg( 'visualdata-jsmodule-formfield-showif-condition-!starts' ),\n\t\t\t\tcontains: mw.msg( 'visualdata-jsmodule-formfield-showif-condition-contains' ),\n\t\t\t\t'!contains': mw.msg( 'visualdata-jsmodule-formfield-showif-condition-!contains' ),\n\t\t\t\tends: mw.msg( 'visualdata-jsmodule-formfield-showif-condition-ends' ),\n\t\t\t\t'!ends': mw.msg( 'visualdata-jsmodule-formfield-showif-condition-!ends' ),\n\t\t\t\t'!null': mw.msg( 'visualdata-jsmodule-formfield-showif-condition-!null' ),\n\t\t\t\tregex: mw.msg( 'visualdata-jsmodule-formfield-showif-condition-regex' )\n\t\t\t} ),\n\t\t\tvalue: getPropertyValue( 'showif-condition' )\n\t\t} );\n\n\t\tvar showifValueInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'showif-value' )\n\t\t} );\n\n\t\tshowifConditionInput.on( 'change', ( value ) => {\n\t\t\tshowifValueInput.toggle( value !== '!null' );\n\t\t\tupdateModelShowif( getPropertyValue( 'visibility' ) === 'condition' );\n\t\t} );\n\n\t\tshowifValueInput.toggle( getPropertyValue( 'showif-condition' ) !== '!null' );\n\n\t\tvar layoutHorizontal = new OO.ui.HorizontalLayout( { items: [\n\t\t\tshowifFieldInput,\n\t\t\tshowifConditionInput,\n\t\t\tshowifValueInput\n\t\t] } );\n\n\t\t// Model[ 'showif-field' ] = showifFieldInput;\n\t\t// Model[ 'showif-equal' ] = showifConditionInput;\n\t\t// Model[ 'showif-value' ] = showifValueInput;\n\n\t\tvar showifField = new OO.ui.FieldLayout(\n\t\t\tnew OO.ui.Widget( {\n\t\t\t\tcontent: [ layoutHorizontal ]\n\t\t\t} ),\n\t\t\t{\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-showif' ),\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-showif-help' ),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t}\n\t\t);\n\n\t\titems.push( showifField );\n\n\t\tvar modelMap = {\n\t\t\t'showif-field': showifFieldInput,\n\t\t\t'showif-condition': showifConditionInput,\n\t\t\t'showif-value': showifValueInput\n\t\t};\n\n\t\tfunction updateModelShowif( thisVisibleItems ) {\n\t\t\tfor ( var i in modelMap ) {\n\t\t\t\tif ( thisVisibleItems ) {\n\t\t\t\t\tModel[ i ] = modelMap[ i ];\n\t\t\t\t} else {\n\t\t\t\t\tdelete Model[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t\tif ( getPropertyValue( 'showif-condition' ) === '!null' ) {\n\t\t\t\tdelete Model[ 'showif-value' ];\n\t\t\t}\n\t\t}\n\n\t\tupdateModelShowif( visibilityInputValue === 'condition' );\n\t\tshowifField.toggle( visibilityInputValue === 'condition' );\n\n\t\t// ------------------ show-if >>>>>>>>>>>>>>>>>\n\n\t\tvar labelValue = getPropertyValue( 'label' );\n\n\t\tvar labelInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: labelValue\n\t\t} );\n\n\t\tModel.label = labelInput;\n\n\t\tvar labelField = new OO.ui.FieldLayout( labelInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-label' ),\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( labelField );\n\n\t\tvar helpMessageInput = new OO.ui.MultilineTextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'help-message' ),\n\t\t\tautosize: true,\n\t\t\trows: 2\n\t\t} );\n\n\t\tModel[ 'help-message' ] = helpMessageInput;\n\n\t\tvar helpMessageField = new OO.ui.FieldLayout( helpMessageInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-help-message' ),\n\t\t\thelpInline: true,\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-help-message-help' ),\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( helpMessageField );\n\n\t\tvar propertyModelValue = 'json-schema';\n\t\tif ( Config.SMW ) {\n\t\t\tpropertyModelValue = getPropertyValue( 'propertyModel' ) || 'smw-property';\n\t\t\tvar propertyModelInput = new OO.ui.RadioSelectInputWidget( {\n\t\t\t\toptions: [\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: 'smw-property',\n\t\t\t\t\t\tlabel: mw.msg(\n\t\t\t\t\t\t\t'visualdata-jsmodule-formfield-propertymodel-smwproperty'\n\t\t\t\t\t\t)\n\t\t\t\t\t},\n\t\t\t\t\t{\n\t\t\t\t\t\tdata: 'json-schema',\n\t\t\t\t\t\tlabel: mw.msg(\n\t\t\t\t\t\t\t'visualdata-jsmodule-formfield-propertymodel-jsonschema'\n\t\t\t\t\t\t)\n\t\t\t\t\t}\n\t\t\t\t],\n\t\t\t\tvalue: propertyModelValue\n\t\t\t} );\n\n\t\t\tModel.propertyModel = propertyModelInput;\n\n\t\t\titems.push(\n\t\t\t\tnew OO.ui.FieldLayout( propertyModelInput, {\n\t\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-propertymodel' ),\n\t\t\t\t\thelpInline: true,\n\t\t\t\t\talign: 'top'\n\t\t\t\t} )\n\t\t\t);\n\n\t\t\tvar SMWpropertiesValue =\n\t\t\t\tgetPropertyValue( 'SMW-property' ) ||\n\t\t\t\tObject.keys( VisualDataSMW.getSemanticProperties() )[ 0 ];\n\n\t\t\tvar SMWpropertiesInput = new OO.ui.DropdownInputWidget( {\n\t\t\t\toptions: VisualDataFunctions.createDropDownOptions(\n\t\t\t\t\tObject.keys( VisualDataSMW.getSemanticProperties() ),\n\t\t\t\t\t{ key: 'value' }\n\t\t\t\t),\n\t\t\t\tvalue: SMWpropertiesValue\n\t\t\t} );\n\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tSMWpropertiesInput.on( 'change', ( value ) => {\n\t\t\t\tredrawAvailableInputs();\n\t\t\t} );\n\n\t\t\tModel[ 'SMW-property' ] = SMWpropertiesInput;\n\n\t\t\tvar fieldSMWpropertiesInput = new OO.ui.FieldLayout( SMWpropertiesInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-smwproperties' ),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t} );\n\n\t\t\titems.push( fieldSMWpropertiesInput );\n\t\t}\n\n\t\t// var smwTypesInput = new OO.ui.DropdownInputWidget({\n\t\t// \toptions: VisualDataFunctions.createDropDownOptions(VisualDataSMW.TypeLabels),\n\t\t// \tvalue:\n\t\t// });\n\n\t\tvar jsonSchemaValue = getPropertyValue( 'jsonSchema-type' ) || 'string';\n\n\t\tvar jsonSchemaInput = new OO.ui.DropdownInputWidget( {\n\t\t\toptions: VisualDataFunctions.createDropDownOptions(\n\t\t\t\t[\n\t\t\t\t\t'string',\n\t\t\t\t\t'number',\n\t\t\t\t\t'integer',\n\t\t\t\t\t'boolean'\n\t\t\t\t\t// select rather a type and toggle \"multiple values\"\n\t\t\t\t\t// \"array\",\n\t\t\t\t],\n\t\t\t\t{ key: 'value' }\n\t\t\t),\n\t\t\tvalue: jsonSchemaValue\n\t\t} );\n\n\t\tModel[ 'jsonSchema-type' ] = jsonSchemaInput;\n\n\t\tvar fieldjsonSchemaInput = new OO.ui.FieldLayout( jsonSchemaInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-schematypes' ),\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( fieldjsonSchemaInput );\n\n\t\tvar textFormat = [\n\t\t\t'color',\n\t\t\t'date',\n\t\t\t'datetime',\n\t\t\t'datetime-local',\n\t\t\t'email',\n\t\t\t'month',\n\t\t\t'password',\n\t\t\t'number',\n\t\t\t'range',\n\t\t\t'tel',\n\t\t\t'text',\n\t\t\t'textarea',\n\t\t\t'time',\n\t\t\t'url',\n\t\t\t'week'\n\t\t];\n\n\t\tvar jsonSchemaFormatValue = getPropertyValue( 'jsonSchema-format' ) || 'text';\n\t\tvar jsonSchemaFormatInput = new OO.ui.DropdownInputWidget( {\n\t\t\t// , { key: \"value\" }\n\t\t\toptions: VisualDataFunctions.createDropDownOptions( textFormat, {\n\t\t\t\tkey: 'value'\n\t\t\t} ),\n\t\t\tvalue: jsonSchemaFormatValue\n\t\t} );\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tjsonSchemaFormatInput.on( 'change', ( value ) => {\n\t\t\tredrawAvailableInputs();\n\t\t} );\n\n\t\tModel[ 'jsonSchema-format' ] = jsonSchemaFormatInput;\n\n\t\tvar fieldjsonSchemaFormatInput = new OO.ui.FieldLayout(\n\t\t\tjsonSchemaFormatInput,\n\t\t\t{\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-schematextsubtypes' ),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t}\n\t\t);\n\n\t\titems.push( fieldjsonSchemaFormatInput );\n\n\t\tjsonSchemaInput.on( 'change', ( value ) => {\n\t\t\tswitch ( value ) {\n\t\t\t\tcase 'string':\n\t\t\t\t\tfieldjsonSchemaFormatInput.toggle( true );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'integer':\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'boolean':\n\t\t\t\t\tfieldjsonSchemaFormatInput.toggle( false );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tredrawAvailableInputs();\n\t\t} );\n\n\t\tif ( Config.SMW ) {\n\t\t\tfieldSMWpropertiesInput.toggle( propertyModelValue === 'smw-property' );\n\t\t}\n\t\tfieldjsonSchemaInput.toggle( propertyModelValue === 'json-schema' );\n\t\tfieldjsonSchemaFormatInput.toggle(\n\t\t\tpropertyModelValue === 'json-schema' && jsonSchemaValue === 'string'\n\t\t);\n\n\t\tif ( Config.SMW ) {\n\t\t\tpropertyModelInput.on( 'change', ( value ) => {\n\t\t\t\tswitch ( value ) {\n\t\t\t\t\tcase 'smw-property':\n\t\t\t\t\t\tfieldSMWpropertiesInput.toggle( true );\n\t\t\t\t\t\tfieldjsonSchemaInput.toggle( false );\n\t\t\t\t\t\tfieldjsonSchemaFormatInput.toggle( false );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'json-schema':\n\t\t\t\t\t\tfieldSMWpropertiesInput.toggle( false );\n\t\t\t\t\t\tfieldjsonSchemaInput.toggle( true );\n\t\t\t\t\t\tfieldjsonSchemaFormatInput.toggle(\n\t\t\t\t\t\t\tgetPropertyValue( 'jsonSchema-type' ) === 'string'\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tredrawAvailableInputs();\n\t\t\t} );\n\t\t}\n\n\t\tvar multipleItemsInputValue =\n\t\t\tgetPropertyValue( 'multiple-items' ) || parentSchema.type === 'array';\n\t\tvar multipleItemsInput = new OO.ui.ToggleSwitchWidget( {\n\t\t\tvalue: multipleItemsInputValue\n\t\t} );\n\n\t\tModel[ 'multiple-items' ] = multipleItemsInput;\n\n\t\tvar layoutParentSchema = VisualDataSchemas.parentSchemaContainer(\n\t\t\t( Model.parentSchema = {} ),\n\t\t\t{\n\t\t\t\tgetPropertyValue: getPropertyValue\n\t\t\t}\n\t\t);\n\t\t// layoutParentSchema.toggle( multipleItemsInputValue );\n\n\t\tvar messageWidget = new OO.ui.MessageWidget( {\n\t\t\ttype: 'info',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-message-more-inputs' ),\n\t\t\tinvisibleLabel: false,\n\t\t\tclasses: [ 'VisualDataFormFieldMessage' ]\n\t\t} );\n\n\t\tvar fieldMultipleValues = new OO.ui.FieldLayout( multipleItemsInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-multiple-values' ),\n\t\t\thelp: '',\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\titems.push( fieldMultipleValues );\n\t\titems.push( layoutParentSchema );\n\n\t\tvar availableInputsValue = getPropertyValue( 'preferred-input' );\n\t\t// preferred input based on property type\n\t\tvar availableInputsInput = new OO.ui.DropdownInputWidget( {\n\t\t\t// , { key: \"value\" }\n\t\t\toptions: VisualDataFunctions.createDropDownOptions(\n\t\t\t\tgetAvailableInputs(\n\t\t\t\t\tpropertyModelValue,\n\t\t\t\t\tSMWpropertiesValue,\n\t\t\t\t\tjsonSchemaValue,\n\t\t\t\t\tjsonSchemaFormatValue,\n\t\t\t\t\tmultipleItemsInputValue\n\t\t\t\t),\n\t\t\t\t{\n\t\t\t\t\tkey: 'value'\n\t\t\t\t}\n\t\t\t),\n\t\t\tvalue: availableInputsValue\n\t\t} );\n\n\t\tavailableInputsInput.on( 'change', ( value ) => {\n\t\t\tvar thisDefaultValueInput = getDefaultValueInput();\n\n\t\t\t// eslint-disable-next-line no-use-before-define\n\t\t\tModel.default = defaultValueInput;\n\n\t\t\tif (\n\t\t\t\tvalue === 'OO.ui.SelectFileWidget' &&\n\t\t\t\t!( 'accept' in thisDefaultValueInput )\n\t\t\t) {\n\t\t\t\tthisDefaultValueInput.accept = Config.allowedMimeTypes;\n\t\t\t}\n\t\t} );\n\n\t\tModel[ 'preferred-input' ] = availableInputsInput;\n\n\t\tvar inputConfigButton = new OO.ui.ButtonWidget( {\n\t\t\ticon: 'settings',\n\t\t\tflags: []\n\t\t} );\n\n\t\tvar defaultInputConfig = getPropertyValue( 'input-config' ) || {};\n\n\t\tModel[ 'input-config' ] = new VisualDataFunctions.MockupOOUIClass(\n\t\t\tdefaultInputConfig\n\t\t);\n\n\t\tinputConfigButton.on( 'click', () => {\n\t\t\tvar dataType = null;\n\t\t\tif ( Config.SMW ) {\n\t\t\t\tvar SMWproperty = getPropertyValue( 'SMW-property' );\n\t\t\t\tdataType = VisualDataSMW.getSemanticProperty( SMWproperty, 'type' );\n\t\t\t\tif ( !dataType ) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error( SMWproperty + ' property does not exist' );\n\t\t\t\t\tdataType = '_wpg';\n\t\t\t\t}\n\t\t\t}\n\t\t\tVisualDataInputConfigInst.openDialog(\n\t\t\t\tModel[ 'input-config' ],\n\t\t\t\tavailableInputsInput.getValue(),\n\t\t\t\tVisualDataFunctions.getInputHelpUrl( availableInputsInput.getValue() ),\n\t\t\t\tnull\n\t\t\t);\n\t\t} );\n\n\t\titems.push( messageWidget );\n\n\t\titems.push(\n\t\t\tnew OO.ui.ActionFieldLayout( availableInputsInput, inputConfigButton, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-availableinputs' ),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t} )\n\t\t);\n\n\t\tvar selectOptionsFrom = handleOptionsInputs( availableInputsInput, items );\n\t\thandleQueryOptions( availableInputsInput, selectOptionsFrom, items );\n\n\t\tvar requiredInput = new OO.ui.ToggleSwitchWidget( {\n\t\t\tvalue: !!getPropertyValue( 'required' )\n\t\t} );\n\n\t\tModel.required = requiredInput;\n\n\t\tvar fieldRequiredInput = new OO.ui.FieldLayout( requiredInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-required' ),\n\t\t\thelpInline: true,\n\t\t\talign: 'top'\n\t\t} );\n\n\t\tmultipleItemsInput.on( 'change', ( value ) => {\n\t\t\tredrawAvailableInputs();\n\t\t\tlayoutParentSchema.toggle( value );\n\t\t\tfieldRequiredInput.toggle( !value );\n\t\t\tnameInput.setDisabled( value );\n\t\t} );\n\n\t\tfieldRequiredInput.toggle( !multipleItemsInputValue );\n\n\t\titems.push( fieldRequiredInput );\n\n\t\tfunction getDefaultValueInput() {\n\t\t\t// @ATTENTION ! don't get the specific input othwerwise\n\t\t\t// the default values cannot be parsed as wikitext\n\t\t\t// print always a textInput and cast\n\t\t\t// the value server-side\n\n\t\t\tvar ret;\n\n\t\t\t// var availableInputs = getAvailableInputs(\n\t\t\t// \tgetPropertyValue(\"propertyModel\") || \"json-schema\",\n\t\t\t// \tgetPropertyValue(\"SMW-property\"),\n\t\t\t// \tgetPropertyValue(\"jsonSchema-type\"),\n\t\t\t// \t\"text\",\n\t\t\t// \tgetPropertyValue(\"multiple-items\")\n\t\t\t// );\n\n\t\t\t// @TODO use instead availableInputsInput.getValue()\n\t\t\t// as long as all the inputs support the standard\n\t\t\t// OOUI interface for the use with OO.ui.TagMultiselectWidget\n\t\t\t// -> inputWidget\n\t\t\t// var intputName = availableInputs[0]; // availableInputsInput.getValue()\n\n\t\t\t// var inputWidget = VisualDataFunctions.inputInstanceFromName(\n\t\t\t// \tintputName,\n\t\t\t// \t{\n\t\t\t// \t\tid: \"visualdata-jsmodule-formfield-default-value-input\",\n\t\t\t// \t}\n\t\t\t// );\n\n\t\t\tvar inputWidget = new OO.ui.TextInputWidget( {\n\t\t\t\t// value: getPropertyValue( 'default' ),\n\t\t\t\tid: 'visualdata-jsmodule-formfield-default-value-input'\n\t\t\t} );\n\n\t\t\tif ( !getPropertyValue( 'multiple-items' ) ) {\n\t\t\t\tif ( 'default' in Model ) {\n\t\t\t\t\tvar value = Model.default.getValue();\n\t\t\t\t\tif ( Array.isArray( value ) && value.length ) {\n\t\t\t\t\t\tModel.default.setValue( value[ 0 ] );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tinputWidget.setValue( getPropertyValue( 'default' ) );\n\t\t\t\t// set the proper input for each type\n\n\t\t\t\tret = inputWidget;\n\t\t\t\t// return new OO.ui.TextInputWidget({\n\t\t\t\t// \tvalue: getPropertyValue(\"default\"),\n\t\t\t\t// \tid: \"visualdata-jsmodule-formfield-default-value-input\",\n\t\t\t\t// });\n\t\t\t} else {\n\t\t\t\t// OO.ui.TagMultiselectWidget -> inputWidget: inputWidget does not work\n\t\t\t\t// with OO.ui.ToggleSwitchWidget\n\t\t\t\t// if (intputName === \"OO.ui.ToggleSwitchWidget\") {\n\t\t\t\t// \tinputWidget = new OO.ui.NumberInputWidget({\n\t\t\t\t// \t\tmin: 0,\n\t\t\t\t// \t\tmax: 1,\n\t\t\t\t// \t\tid: \"visualdata-jsmodule-formfield-default-value-input\",\n\t\t\t\t// \t});\n\t\t\t\t// }\n\n\t\t\t\tvar value = [];\n\t\t\t\tvar val = getPropertyValue( 'default' );\n\n\t\t\t\tif ( Array.isArray( val ) ) {\n\t\t\t\t\tvalue = val;\n\t\t\t\t} else if ( val !== '' ) {\n\t\t\t\t\tvalue = [ val ];\n\t\t\t\t}\n\n\t\t\t\tret = new OO.ui.TagMultiselectWidget( {\n\t\t\t\t\tvalue: value,\n\t\t\t\t\tselected: value,\n\t\t\t\t\tallowArbitrary: true,\n\t\t\t\t\tallowEditTags: true,\n\t\t\t\t\tallowReordering: true,\n\t\t\t\t\t// 0 means unlimited\n\t\t\t\t\t// tagLimit: !!multipleItemsInputValue ? 0 : 1,\n\t\t\t\t\tdraggable: true,\n\t\t\t\t\tinputPosition: 'outline',\n\t\t\t\t\tinputWidget: inputWidget,\n\t\t\t\t\tid: 'visualdata-jsmodule-formfield-default-value-input'\n\t\t\t\t} );\n\t\t\t}\n\t\t\t$( '#visualdata-jsmodule-formfield-default-value-input' ).replaceWith(\n\t\t\t\tret.$element\n\t\t\t);\n\n\t\t\treturn ret;\n\t\t}\n\n\t\tvar defaultValueInput = getDefaultValueInput();\n\n\t\tModel.default = defaultValueInput;\n\n\t\titems.push(\n\t\t\tnew OO.ui.FieldLayout( defaultValueInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-default' ),\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-default-value-help' ),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t} )\n\t\t);\n\n\t\tvar valueFormulaInput = new OO.ui.MultilineTextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'value-formula' ),\n\t\t\tautosize: true,\n\t\t\trows: 1\n\t\t} );\n\n\t\tModel[ 'value-formula' ] = valueFormulaInput;\n\n\t\titems.push(\n\t\t\tnew OO.ui.FieldLayout( valueFormulaInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-formfield-valueformula' ),\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-formfield-valueformula-help' ),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t} )\n\t\t);\n\n\t\tfunction onVisibilityInputChange( value ) {\n\t\t\tonToggleHiddenInput( value === 'hidden' );\n\t\t\tshowifField.toggle( value === 'condition' );\n\t\t\tupdateModelShowif( value === 'condition' );\n\t\t}\n\n\t\tvisibilityInput.on( 'change', ( value ) => {\n\t\t\tonVisibilityInputChange( value );\n\t\t} );\n\n\t\tfunction onToggleHiddenInput( hidden ) {\n\t\t\tif ( hidden ) {\n\t\t\t\tModel[ 'preferred-input' ].setValue( 'OO.ui.TextInputWidget' );\n\t\t\t}\n\t\t\tavailableInputsInput.setDisabled( hidden );\n\t\t\trequiredInput.setDisabled( hidden );\n\t\t\tfieldMultipleValues.toggle( !hidden );\n\t\t\tlayoutParentSchema.toggle( !hidden && ( getPropertyValue( 'multiple-items' ) || parentSchema.type === 'array' ) );\n\t\t\tnameInput.setDisabled( layoutParentSchema.isVisible() );\n\t\t\tlabelField.toggle( !hidden );\n\t\t\thelpMessageField.toggle( !hidden );\n\t\t}\n\n\t\tonVisibilityInputChange( visibilityInputValue );\n\n\t\tfunction redrawAvailableInputs() {\n\t\t\tavailableInputsInput.setOptions(\n\t\t\t\tVisualDataFunctions.createDropDownOptions(\n\t\t\t\t\tgetAvailableInputs(\n\t\t\t\t\t\tgetPropertyValue( 'propertyModel' ) || 'json-schema',\n\t\t\t\t\t\tgetPropertyValue( 'SMW-property' ),\n\t\t\t\t\t\tgetPropertyValue( 'jsonSchema-type' ),\n\t\t\t\t\t\tgetPropertyValue( 'jsonSchema-format' ),\n\t\t\t\t\t\tgetPropertyValue( 'multiple-items' )\n\t\t\t\t\t),\n\t\t\t\t\t{\n\t\t\t\t\t\tkey: 'value'\n\t\t\t\t\t}\n\t\t\t\t)\n\t\t\t);\n\n\t\t\tvar thisDefaultValueInput = getDefaultValueInput();\n\t\t\tModel.default = thisDefaultValueInput;\n\t\t}\n\n\t\titems = items.filter( ( x ) => !( 'items' in x ) || x.items.length );\n\n\t\tthis.isEmpty = !items.length;\n\n\t\tthis.fieldset.addItems( items );\n\n\t\tsetTimeout( () => {\n\t\t\tVisualDataFunctions.removeNbspFromLayoutHeader(\n\t\t\t\t'#visualdata-processDialogEditField'\n\t\t\t);\n\t\t}, 30 );\n\t};\n\n\t// eslint-disable-next-line no-unused-vars\n\tPanelLayout.prototype.addItem = function ( property ) {\n\t\tthis.populateFieldset();\n\t};\n\n\tfunction ProcessDialog( config ) {\n\t\tProcessDialog.super.call( this, config );\n\t}\n\tOO.inheritClass( ProcessDialog, OO.ui.ProcessDialog );\n\n\tProcessDialog.static.name = 'myDialog';\n\t// ProcessDialog.static.title = mw.msg(\n\t// \"visualdata-jsmodule-manageproperties-define-property\"\n\t// );\n\tProcessDialog.static.actions = [\n\t\t{\n\t\t\taction: 'save',\n\t\t\tmodes: 'edit',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-save' ),\n\t\t\tflags: [ 'primary', 'progressive' ]\n\t\t},\n\t\t{\n\t\t\tmodes: 'edit',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-cancel' ),\n\t\t\tflags: [ 'safe', 'close' ]\n\t\t}\n\t];\n\n\tProcessDialog.prototype.initialize = function () {\n\t\tProcessDialog.super.prototype.initialize.apply( this, arguments );\n\n\t\tpanelLayout = new PanelLayout( {\n\t\t\texpanded: false,\n\t\t\tpadded: true,\n\t\t\tclasses: [],\n\t\t\tdata: {}\n\t\t} );\n\n\t\tvar frameA = new OO.ui.PanelLayout( {\n\t\t\t$content: [ panelLayout.$element ],\n\t\t\texpanded: false,\n\t\t\t// framed: false,\n\t\t\tpadded: false,\n\t\t\tdata: { name: 'manageforms' }\n\t\t} );\n\n\t\tthis.$body.append( frameA.$element );\n\t};\n\n\tProcessDialog.prototype.getActionProcess = function ( action ) {\n\t\tvar dialog = this;\n\n\t\tvar currentItem = getCurrentItem() || {\n\t\t\ttype: '',\n\t\t\twiki: { type: 'property' }\n\t\t};\n\t\tvar parentSchema = currentItem;\n\t\tif (\n\t\t\tcurrentItem.type === 'array' &&\n\t\t\tVisualDataFunctions.isObject( currentItem.items )\n\t\t) {\n\t\t\tcurrentItem = currentItem.items;\n\t\t}\n\n\t\tfunction getValueRec( model, thisObj ) {\n\t\t\tfor ( var i in model ) {\n\t\t\t\tif ( !( 'getValue' in model[ i ] ) ) {\n\t\t\t\t\tgetValueRec( model[ i ], ( thisObj[ i ] = {} ) );\n\t\t\t\t} else {\n\t\t\t\t\tthisObj[ i ] = VisualDataSchemas.getWidgetValue( model[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch ( action ) {\n\t\t\tcase 'save':\n\t\t\t\tvar obj = { type: 'property' };\n\t\t\t\tgetValueRec( Model, obj );\n\n\t\t\t\tvar objName = obj[ 'multiple-items' ] ? obj.parentSchema.name : obj.name;\n\n\t\t\t\tswitch ( obj.propertyModel ) {\n\t\t\t\t\tcase 'json-schema':\n\t\t\t\t\t\tdelete obj[ 'SMW-property' ];\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'smw-property':\n\t\t\t\t\t\t// *** important! used to recover the type\n\t\t\t\t\t\t// if a property has been deleted\n\t\t\t\t\t\tobj[ 'smw-property-type' ] = VisualDataSMW.getSemanticProperty(\n\t\t\t\t\t\t\tobj[ 'SMW-property' ],\n\t\t\t\t\t\t\t'type'\n\t\t\t\t\t\t);\n\t\t\t\t\t\t// delete obj[\"jsonSchema-type\"];\n\t\t\t\t\t\t// delete obj[\"jsonSchema-format\"];\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\n\t\t\t\tvar alert = null;\n\t\t\t\tif ( objName === '' ) {\n\t\t\t\t\talert = mw.msg( 'visualdata-jsmodule-schemas-alert-noname' );\n\t\t\t\t} else if ( objName !== CurrentKey && objName in ParentObj ) {\n\t\t\t\t\talert = mw.msg( 'visualdata-jsmodule-schemas-alert-existing-item' );\n\t\t\t\t}\n\n\t\t\t\tif ( alert ) {\n\t\t\t\t\tVisualDataFunctions.OOUIAlert( new OO.ui.HtmlSnippet( alert ), {\n\t\t\t\t\t\tsize: 'medium'\n\t\t\t\t\t} );\n\t\t\t\t\treturn ProcessDialog.super.prototype.getActionProcess.call(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\taction\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tVisualDataFunctions.renameObjectKey( ParentObj, CurrentKey, objName );\n\n\t\t\t\tParentObj[ objName ] = VisualDataSchemas.handleSaveArray(\n\t\t\t\t\tparentSchema,\n\t\t\t\t\tobj\n\t\t\t\t);\n\n\t\t\t\tCallback();\n\n\t\t\t\treturn new OO.ui.Process( () => {\n\t\t\t\t\tdialog.close( { action: action } );\n\t\t\t\t} );\n\t\t}\n\n\t\treturn ProcessDialog.super.prototype.getActionProcess.call( this, action );\n\t};\n\n\tProcessDialog.prototype.getTeardownProcess = function ( data ) {\n\t\treturn ProcessDialog.super.prototype.getTeardownProcess\n\t\t\t.call( this, data )\n\t\t\t.first( () => {\n\t\t\t\tWindowManager.removeActiveWindow();\n\t\t\t}, this );\n\t};\n\n\t/**\n\t * Override getBodyHeight to create a tall dialog relative to the screen.\n\t *\n\t * @return {number} Body height\n\t */\n\tProcessDialog.prototype.getBodyHeight = function () {\n\t\t// see here https://www.mediawiki.org/wiki/OOUI/Windows/Process_Dialogs\n\t\t// this.page1.content.$element.outerHeight( true );\n\t\treturn window.innerHeight - 100;\n\t};\n\n\tfunction openDialog( callback, parentObj, fieldName ) {\n\t\tCallback = callback;\n\t\tModel = {};\n\n\t\t// *** place here properties to copy\n\t\tif ( fieldName in parentObj && 'uuid' in parentObj[ fieldName ].wiki ) {\n\t\t\tModel.uuid = new VisualDataFunctions.MockupOOUIClass(\n\t\t\t\tparentObj[ fieldName ].wiki.uuid );\n\t\t}\n\n\t\tParentObj = parentObj;\n\n\t\tCurrentKey =\n\t\t\tfieldName ||\n\t\t\tVisualDataFunctions.createNewKey(\n\t\t\t\tparentObj,\n\t\t\t\tmw.msg( 'visualdata-jsmodule-formfield-newlabel' )\n\t\t\t);\n\n\t\tvar processDialog = new ProcessDialog( {\n\t\t\tsize: 'large',\n\t\t\tclasses: [],\n\t\t\tid: 'visualdata-processDialogEditField'\n\t\t} );\n\n\t\tWindowManager.newWindow( processDialog, {\n\t\t\ttitle:\n\t\t\t\tmw.msg(\n\t\t\t\t\t// The following messages are used here:\n\t\t\t\t\t// * visualdata-jsmodule-manageproperties-define-property\n\t\t\t\t\t// * visualdata-jsmodule-manageproperties-define-property - [name]\n\t\t\t\t\t'visualdata-jsmodule-formfield-definefield'\n\t\t\t\t) + ( fieldName ? ' - ' + fieldName : '' )\n\t\t} );\n\t}\n\n\treturn {\n\t\topenDialog\n\t};\n};\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataForms.js","messages":[{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":71,"column":6,"nodeType":"CallExpression","endLine":71,"endColumn":58},{"ruleId":"max-len","severity":1,"message":"This line has a length of 106. Maximum allowed is 100.","line":80,"column":1,"nodeType":"Program","messageId":"max","endLine":80,"endColumn":98},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":209,"column":5,"nodeType":"CallExpression","endLine":209,"endColumn":29},{"ruleId":"max-len","severity":1,"message":"This line has a length of 110. Maximum allowed is 100.","line":408,"column":1,"nodeType":"Program","messageId":"max","endLine":408,"endColumn":102},{"ruleId":"max-len","severity":1,"message":"This line has a length of 117. Maximum allowed is 100.","line":510,"column":1,"nodeType":"Program","messageId":"max","endLine":510,"endColumn":88},{"ruleId":"max-len","severity":1,"message":"This line has a length of 131. Maximum allowed is 100.","line":527,"column":1,"nodeType":"Program","messageId":"max","endLine":527,"endColumn":102},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":1362,"column":26,"nodeType":"CallExpression","endLine":1362,"endColumn":78},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":1430,"column":6,"nodeType":"CallExpression","endLine":1432,"endColumn":7},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":1433,"column":7,"nodeType":"CallExpression","endLine":1433,"endColumn":69},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":1436,"column":7,"nodeType":"CallExpression","endLine":1438,"endColumn":8},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":1465,"column":7,"nodeType":"CallExpression","endLine":1467,"endColumn":8},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":1468,"column":8,"nodeType":"CallExpression","endLine":1468,"endColumn":48},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":1471,"column":8,"nodeType":"CallExpression","endLine":1473,"endColumn":9},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":2097,"column":5,"nodeType":"CallExpression","endLine":2097,"endColumn":42},{"ruleId":"max-len","severity":1,"message":"This line has a length of 107. Maximum allowed is 100.","line":2254,"column":1,"nodeType":"Program","messageId":"max","endLine":2254,"endColumn":96},{"ruleId":"max-len","severity":1,"message":"This line has a length of 109. Maximum allowed is 100.","line":2396,"column":1,"nodeType":"Program","messageId":"max","endLine":2396,"endColumn":92},{"ruleId":"max-len","severity":1,"message":"This line has a length of 102. Maximum allowed is 100.","line":2726,"column":1,"nodeType":"Program","messageId":"max","endLine":2726,"endColumn":85},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":2744,"column":7,"nodeType":"VariableDeclarator","endLine":2744,"endColumn":25},{"ruleId":"max-len","severity":1,"message":"This line has a length of 102. Maximum allowed is 100.","line":2918,"column":1,"nodeType":"Program","messageId":"max","endLine":2918,"endColumn":70},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":3042,"column":10,"nodeType":"CallExpression","endLine":3042,"endColumn":67},{"ruleId":"max-len","severity":1,"message":"This line has a length of 108. Maximum allowed is 100.","line":3122,"column":1,"nodeType":"Program","messageId":"max","endLine":3122,"endColumn":94},{"ruleId":"max-len","severity":1,"message":"This line has a length of 105. Maximum allowed is 100.","line":3127,"column":1,"nodeType":"Program","messageId":"max","endLine":3127,"endColumn":91},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":3347,"column":15,"nodeType":"CallExpression","endLine":3349,"endColumn":6},{"ruleId":"max-len","severity":1,"message":"This line has a length of 119. Maximum allowed is 100.","line":3371,"column":1,"nodeType":"Program","messageId":"max","endLine":3371,"endColumn":108},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":3418,"column":3,"nodeType":"CallExpression","endLine":3418,"endColumn":39}],"suppressedMessages":[{"ruleId":"no-unused-vars","severity":2,"message":"'reject' is defined but never used.","line":106,"column":42,"nodeType":"Identifier","messageId":"unusedVar","endLine":106,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'resolve' is defined but never used.","line":110,"column":44,"nodeType":"Identifier","messageId":"unusedVar","endLine":110,"endColumn":51,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'reject' is defined but never used.","line":110,"column":53,"nodeType":"Identifier","messageId":"unusedVar","endLine":110,"endColumn":59,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'item' is defined but never used.","line":136,"column":33,"nodeType":"Identifier","messageId":"unusedVar","endLine":136,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'items' is defined but never used.","line":141,"column":36,"nodeType":"Identifier","messageId":"unusedVar","endLine":141,"endColumn":41,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'reject' is defined but never used.","line":211,"column":39,"nodeType":"Identifier","messageId":"unusedVar","endLine":211,"endColumn":45,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'resolve' is defined but never used.","line":217,"column":41,"nodeType":"Identifier","messageId":"unusedVar","endLine":217,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'reject' is defined but never used.","line":217,"column":50,"nodeType":"Identifier","messageId":"unusedVar","endLine":217,"endColumn":56,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in '_PVAL'.","line":324,"column":7,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":324,"endColumn":35,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'schema' is defined but never used.","line":368,"column":26,"nodeType":"Identifier","messageId":"unusedVar","endLine":368,"endColumn":32,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'schema' is defined but never used.","line":374,"column":26,"nodeType":"Identifier","messageId":"unusedVar","endLine":374,"endColumn":32,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":577,"column":7,"nodeType":"MemberExpression","messageId":"unexpected","endLine":577,"endColumn":20,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[15762,15810],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":611,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":611,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'estimatedRemainingTime' is defined but never used.","line":684,"column":40,"nodeType":"Identifier","messageId":"unusedVar","endLine":684,"endColumn":62,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'res' is defined but never used.","line":703,"column":26,"nodeType":"Identifier","messageId":"unusedVar","endLine":703,"endColumn":29,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-inner-declarations","severity":2,"message":"Move function declaration to function body root.","line":804,"column":4,"nodeType":"FunctionDeclaration","messageId":"moveDeclToRoot","endLine":827,"endColumn":5,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":864,"column":5,"nodeType":"MemberExpression","messageId":"unexpected","endLine":864,"endColumn":16,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"log"},"fix":{"range":[23042,23084],"text":""},"desc":"Remove the console.log()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":869,"column":5,"nodeType":"MemberExpression","messageId":"unexpected","endLine":869,"endColumn":16,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"log"},"fix":{"range":[23185,23229],"text":""},"desc":"Remove the console.log()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1094,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1094,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1095,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1095,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'loadDataBeforeSelect' is assigned a value but never used.","line":1101,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":1101,"endColumn":27,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":1124,"column":6,"nodeType":"MemberExpression","messageId":"unexpected","endLine":1124,"endColumn":19,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[30354,30395],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/msg-doc","severity":2,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":1130,"column":60,"nodeType":"CallExpression","endLine":1130,"endColumn":75,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1191,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1191,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1192,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1192,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1193,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1193,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1194,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1194,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1195,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1195,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'res' is defined but never used.","line":1226,"column":14,"nodeType":"Identifier","messageId":"unusedVar","endLine":1226,"endColumn":17,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1233,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":1233,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1234,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":1234,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1235,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":1235,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1236,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":1236,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":1245,"column":6,"nodeType":"MemberExpression","messageId":"unexpected","endLine":1245,"endColumn":19,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[33414,33455],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/msg-doc","severity":2,"message":"All possible message keys should be documented. See https://w.wiki/4r9a for details.","line":1251,"column":60,"nodeType":"CallExpression","endLine":1251,"endColumn":75,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1270,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1270,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1274,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1274,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1275,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1275,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1276,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1276,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1277,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1277,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1278,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1278,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1279,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1279,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1279,"column":11,"nodeType":"Program","messageId":"unexpectedTab","endLine":1279,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1280,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1280,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1299,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":1299,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1300,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":1300,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1301,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":1301,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/class-doc","severity":2,"message":"All possible CSS classes should be documented. See https://w.wiki/PS2 for details.","line":1349,"column":39,"nodeType":"ObjectExpression","endLine":1357,"endColumn":4,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1506,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":1506,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1507,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":1507,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1508,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":1508,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1509,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":1509,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1531,"column":4,"nodeType":"Program","messageId":"unexpectedTab","endLine":1531,"endColumn":5,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1544,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":1544,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'directive' is defined but never used.","line":1563,"column":66,"nodeType":"Identifier","messageId":"unusedVar","endLine":1563,"endColumn":75,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1574,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":1574,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'schemaName_'.","line":1612,"column":14,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":1612,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'schemaName_'.","line":1614,"column":18,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":1614,"endColumn":40,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'schemaName_'.","line":1617,"column":7,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":1617,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'schemaName_'.","line":1621,"column":6,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":1621,"endColumn":42,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'schemaName_'.","line":1626,"column":19,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":1626,"endColumn":46,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'schemaName_'.","line":1642,"column":6,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":1642,"endColumn":42,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'schemaName_'.","line":1648,"column":5,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":1648,"endColumn":23,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":1692,"column":7,"nodeType":"MemberExpression","messageId":"unexpected","endLine":1692,"endColumn":20,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[44667,44732],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1767,"column":10,"nodeType":"Program","messageId":"unexpectedTab","endLine":1767,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1801,"column":10,"nodeType":"Program","messageId":"unexpectedTab","endLine":1801,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'inputName' is assigned a value but never used.","line":1830,"column":10,"nodeType":"Identifier","messageId":"unusedVar","endLine":1830,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2031,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":2031,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2032,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":2032,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2033,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":2033,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'widget_'.","line":2164,"column":8,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":2164,"endColumn":70,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'path_'.","line":2211,"column":8,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":2211,"endColumn":34,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'widget_'.","line":2218,"column":8,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":2218,"endColumn":88,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'thisPath_'.","line":2256,"column":9,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":2256,"endColumn":40,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2293,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2293,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2294,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2294,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2295,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2295,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2296,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2296,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2297,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2297,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2298,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2298,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2299,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2299,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2300,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2300,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'items_'.","line":2376,"column":10,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":2376,"endColumn":21,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'path_'.","line":2381,"column":11,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":2381,"endColumn":54,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'pathNoIndex_'.","line":2383,"column":11,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":2385,"endColumn":26,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'widget_'.","line":2396,"column":11,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":2396,"endColumn":91,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2493,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2493,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2494,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2494,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2495,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2495,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2496,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2496,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2497,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2497,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2498,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2498,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2499,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2499,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2500,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2500,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2501,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2501,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2502,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2502,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2503,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2503,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2504,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2504,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2505,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2505,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2506,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2506,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2602,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2602,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2603,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2603,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2707,"column":21,"nodeType":"Program","messageId":"unexpectedTab","endLine":2707,"endColumn":22,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2714,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":2714,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2715,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":2715,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2716,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":2716,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2717,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":2717,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-alert","severity":2,"message":"Unexpected alert.","line":2760,"column":5,"nodeType":"CallExpression","messageId":"unexpected","endLine":2760,"endColumn":69,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2788,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":2788,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-alert","severity":2,"message":"Unexpected confirm.","line":2861,"column":6,"nodeType":"CallExpression","messageId":"unexpected","endLine":2863,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":2940,"column":11,"nodeType":"MemberExpression","messageId":"unexpected","endLine":2940,"endColumn":24,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[77681,77728],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":2952,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":2952,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3057,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":3057,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/class-doc","severity":2,"message":"All possible CSS classes should be documented. See https://w.wiki/PS2 for details.","line":3092,"column":45,"nodeType":"ObjectExpression","endLine":3099,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3123,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":3123,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3124,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":3124,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3125,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":3125,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3126,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":3126,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3127,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":3127,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/class-doc","severity":2,"message":"All possible CSS classes should be documented. See https://w.wiki/PS2 for details.","line":3155,"column":44,"nodeType":"ObjectExpression","endLine":3162,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3238,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3238,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3239,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3239,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3240,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3240,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3241,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3241,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"mediawiki/class-doc","severity":2,"message":"All possible CSS classes should be documented. See https://w.wiki/PS2 for details.","line":3281,"column":36,"nodeType":"ObjectExpression","endLine":3288,"endColumn":4,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3291,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3291,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3292,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3292,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3293,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3293,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3294,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3294,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3295,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3295,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3296,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3296,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3297,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3297,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3298,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3298,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3299,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3299,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3302,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3302,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3303,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3303,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3304,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3304,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3305,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3305,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3306,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3306,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3307,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3307,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3308,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3308,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3309,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3309,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":3321,"column":4,"nodeType":"CallExpression","endLine":3321,"endColumn":40,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3368,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3368,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3369,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3369,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3370,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3370,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3371,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3371,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3372,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3372,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3373,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3373,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3374,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3374,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3375,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3375,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3377,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3377,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3378,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3378,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3379,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3379,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3380,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3380,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3381,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3381,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3382,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3382,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3384,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3384,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3402,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3402,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3403,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3403,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":3415,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":3415,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'mutations' is defined but never used.","line":3513,"column":43,"nodeType":"Identifier","messageId":"unusedVar","endLine":3513,"endColumn":52,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'thisObserver' is defined but never used.","line":3513,"column":54,"nodeType":"Identifier","messageId":"unusedVar","endLine":3513,"endColumn":66,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":25,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2021-2023, https://wikisphere.org\n */\n\n/* eslint-disable no-tabs */\n/* eslint-disable no-unused-vars */\n/* eslint-disable no-underscore-dangle */\n\nconst VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager ) {\n\tvar Model = {};\n\tvar ModelSchemas;\n\tvar OuterStack;\n\tvar PropertiesStack;\n\tvar processDialogSearch;\n\tvar DialogSearchName = 'dialogSearch';\n\tvar ToolbarMain;\n\tvar ActionToolbarMain;\n\tvar ActionWidget;\n\tvar SubmitButton;\n\tvar ValidateButton;\n\tvar GoBackButton;\n\t// var DeleteButton;\n\t// shallow copy\n\tvar RecordedSchemas = Form.schemas.slice();\n\tvar Fields;\n\tvar DialogName = 'dialogForm';\n\tvar StoredJsonData = VisualDataFunctions.deepCopy( Form.jsonData );\n\tvar ModelFlatten = [];\n\tvar SelectedSchema;\n\tvar PreviousSchemas = {};\n\tvar ProcessModel = {};\n\tvar InputWidgets;\n\tvar SchemasLayout;\n\tvar Initialized = false;\n\tvar PendingRecursive;\n\tvar QueuedWidgets = [];\n\tvar Maps = [];\n\tvar TargetSlotField;\n\n\tfunction inArray( val, arr ) {\n\t\treturn arr.indexOf( val ) !== -1;\n\t}\n\n\tfunction escapeJsonPtr( str ) {\n\t\treturn VisualDataFunctions.escapeJsonPtr( str );\n\t}\n\n\t// @FIXME destroy/reinitialize on tab change\n\tfunction showVisualEditor() {\n\t\tfunction timeOut( i ) {\n\t\t\tsetTimeout( () => {\n\t\t\t\tif (\n\t\t\t\t\tInputWidgets[ i ] &&\n\t\t\t\t\tInputWidgets[ i ].$element.parent().is( ':visible' )\n\t\t\t\t) {\n\t\t\t\t\tInputWidgets[ i ].initialize();\n\t\t\t\t}\n\t\t\t}, 100 );\n\t\t}\n\n\t\t// @IMPORTANT use \"let\" with timeout !!\n\t\tfor ( let i in InputWidgets ) {\n\t\t\tvar constructorName = InputWidgets[ i ].constructorName || InputWidgets[ i ].constructor.name;\n\t\t\tif ( constructorName === 'VisualDataVisualEditor' ||\n\t\t\t\t( 'constructorName' in InputWidgets[ i ] &&\n\t\t\t\t\tInputWidgets[ i ].constructorName === 'VisualDataVisualEditor' )\n\t\t\t) {\n\t\t\t\ttimeOut( i );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction loadMaps() {\n\t\tfunction timeOut( obj ) {\n\t\t\t// setTimeout( function () {\n\t\t\t// @FIXME find a better way\n\t\t\tvar schemaName = obj.data.path.split( '/' )[ 0 ];\n\t\t\t// if ( obj.element.is( ':visible' ) ) {\n\t\t\tif ( schemaName === SelectedSchema ) {\n\t\t\t\tif ( obj.data.schema.wiki.coordinates === false ) {\n\t\t\t\t\tvar latFieldId = makeElementId( `${ obj.data.path }/latitude` );\n\t\t\t\t\tvar lonFieldId = makeElementId( `${ obj.data.path }/longitude` );\n\t\t\t\t\tvar escapeSelector = jQuery.escapeSelector;\n\n\t\t\t\t\tfor ( let fieldId of [ latFieldId, lonFieldId ] ) {\n\t\t\t\t\t\tlet callbackCond = function () {\n\t\t\t\t\t\t\treturn $( '#' + escapeSelector( fieldId ) ).length;\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlet callback = function ( resolve, reject ) {\n\t\t\t\t\t\t\t$( '#' + escapeSelector( fieldId ) ).hide();\n\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tlet callbackMaxAttempts = function ( resolve, reject ) {\n\t\t\t\t\t\t\t$( '#' + escapeSelector( fieldId ) ).hide();\n\t\t\t\t\t\t};\n\t\t\t\t\t\tVisualDataFunctions.waitUntil(\n\t\t\t\t\t\t\tcallbackCond,\n\t\t\t\t\t\t\tcallback,\n\t\t\t\t\t\t\tcallbackMaxAttempts,\n\t\t\t\t\t\t\t5\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tmw.loader.using( 'ext.VisualData.Maptiler', () => {\n\t\t\t\t\tvar visualDataMaptiler = new VisualDataMaptiler();\n\t\t\t\t\tvisualDataMaptiler.initialize( obj.element, obj.data );\n\t\t\t\t} );\n\t\t\t}\n\t\t\t// }, 0 );\n\t\t}\n\n\t\t// @IMPORTANT use \"let\" with timeout !!\n\t\tfor ( let obj of Maps ) {\n\t\t\ttimeOut( obj );\n\t\t}\n\t}\n\n\tfunction onSetPropertiesStack( item ) {\n\t\tshowVisualEditor();\n\t\t// loadMaps();\n\t}\n\n\tfunction onChangePropertiesStack( items ) {}\n\n\tfunction onTabSelect( selectedSchema ) {\n\t\tSelectedSchema = selectedSchema;\n\t\tshowVisualEditor();\n\t\tloadMaps();\n\t}\n\n\tfunction makeElementId( path ) {\n\t\treturn `VisualDataGroupWidgetPanel-${ FormID }-${ path }`.replace(\n\t\t\t/ /g,\n\t\t\t'_'\n\t\t);\n\t}\n\n\tfunction callbackShowError( schemaName, errorMessage, errors, hiddenErrors ) {\n\n\t\t// remove previous error messages\n\t\tfor ( var i in Fields ) {\n\t\t\tif ( Fields[ i ].constructor.name === 'OoUiMessageWidget' ) {\n\t\t\t\tFields[ i ].toggle( false );\n\t\t\t} else {\n\t\t\t\tFields[ i ].setErrors( [] );\n\t\t\t}\n\t\t}\n\n\t\tif ( !schemaName ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar escapedSchemaName = escapeJsonPtr( schemaName );\n\n\t\tFields[ escapedSchemaName ].toggle( true );\n\t\tFields[ escapedSchemaName ].setType( 'error' );\n\n\t\tvar errorMessage = mw.msg( 'visualdata-jsmodule-forms-form-error' );\n\t\tif ( hiddenErrors && Object.keys( hiddenErrors ).length ) {\n\t\t\tfor ( var path in hiddenErrors ) {\n\t\t\t\terrorMessage += '<br />' + hiddenErrors[ path ];\n\t\t\t}\n\t\t}\n\n\t\tFields[ escapedSchemaName ].setLabel(\n\t\t\tnew OO.ui.HtmlSnippet( errorMessage )\n\t\t);\n\n\t\tfor ( var path in errors ) {\n\t\t\tif ( !( path in Fields ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( Fields[ path ].constructor.name === 'OoUiMessageWidget' ) {\n\t\t\t\tFields[ path ].setType( 'error' );\n\t\t\t\tFields[ path ].setLabel( errors[ path ] );\n\n\t\t\t\tFields[ path ].toggle( true );\n\t\t\t} else {\n\t\t\t\tFields[ path ].setErrors( [ errors[ path ] ] );\n\t\t\t}\n\t\t}\n\n\t\tselectSchema( schemaName );\n\n\t\tvar el = window.document.querySelector( '#' +\n\t\t\tjQuery.escapeSelector( makeElementId( escapedSchemaName ) ) );\n\n\t\tif ( el ) {\n\t\t\tlet callbackCond = function () {\n\t\t\t\t$( el ).is( ':visible' );\n\t\t\t};\n\t\t\tlet callback = function ( resolve, reject ) {\n\t\t\t\tel.scrollIntoView( {\n\t\t\t\t\tbehavior: 'smooth'\n\t\t\t\t} );\n\t\t\t\tresolve();\n\t\t\t};\n\t\t\tlet callbackMaxAttempts = function ( resolve, reject ) {\n\t\t\t\tel.scrollIntoView( {\n\t\t\t\t\tbehavior: 'smooth'\n\t\t\t\t} );\n\t\t\t};\n\n\t\t\tVisualDataFunctions.waitUntil(\n\t\t\t\tcallbackCond,\n\t\t\t\tcallback,\n\t\t\t\tcallbackMaxAttempts,\n\t\t\t\t5\n\t\t\t);\n\t\t}\n\t}\n\n\tfunction selectSchema( schemaName, init ) {\n\t\tif ( !schemaName ) {\n\t\t\treturn;\n\t\t}\n\n\t\tvar escapedSchemaName = escapeJsonPtr( schemaName );\n\n\t\tvar el = window.document.querySelector( '#' +\n\t\t\tjQuery.escapeSelector( makeElementId( escapedSchemaName ) ) );\n\n\t\tif ( !el ) {\n\t\t\treturn;\n\t\t}\n\n\t\t// indexLayout\n\t\tif ( 'setTabPanel' in SchemasLayout ) {\n\t\t\tSchemasLayout.setTabPanel( schemaName );\n\n\t\t\tif ( init ) {\n\t\t\t\tSchemasLayout.on( 'set', () => {\n\t\t\t\t\tonTabSelect( SchemasLayout.getCurrentTabPanelName() );\n\t\t\t\t} );\n\t\t\t}\n\n\t\t// booklet\n\t\t} else if ( 'setPage' in SchemasLayout ) {\n\t\t\tSchemasLayout.setPage( schemaName );\n\n\t\t\tif ( init ) {\n\t\t\t\tSchemasLayout.on( 'set', () => {\n\t\t\t\t\tonTabSelect( SchemasLayout.getCurrentPageName() );\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getInputWidget( config ) {\n\t\tvar field = config.model.schema.wiki;\n\n\t\tif ( !( 'input-config' in field ) ) {\n\t\t\tfield[ 'input-config' ] = {};\n\t\t}\n\t\tvar required = 'required' in field && field.required;\n\n\t\t// create deep copy, otherwise changes are\n\t\t// copied to Forms[ form ].properties[ property ][ 'input-config' ]\n\t\tvar inputConfig = Object.assign(\n\t\t\t{}, // *** important !! cast to object\n\t\t\tVisualDataFunctions.deepCopy( field[ 'input-config' ] ),\n\t\t\t{ value: config.data, required: required }\n\t\t);\n\n\t\tif ( 'options-values-parsed' in field ) {\n\t\t\tinputConfig.options = field[ 'options-values-parsed' ];\n\t\t}\n\n\t\tvar inputName =\n\t\t\t!( 'visibility' in field ) || field.visibility !== 'hidden' ?\n\t\t\t\tVisualDataFunctions.inputNameFromLabel(\n\t\t\t\t\tVisualDataFunctions.getPreferredInput( config.model.schema )\n\t\t\t\t) :\n\t\t\t\t'OO.ui.HiddenInputWidget';\n\n\t\t// FIXME with HiddenInputWidget, value is null (as string)\n\t\tconfig.model.inputName = inputName;\n\n\t\tif ( !( 'name' in config ) || config.name.trim() === '' ) {\n\t\t\tinputConfig.name = `${ FormID }-${ config.model.path }`;\n\t\t} else {\n\t\t\tinputConfig.name = config.name;\n\t\t}\n\n\t\tif ( Array.isArray( inputConfig.value ) ) {\n\t\t\tfor ( var i in inputConfig.value ) {\n\t\t\t\tif ( inputConfig.value[ i ].trim() === '' ) {\n\t\t\t\t\tdelete inputConfig.value[ i ];\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\t// @see https://www.semantic-mediawiki.org/wiki/Help:Special_property_Allows_value\n\t\t// SemanticMediaWiki/src/DataValues/ValueValidator/AllowsListConstraintValueValidator.php\n\t\tif ( inArray( inputName, VisualDataFunctions.optionsInputs ) ) {\n\t\t\tif ( inputConfig.options && Object.keys( inputConfig.options ).length ) {\n\t\t\t\tinputConfig.options = VisualDataFunctions.createDropDownOptions(\n\t\t\t\t\tinputConfig.options\n\t\t\t\t);\n\t\t\t} else if ( isSMWProperty( field ) ) {\n\t\t\t\tinputConfig.options = [];\n\t\t\t\tvar SMWProperty = getSMWProperty( field );\n\t\t\t\tif ( '_PVAL' in SMWProperty.properties ) {\n\t\t\t\t\tinputConfig.options = VisualDataFunctions.createDropDownOptions(\n\t\t\t\t\t\tSMWProperty.properties._PVAL,\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tkey: 'value'\n\t\t\t\t\t\t}\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tinputConfig.options = [];\n\t\t\t\t}\n\t\t\t} else {\n\t\t\t\tinputConfig.options = [];\n\t\t\t}\n\t\t}\n\t\tinputConfig.data = {\n\t\t\t// path: config.model.path,\n\t\t\t// schema: config.model.schema,\n\t\t\tmodel: config.model,\n\t\t\tperformQuery\n\t\t};\n\t\treturn ( InputWidgets[ inputConfig.name ] =\n\t\t\tVisualDataFunctions.inputInstanceFromName( inputName, inputConfig ) );\n\t}\n\n\tfunction isSMWProperty( field ) {\n\t\treturn (\n\t\t\t'SMW-property' in field &&\n\t\t\tfield[ 'SMW-property' ] in VisualDataSMW.getSemanticProperties()\n\t\t);\n\t}\n\n\tfunction getSMWProperty( field ) {\n\t\tif ( 'SMW-property' in field ) {\n\t\t\treturn VisualDataSMW.getSemanticProperty( field[ 'SMW-property' ] );\n\t\t}\n\t\treturn null;\n\t}\n\n\tfunction isNewSchema( schemaName ) {\n\t\treturn !inArray( schemaName, RecordedSchemas );\n\t}\n\n\tfunction getCategories() {\n\t\treturn Form.categories;\n\t}\n\n\tfunction getFieldAlign( schema ) {\n\t\treturn 'layout-align' in Form.options ?\n\t\t\tForm.options[ 'layout-align' ] :\n\t\t\t'top';\n\t}\n\n\tfunction getHelpInline( schema ) {\n\t\treturn !( 'popup-help' in Form.options ? Form.options[ 'popup-help' ] : false );\n\t}\n\n\tfunction updateFieldsVisibility( sourceModel ) {\n\t\t// *** a more complicated solution is to loop through\n\t\t// siblings using model.parent or model.parentSchema\n\t\tvar pathParent = sourceModel.path.split( '/' ).slice( 0, -1 ).join( '/' );\n\t\tvar pathNoIndex = sourceModel.pathNoIndex.split( '/' ).slice( -1 )[ 0 ];\n\n\t\tfunction escapeRegExp( string ) {\n\t\t\treturn string.replace( /[.*+?^${}()|[\\]\\\\]/g, '\\\\$&' );\n\t\t}\n\n\t\tfor ( var i in ModelFlatten ) {\n\t\t\tvar model = ModelFlatten[ i ];\n\n\t\t\tif ( sourceModel.schemaName !== model.schemaName ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( pathParent !== model.path.split( '/' ).slice( 0, -1 ).join( '/' ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar field = model.schema.wiki;\n\t\t\tif ( !( 'showif-field' in field ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( field[ 'showif-field' ] !== pathNoIndex ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar value = VisualDataFunctions.castType( sourceModel.input.getValue(), sourceModel.schema.type );\n\t\t\tvar refValue = VisualDataFunctions.castType( field[ 'showif-value' ], sourceModel.schema.type );\n\n\t\t\tvar res;\n\t\t\tswitch ( field[ 'showif-condition' ] ) {\n\t\t\t\tcase '=':\n\t\t\t\t\tres = ( refValue === value );\n\t\t\t\t\tbreak;\n\t\t\t\tcase '!=':\n\t\t\t\t\tres = ( refValue !== value );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'starts':\n\t\t\t\t\tres = ( value.indexOf( refValue ) === 0 );\n\t\t\t\t\tbreak;\n\t\t\t\tcase '!starts':\n\t\t\t\t\tres = ( value.indexOf( refValue ) !== 0 );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'contains':\n\t\t\t\t\tres = ( value.indexOf( refValue ) !== -1 );\n\t\t\t\t\tbreak;\n\t\t\t\tcase '!contains':\n\t\t\t\t\tres = ( value.indexOf( refValue ) === -1 );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'ends':\n\t\t\t\t\tvar regExp = new RegExp( escapeRegExp( refValue ) + '$' );\n\t\t\t\t\tres = regExp.test( value );\n\t\t\t\t\tbreak;\n\t\t\t\tcase '!ends':\n\t\t\t\t\tvar regExp = new RegExp( escapeRegExp( refValue ) + '$' );\n\t\t\t\t\tres = !regExp.test( value );\n\t\t\t\t\tbreak;\n\t\t\t\tcase '!null':\n\t\t\t\t\tres = ( !!value );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'regex':\n\t\t\t\t\tvar regExp = new RegExp( refValue );\n\t\t\t\t\tres = regExp.test( value );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmodel.removed = !res;\n\n\t\t\t// Fields[ model.path ].toggle( res );\n\t\t\tvar el = window.document.querySelector( '#' +\n\t\t\t\tjQuery.escapeSelector( makeElementId( model.path ) ) );\n\n\t\t\t$( el ).toggle( res );\n\t\t}\n\t}\n\n\tfunction clearDependentFields( pathNoIndex ) {\n\t\tfor ( var model of ModelFlatten ) {\n\t\t\tvar field = model.schema.wiki;\n\t\t\tif ( !( 'options-askquery' in field ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar askQuery = field[ 'options-askquery' ];\n\t\t\tvar regExp = new RegExp( '<' + pathNoIndex + '>' );\n\t\t\tif ( regExp.test( askQuery ) ) {\n\t\t\t\tmodel.input.setValue( !model.multiselect ? '' : [] );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction updateDependentFields( sourceModel ) {\n\n\t\t// @TODO complete with other optionsInputs\n\t\tvar allowedInputsByContructor = [\n\t\t\t'OoUiDropdownInputWidget',\n\t\t\t'OoUiMenuTagMultiselectWidget'\n\t\t];\n\t\tfor ( let model of ModelFlatten ) {\n\t\t\tlet constructorName = model.input.constructorName || model.input.constructor.name;\n\t\t\tif ( !inArray( constructorName, allowedInputsByContructor ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tif ( sourceModel.schemaName !== model.schemaName ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\t\t\tvar field = model.schema.wiki;\n\t\t\tif ( !( 'options-askquery' in field ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar askQuery = field[ 'options-askquery' ];\n\t\t\tvar regExp = new RegExp( '<' + sourceModel.pathNoIndex + '>' );\n\t\t\tif ( regExp.test( askQuery ) ) {\n\t\t\t\tProcessModel.getModel( 'schema', sourceModel.schemaName ).then( ( res ) => {\n\t\t\t\t\tfor ( var i in res.flatten ) {\n\n\t\t\t\t\t\tif ( res.flatten[ i ].pathNoIndex === sourceModel.pathNoIndex ) {\n\t\t\t\t\t\t\tperformQuery( model, res.flatten[ i ].value ).then( ( data_ ) => {\n\n\t\t\t\t\t\t\t\t// @TODO complete with other optionsInputs\n\t\t\t\t\t\t\t\tswitch ( constructorName ) {\n\t\t\t\t\t\t\t\t\tcase 'OoUiDropdownInputWidget':\n\t\t\t\t\t\t\t\t\t\t// *** @FIXME this unfortunately does not work.\n\t\t\t\t\t\t\t\t\t\t// see here https://doc.wikimedia.org/mediawiki-core/1.39.5/js/source/oojs-ui-core.html#OO-ui-DropdownInputWidget\n\t\t\t\t\t\t\t\t\t\tvar value = model.input.getValue();\n\t\t\t\t\t\t\t\t\t\tif ( !( value in data_ ) ) {\n\t\t\t\t\t\t\t\t\t\t\tvalue = null;\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t\tmodel.input.setOptions( VisualDataFunctions.createDropDownOptions( data_ ) );\n\t\t\t\t\t\t\t\t\t\tmodel.input.setValue( value );\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t\tcase 'OoUiMenuTagMultiselectWidget':\n\t\t\t\t\t\t\t\t\t\tmodel.input.menu.clearItems();\n\t\t\t\t\t\t\t\t\t\t// Map to an array of OO.ui.MenuOptionWidgets\n\t\t\t\t\t\t\t\t\t\tvar values = model.input.getValue();\n\t\t\t\t\t\t\t\t\t\tvar items = [];\n\t\t\t\t\t\t\t\t\t\tfor ( var j in data_ ) {\n\t\t\t\t\t\t\t\t\t\t\titems.push(\n\t\t\t\t\t\t\t\t\t\t\t\tnew OO.ui.MenuOptionWidget( {\n\t\t\t\t\t\t\t\t\t\t\t\t\tdata: j,\n\t\t\t\t\t\t\t\t\t\t\t\t\tlabel: data_[ j ]\n\t\t\t\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tmodel.input.addOptions( items );\n\t\t\t\t\t\t\t\t\t\tmodel.input.setValue( values.filter( ( x ) => Object.keys( data_ ).indexOf( x ) !== -1 ) );\n\t\t\t\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} );\n\t\t\t}\n\t\t}\n\t}\n\n\tasync function performQuery( model, value ) {\n\t\tvar field = model.schema.wiki;\n\t\tvar askQuery = field[ 'options-askquery' ];\n\t\tvar matches = [];\n\n\t\tvar re = /<([^<>]+)>/g;\n\t\twhile ( true ) {\n\t\t\tvar match = re.exec( askQuery );\n\t\t\tif ( !match ) {\n\t\t\t\tbreak;\n\t\t\t}\n\t\t\tmatches.push( match );\n\t\t}\n\n\t\tfunction doQuery() {\n\t\t\tvar payload = {\n\t\t\t\taction: 'visualdata-askquery',\n\t\t\t\tdata: JSON.stringify( {\n\t\t\t\t\tquery: askQuery,\n\t\t\t\t\tproperties: field[ 'askquery-printouts' ],\n\t\t\t\t\tschema: field[ 'askquery-schema' ],\n\t\t\t\t\t'options-query-formula': field[ 'options-query-formula' ],\n\t\t\t\t\t'options-label-formula': field[ 'options-label-formula' ]\n\t\t\t\t} )\n\t\t\t};\n\n\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\tnew mw.Api()\n\t\t\t\t\t.postWithToken( 'csrf', payload )\n\t\t\t\t\t.done( ( thisRes ) => {\n\t\t\t\t\t\tif ( payload.action in thisRes ) {\n\t\t\t\t\t\t\tvar thisData = thisRes[ payload.action ];\n\t\t\t\t\t\t\tthisData = JSON.parse( thisData.result );\n\t\t\t\t\t\t\tresolve( thisData );\n\t\t\t\t\t\t}\n\t\t\t\t\t} )\n\t\t\t\t\t.fail( ( thisRes ) => {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error( 'visualdata-askquery', thisRes );\n\t\t\t\t\t\treject( thisRes );\n\t\t\t\t\t} );\n\t\t\t} ).catch( ( err ) => {\n\t\t\t\tVisualDataFunctions.OOUIAlert( `error: ${ err }`, { size: 'medium' } );\n\t\t\t} );\n\t\t}\n\n\t\tif ( matches.length ) {\n\t\t\tvar res = await ProcessModel.getModel( 'schema', model.schemaName );\n\n\t\t\t// @MUST MATCH classes/SubmitForm -> replaceFormula\n\t\t\tvar parent = model.path.slice( 0, Math.max( 0, model.path.indexOf( '/' ) ) );\n\t\t\tfor ( var match of matches ) {\n\t\t\t\tfor ( var i in res.flatten ) {\n\t\t\t\t\tif ( match[ 1 ] === 'value' ) {\n\t\t\t\t\t\taskQuery = askQuery.replace(\n\t\t\t\t\t\t\tmatch[ 0 ],\n\t\t\t\t\t\t\t// value of lookupElement\n\t\t\t\t\t\t\tvalue\n\t\t\t\t\t\t);\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// match first names at the same level\n\t\t\t\t\tvar fullPath = parent + '/' + match[ 1 ];\n\n\t\t\t\t\tif ( fullPath in res.flatten ) {\n\t\t\t\t\t\taskQuery = askQuery.replace( match[ 0 ], res.flatten[ fullPath ].value );\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\n\t\t\t\t\t// var fullPath = match[1];\n\t\t\t\t\t// if (fullPath.charAt(0) !== \"/\") {\n\t\t\t\t\t// \tfullPath = \"/${ fullPath }\";\n\t\t\t\t\t// }\n\n\t\t\t\t\tif ( res.flatten[ i ].pathNoIndex === fullPath ) {\n\t\t\t\t\t\taskQuery = askQuery.replace( match[ 0 ], res.flatten[ i ].value );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\treturn doQuery();\n\t}\n\n\tvar FileItemWidget = function ( config ) {\n\t\tconfig = config || {};\n\t\tFileItemWidget.super.call( this, config );\n\n\t\tvar self = this;\n\t\tthis.parentWidget = config.parentWidget;\n\t\tthis.parentWidget.setFileKey( null );\n\n\t\tOO.ui.mixin.GroupWidget.call(\n\t\t\tthis,\n\t\t\tObject.assign(\n\t\t\t\t{\n\t\t\t\t\t$group: this.$element\n\t\t\t\t},\n\t\t\t\tconfig\n\t\t\t)\n\t\t);\n\n\t\tvar deleteButton = new OO.ui.ButtonWidget( {\n\t\t\ticon: 'trash'\n\t\t\t// flags: [\"destructive\"],\n\t\t} );\n\n\t\tvar inputConfig = {\n\t\t\trequired: true,\n\t\t\tvalue: config.value\n\t\t};\n\n\t\tvar inputWidget = VisualDataFunctions.inputInstanceFromName(\n\t\t\t'OO.ui.TextInputWidget',\n\t\t\tinputConfig\n\t\t);\n\n\t\tthis.inputWidget = inputWidget;\n\n\t\tvar filePreview = new OO.ui.Widget( {\n\t\t\tclasses: [ 'mw-upload-bookletLayout-filePreview' ]\n\t\t} );\n\t\tvar progressBarWidget = new OO.ui.ProgressBarWidget( {\n\t\t\tprogress: 0\n\t\t} );\n\n\t\tthis.progressBarWidget = progressBarWidget;\n\t\tthis.textInputWidget = inputWidget;\n\n\t\tthis.messageWidget = new OO.ui.MessageWidget( {\n\t\t\ttype: 'error',\n\t\t\tlabel: '',\n\t\t\tinvisibleLabel: true,\n\t\t\tclasses: [ 'visualdata-upload-messagewidget' ]\n\t\t} );\n\n\t\tfilePreview.$element.append( progressBarWidget.$element );\n\t\tfilePreview.$element.append( inputWidget.$element );\n\t\tfilePreview.$element.append( this.messageWidget.$element );\n\n\t\tprogressBarWidget.toggle( !config.loaded );\n\t\tinputWidget.toggle( config.loaded );\n\t\tthis.messageWidget.toggle( false );\n\n\t\tthis.progress = function ( progress, estimatedRemainingTime ) {\n\t\t\tself.progressBarWidget.setProgress( progress * 100 );\n\t\t};\n\n\t\tthis.uploadComplete = function ( file, res ) {\n\t\t\tself.progressBarWidget.toggle( false );\n\t\t\tself.textInputWidget.toggle( true );\n\n\t\t\tself.parentWidget.setFileKey( res.upload.filekey );\n\t\t};\n\n\t\tthis.errorMessage = function ( errorMessage ) {\n\t\t\tself.textInputWidget.toggle( false );\n\t\t\tself.progressBarWidget.toggle( false );\n\n\t\t\tself.messageWidget.$element.append( errorMessage.getMessage() );\n\t\t\tself.messageWidget.toggle( true );\n\t\t};\n\n\t\tthis.fail = function ( res ) {};\n\n\t\tvar widget = new OO.ui.ActionFieldLayout( filePreview, deleteButton, {\n\t\t\tlabel: '',\n\t\t\talign: 'top'\n\t\t\t// classes: [\"inputName-\" + config.inputName],\n\t\t} );\n\n\t\tthis.$element.append( widget.$element );\n\n\t\tdeleteButton.connect( this, {\n\t\t\tclick: 'onDeleteButtonClick'\n\t\t} );\n\t};\n\n\tOO.inheritClass( FileItemWidget, OO.ui.Widget );\n\tOO.mixinClass( FileItemWidget, OO.ui.mixin.GroupWidget );\n\n\tFileItemWidget.prototype.onDeleteButtonClick = function () {\n\t\tthis.emit( 'delete', 'file' );\n\n\t\tthis.parentWidget.clearFileClick( this );\n\t};\n\n\tvar FileUploadGroupWidget = function ( config ) {\n\t\t// Configuration initialization\n\t\tconfig = config || {};\n\n\t\t// Parent constructor\n\t\tFileUploadGroupWidget.super.call( this, config );\n\n\t\t// Mixin constructors\n\t\tOO.ui.mixin.GroupElement.call(\n\t\t\tthis,\n\t\t\tObject.assign(\n\t\t\t\t{\n\t\t\t\t\t$group: this.$element\n\t\t\t\t},\n\t\t\t\tconfig\n\t\t\t)\n\t\t);\n\n\t\tthis.addItems( config.items || [] );\n\t};\n\n\tOO.inheritClass( FileUploadGroupWidget, OO.ui.Widget );\n\tOO.mixinClass( FileUploadGroupWidget, OO.ui.mixin.GroupElement );\n\n\tvar ItemWidget = function ( config ) {\n\t\tconfig = config || {};\n\t\tItemWidget.super.call( this, config );\n\n\t\tvar schema = config.model.schema;\n\t\tvar fieldAlign = getFieldAlign( schema );\n\t\tvar helpInline = getHelpInline( schema );\n\n\t\tvar inputWidget = getInputWidget( config );\n\n\t\tinputWidget.on( 'change', () => {\n\t\t\tupdateFieldsVisibility( config.model );\n\t\t\tclearDependentFields( config.model.pathNoIndex );\n\t\t} );\n\n\t\tinputWidget.$element.find( 'input' ).on( 'blur', () => {\n\t\t\tupdateFieldsVisibility( config.model );\n\t\t\tupdateDependentFields( config.model );\n\t\t} );\n\n\t\tconfig.model.input = inputWidget;\n\n\t\tModelFlatten.push( config.model );\n\n\t\tconfig.model.multiselect = VisualDataFunctions.isMultiselect(\n\t\t\tschema.wiki[ 'preferred-input' ]\n\t\t);\n\n\t\tconfig.model.isFile = config.model.inputName === 'OO.ui.SelectFileWidget';\n\n\t\tif ( config.model.isFile ) {\n\t\t\tvar fileItemWidget;\n\n\t\t\tvar restoreButton = new OO.ui.ButtonWidget( {\n\t\t\t\ticon: 'restore'\n\t\t\t} );\n\n\t\t\trestoreButton.toggle( false );\n\n\t\t\tvar fileUploadGroupWidget = new FileUploadGroupWidget( {\n\t\t\t\titems: [ inputWidget, restoreButton ]\n\t\t\t} );\n\n\t\t\tthis.setFileKey = function ( filekey ) {\n\t\t\t\tconfig.model.filekey = filekey;\n\t\t\t};\n\n\t\t\tvar loadedFiles = {};\n\n\t\t\tvar self = this;\n\n\t\t\t// @FIXME\n\t\t\t// eslint-disable-next-line no-inner-declarations\n\t\t\tfunction createFileItemWidget( filename, loaded ) {\n\t\t\t\t// inputWidget is the SelectFileWidget\n\t\t\t\tinputWidget.toggle( false );\n\n\t\t\t\t// if ( loaded ) {\n\t\t\t\tconfig.model.previousFilename = filename;\n\t\t\t\t// }\n\n\t\t\t\tvar thisFileItemWidget = new FileItemWidget( {\n\t\t\t\t\tclasses: [ 'VisualDataFileItemWidget' ],\n\t\t\t\t\tvalue: filename,\n\t\t\t\t\tloaded: loaded,\n\t\t\t\t\tparentWidget: self\n\t\t\t\t} );\n\n\t\t\t\tloadedFiles[ filename ] = thisFileItemWidget;\n\t\t\t\tfileUploadGroupWidget.addItems( [ thisFileItemWidget ] );\n\n\t\t\t\t// overwrite the model, we want to\n\t\t\t\t// validate the filename\n\t\t\t\tconfig.model.input = thisFileItemWidget.inputWidget;\n\n\t\t\t\treturn thisFileItemWidget;\n\t\t\t}\n\n\t\t\t// create fileItemWidget with existing filename\n\t\t\tif ( typeof config.data === 'string' && config.data.trim() !== '' ) {\n\t\t\t\tfileItemWidget = createFileItemWidget( config.data, true );\n\t\t\t}\n\n\t\t\tthis.clearFileClick = function ( item ) {\n\t\t\t\trestoreButton.toggle( true );\n\n\t\t\t\t// inputWidget is the SelectFileWidget\n\t\t\t\tinputWidget.toggle( true );\n\t\t\t\tinputWidget.setValue( null );\n\n\t\t\t\t// TextInputWidget used for validation\n\t\t\t\tconfig.model.input.setValue( null );\n\n\t\t\t\t// this will remove fileItemWidget\n\t\t\t\tfileUploadGroupWidget.removeItems( [ item ] );\n\t\t\t};\n\n\t\t\trestoreButton.on( 'click', () => {\n\t\t\t\tinputWidget.toggle( false );\n\t\t\t\trestoreButton.toggle( false );\n\t\t\t\tfileUploadGroupWidget.removeItems( [ fileItemWidget ] );\n\t\t\t\tfileItemWidget = createFileItemWidget(\n\t\t\t\t\t// the previous content of fileItemWidget.inputWidget\n\t\t\t\t\t// (a TextInputWidget with filename)\n\t\t\t\t\tconfig.model.previousFilename,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t} );\n\n\t\t\t// @FIXME move to FileItemWidget\n\n\t\t\tthis.on( 'fileUploaded', ( file ) => {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log( 'event fileUploaded', file );\n\t\t\t} );\n\n\t\t\tthis.on( 'fileUploadInit', ( file ) => {\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.log( 'event fileUploadInit', file );\n\t\t\t\trestoreButton.toggle( false );\n\t\t\t\tfileItemWidget = createFileItemWidget( file.name, false );\n\t\t\t} );\n\n\t\t\tthis.on(\n\t\t\t\t'fileUploadProgress',\n\t\t\t\t( file, progress, estimatedRemainingTime ) => {\n\t\t\t\t\tloadedFiles[ file.name ].progress( progress, estimatedRemainingTime );\n\t\t\t\t}\n\t\t\t);\n\n\t\t\tthis.on( 'fileUploadComplete', ( file, res ) => {\n\t\t\t\tloadedFiles[ file.name ].uploadComplete( file, res );\n\t\t\t} );\n\n\t\t\tthis.on( 'fileUploadErrorMessage', ( file, errorMessage ) => {\n\t\t\t\tloadedFiles[ file.name ].errorMessage( errorMessage );\n\t\t\t} );\n\n\t\t\tthis.on( 'fileUploadFail', ( file, res ) => {\n\t\t\t\tloadedFiles[ file.name ].fail( res );\n\t\t\t} );\n\n\t\t\tvar upload = new VisualDataUpload();\n\t\t\tupload.initialize( inputWidget, this );\n\t\t\tinputWidget.on( 'change', upload.uploadFiles.bind( upload ) );\n\t\t}\n\n\t\t// schema.description is removed if wiki['help-message'] was \"\"\n\t\tvar helpMessage = ( 'help-message' in schema.wiki && 'description' in schema ? schema.description : '' );\n\n\t\tvar fieldLayout = new OO.ui.FieldLayout(\n\t\t\t!config.model.isFile ? inputWidget : fileUploadGroupWidget, {\n\t\t\t\tlabel: new OO.ui.HtmlSnippet( 'label' in schema.wiki && 'title' in schema ? schema.title : '' ),\n\t\t\t\talign: fieldAlign,\n\t\t\t\thelpInline: helpMessage ? helpInline : true,\n\t\t\t\thelp: new OO.ui.HtmlSnippet( helpMessage )\n\t\t\t\t// classes: [`visualdata-input-${ config.model.path }`],\n\t\t\t}\n\t\t);\n\n\t\tFields[ config.model.path ] = fieldLayout;\n\n\t\tthis.$element.append( fieldLayout.$element );\n\t};\n\n\tOO.inheritClass( ItemWidget, OO.ui.Widget );\n\tOO.mixinClass( ItemWidget, OO.ui.mixin.GroupWidget );\n\n\t// @see https://gerrit.wikimedia.org/r/plugins/gitiles/oojs/ui/+/c2805c7e9e83e2f3a857451d46c80231d1658a0f/demos/classes/SearchWidgetDialog.js\n\tfunction ProcessDialogSearch( config ) {\n\t\tProcessDialogSearch.super.call( this, config );\n\t}\n\tOO.inheritClass( ProcessDialogSearch, OO.ui.ProcessDialog );\n\tProcessDialogSearch.static.name = DialogSearchName;\n\n\tProcessDialogSearch.prototype.initialize = function () {\n\t\tProcessDialogSearch.super.prototype.initialize.apply( this, arguments );\n\t\tvar self = this;\n\t\tvar selectedSchemas = Form.schemas;\n\t\tthis.selectedItems = [];\n\t\tfunction getItems( value ) {\n\t\t\tvar values;\n\t\t\tswitch ( self.data.toolName ) {\n\t\t\t\tcase 'addremoveschemas':\n\t\t\t\t\tself.selectedItems = selectedSchemas;\n\t\t\t\t\tvalues = Object.keys( Schemas );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tif ( value ) {\n\t\t\t\tvar valueLowerCase = value.toLowerCase();\n\t\t\t\tvalues = values.filter(\n\t\t\t\t\t( x ) => x.toLowerCase().indexOf( valueLowerCase ) !== -1\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn values.map( ( x ) => {\n\t\t\t\tvar menuOptionWidget = new OO.ui.MenuOptionWidget( {\n\t\t\t\t\tdata: x,\n\t\t\t\t\tlabel: x,\n\t\t\t\t\tselected: inArray( x, self.selectedItems )\n\t\t\t\t} );\n\t\t\t\treturn menuOptionWidget;\n\t\t\t} );\n\t\t}\n\n\t\tvar searchWidget = new OO.ui.SearchWidget( {\n\t\t\t// id: \"visualdata-import-search-widget\",\n\t\t} );\n\n\t\tsearchWidget.results.addItems( getItems() );\n\n\t\t// searchWidget.getResults() is a SelectWidget\n\t\t// https://doc.wikimedia.org/oojs-ui/master/js/#!/api/OO.ui.SelectWidget\n\t\tvar searchWidgetResults = searchWidget.getResults();\n\t\tsearchWidgetResults.multiselect = true;\n\n\t\tsearchWidgetResults.on( 'press', ( value ) => {\n\t\t\tif ( value === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( inArray( value.data, self.selectedItems ) ) {\n\t\t\t\tself.selectedItems.splice( self.selectedItems.indexOf( value.data ), 1 );\n\t\t\t} else {\n\t\t\t\tself.selectedItems.push( value.data );\n\t\t\t}\n\t\t} );\n\t\tsearchWidget.onQueryChange = function ( value ) {\n\t\t\tsearchWidget.results.clearItems();\n\t\t\tsearchWidget.results.addItems( getItems( value ) );\n\t\t};\n\n\t\tthis.$body.append( [ searchWidget.$element ] );\n\t};\n\n\tProcessDialogSearch.prototype.getBodyHeight = function () {\n\t\treturn 300;\n\t};\n\n\tProcessDialogSearch.static.actions = [\n\t\t{\n\t\t\taction: 'save',\n\t\t\t// modes: \"edit\",\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-searchdialog-save' ),\n\t\t\tflags: [ 'primary', 'progressive' ]\n\t\t},\n\t\t{\n\t\t\t// modes: \"edit\",\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-cancel' ),\n\t\t\tflags: [ 'safe', 'close' ]\n\t\t}\n\t];\n\tProcessDialogSearch.prototype.getActionProcess = function ( action ) {\n\t\tvar dialog = this;\n\n\t\tif ( action === 'save' ) {\n\t\t\tvar values = processDialogSearch.selectedItems;\n\t\t\t// ProcessModel.getModel(\"fetch\").then(function (res) {\n\t\t\t// Form.jsonData.schemas = res;\n\n\t\t\tswitch ( dialog.data.toolName ) {\n\t\t\t\tcase 'addremoveschemas':\n\t\t\t\t\tfor ( var i in ModelSchemas ) {\n\t\t\t\t\t\tif ( !inArray( i, values ) ) {\n\t\t\t\t\t\t\t// delete Form.jsonData.schemas[ i ];\n\t\t\t\t\t\t\tdelete ModelSchemas[ i ];\n\t\t\t\t\t\t\tdelete Fields[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tvar missingSchemas = [];\n\t\t\t\t\tfor ( var i of values ) {\n\t\t\t\t\t\tif ( !( i in Schemas ) || !Object.keys( Schemas[ i ] ).length ) {\n\t\t\t\t\t\t\tmissingSchemas.push( i );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// select first schema of new selection\n\t\t\t\t\tfor ( var i of values ) {\n\t\t\t\t\t\tif ( !( i in ModelSchemas ) ) {\n\t\t\t\t\t\t\tSelectedSchema = i;\n\t\t\t\t\t\t\tbreak;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\tif ( missingSchemas.length ) {\n\t\t\t\t\t\tVisualData.loadSchemas( missingSchemas );\n\t\t\t\t\t} else {\n\t\t\t\t\t\tupdatePanels();\n\t\t\t\t\t}\n\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\t// });\n\t\t}\n\n\t\treturn new OO.ui.Process( () => {\n\t\t\tdialog.close( { action: action } );\n\t\t} );\n\n\t\t// return ProcessDialog.super.prototype.getActionProcess.call( this, action );\n\t};\n\tProcessDialogSearch.prototype.getTeardownProcess = function ( data ) {\n\t\treturn ProcessDialogSearch.super.prototype.getTeardownProcess\n\t\t\t.call( this, data )\n\t\t\t.first( () => {\n\t\t\t\tWindowManager.removeActiveWindow();\n\t\t\t}, this );\n\t};\n\n\tfunction openSearchDialog( toolName ) {\n\t\tprocessDialogSearch = new ProcessDialogSearch( {\n\t\t\tsize: 'medium',\n\t\t\t// classes: [\"visualdata-search-dialog\"],\n\t\t\tdata: { toolName: toolName }\n\t\t} );\n\n\t\tWindowManager.newWindow( processDialogSearch, {\n\t\t\ttitle: mw.msg(\n\t\t\t\t'visualdata-jsmodule-forms-dialogsearch-selectschemas'\n\t\t\t)\n\t\t} );\n\t}\n\n\t// @see https://doc.wikimedia.org/oojs-ui/master/js/#!/api/OO.ui.Toolbar\n\t// @see https://gerrit.wikimedia.org/r/plugins/gitiles/oojs/ui/+/c2805c7e9e83e2f3a857451d46c80231d1658a0f/demos/pages/toolbars.js\n\tfunction createToolbar( /* disabled */ ) {\n\t\tvar toolFactory = new OO.ui.ToolFactory();\n\t\tvar toolGroupFactory = new OO.ui.ToolGroupFactory();\n\n\t\tvar toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory, {\n\t\t\tactions: true\n\t\t} );\n\n\t\tvar onSelect = function ( self ) {\n\t\t\tvar self = arguments.length ? self : this;\n\t\t\tvar toolName = self.getName();\n\n\t\t\tswitch ( toolName ) {\n\t\t\t\tcase 'addremoveschemas':\n\t\t\t\t\topenSearchDialog( toolName );\n\t\t\t\t\tbreak;\n\t\t\t\t// case \"createschema\":\n\t\t\t\t// \tVisualDataSchemas.openDialog(null, false);\n\t\t\t\t// \tbreak;\n\t\t\t}\n\n\t\t\tself.setActive( false );\n\t\t};\n\n\t\tvar loadDataBeforeSelect = function () {\n\t\t\tvar dataToLoad = VisualData.matchLoadedData( Config, [\n\t\t\t\t'schemas'\n\t\t\t] );\n\n\t\t\tif ( !dataToLoad.length ) {\n\t\t\t\treturn onSelect( this );\n\t\t\t}\n\n\t\t\tthis.setDisabled( true );\n\t\t\tthis.pushPending();\n\n\t\t\tVisualData.loadData( Config, dataToLoad )\n\t\t\t\t.then( ( res ) => {\n\t\t\t\t\tif ( 'schemas' in res ) {\n\t\t\t\t\t\tSchemas = res.schemas;\n\t\t\t\t\t}\n\t\t\t\t\tthis.setDisabled( false );\n\t\t\t\t\tthis.popPending();\n\t\t\t\t\tonSelect( this );\n\t\t\t\t} )\n\t\t\t\t.catch( ( error ) => {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error( 'loadData error', error );\n\t\t\t\t\tthis.popPending();\n\t\t\t\t\tthis.setDisabled( false );\n\t\t\t\t\tthis.setActive( false );\n\n\t\t\t\t\t// eslint-disable-next-line mediawiki/msg-doc\n\t\t\t\t\tVisualDataFunctions.OOUIAlert( new OO.ui.HtmlSnippet( mw.msg( error ) ), {\n\t\t\t\t\t\tsize: 'medium'\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t};\n\n\t\tvar toolGroup = [];\n\n\t\tif ( Config.context !== 'parserfunction' ) {\n\t\t\ttoolGroup.push( {\n\t\t\t\tname: 'addremoveschemas',\n\t\t\t\ticon: 'add',\n\t\t\t\ttitle: mw.msg(\n\t\t\t\t\t'visualdata-jsmodule-forms-addremoveschemas'\n\t\t\t\t),\n\t\t\t\tonSelect: onSelect\n\t\t\t} );\n\t\t}\n\n\t\tVisualDataFunctions.createToolGroup( toolFactory, 'group', toolGroup );\n\n\t\ttoolbar.setup( [\n\t\t\t{\n\t\t\t\tname: 'my-group',\n\t\t\t\t// type: \"bar\",\n\t\t\t\t// label: \"Create property\",\n\t\t\t\tinclude: [ { group: 'group' } ]\n\t\t\t}\n\t\t] );\n\n\t\treturn toolbar;\n\t}\n\n\tfunction createActionToolbar( /* disabled */ ) {\n\t\t// see https://gerrit.wikimedia.org/r/plugins/gitiles/oojs/ui/+/refs/tags/v0.40.4/demos/pages/toolbars.js\n\t\tvar toolFactory = new OO.ui.ToolFactory();\n\t\tvar toolGroupFactory = new OO.ui.ToolGroupFactory();\n\n\t\tvar toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory, {\n\t\t\tactions: false\n\t\t} );\n\n\t\tvar onSelect = function ( self ) {\n\t\t\tvar self = arguments.length ? self : this;\n\t\t\tvar selected = self.getName();\n\n\t\t\tvar panels = OuterStack.getItems();\n\t\t\tfor ( var panel of panels ) {\n\t\t\t\tif ( panel.getData().name === selected ) {\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tOuterStack.setItem( panel );\n\n\t\t\t// *** this prevents inconsistencies of the datatable layout\n\t\t\tswitch ( selected ) {\n\t\t\t\tcase 'manage-schemas':\n\t\t\t\t\tVisualDataSchemas.initialize();\n\t\t\t\t\tbreak;\n\t\t\t\t// case \"manage-forms\":\n\t\t\t\t// \t\tVisualDataForms.initialize();\n\t\t\t\t// \t\tbreak;\n\t\t\t\t// \tcase \"manage-semantic-properties\":\n\t\t\t\t// \t\tVisualDataSMW.initialize();\n\t\t\t\t// \t\tbreak;\n\t\t\t}\n\n\t\t\tself.setActive( false );\n\t\t};\n\n\t\tvar loadDataBeforeSelect = function () {\n\t\t\tvar dataToLoad = VisualData.matchLoadedData( Config, [\n\t\t\t\t// \"forms\",\n\t\t\t\t'schemas'\n\t\t\t\t// \"semantic-properties\",\n\t\t\t\t// \"imported-vocabularies\",\n\t\t\t\t// \"type-labels\",\n\t\t\t\t// \"property-labels\",\n\t\t\t] );\n\n\t\t\tif ( !dataToLoad.length ) {\n\t\t\t\treturn onSelect( this );\n\t\t\t}\n\n\t\t\t// this.setDisabled(true);\n\t\t\t// this.pushPending();\n\n\t\t\tActionWidget = new OO.ui.ActionWidget();\n\t\t\tToolbarMain.$bar.wrapInner( '<div class=\"wrapper\"></div>' );\n\t\t\tActionWidget.setPendingElement( ToolbarMain.$bar.find( '.wrapper' ) );\n\t\t\tActionWidget.pushPending();\n\n\t\t\t$( ToolbarMain.$bar ).find( '.wrapper' ).css( 'pointer-events', 'none' );\n\n\t\t\tVisualData.loadData( Config, dataToLoad )\n\t\t\t\t.then( ( res ) => {\n\t\t\t\t\t// this.setDisabled(false);\n\t\t\t\t\t// this.popPending();\n\t\t\t\t\tActionWidget.popPending();\n\t\t\t\t\t$( ToolbarMain.$bar ).find( '.wrapper' ).css( 'pointer-events', 'auto' );\n\n\t\t\t\t\t// VisualDataSMW.initialize(\n\t\t\t\t\t// \t\tSelf,\n\t\t\t\t\t// \t\tres[\"imported-vocabularies\"],\n\t\t\t\t\t// \t\tres[\"type-labels\"],\n\t\t\t\t\t// \t\tres[\"property-labels\"]\n\t\t\t\t\t// );\n\n\t\t\t\t\t// VisualDataForms.initialize(Self, Forms);\n\n\t\t\t\t\tonSelect( this );\n\t\t\t\t} )\n\t\t\t\t.catch( ( error ) => {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error( 'loadData error', error );\n\t\t\t\t\tActionWidget.popPending();\n\t\t\t\t\t$( ToolbarMain.$bar ).find( '.wrapper' ).css( 'pointer-events', 'auto' );\n\t\t\t\t\tthis.setActive( false );\n\n\t\t\t\t\t// eslint-disable-next-line mediawiki/msg-doc\n\t\t\t\t\tVisualDataFunctions.OOUIAlert( new OO.ui.HtmlSnippet( mw.msg( error ) ), {\n\t\t\t\t\t\tsize: 'medium'\n\t\t\t\t\t} );\n\t\t\t\t} );\n\t\t};\n\n\t\tvar toolGroup = [\n\t\t\t{\n\t\t\t\tname: 'visualdata',\n\t\t\t\ticon: null,\n\t\t\t\ttitle: mw.msg( 'visualdata-jsmodule-forms-edit-data' ),\n\t\t\t\tonSelect: onSelect\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'manage-schemas',\n\t\t\t\ticon: null,\n\t\t\t\ttitle: mw.msg( 'visualdata-jsmodule-forms-manage-schemas' ),\n\t\t\t\tonSelect: loadDataBeforeSelect\n\t\t\t\t// config: {\n\t\t\t\t// \tdata: { disabled: disabled },\n\t\t\t\t// },\n\t\t\t}\n\t\t\t// {\n\t\t\t// \tname: 'manage-forms',\n\t\t\t// \ticon: null,\n\t\t\t// \ttitle: mw.msg( 'visualdata-jsmodule-forms-manage-forms' ),\n\t\t\t// \tonSelect: loadDataBeforeSelect\n\t\t\t// \t// config: {\n\t\t\t// \t// \tdata: { disabled: disabled },\n\t\t\t// \t// },\n\t\t\t// }\n\t\t];\n\n\t\ttoolbar.setup( [\n\t\t\t// see https://gerrit.wikimedia.org/r/plugins/gitiles/oojs/ui/+/c2805c7e9e83e2f3a857451d46c80231d1658a0f/demos/pages/toolbars.js\n\t\t\t{\n\t\t\t\tname: 'editorSwitch',\n\t\t\t\talign: 'after',\n\t\t\t\ttype: 'list',\n\t\t\t\tlabel: 'Switch editor',\n\t\t\t\tinvisibleLabel: true,\n\t\t\t\ticon: 'menu',\n\t\t\t\tinclude: [ { group: 'selectSwitch' } ]\n\t\t\t}\n\t\t] );\n\n\t\t// @see https://gerrit.wikimedia.org/r/plugins/gitiles/oojs/ui/+/c2805c7e9e83e2f3a857451d46c80231d1658a0f/demos/pages/toolbars.js\n\t\t// VisualDataFunctions.createDisabledToolGroup(\n\t\t// \ttoolGroupFactory,\n\t\t// \tOO.ui.ListToolGroup,\n\t\t// \t\"editorSwitch\",\n\t\t// );\n\n\t\tVisualDataFunctions.createToolGroup(\n\t\t\ttoolFactory,\n\t\t\t'selectSwitch',\n\t\t\ttoolGroup\n\t\t);\n\n\t\treturn toolbar;\n\t}\n\n\tvar GroupWidget = function ( config, data ) {\n\t\tconfig = config || {};\n\t\tGroupWidget.super.call( this, config );\n\n\t\tOO.ui.mixin.GroupWidget.call(\n\t\t\tthis,\n\t\t\tObject.assign( { $group: this.$element }, config )\n\t\t);\n\t\t// OO.EventEmitter.call( this );\n\n\t\tthis.data = data;\n\n\t\tfunction showBorder() {\n\t\t\tif (\n\t\t\t\tdata.root ||\n\t\t\t\tdata.schema.wiki.type === 'content-block' ||\n\t\t\t\tdata.schema.wiki.type === 'property'\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\n\t\t\tif (\n\t\t\t\tdata.schema.type === 'array' &&\n\t\t\t\tVisualDataFunctions.getNestedProp( [ 'items', 'wiki', 'preferred-input' ], data.schema ) &&\n\t\t\t\tdata.schema.items.type !== 'object' &&\n\t\t\t\tVisualDataFunctions.isMultiselect(\n\t\t\t\t\tdata.schema.items.wiki[ 'preferred-input' ]\n\t\t\t\t)\n\t\t\t) {\n\t\t\t\treturn false;\n\t\t\t}\n\t\t\treturn true;\n\t\t}\n\t\tvar showBorderValue = showBorder();\n\n\t\t// eslint-disable-next-line mediawiki/class-doc\n\t\tvar layout = new OO.ui.PanelLayout( {\n\t\t\texpanded: false,\n\t\t\tpadded: showBorderValue,\n\t\t\tframed: showBorderValue,\n\t\t\tclasses: [\n\t\t\t\t'VisualDataGroupWidgetPanel' + ( !showBorderValue ? '-border' : '' )\n\t\t\t],\n\t\t\tid: makeElementId( data.path )\n\t\t} );\n\n\t\tthis.layout = layout;\n\n\t\tif ( data.root ) {\n\t\t\tvar $containerRight = $( '<div class=\"visualdata-form-container-right\">' );\n\t\t\tlayout.$element.append( $containerRight );\n\n\t\t\tif ( Config.context === 'EditData' ) {\n\t\t\t\tvar deleteButton = new OO.ui.ButtonWidget( {\n\t\t\t\t\ticon: 'trash',\n\t\t\t\t\tframed: false,\n\t\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-delete-schema' ),\n\t\t\t\t\tinvisibleLabel: true,\n\t\t\t\t\tflags: [ 'destructive' ]\n\t\t\t\t} );\n\n\t\t\t\tdeleteButton.on( 'click', () => {\n\t\t\t\t\tForm.schemas.splice( Form.schemas.indexOf( data.schema.wiki.name ), 1 );\n\t\t\t\t\t// delete Form.jsonData.schemas[ data.schema.wiki.name ];\n\t\t\t\t\tdelete ModelSchemas[ data.schema.wiki.name ];\n\t\t\t\t\tdelete Fields[ data.schema.wiki.name ];\n\t\t\t\t\tupdatePanels();\n\t\t\t\t} );\n\n\t\t\t\t$containerRight.append( deleteButton.$element );\n\t\t\t}\n\n\t\t\tif ( Config.canmanageschemas ) {\n\t\t\t\tvar editButton = new OO.ui.ButtonWidget( {\n\t\t\t\t\t// 'settings'\n\t\t\t\t\ticon: 'edit',\n\t\t\t\t\tframed: false,\n\t\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-edit-schema' ),\n\t\t\t\t\tinvisibleLabel: true\n\t\t\t\t\t// classes: [\"VisualDataOptionsListDeleteButton\"],\n\t\t\t\t} );\n\n\t\t\t\teditButton.on( 'click', () => {\n\t\t\t\t\tVisualDataSchemas.openSchemaDialog(\n\t\t\t\t\t\t[ data.schema.wiki.name ],\n\t\t\t\t\t\t'properties'\n\t\t\t\t\t);\n\t\t\t\t} );\n\n\t\t\t\t$containerRight.append( editButton.$element );\n\t\t\t}\n\t\t}\n\n\t\tvar messageWidget = new OO.ui.MessageWidget( {\n\t\t\tclasses: [ 'VisualDataGroupWidgetMessageWidget' ]\n\t\t} );\n\n\t\t// @TODO toggle parent as well if all children\n\t\t// aren't visible\n\t\tthis.toggle(\n\t\t\t!VisualDataFunctions.getNestedProp(\n\t\t\t\t[ 'schema', 'options', 'hidden' ],\n\t\t\t\tdata\n\t\t\t)\n\t\t);\n\n\t\tmessageWidget.toggle( false );\n\n\t\tFields[ data.path ] = messageWidget;\n\n\t\tlayout.$element.append( messageWidget.$element );\n\n\t\tswitch ( data.schema.wiki.layout ) {\n\t\t\tcase 'horizontal':\n\t\t\t\tthis.layoutHorizontal = new OO.ui.HorizontalLayout();\n\n\t\t\t\tlayout.$element.append(\n\t\t\t\t\t$(\n\t\t\t\t\t\t'<div class=\"visualdata-form-table-multiple-fields\" style=\"display: table\">'\n\t\t\t\t\t).append( [\n\t\t\t\t\t\t$( '<div style=\"display: table-cell;vertical-align:middle\">' ).append(\n\t\t\t\t\t\t\tthis.layoutHorizontal.$element\n\t\t\t\t\t\t),\n\t\t\t\t\t\t$(\n\t\t\t\t\t\t\t'<div class=\"visualdata-horizontal-section-remove-row\" style=\"display: table-cell\">'\n\t\t\t\t\t\t)\n\t\t\t\t\t] )\n\t\t\t\t);\n\t\t\t\tbreak;\n\n\t\t\tdefault:\n\t\t\t\t// title and description are mapped to label and\n\t\t\t\t// help-message in the property field, and\n\t\t\t\t// schema.wiki.title and schema.wiki.description\n\t\t\t\t// contain the wikitext, not the parsed output\n\n\t\t\t\tthis.fieldset = new OO.ui.FieldsetLayout( {\n\t\t\t\t\tlabel: new OO.ui.HtmlSnippet( 'title' in data.schema.wiki && 'title' in data.schema ? data.schema.title : '' )\n\t\t\t\t} );\n\n\t\t\t\tif ( 'description' in data.schema.wiki && 'description' in data.schema ) {\n\t\t\t\t\tthis.fieldset.addItems( [\n\t\t\t\t\t\tnew OO.ui.Element( {\n\t\t\t\t\t\t\tcontent: [\n\t\t\t\t\t\t\t\tnew OO.ui.HtmlSnippet( data.schema.description )\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t} )\n\t\t\t\t\t] );\n\t\t\t\t}\n\n\t\t\t\tif ( data.schema.wiki.layout === 'table' ) {\n\t\t\t\t\tlayout.$element.append(\n\t\t\t\t\t\t$(\n\t\t\t\t\t\t\t'<div class=\"visualdata-form-table-multiple-fields\" style=\"display: table\">'\n\t\t\t\t\t\t).append( [\n\t\t\t\t\t\t\t$( '<div style=\"display: table-cell\">' ).append(\n\t\t\t\t\t\t\t\tthis.fieldset.$element\n\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t$(\n\t\t\t\t\t\t\t\t'<div class=\"visualdata-horizontal-section-remove-row\" style=\"display: table-cell\">'\n\t\t\t\t\t\t\t)\n\t\t\t\t\t\t] )\n\t\t\t\t\t);\n\t\t\t\t} else {\n\t\t\t\t\tlayout.$element.append( this.fieldset.$element );\n\t\t\t\t}\n\n\t\t\t\tif ( data.schema.wiki.type === 'geolocation' && data.schema.wiki.map === true ) {\n\t\t\t\t\tif ( !Maps.length ) {\n\t\t\t\t\t\t( new VisualDataMaptiler() ).load();\n\t\t\t\t\t}\n\t\t\t\t\tMaps.push( { data, element: layout.$element } );\n\t\t\t\t}\n\n\t\t\t\tthis.connect( this, {\n\t\t\t\t\tformLoaded: 'formLoaded'\n\t\t\t\t} );\n\t\t}\n\n\t\t/*\n\t\t// @TODO implement button switch for oneOf, anyOf\n\t\tthis.buttonSelectWidget = new OO.ui.ButtonSelectWidget();\n\n\t\tvar self = this;\n\t\tthis.buttonSelectWidget.on(\"choose\", function (item, seleted) {\n\t\t\tself.booklet.setPage(item.data);\n\t\t});\n\n\t\tlayout.$element.append(this.buttonSelectWidget.$element);\n\n\t\t// var directives = [ 'anyOf', 'oneOf', 'allOf' ];\n\n\t\t// for ( var directive of directives ) {\n\t\t// \tthis['fieldset-' + directive] = new OO.ui.FieldsetLayout({\n\t\t// \t\t// label: data.wiki.title,\n\t\t// \t});\n\t\t// \tlayout.$element.append(this['fieldset-' + directive].$element);\n\t\t// }\n\n\t\tthis.booklet = new OO.ui.BookletLayout({\n\t\t\toutlined: false,\n\t\t\texpanded: true,\n\t\t\tpadded: false,\n\t\t\tclasses: [\"VisualDataGroupWidgetBooklet\"],\n\t\t});\n\n\t\tlayout.$element.append(this.booklet.$element);\n\n\t\t*/\n\n\t\tthis.$element.append( layout.$element );\n\t};\n\n\tOO.inheritClass( GroupWidget, OO.ui.Widget );\n\tOO.mixinClass( GroupWidget, OO.ui.mixin.GroupWidget );\n\t// OO.mixinClass( GroupWidget, OO.EventEmitter );\n\n\tGroupWidget.prototype.formLoaded = function () {\n\t//\tif ( this.data.root === true ) {\n\t\tsetTimeout( () => {\n\t\t\tVisualDataFunctions.removeNbspFromLayoutHeader( 'form' );\n\t\t}, 30 );\n\n\t\tsetTimeout( () => {\n\t\t\tVisualDataFunctions.removeNbspFromLayoutHeader(\n\t\t\t\t'#visualdataform-wrapper-dialog-' + FormID\n\t\t\t);\n\t\t}, 30 );\n\n\t\t// *** we use mutationChange instead\n\t\t// for ( var model of ModelFlatten ) {\n\t\t//\tupdateFieldsVisibility( model );\n\t\t// }\n\n\t\tloadMaps();\n\n\t\tfor ( var model of ModelFlatten ) {\n\t\t\tupdateDependentFields( model );\n\t\t}\n\t\t// }\n\t};\n\n\tGroupWidget.prototype.addItems = function ( items ) {\n\t\tif ( this.data.schema.wiki.layout === 'horizontal' ) {\n\t\t\tthis.layoutHorizontal.addItems( items );\n\t\t} else {\n\t\t\tthis.fieldset.addItems( items );\n\t\t}\n\t};\n\n\tGroupWidget.prototype.addCombinedItem = function ( item, title, directive ) {\n\t\t// this['fieldset-' + directive].addItems(items);\n\n\t\tvar items = [\n\t\t\tnew OO.ui.ButtonOptionWidget( {\n\t\t\t\tdata: title,\n\t\t\t\tlabel: title\n\t\t\t} )\n\t\t];\n\t\tthis.buttonSelectWidget.addItems( items );\n\n\t\t//\tthis['fieldset-' + directive]..addItems(items);\n\n\t\tif ( this.buttonSelectWidget.items.length === 1 ) {\n\t\t\tthis.buttonSelectWidget.selectItem( items[ 0 ] );\n\t\t}\n\n\t\tvar ThisPageLayout = function ( name, config ) {\n\t\t\tThisPageLayout.super.call( this, name, config );\n\t\t\tthis.$element.append( item.$element );\n\t\t};\n\t\tOO.inheritClass( ThisPageLayout, OO.ui.PageLayout );\n\n\t\tvar page = new ThisPageLayout( title );\n\n\t\tthis.booklet.addPages( [ page ] );\n\t};\n\n\tfunction PanelLayout( config ) {\n\t\tPanelLayout.super.call( this, config );\n\n\t\tvar data = this.data;\n\t\tvar content;\n\n\t\tif ( !( 'layout' in Form.options ) ) {\n\t\t\tForm.options.layout = 'tabs';\n\t\t}\n\n\t\t// @TODO implement booklet also outside dialog\n\t\tif ( Form.options.layout === 'booklet' && Form.options.view !== 'popup' && Form.options.view !== 'button' ) {\n\t\t\tForm.options.layout = 'tabs';\n\t\t}\n\n\t\tPendingRecursive = 0;\n\t\tQueuedWidgets = [];\n\t\tMaps = [];\n\t\tfunction getWidgets() {\n\t\t\tvar ret = {};\n\n\t\t\tfor ( var schemaName_ of Form.schemas ) {\n\n\t\t\t\tvar schema = Schemas[ schemaName_ ];\n\t\t\t\tvar previousSchema =\n\t\t\t\t\tschemaName_ in PreviousSchemas ?\n\t\t\t\t\t\tPreviousSchemas[ schemaName_ ] :\n\t\t\t\t\t\t{};\n\n\t\t\t\tif ( !( schemaName_ in Form.jsonData.schemas ) ) {\n\t\t\t\t\tForm.jsonData.schemas[ schemaName_ ] = {};\n\t\t\t\t}\n\n\t\t\t\tvar path = `${ escapeJsonPtr( schemaName_ ) }`;\n\t\t\t\tvar pathNoIndex = '';\n\t\t\t\tvar model = ( ModelSchemas[ schemaName_ ] = {\n\t\t\t\t\tparent: ModelSchemas,\n\t\t\t\t\tchildIndex: schemaName_,\n\t\t\t\t\tparentSchema: null\n\t\t\t\t} );\n\t\t\t\tvar widget = new GroupWidget(\n\t\t\t\t\t{},\n\t\t\t\t\t{ root: true, schema, path, model }\n\t\t\t\t);\n\n\t\t\t\tprocessSchema(\n\t\t\t\t\twidget,\n\t\t\t\t\tschema,\n\t\t\t\t\tpreviousSchema,\n\t\t\t\t\tschemaName_,\n\t\t\t\t\tmodel,\n\t\t\t\t\tForm.jsonData.schemas[ schemaName_ ],\n\t\t\t\t\tpath,\n\t\t\t\t\tpathNoIndex,\n\t\t\t\t\tfalse\n\t\t\t\t);\n\n\t\t\t\tret[ schemaName_ ] = widget;\n\t\t\t}\n\n\t\t\treturn ret;\n\t\t}\n\n\t\tfunction getFreeTextInput( wikitext, thisConfig ) {\n\t\t\tvar thisInputWidget;\n\n\t\t\tthisConfig = Object.assign(\n\t\t\t\t{\n\t\t\t\t\tname: `${ FormID }-model-freetext`,\n\t\t\t\t\tid: `${ FormID }-model-freetext`\n\t\t\t\t},\n\t\t\t\tthisConfig\n\t\t\t);\n\n\t\t\tif ( !wikitext || !Config.VEForAll ) {\n\t\t\t\tthisInputWidget = new OO.ui.MultilineTextInputWidget(\n\t\t\t\t\tObject.assign(\n\t\t\t\t\t\t{\n\t\t\t\t\t\t\tautosize: true,\n\t\t\t\t\t\t\trows: 6\n\t\t\t\t\t\t},\n\t\t\t\t\t\tthisConfig\n\t\t\t\t\t)\n\t\t\t\t);\n\t\t\t} else {\n\t\t\t\tthisInputWidget = new VisualDataVisualEditor( thisConfig );\n\t\t\t}\n\t\t\tModel.freetext = thisInputWidget;\n\t\t\tInputWidgets[ thisConfig.name ] = thisInputWidget;\n\t\t\treturn thisInputWidget;\n\t\t}\n\n\t\tswitch ( data.name ) {\n\t\t\tcase 'schemas':\n\t\t\t\tif ( !( 'schemas' in Form.jsonData ) ) {\n\t\t\t\t\tForm.jsonData.schemas = {};\n\t\t\t\t}\n\n\t\t\t\tfor ( var thisSchemaName of Form.schemas ) {\n\t\t\t\t\tif ( !( thisSchemaName in Schemas ) ) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error( \"required schema doesn't exist\", thisSchemaName );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\tForm.schemas = Form.schemas.filter( ( x ) => x in Schemas );\n\n\t\t\t\tif ( !SelectedSchema || Form.schemas.indexOf( SelectedSchema ) === -1 ) {\n\t\t\t\t\tSelectedSchema = ( Form.schemas.length ? Form.schemas[ 0 ] : null );\n\t\t\t\t}\n\n\t\t\t\tvar layout = Form.options.layout;\n\t\t\t\tvar widgets = getWidgets();\n\n\t\t\t\tif ( !SelectedSchema ) {\n\t\t\t\t\tthis.isEmpty = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar ThisPageLayout = function ( name, thisConfig ) {\n\t\t\t\t\tThisPageLayout.super.call( this, name, thisConfig );\n\t\t\t\t};\n\n\t\t\t\tOO.inheritClass( ThisPageLayout, OO.ui.PageLayout );\n\n\t\t\t\tThisPageLayout.prototype.setupOutlineItem = function () {\n\t\t\t\t\tthis.outlineItem.setLabel( this.name );\n\t\t\t\t};\n\n\t\t\t\tvar ThisTabPanelLayout = function ( name, thisConfig ) {\n\t\t\t\t\tthis.name = name;\n\t\t\t\t\tThisTabPanelLayout.super.call( this, name, thisConfig );\n\t\t\t\t};\n\n\t\t\t\tOO.inheritClass( ThisTabPanelLayout, OO.ui.TabPanelLayout );\n\t\t\t\tThisTabPanelLayout.prototype.setupTabItem = function () {\n\t\t\t\t\tthis.tabItem.setLabel( this.name );\n\n\t\t\t\t\tthis.deleteButton = new OO.ui.ButtonWidget( {\n\t\t\t\t\t\ticon: 'close',\n\t\t\t\t\t\tframed: false,\n\t\t\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-delete-schema' ),\n\t\t\t\t\t\tinvisibleLabel: true,\n\t\t\t\t\t\tclasses: [ 'VisualDataTabPanelLayoutTabItemDeleteButton' ]\n\t\t\t\t\t} );\n\n\t\t\t\t\tthis.deleteButton.on( 'click', function () {\n\t\t\t\t\t\tForm.schemas.splice( Form.schemas.indexOf( this.name ), 1 );\n\t\t\t\t\t\t// delete Form.jsonData.schemas[ data.schema.wiki.name ];\n\t\t\t\t\t\tdelete ModelSchemas[ this.name ];\n\t\t\t\t\t\tdelete Fields[ this.name ];\n\t\t\t\t\t\tupdatePanels();\n\t\t\t\t\t} );\n\n\t\t\t\t\tthis.deleteButton.toggle( this.name === SelectedSchema );\n\t\t\t\t\t// @TODO\n\t\t\t\t\t// this.tabItem.$label.append( this.deleteButton.$element );\n\t\t\t\t};\n\n\t\t\t\tThisTabPanelLayout.prototype.toggleCloseButton = function () {\n\t\t\t\t};\n\n\t\t\t\tswitch ( layout ) {\n\t\t\t\t\tcase 'single':\n\t\t\t\t\t\tcontent = widgets[ SelectedSchema ];\n\t\t\t\t\t\tthis.$element.addClass( 'PanelPropertiesStackPanelSingle' );\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'booklet':\n\t\t\t\t\t\tvar booklet = new OO.ui.BookletLayout( {\n\t\t\t\t\t\t\toutlined: true,\n\t\t\t\t\t\t\texpanded: true,\n\t\t\t\t\t\t\tpadded: false\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t// booklet.on( 'set', function () {\n\t\t\t\t\t\t// \tonTabSelect( booklet.getCurrentPageName() );\n\t\t\t\t\t\t// } );\n\n\t\t\t\t\t\tSchemasLayout = booklet;\n\n\t\t\t\t\t\tvar items = [];\n\n\t\t\t\t\t\tfor ( var schemaName in widgets ) {\n\t\t\t\t\t\t\tvar tabPanel = new ThisPageLayout( schemaName );\n\t\t\t\t\t\t\ttabPanel.$element.append( widgets[ schemaName ].$element );\n\t\t\t\t\t\t\titems.push( tabPanel );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tbooklet.addPages( items );\n\t\t\t\t\t\tcontent = booklet;\n\n\t\t\t\t\t\t// booklet.setPage( SelectedSchema );\n\n\t\t\t\t\t\tthis.$element.addClass( 'PanelPropertiesStackPanelBooklet' );\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'tabs':\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tvar indexLayout = new OO.ui.IndexLayout( {\n\t\t\t\t\t\t\tframed: true,\n\t\t\t\t\t\t\tshowMenu: false,\n\t\t\t\t\t\t\texpanded: true,\n\t\t\t\t\t\t\tpadded: false,\n\t\t\t\t\t\t\tautoFocus: false\n\t\t\t\t\t\t} );\n\n\t\t\t\t\t\tSchemasLayout = indexLayout;\n\n\t\t\t\t\t\t// indexLayout.on( 'set', function () {\n\t\t\t\t\t\t// \tonTabSelect( indexLayout.getCurrentTabPanelName() );\n\t\t\t\t\t\t// } );\n\n\t\t\t\t\t\tvar items = [];\n\t\t\t\t\t\tfor ( var schemaName in widgets ) {\n\t\t\t\t\t\t\tvar tabPanel = new ThisTabPanelLayout( schemaName );\n\t\t\t\t\t\t\ttabPanel.$element.append( widgets[ schemaName ].$element );\n\t\t\t\t\t\t\titems.push( tabPanel );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tindexLayout.addTabPanels( items );\n\t\t\t\t\t\t// indexLayout.setTabPanel( SelectedSchema );\n\t\t\t\t\t\tcontent = indexLayout;\n\n\t\t\t\t\t\tthis.$element.addClass( 'PanelPropertiesStackPanelTabs' );\n\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'article':\n\t\t\t\tvar items = [];\n\t\t\t\tvar userDefinedInput;\n\t\t\t\tvar userDefinedField;\n\t\t\t\tvar freeTextField;\n\t\t\t\tvar categoriesField;\n\t\t\t\tvar contentModelField;\n\n\t\t\t\tif ( data.userDefined ) {\n\t\t\t\t\tvar inputName = 'mw.widgets.TitleInputWidget';\n\n\t\t\t\t\tuserDefinedInput = new mw.widgets.TitleInputWidget( {\n\t\t\t\t\t\tname: `${ FormID }-model-target-title`,\n\t\t\t\t\t\tvalue: !( 'userDefined' in Form ) ? '' : Form.userDefined,\n\t\t\t\t\t\t// @FIXME if the stack panel is hidden\n\t\t\t\t\t\t// this will create a browser error\n\t\t\t\t\t\trequired: true\n\t\t\t\t\t} );\n\n\t\t\t\t\tModel[ 'target-title' ] = userDefinedInput;\n\n\t\t\t\t\tuserDefinedField = new OO.ui.FieldLayout( userDefinedInput, {\n\t\t\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-pagename' ),\n\t\t\t\t\t\talign: data.fieldAlign\n\t\t\t\t\t\t// classes: [\"ItemWidget\", \"inputName-\" + inputName],\n\t\t\t\t\t} );\n\t\t\t\t\titems.push( userDefinedField );\n\t\t\t\t}\n\n\t\t\t\tif ( data.editTargetSlot ) {\n\t\t\t\t\tvar targetSlotInput = new OO.ui.DropdownInputWidget( {\n\t\t\t\t\t\tname: `${ FormID }-model-target-slot`,\n\t\t\t\t\t\toptions: VisualDataFunctions.createDropDownOptions( {\n\t\t\t\t\t\t\tjsondata: mw.msg( 'visualdata-jsmodule-forms-target-slot-option-jsondata' ),\n\t\t\t\t\t\t\tmain: mw.msg( 'visualdata-jsmodule-forms-target-slot-option-main' )\n\t\t\t\t\t\t} ),\n\t\t\t\t\t\tvalue: Form.options[ 'target-slot' ]\n\t\t\t\t\t} );\n\n\t\t\t\t\tModel[ 'target-slot' ] = targetSlotInput;\n\n\t\t\t\t\ttargetSlotInput.on( 'change', ( value ) => {\n\t\t\t\t\t\tif ( freeTextField ) {\n\t\t\t\t\t\t\tfreeTextField.toggle( value !== 'main' );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( contentModelField ) {\n\t\t\t\t\t\t\tcontentModelField.toggle( value !== 'main' );\n\t\t\t\t\t\t}\n\t\t\t\t\t} );\n\n\t\t\t\t\tTargetSlotField = new OO.ui.FieldLayout( targetSlotInput, {\n\t\t\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-target-slot' ),\n\t\t\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-forms-target-slot-help' ),\n\t\t\t\t\t\thelpInline: true,\n\t\t\t\t\t\talign: data.fieldAlign\n\t\t\t\t\t} );\n\n\t\t\t\t\t// TargetSlotField.toggle( false );\n\n\t\t\t\t\titems.push( TargetSlotField );\n\t\t\t\t}\n\n\t\t\t\tif ( data.editFreeText ) {\n\t\t\t\t\tvar inputWidget = getFreeTextInput( Config.contentModel === 'wikitext', {\n\t\t\t\t\t\tvalue: Form.freetext,\n\t\t\t\t\t\tcontentModel: Config.contentModel\n\t\t\t\t\t} );\n\n\t\t\t\t\tfreeTextField = new OO.ui.FieldLayout( inputWidget, {\n\t\t\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-freetext' ),\n\t\t\t\t\t\talign: data.fieldAlign\n\t\t\t\t\t} );\n\n\t\t\t\t\tfreeTextField.toggle( Form.options[ 'target-slot' ] !== 'main' );\n\n\t\t\t\t\titems.push( freeTextField );\n\t\t\t\t}\n\n\t\t\t\tif ( data.editCategories ) {\n\t\t\t\t\tvar categories = data.categories;\n\n\t\t\t\t\tvar categoriesInput = new mw.widgets.CategoryMultiselectWidget( {\n\t\t\t\t\t\tname: `${ FormID }-model-categories`\n\t\t\t\t\t\t// value: categories,\n\t\t\t\t\t} );\n\n\t\t\t\t\tModel.categories = categoriesInput;\n\n\t\t\t\t\t// ***prevents error \"Cannot read properties of undefined (reading 'apiUrl')\"\n\t\t\t\t\tfor ( var category of categories ) {\n\t\t\t\t\t\tcategoriesInput.addTag( category );\n\t\t\t\t\t}\n\n\t\t\t\t\tcategoriesField = new OO.ui.FieldLayout( categoriesInput, {\n\t\t\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-categories' ),\n\t\t\t\t\t\talign: data.fieldAlign,\n\t\t\t\t\t\tclasses: [ 'VisualDataItemWidget' ]\n\t\t\t\t\t} );\n\n\t\t\t\t\titems.push( categoriesField );\n\t\t\t\t}\n\n\t\t\t\tif ( data.editContentModel ) {\n\t\t\t\t\tvar contentModelInput = new OO.ui.DropdownInputWidget( {\n\t\t\t\t\t\tname: `${ FormID }-model-content-model`,\n\t\t\t\t\t\toptions: VisualDataFunctions.createDropDownOptions(\n\t\t\t\t\t\t\tConfig.contentModels\n\t\t\t\t\t\t),\n\t\t\t\t\t\tvalue: Config.contentModel\n\t\t\t\t\t} );\n\n\t\t\t\t\tcontentModelInput.on( 'change', async ( value ) => {\n\t\t\t\t\t\tif ( !( 'freetext' in Model ) ) {\n\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar thisInputWidget;\n\t\t\t\t\t\tvar freetextValue = Model.freetext.getValue();\n\n\t\t\t\t\t\tif ( VisualDataFunctions.isPromise( freetextValue ) ) {\n\t\t\t\t\t\t\tfreetextValue = await freetextValue;\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// @TODO convert from/to html and wikitext\n\t\t\t\t\t\t// value === \"html\" ||\n\t\t\t\t\t\tif ( value === 'wikitext' ) {\n\t\t\t\t\t\t\tthisInputWidget = getFreeTextInput( true, {\n\t\t\t\t\t\t\t\tcontentModel: value,\n\t\t\t\t\t\t\t\tvalue: freetextValue\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t// // @TODO use TinyMCE for html\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tthisInputWidget = getFreeTextInput( false, {\n\t\t\t\t\t\t\t\tvalue: freetextValue\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t}\n\t\t\t\t\t\t$( `#${ FormID }-model-freetext` ).replaceWith( thisInputWidget.$element );\n\t\t\t\t\t} );\n\n\t\t\t\t\tModel[ 'content-model' ] = contentModelInput;\n\n\t\t\t\t\tcontentModelField = new OO.ui.FieldLayout( contentModelInput, {\n\t\t\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-content-models' ),\n\t\t\t\t\t\talign: data.fieldAlign,\n\t\t\t\t\t\tclasses: [ 'VisualDataItemWidget' ]\n\t\t\t\t\t} );\n\n\t\t\t\t\tcontentModelField.toggle( Form.options[ 'target-slot' ] !== 'main' );\n\n\t\t\t\t\titems.push( contentModelField );\n\t\t\t\t}\n\n\t\t\t\tif ( !items.length ) {\n\t\t\t\t\tthis.isEmpty = true;\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tthis.$element.addClass( 'PanelPropertiesStackPanelFieldset' );\n\n\t\t\t\tcontent = new OO.ui.FieldsetLayout( {\n\t\t\t\t\tlabel: '',\n\t\t\t\t\titems: items\n\t\t\t\t} );\n\t\t}\n\n\t\tthis.isEmpty = false;\n\t\tthis.$element.append( content.$element );\n\t}\n\n\tOO.inheritClass( PanelLayout, OO.ui.PanelLayout );\n\n\tvar OptionsList = function ListWidget( config, schema, model ) {\n\t\tconfig = config || {};\n\n\t\t// Call parent constructor\n\t\tOptionsList.super.call( this, config );\n\n\t\tOO.ui.mixin.GroupWidget.call(\n\t\t\tthis,\n\t\t\tObject.assign(\n\t\t\t\t{\n\t\t\t\t\t$group: this.$element\n\t\t\t\t},\n\t\t\t\tconfig\n\t\t\t)\n\t\t);\n\n\t\tthis.schema = schema;\n\t\tthis.model = model;\n\n\t\tthis.aggregate( {\n\t\t\tdelete: 'itemDelete'\n\t\t} );\n\n\t\tthis.connect( this, {\n\t\t\titemDelete: 'onItemDelete'\n\t\t} );\n\n\t\tthis.connect( this, {\n\t\t\tadd: 'onAddItem'\n\t\t} );\n\t};\n\n\tOO.inheritClass( OptionsList, OO.ui.Widget );\n\tOO.mixinClass( OptionsList, OO.ui.mixin.GroupWidget );\n\n\tOptionsList.prototype.onAddItem = function () {};\n\n\tOptionsList.prototype.onItemDelete = function () {};\n\n\t// OptionsList.prototype.addItems = function (items) {\n\t// \tfor ( var i in items ) {\n\t// \t\tOO.ui.mixin.GroupWidget.prototype.addItem.call(this, items[i], i);\n\t// \t}\n\t// }\n\n\tOptionsList.prototype.addItem = function ( item, i ) {\n\t\tvar self = this;\n\t\titem.data.index = i;\n\n\t\tfunction recDeleteValue( model ) {\n\t\t\tswitch ( model.schema.type ) {\n\t\t\t\tcase 'object':\n\t\t\t\t\tif ( 'properties' in model ) {\n\t\t\t\t\t\tfor ( var ii in model.properties ) {\n\t\t\t\t\t\t\trecDeleteValue( model.properties[ ii ] );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'array':\n\t\t\t\t\t// @TODO implement tuple\n\t\t\t\t\tif ( VisualDataFunctions.isObject( schema.items ) ) {\n\t\t\t\t\t\trecDeleteValue( model.items );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tif ( 'input' in model ) {\n\t\t\t\t\t\tmodel.input.setValue( !model.multiselect ? '' : [] );\n\t\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tvar deleteButton = new OO.ui.ButtonWidget( {\n\t\t\ticon: 'close'\n\t\t\t// flags: [\"destructive\"],\n\t\t\t// classes: [\"VisualDataOptionsListDeleteButton\"],\n\t\t} );\n\t\tdeleteButton.on( 'click', () => {\n\t\t\tif (\n\t\t\t\t!( 'minItems' in self.schema ) ||\n\t\t\t\tself.items.length > self.schema.minItems\n\t\t\t) {\n\t\t\t\t// *** rather than removing the item\n\t\t\t\t// from the model, we mark it as removed\n\t\t\t\t// this ensures consistency of the data\n\t\t\t\t// structure, the items marked as removed\n\t\t\t\t// will be removed from submitted data.\n\t\t\t\t// Both the 2 alternate methods aren't\n\t\t\t\t// optimal: updatePanels() is too expensive\n\t\t\t\t// and renaming all the data structure\n\t\t\t\t// is too tricky and leads to errors\n\t\t\t\tself.removeItems( [ item ] );\n\t\t\t\tself.model[ item.data.index ].removed = true;\n\t\t\t} else {\n\t\t\t\trecDeleteValue( self.model[ item.data.index ] );\n\t\t\t}\n\t\t} );\n\n\t\tif (\n\t\t\titem.data.schema.wiki.layout === 'horizontal' ||\n\t\t\titem.data.schema.wiki.layout === 'table'\n\t\t) {\n\t\t\t$( item.$element )\n\t\t\t\t.find( '.visualdata-horizontal-section-remove-row' )\n\t\t\t\t.append( deleteButton.$element );\n\t\t} else {\n\t\t\titem.$element.prepend(\n\t\t\t\t$( '<div style=\"text-align:right\">' ).append( deleteButton.$element )\n\t\t\t);\n\t\t}\n\n\t\tOO.ui.mixin.GroupWidget.prototype.addItems.call( this, [ item ] );\n\n\t\tthis.emit( 'add', item );\n\n\t\treturn this;\n\t};\n\n\tOptionsList.prototype.removeItems = function ( items ) {\n\t\tOO.ui.mixin.GroupWidget.prototype.removeItems.call( this, items );\n\t\tthis.emit( 'remove', items );\n\t\treturn this;\n\t};\n\n\tOptionsList.prototype.clearItems = function () {\n\t\tvar items = this.items.slice();\n\t\tOO.ui.mixin.GroupWidget.prototype.clearItems.call( this );\n\t\tthis.emit( 'remove', items );\n\t\treturn this;\n\t};\n\n\tfunction schemaHasData( schemaName ) {\n\t\treturn VisualDataFunctions.getNestedProp( [ 'schemas', schemaName ], StoredJsonData ) &&\n\t\t\tObject.keys( StoredJsonData.schemas[ schemaName ] ).length;\n\t}\n\n\t// @FIXME store for each separate schema\n\tfunction applyUntransformed( data, i, path ) {\n\t\tif (\n\t\t\t!( 'schemas-data' in Form.jsonData ) ||\n\t\t\t!( 'untransformed' in Form.jsonData[ 'schemas-data' ] ) ||\n\t\t\t!( path in Form.jsonData[ 'schemas-data' ].untransformed )\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// *** this ensures subsequent edits are maintained\n\t\tdata[ i ] = Form.jsonData[ 'schemas-data' ].untransformed[ path ];\n\t\tdelete Form.jsonData[ 'schemas-data' ].untransformed[ path ];\n\t}\n\n\tvar OptionsListContainer = function OptionsListContainer(\n\t\tconfig,\n\t\tschema,\n\t\titem,\n\t\tpreviousItem,\n\t\tschemaName,\n\t\tmodel,\n\t\tdata,\n\t\tpath,\n\t\tpathNoIndex,\n\t\tnewItem\n\t) {\n\t\tconfig = config || {};\n\n\t\t// Call parent constructor\n\t\tOptionsListContainer.super.call( this, config );\n\n\t\t// display multiselect\n\t\tif (\n\t\t\titem.type !== 'object' &&\n\t\t\t'preferred-input' in item.wiki &&\n\t\t\tVisualDataFunctions.isMultiselect( item.wiki[ 'preferred-input' ] )\n\t\t) {\n\t\t\tvar widget_ = new GroupWidget( {}, { schema: item, path, model } );\n\t\t\tprocessSchema(\n\t\t\t\twidget_,\n\t\t\t\titem,\n\t\t\t\tpreviousItem,\n\t\t\t\tschemaName,\n\t\t\t\tmodel,\n\t\t\t\tdata,\n\t\t\t\tpath,\n\t\t\t\tpathNoIndex,\n\t\t\t\tnewItem\n\t\t\t);\n\t\t\tthis.$element.append( widget_.$element );\n\t\t\treturn;\n\t\t}\n\n\t\tthis.optionsList = new OptionsList( {}, schema, model );\n\n\t\tvar minItems = 'minItems' in schema ? schema.minItems : 0;\n\t\tvar data;\n\t\tif (\n\t\t\tArray.isArray( item.default ) &&\n\t\t\t( !Array.isArray( data ) || !data.length ) &&\n\t\t\t( isNewSchema( schemaName ) || Form.emptyData )\n\t\t) {\n\t\t\tdata = item.default;\n\t\t}\n\n\t\tif ( Array.isArray( data ) && minItems < data.length ) {\n\t\t\tminItems = data.length;\n\t\t}\n\n\t\t// data is not an object if the type of schema\n\t\t// changed from non object to object, e.g.\n\t\t// an array of text fields vs an array\n\t\t// of subitems, and the name/key was the same\n\t\tif ( data === null || typeof data !== 'object' ) {\n\t\t\tdata = {};\n\t\t}\n\n\t\tvar i = 0;\n\t\twhile ( this.optionsList.items.length < minItems ) {\n\t\t\tvar newItem = false;\n\t\t\tif ( !( i in data ) ) {\n\t\t\t\tdata[ i ] = {};\n\t\t\t\tnewItem = true;\n\t\t\t}\n\t\t\tvar path_ = `${ path }/${ i }`;\n\t\t\tapplyUntransformed( data, i, path );\n\t\t\tvar thisModel = ( model[ i ] = {\n\t\t\t\tparent: model,\n\t\t\t\tchildIndex: i,\n\t\t\t\tparentSchema: schema\n\t\t\t} );\n\t\t\tvar widget_ = new GroupWidget( {}, { schema: item, path: path_, model: thisModel } );\n\t\t\tprocessSchema(\n\t\t\t\twidget_,\n\t\t\t\titem,\n\t\t\t\tpreviousItem,\n\t\t\t\tschemaName,\n\t\t\t\tthisModel,\n\t\t\t\tdata[ i ],\n\t\t\t\tpath_,\n\t\t\t\tpathNoIndex,\n\t\t\t\tnewItem\n\t\t\t);\n\t\t\tthis.optionsList.addItem( widget_, i );\n\t\t\ti++;\n\t\t}\n\n\t\tvar self = this;\n\n\t\tvar addOption = new OO.ui.ButtonWidget( {\n\t\t\ticon: 'add'\n\t\t} );\n\n\t\taddOption.on( 'click', () => {\n\t\t\tif (\n\t\t\t\t!( 'maxItems' in schema ) ||\n\t\t\t\tself.optionsList.items.length < schema.maxItems\n\t\t\t) {\n\t\t\t\tvar ii = self.optionsList.items.length ?\n\t\t\t\t\tself.optionsList.items[ self.optionsList.items.length - 1 ].data\n\t\t\t\t\t\t.index + 1 :\n\t\t\t\t\t0;\n\t\t\t\tvar modelAddOption = ( model[ ii ] = {\n\t\t\t\t\tparent: model,\n\t\t\t\t\tchildIndex: ii,\n\t\t\t\t\tparentSchema: schema\n\t\t\t\t} );\n\t\t\t\tvar widgetAddOption = new GroupWidget( {}, { schema: item, path, model: modelAddOption } );\n\n\t\t\t\tvar thisPath_ = `${ path }/${ ii }`;\n\t\t\t\tprocessSchema(\n\t\t\t\t\twidgetAddOption,\n\t\t\t\t\titem,\n\t\t\t\t\tpreviousItem,\n\t\t\t\t\tschemaName,\n\t\t\t\t\tmodelAddOption,\n\t\t\t\t\t( data[ ii ] = {} ),\n\t\t\t\t\tthisPath_,\n\t\t\t\t\tpathNoIndex,\n\t\t\t\t\ttrue\n\t\t\t\t);\n\t\t\t\tself.optionsList.addItem( widgetAddOption, ii );\n\t\t\t}\n\t\t} );\n\n\t\tthis.$element.append( this.optionsList.$element );\n\t\tthis.$element.append( addOption.$element );\n\t};\n\n\tOO.inheritClass( OptionsListContainer, OO.ui.Widget );\n\t// OO.mixinClass(OptionsListContainer, OO.ui.mixin.GroupWidget);\n\n\tfunction determineInputValue(\n\t\tschema,\n\t\tpreviousSchema,\n\t\tschemaName,\n\t\tmodel,\n\t\tdata,\n\t\tnewItem\n\t) {\n\t\t// can be an array, in case of multiselect\n\t\tvar ret = VisualDataFunctions.isObject( data ) ? null : data;\n\t\t// remove value-prefix\n\t\t// ***this is not necessary, since is hanlded\n\t\t// by applyUntransformed\n\t\t// if (defaultValue) {\n\t\t// \tif (\"value-prefix\" in schema.wiki) {\n\t\t// \t\tvar prefixLength = schema.wiki[\"value-prefix\"].length;\n\t\t// \t\tif (Array.isArray(defaultValue)) {\n\t\t// \t\t\tdefaultValue = value.map((x) => x.substr(prefixLength));\n\t\t// \t\t} else {\n\t\t// \t\t\tdefaultValue = defaultValue.substr(prefixLength);\n\t\t// \t\t}\n\t\t// \t}\n\t\t// }\n\n\t\tif (\n\t\t\t!newItem &&\n\t\t\t!isNewSchema( schemaName ) &&\n\t\t\t!Form.emptyData\n\t\t) {\n\t\t\treturn ret;\n\t\t}\n\n\t\tif ( !( 'default' in schema ) ) {\n\t\t\treturn ret;\n\t\t}\n\n\t\t// if ret is the default of previousSchema\n\t\t// update to the default of current schema\n\t\tif (\n\t\t\tret !== null &&\n\t\t\t( !( 'default' in previousSchema ) || ret !== previousSchema.default )\n\t\t) {\n\t\t\treturn ret;\n\t\t}\n\n\t\t// *** in case of array the default values will\n\t\t// create the respective entries by OptionsListContainer\n\t\tif (\n\t\t\tArray.isArray( schema.default ) &&\n\t\t\t\t(\n\t\t\t\t\t!( 'preferred-input' in schema.wiki ) ||\n\t\t\t\t\t!VisualDataFunctions.isMultiselect( schema.wiki[ 'preferred-input' ] )\n\t\t\t\t)\n\t\t) {\n\t\t\treturn ret;\n\t\t}\n\n\t\treturn schema.default;\n\t}\n\n\tfunction processSchema(\n\t\twidget,\n\t\tschema,\n\t\tpreviousSchema,\n\t\tschemaName,\n\t\tmodel,\n\t\tdata,\n\t\tpath,\n\t\tpathNoIndex,\n\t\tnewItem\n\t) {\n\t\tPendingRecursive++;\n\t\tif ( !( 'type' in schema ) ) {\n\t\t\tschema.type = 'default' in schema ? 'string' : 'object';\n\t\t}\n\t\t// model.previousSchema = previousSchema;\n\n\t\tmodel.schema = VisualDataFunctions.deepCopy( schema );\n\t\tmodel.schemaName = schemaName;\n\t\tmodel.path = path;\n\t\tmodel.pathNoIndex = pathNoIndex;\n\t\t// @TODO implement allOf, anyOf, oneOf using addCombinedItem\n\t\t// @TODO implement \"$ref\"\n\n\t\tswitch ( schema.type ) {\n\t\t\tcase 'object':\n\t\t\t\tmodel.properties = {};\n\t\t\t\tif ( 'properties' in schema ) {\n\n\t\t\t\t\t// data is not an object if the type of schema\n\t\t\t\t\t// changed from non object to object, e.g.\n\t\t\t\t\t// an array of text fields vs an array\n\t\t\t\t\t// of subitems, and the name/key was the same\n\t\t\t\t\tif ( !VisualDataFunctions.isObject( data ) ) {\n\t\t\t\t\t\tdata = {};\n\t\t\t\t\t}\n\n\t\t\t\t\tvar items_ = [];\n\t\t\t\t\tfor ( var i in schema.properties ) {\n\t\t\t\t\t\tif ( !( i in data ) ) {\n\t\t\t\t\t\t\tdata[ i ] = {};\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar path_ = `${ path }/${ escapeJsonPtr( i ) }`;\n\t\t\t\t\t\tapplyUntransformed( data, i, path_ );\n\t\t\t\t\t\tvar pathNoIndex_ = pathNoIndex ?\n\t\t\t\t\t\t\t`${ pathNoIndex }/${ escapeJsonPtr( i ) }` :\n\t\t\t\t\t\t\tescapeJsonPtr( i );\n\t\t\t\t\t\tvar item = schema.properties[ i ];\n\t\t\t\t\t\tvar previousItem =\n\t\t\t\t\t\t\t'properties' in previousSchema && i in previousSchema.properties ?\n\t\t\t\t\t\t\t\tpreviousSchema.properties[ i ] :\n\t\t\t\t\t\t\t\t{};\n\t\t\t\t\t\tvar thisModel = ( model.properties[ i ] = {\n\t\t\t\t\t\t\tparent: model.properties,\n\t\t\t\t\t\t\tchildIndex: i,\n\t\t\t\t\t\t\tparentSchema: schema\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tvar widget_ = new GroupWidget( {}, { schema: item, path: path_, model: thisModel } );\n\t\t\t\t\t\tprocessSchema(\n\t\t\t\t\t\t\twidget_,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tpreviousItem,\n\t\t\t\t\t\t\tschemaName,\n\t\t\t\t\t\t\tthisModel,\n\t\t\t\t\t\t\tdata[ i ],\n\t\t\t\t\t\t\tpath_,\n\t\t\t\t\t\t\tpathNoIndex_,\n\t\t\t\t\t\t\tnewItem\n\t\t\t\t\t\t);\n\t\t\t\t\t\titems_.push( widget_ );\n\t\t\t\t\t}\n\t\t\t\t\twidget.addItems( items_ );\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tcase 'array':\n\t\t\t\tif ( 'items' in schema ) {\n\t\t\t\t\tif ( VisualDataFunctions.isObject( schema.items ) ) {\n\t\t\t\t\t\tvar item = schema.items;\n\t\t\t\t\t\tmodel.items = {};\n\t\t\t\t\t\tif ( item.wiki.type === 'property' ) {\n\t\t\t\t\t\t\titem.wiki.layout = 'table';\n\t\t\t\t\t\t}\n\t\t\t\t\t\tvar previousItem =\n\t\t\t\t\t\t\t'items' in previousSchema ? previousSchema.items : {};\n\n\t\t\t\t\t\tvar optionsListContainer = new OptionsListContainer(\n\t\t\t\t\t\t\t{},\n\t\t\t\t\t\t\tschema,\n\t\t\t\t\t\t\titem,\n\t\t\t\t\t\t\tpreviousItem,\n\t\t\t\t\t\t\tschemaName,\n\t\t\t\t\t\t\tmodel.items,\n\t\t\t\t\t\t\tdata,\n\t\t\t\t\t\t\tpath,\n\t\t\t\t\t\t\tpathNoIndex,\n\t\t\t\t\t\t\tnewItem\n\t\t\t\t\t\t);\n\t\t\t\t\t\twidget.addItems( [ optionsListContainer ] );\n\t\t\t\t\t} else {\n\t\t\t\t\t\t// @TODO\n\t\t\t\t\t\t// implement tuple\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\t// 'string',\n\t\t\t\t// 'number',\n\t\t\t\t// 'integer',\n\t\t\t\t// 'boolean',\n\t\t\t\t// 'null'\n\t\t\t\t// model.type = \"property\";\n\t\t\t\tif ( !( 'wiki' in schema ) ) {\n\t\t\t\t\tschema.wiki = {};\n\t\t\t\t}\n\n\t\t\t\tif (\n\t\t\t\t\t'visibility' in schema.wiki &&\n\t\t\t\t\tschema.wiki.visibility === 'oncreate-only' &&\n\t\t\t\t\tForm.options.action !== 'create'\n\t\t\t\t) {\n\t\t\t\t\tdelete model.parent[ model.childIndex ];\n\n\t\t\t\t} else {\n\t\t\t\t\tvar inputValue = determineInputValue(\n\t\t\t\t\t\tschema,\n\t\t\t\t\t\tpreviousSchema,\n\t\t\t\t\t\tschemaName,\n\t\t\t\t\t\tmodel,\n\t\t\t\t\t\tdata,\n\t\t\t\t\t\tnewItem\n\t\t\t\t\t);\n\n\t\t\t\t\tif ( Array.isArray( inputValue ) ) {\n\t\t\t\t\t\tinputValue = inputValue.filter(\n\t\t\t\t\t\t\t( x ) => !VisualDataFunctions.isObject( x )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\t// used by getFieldAlign\n\t\t\t\t\t// model.schema.wiki.schema = schemaName;\n\t\t\t\t\tvar item = new ItemWidget( {\n\t\t\t\t\t\tclasses: [ 'VisualDataItemWidget' ],\n\t\t\t\t\t\tmodel: model,\n\t\t\t\t\t\tdata: inputValue\n\t\t\t\t\t} );\n\n\t\t\t\t\twidget.addItems( [ item ] );\n\t\t\t\t}\n\t\t}\n\n\t\t// @TODO implement anyOf, oneOf, allOf\n\t\t// https://json-schema.org/understanding-json-schema/reference/combining.html\n\t\t// var directives = [\"anyOf\", \"oneOf\", \"allOf\"];\n\t\t// for (var directive of directives) {\n\t\t// \tif (directive in schema) {\n\t\t// \t\t// *** this is by default an array,\n\t\t// \t\t// but transformed to an object\n\t\t// \t\tfor (var i in schema[directive]) {\n\t\t// \t\t\tvar item = schema[directive][i];\n\t\t// \t\t\tlet widget_ = new GroupWidget({}, item);\n\t\t// \t\t\tprocessSchema(widget_, item, schemaName, (model[i] = {}));\n\t\t// \t\t\tif ( directive!=='allOf' ) {\n\t\t// \t\t\t\twidget.addCombinedItem(widget_, item.title || i, directive);\n\t\t// \t\t\t} else {\n\t\t// \t\t\t\twidget.addItems([widget_]);\n\t\t// \t\t\t}\n\t\t// \t\t}\n\t\t// \t}\n\t\t// }\n\n\t\tQueuedWidgets.push( widget );\n\t\t// inform queued widgets that the rendering of the form is complete\n\t\tif ( --PendingRecursive === 0 ) {\n\t\t\t// for ( widget_ of QueuedWidgets ) {\n\t\t\t// @see https://www.mediawiki.org/wiki/OOjs/Events\n\n\t\t\t// widget_.emit( 'formLoaded' );\n\t\t\tif ( QueuedWidgets.length ) {\n\t\t\t\tQueuedWidgets[ 0 ].emit( 'formLoaded' );\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction getSchemasPanelLayout() {\n\t\tFields = {};\n\t\tModelSchemas = {};\n\t\tModelFlatten = [];\n\t\tInputWidgets = {};\n\n\t\t// @TODO implement a better interface between\n\t\t// VisualData instance and this constructor\n\t\tProcessModel = new VisualDataProcessModel(\n\t\t\tcallbackShowError,\n\t\t\tForm,\n\t\t\tSchemas,\n\t\t\tRecordedSchemas,\n\t\t\tModel,\n\t\t\tModelSchemas,\n\t\t\tmakeElementId\n\t\t);\n\n\t\treturn new PanelLayout( {\n\t\t\texpanded: true,\n\t\t\tpadded: false,\n\t\t\tframed: false,\n\t\t\t// classes: [\"PanelProperties-panel-section\"],\n\t\t\tdata: {\n\t\t\t\tname: 'schemas',\n\t\t\t\tschemas: Form.schemas\n\t\t\t}\n\t\t} );\n\t}\n\n\tfunction getArticlePanelLayout() {\n\t\tvar userDefined = Config.isNewPage && Form.options[ 'edit-page' ] === '';\n\n\t\tvar editFreeText = Config.isNewPage && Config.context === 'EditData';\n\t\tvar editContentModel = Config.context === 'EditData';\n\t\tvar editCategories = Config.context === 'EditData';\n\t\tvar editTargetSlot = Config.context === 'EditData';\n\n\t\tvar categories = [];\n\n\t\tif ( 'edit-content-model' in Form.options ) {\n\t\t\teditContentModel = Form.options[ 'edit-content-model' ];\n\t\t}\n\n\t\tif ( 'edit-categories' in Form.options ) {\n\t\t\teditCategories = Form.options[ 'edit-categories' ]; // !Form.schemas.length || !Config.isNewPage;\n\t\t}\n\n\t\tif ( 'edit-freetext' in Form.options ) {\n\t\t\teditFreeText = Form.options[ 'edit-freetext' ];\n\t\t}\n\n\t\tif ( 'edit-target-slot' in Form.options ) {\n\t\t\teditTargetSlot = Form.options[ 'edit-target-slot' ];\n\t\t}\n\n\t\tif ( editTargetSlot === false &&\n\t\t\t'target-slot' in Form.options &&\n\t\t\tForm.options[ 'target-slot' ] === 'main'\n\t\t) {\n\t\t\teditFreeText = false;\n\t\t\teditContentModel = false;\n\t\t}\n\n\t\tvar fieldAlign = 'top';\n\n\t\tif (\n\t\t\tForm.options.action === 'create' &&\n\t\t\tForm.options[ 'pagename-formula' ] === ''\n\t\t) {\n\t\t\tuserDefined = true;\n\t\t}\n\n\t\t// this will set the fieldAlign of the wiki\n\t\t// section as the fieldAlign of last form\n\t\tif ( 'layout-align' in Form.options ) {\n\t\t\tfieldAlign = Form.options[ 'layout-align' ];\n\t\t}\n\n\t\t// if (Form.options[\"default-categories\"]) {\n\t\t// \tcategories = Form.options[\"default-categories\"].split(/\\s*,\\s*/)\n\t\t// \t\t.filter( x => x.trim() !== '' );\n\t\t// }\n\t\tvar categories = (\n\t\t\t'default-categories' in Form.options ?\n\t\t\t\tForm.options[ 'default-categories' ] :\n\t\t\t\t[]\n\t\t).concat( Form.categories );\n\n\t\t// for some reason appending the method\n\t\t// halts the execution combined with mw.loader\n\t\tcategories = categories.filter( ( value, index, self ) => self.indexOf( value ) === index );\n\n\t\t// create title and free text input\n\t\tif ( !userDefined && !editFreeText && !editCategories && !editContentModel ) {\n\t\t\treturn { isEmpty: true };\n\t\t}\n\n\t\treturn new PanelLayout( {\n\t\t\texpanded: false,\n\t\t\tpadded: true,\n\t\t\tframed: false,\n\t\t\t// classes: [\"PanelProperties-panel-section\"],\n\t\t\tdata: {\n\t\t\t\tname: 'article',\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-wiki' ),\n\t\t\t\tuserDefined,\n\t\t\t\teditFreeText,\n\t\t\t\teditCategories,\n\t\t\t\teditContentModel,\n\t\t\t\teditTargetSlot,\n\t\t\t\tcategories,\n\t\t\t\tfieldAlign\n\t\t\t}\n\t\t} );\n\t}\n\n\tfunction removeSchemasPanel() {\n\t\tvar panels = PropertiesStack.getItems();\n\t\tfor ( var panel of panels ) {\n\t\t\tif ( panel.getData().name === 'schemas' ) {\n\t\t\t\tPropertiesStack.removeItems( [ panel ] );\n\t\t\t\treturn;\n\t\t\t}\n\t\t}\n\t}\n\n\tfunction updatePanels() {\n\t\tProcessModel.getModel( 'fetch' ).then( ( res ) => {\n\t\t\tForm.jsonData.schemas = Object.assign( Form.jsonData.schemas, res );\n\n\t\t\tremoveSchemasPanel();\n\n\t\t\tvar schemasPanelLayout = getSchemasPanelLayout();\n\t\t\tif ( !schemasPanelLayout.isEmpty ) {\n\t\t\t\tPropertiesStack.addItems( [ schemasPanelLayout ], 0 );\n\t\t\t}\n\n\t\t\tvar panels = PropertiesStack.getItems();\n\n\t\t\tPropertiesStack.setItem( panels[ 0 ] );\n\n\t\t\tselectSchema( SelectedSchema, true );\n\n\t\t\tPropertiesStack.$element.removeClass( [\n\t\t\t\t'PanelPropertiesStack',\n\t\t\t\t'PanelPropertiesStack-empty'\n\t\t\t] );\n\n\t\t\tswitch ( panels.length ) {\n\t\t\t\tcase 0:\n\t\t\t\t\tPropertiesStack.$element.addClass( 'PanelPropertiesStack-empty' );\n\t\t\t\t\tbreak;\n\t\t\t\tdefault:\n\t\t\t\t\tPropertiesStack.$element.addClass( 'PanelPropertiesStack' );\n\t\t\t}\n\n\t\t\tupdateButtons( panels );\n\t\t} );\n\t}\n\n\tfunction updateButtons( panels ) {\n\t\tif ( TargetSlotField ) {\n\t\t\tTargetSlotField.toggle( hasMultiplePanels() ||\n\t\t\t\t( 'target-slot' in Model && Model[ 'target-slot' ].getValue() === 'main' ) );\n\t\t}\n\n\t\tif ( Form.options.view === 'popup' || Form.options.view === 'button' ) {\n\t\t\treturn;\n\t\t}\n\t\tif ( hasMultiplePanels() ) {\n\t\t\tValidateButton.toggle( panels.length !== 0 );\n\t\t\t// DeleteButton.toggle( hasStoredJsonData() );\n\t\t\tGoBackButton.toggle( false );\n\t\t\tSubmitButton.toggle( false );\n\t\t} else {\n\t\t\tSubmitButton.toggle( panels.length !== 0 );\n\t\t\t// DeleteButton.toggle( hasStoredJsonData() );\n\t\t\tGoBackButton.toggle( false );\n\t\t\tValidateButton.toggle( false );\n\t\t}\n\t}\n\n\tfunction updateSchemas( previousSchemas, schemas, data ) {\n\t\tPreviousSchemas = previousSchemas;\n\t\tSchemas = schemas;\t// VisualDataFunctions.deepCopy( schemas );\n\n\t\tif ( data && data[ 'result-action' ] === 'rename' ) {\n\t\t\t// *** do not compare Schemas with Form.schemas,\n\t\t\t// since a rename could match an existing entry\n\t\t\t// in Schemas\n\t\t\t// for ( var schemaName in Schemas ) {\n\t\t\t// \tif ( Form.schemas.indexOf( schemaName ) === -1 ) {\n\t\t\t// \t\tSelectedSchema = schemaName;\n\t\t\t// \t\tbreak;\n\t\t\t// \t}\n\t\t\t// }\n\t\t\tSelectedSchema = data.label;\n\n\t\t\tfor ( var i in Form.schemas ) {\n\t\t\t\tvar schemaName = Form.schemas[ i ];\n\t\t\t\tif ( !( schemaName in Schemas ) ) {\n\t\t\t\t\tForm.schemas.splice( i, 1, SelectedSchema );\n\t\t\t\t\tif ( !( SelectedSchema in Form.jsonData.schemas ) ) {\n\t\t\t\t\t\tForm.jsonData.schemas[ SelectedSchema ] = Form.jsonData.schemas[ schemaName ];\n\t\t\t\t\t}\n\t\t\t\t\tdelete Form.jsonData.schemas[ schemaName ];\n\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t\t// uninitialized\n\t\tif ( !( 'getModel' in ProcessModel ) ) {\n\t\t\treturn;\n\t\t}\n\t\tupdatePanels();\n\t}\n\n\tasync function onSubmit( e ) {\n\t\te.preventDefault();\n\n\t\tvar action;\n\t\tvar formEl = $( this ); // .closest(\".VisualDataForm\");\n\n\t\tif ( formEl.data( 'delete' ) === true ) {\n\t\t\taction = 'delete';\n\t\t} else {\n\t\t\taction = !hasMultiplePanels() ? 'validate&submit' : 'submit';\n\t\t}\n\n\t\tProcessModel.getModel( action ).then( async ( res ) => {\n\t\t\tif ( typeof res === 'boolean' && res === false ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( res.form[ 'target-slot' ] === 'main' && !res.schemas.length &&\n\t\t\t\t!RecordedSchemas.length ) {\n\t\t\t\t// eslint-disable-next-line no-alert\n\t\t\t\talert( mw.msg( 'visualdata-jsmodule-forms-submit-no-schemas' ) );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tif ( 'callback' in Form.options && Form.options.callback !== '' ) {\n\t\t\t\tVisualDataFunctions.executeFunctionByName( Form.options.callback, window, [ res ] );\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\t$( '<input>' )\n\t\t\t\t.attr( {\n\t\t\t\t\ttype: 'hidden',\n\t\t\t\t\tname: 'data',\n\t\t\t\t\tvalue: JSON.stringify( getFormAttributes( res ) )\n\t\t\t\t} )\n\t\t\t\t.appendTo( formEl );\n\n\t\t\tformEl.unbind( 'submit' ).submit();\n\t\t} );\n\t}\n\n\tfunction ProcessDialog( config ) {\n\t\tProcessDialog.super.call( this, config );\n\t}\n\tOO.inheritClass( ProcessDialog, OO.ui.ProcessDialog );\n\n\tProcessDialog.static.name = DialogName;\n\t// ProcessDialog.static.title = mw.msg(\n\t// \t\"visualdata-jsmodule-forms-defineform\"\n\t// );\n\tProcessDialog.static.actions = [\n\t\t{\n\t\t\taction: 'delete',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-delete' ),\n\t\t\tflags: 'destructive',\n\t\t\tmodes: [ 'validate-delete', 'submit-single-delete' ]\n\t\t},\n\t\t{\n\t\t\taction: 'validate',\n\t\t\tmodes: [ 'validate', 'validate-delete' ],\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-validate' ),\n\t\t\tflags: [ 'primary', 'progressive' ]\n\t\t},\n\t\t{\n\t\t\taction: 'back',\n\t\t\tlabel: OO.ui.deferMsg( 'visualdata-jsmodule-dialog-goback' ),\n\t\t\tflags: [ 'safe', 'back' ],\n\t\t\tmodes: [ 'submit', 'submit-delete' ]\n\t\t},\n\t\t{\n\t\t\taction: 'submit',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-submit' ),\n\t\t\tflags: [ 'primary', 'progressive' ],\n\t\t\tmodes: [ 'submit', 'submit-delete' ]\n\t\t},\n\t\t{\n\t\t\taction: 'validate&submit',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-submit' ),\n\t\t\tflags: [ 'primary', 'progressive' ],\n\t\t\tmodes: [ 'submit-single', 'submit-single-delete' ]\n\t\t},\n\t\t{\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-close' ),\n\t\t\tflags: [ 'safe', 'close' ],\n\t\t\tmodes: [\n\t\t\t\t'validate',\n\t\t\t\t'submit-single',\n\t\t\t\t'validate-delete',\n\t\t\t\t'submit-single-delete'\n\t\t\t]\n\t\t}\n\t];\n\n\tProcessDialog.prototype.getSetupProcess = function ( data ) {\n\t\t// data = data || {};\n\t\t// @see https://www.mediawiki.org/wiki/OOUI/Windows/Process_Dialogs\n\t\treturn ProcessDialog.super.prototype.getSetupProcess\n\t\t\t.call( this, data )\n\t\t\t.next( function () {\n\t\t\t\t// @see resources/lib/ooui/oojs-ui-windows.js\n\t\t\t\tthis.actions.setMode(\n\t\t\t\t\t( hasMultiplePanels() ?\n\t\t\t\t\t\t'validate' :\n\t\t\t\t\t\t'submit-single' ) + ( !hasStoredJsonData() ? '' : '-delete' )\n\t\t\t\t);\n\n\t\t\t\tthis.$body.append( data.PropertiesStack.$element );\n\t\t\t}, this );\n\t};\n\n\tProcessDialog.prototype.initialize = function () {\n\t\tProcessDialog.super.prototype.initialize.apply( this, arguments );\n\t\t// this.$body.append(this.data.OuterStack.$element);\n\t\t// showVisualEditor();\n\t};\n\n\tProcessDialog.prototype.getActionProcess = function ( action ) {\n\t\tif (\n\t\t\t!action ||\n\t\t\t( action === 'delete' &&\n\t\t\t\t// eslint-disable-next-line no-alert\n\t\t\t\t!confirm(\n\t\t\t\t\tmw.msg( 'visualdata-jsmodule-forms-delete-data-confirm' )\n\t\t\t\t) )\n\t\t) {\n\t\t\treturn ProcessDialog.super.prototype.getActionProcess.call( this, action );\n\t\t}\n\t\tvar self = this;\n\t\treturn ProcessDialog.super.prototype.getActionProcess\n\t\t\t.call( this, action )\n\t\t\t.next( () => {\n\t\t\t\tswitch ( action ) {\n\t\t\t\t\tcase 'back':\n\t\t\t\t\t\tvar panels = PropertiesStack.getItems();\n\t\t\t\t\t\tPropertiesStack.setItem( panels[ 0 ] );\n\t\t\t\t\t\tself.setSize(\n\t\t\t\t\t\t\t!( 'popup-size' in Form.options ) ||\n\t\t\t\t\t\t\t\tForm.options[ 'popup-size' ] === '' ?\n\t\t\t\t\t\t\t\t'medium' :\n\t\t\t\t\t\t\t\tForm.options[ 'popup-size' ]\n\t\t\t\t\t\t);\n\t\t\t\t\t\tself.actions.setMode(\n\t\t\t\t\t\t\t'validate' + ( !hasStoredJsonData() ? '' : '-delete' )\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'validate':\n\t\t\t\t\t\tProcessModel.getModel( 'validate' ).then( ( res ) => {\n\t\t\t\t\t\t\tif ( typeof res === 'boolean' ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar thisPanels = PropertiesStack.getItems();\n\t\t\t\t\t\t\tPropertiesStack.setItem( thisPanels[ thisPanels.length - 1 ] );\n\t\t\t\t\t\t\tself.setSize( 'medium' );\n\t\t\t\t\t\t\tself.actions.setMode(\n\t\t\t\t\t\t\t\t'submit' + ( !hasStoredJsonData() ? '' : '-delete' )\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} );\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tcase 'validate&submit':\n\t\t\t\t\tcase 'submit':\n\t\t\t\t\tcase 'delete':\n\t\t\t\t\t\treturn ProcessModel.getModel( action ).then( ( res ) => {\n\t\t\t\t\t\t\tif ( action.indexOf( 'submit' ) !== 1 && typeof res === 'boolean' ) {\n\t\t\t\t\t\t\t\treturn;\n\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\tvar payload = {\n\t\t\t\t\t\t\t\tdata: JSON.stringify( getFormAttributes( res ) ),\n\t\t\t\t\t\t\t\taction: 'visualdata-submit-form'\n\t\t\t\t\t\t\t};\n\n\t\t\t\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\t\t\t\t\tnew mw.Api()\n\t\t\t\t\t\t\t\t\t.postWithToken( 'csrf', payload )\n\t\t\t\t\t\t\t\t\t.done( ( thisRes ) => {\n\t\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t\t\tif ( payload.action in thisRes ) {\n\t\t\t\t\t\t\t\t\t\t\tvar data = JSON.parse( thisRes[ payload.action ].result );\n\t\t\t\t\t\t\t\t\t\t\tif ( !data.errors.length ) {\n\t\t\t\t\t\t\t\t\t\t\t\tWindowManager.closeActiveWindow();\n\t\t\t\t\t\t\t\t\t\t\t\t// @FIXME reload only if the changes affect\n\t\t\t\t\t\t\t\t\t\t\t\t// the current page\n\t\t\t\t\t\t\t\t\t\t\t\tif ( data[ 'target-url' ] === window.location.href ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\twindow.location.reload();\n\t\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\t\twindow.location.href = data[ 'target-url' ];\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tVisualDataFunctions.OOUIAlert(\n\t\t\t\t\t\t\t\t\t\t\t\t\tnew OO.ui.HtmlSnippet( data.errors.join( '<br />' ) ),\n\t\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tsize: 'medium'\n\t\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t\t.fail( ( thisRes ) => {\n\t\t\t\t\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\t\t\t\t\tconsole.error( 'visualdata-submit-form', res );\n\t\t\t\t\t\t\t\t\t\treject( thisRes );\n\t\t\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} ).catch( ( err ) => {\n\t\t\t\t\t\t\tVisualDataFunctions.OOUIAlert( `error: ${ err }`, { size: 'medium' } );\n\t\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t// return new OO.ui.Process(function () {\n\t\t// \tdialog.close({ action: action });\n\t\t// });\n\n\t\t// return ProcessDialog.super.prototype.getActionProcess.call(this, action);\n\t};\n\n\tProcessDialog.prototype.getTeardownProcess = function ( data ) {\n\t\treturn ProcessDialog.super.prototype.getTeardownProcess\n\t\t\t.call( this, data )\n\t\t\t.first( () => {\n\t\t\t\tWindowManager.removeActiveWindow();\n\t\t\t}, this );\n\t};\n\n\t/**\n\t * Override getBodyHeight to create a tall dialog relative to the screen.\n\t *\n\t * @return {number} Body height\n\t */\n\tProcessDialog.prototype.getBodyHeight = function () {\n\t\t// see here https://www.mediawiki.org/wiki/OOUI/Windows/Process_Dialogs\n\t\t// this.page1.content.$element.outerHeight( true );\n\t\treturn window.innerHeight - 100;\n\t};\n\n\tfunction getFormAttributes( jsondata ) {\n\t\treturn Object.assign(\n\t\t\t{\n\t\t\t\tformID: FormID,\n\t\t\t\tconfig: Config\n\t\t\t},\n\t\t\tjsondata\n\t\t);\n\t}\n\n\tfunction initializePropertiesStack() {\n\t\tvar panels = [ getSchemasPanelLayout(), getArticlePanelLayout() ].filter(\n\t\t\t( x ) => !x.isEmpty\n\t\t);\n\n\t\tvar classes = [];\n\n\t\tswitch ( panels.length ) {\n\t\t\tcase 0:\n\t\t\t\tclasses.push( 'PanelPropertiesStack-empty' );\n\t\t\t\tbreak;\n\t\t\tdefault:\n\t\t\t\tclasses.push( 'PanelPropertiesStack' );\n\t\t}\n\n\t\tPropertiesStack = new OO.ui.StackLayout( {\n\t\t\titems: panels,\n\t\t\tcontinuous: false, // !hasMultiplePanels(),\n\t\t\texpanded: true,\n\t\t\tpadded: false,\n\t\t\t// The following classes are used here:\n\t\t\t// * PanelPropertiesStack\n\t\t\t// * PanelPropertiesStack-empty\n\t\t\tclasses: classes\n\t\t} );\n\n\t\tPropertiesStack.on( 'change', onChangePropertiesStack );\n\t\tPropertiesStack.on( 'set', onSetPropertiesStack );\n\t\treturn panels;\n\t}\n\n\tfunction hasMultiplePanels() {\n\t\treturn PropertiesStack && PropertiesStack.getItems().length > 1;\n\t}\n\n\tfunction hasStoredJsonData() {\n\t\tif ( Config.context !== 'EditData' && Form.options.action !== 'edit' ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tif ( !( 'schemas' in StoredJsonData ) ) {\n\t\t\treturn false;\n\t\t}\n\t\tfor ( var i in StoredJsonData.schemas ) {\n\t\t\tif (\n\t\t\t\tVisualDataFunctions.isObject( StoredJsonData.schemas[ i ] ) &&\n\t\t\t\tObject.keys( StoredJsonData.schemas[ i ] ).length\n\t\t\t) {\n\t\t\t\treturn true;\n\t\t\t}\n\t\t}\n\t\treturn false;\n\t}\n\n\tfunction isVisible() {\n\t\treturn $( '#visualdataform-wrapper-' + FormID ).is( ':visible' );\n\t}\n\n\tfunction mutationChange() {\n\t\tif ( !isVisible() ) {\n\t\t\tInitialized = false;\n\t\t} else if ( !Initialized ) {\n\t\t\tinitialize();\n\t\t}\n\n\t\tfor ( var model of ModelFlatten ) {\n\t\t\tupdateFieldsVisibility( model );\n\t\t}\n\n\t\t// for ( var model of ModelFlatten ) {\n\t\t//\tupdateDependentFields( model );\n\t\t// }\n\t}\n\n\tfunction initialize() {\n\t\tif ( !isVisible() ) {\n\t\t\treturn false;\n\t\t}\n\n\t\tInitialized = true;\n\n\t\tif ( Form.options.view === 'button' ) {\n\n\t\t\tvar button = new OO.ui.ButtonWidget( {\n\t\t\t\ticon: Form.options.icon,\n\t\t\t\tflags: [ 'primary', 'progressive' ],\n\t\t\t\tlabel: Form.options.label\n\t\t\t} );\n\t\t\tvar widget;\n\n\t\t\tif ( Form.options.schema !== '' ) {\n\t\t\t\tvar editButton = new OO.ui.ButtonWidget( {\n\t\t\t\t\ticon: 'edit',\n\t\t\t\t\tflags: [ 'primary', 'progressive' ]\n\t\t\t\t} );\n\n\t\t\t\teditButton.on( 'click', () => {\n\t\t\t\t\tinitializePropertiesStack();\n\n\t\t\t\t\tvar thisClasses = [];\n\t\t\t\t\tif ( 'css-class' in Form.options && Form.options[ 'css-class' ] !== '' ) {\n\t\t\t\t\t\tthisClasses.push( Form.options[ 'css-class' ] );\n\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line mediawiki/class-doc\n\t\t\t\t\tvar processDialog = new ProcessDialog( {\n\t\t\t\t\t\tsize:\n\t\t\t\t\t\t\t!( 'popup-size' in Form.options ) || Form.options[ 'popup-size' ] === '' ?\n\t\t\t\t\t\t\t\t'medium' :\n\t\t\t\t\t\t\t\tForm.options[ 'popup-size' ],\n\t\t\t\t\t\tid: 'visualdataform-wrapper-dialog-' + FormID,\n\t\t\t\t\t\tclasses: thisClasses\n\t\t\t\t\t} );\n\n\t\t\t\t\tWindowManager.newWindow( processDialog, {\n\t\t\t\t\t\ttitle: Form.options.title,\n\t\t\t\t\t\tPropertiesStack: PropertiesStack\n\t\t\t\t\t} );\n\t\t\t\t} );\n\n\t\t\t\twidget = new OO.ui.ActionFieldLayout( button, editButton, {\n\t\t\t\t\tlabel: '',\n\t\t\t\t\talign: 'top',\n\t\t\t\t\tclasses: [ 'VisualDataPageButtonsActionField' ]\n\t\t\t\t} );\n\n\t\t\t} else {\n\t\t\t\twidget = button;\n\t\t\t}\n\n\t\t\tbutton.on( 'click', () => {\n\t\t\t\tvar args = [ Form.options.value ];\n\n\t\t\t\tif ( Form.options.schema !== '' && schemaHasData( Form.options.schema ) ) {\n\t\t\t\t\t// initializePropertiesStack();\n\t\t\t\t\t// ProcessModel.getModel( 'schema', Form.options.schema ).then( async function ( res ) {\n\t\t\t\t\t// \tif ( typeof res === 'boolean' && res === false ) {\n\t\t\t\t\t// \t\treturn;\n\t\t\t\t\t// \t}\n\t\t\t\t\t// \targs.push( res.data );\n\t\t\t\t\t// \tVisualDataFunctions.executeFunctionByName( Form.options.callback, window, args );\n\t\t\t\t\t// } );\n\t\t\t\t\targs.push( StoredJsonData.schemas[ Form.options.schema ] );\n\t\t\t\t}\n\t\t\t\tVisualDataFunctions.executeFunctionByName( Form.options.callback, window, args );\n\t\t\t} );\n\n\t\t\t$( '#visualdataform-wrapper-' + FormID ).html( widget.$element );\n\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( Form.options.view === 'popup' ) {\n\n\t\t\tvar popupButton = new OO.ui.ButtonWidget( {\n\t\t\t\ticon: 'edit',\n\t\t\t\tlabel: Form.options.title\n\t\t\t} );\n\n\t\t\tpopupButton.on( 'click', () => {\n\t\t\t\tinitializePropertiesStack();\n\n\t\t\t\tvar thisClasses = [];\n\t\t\t\tif ( 'css-class' in Form.options && Form.options[ 'css-class' ] !== '' ) {\n\t\t\t\t\tthisClasses.push( Form.options[ 'css-class' ] );\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line mediawiki/class-doc\n\t\t\t\tvar processDialog = new ProcessDialog( {\n\t\t\t\t\tsize:\n\t\t\t\t\t\t!( 'popup-size' in Form.options ) || Form.options[ 'popup-size' ] === '' ?\n\t\t\t\t\t\t\t'medium' :\n\t\t\t\t\t\t\tForm.options[ 'popup-size' ],\n\t\t\t\t\tid: 'visualdataform-wrapper-dialog-' + FormID,\n\t\t\t\t\tclasses: thisClasses\n\t\t\t\t} );\n\n\t\t\t\tWindowManager.newWindow( processDialog, {\n\t\t\t\t\ttitle: Form.options.title,\n\t\t\t\t\tPropertiesStack: PropertiesStack\n\t\t\t\t} );\n\t\t\t} );\n\t\t\t$( '#visualdataform-wrapper-' + FormID ).html( popupButton.$element );\n\n\t\t\treturn true;\n\t\t}\n\n\t\tvar formContent = [];\n\n\t\tif ( Form.errors.length ) {\n\t\t\tvar messageWidget = new OO.ui.MessageWidget( {\n\t\t\t\ttype: 'error',\n\t\t\t\tlabel: new OO.ui.HtmlSnippet( Form.errors.join( '<br /> ' ) )\n\t\t\t} );\n\n\t\t\tformContent.push( messageWidget.$element );\n\t\t\tformContent.push( $( '<br>' ) );\n\t\t}\n\n\t\tvar panels = initializePropertiesStack();\n\n\t\tSubmitButton = new OO.ui.ButtonInputWidget( {\n\t\t\tlabel:\n\t\t\t\t!( 'submit-button-text' in Form.options ) ||\n\t\t\t\tForm.options[ 'submit-button-text' ] === '' ?\n\t\t\t\t\tmw.msg( 'visualdata-jsmodule-forms-submit' ) :\n\t\t\t\t\tForm.options[ 'submit-button-text' ],\n\n\t\t\tflags: [ 'primary', 'progressive' ],\n\t\t\tclasses: [ 'VisualDataFormSubmitButton' ],\n\t\t\ttype: 'submit'\n\t\t} );\n\n\t\tformContent.push( PropertiesStack.$element );\n\t\tformContent.push( SubmitButton.$element );\n\n\t\tValidateButton = new OO.ui.ButtonInputWidget( {\n\t\t\tlabel:\n\t\t\t\t!( 'validate-button-text' in Form.options ) ||\n\t\t\t\tForm.options[ 'validate-button-text' ] === '' ?\n\t\t\t\t\tmw.msg( 'visualdata-jsmodule-forms-validate' ) :\n\t\t\t\t\tForm.options[ 'validate-button-text' ],\n\t\t\tclasses: [ 'VisualDataFormSubmitButton' ],\n\t\t\tflags: [ 'primary', 'progressive' ]\n\t\t\t// type: \"submit\",\n\t\t} );\n\n\t\tValidateButton.on( 'click', () => {\n\t\t\tProcessModel.getModel( 'validate' ).then( ( res ) => {\n\t\t\t\tif ( typeof res === 'boolean' && res === false ) {\n\t\t\t\t\treturn;\n\t\t\t\t}\n\n\t\t\t\tvar thisPanels = PropertiesStack.getItems();\n\t\t\t\tPropertiesStack.setItem( thisPanels[ thisPanels.length - 1 ] );\n\n\t\t\t\tValidateButton.toggle( false );\n\t\t\t\tSubmitButton.toggle( true );\n\t\t\t\tGoBackButton.toggle( true );\n\t\t\t\t// DeleteButton.toggle( false );\n\t\t\t\t$( '#visualdataform-wrapper-' + FormID )\n\t\t\t\t\t.get( 0 )\n\t\t\t\t\t.scrollIntoView( { behavior: 'smooth' } );\n\t\t\t} );\n\t\t} );\n\n\t\tformContent.push( ValidateButton.$element );\n\n\t\t// var printDeleteButton = hasStoredJsonData();\n\n\t\t// DeleteButton = new OO.ui.ButtonInputWidget( {\n\t\t// \tlabel: mw.msg( 'visualdata-jsmodule-forms-delete' ),\n\t\t// \tclasses: [ 'VisualDataFormSubmitButton' ],\n\t\t// \tflags: [ 'destructive' ],\n\t\t// \ttype: 'submit'\n\t\t// } );\n\n\t\t// formContent.push( DeleteButton.$element );\n\n\t\tGoBackButton = new OO.ui.ButtonInputWidget( {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-forms-goback' ),\n\t\t\tclasses: [ 'VisualDataFormSubmitButton' ],\n\t\t\tflags: [ 'progressive' ],\n\t\t\ticon: 'arrowPrevious'\n\t\t} );\n\n\t\tGoBackButton.on( 'click', () => {\n\t\t\tvar thisPanels = PropertiesStack.getItems();\n\t\t\tPropertiesStack.setItem( thisPanels[ 0 ] );\n\n\t\t\tValidateButton.toggle( true );\n\t\t\tSubmitButton.toggle( false );\n\t\t\tGoBackButton.toggle( false );\n\t\t\t// DeleteButton.toggle( hasStoredJsonData() );\n\n\t\t\t$( '#visualdataform-wrapper-' + FormID )\n\t\t\t\t.get( 0 )\n\t\t\t\t.scrollIntoView( { behavior: 'smooth' } );\n\t\t} );\n\n\t\tformContent.push( GoBackButton.$element );\n\n\t\tupdateButtons( panels );\n\n\t\tvar classes = [\n\t\t\t'VisualDataForm',\n\t\t\t'VisualDataFormContext-' + Config.context\n\t\t];\n\n\t\tif ( 'css-class' in Form.options && Form.options[ 'css-class' ] !== '' ) {\n\t\t\tclasses.push( Form.options[ 'css-class' ] );\n\t\t}\n\n\t\t// eslint-disable-next-line mediawiki/class-doc\n\t\tvar form = new OO.ui.FormLayout( {\n\t\t\taction: Config.actionUrl,\n\t\t\tmethod: 'post',\n\t\t\tenctype: 'multipart/form-data',\n\t\t\t$content: formContent,\n\t\t\tclasses: classes,\n\t\t\tdata: { name: 'visualdata' }\n\t\t} );\n\n\t\t// DeleteButton.on( 'click', function () {\n\t\t// \tif (\n\t\t// \t\t// eslint-disable-next-line no-alert\n\t\t// \t\tconfirm(\n\t\t// \t\t\tmw.msg( 'visualdata-jsmodule-forms-delete-data-confirm' )\n\t\t// \t\t)\n\t\t// \t) {\n\t\t// \t\tform.$element.data( { delete: true } );\n\t\t// \t\tform.$element.trigger( 'submit' );\n\t\t// \t}\n\n\t\t// VisualDataFunctions.OOUIAlert(\n\t\t// \tnew OO.ui.HtmlSnippet(\n\t\t// \t\tmw.msg(\"visualdata-jsmodule-visualdata-delete-data-confirm\")\n\t\t// \t),\n\t\t// \t{ size: \"medium\" },\n\t\t// \tfunction () {\n\t\t// \t\tform.$element.data({ delete: true });\n\t\t// \t\tform.$element.submit();\n\t\t// \t}\n\t\t// );\n\t\t// } );\n\n\t\tform.$element.on( 'submit', onSubmit );\n\n\t\tvar editToolbar = Config.canmanageschemas || Config.caneditdata;\n\n\t\tif ( Config.context === 'parserfunction' || !editToolbar ) {\n\t\t\t$( '#visualdataform-wrapper-' + FormID ).html( form.$element );\n\n\t\t\t// eslint-disable-next-line no-jquery/no-global-selector\n\t\t\t$( '#mw-rcfilters-spinner-wrapper' ).remove();\n\t\t\t// showVisualEditor();\n\n\t\t\treturn true;\n\t\t}\n\n\t\tvar items = [];\n\t\tToolbarMain = createToolbar( Config.context === 'EditData' );\n\n\t\tvar frameA = new OO.ui.PanelLayout( {\n\t\t\t$content: [ ToolbarMain.$element, form.$element ],\n\t\t\texpanded: false,\n\t\t\tframed: false,\n\t\t\tpadded: false,\n\t\t\tdata: { name: 'visualdata' }\n\t\t} );\n\n\t\titems.push( frameA );\n\n\t\tif ( Config.canmanageschemas ) {\n\t\t\tActionToolbarMain = createActionToolbar( Config.context === 'EditData' );\n\t\t\tToolbarMain.$actions.append( ActionToolbarMain.$element );\n\n\t\t\t// https://gerrit.wikimedia.org/r/plugins/gitiles/oojs/ui/+/c2805c7e9e83e2f3a857451d46c80231d1658a0f/demos/pages/layouts.js\n\t\t\tvar toolbarSchemas = VisualDataSchemas.createToolbarA();\n\t\t\tvar contentSchemas = new OO.ui.PanelLayout( {\n\t\t\t\t$content: $(\n\t\t\t\t\t'<table id=\"visualdata-schemas-datatable\" class=\"visualdata-datatable display\" width=\"100%\"></table>'\n\t\t\t\t),\n\t\t\t\texpanded: false,\n\t\t\t\tframed: true,\n\t\t\t\tpadded: true,\n\t\t\t\tclasses: [ 'VisualDataEditDataOuterStackPanel' ]\n\t\t\t} );\n\n\t\t\tvar frameSchemas = new OO.ui.PanelLayout( {\n\t\t\t\t$content: [ toolbarSchemas.$element, contentSchemas.$element ],\n\t\t\t\texpanded: false,\n\t\t\t\tframed: false,\n\t\t\t\tpadded: false,\n\t\t\t\tdata: { name: 'manage-schemas' }\n\t\t\t} );\n\n\t\t\titems.push( frameSchemas );\n\t\t}\n\n\t\t// if (Config.canmanageforms) {\n\t\t// \tvar toolbarForms = VisualDataForms.createToolbarA();\n\t\t// \tvar contentForms = new OO.ui.PanelLayout({\n\t\t// \t\t$content: $(\n\t\t// \t\t\t'<table id=\"visualdata-forms-datatable\" class=\"visualdata-datatable display\" width=\"100%\"></table>'\n\t\t// \t\t),\n\t\t// \t\texpanded: false,\n\t\t// \t\tpadded: true,\n\t\t// \t});\n\t\t//\n\t\t// \tvar frameForms = new OO.ui.PanelLayout({\n\t\t// \t\t$content: [toolbarForms.$element, contentForms.$element],\n\t\t// \t\texpanded: false,\n\t\t// \t\tframed: true,\n\t\t// \t\tdata: { name: \"manage-forms\" },\n\t\t// \t});\n\t\t//\n\t\t// \titems.push(frameForms);\n\t\t// }\n\n\t\tOuterStack = new OO.ui.StackLayout( {\n\t\t\titems: items,\n\t\t\texpanded: false,\n\t\t\tcontinuous: false\n\t\t\t// classes: [\"visualdataform-wrapper\"],\n\t\t} );\n\n\t\tif ( Config.canmanageschemas ) {\n\t\t\tvar actionToolbarSchemas = createActionToolbar(\n\t\t\t\tConfig.context === 'EditData'\n\t\t\t);\n\t\t\ttoolbarSchemas.$actions.append( actionToolbarSchemas.$element );\n\t\t}\n\n\t\t// if (Config.canmanageforms) {\n\t\t// \tvar actionToolbarForms = createActionToolbar();\n\t\t// \ttoolbarForms.$actions.append(actionToolbarForms.$element);\n\t\t// }\n\n\t\t$( '#visualdataform-wrapper-' + FormID ).html( OuterStack.$element );\n\n\t\tToolbarMain.initialize();\n\n\t\tif ( Config.canmanageschemas ) {\n\t\t\ttoolbarSchemas.initialize();\n\t\t}\n\n\t\t// if (Config.canmanageforms) {\n\t\t// \ttoolbarForms.initialize();\n\t\t// }\n\n\t\t$( '#mw-rcfilters-spinner-wrapper' ).remove();\n\n\t\t// showVisualEditor();\n\n\t\treturn true;\n\t}\n\n\treturn {\n\t\tinitialize,\n\t\tgetCategories,\n\t\t// updateForms,\n\t\tupdateSchemas,\n\t\tupdatePanels,\n\t\tmutationChange\n\t};\n};\n\n$( () => {\n\tvar schemas = JSON.parse( mw.config.get( 'visualdata-schemas' ) );\n\t// console.log(\"schemas\", schemas);\n\n\tvar submissionData = JSON.parse(\n\t\tmw.config.get( 'visualdata-submissiondata' )\n\t);\n\t// console.log(\"submissionData\", submissionData);\n\n\tvar pageForms = JSON.parse( mw.config.get( 'visualdata-pageforms' ) );\n\t// console.log(\"pageForms\", pageForms);\n\n\tvar config = JSON.parse( mw.config.get( 'visualdata-config' ) );\n\t// console.log(\"config\", config);\n\n\tvar windowManager = new VisualDataWindowManager();\n\n\tif ( !submissionData ) {\n\t\tsubmissionData = {};\n\t}\n\n\tfunction init() {\n\t\tvar instances = [];\n\n\t\tfor ( var formID in pageForms ) {\n\n\t\t\tvar form = pageForms[ formID ];\n\n\t\t\tform = Object.assign(\n\t\t\t\t{\n\t\t\t\t\tfreetext: '',\n\t\t\t\t\tjsonData: {},\n\t\t\t\t\tcategories: [],\n\t\t\t\t\terrors: [],\n\t\t\t\t\tschemas: [],\n\t\t\t\t\toptions: {}\n\t\t\t\t},\n\t\t\t\tform\n\t\t\t);\n\n\t\t\tif ( !config.caneditdata ) {\n\t\t\t\t// form.options.title\n\t\t\t\t$( '#visualdataform-wrapper-' + formID ).html( mw.msg( 'visualdata-jsmodule-forms-cannot-edit-form' ) );\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( formID in submissionData ) {\n\t\t\t\tform = Object.assign(\n\t\t\t\t\tform,\n\t\t\t\t\tsubmissionData[ formID ]\n\t\t\t\t);\n\t\t\t}\n\n\t\t\tvar visualDataForm = new VisualDataForms(\n\t\t\t\tconfig,\n\t\t\t\tform,\n\t\t\t\tformID,\n\t\t\t\tschemas,\n\t\t\t\twindowManager\n\t\t\t);\n\n\t\t\tvisualDataForm.initialize();\n\n\t\t\tif ( config.context === 'parserfunction' && form.errors.length ) {\n\t\t\t\t$( '#visualdataform-wrapper-' + formID )\n\t\t\t\t\t.get( 0 )\n\t\t\t\t\t.scrollIntoView();\n\t\t\t}\n\n\t\t\tinstances.push( visualDataForm );\n\t\t}\n\n\t\t// *** this allows to render forms when they\n\t\t// are contained within not visible elements\n\t\t// like datatables cells, or dialogs\n\t\tvar MutationObserver = window.MutationObserver || window.WebKitMutationObserver;\n\n\t\tif ( MutationObserver ) {\n\t\t\tvar observer = new MutationObserver( ( mutations, thisObserver ) => {\n\t\t\t\tfor ( var instance of instances ) {\n\t\t\t\t\tinstance.mutationChange();\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tobserver.observe( document, {\n\t\t\t\tsubtree: true,\n\t\t\t\tchildList: true\n\t\t\t} );\n\t\t}\n\n\t\treturn instances;\n\t}\n\n\tif ( !config.canmanageschemas ) {\n\t\tVisualData.setVars( config, schemas, init() );\n\n\t} else {\n\t\tmw.loader.using( 'ext.VisualData.ManageSchemas', () => {\n\t\t\tvar instances = init();\n\t\t\tVisualData.setVars( config, schemas, instances );\n\t\t\tVisualDataSchemas.setVars(\n\t\t\t\tconfig,\n\t\t\t\twindowManager,\n\t\t\t\tschemas,\n\t\t\t\tinstances\n\t\t\t);\n\t\t} );\n\t}\n\n} );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataFunctions.js","messages":[],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":25,"column":1,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":846,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":80,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":80,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":81,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":81,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":82,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":82,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":83,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":83,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":84,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":84,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":97,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":97,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-useless-escape","severity":2,"message":"Unnecessary escape character: \\(.","line":127,"column":52,"nodeType":"Literal","messageId":"unnecessaryEscape","endLine":127,"endColumn":53,"suggestions":[{"messageId":"removeEscape","fix":{"range":[3665,3666],"text":""},"desc":"Remove the `\\`. This maintains the current functionality."},{"messageId":"escapeBackslash","fix":{"range":[3665,3665],"text":"\\"},"desc":"Replace the `\\` with `\\\\` to include the actual backslash character."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-useless-escape","severity":2,"message":"Unnecessary escape character: \\).","line":127,"column":54,"nodeType":"Literal","messageId":"unnecessaryEscape","endLine":127,"endColumn":55,"suggestions":[{"messageId":"removeEscape","fix":{"range":[3667,3668],"text":""},"desc":"Remove the `\\`. This maintains the current functionality."},{"messageId":"escapeBackslash","fix":{"range":[3667,3667],"text":"\\"},"desc":"Replace the `\\` with `\\\\` to include the actual backslash character."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":246,"column":3,"nodeType":"MemberExpression","messageId":"unexpected","endLine":246,"endColumn":14,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"log"},"fix":{"range":[6587,6605],"text":""},"desc":"Remove the console.log()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":496,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":496,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":497,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":497,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":498,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":498,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":499,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":499,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":500,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":500,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":501,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":501,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-sequences","severity":2,"message":"Unexpected use of comma operator.","line":653,"column":59,"nodeType":"SequenceExpression","messageId":"unexpectedCommaExpression","endLine":653,"endColumn":60,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":776,"column":4,"nodeType":"MemberExpression","messageId":"unexpected","endLine":776,"endColumn":17,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[20608,20682],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'e' is defined but never used.","line":787,"column":47,"nodeType":"Identifier","messageId":"unusedVar","endLine":787,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-self-compare","severity":2,"message":"Comparing to itself is potentially pointless.","line":802,"column":39,"nodeType":"BinaryExpression","messageId":"comparingToSelf","endLine":802,"endColumn":54,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataGeolocation.js","messages":[],"suppressedMessages":[{"ruleId":"no-unused-vars","severity":2,"message":"'VisualDataGeolocation' is assigned a value but never used.","line":24,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":24,"endColumn":28,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'Config' is assigned a value but never used.","line":26,"column":6,"nodeType":"Identifier","messageId":"unusedVar","endLine":26,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 158. Maximum allowed is 100.","line":65,"column":1,"nodeType":"Program","messageId":"max","endLine":65,"endColumn":144,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 161. Maximum allowed is 100.","line":70,"column":1,"nodeType":"Program","messageId":"max","endLine":70,"endColumn":147,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 116. Maximum allowed is 100.","line":86,"column":1,"nodeType":"Program","messageId":"max","endLine":86,"endColumn":102,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 147. Maximum allowed is 100.","line":108,"column":1,"nodeType":"Program","messageId":"max","endLine":108,"endColumn":133,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 356. Maximum allowed is 100.","line":112,"column":1,"nodeType":"Program","messageId":"max","endLine":112,"endColumn":342,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 273. Maximum allowed is 100.","line":116,"column":1,"nodeType":"Program","messageId":"max","endLine":116,"endColumn":259,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 102. Maximum allowed is 100.","line":123,"column":1,"nodeType":"Program","messageId":"max","endLine":123,"endColumn":88,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 250. Maximum allowed is 100.","line":124,"column":1,"nodeType":"Program","messageId":"max","endLine":124,"endColumn":236,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 204. Maximum allowed is 100.","line":126,"column":1,"nodeType":"Program","messageId":"max","endLine":126,"endColumn":190,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 186. Maximum allowed is 100.","line":132,"column":1,"nodeType":"Program","messageId":"max","endLine":132,"endColumn":172,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 237. Maximum allowed is 100.","line":141,"column":1,"nodeType":"Program","messageId":"max","endLine":141,"endColumn":223,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 118. Maximum allowed is 100.","line":157,"column":1,"nodeType":"Program","messageId":"max","endLine":157,"endColumn":104,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'data' is assigned a value but never used.","line":183,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":183,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"max-len","severity":1,"message":"This line has a length of 108. Maximum allowed is 100.","line":317,"column":1,"nodeType":"Program","messageId":"max","endLine":317,"endColumn":100,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-inner-declarations","severity":2,"message":"Move function declaration to function body root.","line":423,"column":4,"nodeType":"FunctionDeclaration","messageId":"moveDeclToRoot","endLine":428,"endColumn":5,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-inner-declarations","severity":2,"message":"Move function declaration to function body root.","line":433,"column":4,"nodeType":"FunctionDeclaration","messageId":"moveDeclToRoot","endLine":438,"endColumn":5,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-inner-declarations","severity":2,"message":"Move function declaration to function body root.","line":441,"column":4,"nodeType":"FunctionDeclaration","messageId":"moveDeclToRoot","endLine":446,"endColumn":5,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'property' is defined but never used.","line":459,"column":45,"nodeType":"Identifier","messageId":"unusedVar","endLine":459,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataInputConfig.js","messages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 110. Maximum allowed is 100.","line":838,"column":1,"nodeType":"Program","messageId":"max","endLine":838,"endColumn":96}],"suppressedMessages":[{"ruleId":"no-unused-vars","severity":2,"message":"'VisualDataInputConfig' is assigned a value but never used.","line":26,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":26,"endColumn":28,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'Config' is assigned a value but never used.","line":28,"column":6,"nodeType":"Identifier","messageId":"unusedVar","endLine":28,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":294,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":294,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":295,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":295,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":304,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":304,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":305,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":305,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":425,"column":11,"nodeType":"Program","messageId":"unexpectedTab","endLine":425,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":426,"column":11,"nodeType":"Program","messageId":"unexpectedTab","endLine":426,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":485,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":485,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":486,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":486,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":494,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":494,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":495,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":495,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":649,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":649,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":650,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":650,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":678,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":678,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":679,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":679,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":715,"column":11,"nodeType":"Program","messageId":"unexpectedTab","endLine":715,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":716,"column":11,"nodeType":"Program","messageId":"unexpectedTab","endLine":716,"endColumn":12,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":774,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":774,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":775,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":775,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":832,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":832,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":833,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":833,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":837,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":837,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":838,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":838,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":854,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":854,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":855,"column":9,"nodeType":"Program","messageId":"unexpectedTab","endLine":855,"endColumn":10,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'data' is assigned a value but never used.","line":1088,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":1088,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'property' is defined but never used.","line":1154,"column":45,"nodeType":"Identifier","messageId":"unusedVar","endLine":1154,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright ©2023, https://wikisphere.org\n */\n\n/* eslint-disable no-tabs */\n\n// @see https://doc.wikimedia.org/oojs-ui/master/js/\n// eslint-disable-next-line no-unused-vars\nconst VisualDataInputConfig = function ( phpConfig, windowManager ) {\n\t// eslint-disable-next-line no-unused-vars\n\tvar Config = phpConfig;\n\tvar WindowManager = windowManager;\n\tvar ProcessDialog;\n\tvar DialogSearchName = 'dialogSearch';\n\tvar processDialogSearch;\n\tvar Model;\n\tvar InputName;\n\tvar CustomInputConfig;\n\tvar Callback;\n\tvar panelLayout;\n\tvar SelectedItems = {};\n\tvar HelpUrl;\n\n\tfunction inArray( val, arr ) {\n\t\treturn arr.indexOf( val ) !== -1;\n\t}\n\n\t// @TODO add default for each of them\n\tfunction getInputConfig( inputName ) {\n\t\tswitch ( inputName ) {\n\t\t\tcase 'mw.widgets.UserInputWidget':\n\t\t\tcase 'mw.widgets.TitleInputWidget':\n\t\t\tcase 'mw.widgets.DateInputWidget':\n\t\t\tcase 'OO.ui.TextInputWidget':\n\t\t\t\tvar ret = {\n\t\t\t\t\taccessKey: [ 'string', 'The access key' ],\n\t\t\t\t\tautocomplete: [\n\t\t\t\t\t\t'boolean', // 'boolean|string',\n\t\t\t\t\t\t'Should the browser support autocomplete for this field?'\n\t\t\t\t\t],\n\t\t\t\t\tautofocus: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Use an HTML autofocus attribute to instruct the browser to focus this widget.'\n\t\t\t\t\t],\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdir: [ 'string', 'The directionality of the input (ltr/rtl).' ],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tflags: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The name or names of the flags (e.g., 'progressive' or 'primary') to apply.\"\n\t\t\t\t\t],\n\t\t\t\t\ticon: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names.'\n\t\t\t\t\t],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\tindicator: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Symbolic name of the indicator (e.g. ‘required’ or ‘down’).'\n\t\t\t\t\t],\n\t\t\t\t\tinputFilter: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The name of an input filter function. Input filters modify the value of an input before it is accepted'\n\t\t\t\t\t],\n\t\t\t\t\tinputId: [ 'string', 'The value of the input’s HTML id attribute.' ],\n\t\t\t\t\tinvisibleLabel: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Whether the label should be visually hidden (but still accessible to screen-readers).'\n\t\t\t\t\t],\n\t\t\t\t\tlabel: [ 'string', 'The label text' ],\n\t\t\t\t\tlabelPosition: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The position of the inline label relative to that of the value or placeholder text: 'before' or 'after'\"\n\t\t\t\t\t],\n\t\t\t\t\tmaxLength: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Maximum number of characters allowed in the input.'\n\t\t\t\t\t],\n\t\t\t\t\tminLength: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Minimum number of characters allowed in the input.'\n\t\t\t\t\t],\n\t\t\t\t\tname: [ 'string', 'The value of the input’s HTML name attribute.' ],\n\t\t\t\t\tplaceholder: [ 'string', 'Placeholder text' ],\n\t\t\t\t\treadOnly: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Prevent changes to the value of the text input.'\n\t\t\t\t\t],\n\t\t\t\t\tspellcheck: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Should the browser support spellcheck for this field (undefined means leaving it up to the browser).'\n\t\t\t\t\t],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text.' ],\n\t\t\t\t\ttype: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The value of the HTML type attribute: 'text', 'password', 'email', 'url' or 'number'.\"\n\t\t\t\t\t],\n\t\t\t\t\tvalidate: [\n\t\t\t\t\t\t'string', // regex\n\t\t\t\t\t\t'A regular expression that must match the value for it to be considered valid. See <a target=\"_blank\" href=\"https://json-schema.org/understanding-json-schema/reference/regular_expressions\">Regular Expressions</a>'\n\t\t\t\t\t]\n\t\t\t\t\t// value: [\"string\", \"The value of the input.\"],\n\t\t\t\t};\n\n\t\t\t\tswitch ( inputName ) {\n\t\t\t\t\tcase 'mw.widgets.DateInputWidget':\n\t\t\t\t\t\treturn Object.assign( ret, {\n\t\t\t\t\t\t\tprecision: [ 'day/month', \" Date precision to use, 'day' or 'month'\" ],\n\t\t\t\t\t\t\tinputFormat: [\n\t\t\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\t\t'Date format string to use for the textual input field'\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tdisplayFormat: [\n\t\t\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\t\t'Date format string to use for the clickable label'\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tlongDisplayFormat: [\n\t\t\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t\t\t'If a custom displayFormat is not specified, use unabbreviated day of the week and month names in the default language-specific displayFormat'\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tplaceholderLabel: [\n\t\t\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\t\t'Placeholder text shown when the widget is not'\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tplaceholderDateFormat: [\n\t\t\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\t\t\"User-visible date format string displayed in the textual input field when it's empty\"\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tmustBeAfter: [ 'date', 'Validates the date to be after this' ],\n\t\t\t\t\t\t\tmustBeBefore: [ 'date', 'Validates the date to be before this' ]\n\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'mw.widgets.TitleInputWidget':\n\t\t\t\t\t\treturn Object.assign( ret, {\n\t\t\t\t\t\t\tlimit: [ 'integer', 'Number of results to show' ],\n\t\t\t\t\t\t\tnamespace: [ 'integer', 'Namespace to prepend to queries' ],\n\t\t\t\t\t\t\tmaxLength: [ 'integer', 'Maximum query length' ],\n\t\t\t\t\t\t\trelative: [\n\t\t\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t\t\t'If a namespace is set, display titles relative to it'\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tsuggestions: [ 'boolean', 'Display search suggestions' ],\n\t\t\t\t\t\t\tshowRedirectTargets: [ 'boolean', 'Show the targets of redirects' ],\n\t\t\t\t\t\t\tshowImages: [ 'boolean', 'Show page images' ],\n\t\t\t\t\t\t\tshowDescriptions: [ 'boolean', 'Show page descriptions' ],\n\t\t\t\t\t\t\tshowDisambigsLast: [\n\t\t\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t\t\t'Show disambiguation pages as the last results'\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tshowMissing: [ 'boolean', 'Show missing pages' ],\n\t\t\t\t\t\t\tshowInterwikis: [\n\t\t\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t\t\t'Show pages with a valid interwiki prefix'\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\taddQueryInput: [ 'boolean', \"Add exact user's input query to results\" ],\n\t\t\t\t\t\t\texcludeCurrentPage: [\n\t\t\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t\t\t'Exclude the current page from suggestions'\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\texcludeDynamicNamespaces: [\n\t\t\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t\t\t'Exclude pages whose namespace is negative'\n\t\t\t\t\t\t\t],\n\t\t\t\t\t\t\tvalidateTitle: [ 'boolean', 'Whether the input must be a valid title' ],\n\t\t\t\t\t\t\trequired: [ 'boolean', 'Whether the input must not be empty' ],\n\t\t\t\t\t\t\thighlightSearchQuery: [\n\t\t\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t\t\t'Highlight the partial query the user used for this title'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t} );\n\n\t\t\t\t\tcase 'mw.widgets.UserInputWidget':\n\t\t\t\t\t\treturn Object.assign( ret, {\n\t\t\t\t\t\t\tlimit: [ 'integer', 'Number of results to show' ]\n\t\t\t\t\t\t} );\n\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\tcase 'OO.ui.ToggleSwitchWidget':\n\t\t\t\treturn {\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text.' ]\n\t\t\t\t\t// value: [\"string\", \"The value of the input.\"],\n\t\t\t\t};\n\n\t\t\tcase 'OO.ui.RadioSelectInputWidget':\n\t\t\t\treturn {\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdir: [ 'string', 'The directionality of the input (ltr/rtl).' ],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\tinputFilter: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The name of an input filter function. Input filters modify the value of an input before it is accepted'\n\t\t\t\t\t],\n\t\t\t\t\tinputId: [ 'string', 'The value of the input’s HTML id attribute.' ],\n\t\t\t\t\tname: [ 'string', 'The value of the input’s HTML name attribute.' ],\n\t\t\t\t\t// options: [\"array\", \"Array of menu options\"],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text' ]\n\t\t\t\t};\n\n\t\t\tcase 'OO.ui.NumberInputWidget':\n\t\t\t\treturn {\n\t\t\t\t\taccessKey: [ 'string', 'The access key' ],\n\t\t\t\t\tautocomplete: [\n\t\t\t\t\t\t'boolean', // 'boolean|string',\n\t\t\t\t\t\t'Should the browser support autocomplete for this field?'\n\t\t\t\t\t],\n\t\t\t\t\tautofocus: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Use an HTML autofocus attribute to instruct the browser to focus this widget.'\n\t\t\t\t\t],\n\t\t\t\t\tbuttonStep: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Delta when using the buttons or Up/Down arrow keys'\n\t\t\t\t\t],\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdir: [ 'string', 'The directionality of the input (ltr/rtl).' ],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tflags: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The name or names of the flags (e.g., 'progressive' or 'primary') to apply.\"\n\t\t\t\t\t],\n\t\t\t\t\ticon: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names.'\n\t\t\t\t\t],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\tindicator: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Symbolic name of the indicator (e.g. ‘required’ or ‘down’).'\n\t\t\t\t\t],\n\t\t\t\t\tinputFilter: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The name of an input filter function. Input filters modify the value of an input before it is accepted'\n\t\t\t\t\t],\n\t\t\t\t\tinputId: [ 'string', 'The value of the input’s HTML id attribute.' ],\n\t\t\t\t\tinvisibleLabel: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Whether the label should be visually hidden (but still accessible to screen-readers).'\n\t\t\t\t\t],\n\t\t\t\t\tlabel: [ 'string', 'The label text' ],\n\t\t\t\t\tlabelPosition: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The position of the inline label relative to that of the value or placeholder text: 'before' or 'after'\"\n\t\t\t\t\t],\n\t\t\t\t\tmax: [ 'number', 'Maximum allowed value' ],\n\t\t\t\t\tmaxLength: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Maximum number of characters allowed in the input.'\n\t\t\t\t\t],\n\t\t\t\t\tmin: [ 'number', 'Minimum allowed value' ],\n\t\t\t\t\tminLength: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Minimum number of characters allowed in the input.'\n\t\t\t\t\t],\n\t\t\t\t\t// minusButton: [\n\t\t\t\t\t// \t'object',\n\t\t\t\t\t// \t'Configuration options to pass to the decrementing button widget'\n\t\t\t\t\t// ],\n\t\t\t\t\tname: [ 'string', 'The value of the input’s HTML name attribute.' ],\n\t\t\t\t\tpageStep: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Delta when using the Page-up/Page-down keys. Defaults to 10 times buttonStep'\n\t\t\t\t\t],\n\t\t\t\t\tplaceholder: [ 'string', 'Placeholder text' ],\n\t\t\t\t\t// plusButton: [\n\t\t\t\t\t// \t'object',\n\t\t\t\t\t// \t'Configuration options to pass to the incrementing button widget.'\n\t\t\t\t\t// ],\n\t\t\t\t\treadOnly: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Prevent changes to the value of the text input.'\n\t\t\t\t\t],\n\t\t\t\t\tshowButtons: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Whether to show the plus and minus buttons.'\n\t\t\t\t\t],\n\t\t\t\t\tspellcheck: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Should the browser support spellcheck for this field (undefined means leaving it up to the browser).'\n\t\t\t\t\t],\n\t\t\t\t\tstep: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'If specified, the field only accepts values that are multiples of this.'\n\t\t\t\t\t],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text.' ],\n\t\t\t\t\ttype: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The value of the HTML type attribute: 'text', 'password', 'email', 'url' or 'number'.\"\n\t\t\t\t\t],\n\t\t\t\t\tvalidate: [\n\t\t\t\t\t\t'string', // regex\n\t\t\t\t\t\t'A regular expression that must match the value for it to be considered valid'\n\t\t\t\t\t]\n\t\t\t\t\t// value: [\"string\", \"The value of the input.\"],\n\t\t\t\t};\n\n\t\t\tcase 'mw.widgets.UsersMultiselectWidget':\n\t\t\tcase 'mw.widgets.TitlesMultiselectWidget':\n\t\t\tcase 'mw.widgets.CategoryMultiselectWidget':\n\t\t\tcase 'OO.ui.TagMultiselectWidget':\n\t\t\tcase 'OO.ui.MenuTagMultiselectWidget':\n\t\t\t\tvar ret = {\n\t\t\t\t\tallowArbitrary: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Allow data items to be added even if not present in the menu.'\n\t\t\t\t\t],\n\t\t\t\t\tallowDisplayInvalidTags: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Allow the display of invalid tags.'\n\t\t\t\t\t],\n\t\t\t\t\tallowDuplicates: [ 'boolean', 'Allow duplicate items to be added' ],\n\t\t\t\t\tallowEditTags: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Allow editing of the tags by clicking them'\n\t\t\t\t\t],\n\t\t\t\t\tallowReordering: [ 'boolean', 'Allow reordering of the items' ],\n\t\t\t\t\tallowedValues: [\n\t\t\t\t\t\t'array',\n\t\t\t\t\t\t'An array representing the allowed items by their datas'\n\t\t\t\t\t],\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tdraggable: [ 'boolean', 'The items are draggable.' ],\n\t\t\t\t\tflags: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The name or names of the flags (e.g., 'progressive' or 'primary') to apply.\"\n\t\t\t\t\t],\n\t\t\t\t\ticon: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names.'\n\t\t\t\t\t],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\tindicator: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Symbolic name of the indicator (e.g. ‘required’ or ‘down’).'\n\t\t\t\t\t],\n\t\t\t\t\t// input: [ 'object', 'Configuration options for the input widget' ],\n\n\t\t\t\t\tinputPosition: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Position of the input. Options are: - inline: The input is invisible, but exists inside the tag list, so the user types into the tag groups to add tags. - outline: The input is underneath the tag area. - none: No input supplied'\n\t\t\t\t\t],\n\t\t\t\t\t// items: [\"array\", \"\"],\n\t\t\t\t\t// menu: [ 'object', 'Configuration object for the menu widget' ],\n\n\t\t\t\t\t// options: [\"array\", \"Array of menu options\"],\n\t\t\t\t\torientation: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"Item orientation: 'horizontal' or 'vertical'.\"\n\t\t\t\t\t],\n\t\t\t\t\tplaceholder: [ 'string', 'Placeholder text' ],\n\t\t\t\t\t// selected: [\"array\", \"A set of selected tags\"],\n\t\t\t\t\ttagLimit: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'An optional limit on the number of selected options'\n\t\t\t\t\t],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text' ]\n\t\t\t\t};\n\t\t\t\tswitch ( inputName ) {\n\t\t\t\t\tcase 'OO.ui.MenuTagMultiselectWidget':\n\t\t\t\t\t\treturn Object.assign( ret, {\n\t\t\t\t\t\t\tclearInputOnChoose: [\n\t\t\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t\t\t'Clear the text input value when a menu option is chosen'\n\t\t\t\t\t\t\t]\n\t\t\t\t\t\t} );\n\t\t\t\t\tcase 'mw.widgets.CategoryMultiselectWidget':\n\t\t\t\t\t\treturn Object.assign( ret, {\n\t\t\t\t\t\t\tlimit: [ 'integer', 'Maximum number of results to load' ]\n\t\t\t\t\t\t} );\n\t\t\t\t\tcase 'mw.widgets.TitlesMultiselectWidget':\n\t\t\t\t\t\treturn Object.assign( ret, {\n\t\t\t\t\t\t\tclearInputOnChoose: [ 'boolean', 'clear input on choose' ],\n\t\t\t\t\t\t\tinputPosition: [ 'string', 'input position' ],\n\n\t\t\t\t\t\t\tallowEditTags: [ 'boolean', 'clear input on choose' ]\n\t\t\t\t\t\t} );\n\t\t\t\t\tcase 'mw.widgets.UsersMultiselectWidget':\n\t\t\t\t\t\treturn Object.assign( ret, {\n\t\t\t\t\t\t\tlimit: [ 'integer', 'Number of results to show' ],\n\t\t\t\t\t\t\t// name: [\n\t\t\t\t\t\t\t// \t'string',\n\t\t\t\t\t\t\t// \t'Name of input to submit results (when used in HTML forms)'\n\t\t\t\t\t\t\t// ],\n\t\t\t\t\t\t\tipAllowed: [ 'boolean', 'Show IP addresses in autocomplete menu' ],\n\t\t\t\t\t\t\t'ipRangeLimits.IPv4': [ 'integer', ' Maximum allowed IPv4 range' ],\n\t\t\t\t\t\t\t'ipRangeLimits.IPv6': [ 'integer', ' Maximum allowed IPv6 range' ]\n\t\t\t\t\t\t} );\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\tcase 'OO.ui.ComboBoxInputWidget':\n\t\t\t\treturn {\n\t\t\t\t\taccessKey: [ 'string', 'The access key' ],\n\t\t\t\t\tautocomplete: [\n\t\t\t\t\t\t'boolean', // |string\n\t\t\t\t\t\t'Should the browser support autocomplete for this field?'\n\t\t\t\t\t],\n\t\t\t\t\tautofocus: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Use an HTML autofocus attribute to instruct the browser to focus this widget.'\n\t\t\t\t\t],\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdir: [ 'string', 'The directionality of the input (ltr/rtl).' ],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tflags: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The name or names of the flags (e.g., 'progressive' or 'primary') to apply.\"\n\t\t\t\t\t],\n\t\t\t\t\ticon: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names.'\n\t\t\t\t\t],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\tindicator: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Symbolic name of the indicator (e.g. ‘required’ or ‘down’).'\n\t\t\t\t\t],\n\t\t\t\t\tinputFilter: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The name of an input filter function. Input filters modify the value of an input before it is accepted'\n\t\t\t\t\t],\n\t\t\t\t\tinputId: [ 'string', 'The value of the input’s HTML id attribute.' ],\n\t\t\t\t\tinvisibleLabel: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Whether the label should be visually hidden (but still accessible to screen-readers).'\n\t\t\t\t\t],\n\t\t\t\t\tlabel: [ 'string', 'The label text' ],\n\t\t\t\t\tlabelPosition: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The position of the inline label relative to that of the value or placeholder text: 'before' or 'after'\"\n\t\t\t\t\t],\n\t\t\t\t\tmaxLength: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Maximum number of characters allowed in the input.'\n\t\t\t\t\t],\n\t\t\t\t\t// menu: [\n\t\t\t\t\t// \t'object',\n\t\t\t\t\t// \t'configuration options to pass to the menu select widget'\n\t\t\t\t\t// ],\n\t\t\t\t\tminLength: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Minimum number of characters allowed in the input.'\n\t\t\t\t\t],\n\t\t\t\t\tname: [ 'string', 'The value of the input’s HTML name attribute.' ],\n\t\t\t\t\t// options: [\n\t\t\t\t\t// \t\"object\",\n\t\t\t\t\t// \t\"onfiguration options to pass to the menu select widget\",\n\t\t\t\t\t// ],\n\t\t\t\t\tplaceholder: [ 'string', 'Placeholder text' ],\n\t\t\t\t\treadOnly: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Prevent changes to the value of the text input.'\n\t\t\t\t\t],\n\t\t\t\t\tspellcheck: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Should the browser support spellcheck for this field (undefined means leaving it up to the browser).'\n\t\t\t\t\t],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text.' ],\n\t\t\t\t\ttype: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The value of the HTML type attribute: 'text', 'password', 'email', 'url' or 'number'.\"\n\t\t\t\t\t],\n\t\t\t\t\tvalidate: [\n\t\t\t\t\t\t'string', // regex\n\t\t\t\t\t\t'A regular expression that must match the value for it to be considered valid'\n\t\t\t\t\t]\n\t\t\t\t\t// value: [\"string\", \"The value of the input.\"],\n\t\t\t\t};\n\n\t\t\tcase 'OO.ui.MultilineTextInputWidget':\n\t\t\t\treturn {\n\t\t\t\t\taccessKey: [ 'string', 'The access key' ],\n\t\t\t\t\tautocomplete: [\n\t\t\t\t\t\t'boolean', // 'boolean|string',\n\t\t\t\t\t\t'Should the browser support autocomplete for this field?'\n\t\t\t\t\t],\n\t\t\t\t\tautofocus: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Use an HTML autofocus attribute to instruct the browser to focus this widget.'\n\t\t\t\t\t],\n\t\t\t\t\tautosize: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Automatically resize the text input to fit its content'\n\t\t\t\t\t],\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdir: [ 'string', 'The directionality of the input (ltr/rtl).' ],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tflags: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The name or names of the flags (e.g., 'progressive' or 'primary') to apply.\"\n\t\t\t\t\t],\n\t\t\t\t\ticon: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names.'\n\t\t\t\t\t],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\tindicator: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Symbolic name of the indicator (e.g. ‘required’ or ‘down’).'\n\t\t\t\t\t],\n\t\t\t\t\tinputFilter: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The name of an input filter function. Input filters modify the value of an input before it is accepted'\n\t\t\t\t\t],\n\t\t\t\t\tinputId: [ 'string', 'The value of the input’s HTML id attribute.' ],\n\t\t\t\t\tinvisibleLabel: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Whether the label should be visually hidden (but still accessible to screen-readers).'\n\t\t\t\t\t],\n\t\t\t\t\tlabel: [ 'string', 'The label text' ],\n\t\t\t\t\tlabelPosition: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The position of the inline label relative to that of the value or placeholder text: 'before' or 'after'\"\n\t\t\t\t\t],\n\t\t\t\t\tmaxLength: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Maximum number of characters allowed in the input.'\n\t\t\t\t\t],\n\t\t\t\t\tmaxRows: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Maximum number of rows to display when autosize is set to true'\n\t\t\t\t\t],\n\t\t\t\t\tminLength: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Minimum number of characters allowed in the input.'\n\t\t\t\t\t],\n\t\t\t\t\tname: [ 'string', 'The value of the input’s HTML name attribute.' ],\n\t\t\t\t\tplaceholder: [ 'string', 'Placeholder text' ],\n\t\t\t\t\treadOnly: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Prevent changes to the value of the text input.'\n\t\t\t\t\t],\n\t\t\t\t\trows: [\n\t\t\t\t\t\t'integer',\n\t\t\t\t\t\t'Number of visible lines in textarea. If used with autosize, specifies minimum number of rows to display.'\n\t\t\t\t\t],\n\t\t\t\t\tspellcheck: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Should the browser support spellcheck for this field (undefined means leaving it up to the browser).'\n\t\t\t\t\t],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text.' ],\n\t\t\t\t\ttype: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"The value of the HTML type attribute: 'text', 'password', 'email', 'url' or 'number'.\"\n\t\t\t\t\t],\n\t\t\t\t\tvalidate: [\n\t\t\t\t\t\t'string', // regex\n\t\t\t\t\t\t'A regular expression that must match the value for it to be considered valid'\n\t\t\t\t\t]\n\t\t\t\t\t// value: [\"string\", \"The value of the input.\"],\n\t\t\t\t};\n\n\t\t\tcase 'OO.ui.MultiselectWidget':\n\t\t\t\treturn {\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\t// items: ['array', 'An array of options to add to the multiselect'],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text.' ]\n\t\t\t\t};\n\n\t\t\tcase 'OO.ui.ButtonSelectWidget':\n\t\t\t\treturn {\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\titems: [ 'array', 'An array of options to add to the multiselect' ],\n\t\t\t\t\tmultiselect: [ 'boolean', 'Allow for multiple selections' ],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ]\n\t\t\t\t};\n\n\t\t\tcase 'OO.ui.CheckboxMultiselectInputWidget':\n\t\t\t\treturn {\n\t\t\t\t\taccessKey: [ 'string', 'The access key' ],\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdir: [ 'string', 'The directionality of the input (ltr/rtl).' ],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\tinputFilter: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The name of an input filter function. Input filters modify the value of an input before it is accepted'\n\t\t\t\t\t],\n\t\t\t\t\tinputId: [ 'string', 'The value of the input’s HTML id attribute.' ],\n\t\t\t\t\tname: [ 'string', 'The value of the input’s HTML name attribute.' ],\n\t\t\t\t\t// options: [\n\t\t\t\t\t// \t'array',\n\t\t\t\t\t// \t'Array of menu options in the format described above.'\n\t\t\t\t\t// ],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text.' ]\n\t\t\t\t};\n\n\t\t\tcase 'OO.ui.DropdownInputWidget':\n\t\t\t\treturn {\n\t\t\t\t\taccessKey: [ 'string', 'The access key' ],\n\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdir: [ 'string', 'The directionality of the input (ltr/rtl).' ],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\t// dropdown: [ 'object', 'Configuration options for DropdownWidget' ],\n\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\n\t\t\t\t\tinputFilter: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The name of an input filter function. Input filters modify the value of an input before it is accepted'\n\t\t\t\t\t],\n\t\t\t\t\tinputId: [ 'string', 'The value of the input’s HTML id attribute.' ],\n\n\t\t\t\t\tname: [ 'string', 'The value of the input’s HTML name attribute.' ],\n\t\t\t\t\t// options: [\n\t\t\t\t\t// \t'array',\n\t\t\t\t\t// \t'Array of menu options in the format described above.'\n\t\t\t\t\t// ],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text.' ]\n\t\t\t\t\t// value: [\"string\", \"The value of the input.\"],\n\t\t\t\t};\n\n\t\t\tcase 'OO.ui.InputWidget':\n\t\t\tcase 'mw.widgets.datetime.DateTimeInputWidget':\n\t\t\t\tvar ret = {\n\t\t\t\t\taccessKey: [ 'string', 'The access key' ],\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdir: [ 'string', 'The directionality of the input (ltr/rtl).' ],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\tinputFilter: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The name of an input filter function. Input filters modify the value of an input before it is accepted'\n\t\t\t\t\t],\n\t\t\t\t\tinputId: [ 'string', 'The value of the input’s HTML id attribute.' ],\n\t\t\t\t\tname: [ 'string', 'The value of the input’s HTML name attribute.' ],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\ttitle: [ 'string', 'The title text.' ]\n\t\t\t\t\t// value: [\"string\", \"The value of the input.\"],\n\t\t\t\t};\n\n\t\t\t\tswitch ( inputName ) {\n\t\t\t\t\tcase 'mw.widgets.datetime.DateTimeInputWidget':\n\t\t\t\t\t\treturn Object.assign( ret, {\n\t\t\t\t\t\t\ttype: [ 'string', \"Whether to act like a 'date'\" ],\n\t\t\t\t\t\t\trequired: [ 'boolean', 'Whether a value is required' ],\n\t\t\t\t\t\t\tclearable: [ 'boolean', 'Whether to provide for blanking the value.' ],\n\t\t\t\t\t\t\t// value: [\n\t\t\t\t\t\t\t// \t'boolean',\n\t\t\t\t\t\t\t// \t'Default value for the widget'\n\t\t\t\t\t\t\t// ],\n\t\t\t\t\t\t\tmin: [ 'string', ' Minimum allowed date' ],\n\t\t\t\t\t\t\tmax: [ 'string', 'Maximum allowed date' ]\n\t\t\t\t\t\t} );\n\t\t\t\t\tdefault:\n\t\t\t\t\t\treturn ret;\n\t\t\t\t}\n\n\t\t\tcase 'ButtonMultiselectWidget':\n\t\t\t\treturn {\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ]\n\t\t\t\t};\n\n\t\t\tcase 'intl-tel-input':\n\t\t\t\t// @see https://github.com/jackocnr/intl-tel-input\n\t\t\t\treturn {\n\t\t\t\t\tallowDropdown: [ 'boolean', 'Whether or not to allow the dropdown' ],\n\t\t\t\t\tautoInsertDialCode: [\n\t\t\t\t\t\t'Boolean',\n\t\t\t\t\t\t'When enabled (requires nationalMode to be disabled), the international dial code will be automatically inserted into the input'\n\t\t\t\t\t],\n\t\t\t\t\tautoPlaceholder: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t\"Set the input's placeholder to an example number for the selected country, and update it if the country changes\"\n\t\t\t\t\t],\n\t\t\t\t\tcustomContainer: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Additional classes to add to the parent div.'\n\t\t\t\t\t],\n\t\t\t\t\tcustomPlaceholder: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Change the placeholder generated by autoPlaceholder. Must return a string'\n\t\t\t\t\t],\n\t\t\t\t\texcludeCountries: [\n\t\t\t\t\t\t'array',\n\t\t\t\t\t\t'In the dropdown, display all countries except the ones you specify here.'\n\t\t\t\t\t],\n\t\t\t\t\tformatOnDisplay: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Format the input value (according to the nationalMode option) during initialisation, and on setNumber. Requires the utilsScript option'\n\t\t\t\t\t],\n\t\t\t\t\tgeoIpLookup: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'When setting initialCountry to \"auto\", you must use this option to specify a custom function that looks up the user\\'s location, and then calls the success callback with the relevant country code'\n\t\t\t\t\t],\n\t\t\t\t\thiddenInput: [ 'string', 'Add a hidden input with the given name.' ],\n\t\t\t\t\tinitialCountry: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Set the initial country selection by specifying its country code'\n\t\t\t\t\t],\n\t\t\t\t\t// 'localizedCountries': [\n\t\t\t\t\t// \t'object',\n\t\t\t\t\t// \t'Allow localisation of country names'\n\t\t\t\t\t// ],\n\t\t\t\t\tnationalMode: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Format numbers in the national format, rather than the international format.'\n\t\t\t\t\t],\n\t\t\t\t\tonlyCountries: [\n\t\t\t\t\t\t'array',\n\t\t\t\t\t\t'In the dropdown, display only the countries you specify'\n\t\t\t\t\t],\n\t\t\t\t\tplaceholderNumberType: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Specify one of the keys from the global enum intlTelInputUtils.numberType'\n\t\t\t\t\t],\n\t\t\t\t\tpreferredCountries: [\n\t\t\t\t\t\t'array',\n\t\t\t\t\t\t'Specify the countries to appear at the top of the list'\n\t\t\t\t\t],\n\t\t\t\t\tseparateDialCode: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Display the country dial code next to the selected flag'\n\t\t\t\t\t],\n\t\t\t\t\tshowFlags: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Set this to false to hide the flags e.g. for political reasons'\n\t\t\t\t\t],\n\t\t\t\t\tutilsScript: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Enable formatting/validation etc. by specifying the URL of the included utils.js script (or alternatively just point it to the file on cdnjs.com)'\n\t\t\t\t\t]\n\t\t\t\t};\n\n\t\t\tcase 'RatingWidget':\n\t\t\t\treturn {\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ]\n\t\t\t\t};\n\n\t\t\tcase 'VisualEditor':\n\t\t\t\treturn {\n\t\t\t\t\tclasses: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The names of the CSS classes to apply to the element.'\n\t\t\t\t\t]\n\t\t\t\t\t// contentModel: [ 'string', 'Output (wikitext or html)' ],\n\t\t\t\t};\n\n\t\t\tcase 'OO.ui.SelectFileWidget':\n\t\t\t\treturn {\n\t\t\t\t\taccept: [ 'array', 'MIME types to accept.' ],\n\t\t\t\t\taccessKey: [ 'string', 'The access key' ],\n\t\t\t\t\t// button: [\n\t\t\t\t\t// \t'object',\n\t\t\t\t\t// \t'Config to pass to select file button.'\n\t\t\t\t\t// ],\n\t\t\t\t\t// @TODO uncomment ...\n\t\t\t\t\t// buttonOnly: [\n\t\t\t\t\t// \t'boolean',\n\t\t\t\t\t// \t'Show only the select file button, no info field. Requires showDropTarget to be false'\n\t\t\t\t\t// ],\n\t\t\t\t\tdir: [ 'string', 'The directionality of the input (ltr/rtl).' ],\n\t\t\t\t\tdisabled: [ 'boolean', 'Disable the widget.' ],\n\t\t\t\t\tdroppable: [ 'boolean', 'Whether to accept files by drag and drop' ],\n\t\t\t\t\ticon: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The symbolic name of the icon (e.g., ‘remove’ or ‘menu’), or a map of symbolic names.'\n\t\t\t\t\t],\n\t\t\t\t\tid: [ 'string', 'The HTML id attribute used in the rendered tag.' ],\n\t\t\t\t\tinputFilter: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'The name of an input filter function. Input filters modify the value of an input before it is accepted'\n\t\t\t\t\t],\n\t\t\t\t\tinputId: [ 'string', 'The value of the input’s HTML id attribute.' ],\n\t\t\t\t\t// multiple: [\n\t\t\t\t\t// \t'boolean',\n\t\t\t\t\t// \t'Allow multiple files to be selected'\n\t\t\t\t\t// ],\n\t\t\t\t\tinvisibleLabel: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Whether the label should be visually hidden (but still accessible to screen-readers).'\n\t\t\t\t\t],\n\t\t\t\t\tname: [ 'string', 'The value of the input’s HTML name attribute.' ],\n\t\t\t\t\tnotsupported: [\n\t\t\t\t\t\t'string',\n\t\t\t\t\t\t'Text to display when file support is missing in the browser.'\n\t\t\t\t\t],\n\t\t\t\t\tplaceholder: [ 'string', 'Placeholder text' ],\n\t\t\t\t\tshowDropTarget: [\n\t\t\t\t\t\t'boolean',\n\t\t\t\t\t\t'Whether to show a drop target. Requires droppable to be true.'\n\t\t\t\t\t],\n\t\t\t\t\ttext: [ 'string', 'Text to insert' ],\n\t\t\t\t\tthumbnailSizeLimit: [\n\t\t\t\t\t\t'number',\n\t\t\t\t\t\t'File size limit in MiB above which to not try and show a preview (for performance)'\n\t\t\t\t\t],\n\t\t\t\t\ttitle: [ 'string', 'The title text.' ]\n\t\t\t\t\t// value: [\"string\", \"The value of the input.\"],\n\t\t\t\t};\n\t\t}\n\t}\n\n\tfunction createToolbarB() {\n\t\tvar toolFactory = new OO.ui.ToolFactory();\n\t\tvar toolGroupFactory = new OO.ui.ToolGroupFactory();\n\n\t\tvar toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory, {\n\t\t\tactions: true\n\t\t} );\n\n\t\tvar onSelect = function () {\n\t\t\tvar toolName = this.getName();\n\n\t\t\tswitch ( toolName ) {\n\t\t\t\tcase 'addfield':\n\t\t\t\t\topenSearchDialog();\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.setActive( false );\n\t\t};\n\n\t\tvar toolGroup = [\n\t\t\t{\n\t\t\t\tname: 'addfield',\n\t\t\t\ticon: 'add',\n\t\t\t\ttitle: mw.msg( 'visualdata-jsmodule-inputconfig-addremoveoptions' ),\n\t\t\t\tonSelect: onSelect\n\t\t\t}\n\t\t];\n\t\tVisualDataFunctions.createToolGroup( toolFactory, 'group', toolGroup );\n\n\t\ttoolbar.setup( [\n\t\t\t{\n\t\t\t\tname: 'my-group',\n\t\t\t\t// type: \"bar\",\n\t\t\t\t// label: \"Create property\",\n\t\t\t\tinclude: [ { group: 'group' } ]\n\t\t\t}\n\t\t] );\n\n\t\treturn toolbar;\n\t}\n\n\t// @see https://gerrit.wikimedia.org/r/plugins/gitiles/oojs/ui/+/c2805c7e9e83e2f3a857451d46c80231d1658a0f/demos/classes/SearchWidgetDialog.js\n\tfunction ProcessDialogSearch( config ) {\n\t\tProcessDialogSearch.super.call( this, config );\n\t}\n\tOO.inheritClass( ProcessDialogSearch, OO.ui.ProcessDialog );\n\tProcessDialogSearch.static.name = DialogSearchName;\n\tProcessDialogSearch.static.title = mw.msg(\n\t\t'visualdata-jsmodule-inputconfig-selectfield'\n\t);\n\tProcessDialogSearch.prototype.initialize = function () {\n\t\tProcessDialogSearch.super.prototype.initialize.apply( this, arguments );\n\t\tvar self = this;\n\t\tthis.selectedItems = Object.keys( SelectedItems );\n\n\t\tvar obj = ( !CustomInputConfig ? getInputConfig( InputName ) :\n\t\t\tCustomInputConfig( InputName ) );\n\n\t\tfunction getItems( value ) {\n\t\t\tvar values = Object.keys( obj );\n\t\t\tif ( value ) {\n\t\t\t\tvar valueLowerCase = value.toLowerCase();\n\t\t\t\tvalues = values.filter(\n\t\t\t\t\t( x ) => x.toLowerCase().indexOf( valueLowerCase ) !== -1\n\t\t\t\t);\n\t\t\t}\n\n\t\t\treturn values.map( ( x ) => {\n\t\t\t\tvar menuOptionWidget = new OO.ui.MenuOptionWidget( {\n\t\t\t\t\tdata: x,\n\t\t\t\t\tlabel: x,\n\t\t\t\t\tselected: inArray( x, self.selectedItems )\n\t\t\t\t} );\n\n\t\t\t\treturn menuOptionWidget;\n\t\t\t} );\n\t\t}\n\n\t\tvar searchWidget = new OO.ui.SearchWidget( {\n\t\t\t// id: 'visualdata-import-search-widget'\n\t\t} );\n\n\t\tsearchWidget.results.addItems( getItems() );\n\n\t\t// searchWidget.getResults() is a SelectWidget\n\t\t// https://doc.wikimedia.org/oojs-ui/master/js/#!/api/OO.ui.SelectWidget\n\t\tvar searchWidgetResults = searchWidget.getResults();\n\t\tsearchWidgetResults.multiselect = true;\n\n\t\t// this.searchWidgetResults = searchWidgetResults;\n\n\t\t// we don't rely anymore on searchWidgetResults.findSelectedItems()\n\t\t// to handle non-visible highlighted items\n\t\tsearchWidgetResults.on( 'press', ( value ) => {\n\t\t\tif ( value === null ) {\n\t\t\t\treturn;\n\t\t\t}\n\t\t\tif ( inArray( value.data, self.selectedItems ) ) {\n\t\t\t\tself.selectedItems.splice( self.selectedItems.indexOf( value.data ), 1 );\n\t\t\t} else {\n\t\t\t\tself.selectedItems.push( value.data );\n\t\t\t}\n\t\t} );\n\n\t\tsearchWidget.onQueryChange = function ( value ) {\n\t\t\tsearchWidget.results.clearItems();\n\t\t\tsearchWidget.results.addItems( getItems( value ) );\n\t\t};\n\n\t\tthis.$body.append( [ searchWidget.$element ] );\n\t};\n\n\tProcessDialogSearch.prototype.getBodyHeight = function () {\n\t\treturn 300;\n\t};\n\n\tProcessDialogSearch.static.actions = [\n\t\t{\n\t\t\taction: 'save',\n\t\t\tmodes: 'edit',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-done' ),\n\t\t\tflags: [ 'primary', 'progressive' ]\n\t\t},\n\t\t{\n\t\t\t// modes: \"edit\",\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-cancel' ),\n\t\t\tflags: [ 'safe', 'close' ]\n\t\t}\n\t];\n\tProcessDialogSearch.prototype.getActionProcess = function ( action ) {\n\t\tvar dialog = this;\n\n\t\tif ( action === 'save' ) {\n\t\t\t// var items = dialog.searchWidgetResults.findSelectedItems();\n\t\t\t// var selectedItems = items.map( ( x ) => x.data );\n\n\t\t\t// remove unselected properties\n\t\t\tfor ( var key in SelectedItems ) {\n\t\t\t\tif ( !inArray( key, dialog.selectedItems ) ) {\n\t\t\t\t\tdelete SelectedItems[ key ];\n\t\t\t\t\tdelete Model[ key ];\n\t\t\t\t}\n\t\t\t}\n\n\t\t\t// add new properties\n\t\t\tfor ( var key of dialog.selectedItems ) {\n\t\t\t\tif ( !( key in SelectedItems ) ) {\n\t\t\t\t\tSelectedItems[ key ] = undefined;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tpanelLayout.populateFieldset();\n\t\t}\n\n\t\treturn new OO.ui.Process( () => {\n\t\t\tdialog.close( { action: action } );\n\t\t} );\n\n\t\t// return ProcessDialog.super.prototype.getActionProcess.call( this, action );\n\t};\n\tProcessDialogSearch.prototype.getTeardownProcess = function ( data ) {\n\t\treturn ProcessDialogSearch.super.prototype.getTeardownProcess\n\t\t\t.call( this, data )\n\t\t\t.first( () => {\n\t\t\t\tWindowManager.removeActiveWindow();\n\t\t\t}, this );\n\t};\n\n\tfunction openSearchDialog() {\n\t\tprocessDialogSearch = new ProcessDialogSearch( {\n\t\t\tsize: 'medium',\n\t\t\tclasses: [ 'visualdata-search-dialog' ]\n\t\t\t// data: { label: label }\n\t\t} );\n\n\t\tWindowManager.newWindow( processDialogSearch );\n\t}\n\n\tfunction PanelLayout( config ) {\n\t\tPanelLayout.super.call( this, config );\n\n\t\t/*\n\t\tthis.messageWidget = new OO.ui.MessageWidget({\n\t\t\ttype: \"notice\",\n\t\t\tlabel: new OO.ui.HtmlSnippet(\n\t\t\t\tmw.msg(\"visualdata-jsmodule-visualdata-no-properties\")\n\t\t\t),\n\t\t});\n*/\n\n\t\tthis.fieldset = new OO.ui.FieldsetLayout( {\n\t\t\tlabel: ''\n\t\t} );\n\n\t\tthis.populateFieldset();\n\n\t\tthis.$element.append( this.fieldset.$element );\n\t\t// this.$element.append(this.messageWidget.$element);\n\t}\n\n\tOO.inheritClass( PanelLayout, OO.ui.PanelLayout );\n\tPanelLayout.prototype.populateFieldset = function () {\n\t\tthis.fieldset.clearItems();\n\n\t\t// eslint-disable-next-line no-unused-vars\n\t\tvar data = this.data;\n\t\tvar items = [];\n\t\tvar obj = ( !CustomInputConfig ? getInputConfig( InputName ) :\n\t\t\tCustomInputConfig( InputName ) );\n\n\t\tfor ( var i in obj ) {\n\t\t\tif ( !( i in SelectedItems ) ) {\n\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tvar inputName;\n\t\t\tvar config = {};\n\t\t\tvar type = obj[ i ][ 0 ];\n\t\t\tswitch ( type ) {\n\t\t\t\tcase 'boolean':\n\t\t\t\t\tinputName = 'OO.ui.ToggleSwitchWidget';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'string':\n\t\t\t\t\tinputName = 'OO.ui.TextInputWidget';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'integer':\n\t\t\t\t\tinputName = 'OO.ui.NumberInputWidget';\n\t\t\t\t\tconfig.type = 'number';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'date':\n\t\t\t\t\tinputName = 'mw.widgets.DateInputWidget';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'array':\n\t\t\t\t\tinputName = 'OO.ui.TagMultiselectWidget';\n\t\t\t\t\tbreak;\n\n\t\t\t\t// not implemented\n\t\t\t\tcase 'object':\n\t\t\t\t\tcontinue;\n\t\t\t}\n\n\t\t\tif ( typeof SelectedItems[ i ] !== 'undefined' ) {\n\t\t\t\tconfig.value = SelectedItems[ i ];\n\t\t\t}\n\n\t\t\tvar inputWidget = VisualDataFunctions.inputInstanceFromName(\n\t\t\t\tinputName,\n\t\t\t\tconfig\n\t\t\t);\n\t\t\tModel[ i ] = { input: inputWidget, type: type };\n\n\t\t\titems.push(\n\t\t\t\tnew OO.ui.FieldLayout( inputWidget, {\n\t\t\t\t\tlabel: i,\n\t\t\t\t\talign: 'top',\n\t\t\t\t\thelp: new OO.ui.HtmlSnippet( obj[ i ][ 1 ] ),\n\t\t\t\t\thelpInline: true,\n\t\t\t\t\tclasses: []\n\t\t\t\t} )\n\t\t\t);\n\t\t}\n\n\t\titems = items.filter( ( x ) => !( 'items' in x ) || x.items.length );\n\n\t\tthis.isEmpty = !items.length;\n\n\t\tthis.fieldset.addItems( items );\n\t};\n\n\t// eslint-disable-next-line no-unused-vars\n\tPanelLayout.prototype.addItem = function ( property ) {\n\t\tthis.populateFieldset();\n\t};\n\n\tfunction ProcessDialog( config ) {\n\t\tProcessDialog.super.call( this, config );\n\t}\n\tOO.inheritClass( ProcessDialog, OO.ui.ProcessDialog );\n\n\tProcessDialog.static.name = 'myDialog';\n\t// ProcessDialog.static.title = mw.msg(\n\t// \"visualdata-jsmodule-manageproperties-define-property\"\n\t// );\n\tProcessDialog.static.actions = [\n\t\t{\n\t\t\taction: 'save',\n\t\t\tmodes: 'edit',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-save' ),\n\t\t\tflags: [ 'primary', 'progressive' ]\n\t\t},\n\t\t{\n\t\t\tmodes: 'edit',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-cancel' ),\n\t\t\tflags: [ 'safe', 'close' ]\n\t\t}\n\t];\n\n\tfunction createActionToolbar() {\n\t\t// see https://gerrit.wikimedia.org/r/plugins/gitiles/oojs/ui/+/refs/tags/v0.40.4/demos/pages/toolbars.js\n\t\tvar toolFactory = new OO.ui.ToolFactory();\n\t\tvar toolGroupFactory = new OO.ui.ToolGroupFactory();\n\n\t\tvar toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory, {\n\t\t\tactions: false\n\t\t} );\n\n\t\tvar onSelect = function () {\n\t\t\twindow.open( HelpUrl, '_blank' ).focus();\n\t\t\tthis.setActive( false );\n\t\t};\n\n\t\tvar toolGroup = [\n\t\t\t{\n\t\t\t\tname: 'help-button',\n\t\t\t\ticon: 'helpNotice',\n\t\t\t\t// title: mw.msg( 'visualdata-jsmodule-forms-toolbars-help-button' ),\n\t\t\t\tonSelect: onSelect\n\t\t\t}\n\t\t];\n\n\t\t// @see https://www.mediawiki.org/wiki/OOUI/Toolbars\n\t\ttoolbar.setup( [\n\t\t\t{\n\t\t\t\ttype: 'bar',\n\t\t\t\tinclude: [ 'help-button' ]\n\t\t\t}\n\t\t] );\n\n\t\tVisualDataFunctions.createToolGroup(\n\t\t\ttoolFactory,\n\t\t\t'selectSwitch',\n\t\t\ttoolGroup\n\t\t);\n\n\t\treturn toolbar;\n\t}\n\n\tProcessDialog.prototype.initialize = function () {\n\t\tProcessDialog.super.prototype.initialize.apply( this, arguments );\n\t\tvar toolbar = createToolbarB();\n\n\t\tif ( HelpUrl ) {\n\t\t\tvar actionToolbar = createActionToolbar();\n\t\t\ttoolbar.$actions.append( actionToolbar.$element );\n\t\t}\n\n\t\tpanelLayout = new PanelLayout( {\n\t\t\texpanded: false,\n\t\t\tpadded: true,\n\t\t\tclasses: [ 'visualdata-forms-fields-contentframe' ],\n\t\t\tdata: {}\n\t\t} );\n\n\t\tvar frameA = new OO.ui.PanelLayout( {\n\t\t\t$content: [ toolbar.$element, panelLayout.$element ],\n\t\t\texpanded: false,\n\t\t\t// framed: false,\n\t\t\tpadded: false,\n\t\t\tdata: { name: 'manageforms' }\n\t\t} );\n\n\t\tthis.$body.append( frameA.$element );\n\t};\n\n\tProcessDialog.prototype.getActionProcess = function ( action ) {\n\t\tvar dialog = this;\n\n\t\tswitch ( action ) {\n\t\t\tcase 'save':\n\t\t\t\tvar obj = {};\n\t\t\t\tfor ( var i in Model ) {\n\t\t\t\t\tobj[ i ] = VisualDataFunctions.castType(\n\t\t\t\t\t\tModel[ i ].input.getValue(),\n\t\t\t\t\t\tModel[ i ].type\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tCallback.setValue( obj );\n\t\t\t\treturn new OO.ui.Process( () => {\n\t\t\t\t\tdialog.close( { action: action } );\n\t\t\t\t} );\n\t\t}\n\n\t\treturn ProcessDialog.super.prototype.getActionProcess.call( this, action );\n\t};\n\n\tProcessDialog.prototype.getTeardownProcess = function ( data ) {\n\t\treturn ProcessDialog.super.prototype.getTeardownProcess\n\t\t\t.call( this, data )\n\t\t\t.first( () => {\n\t\t\t\tWindowManager.removeActiveWindow();\n\t\t\t}, this );\n\t};\n\n\t/**\n\t * Override getBodyHeight to create a tall dialog relative to the screen.\n\t *\n\t * @return {number} Body height\n\t */\n\tProcessDialog.prototype.getBodyHeight = function () {\n\t\t// see here https://www.mediawiki.org/wiki/OOUI/Windows/Process_Dialogs\n\t\t// this.page1.content.$element.outerHeight( true );\n\t\treturn window.innerHeight - 100;\n\t};\n\n\tfunction openDialog( callback, inputName, helpUrl, customInputConfig ) {\n\t\tModel = {};\n\t\tCallback = callback;\n\t\tSelectedItems = callback.getValue();\n\t\tHelpUrl = helpUrl;\n\n\t\t// @TODO update once a form key -> value is used\n\t\t// for the options widget of available inputs dropdown\n\t\tInputName = inputName.split( / / )[ 0 ];\n\t\tCustomInputConfig = customInputConfig;\n\n\t\tvar processDialog = new ProcessDialog( {\n\t\t\tsize: 'large'\n\t\t} );\n\n\t\tWindowManager.newWindow( processDialog, {\n\t\t\ttitle:\n\t\t\t\tmw.msg(\n\t\t\t\t\t// The following messages are used here:\n\t\t\t\t\t// * visualdata-jsmodule-manageproperties-define-property\n\t\t\t\t\t// * visualdata-jsmodule-manageproperties-define-property - [name]\n\t\t\t\t\t'visualdata-jsmodule-inputconfig-dialog-label'\n\t\t\t\t) + ( inputName ? ' - ' + inputName : '' )\n\t\t} );\n\t}\n\n\treturn {\n\t\topenDialog\n\t};\n};\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataProcessModel.js","messages":[{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":159,"column":11,"nodeType":"CallExpression","endLine":159,"endColumn":85}],"suppressedMessages":[{"ruleId":"no-unused-vars","severity":2,"message":"'VisualDataProcessModel' is assigned a value but never used.","line":25,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":25,"endColumn":29,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'path_'.","line":61,"column":7,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":61,"endColumn":58,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'path_'.","line":74,"column":5,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":74,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'path_'.","line":84,"column":3,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":84,"endColumn":19,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'path_'.","line":92,"column":4,"nodeType":"MemberExpression","messageId":"unexpectedUnderscore","endLine":92,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"new-cap","severity":2,"message":"A constructor name should not start with a lowercase letter.","line":102,"column":26,"nodeType":"NewExpression","messageId":"lower","endLine":102,"endColumn":30,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":108,"column":4,"nodeType":"MemberExpression","messageId":"unexpected","endLine":108,"endColumn":17,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[2897,2928],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'path_'.","line":143,"column":15,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":143,"endColumn":20,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":152,"column":5,"nodeType":"MemberExpression","messageId":"unexpected","endLine":152,"endColumn":18,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[4521,4544],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'path_'.","line":190,"column":11,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":190,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'path_'.","line":218,"column":10,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":218,"endColumn":74,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":277,"column":6,"nodeType":"MemberExpression","messageId":"unexpected","endLine":277,"endColumn":19,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[7491,7522],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2023, https://wikisphere.org\n */\n\n/* eslint-disable no-unused-vars */\n/* eslint-disable no-underscore-dangle */\n\nconst VisualDataProcessModel = function (\n\tcallbackShowError,\n\tForm,\n\tSchemas,\n\tRecordedSchemas,\n\tModel,\n\tModelSchemas,\n\tmakeElementId\n) {\n\tvar Flatten;\n\tvar Action;\n\tvar Removed;\n\tvar Errors;\n\n\tfunction castType( value, model ) {\n\t\t// *** this is an hack to prevent\n\t\t// empty string, alternatively\n\t\t// use required native validation\n\t\t// or \"minLength\": 1\n\n\t\tif ( model.schema.wiki.required ) {\n\t\t\tswitch ( model.schema.type ) {\n\t\t\t\tcase 'number':\n\t\t\t\tcase 'string':\n\t\t\t\t\t// value can be undefined for OO.ui.SelectFileWidget\n\t\t\t\t\tif ( !value || ( typeof value === 'string' && value.trim() === '' ) ) {\n\t\t\t\t\t\treturn null;\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t}\n\n\t\treturn VisualDataFunctions.castType( value, model.schema.type );\n\t}\n\n\tasync function formatValue( path, model ) {\n\t\tvar path_ = ( Action === 'submit' ? path : model.path );\n\t\tvar value = 'getValue' in model.input ? model.input.getValue() : '';\n\n\t\tif ( VisualDataFunctions.isPromise( value ) ) {\n\t\t\tvalue = await value;\n\t\t}\n\n\t\tif ( 'validateFunc' in model.input ) {\n\t\t\tvar errorMsg = model.input.validateFunc();\n\t\t\tif ( VisualDataFunctions.isPromise( errorMsg ) ) {\n\t\t\t\terrorMsg = await errorMsg;\n\t\t\t}\n\t\t\tif ( typeof errorMsg === 'string' ) {\n\t\t\t\tErrors[ path_ ] = errorMsg;\n\t\t\t}\n\t\t}\n\n\t\tif ( Array.isArray( value ) ) {\n\t\t\tvalue = value.map( ( x ) => castType( x, model ) );\n\t\t} else {\n\t\t\tvalue = castType( value, model );\n\t\t}\n\n\t\tFlatten[ path_ ] = {\n\t\t\tpathNoIndex: model.pathNoIndex,\n\t\t\tvalue: value,\n\t\t\tmultiselect: model.multiselect,\n\t\t\tschema: model.schema\n\t\t};\n\n\t\tif ( model.isFile ) {\n\t\t\tFlatten[ path_ ].filekey = model.filekey;\n\t\t\t// Flatten[model.path].previousFilaneme = model.previousFilaneme;\n\t\t}\n\n\t\treturn value;\n\t}\n\n\tfunction validate( schemaName, data, schema ) {\n\t\tvar errors = Errors;\n\t\t// eslint-disable-next-line new-cap\n\t\tconst ajv = new window.ajv7( { strict: false, allErrors: true } );\n\t\tvar validateAjv;\n\t\ttry {\n\t\t\tvalidateAjv = ajv.compile( schema );\n\t\t} catch ( e ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( 'validate', e );\n\t\t\tcallbackShowError( schemaName, e.message );\n\n\t\t\t// @MAYBETODO\n\t\t\t// add: \"please report the issue in the talk page\n\t\t\t// of the extension\"\n\t\t\treturn false;\n\t\t}\n\t\tif ( validateAjv( data ) && !Object.keys( errors ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tvar hiddenErrors = {};\n\t\tif ( 'errors' in validateAjv && Array.isArray( validateAjv.errors ) ) {\n\t\t\tvar AjvErrors = [];\n\n\t\t\t// pre-process errors\n\t\t\t// @see https://ajv.js.org/api.html\n\t\t\tfor ( var error of validateAjv.errors ) {\n\t\t\t\tswitch ( error.keyword ) {\n\t\t\t\t\tcase 'uniqueItems':\n\t\t\t\t\t\tif ( Removed.indexOf( `${ VisualDataFunctions.escapeJsonPtr( schemaName ) }${ error.instancePath }/${ error.params.j }` ) === -1 ) {\n\t\t\t\t\t\t\tAjvErrors.push( Object.assign( VisualDataFunctions.deepCopy( error ), { instancePath: `${ error.instancePath }/${ error.params.i }` } ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tif ( Removed.indexOf( `${ VisualDataFunctions.escapeJsonPtr( schemaName ) }${ error.instancePath }/${ error.params.i }` ) === -1 ) {\n\t\t\t\t\t\t\tAjvErrors.push( Object.assign( VisualDataFunctions.deepCopy( error ), { instancePath: `${ error.instancePath }/${ error.params.j }` } ) );\n\t\t\t\t\t\t}\n\t\t\t\t\t\tbreak;\n\t\t\t\t\tdefault:\n\t\t\t\t\t\tAjvErrors.push( error );\n\t\t\t\t}\n\t\t\t}\n\t\t\tloopA: for ( var error of AjvErrors ) {\n\t\t\t\tvar path = `${ VisualDataFunctions.escapeJsonPtr( schemaName ) }${ error.instancePath }`;\n\n\t\t\t\tfor ( var path_ of Removed ) {\n\t\t\t\t\tif ( path === path_ ||\n\t\t\t\t\t\t// @FIXME add specific reference to arrays\n\t\t\t\t\t\t( /\\/\\d+$/.test( path_ ) && path.indexOf( path_ ) === 0 ) ) {\n\t\t\t\t\t\tcontinue loopA;\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\tconsole.error( error );\n\n\t\t\t\tif ( !( path in Flatten ) ) {\n\t\t\t\t\thiddenErrors[ path ] = `${ error.instancePath.slice( 1 ) } ${ error.message }`;\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\n\t\t\t\tif ( !$( '#' + jQuery.escapeSelector( makeElementId( path ) ) ).is( ':visible' ) ) {\n\t\t\t\t\thiddenErrors[ path ] = `${ Flatten[ path ].schema.wiki.name } ${ error.message }`;\n\t\t\t\t}\n\n\t\t\t\terrors[ path ] = error.message;\n\t\t\t}\n\t\t}\n\n\t\tif ( !Object.keys( errors ).length && !Object.keys( hiddenErrors ).length ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tcallbackShowError( schemaName, null, errors, hiddenErrors );\n\t\treturn false;\n\t}\n\n\tasync function getValuesRec( path, model ) {\n\t\tswitch ( model.schema.type ) {\n\t\t\tcase 'array':\n\t\t\t\t// @TODO handle tuple\n\t\t\t\tif ( !VisualDataFunctions.isObject( model.items ) ) {\n\t\t\t\t\treturn [];\n\t\t\t\t}\n\t\t\t\tvar items = [];\n\n\t\t\t\t// multiselect\n\t\t\t\tif ( 'schema' in model.items ) {\n\t\t\t\t\titems = await formatValue( path, model.items );\n\t\t\t\t} else {\n\t\t\t\t\tvar n = 0;\n\t\t\t\t\tfor ( var ii in model.items ) {\n\t\t\t\t\t\tvar path_ = `${ path }/${ n }`;\n\t\t\t\t\t\tif ( model.items[ ii ].removed ) {\n\t\t\t\t\t\t\tif ( Action !== 'validate' ) {\n\t\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tRemoved.push( path_ );\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\t\t\t\t\t\titems.push( await getValuesRec( path_, model.items[ ii ] ) );\n\t\t\t\t\t\tn++;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\t/* set to null only required items */\n\t\t\t\tfor ( var ii in items ) {\n\t\t\t\t\tif (\n\t\t\t\t\t\ttypeof items[ ii ] === 'string' &&\n\t\t\t\t\t\titems[ ii ].trim() === '' &&\n\t\t\t\t\t\t'minItems' in model.schema &&\n\t\t\t\t\t\tii <= model.schema.minItems\n\t\t\t\t\t) {\n\t\t\t\t\t\titems[ ii ] = null;\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\treturn items;\n\n\t\t\tcase 'object':\n\t\t\t\tvar items = {};\n\t\t\t\tfor ( var ii in model.properties ) {\n\t\t\t\t\tvar path_ = `${ path }/${ VisualDataFunctions.escapeJsonPtr( ii ) }`;\n\n\t\t\t\t\tif ( model.properties[ ii ].removed ) {\n\t\t\t\t\t\tif ( Action !== 'validate' ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\tRemoved.push( path_ );\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\titems[ ii ] = await getValuesRec( path_, model.properties[ ii ] );\n\t\t\t\t}\n\t\t\t\treturn items;\n\n\t\t\tdefault:\n\t\t\t\treturn await formatValue( path, model );\n\t\t}\n\t}\n\n\tasync function getFormModel() {\n\t\tvar ret = {};\n\t\tfor ( var i in Model ) {\n\t\t\tret[ i ] = Model[ i ].getValue();\n\n\t\t\tif ( VisualDataFunctions.isPromise( ret[ i ] ) ) {\n\t\t\t\tret[ i ] = await ret[ i ];\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t}\n\n\tasync function getModel( action, schemaName ) {\n\t\tAction = action;\n\t\tFlatten = {};\n\t\tRemoved = [];\n\t\tErrors = {};\n\n\t\tvar ret = {};\n\t\tswitch ( action ) {\n\t\t\tcase 'validate':\n\t\t\t\tcallbackShowError( null );\n\n\t\t\t\ttry {\n\t\t\t\t\tfor ( var schemaName in ModelSchemas ) {\n\t\t\t\t\t\tif ( Form.schemas.indexOf( schemaName ) === -1 ) {\n\t\t\t\t\t\t\tcontinue;\n\t\t\t\t\t\t}\n\t\t\t\t\t\tret[ schemaName ] = await getValuesRec(\n\t\t\t\t\t\t\tVisualDataFunctions.escapeJsonPtr( schemaName ),\n\t\t\t\t\t\t\tModelSchemas[ schemaName ]\n\t\t\t\t\t\t);\n\t\t\t\t\t\t// removeNulls(ret);\n\n\t\t\t\t\t\tif ( !validate( schemaName, ret[ schemaName ], Schemas[ schemaName ] ) ) {\n\t\t\t\t\t\t\treturn false;\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\t\t\t\t} catch ( e ) {\n\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\tconsole.error( 'validate', e );\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\treturn ret;\n\n\t\t\tcase 'fetch':\n\t\t\t\tfor ( var schemaName in ModelSchemas ) {\n\t\t\t\t\tret[ schemaName ] = await getValuesRec(\n\t\t\t\t\t\tVisualDataFunctions.escapeJsonPtr( schemaName ),\n\t\t\t\t\t\tModelSchemas[ schemaName ]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\treturn ret;\n\n\t\t\tcase 'submit':\n\t\t\t\tfor ( var schemaName in ModelSchemas ) {\n\t\t\t\t\tif ( Form.schemas.indexOf( schemaName ) === -1 ) {\n\t\t\t\t\t\tcontinue;\n\t\t\t\t\t}\n\t\t\t\t\tret[ schemaName ] = await getValuesRec(\n\t\t\t\t\t\tVisualDataFunctions.escapeJsonPtr( schemaName ),\n\t\t\t\t\t\tModelSchemas[ schemaName ]\n\t\t\t\t\t);\n\t\t\t\t}\n\t\t\t\tvar formModel = await getFormModel();\n\n\t\t\t\treturn {\n\t\t\t\t\tdata: ret,\n\t\t\t\t\tflatten: Flatten,\n\t\t\t\t\tform: formModel,\n\t\t\t\t\tschemas: Form.schemas,\n\t\t\t\t\t// @FIXME or retrieve it server side\n\t\t\t\t\toptions: Form.options,\n\t\t\t\t\trecordedSchemas: RecordedSchemas\n\t\t\t\t};\n\n\t\t\tcase 'validate&submit':\n\t\t\t\tAction = 'validate';\n\n\t\t\t\tif ( !( await getModel( 'validate' ) ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\t\t\t\tAction = 'submit';\n\t\t\t\treturn await getModel( 'submit' );\n\n\t\t\tcase 'delete':\n\t\t\t\tvar formModel = await getFormModel();\n\t\t\t\tForm.options.action = 'delete';\n\t\t\t\treturn {\n\t\t\t\t\tform: formModel,\n\t\t\t\t\toptions: Form.options,\n\t\t\t\t\tschemas: RecordedSchemas // Object.keys(ModelSchemas),\n\t\t\t\t};\n\n\t\t\tcase 'schema':\n\t\t\t\tif ( !( schemaName in ModelSchemas ) ) {\n\t\t\t\t\treturn false;\n\t\t\t\t}\n\n\t\t\t\tvar ret = await getValuesRec(\n\t\t\t\t\tVisualDataFunctions.escapeJsonPtr( schemaName ),\n\t\t\t\t\tModelSchemas[ schemaName ]\n\t\t\t\t);\n\t\t\t\treturn {\n\t\t\t\t\tdata: ret,\n\t\t\t\t\tflatten: Flatten\n\t\t\t\t};\n\t\t}\n\t}\n\n\treturn {\n\t\tgetModel\n\t};\n};\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataSchemas.js","messages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 103. Maximum allowed is 100.","line":327,"column":1,"nodeType":"Program","messageId":"max","endLine":327,"endColumn":95},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":1496,"column":15,"nodeType":"CallExpression","endLine":1496,"endColumn":51},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":1671,"column":4,"nodeType":"CallExpression","endLine":1671,"endColumn":27},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":1674,"column":15,"nodeType":"CallExpression","endLine":1676,"endColumn":6},{"ruleId":"no-jquery/no-global-selector","severity":1,"message":"Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible.","line":1690,"column":4,"nodeType":"CallExpression","endLine":1690,"endColumn":27}],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":26,"column":1,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":1733,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'VisualDataForms' is assigned a value but never used.","line":36,"column":6,"nodeType":"Identifier","messageId":"unusedVar","endLine":36,"endColumn":21,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":95,"column":4,"nodeType":"MemberExpression","messageId":"unexpected","endLine":95,"endColumn":17,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[2412,2450],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'tableLoop' is defined but never used.","line":129,"column":37,"nodeType":"Identifier","messageId":"unusedVar","endLine":129,"endColumn":46,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'rowLoop' is defined but never used.","line":129,"column":48,"nodeType":"Identifier","messageId":"unusedVar","endLine":129,"endColumn":55,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"array-callback-return","severity":2,"message":"Array.prototype.every() expects a return value from arrow function.","line":129,"column":58,"nodeType":"ArrowFunctionExpression","messageId":"expectedInside","endLine":129,"endColumn":60,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'meta' is defined but never used.","line":292,"column":47,"nodeType":"Identifier","messageId":"unusedVar","endLine":292,"endColumn":51,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'thisIsArray' is assigned a value but never used.","line":327,"column":37,"nodeType":"Identifier","messageId":"unusedVar","endLine":327,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":445,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":445,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":487,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":487,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-alert","severity":2,"message":"Unexpected confirm.","line":556,"column":6,"nodeType":"CallExpression","messageId":"unexpected","endLine":556,"endColumn":78,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-fallthrough","severity":1,"message":"Expected a 'break' statement before 'case'.","line":636,"column":6,"nodeType":"SwitchCase","messageId":"case","endLine":713,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":702,"column":10,"nodeType":"MemberExpression","messageId":"unexpected","endLine":702,"endColumn":23,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[18920,18967],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unreachable","severity":2,"message":"Unreachable code.","line":718,"column":3,"nodeType":"ReturnStatement","messageId":"unreachableCode","endLine":718,"endColumn":78,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":790,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":790,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-alert","severity":2,"message":"Unexpected confirm.","line":880,"column":6,"nodeType":"CallExpression","messageId":"unexpected","endLine":880,"endColumn":78,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":882,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":882,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-underscore-dangle","severity":2,"message":"Unexpected dangling '_' in 'target_'.","line":974,"column":9,"nodeType":"VariableDeclarator","messageId":"unexpectedUnderscore","endLine":976,"endColumn":25,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1087,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1087,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1088,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1088,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1089,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1089,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1090,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1090,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1094,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1094,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1095,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1095,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1096,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1096,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1097,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":1097,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1312,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":1312,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1320,"column":8,"nodeType":"Program","messageId":"unexpectedTab","endLine":1320,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1472,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":1472,"endColumn":6,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1473,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":1473,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1474,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":1474,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1475,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":1475,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1476,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":1476,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":1477,"column":5,"nodeType":"Program","messageId":"unexpectedTab","endLine":1477,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":5,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright ©2023, https://wikisphere.org\n */\n\n/* eslint-disable no-tabs */\n/* eslint-disable no-underscore-dangle */\n\n// eslint-disable-next-line no-implicit-globals\nVisualDataSchemas = ( function () {\n\tvar Models = [];\n\tvar SelectedItems = [];\n\tvar DataTable;\n\tvar DialogName = 'dialogSchemas';\n\tvar Config;\n\tvar WindowManager;\n\tvar Schemas = {};\n\n\t/* eslint-disable-next-line no-unused-vars */\n\tvar VisualDataForms;\n\tvar VisualDataFormFieldInst;\n\tvar VisualDataContentBlockInst;\n\tvar VisualDataGeolocationInst;\n\n\tfunction getModel() {\n\t\treturn Models[ Models.length - 1 ];\n\t}\n\n\tfunction getWidgetValue( obj ) {\n\t\tvar ret = '';\n\t\tif ( 'getValue' in obj ) {\n\t\t\tret = obj.getValue();\n\t\t\tif ( typeof ret === 'string' ) {\n\t\t\t\treturn ret.trim();\n\t\t\t} else if ( Array.isArray( ret ) ) {\n\t\t\t\treturn ret.map( ( x ) => x.trim() );\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\t\treturn Object.keys( obj )\n\t\t\t.map( ( i ) => obj[ i ] )\n\t\t\t.map( ( x ) => x.getValue() );\n\t}\n\n\tfunction getPropertyValue( property, propName, self ) {\n\t\tif ( !self ) {\n\t\t\tvar self = VisualDataSchemas;\n\t\t}\n\t\tvar model = self.getModel();\n\n\t\tif ( propName ) {\n\t\t\tmodel = model[ propName ];\n\t\t}\n\t\tif ( property in model ) {\n\t\t\treturn getWidgetValue( model[ property ] );\n\t\t}\n\n\t\tvar currentItem = self.getCurrentItem();\n\n\t\tif ( !currentItem ) {\n\t\t\treturn '';\n\t\t}\n\n\t\t// new item\n\t\tif ( propName && currentItem.type !== 'array' ) {\n\t\t\treturn '';\n\t\t}\n\n\t\tif (\n\t\t\t!propName &&\n\t\t\tcurrentItem.type === 'array' &&\n\t\t\tVisualDataFunctions.isObject( currentItem.items )\n\t\t) {\n\t\t\tcurrentItem = currentItem.items;\n\t\t}\n\n\t\tif ( !( 'wiki' in currentItem ) ) {\n\t\t\t// eslint-disable-next-line no-console\n\t\t\tconsole.error( 'missing \"wiki\" key' );\n\t\t\treturn '';\n\t\t}\n\n\t\tif ( property in currentItem.wiki ) {\n\t\t\treturn currentItem.wiki[ property ];\n\t\t}\n\t\treturn '';\n\t}\n\n\tfunction getDatatableId( panel ) {\n\t\treturn `visualdata-schemas-datatable-dialog-${ SelectedItems.length }-${ panel }`;\n\t}\n\n\tfunction getCurrentItem() {\n\t\tif ( !SelectedItems.length ) {\n\t\t\treturn null;\n\t\t}\n\t\tvar ret = SelectedItems[ SelectedItems.length - 1 ];\n\n\t\tif ( ret.type === 'array' && !ret.items ) {\n\t\t\tret.items = { wiki: {}, properties: {} };\n\t\t}\n\n\t\treturn ret;\n\t}\n\n\tfunction orderFields( fields, panel ) {\n\t\tif ( !$.fn.DataTable.isDataTable( '#' + getDatatableId( panel ) ) ) {\n\t\t\treturn fields;\n\t\t}\n\t\tvar datatable = $( '#' + getDatatableId( panel ) ).DataTable();\n\t\tvar ret = {};\n\t\t// eslint-disable-next-line no-unused-vars, array-callback-return\n\t\tdatatable.rows().every( ( rowIdx, tableLoop, rowLoop ) => {\n\t\t\tvar key = Object.keys( fields )[ rowIdx ];\n\t\t\tif ( key in fields ) {\n\t\t\t\tret[ key ] = fields[ key ];\n\t\t\t}\n\t\t} );\n\t\tvar newItems = {};\n\t\tfor ( var i in fields ) {\n\t\t\tif ( !( i in ret ) ) {\n\t\t\t\tnewItems[ i ] = fields[ i ];\n\t\t\t}\n\t\t\tdelete fields[ i ];\n\t\t}\n\t\tfor ( var i in ret ) {\n\t\t\tfields[ i ] = ret[ i ];\n\t\t}\n\t\tfor ( var i in newItems ) {\n\t\t\tfields[ i ] = newItems[ i ];\n\t\t}\n\t}\n\n\tfunction initializeNestedDataTable( panel ) {\n\t\tvar currentItem = getCurrentItem();\n\n\t\t// array items can share the same schema for\n\t\t// all items, or to contain a tuple (to be an\n\t\t// array of items of fixed length)\n\t\t// in the first case, we consider the schema\n\t\t// being the child schema,\n\t\t// in the second case being the parent schema\n\t\t// (in the first case, we will provide an\n\t\t// editable panel with the properties of the\n\t\t// parent schema)\n\t\tif (\n\t\t\tcurrentItem.type === 'array' &&\n\t\t\tVisualDataFunctions.isObject( currentItem.items )\n\t\t) {\n\t\t\tcurrentItem = currentItem.items;\n\t\t}\n\n\t\torderFields( currentItem[ panel ], panel );\n\n\t\tVisualDataFunctions.destroyDataTable( getDatatableId( panel ) );\n\n\t\tfunction getType( thisItem ) {\n\t\t\tvar ret;\n\t\t\tswitch ( thisItem.wiki.type ) {\n\t\t\t\tcase 'schema':\n\t\t\t\t\tret = mw.msg( 'visualdata-jsmodule-schemas-subitem' );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'property':\n\t\t\t\t\tret =\n\t\t\t\t\t\t'SMW-property' in thisItem ?\n\t\t\t\t\t\t\tthisItem[ 'SMW-property' ] :\n\t\t\t\t\t\t\tthisItem.wiki[ 'jsonSchema-type' ] +\n\t\t\t\t\t\t\t( thisItem.wiki[ 'jsonSchema-type' ] !== 'string' ?\n\t\t\t\t\t\t\t\t'' :\n\t\t\t\t\t\t\t\t' (' + thisItem.wiki[ 'jsonSchema-format' ] + ')' );\n\n\t\t\t\t\tif ( !( 'preferred-input' in thisItem.wiki ) ) {\n\t\t\t\t\t\tthisItem.wiki[ 'preferred-input' ] =\n\t\t\t\t\t\t\tVisualDataFunctions.getPreferredInput( thisItem.wiki );\n\t\t\t\t\t}\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'content-block':\n\t\t\t\t\tret = mw.msg( 'visualdata-jsmodule-schemas-content-block' );\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'geolocation':\n\t\t\t\t\tret = mw.msg( 'visualdata-jsmodule-schemas-geolocation' );\n\t\t\t\t\tbreak;\n\t\t\t}\n\t\t\treturn ret;\n\t\t}\n\n\t\t// this returns a modified item, the object schema\n\t\t// or the array schema \"subject\" in case of\n\t\t// array, with name of parent schema\n\t\tfunction getItem( thisItem ) {\n\t\t\tvar thisItem = VisualDataFunctions.deepCopy( thisItem );\n\t\t\tif ( !( 'wiki' in thisItem ) ) {\n\t\t\t\tthisItem.wiki = { name: '' };\n\t\t\t}\n\n\t\t\t// handle from property panel\n\t\t\t// @TODO handle tuple\n\t\t\tif (\n\t\t\t\tthisItem.type === 'array' &&\n\t\t\t\tVisualDataFunctions.isObject( thisItem.items ) &&\n\t\t\t\tthisItem.items.type !== 'array'\n\t\t\t) {\n\t\t\t\tvar ret = thisItem.items;\n\t\t\t\tret.wiki.name = thisItem.wiki.name;\n\t\t\t\treturn { item: ret, isArray: true };\n\t\t\t}\n\t\t\treturn { item: thisItem, isArray: false };\n\t\t}\n\n\t\tvar n = 0;\n\t\tvar data = [];\n\t\tvar propName = panel;\n\n\t\tfor ( var i in currentItem[ propName ] ) {\n\t\t\tvar { item, isArray } = getItem( currentItem[ propName ][ i ] );\n\t\t\tvar required = '';\n\t\t\t// var input = '';\n\t\t\tvar multiple = '';\n\t\t\tif ( item.wiki.type === 'property' ) {\n\t\t\t\t// input = item.wiki[ 'preferred-input' ];\n\t\t\t\trequired = item.wiki.required ?\n\t\t\t\t\tmw.msg( 'visualdata-jsmodule-formfield-required' ) :\n\t\t\t\t\tmw.msg( 'visualdata-jsmodule-formfield-not-required' );\n\t\t\t} else {\n\t\t\t\trequired = mw.msg( 'visualdata-jsmodule-formfield-n/a' );\n\t\t\t\t// input = mw.msg( 'visualdata-jsmodule-formfield-n/a' );\n\t\t\t}\n\t\t\tif ( isArray ) {\n\t\t\t\tmultiple = mw.msg( 'visualdata-jsmodule-schemas-multiple' );\n\t\t\t}\n\t\t\tvar type = getType( item );\n\t\t\tdata.push( [\n\t\t\t\tn,\n\t\t\t\titem.wiki.name,\n\t\t\t\ttype,\n\t\t\t\t// input\n\t\t\t\tmultiple,\n\t\t\t\trequired,\n\t\t\t\t''\n\t\t\t] );\n\n\t\t\tn++;\n\t\t}\n\n\t\tif ( !data.length ) {\n\t\t\treturn;\n\t\t}\n\n\t\t$( '#' + getDatatableId( panel ) ).DataTable( {\n\t\t\t// order: 1,\n\t\t\t// pageLength: 20,\n\t\t\t// https://datatables.net/reference/option/dom\n\t\t\tdom: '<\"visualdata-datatable-left\"f><\"visualdata-datatable-right\"l>rtip',\n\n\t\t\t// @ATTENTION! this conflicts with \"rowReorder\"\n\t\t\t// use instead an hidden column and set orderable to false\n\t\t\t// for all visible columns\n\t\t\t// ordering: false,\n\n\t\t\tiDisplayLength: 100,\n\t\t\tsearching: false,\n\t\t\tpaging: false,\n\t\t\tinfo: false,\n\t\t\trowReorder: {\n\t\t\t\t// update: false,\n\t\t\t\t// dataSrc: 0,\n\t\t\t\tselector: 'td:not(:last-child)'\n\t\t\t},\n\t\t\tscrollX: true,\n\t\t\tcolumnDefs: [\n\t\t\t\t{ targets: 0, orderable: true, visible: false },\n\t\t\t\t{ orderable: false, targets: '_all' },\n\t\t\t\t{\n\t\t\t\t\ttargets: 5,\n\t\t\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\t\t\trender: function ( data_, thisType, row, meta ) {\n\t\t\t\t\t\treturn (\n\t\t\t\t\t\t\t'<span class=\"buttons-wrapper\" style=\"white-space:nowrap\" data-row=\"' +\n\t\t\t\t\t\t\trow[ 0 ] +\n\t\t\t\t\t\t\t'\"></span>'\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t],\n\n\t\t\t// lengthMenu: [ 10, 20, 50, 100, 200 ],\n\t\t\t// lengthChange: false,\n\t\t\tdata: data,\n\t\t\t// stateSave: true,\n\t\t\tcolumns: [ '' ].concat(\n\t\t\t\tmw.msg( 'visualdata-jsmodule-schemas-properties-columns' )\n\t\t\t\t\t.split( /\\s*,\\s*/ )\n\t\t\t\t\t.map( ( x ) => ( { title: x } ) )\n\t\t\t)\n\t\t} );\n\n\t\t$( '#' + getDatatableId( panel ) + ' .buttons-wrapper' ).each( function () {\n\t\t\tvar buttonWidgetEdit = new OO.ui.ButtonWidget( {\n\t\t\t\ticon: 'edit'\n\t\t\t\t// flags: [\"progressive\"],\n\t\t\t} );\n\n\t\t\tvar row = $( this ).data().row;\n\t\t\tvar key = Object.keys( currentItem[ propName ] )[ row ];\n\n\t\t\t// this is the modified item, the object schema\n\t\t\t// or the array schema \"subject\" in case of\n\t\t\t// array, with name of parent schema\n\n\t\t\t// eslint-disable-next-line no-unused-vars\n\t\t\tconst { item: thisItem, isArray: thisIsArray } = getItem( currentItem[ propName ][ key ] );\n\n\t\t\tif ( !( 'type' in thisItem.wiki ) ) {\n\t\t\t\tthisItem.wiki.type = 'property';\n\t\t\t}\n\n\t\t\tvar targetItem =\n\t\t\t\tcurrentItem.type !== 'array' ?\n\t\t\t\t\tcurrentItem[ propName ] :\n\t\t\t\t\tcurrentItem.items[ propName ];\n\n\t\t\tvar callback = function () {\n\t\t\t\tinitializeNestedDataTable( panel );\n\t\t\t};\n\n\t\t\tbuttonWidgetEdit.on( 'click', () => {\n\t\t\t\t// switch by subschema type (if array)\n\t\t\t\tswitch ( thisItem.wiki.type ) {\n\t\t\t\t\tcase 'property':\n\t\t\t\t\t\tVisualDataFormFieldInst.openDialog( callback, targetItem, key );\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'content-block':\n\t\t\t\t\t\tVisualDataContentBlockInst.openDialog(\n\t\t\t\t\t\t\tcallback,\n\t\t\t\t\t\t\ttargetItem,\n\t\t\t\t\t\t\tkey\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'geolocation':\n\t\t\t\t\t\tVisualDataGeolocationInst.openDialog(\n\t\t\t\t\t\t\tcallback,\n\t\t\t\t\t\t\ttargetItem,\n\t\t\t\t\t\t\tkey\n\t\t\t\t\t\t);\n\t\t\t\t\t\tbreak;\n\n\t\t\t\t\tcase 'schema':\n\t\t\t\t\t\t// pass the child schema, we don't pass the target\n\t\t\t\t\t\t// item since the dialog must handle the parent schema\n\t\t\t\t\t\t// as well (in case of array)\n\t\t\t\t\t\topenDialog( currentItem[ propName ][ key ], propName );\n\t\t\t\t\t\tbreak;\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tvar buttonWidgetDelete = new OO.ui.ButtonWidget( {\n\t\t\t\ticon: 'close',\n\t\t\t\tflags: [ 'destructive' ]\n\t\t\t} );\n\n\t\t\tbuttonWidgetDelete.on( 'click', () => {\n\t\t\t\tVisualDataFunctions.OOUIAlert(\n\t\t\t\t\tnew OO.ui.HtmlSnippet(\n\t\t\t\t\t\tmw.msg( 'visualdata-jsmodule-schemas-delete-confirm' )\n\t\t\t\t\t),\n\t\t\t\t\t{ size: 'medium' },\n\t\t\t\t\t() => {\n\t\t\t\t\t\tdelete currentItem[ propName ][ key ];\n\t\t\t\t\t\t// *** or delete the row manually\n\t\t\t\t\t\tinitializeNestedDataTable( panel );\n\t\t\t\t\t}\n\t\t\t\t);\n\t\t\t} );\n\t\t\t$( this ).append( [ buttonWidgetEdit.$element, buttonWidgetDelete.$element ] );\n\t\t} );\n\n\t\t// DataTables[DataTables.length - 1].draw();\n\t}\n\n\tfunction PageTwoLayout( name, config ) {\n\t\tPageTwoLayout.super.call( this, name, config );\n\n\t\tthis.name = name;\n\n\t\tvar toolbar = createToolbarB( name );\n\n\t\tvar contentFrame = new OO.ui.PanelLayout( {\n\t\t\t$content: $(\n\t\t\t\t// display\n\t\t\t\t'<table id=\"' +\n\t\t\t\t\tgetDatatableId( name ) +\n\t\t\t\t\t'\" class=\"visualdata-datatable\" width=\"100%\"></table>'\n\t\t\t), // this.fieldset.$element,\n\t\t\texpanded: false,\n\t\t\tpadded: false,\n\t\t\tclasses: [ 'visualdata-schemas-properties-contentframe' ]\n\t\t} );\n\n\t\tvar frameA = new OO.ui.PanelLayout( {\n\t\t\t$content: [ toolbar.$element, contentFrame.$element ],\n\t\t\texpanded: false,\n\t\t\t// framed: false,\n\t\t\tpadded: false,\n\t\t\tdata: { name: 'manage-schemas' }\n\t\t} );\n\n\t\tthis.$element.append( frameA.$element );\n\t}\n\n\tOO.inheritClass( PageTwoLayout, OO.ui.PageLayout );\n\tPageTwoLayout.prototype.setupOutlineItem = function () {\n\t\tthis.outlineItem.setLabel(\n\t\t\t// Messages that can be used here:\n\t\t\t// * visualdata-jsmodule-schemas-panel-properties\n\t\t\t// * visualdata-jsmodule-schemas-panel-oneOf\n\t\t\tmw.msg( 'visualdata-jsmodule-schemas-panel-' + this.name )\n\t\t);\n\t};\n\n\tfunction ProcessDialog( config ) {\n\t\tProcessDialog.super.call( this, config );\n\t}\n\tOO.inheritClass( ProcessDialog, OO.ui.ProcessDialog );\n\n\tProcessDialog.static.name = DialogName;\n\t// ProcessDialog.static.title = mw.msg(\n\t// \t\"visualdata-jsmodule-forms-defineform\"\n\t// );\n\tProcessDialog.static.actions = [\n\t\t{\n\t\t\taction: 'delete',\n\t\t\tmodes: 'main',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-delete' ),\n\t\t\tflags: 'destructive'\n\t\t},\n\t\t{\n\t\t\taction: 'save',\n\t\t\tmodes: [ 'main', 'properties' ],\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-save' ),\n\t\t\tflags: [ 'primary', 'progressive' ]\n\t\t},\n\t\t{\n\t\t\tmodes: [ 'main', 'properties' ],\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-cancel' ),\n\t\t\tflags: [ 'safe', 'close' ]\n\t\t}\n\t];\n\n\tfunction DialogContent() {\n\t\tvar page1 = new PageOneLayout( 'main', {} );\n\n\t\tvar page2 = new PageTwoLayout( 'properties', {\n\t\t\tclasses: [ 'visualdata-schemas-panel-properties' ]\n\t\t} );\n\n\t\t// *** the following requires more brainstorming\n\t\t// specifically, anyOf and oneOf are expected to\n\t\t// be objects, not properties in the same schema\n\t\t// so addField should be disabled in this case\n\t\t// or should inherit the current schema ...\n\t\t/*\n\t\tthis.page3 = new PageTwoLayout(\"anyOf\", {\n\t\t\tclasses: [\"visualdata-schemas-panel-properties\"],\n\t\t});\n\t\tthis.page4 = new PageTwoLayout(\"oneOf\", {\n\t\t\tclasses: [\"visualdata-schemas-panel-properties\"],\n\t\t});\n\t\t// this.page5 = new PageTwoLayout(\"prefixItems\", {\n\t\t// \tclasses: [\"visualdata-schemas-panel-properties\"],\n\t\t// });\n\t\tthis.page5 = new PageTwoLayout(\"allOf\", {\n\t\t\tclasses: [\"visualdata-schemas-panel-properties\"],\n\t\t});\n\t\tthis.page6 = new PageTwoLayout(\"additionalProperties\", {\n\t\t\tclasses: [\"visualdata-schemas-panel-properties\"],\n\t\t});\n\t\t*/\n\n\t\tvar booklet = new OO.ui.BookletLayout( {\n\t\t\toutlined: true,\n\t\t\texpanded: true,\n\t\t\tpadded: false\n\t\t} );\n\n\t\tbooklet.addPages( [\n\t\t\tpage1,\n\t\t\tpage2\n\t\t\t// this.page3,\n\t\t\t// this.page4,\n\t\t\t// this.page5,\n\t\t\t// this.page6,\n\t\t] );\n\n\t\treturn booklet;\n\t}\n\n\tProcessDialog.prototype.getSetupProcess = function ( data ) {\n\t\tvar initPropertiesTab = function ( tabName ) {\n\t\t\tif (\n\t\t\t\ttabName !== 'page1' &&\n\t\t\t\t!$.fn.DataTable.isDataTable( '#' + getDatatableId( tabName ) )\n\t\t\t) {\n\t\t\t\t// $('#visualdata-forms-datatable-dialog').DataTable().clear().draw();\n\t\t\t\tinitializeNestedDataTable( tabName );\n\t\t\t}\n\t\t};\n\n\t\treturn ProcessDialog.super.prototype.getSetupProcess.call( this, data )\n\t\t\t.next( function () {\n\t\t\t\tthis.actions.setMode( data.initialTab );\n\t\t\t\tvar booklet = DialogContent();\n\t\t\t\tthis.$body.append( booklet.$element );\n\t\t\t\tbooklet.setPage( data.initialTab );\n\n\t\t\t\tbooklet.on( 'set', ( value ) => {\n\t\t\t\t\tinitPropertiesTab( value.name );\n\t\t\t\t} );\n\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\tinitPropertiesTab( data.initialTab );\n\t\t\t\t\tVisualDataFunctions.removeNbspFromLayoutHeader(\n\t\t\t\t\t\t'#visualdata-ProcessDialogEditData'\n\t\t\t\t\t);\n\t\t\t\t}, 30 );\n\n\t\t\t}, this );\n\t};\n\n\tProcessDialog.prototype.initialize = function () {\n\t\tProcessDialog.super.prototype.initialize.apply( this, arguments );\n\t};\n\n\tProcessDialog.prototype.getActionProcess = function ( action ) {\n\t\tif (\n\t\t\t!action ||\n\t\t\t( action === 'delete' &&\n\t\t\t\t// eslint-disable-next-line no-alert\n\t\t\t\t!confirm( mw.msg( 'visualdata-jsmodule-schemas-delete-schema-confirm' ) ) )\n\t\t) {\n\t\t\treturn ProcessDialog.super.prototype.getActionProcess.call( this, action );\n\t\t}\n\n\t\tvar currentItem = getCurrentItem();\n\n\t\tvar payload = {\n\t\t\taction: 'visualdata-save-schema',\n\t\t\t'dialog-action': action,\n\t\t\t'previous-label': currentItem.wiki.name,\n\t\t\t'source-page': mw.config.get( 'wgPageName' ),\n\t\t\tformat: 'json',\n\t\t\tschema: {}\n\t\t};\n\t\t// https://www.mediawiki.org/wiki/OOUI/Windows/Process_Dialogs#Action_sets\n\t\treturn ProcessDialog.super.prototype.getActionProcess\n\t\t\t.call( this, action )\n\t\t\t.next( function () {\n\t\t\t\tswitch ( action ) {\n\t\t\t\t\tcase 'save':\n\t\t\t\t\t\tvar obj = { type: 'schema' };\n\t\t\t\t\t\tvar model = Models[ 0 ];\n\n\t\t\t\t\t\t// var propName = currentItem.type === 'array' ? 'items': 'properties'\n\n\t\t\t\t\t\tfor ( var i in model ) {\n\t\t\t\t\t\t\tobj[ i ] = getPropertyValue( i );\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\t// @TODO sanitize label\n\n\t\t\t\t\t\tvar alert = null;\n\t\t\t\t\t\tif ( obj.name === '' ) {\n\t\t\t\t\t\t\talert = mw.msg( 'visualdata-jsmodule-schemas-alert-noname' );\n\t\t\t\t\t\t} else if ( currentItem.wiki.name === '' && obj.name in Schemas ) {\n\t\t\t\t\t\t\talert = mw.msg(\n\t\t\t\t\t\t\t\t'visualdata-jsmodule-schemas-alert-existing-schema'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t} else if (\n\t\t\t\t\t\t\t!Object.keys( currentItem.properties ).length\n\t\t\t\t\t\t\t// && !Object.keys(currentItem.allOf).length &&\n\t\t\t\t\t\t\t// !Object.keys(currentItem.anyOf).length &&\n\t\t\t\t\t\t\t// !Object.keys(currentItem.oneOf).length\n\t\t\t\t\t\t) {\n\t\t\t\t\t\t\talert = mw.msg(\n\t\t\t\t\t\t\t\t'visualdata-jsmodule-schemas-alert-no-properties'\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tif ( alert ) {\n\t\t\t\t\t\t\tVisualDataFunctions.OOUIAlert( new OO.ui.HtmlSnippet( alert ), {\n\t\t\t\t\t\t\t\tsize: 'medium'\n\t\t\t\t\t\t\t} );\n\n\t\t\t\t\t\t\treturn ProcessDialog.super.prototype.getActionProcess.call(\n\t\t\t\t\t\t\t\tthis,\n\t\t\t\t\t\t\t\taction\n\t\t\t\t\t\t\t);\n\t\t\t\t\t\t}\n\n\t\t\t\t\t\tdelete obj.parentSchema;\n\t\t\t\t\t\tpayload.schema.wiki = obj;\n\t\t\t\t\t\tpayload.schema.type = 'object';\n\n\t\t\t\t\t\tfor ( var panel of [\n\t\t\t\t\t\t\t'properties'\n\t\t\t\t\t\t\t// \"anyOf\",\n\t\t\t\t\t\t\t// \"oneOf\",\n\t\t\t\t\t\t\t// \"additionalProperties\",\n\t\t\t\t\t\t] ) {\n\t\t\t\t\t\t\tif ( Object.keys( currentItem[ panel ] ).length ) {\n\t\t\t\t\t\t\t\tpayload.schema[ panel ] = currentItem[ panel ];\n\t\t\t\t\t\t\t\torderFields( payload.schema[ panel ], panel );\n\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\tdelete payload.schema[ panel ];\n\t\t\t\t\t\t\t}\n\t\t\t\t\t\t}\n\n\t\t\t\t\t// eslint-disable-next-line no-fallthrough\n\t\t\t\t\tcase 'delete':\n\t\t\t\t\t\t// console.log(\"payload\", JSON.parse(JSON.stringify(payload)));\n\t\t\t\t\t\tpayload.schema = JSON.stringify( payload.schema );\n\n\t\t\t\t\t\t// return;\n\t\t\t\t\t\tvar callApi = function ( postData, resolve, reject ) {\n\t\t\t\t\t\t\tnew mw.Api()\n\t\t\t\t\t\t\t\t.postWithToken( 'csrf', postData )\n\t\t\t\t\t\t\t\t.done( ( res ) => {\n\t\t\t\t\t\t\t\t\tresolve();\n\t\t\t\t\t\t\t\t\tif ( payload.action in res ) {\n\t\t\t\t\t\t\t\t\t\tvar data = res[ payload.action ];\n\t\t\t\t\t\t\t\t\t\tif ( 'schemas' in data ) {\n\t\t\t\t\t\t\t\t\t\t\tdata.schemas = JSON.parse( data.schemas );\n\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\tif ( data[ 'result-action' ] === 'error' ) {\n\t\t\t\t\t\t\t\t\t\t\tVisualDataFunctions.OOUIAlert(\n\t\t\t\t\t\t\t\t\t\t\t\tnew OO.ui.HtmlSnippet( data.error ),\n\t\t\t\t\t\t\t\t\t\t\t\t{\n\t\t\t\t\t\t\t\t\t\t\t\t\tsize: 'medium'\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\tif ( 'jobs-count-warning' in data ) {\n\t\t\t\t\t\t\t\t\t\t\t\tVisualDataFunctions.OOUIAlert(\n\t\t\t\t\t\t\t\t\t\t\t\t\tmw.msg(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t'visualdata-jsmodule-create-jobs-alert',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tparseInt( data[ 'jobs-count-warning' ] )\n\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t{ size: 'medium' },\n\t\t\t\t\t\t\t\t\t\t\t\t\tcallApi,\n\t\t\t\t\t\t\t\t\t\t\t\t\t[\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tObject.assign( postData, {\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'confirm-job-execution': true\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t} ),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tresolve,\n\t\t\t\t\t\t\t\t\t\t\t\t\t\treject\n\t\t\t\t\t\t\t\t\t\t\t\t\t]\n\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\t\t\tif ( parseInt( data[ 'jobs-count' ] ) ) {\n\t\t\t\t\t\t\t\t\t\t\t\t\tVisualDataFunctions.OOUIAlert(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\tmw.msg(\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\t'visualdata-jsmodule-created-jobs',\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t\tparseInt( data[ 'jobs-count' ] )\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t),\n\t\t\t\t\t\t\t\t\t\t\t\t\t\t{ size: 'medium' }\n\t\t\t\t\t\t\t\t\t\t\t\t\t);\n\t\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t\t\tSchemas = VisualData.updateSchemas( data, data[ 'result-action' ] );\n\t\t\t\t\t\t\t\t\t\t\t\t// initialize();\n\t\t\t\t\t\t\t\t\t\t\t\tModels.pop();\n\t\t\t\t\t\t\t\t\t\t\t\tSelectedItems.pop();\n\t\t\t\t\t\t\t\t\t\t\t\tWindowManager.closeActiveWindow();\n\t\t\t\t\t\t\t\t\t\t\t\tinitializeDataTable();\n\t\t\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t\t\t}\n\n\t\t\t\t\t\t\t\t\t} else {\n\t\t\t\t\t\t\t\t\t\tVisualDataFunctions.OOUIAlert( 'unknown error', {\n\t\t\t\t\t\t\t\t\t\t\tsize: 'medium'\n\t\t\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t\t\t\t}\n\t\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t\t.fail( ( res ) => {\n\t\t\t\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\t\t\t\tconsole.error( 'visualdata-save-schema', res );\n\t\t\t\t\t\t\t\t\treject( res );\n\t\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t};\n\n\t\t\t\t\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t\t\t\t\tmw.loader.using( 'mediawiki.api', () => {\n\t\t\t\t\t\t\t\tcallApi( payload, resolve, reject );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t\t} ).catch( ( err ) => {\n\t\t\t\t\t\t\tVisualDataFunctions.OOUIAlert( `error: ${ err }`, { size: 'medium' } );\n\t\t\t\t\t\t} );\n\t\t\t\t}\n\t\t\t} ); // .next\n\n\t\t// eslint-disable-next-line no-unreachable\n\t\treturn ProcessDialog.super.prototype.getActionProcess.call( this, action );\n\t};\n\n\tProcessDialog.prototype.getTeardownProcess = function ( data ) {\n\t\treturn ProcessDialog.super.prototype.getTeardownProcess\n\t\t\t.call( this, data )\n\t\t\t.first( () => {\n\t\t\t\tModels.pop();\n\t\t\t\tSelectedItems.pop();\n\t\t\t\tWindowManager.removeActiveWindow();\n\t\t\t}, this );\n\t};\n\n\t/**\n\t * Override getBodyHeight to create a tall dialog relative to the screen.\n\t *\n\t * @return {number} Body height\n\t */\n\tProcessDialog.prototype.getBodyHeight = function () {\n\t\t// see here https://www.mediawiki.org/wiki/OOUI/Windows/Process_Dialogs\n\t\t// this.page1.content.$element.outerHeight( true );\n\t\treturn window.innerHeight - 100;\n\t};\n\n\tfunction ProcessDialogNested( config ) {\n\t\tProcessDialogNested.super.call( this, config );\n\n\t\tthis.data = config.data;\n\t}\n\tOO.inheritClass( ProcessDialogNested, OO.ui.ProcessDialog );\n\n\tProcessDialogNested.static.name = DialogName;\n\n\tProcessDialogNested.static.actions = [\n\t\t/*\n\t\t{\n\t\t\taction: 'delete',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-manageproperties-delete' ),\n\t\t\tflags: 'destructive'\n\t\t},\n\t\t*/\n\t\t{\n\t\t\taction: 'save',\n\t\t\tmodes: 'edit',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-save' ),\n\t\t\tflags: [ 'primary', 'progressive' ]\n\t\t},\n\t\t{\n\t\t\tmodes: 'edit',\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-dialog-cancel' ),\n\t\t\tflags: [ 'safe', 'close' ]\n\t\t}\n\t];\n\n\tProcessDialogNested.prototype.initialize = function () {\n\t\tProcessDialogNested.super.prototype.initialize.apply( this, arguments );\n\t\tthis.page1 = new PageOneLayoutNested( 'page1', {} );\n\t\tthis.page2 = new PageTwoLayout( 'properties', {\n\t\t\tclasses: [ 'visualdata-schemas-panel-properties' ]\n\t\t} );\n\t\t/*\n\t\tthis.page3 = new PageTwoLayout(\"anyOf\", {\n\t\t\tclasses: [\"visualdata-schemas-panel-properties\"],\n\t\t});\n\t\tthis.page4 = new PageTwoLayout(\"oneOf\", {\n\t\t\tclasses: [\"visualdata-schemas-panel-properties\"],\n\t\t});\n\n\t\tthis.page5 = new PageTwoLayout(\"allOf\", {\n\t\t\tclasses: [\"visualdata-schemas-panel-properties\"],\n\t\t});\n\t\t// this.page5 = new PageTwoLayout(\"prefixItems\", {\n\t\t// \tclasses: [\"visualdata-schemas-panel-properties\"],\n\t\t// });\n\t\tthis.page6 = new PageTwoLayout(\"additionalProperties\", {\n\t\t\tclasses: [\"visualdata-schemas-panel-properties\"],\n\t\t});\n\t\t*/\n\n\t\tvar booklet = new OO.ui.BookletLayout( {\n\t\t\toutlined: true,\n\t\t\texpanded: true,\n\t\t\tpadded: false\n\t\t} );\n\n\t\tbooklet.addPages( [\n\t\t\tthis.page1,\n\t\t\tthis.page2\n\t\t\t// this.page3,\n\t\t\t// this.page4,\n\t\t\t// this.page5,\n\t\t\t// this.page6,\n\t\t] );\n\t\tbooklet.setPage( 'page1' );\n\n\t\tbooklet.on( 'set', ( value ) => {\n\t\t\tif (\n\t\t\t\tvalue.name !== 'page1' &&\n\t\t\t\t!$.fn.DataTable.isDataTable( '#' + getDatatableId( value.name ) )\n\t\t\t) {\n\t\t\t\t// $('#visualdata-forms-datatable-dialog').DataTable().clear().draw();\n\t\t\t\tinitializeNestedDataTable( value.name );\n\t\t\t}\n\t\t} );\n\n\t\tthis.$body.append( booklet.$element );\n\n\t\tsetTimeout( () => {\n\t\t\tVisualDataFunctions.removeNbspFromLayoutHeader(\n\t\t\t\t'#visualdata-ProcessDialogEditProperties'\n\t\t\t);\n\t\t}, 30 );\n\t};\n\n\tfunction handleSaveArray( currentItem, obj ) {\n\t\tvar parentSchema = obj.parentSchema;\n\t\tdelete obj.parentSchema;\n\n\t\t// *** important !! otherwise it will be processed\n\t\t// as field by VisualDataSchemaProcessor\n\t\tif ( obj[ 'multiple-items' ] ) {\n\t\t\tparentSchema.type = 'schema';\n\t\t}\n\n\t\tif (\n\t\t\t( obj[ 'multiple-items' ] && currentItem.type === 'array' ) ||\n\t\t\t( !obj[ 'multiple-items' ] && currentItem.type !== 'array' )\n\t\t) {\n\t\t\tif ( obj[ 'multiple-items' ] ) {\n\t\t\t\tcurrentItem.wiki = parentSchema;\n\t\t\t\tcurrentItem.items = Object.assign( currentItem.items, { wiki: obj } );\n\t\t\t\treturn currentItem;\n\t\t\t}\n\n\t\t\tcurrentItem.wiki = obj;\n\t\t\treturn currentItem;\n\t\t}\n\n\t\t// move child to parent\n\t\tif ( !obj[ 'multiple-items' ] ) {\n\t\t\t// currentItem.type should be always array\n\t\t\treturn Object.assign(\n\t\t\t\tcurrentItem.type === 'array' ? currentItem.items : currentItem,\n\t\t\t\t{ wiki: obj }\n\t\t\t);\n\t\t}\n\n\t\t// create parent - child\n\t\treturn {\n\t\t\ttype: 'array',\n\t\t\twiki: parentSchema,\n\t\t\titems: Object.assign( currentItem, { wiki: obj } )\n\t\t};\n\t}\n\n\tProcessDialogNested.prototype.getActionProcess = function ( action ) {\n\t\tvar dialog = this;\n\n\t\tif (\n\t\t\t!action ||\n\t\t\t( action === 'delete' &&\n\t\t\t\t// eslint-disable-next-line no-alert\n\t\t\t\t!confirm( mw.msg( 'visualdata-jsmodule-schemas-delete-schema-confirm' ) ) )\n\t\t) {\n\t\t\t//\treturn ProcessDialogNested.super.prototype.getActionProcess.call( this, action );\n\t\t}\n\n\t\tvar data = this.data;\n\t\tvar propName = data.propName;\n\n\t\tvar currentItem = getCurrentItem();\n\t\tvar parentSchema = currentItem;\n\t\tif (\n\t\t\tcurrentItem.type === 'array' &&\n\t\t\tVisualDataFunctions.isObject( currentItem.items )\n\t\t) {\n\t\t\tcurrentItem = currentItem.items;\n\t\t}\n\n\t\tfunction getValueRec( thisModel, thisObj ) {\n\t\t\tfor ( var i in thisModel ) {\n\t\t\t\tif ( !( 'getValue' in thisModel[ i ] ) ) {\n\t\t\t\t\tgetValueRec( thisModel[ i ], ( thisObj[ i ] = {} ) );\n\t\t\t\t} else {\n\t\t\t\t\tthisObj[ i ] = getWidgetValue( thisModel[ i ] );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\n\t\tswitch ( action ) {\n\t\t\tcase 'delete':\n\t\t\t\tif ( parentSchema.wiki.name !== '' ) {\n\t\t\t\t\tdelete SelectedItems[ SelectedItems.length - 1 ][ propName ][\n\t\t\t\t\t\tparentSchema.wiki.name\n\t\t\t\t\t];\n\t\t\t\t}\n\t\t\t\tbreak;\n\n\t\t\tcase 'save':\n\t\t\t\tvar model = Models[ Models.length - 1 ];\n\t\t\t\tvar ParentObj = SelectedItems[ SelectedItems.length - 2 ];\n\n\t\t\t\tvar obj = { type: 'schema' };\n\t\t\t\tgetValueRec( model, obj );\n\n\t\t\t\tvar objName = obj[ 'multiple-items' ] ? obj.parentSchema.name : obj.name;\n\n\t\t\t\tvar target =\n\t\t\t\t\tParentObj.type !== 'array' ?\n\t\t\t\t\t\tParentObj[ propName ] :\n\t\t\t\t\t\tParentObj.items[ propName ];\n\n\t\t\t\tvar alert = null;\n\t\t\t\tif ( objName === '' ) {\n\t\t\t\t\talert = mw.msg( 'visualdata-jsmodule-schemas-alert-noname' );\n\n\t\t\t\t\t// @see VisualDataFormField\n\t\t\t\t} else if ( objName !== parentSchema.wiki.name && objName in target ) {\n\t\t\t\t\talert = mw.msg( 'visualdata-jsmodule-schemas-alert-existing-item' );\n\t\t\t\t} else if (\n\t\t\t\t\t!Object.keys( currentItem.properties ).length\n\t\t\t\t\t// && !Object.keys(currentItem.allOf).length &&\n\t\t\t\t\t// !Object.keys(currentItem.anyOf).length &&\n\t\t\t\t\t// !Object.keys(currentItem.oneOf).length\n\t\t\t\t) {\n\t\t\t\t\talert = mw.msg( 'visualdata-jsmodule-schemas-alert-no-properties' );\n\t\t\t\t}\n\n\t\t\t\tif ( alert ) {\n\t\t\t\t\tVisualDataFunctions.OOUIAlert( new OO.ui.HtmlSnippet( alert ), {\n\t\t\t\t\t\tsize: 'medium'\n\t\t\t\t\t} );\n\n\t\t\t\t\treturn ProcessDialog.super.prototype.getActionProcess.call(\n\t\t\t\t\t\tthis,\n\t\t\t\t\t\taction\n\t\t\t\t\t);\n\t\t\t\t}\n\n\t\t\t\tVisualDataFunctions.renameObjectKey(\n\t\t\t\t\ttarget,\n\t\t\t\t\tparentSchema.wiki.name,\n\t\t\t\t\tobjName\n\t\t\t\t);\n\n\t\t\t\tvar updatedSchema = handleSaveArray( parentSchema, obj );\n\t\t\t\tupdatedSchema.type = !obj[ 'multiple-items' ] ? 'object' : 'array';\n\n\t\t\t\tvar panels = [\n\t\t\t\t\t'properties'\n\t\t\t\t\t// \"anyOf\",\n\t\t\t\t\t// \"oneOf\",\n\t\t\t\t\t// \"allOf\",\n\t\t\t\t\t// \"additionalProperties\",\n\t\t\t\t];\n\n\t\t\t\tvar target_ = !obj[ 'multiple-items' ] ?\n\t\t\t\t\tupdatedSchema :\n\t\t\t\t\tupdatedSchema.items;\n\n\t\t\t\tfor ( var panel of panels ) {\n\t\t\t\t\tif ( panel in target_ ) {\n\t\t\t\t\t\torderFields( target_[ panel ], panel );\n\t\t\t\t\t}\n\t\t\t\t}\n\n\t\t\t\ttarget[ objName ] = updatedSchema;\n\t\t\t\tbreak;\n\t\t}\n\n\t\treturn new OO.ui.Process( () => {\n\t\t\tdialog.close( { action: action } );\n\t\t} );\n\n\t\t// return ProcessDialogNested.super.prototype.getActionProcess.call( this, action );\n\t};\n\n\tProcessDialogNested.prototype.getTeardownProcess = function ( data ) {\n\t\tvar self = this;\n\t\treturn ProcessDialogNested.super.prototype.getTeardownProcess\n\t\t\t.call( this, data )\n\t\t\t.first( () => {\n\t\t\t\tModels.pop();\n\t\t\t\tSelectedItems.pop();\n\t\t\t\tinitializeNestedDataTable( self.data.propName );\n\t\t\t\tWindowManager.removeActiveWindow();\n\t\t\t}, this );\n\t};\n\n\t/**\n\t * Override getBodyHeight to create a tall dialog relative to the screen.\n\t *\n\t * @return {number} Body height\n\t */\n\tProcessDialogNested.prototype.getBodyHeight = function () {\n\t\t// see here https://www.mediawiki.org/wiki/OOUI/Windows/Process_Dialogs\n\t\t// this.page1.content.$element.outerHeight( true );\n\t\treturn window.innerHeight - 100;\n\t};\n\n\tfunction PageOneLayout( name, config ) {\n\t\tPageOneLayout.super.call( this, name, config );\n\n\t\tvar currentItem = getCurrentItem();\n\n\t\tvar model = Models[ Models.length - 1 ];\n\n\t\tvar fieldset = new OO.ui.FieldsetLayout( {\n\t\t\tlabel: ''\n\t\t} );\n\n\t\t// || currentItem.wiki.name\n\t\tvar nameInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'name' )\n\t\t} );\n\n\t\tmodel.name = nameInput;\n\n\t\tvar titleInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'title' )\n\t\t} );\n\n\t\tmodel.title = titleInput;\n\n\t\tvar descriptionInput = new OO.ui.MultilineTextInputWidget( {\n\t\t\tautosize: true,\n\t\t\trows: 2,\n\t\t\tvalue: getPropertyValue( 'description' )\n\t\t} );\n\n\t\tmodel.description = descriptionInput;\n\n\t\tvar messageWidget = new OO.ui.MessageWidget( {\n\t\t\ttype: 'info',\n\t\t\tlabel: new OO.ui.HtmlSnippet(\n\t\t\t\tmw.msg(\n\t\t\t\t\t'visualdata-jsmodule-formfield-message-schemapage',\n\t\t\t\t\t`${ Config.VisualDataSchemaUrl }${ getPropertyValue( 'name' ) }`\n\t\t\t\t)\n\t\t\t),\n\n\t\t\tinvisibleLabel: false,\n\t\t\tclasses: [ 'VisualDataFormFieldMessage' ]\n\t\t} );\n\n\t\tmessageWidget.toggle( currentItem.wiki.name !== '' );\n\n\t\tfieldset.addItems( [\n\t\t\tmessageWidget,\n\t\t\tnew OO.ui.FieldLayout( nameInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-name' ),\n\t\t\t\talign: 'top'\n\t\t\t} ),\n\n\t\t\tnew OO.ui.FieldLayout( titleInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-title' ),\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-schemas-title-help' ),\n\t\t\t\talign: 'top',\n\t\t\t\thelpInline: true\n\t\t\t} ),\n\n\t\t\tnew OO.ui.FieldLayout( descriptionInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-description' ),\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-schemas-description-help' ),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t} )\n\n\t\t\t// new OO.ui.FieldLayout(collapsibleInput, {\n\t\t\t// \tlabel: mw.msg(\"visualdata-jsmodule-schemas-collapsible\"),\n\t\t\t// \talign: \"top\",\n\t\t\t// \thelp: mw.msg(\"visualdata-jsmodule-schemas-collapsible-help\"),\n\t\t\t// \thelpInline: true,\n\t\t\t// }),\n\n\t\t\t// new OO.ui.FieldLayout(collapsedInput, {\n\t\t\t// \tlabel: mw.msg(\"visualdata-jsmodule-schemas-collapsed\"),\n\t\t\t// \talign: \"top\",\n\t\t\t// \thelp: mw.msg(\"visualdata-jsmodule-schemas-collapsed-help\"),\n\t\t\t// \thelpInline: true,\n\t\t\t// }),\n\t\t] );\n\n\t\tthis.content = new OO.ui.PanelLayout( {\n\t\t\t$content: fieldset.$element,\n\t\t\tpadded: true,\n\t\t\texpanded: false\n\t\t} );\n\n\t\tthis.$element.append( this.content.$element );\n\t}\n\n\tOO.inheritClass( PageOneLayout, OO.ui.PageLayout );\n\n\tPageOneLayout.prototype.setupOutlineItem = function () {\n\t\tthis.outlineItem.setLabel(\n\t\t\tmw.msg( 'visualdata-jsmodule-dialog-main' )\n\t\t);\n\t};\n\n\tfunction parentSchemaContainer( model, self ) {\n\t\tif ( !self ) {\n\t\t\tvar self = VisualDataSchemas;\n\t\t}\n\t\tvar layout = new OO.ui.PanelLayout( {\n\t\t\texpanded: false,\n\t\t\tpadded: true,\n\t\t\tframed: true,\n\t\t\tclasses: []\n\t\t} );\n\t\tvar fieldset = new OO.ui.FieldsetLayout( {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-container-schema' )\n\t\t} );\n\n\t\tlayout.$element.append( fieldset.$element );\n\n\t\tvar nameInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: self.getPropertyValue( 'name', 'parentSchema' )\n\t\t} );\n\n\t\tmodel.name = nameInput;\n\n\t\tvar titleInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: self.getPropertyValue( 'title', 'parentSchema' )\n\t\t} );\n\n\t\tmodel.title = titleInput;\n\n\t\tvar descriptionInput = new OO.ui.MultilineTextInputWidget( {\n\t\t\tautosize: true,\n\t\t\trows: 2,\n\t\t\tvalue: self.getPropertyValue( 'description', 'parentSchema' )\n\t\t} );\n\n\t\tmodel.description = descriptionInput;\n\n\t\t// @TODO\n\t\t// add:\n\t\t// min: number, at least: number\n\t\t// layout: section, horizontal, greed\n\t\t// collapsible: toggle\n\t\t// collasped: toggle\n\t\tvar minItemsInput = new OO.ui.NumberInputWidget( {\n\t\t\tvalue: self.getPropertyValue( 'min-items', 'parentSchema' ),\n\t\t\ttype: 'number'\n\t\t} );\n\t\tvar maxItemsInput = new OO.ui.NumberInputWidget( {\n\t\t\tvalue: self.getPropertyValue( 'max-items', 'parentSchema' ),\n\t\t\ttype: 'number'\n\t\t} );\n\n\t\tmodel[ 'min-items' ] = minItemsInput;\n\t\tmodel[ 'max-items' ] = maxItemsInput;\n\n\t\tvar uniqueItemsInput = new OO.ui.ToggleSwitchWidget( {\n\t\t\tvalue: self.getPropertyValue( 'unique-items', 'parentSchema' )\n\t\t} );\n\n\t\tmodel[ 'unique-items' ] = uniqueItemsInput;\n\n\t\tvar fieldMinItems = new OO.ui.FieldLayout( minItemsInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-min-items' ),\n\t\t\talign: 'top',\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-schemas-min-items-help' ),\n\t\t\thelpInline: true\n\t\t} );\n\n\t\tvar fieldMaxItems = new OO.ui.FieldLayout( maxItemsInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-max-items' ),\n\t\t\talign: 'top',\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-schemas-max-items-help' ),\n\t\t\thelpInline: true\n\t\t} );\n\n\t\tvar fieldUniqueItems = new OO.ui.FieldLayout( uniqueItemsInput, {\n\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-unique-items' ),\n\t\t\talign: 'top',\n\t\t\thelp: mw.msg( 'visualdata-jsmodule-schemas-unique-items-help' ),\n\t\t\thelpInline: true\n\t\t} );\n\n\t\tvar messageWidget = new OO.ui.MessageWidget( {\n\t\t\ttype: 'info',\n\t\t\tlabel: new OO.ui.HtmlSnippet(\n\t\t\t\tmw.msg(\n\t\t\t\t\t'visualdata-jsmodule-schemas-message-container-info'\n\t\t\t\t)\n\t\t\t),\n\n\t\t\tinvisibleLabel: false,\n\t\t\tclasses: [ 'VisualDataFormFieldMessage' ]\n\t\t} );\n\n\t\tfieldset.addItems( [\n\t\t\tmessageWidget,\n\n\t\t\tnew OO.ui.FieldLayout( nameInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-name' ),\n\t\t\t\talign: 'top'\n\t\t\t} ),\n\n\t\t\tnew OO.ui.FieldLayout( titleInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-title' ),\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-schemas-title-help' ),\n\t\t\t\talign: 'top',\n\t\t\t\thelpInline: true\n\t\t\t} ),\n\n\t\t\tnew OO.ui.FieldLayout( descriptionInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-description' ),\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-schemas-description-help' ),\n\t\t\t\thelpInline: true,\n\t\t\t\talign: 'top'\n\t\t\t} ),\n\t\t\tfieldMinItems,\n\t\t\tfieldMaxItems,\n\t\t\tfieldUniqueItems\n\t\t] );\n\n\t\treturn layout;\n\t}\n\n\tfunction PageOneLayoutNested( name, config ) {\n\t\tPageOneLayoutNested.super.call( this, name, config );\n\n\t\tvar currentItem = getCurrentItem();\n\t\tvar parentSchema = {};\n\n\t\t// array items can share the same schema for\n\t\t// all items, or to contain a tuple (to be an\n\t\t// array of items of fixed length)\n\t\t// in the first case, we consider the schema\n\t\t// being the child schema,\n\t\t// in the second case being the parent schema\n\t\t// (in the firse case, we will provide an\n\t\t// editable panel with the properties of the\n\t\t// parent schema)\n\t\tif (\n\t\t\tcurrentItem.type === 'array' &&\n\t\t\tVisualDataFunctions.isObject( currentItem.items )\n\t\t) {\n\t\t\tparentSchema = currentItem;\n\t\t\tcurrentItem = currentItem.items;\n\t\t}\n\n\t\tvar model = Models[ Models.length - 1 ];\n\n\t\tvar fieldset = new OO.ui.FieldsetLayout( {\n\t\t\tlabel: ''\n\t\t} );\n\n\t\t// || currentItem.wiki.name\n\t\tvar nameInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'name' )\n\t\t} );\n\n\t\tmodel.name = nameInput;\n\n\t\tvar titleInput = new OO.ui.TextInputWidget( {\n\t\t\tvalue: getPropertyValue( 'title' )\n\t\t} );\n\n\t\tmodel.title = titleInput;\n\n\t\tvar descriptionInput = new OO.ui.MultilineTextInputWidget( {\n\t\t\tautosize: true,\n\t\t\trows: 2,\n\t\t\tvalue: getPropertyValue( 'description' )\n\t\t} );\n\n\t\tmodel.description = descriptionInput;\n\n\t\t// *** TODO, manage arrays and tuples\n\t\t// @see https://json-schema.org/understanding-json-schema/reference/array.html#tuple-validation\n\n\t\tvar multipleItemsInputValue =\n\t\t\tgetPropertyValue( 'multiple-items' ) || parentSchema.type === 'array';\n\n\t\tvar multipleItemsInput = new OO.ui.ToggleSwitchWidget( {\n\t\t\tvalue: multipleItemsInputValue\n\t\t} );\n\n\t\tmodel[ 'multiple-items' ] = multipleItemsInput;\n\n\t\tvar layoutParentSchema = parentSchemaContainer( ( model.parentSchema = {} ) );\n\t\tlayoutParentSchema.toggle( multipleItemsInputValue );\n\t\tnameInput.setDisabled( multipleItemsInputValue );\n\n\t\tmultipleItemsInput.on( 'change', ( enabled ) => {\n\t\t\tlayoutParentSchema.toggle( enabled );\n\t\t\tnameInput.setDisabled( enabled );\n\t\t} );\n\n\t\t// var layout = new OO.ui.HorizontalLayout( {\n\t\t// \titems: [ minInstancesInput, maxInstancesInput ]\n\t\t// } );\n\n\t\tvar layoutInput = new OO.ui.DropdownInputWidget( {\n\t\t\toptions: VisualDataFunctions.createDropDownOptions( {\n\t\t\t\tsection: mw.msg( 'visualdata-jsmodule-schemas-layout-section' ),\n\t\t\t\thorizontal: mw.msg( 'visualdata-jsmodule-schemas-layout-horizontal' )\n\t\t\t\t// 'grid': mw.msg(\n\t\t\t\t// \t'visualdata-jsmodule-forms-freetext-showalways'\n\t\t\t\t// )\n\t\t\t} ),\n\t\t\tvalue: getPropertyValue( 'layout' ) || 'section'\n\t\t} );\n\n\t\tmodel.layout = layoutInput;\n\n\t\tfieldset.addItems( [\n\t\t\tnew OO.ui.FieldLayout( nameInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-name' ),\n\t\t\t\talign: 'top'\n\t\t\t} ),\n\n\t\t\tnew OO.ui.FieldLayout( titleInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-title' ),\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-schemas-title-help' ),\n\t\t\t\talign: 'top',\n\t\t\t\thelpInline: true\n\t\t\t} ),\n\n\t\t\tnew OO.ui.FieldLayout( descriptionInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-description' ),\n\t\t\t\talign: 'top'\n\t\t\t} ),\n\n\t\t\tnew OO.ui.FieldLayout( multipleItemsInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-multiple-items' ),\n\t\t\t\talign: 'top',\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-schemas-multiple-items-help' ),\n\t\t\t\t// 'Toggle on to allow multiple items', // mw.msg(),\n\t\t\t\thelpInline: true\n\t\t\t} ),\n\n\t\t\tlayoutParentSchema,\n\n\t\t\tnew OO.ui.FieldLayout( layoutInput, {\n\t\t\t\tlabel: mw.msg( 'visualdata-jsmodule-schemas-layout' ),\n\t\t\t\talign: 'top',\n\t\t\t\thelp: mw.msg( 'visualdata-jsmodule-schemas-layout-help' ),\n\t\t\t\thelpInline: true\n\t\t\t} )\n\t\t] );\n\n\t\tthis.content = new OO.ui.PanelLayout( {\n\t\t\t$content: fieldset.$element,\n\t\t\tpadded: true,\n\t\t\texpanded: false\n\t\t} );\n\n\t\tthis.$element.append( this.content.$element );\n\t}\n\n\tOO.inheritClass( PageOneLayoutNested, OO.ui.PageLayout );\n\n\tPageOneLayoutNested.prototype.setupOutlineItem = function () {\n\t\tthis.outlineItem.setLabel(\n\t\t\tmw.msg( 'visualdata-jsmodule-dialog-main' )\n\t\t);\n\t};\n\n\tfunction openDialog( schema, propName, initialTab ) {\n\t\tif ( !schema ) {\n\t\t\tSelectedItems.push( {\n\t\t\t\tproperties: {},\n\n\t\t\t\t// treat as objects\n\t\t\t\t// items: {},\n\t\t\t\t// anyOf: {},\n\t\t\t\t// oneOf: {},\n\t\t\t\t// allOf: {},\n\n\t\t\t\t// additionalProperties: {},\n\t\t\t\twiki: { name: '' }\n\t\t\t} );\n\t\t} else {\n\t\t\tSelectedItems.push(\n\t\t\t\tObject.assign(\n\t\t\t\t\t{\n\t\t\t\t\t\tproperties: {},\n\n\t\t\t\t\t\t// treat as objects\n\t\t\t\t\t\t// items: {},\n\t\t\t\t\t\t// anyOf: {},\n\t\t\t\t\t\t// oneOf: {},\n\t\t\t\t\t\t// allOf: {},\n\t\t\t\t\t\t// additionalProperties: {},\n\t\t\t\t\t\twiki: {}\n\t\t\t\t\t},\n\t\t\t\t\tschema\n\t\t\t\t)\n\t\t\t);\n\t\t}\n\n\t\tModels.push( { parentSchema: {} } );\n\n\t\t// *** place here properties to copy\n\t\tif ( 'uuid' in SelectedItems[ SelectedItems.length - 1 ].wiki ) {\n\t\t\tModels[ Models.length - 1 ].uuid = new VisualDataFunctions.MockupOOUIClass(\n\t\t\t\tschema.wiki.uuid );\n\t\t}\n\n\t\tvar processDialog;\n\t\tvar title;\n\n\t\tif ( !propName ) {\n\t\t\tprocessDialog = new ProcessDialog( {\n\t\t\t\tsize: 'larger',\n\t\t\t\tid: 'visualdata-ProcessDialogEditData'\n\t\t\t} );\n\n\t\t\ttitle =\n\t\t\t\tmw.msg(\n\t\t\t\t\t// The following messages are used here:\n\t\t\t\t\t// * visualdata-jsmodule-schemas-defineschema\n\t\t\t\t\t// * visualdata-jsmodule-schemas-defineschema - [name]\n\t\t\t\t\t'visualdata-jsmodule-schemas-defineschema'\n\t\t\t\t) + ( name ? ' - ' + name : '' );\n\t\t} else {\n\t\t\tprocessDialog = new ProcessDialogNested( {\n\t\t\t\tsize: 'larger',\n\t\t\t\tid: 'visualdata-ProcessDialogEditProperties',\n\t\t\t\tdata: { propName: propName }\n\t\t\t} );\n\n\t\t\ttitle =\n\t\t\t\tmw.msg(\n\t\t\t\t\t// The following messages are used here:\n\t\t\t\t\t// * visualdata-jsmodule-schemas-defineschema\n\t\t\t\t\t// * visualdata-jsmodule-schemas-defineschema - [name]\n\t\t\t\t\t'visualdata-jsmodule-schemas-defineschema'\n\t\t\t\t) + ( name ? ' - ' + name : '' );\n\t\t}\n\n\t\tWindowManager.newWindow( processDialog, { title: title, initialTab: initialTab || 'main' } );\n\n\t\tif ( !Config.jsonDiffLibrary && !mw.cookie.get( 'visualdata-check-json-diff-library' ) ) {\n\t\t\tVisualDataFunctions.OOUIAlert( new OO.ui.HtmlSnippet( mw.msg( 'visualdata-jsmodule-missing-json-diff-library' ) ), {\n\t\t\t\tsize: 'medium',\n\t\t\t\tactions: [ OO.ui.MessageDialog.static.actions[ 0 ] ]\n\t\t\t}, () => {\n\t\t\t\t// 15 days\n\t\t\t\tvar timeLapse = 15 * 86400;\n\t\t\t\tmw.cookie.set( 'visualdata-check-json-diff-library', true, {\n\t\t\t\t\tpath: '/',\n\t\t\t\t\texpires: timeLapse\n\t\t\t\t} );\n\t\t\t} );\n\t\t}\n\t}\n\n\t// function escape( s ) {\n\t// \treturn String( s )\n\t// \t\t.replace( /&/g, '&' )\n\t// \t\t.replace( /</g, '<' )\n\t// \t\t.replace( />/g, '>' )\n\t// \t\t.replace( /\"/g, '"' )\n\t// \t\t.replace( /'/g, ''' );\n\t// }\n\n\tfunction initializeDataTable() {\n\t\tVisualDataFunctions.destroyDataTable(\n\t\t\t'visualdata-schemas-datatable'\n\t\t);\n\n\t\tvar data = [];\n\t\tfor ( var i in Schemas ) {\n\t\t\tvar value = Schemas[ i ];\n\n\t\t\t// *** or use https://datatables.net/manual/data/renderers#Text-helper\n\t\t\tdata.push( [\n\t\t\t\ti,\n\t\t\t\t'properties' in value ? Object.keys( value.properties ).join( ', ' ) : ''\n\t\t\t] );\n\t\t}\n\n\t\tDataTable = $( '#visualdata-schemas-datatable' ).DataTable( {\n\t\t\torder: 1,\n\t\t\tpageLength: 20,\n\n\t\t\t// https://datatables.net/reference/option/dom\n\t\t\tdom: '<\"visualdata-datatable-left\"f><\"visualdata-datatable-right\"l>rtip',\n\t\t\tlengthMenu: [ 10, 20, 50, 100, 200 ],\n\t\t\t// lengthChange: false,\n\t\t\tdata: data,\n\t\t\tstateSave: true,\n\t\t\tcolumns: mw\n\t\t\t\t.msg( 'visualdata-jsmodule-schemas-columns' )\n\t\t\t\t.split( /\\s*,\\s*/ )\n\t\t\t\t.map( ( x ) => ( { title: x } ) )\n\t\t} );\n\n\t\tDataTable.on( 'click', 'tr', function () {\n\t\t\tvar index = DataTable.row( this ).index();\n\t\t\tif ( index !== undefined ) {\n\t\t\t\tvar label = data[ index ][ 0 ];\n\t\t\t\topenSchemaDialog( label, false );\n\t\t\t}\n\t\t} );\n\t}\n\n\tfunction openSchemaDialog( label, initialTab ) {\n\t\tif ( !Object.keys( Schemas[ label ] ).length ) {\n\t\t\tVisualData.loadSchemas( [ label ] ).then( ( schemas ) => {\n\t\t\t\tfor ( var i in schemas ) {\n\t\t\t\t\tSchemas[ i ] = schemas[ i ];\n\t\t\t\t}\n\t\t\t\topenDialog( Schemas[ label ], null, initialTab );\n\t\t\t} );\n\t\t} else {\n\t\t\topenDialog( Schemas[ label ], null, initialTab );\n\t\t}\n\t}\n\n\tfunction createToolbarB( panelName ) {\n\t\tvar toolFactory = new OO.ui.ToolFactory();\n\t\tvar toolGroupFactory = new OO.ui.ToolGroupFactory();\n\n\t\tvar toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory, {\n\t\t\tactions: true\n\t\t} );\n\n\t\tvar currentItem = getCurrentItem();\n\t\t// var propName = currentItem.type === \"array\" ? \"items\" : panelName;\n\t\tvar propName = panelName;\n\n\t\tvar onSelect = function () {\n\t\t\tvar toolName = this.getName();\n\n\t\t\tvar callback = function () {\n\t\t\t\tinitializeNestedDataTable( panelName );\n\t\t\t};\n\t\t\tswitch ( toolName ) {\n\t\t\t\tcase 'add-geolocation':\n\t\t\t\t\tVisualDataGeolocationInst.openDialog(\n\t\t\t\t\t\tcallback,\n\t\t\t\t\t\tcurrentItem.type !== 'array' ?\n\t\t\t\t\t\t\tcurrentItem[ propName ] :\n\t\t\t\t\t\t\tcurrentItem.items[ propName ]\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\t\t\t\tcase 'add-block-content':\n\t\t\t\t\tVisualDataContentBlockInst.openDialog(\n\t\t\t\t\t\tcallback,\n\t\t\t\t\t\tcurrentItem.type !== 'array' ?\n\t\t\t\t\t\t\tcurrentItem[ propName ] :\n\t\t\t\t\t\t\tcurrentItem.items[ propName ]\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'add-field':\n\t\t\t\t\tVisualDataFormFieldInst.openDialog(\n\t\t\t\t\t\tcallback,\n\t\t\t\t\t\tcurrentItem.type !== 'array' ?\n\t\t\t\t\t\t\tcurrentItem[ propName ] :\n\t\t\t\t\t\t\tcurrentItem.items[ propName ]\n\t\t\t\t\t);\n\t\t\t\t\tbreak;\n\n\t\t\t\tcase 'add-subitem':\n\t\t\t\t\topenDialog( null, propName );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.setActive( false );\n\t\t};\n\n\t\tvar toolGroup = [\n\t\t\t{\n\t\t\t\tname: 'add-field',\n\t\t\t\ticon: 'add',\n\t\t\t\ttitle: mw.msg( 'visualdata-jsmodule-schemas-add-field' ),\n\t\t\t\tonSelect: onSelect\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'add-block-content',\n\t\t\t\ticon: 'add',\n\t\t\t\ttitle: mw.msg( 'visualdata-jsmodule-schemas-add-block-content' ),\n\t\t\t\tonSelect: onSelect\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'add-subitem',\n\t\t\t\ticon: 'add',\n\t\t\t\ttitle: mw.msg( 'visualdata-jsmodule-schemas-add-subitem' ),\n\t\t\t\tonSelect: onSelect\n\t\t\t},\n\t\t\t{\n\t\t\t\tname: 'add-geolocation',\n\t\t\t\ticon: 'add',\n\t\t\t\ttitle: mw.msg( 'visualdata-jsmodule-schemas-add-geolocation' ),\n\t\t\t\tonSelect: onSelect\n\t\t\t}\n\t\t];\n\t\tVisualDataFunctions.createToolGroup( toolFactory, 'group', toolGroup );\n\n\t\ttoolbar.setup( [\n\t\t\t{\n\t\t\t\tname: 'my-group',\n\t\t\t\t// type: \"bar\",\n\t\t\t\t// label: \"Create property\",\n\t\t\t\tinclude: [ { group: 'group' } ]\n\t\t\t}\n\t\t] );\n\n\t\treturn toolbar;\n\t}\n\n\tfunction createToolbarA() {\n\t\tvar toolFactory = new OO.ui.ToolFactory();\n\t\tvar toolGroupFactory = new OO.ui.ToolGroupFactory();\n\n\t\tvar toolbar = new OO.ui.Toolbar( toolFactory, toolGroupFactory, {\n\t\t\tactions: true\n\t\t} );\n\n\t\tvar onSelect = function () {\n\t\t\tvar toolName = this.getName();\n\n\t\t\tswitch ( toolName ) {\n\t\t\t\tcase 'createschema':\n\t\t\t\t\topenDialog( null, null );\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\tthis.setActive( false );\n\t\t};\n\n\t\tvar toolGroup = [\n\t\t\t{\n\t\t\t\tname: 'createschema',\n\t\t\t\ticon: 'add',\n\t\t\t\ttitle: mw.msg( 'visualdata-jsmodule-schemas-create-schema' ),\n\t\t\t\tonSelect: onSelect\n\t\t\t}\n\t\t];\n\t\tVisualDataFunctions.createToolGroup( toolFactory, 'group', toolGroup );\n\n\t\ttoolbar.setup( [\n\t\t\t{\n\t\t\t\tname: 'my-group',\n\t\t\t\t// type: \"bar\",\n\t\t\t\t// label: \"Create property\",\n\t\t\t\tinclude: [ { group: 'group' } ]\n\t\t\t}\n\t\t] );\n\n\t\treturn toolbar;\n\t}\n\n\tfunction initialize() {\n\t\tif ( Config.context === 'ManageSchemas' ) {\n\t\t\t$( '#schemas-wrapper' ).empty();\n\n\t\t\tvar contentFrame = new OO.ui.PanelLayout( {\n\t\t\t\t$content: $(\n\t\t\t\t\t'<table id=\"visualdata-schemas-datatable\" class=\"visualdata-datatable display\" width=\"100%\"></table>'\n\t\t\t\t),\n\t\t\t\texpanded: false,\n\t\t\t\tpadded: true\n\t\t\t} );\n\n\t\t\tvar toolbar = createToolbarA();\n\n\t\t\tvar frame = new OO.ui.PanelLayout( {\n\t\t\t\t$content: [ toolbar.$element, contentFrame.$element ],\n\t\t\t\texpanded: false,\n\t\t\t\tframed: true,\n\t\t\t\tdata: { name: 'manage-schemas' }\n\t\t\t} );\n\n\t\t\t$( '#schemas-wrapper' ).append( frame.$element );\n\n\t\t\ttoolbar.initialize();\n\t\t\ttoolbar.emit( 'updateState' );\n\t\t}\n\n\t\tinitializeDataTable();\n\t}\n\n\tfunction setVars( config, windowManager, schemas, visualDataForms ) {\n\t\tConfig = config;\n\t\tWindowManager = windowManager;\n\t\tSchemas = schemas;\n\t\tVisualDataForms = visualDataForms;\n\n\t\tVisualDataFormFieldInst = new VisualDataFormField(\n\t\t\tconfig,\n\t\t\twindowManager,\n\t\t\tSchemas\n\t\t);\n\t\tVisualDataContentBlockInst = new VisualDataContentBlock(\n\t\t\tconfig,\n\t\t\twindowManager\n\t\t);\n\t\tVisualDataGeolocationInst = new VisualDataGeolocation(\n\t\t\tconfig,\n\t\t\twindowManager\n\t\t);\n\t}\n\n\treturn {\n\t\tinitialize,\n\t\tcreateToolbarA,\n\t\topenDialog,\n\t\tparentSchemaContainer,\n\t\tgetPropertyValue,\n\t\tgetCurrentItem,\n\t\tgetModel,\n\t\thandleSaveArray,\n\t\tgetWidgetValue,\n\t\topenSchemaDialog,\n\t\tsetVars\n\t};\n}() );\n\n$( () => {\n\tvar config = JSON.parse( mw.config.get( 'visualdata-config' ) );\n\t// console.log(\"config\", config);\n\n\tif ( config.context === 'ManageSchemas' ) {\n\t\tvar schemas = JSON.parse( mw.config.get( 'visualdata-schemas' ) );\n\t\t// console.log(\"schemas\", schemas);\n\n\t\tvar windowManager = new VisualDataWindowManager();\n\t\tvar instances = [];\n\t\tVisualData.setVars( config, schemas, instances );\n\n\t\tVisualDataSchemas.setVars(\n\t\t\tconfig,\n\t\t\twindowManager,\n\t\t\tschemas,\n\t\t\tinstances\n\t\t);\n\n\t\tVisualDataSchemas.initialize();\n\t}\n\n} );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataUpload.js","messages":[],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":26,"column":2,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":32,"endColumn":3,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":105,"column":6,"nodeType":"MemberExpression","messageId":"unexpected","endLine":105,"endColumn":19,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[3090,3136],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/VisualDataWindowManager.js","messages":[],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":25,"column":1,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":62,"endColumn":2,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/Widgets/VisualDataButtonMultiselectWidget.js","messages":[{"ruleId":"no-jquery/no-in-array","severity":1,"message":"Prefer Array#indexOf to $.inArray","line":48,"column":12,"nodeType":"CallExpression","endLine":48,"endColumn":59}],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":24,"column":2,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":59,"endColumn":3,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2021-2023, https://wikisphere.org\n */\n\n( function () {\n\t// eslint-disable-next-line no-implicit-globals\n\tVisualDataButtonMultiselectWidget = function ( config ) {\n\t\tconfig = config || {};\n\n\t\tif ( !( 'classes' in config ) ) {\n\t\t\tconfig.classes = [];\n\t\t}\n\n\t\tthis.options = {};\n\t\tfor ( var value of config.options ) {\n\t\t\tthis.options[ [ value.data ] ] = value.label;\n\t\t}\n\n\t\t// ***important, add position: relative to display\n\t\t// property native validation\n\t\tconfig.classes.push( 'visualdata-button-multiselect-widget' );\n\n\t\tVisualDataButtonMultiselectWidget.super.call( this, config );\n\n\t\tvar self = this;\n\t\tthis.items = {};\n\t\tfor ( var i in this.options ) {\n\t\t\tthis.items[ i ] = new OO.ui.ToggleButtonWidget( {\n\t\t\t\tdata: i,\n\t\t\t\tlabel: this.options[ i ],\n\t\t\t\tvalue: $.inArray( this.options[ i ], config.selected ) !== -1\n\t\t\t} );\n\n\t\t\tthis.items[ i ].on( 'change', () => {\n\t\t\t\tself.emit( 'change', self.getValue().join().trim() );\n\t\t\t} );\n\t\t}\n\n\t\tfor ( var i in this.items ) {\n\t\t\tthis.$element.append( this.items[ i ].$element );\n\t\t}\n\t};\n\n\tOO.inheritClass( VisualDataButtonMultiselectWidget, OO.ui.Widget );\n\tOO.mixinClass( VisualDataButtonMultiselectWidget, OO.EventEmitter );\n\n\tVisualDataButtonMultiselectWidget.prototype.getValue = function () {\n\t\tvar ret = [];\n\t\tfor ( var i in this.items ) {\n\t\t\tif ( this.items[ i ].getValue() ) {\n\t\t\t\tret.push( this.options[ i ] );\n\t\t\t}\n\t\t}\n\t\treturn ret;\n\t};\n}() );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/Widgets/VisualDataDropdownWidget.js","messages":[{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":38,"column":7,"nodeType":"VariableDeclarator","endLine":38,"endColumn":71},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":53,"column":7,"nodeType":"VariableDeclarator","endLine":59,"endColumn":21}],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":24,"column":2,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":62,"endColumn":3,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2021-2023, https://wikisphere.org\n */\n\n( function () {\n\t// eslint-disable-next-line no-implicit-globals\n\tVisualDataDropdownWidget = function ( config ) {\n\t\tconfig = config || {};\n\n\t\tif ( !( 'classes' in config ) ) {\n\t\t\tconfig.classes = [];\n\t\t}\n\t\tvar self = this;\n\n\t\tconfig.classes.push( 'visualdata-dropdown-widget' );\n\n\t\tVisualDataDropdownWidget.super.call( this, config );\n\n\t\tvar options = config.options;\n\n\t\tvar select = $( '<select>' ).attr( 'class', 'oo-ui-indicator-down' );\n\t\tfor ( var option of options ) {\n\t\t\tselect.append(\n\t\t\t\t$( '<option>' )\n\t\t\t\t\t.attr( { value: option.data, selected: option.data === config.value } )\n\t\t\t\t\t.text( option.label )\n\t\t\t);\n\t\t}\n\n\t\tthis.select = select;\n\n\t\tselect.on( 'change', () => {\n\t\t\tself.emit( 'change', self.getValue() );\n\t\t} );\n\n\t\tvar div = $( '<div>' )\n\t\t\t.attr(\n\t\t\t\t'class',\n\t\t\t\t'oo-ui-widget oo-ui-widget-enabled oo-ui-inputWidget oo-ui-dropdownInputWidget'\n\t\t\t)\n\n\t\t\t.append( select );\n\n\t\tthis.$element.append( div );\n\t};\n\n\tOO.inheritClass( VisualDataDropdownWidget, OO.ui.Widget );\n\tOO.mixinClass( VisualDataDropdownWidget, OO.EventEmitter );\n\n\tVisualDataDropdownWidget.prototype.getValue = function () {\n\t\treturn this.select.val();\n\t};\n}() );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/Widgets/VisualDataLookupElement.js","messages":[],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":24,"column":2,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":29,"endColumn":3,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":0,"fixableErrorCount":0,"fixableWarningCount":0,"usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/Widgets/VisualDataMaptiler.js","messages":[{"ruleId":"max-len","severity":1,"message":"This line has a length of 119. Maximum allowed is 100.","line":61,"column":1,"nodeType":"Program","messageId":"max","endLine":61,"endColumn":111}],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":26,"column":2,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":31,"endColumn":3,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'config' is defined but never used.","line":26,"column":34,"nodeType":"Identifier","messageId":"unusedVar","endLine":26,"endColumn":40,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'self' is assigned a value but never used.","line":38,"column":7,"nodeType":"Identifier","messageId":"unusedVar","endLine":38,"endColumn":11,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'e' is defined but never used.","line":47,"column":52,"nodeType":"Identifier","messageId":"unusedVar","endLine":47,"endColumn":53,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'res' is defined but never used.","line":82,"column":26,"nodeType":"Identifier","messageId":"unusedVar","endLine":82,"endColumn":29,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'res' is defined but never used.","line":88,"column":40,"nodeType":"Identifier","messageId":"unusedVar","endLine":88,"endColumn":43,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'res' is defined but never used.","line":99,"column":36,"nodeType":"Identifier","messageId":"unusedVar","endLine":99,"endColumn":39,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'res' is defined but never used.","line":103,"column":46,"nodeType":"Identifier","messageId":"unusedVar","endLine":103,"endColumn":49,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'res' is defined but never used.","line":107,"column":46,"nodeType":"Identifier","messageId":"unusedVar","endLine":107,"endColumn":49,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2024, https://wikisphere.org\n */\n\n/* eslint-disable no-unused-vars */\n\n( function () {\n\t// eslint-disable-next-line no-implicit-globals\n\tVisualDataMaptiler = function ( config ) {\n\t\tthis.scripts = [\n\t\t\t'https://cdn.maptiler.com/maptiler-sdk-js/v1.2.0/maptiler-sdk.umd.min.js',\n\t\t\t'https://cdn.maptiler.com/maptiler-geocoding-control/v1.2.0/maptilersdk.umd.js'\n\t\t];\n\t};\n\n\tVisualDataMaptiler.prototype.load = function () {\n\t\tVisualDataFunctions.loadScripts( this.scripts );\n\t};\n\n\tVisualDataMaptiler.prototype.initialize = function ( $element, data ) {\n\t\tvar self = this;\n\n\t\t// *** prevents ajv error \"Maximum call stack size exceeded\"\n\t\tvar config = VisualDataFunctions.deepCopy( data.schema.wiki );\n\t\tvar latInput = data.model.properties.latitude.input;\n\t\tvar lngInput = data.model.properties.longitude.input;\n\t\tvar zoomInput = data.model.properties.zoom.input;\n\t\tvar mapId = 'visualdata-maptiler-map-' + data.path;\n\n\t\tVisualDataFunctions.loadScripts( this.scripts, ( e ) => {\n\t\t\tif ( $( '#' + jQuery.escapeSelector( mapId ) ).length ) {\n\t\t\t\treturn;\n\t\t\t}\n\n\t\t\tmaptilersdk.config.apiKey = mw.config.get( 'visualdata-maptiler-apikey' );\n\t\t\tvar $container = $( '<div style=\"width:100%;height:400px\" id=\"' + mapId + '\" />' );\n\t\t\t$element.append( $container );\n\n\t\t\tconfig[ 'maptiler-map-config' ].container = mapId;\n\t\t\tconfig[ 'maptiler-map-config' ].style = maptilersdk.MapStyle.HYBRID;\n\n\t\t\tvar center = [ parseFloat( lngInput.getValue() ), parseFloat( latInput.getValue() ) ];\n\n\t\t\tvar isValidCenter = !VisualDataFunctions.isNaN( center[ 0 ] ) && !VisualDataFunctions.isNaN( center[ 1 ] );\n\n\t\t\tif ( isValidCenter ) {\n\t\t\t\tconfig[ 'maptiler-map-config' ].center = center;\n\t\t\t\tconfig[ 'maptiler-map-config' ].zoom = parseInt( zoomInput.getValue() );\n\t\t\t\tconfig[ 'maptiler-map-config' ].geolocate = false;\n\n\t\t\t} else {\n\t\t\t\tif ( !( 'geolocate' in config[ 'maptiler-map-config' ] ) ) {\n\t\t\t\t\tconfig[ 'maptiler-map-config' ].geolocate = true;\n\t\t\t\t}\n\t\t\t}\n\n\t\t\tconst map = ( window.map = new maptilersdk.Map( config[ 'maptiler-map-config' ] ) );\n\t\t\tconfig[ 'maptiler-map-config' ].marker = false;\n\n\t\t\tvar marker;\n\n\t\t\tif ( config[ 'reverse-geocoding' ] ) {\n\t\t\t\tconst gc = new maptilersdkMaptilerGeocoder.GeocodingControl( config[ 'maptiler-map-config' ] );\n\n\t\t\t\tmap.on( 'zoomend', ( res ) => {\n\t\t\t\t\t// console.log('zoomend:', res);\n\t\t\t\t\tzoomInput.setValue( map.getZoom() );\n\t\t\t\t} );\n\n\t\t\t\t// https://docs.maptiler.com/sdk-js/modules/geocoding/api/api-reference/#event:featuresListed\n\t\t\t\tgc.addEventListener( 'response', ( res ) => {\n\t\t\t\t\t// console.log(\"response:\", res);\n\t\t\t\t} );\n\n\t\t\t\tgc.addEventListener( 'select', ( res ) => {\n\t\t\t\t\t// console.log(\"select:\", res );\n\t\t\t\t\tif ( res.detail ) {\n\t\t\t\t\t\tmarker.setLngLat( res.detail.center );\n\t\t\t\t\t}\n\t\t\t\t} );\n\n\t\t\t\tgc.addEventListener( 'pick', ( res ) => {\n\t\t\t\t\t// console.log(\"pick:\", res );\n\t\t\t\t} );\n\n\t\t\t\tgc.addEventListener( 'featuresListed', ( res ) => {\n\t\t\t\t\t// console.log(\"featuresListed:\", res);\n\t\t\t\t} );\n\n\t\t\t\tgc.addEventListener( 'featuresMarked', ( res ) => {\n\t\t\t\t\t// console.log(\"featuresMarked:\", res);\n\t\t\t\t} );\n\n\t\t\t\tmap.addControl( gc, 'top-left' );\n\t\t\t}\n\n\t\t\tfunction onDragEnd() {\n\t\t\t\tvar lngLat = marker.getLngLat();\n\t\t\t\tsetTimeout( () => {\n\t\t\t\t\tlngInput.setValue( lngLat.lng );\n\t\t\t\t\tlatInput.setValue( lngLat.lat );\n\t\t\t\t\tzoomInput.setValue( map.getZoom() );\n\t\t\t\t}, 100 );\n\t\t\t}\n\n\t\t\tmap.on( 'load', () => {\n\t\t\t\tif ( !marker ) {\n\t\t\t\t\tmarker = new maptilersdk.Marker( {\n\t\t\t\t\t\tdraggable: true\n\t\t\t\t\t} )\n\t\t\t\t\t\t.setLngLat( map.getCenter() )\n\t\t\t\t\t\t.addTo( map );\n\n\t\t\t\t\tmarker.on( 'dragend', onDragEnd );\n\t\t\t\t}\n\t\t\t} );\n\n\t\t\tif ( isValidCenter ) {\n\t\t\t\tmarker = new maptilersdk.Marker( {\n\t\t\t\t\tdraggable: true\n\t\t\t\t} )\n\t\t\t\t\t.setLngLat( center )\n\t\t\t\t\t.addTo( map );\n\n\t\t\t\tmarker.on( 'dragend', onDragEnd );\n\t\t\t}\n\n\t\t\t// update marker\n\t\t\tdata.model.properties.latitude.input.on( 'change', ( value ) => {\n\t\t\t\tmarker.setLngLat( [ lngInput.getValue(), value ] );\n\t\t\t} );\n\t\t\tdata.model.properties.longitude.input.on( 'change', ( value ) => {\n\t\t\t\tmarker.setLngLat( [ value, latInput.getValue() ] );\n\t\t\t} );\n\n\t\t} );\n\t};\n\n}() );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/Widgets/VisualDataMenuTagSearchMultiselect.js","messages":[{"ruleId":"jsdoc/check-tag-names","severity":1,"message":"Invalid JSDoc tag name \"mixins\".","line":29,"column":1,"nodeType":"Block","endLine":29,"endColumn":1},{"ruleId":"max-len","severity":1,"message":"This line has a length of 110. Maximum allowed is 100.","line":49,"column":1,"nodeType":"Program","messageId":"max","endLine":49,"endColumn":99},{"ruleId":"max-len","severity":1,"message":"This line has a length of 107. Maximum allowed is 100.","line":50,"column":1,"nodeType":"Program","messageId":"max","endLine":50,"endColumn":96}],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":37,"column":2,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":71,"endColumn":3,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2023, https://wikisphere.org\n */\n\n// @credits: mw.widgets.CategoryMultiselectWidget\n\n( function () {\n\t/**\n\t * @class VisualDataMenuTagSearchMultiselect\n\t * @uses mw.Api\n\t * @extends OO.ui.MenuTagMultiselectWidget\n\t * @mixins OO.ui.mixin.PendingElement\n\t *\n\t * @constructor\n\t * @param {Object} [config] Configuration options\n\t * @cfg {number} [limit=10] Maximum number of results to load\n\t */\n\n\t// eslint-disable-next-line no-implicit-globals\n\tVisualDataMenuTagSearchMultiselect = function ( config ) {\n\t\t// Config initialization\n\t\tthis.limit = config.limit;\n\n\t\t// Parent constructor\n\t\tVisualDataMenuTagSearchMultiselect.parent.call(\n\t\t\tthis,\n\t\t\t$.extend( true, {}, config, {\n\t\t\t\tmenu: {\n\t\t\t\t\tfilterFromInput: false\n\t\t\t\t},\n\t\t\t\tplaceholder: mw.msg( 'visualdata-menutagmultiselect-placeholder' ),\n\t\t\t\t// This allows the user to both select non-existent categories, and prevents the selector from\n\t\t\t\t// being wiped from #onMenuItemsChange when we change the available options in the dropdown\n\t\t\t\tallowArbitrary: false\n\t\t\t} )\n\t\t);\n\n\t\t// Mixin constructors\n\t\tOO.ui.mixin.PendingElement.call(\n\t\t\tthis,\n\t\t\tObject.assign( {}, config, { $pending: this.$handle } )\n\t\t);\n\n\t\t// Event handler to call the autocomplete methods\n\t\tthis.input.$input.on(\n\t\t\t'change input cut paste',\n\t\t\tOO.ui.debounce( this.updateMenuItems.bind( this ), 100 )\n\t\t);\n\n\t\t// Initialize\n\t\t// @TODO\n\t\tthis.api = { abort: function () {} }; // config.api || new mw.Api();\n\t\tthis.searchCache = {};\n\t};\n\n\t/* Setup */\n\n\tOO.inheritClass(\n\t\tVisualDataMenuTagSearchMultiselect,\n\t\tOO.ui.MenuTagMultiselectWidget\n\t);\n\tOO.mixinClass(\n\t\tVisualDataMenuTagSearchMultiselect,\n\t\tOO.ui.mixin.PendingElement\n\t);\n\n\t/* Methods */\n\n\t/**\n\t * Gets new items based on the input by calling\n\t * {@link #getNewMenuItems getNewItems} and updates the menu\n\t * after removing duplicates based on the data value.\n\t *\n\t * @private\n\t * @method\n\t */\n\tVisualDataMenuTagSearchMultiselect.prototype.updateMenuItems =\n\t\tfunction () {\n\t\t\tthis.getMenu().clearItems();\n\t\t\tthis.getNewMenuItems( this.input.$input.val() ).then(\n\t\t\t\t( items ) => {\n\t\t\t\t\tvar existingItems,\n\t\t\t\t\t\tmenu = this.getMenu();\n\n\t\t\t\t\t// Never show the menu if the input lost focus in the meantime\n\t\t\t\t\tif ( !this.input.$input.is( ':focus' ) ) {\n\t\t\t\t\t\treturn;\n\t\t\t\t\t}\n\n\t\t\t\t\t// Array of strings of the data of OO.ui.MenuOptionsWidgets\n\t\t\t\t\texistingItems = menu.getItems().map( ( item ) => item.data );\n\n\t\t\t\t\t// Remove if items' data already exists\n\t\t\t\t\tfor ( var i in items ) {\n\t\t\t\t\t\tif ( existingItems.indexOf( i ) !== -1 ) {\n\t\t\t\t\t\t\tdelete items[ i ];\n\t\t\t\t\t\t}\n\t\t\t\t\t}\n\n\t\t\t\t\t// Map to an array of OO.ui.MenuOptionWidgets\n\t\t\t\t\tvar ret = [];\n\t\t\t\t\tfor ( var i in items ) {\n\t\t\t\t\t\tret.push(\n\t\t\t\t\t\t\tnew OO.ui.MenuOptionWidget( {\n\t\t\t\t\t\t\t\tdata: i,\n\t\t\t\t\t\t\t\tlabel: items[ i ]\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t);\n\t\t\t\t\t}\n\n\t\t\t\t\tmenu.addItems( ret ).toggle( true );\n\t\t\t\t}\n\t\t\t);\n\t\t};\n\n\t/**\n\t * @inheritdoc\n\t */\n\tVisualDataMenuTagSearchMultiselect.prototype.clearInput = function () {\n\t\tVisualDataMenuTagSearchMultiselect.parent.prototype.clearInput.call(\n\t\t\tthis\n\t\t);\n\t\t// Abort all pending requests, we won't need their results\n\t\tthis.api.abort();\n\t};\n\n\t/**\n\t * Searches for categories based on the input.\n\t *\n\t * @private\n\t * @method\n\t * @param {string} input The input used to prefix search categories\n\t * @return {jQuery.Promise} Resolves with an array of categories\n\t */\n\tVisualDataMenuTagSearchMultiselect.prototype.getNewMenuItems = function (\n\t\tinput\n\t) {\n\t\tvar deferred = $.Deferred();\n\n\t\tif ( input.trim() === '' ) {\n\t\t\tdeferred.resolve( [] );\n\t\t\treturn deferred.promise();\n\t\t}\n\n\t\t// Abort all pending requests, we won't need their results\n\t\tthis.api.abort();\n\n\t\tthis.pushPending();\n\n\t\treturn this.searchItems( input ).always( this.popPending.bind( this ) );\n\t};\n\n\t/**\n\t * @private\n\t * @method\n\t * @param {string} value The input value\n\t * @return {jQuery.Promise} Resolves with an array of items\n\t */\n\tVisualDataMenuTagSearchMultiselect.prototype.searchItems = function (\n\t\tvalue\n\t) {\n\t\tvar deferred = $.Deferred(),\n\t\t\tcacheKey = value;\n\n\t\t// Check cache\n\t\tif ( cacheKey in this.searchCache ) {\n\t\t\treturn this.searchCache[ cacheKey ];\n\t\t}\n\n\t\tthis.data.performQuery( this.data.model, value ).then( ( data ) => {\n\t\t\tdeferred.resolve( data );\n\t\t} );\n\n\t\t// Cache the result\n\t\tthis.searchCache[ cacheKey ] = deferred.promise();\n\n\t\treturn deferred.promise( { abort: function () {} } );\n\t};\n}() );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/Widgets/VisualDataRatingWidget.js","messages":[{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":38,"column":19,"nodeType":"CallExpression","endLine":38,"endColumn":47},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":45,"column":8,"nodeType":"VariableDeclarator","endLine":51,"endColumn":7},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":67,"column":6,"nodeType":"CallExpression","endLine":69,"endColumn":7}],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":24,"column":2,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":91,"endColumn":3,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"eqeqeq","severity":2,"message":"Expected '===' and instead saw '=='.","line":54,"column":11,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":54,"endColumn":13,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"eqeqeq","severity":2,"message":"Expected '===' and instead saw '=='.","line":64,"column":25,"nodeType":"BinaryExpression","messageId":"unexpected","endLine":64,"endColumn":27,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":3,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2021-2022, https://wikisphere.org\n */\n\n( function () {\n\t// eslint-disable-next-line no-implicit-globals\n\tVisualDataRatingWidget = function ( config ) {\n\t\tconfig = config || {};\n\n\t\tif ( !( 'classes' in config ) ) {\n\t\t\tconfig.classes = [];\n\t\t}\n\n\t\t// ***important, add position: relative to display\n\t\t// property native validation\n\t\tconfig.classes.push( 'visualdata-rating-widget' );\n\n\t\tVisualDataRatingWidget.super.call( this, config );\n\n\t\t// @see https://iamkate.com/code/star-rating-widget/\n\t\tvar $fieldset = $( ' <div class=\"rating\">' );\n\n\t\tthis.$input = $fieldset;\n\n\t\tvar self = this;\n\t\tthis.isChecked = 0;\n\t\tfor ( var i = 1; i < 6; i++ ) {\n\t\t\tvar input = $( '<input>' ).attr( {\n\t\t\t\ttype: 'radio',\n\t\t\t\tvalue: i,\n\t\t\t\tid: 'rating-' + i,\n\t\t\t\tname: config.name,\n\t\t\t\t'data-i': i\n\t\t\t} );\n\n\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\tif ( i == config.value ) {\n\t\t\t\tinput.prop( 'checked', true );\n\t\t\t\tthis.isChecked = i;\n\t\t\t}\n\n\t\t\t// uncheck the radio button if\n\t\t\t// alread selected, and check the previous one\n\t\t\tinput.on( 'click', function () {\n\t\t\t\tvar ii = $( this ).data( 'i' );\n\t\t\t\t// eslint-disable-next-line eqeqeq\n\t\t\t\tif ( self.isChecked == ii ) {\n\t\t\t\t\tself.isChecked = ii - 1;\n\t\t\t\t\t$( this ).prop( 'checked', false );\n\t\t\t\t\t$(\n\t\t\t\t\t\t\":input[name='\" + config.name + \"'][data-i='\" + ( ii - 1 ) + \"']\"\n\t\t\t\t\t).prop( 'checked', true );\n\t\t\t\t} else {\n\t\t\t\t\tself.isChecked = ii;\n\t\t\t\t}\n\n\t\t\t\tself.emit( 'change', self.getValue() );\n\n\t\t\t} );\n\n\t\t\t$fieldset.append( [\n\t\t\t\tinput,\n\t\t\t\t$( '<label>' ).attr( {\n\t\t\t\t\tfor: 'rating-' + i\n\t\t\t\t} )\n\t\t\t] );\n\t\t}\n\n\t\tthis.getValue = function () {\n\t\t\treturn this.isChecked ? String( this.isChecked ) : '';\n\t\t};\n\n\t\tthis.$element.append( $fieldset );\n\t};\n\n\tOO.inheritClass( VisualDataRatingWidget, OO.ui.Widget );\n\tOO.mixinClass( VisualDataRatingWidget, OO.EventEmitter );\n}() );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/Widgets/VisualDataTinyMCE.js","messages":[{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":38,"column":3,"nodeType":"AssignmentExpression","endLine":40,"endColumn":34},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":38,"column":19,"nodeType":"CallExpression","endLine":38,"endColumn":45}],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":26,"column":2,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":72,"endColumn":3,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'e' is defined but never used.","line":54,"column":61,"nodeType":"Identifier","messageId":"unusedVar","endLine":54,"endColumn":62,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":2,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2024, https://wikisphere.org\n */\n\n/* eslint-disable no-unused-vars */\n\n( function () {\n\t// eslint-disable-next-line no-implicit-globals\n\tVisualDataTinyMCE = function ( config ) {\n\t\tconfig = config || {};\n\t\tif ( !( 'classes' in config ) ) {\n\t\t\tconfig.classes = [];\n\t\t}\n\t\tvar self = this;\n\t\tthis.config = config;\n\n\t\tVisualDataTinyMCE.super.call( this, config );\n\n\t\tthis.textareaId = 'visualdata-tinimce-' + config.data.model.path;\n\n\t\tthis.textarea = $( '<textarea rows=\"8\">' )\n\t\t\t.attr( 'name', config.name )\n\t\t\t.attr( 'id', this.textareaId );\n\n\t\tthis.text = this.config.value || '';\n\t\tthis.textarea.val( this.text );\n\n\t\tthis.$element.append( this.textarea );\n\n\t\tvar mw_extensionAssetsPath = mw.config.get( 'wgExtensionAssetsPath' );\n\t\tvar basePath = mw_extensionAssetsPath + '/VisualData/resources/tinymce';\n\n\t\tthis.scripts = [\n\t\t\tbasePath + '/tinymce.min.js'\n\t\t];\n\n\t\tVisualDataFunctions.loadScripts( this.scripts, function ( e ) {\n\t\t\tthis.tinymce = tinymce.init( {\n\t\t\t\tbase_url: basePath,\n\t\t\t\tstatusbar: false,\n\t\t\t\tselector: '#' + jQuery.escapeSelector( self.textareaId ),\n\t\t\t\tobject_resizing: true,\n\t\t\t\tallow_html_in_named_anchor: true,\n\t\t\t\tbrowser_spellcheck: true,\n\t\t\t\tautomatic_uploads: true,\n\t\t\t\tpaste_data_images: true,\n\t\t\t\tshowPlaceholders: false,\n\t\t\t\tdecodeHtmlEntitiesOnInput: false,\n\t\t\t\tauto_focus: true,\n\t\t\t\tvisual: false\n\t\t\t\t// license_key: 'gpl|<your-license-key>'\n\t\t\t} );\n\n\t\t} );\n\t};\n\n\tOO.inheritClass( VisualDataTinyMCE, OO.ui.Widget );\n\tOO.mixinClass( VisualDataTinyMCE, OO.EventEmitter );\n\n\tVisualDataTinyMCE.prototype.getValue = function () {\n\t\tvar editor = tinymce.get( this.textareaId );\n\t\treturn editor.getContent( this.textareaId );\n\t};\n}() );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/Widgets/VisualDataVisualEditor.js","messages":[{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":40,"column":3,"nodeType":"AssignmentExpression","endLine":42,"endColumn":47},{"ruleId":"no-jquery/no-parse-html-literal","severity":1,"message":"Prefer DOM building to parsing HTML literals","line":40,"column":19,"nodeType":"CallExpression","endLine":40,"endColumn":45},{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":47,"column":3,"nodeType":"AssignmentExpression","endLine":47,"endColumn":69},{"ruleId":"no-jquery/no-sizzle","severity":1,"message":"Selector extensions are not allowed","line":53,"column":9,"nodeType":"CallExpression","endLine":53,"endColumn":48}],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":27,"column":2,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":57,"endColumn":3,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":37,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":37,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":73,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":73,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":76,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":76,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":79,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":79,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":80,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":80,"endColumn":9,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":81,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":81,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":82,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":82,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":85,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":85,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":89,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":89,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":90,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":90,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":91,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":91,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":92,"column":7,"nodeType":"Program","messageId":"unexpectedTab","endLine":92,"endColumn":8,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'reject' is defined but never used.","line":105,"column":38,"nodeType":"Identifier","messageId":"unusedVar","endLine":105,"endColumn":44,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'reject' is defined but never used.","line":109,"column":49,"nodeType":"Identifier","messageId":"unusedVar","endLine":109,"endColumn":55,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'e' is defined but never used.","line":110,"column":47,"nodeType":"Identifier","messageId":"unusedVar","endLine":110,"endColumn":48,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-return-assign","severity":2,"message":"Return statement should not contain assignment.","line":146,"column":5,"nodeType":"ReturnStatement","messageId":"returnAssignment","endLine":146,"endColumn":40,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":160,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":160,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-unused-vars","severity":2,"message":"'reject' is defined but never used.","line":163,"column":34,"nodeType":"Identifier","messageId":"unusedVar","endLine":163,"endColumn":40,"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":4,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2023, https://wikisphere.org\n */\n\n/* eslint-disable no-tabs */\n/* eslint-disable no-unused-vars */\n\n( function () {\n\t// eslint-disable-next-line no-implicit-globals\n\tVisualDataVisualEditor = function ( config ) {\n\t\tconfig = config || {};\n\t\tif ( !( 'classes' in config ) ) {\n\t\t\tconfig.classes = [];\n\t\t}\n\t\tvar self = this;\n\t\tthis.config = config;\n\n\t\t// @FIXME only allows wikitext for now\n\t\t// this.isHtml =\n\t\t// \t\"contentModel\" in this.config && this.config.contentModel === \"html\";\n\t\tVisualDataVisualEditor.super.call( this, config );\n\n\t\tthis.textarea = $( '<textarea rows=\"8\">' )\n\t\t\t.attr( 'name', config.name )\n\t\t\t.attr( 'class', 'visualdata toolbarOnTop' );\n\n\t\tthis.text = this.config.value || '';\n\t\tthis.textarea.val( this.text );\n\n\t\tthis.VEInstance = $( '<span>' ).attr( 'class', 've-area-wrapper' );\n\t\tthis.$element.append( this.VEInstance.append( this.textarea ) );\n\t\tthis.Editor = null;\n\t\tthis.initialized = false;\n\n\t\tsetTimeout( () => {\n\t\t\tif ( self.$element.parent().is( ':visible' ) ) {\n\t\t\t\tself.initialize();\n\t\t\t}\n\t\t}, 50 );\n\t};\n\n\tOO.inheritClass( VisualDataVisualEditor, OO.ui.Widget );\n\tOO.mixinClass( VisualDataVisualEditor, OO.EventEmitter );\n\n\t// @see https://github.com/Open-CSP/FlexForm/blob/main/Modules/FlexForm.general.js\n\tVisualDataVisualEditor.prototype.initialize = async function () {\n\t\tif ( this.initialized ) {\n\t\t\treturn;\n\t\t}\n\t\tthis.destroyEditor();\n\t\tvar self = this;\n\t\tself.initialized = true;\n\n\t\tthis.loadVEForAll().then( () => {\n\t\t\t// if (!self.isHtml) {\n\t\t\t// \treturn;\n\t\t\t// }\n\t\t\t// var callbackCond = function () {\n\t\t\t// \treturn self.getEditor();\n\t\t\t// };\n\t\t\t// var callback = function (resolve, reject) {\n\t\t\t// \tsetTimeout(function() {\n\t\t\t// \t\tself.getEditor().createWithHtmlContent(self.text);\n\t\t\t// \t}, 100);\n\t\t\t// \tresolve();\n\t\t\t// };\n\t\t\t// var callbackMaxAttempts = function (resolve, reject) {\n\t\t\t// \treject();\n\t\t\t// };\n\n\t\t\t// VisualDataFunctions.waitUntil(\n\t\t\t// \tcallbackCond,\n\t\t\t// \tcallback,\n\t\t\t// \tcallbackMaxAttempts,\n\t\t\t// \t8\n\t\t\t// );\n\t\t} );\n\t};\n\n\t// @see https://github.com/Open-CSP/FlexForm/blob/main/Modules/FlexForm.general.js\n\tVisualDataVisualEditor.prototype.loadVEForAll = async function () {\n\t\tvar self = this;\n\n\t\tvar callbackCond = function () {\n\t\t\treturn typeof $().applyVisualEditor === 'function';\n\t\t};\n\n\t\tvar callback = function ( resolve, reject ) {\n\t\t\tself.textarea.applyVisualEditor();\n\t\t\tresolve();\n\t\t};\n\t\tvar callbackMaxAttempts = function ( resolve, reject ) {\n\t\t\tjQuery( document ).on( 'VEForAllLoaded', ( e ) => {\n\t\t\t\tself.textarea.applyVisualEditor();\n\t\t\t\tresolve();\n\t\t\t} );\n\t\t};\n\n\t\treturn VisualDataFunctions.waitUntil(\n\t\t\tcallbackCond,\n\t\t\tcallback,\n\t\t\tcallbackMaxAttempts,\n\t\t\t5\n\t\t);\n\t};\n\n\tVisualDataVisualEditor.prototype.destroyEditor = function () {\n\t\tif ( typeof $.fn.getVEInstances === 'function' ) {\n\t\t\tvar visualEditors = $.fn.getVEInstances();\n\t\t\tfor ( var i in visualEditors ) {\n\t\t\t\tvar editor = visualEditors[ i ];\n\t\t\t\tif ( $( editor.$node ).attr( 'name' ) === this.config.name ) {\n\t\t\t\t\teditor.destroy();\n\t\t\t\t\tvisualEditors.splice( i, 1 );\n\t\t\t\t}\n\t\t\t}\n\t\t}\n\t};\n\n\t// @see PageForms PF_submit.js\n\tVisualDataVisualEditor.prototype.getEditor = function () {\n\t\tif ( this.Editor ) {\n\t\t\treturn this.Editor;\n\t\t}\n\t\tvar visualEditors = $.fn.getVEInstances();\n\t\tfor ( var editor of visualEditors ) {\n\t\t\tif ( $( editor.$node ).attr( 'name' ) === this.config.name ) {\n\t\t\t\t// eslint-disable-next-line no-return-assign\n\t\t\t\treturn this.Editor = editor.target;\n\t\t\t}\n\t\t}\n\t};\n\n\tVisualDataVisualEditor.prototype.getValue = function () {\n\t\tvar self = this;\n\t\tvar editor = this.getEditor();\n\n\t\tif ( !this.initialized || !editor ) {\n\t\t\treturn this.textarea.val();\n\t\t}\n\n\t\t// if (this.isHtml) {\n\t\t// \treturn VisualDataFunctions.decodeHTMLEntities( editor.getSurface().getHtml() );\n\t\t// }\n\n\t\treturn new Promise( ( resolve, reject ) => {\n\t\t\t$.when( editor.updateContent() ).then( () => {\n\t\t\t\t// @see ext.veforall.target.js\n\t\t\t\t// *** sometimes convertToWikiText is not called\n\t\t\t\t// based on focus\n\t\t\t\teditor.$node.addClass( 've-for-all-waiting-for-update' );\n\n\t\t\t\tresolve( self.textarea.val() );\n\t\t\t} );\n\t\t} );\n\t};\n}() );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]},{"filePath":"/src/repo/resources/Widgets/VisualDataintlTelInput.js","messages":[{"ruleId":"no-jquery/variable-pattern","severity":1,"message":"jQuery collection names must match the variablePattern","line":38,"column":7,"nodeType":"VariableDeclarator","endLine":43,"endColumn":6}],"suppressedMessages":[{"ruleId":"no-implicit-globals","severity":2,"message":"Global variable leak, declare the variable if it is intended to be local.","line":26,"column":2,"nodeType":"AssignmentExpression","messageId":"globalVariableLeak","endLine":89,"endColumn":3,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":51,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":51,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-tabs","severity":2,"message":"Unexpected tab character.","line":52,"column":6,"nodeType":"Program","messageId":"unexpectedTab","endLine":52,"endColumn":7,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"new-cap","severity":2,"message":"A constructor name should not start with a lowercase letter.","line":171,"column":25,"nodeType":"NewExpression","messageId":"lower","endLine":171,"endColumn":37,"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":181,"column":7,"nodeType":"MemberExpression","messageId":"unexpected","endLine":181,"endColumn":20,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[4946,5008],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]},{"ruleId":"no-console","severity":2,"message":"Unexpected console statement.","line":190,"column":7,"nodeType":"MemberExpression","messageId":"unexpected","endLine":190,"endColumn":20,"suggestions":[{"messageId":"removeConsole","data":{"propertyName":"error"},"fix":{"range":[5211,5264],"text":""},"desc":"Remove the console.error()."}],"suppressions":[{"kind":"directive","justification":""}]}],"errorCount":0,"fatalErrorCount":0,"warningCount":1,"fixableErrorCount":0,"fixableWarningCount":0,"source":"/**\n * This file is part of the MediaWiki extension VisualData.\n *\n * VisualData is free software: you can redistribute it and/or modify\n * it under the terms of the GNU General Public License as published by\n * the Free Software Foundation, either version 2 of the License, or\n * (at your option) any later version.\n *\n * VisualData is distributed in the hope that it will be useful,\n * but WITHOUT ANY WARRANTY; without even the implied warranty of\n * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\n * GNU General Public License for more details.\n *\n * You should have received a copy of the GNU General Public License\n * along with VisualData. If not, see <http://www.gnu.org/licenses/>.\n *\n * @file\n * @author thomas-topway-it <support@topway.it>\n * @copyright Copyright © 2021-2023, https://wikisphere.org\n */\n\n/* eslint-disable no-tabs */\n\n( function () {\n\t// eslint-disable-next-line no-implicit-globals\n\tVisualDataIntlTelInput = function ( config ) {\n\t\tVisualDataIntlTelInput.super.call( this, config );\n\n\t\tvar self = this;\n\t\tthis.config = config;\n\n\t\t// https://github.com/jackocnr/intl-tel-input/tree/master?tab=readme-ov-file\n\t\tif ( 'nationalMode' in this.config && this.config.nationalMode === true ) {\n\t\t\tthis.config.showFlags = false;\n\t\t\tthis.config.allowDropdown = false;\n\t\t}\n\n\t\tvar input = $( '<input>' ).attr( {\n\t\t\ttype: 'tel',\n\t\t\tname: config.name,\n\t\t\tvalue: config.value,\n\t\t\tclass: 'oo-ui-inputWidget-input'\n\t\t} );\n\n\t\tthis.input = input;\n\n\t\t// required when handled by OO.ui.TagMultiselectWidget -> inputWidget: inputWidget\n\t\tthis.$input = input;\n\n\t\t// input.on(\"input\", function () {\n\t\t// \tself.config.value = self.input.val();\n\t\t// \tself.emit(\"change\", self.config.value);\n\t\t// });\n\n\t\tinput.on( 'blur', () => {\n\t\t\tself.formatNumber();\n\t\t} );\n\n\t\tthis.$element = $( '<div>' )\n\t\t\t.attr(\n\t\t\t\t'class',\n\t\t\t\t'oo-ui-widget oo-ui-widget-enabled oo-ui-inputWidget oo-ui-textInputWidget oo-ui-textInputWidget-type-text'\n\t\t\t)\n\t\t\t.append( input );\n\n\t\tself.fixConfigCountries( config );\n\n\t\tself.iti = window.intlTelInput(\n\t\t\tinput.get( 0 ),\n\t\t\tObject.assign(\n\t\t\t\t{\n\t\t\t\t\tutilsScript:\n\t\t\t\t\t\t'https://cdn.jsdelivr.net/npm/intl-tel-input@18.3.3/build/js/utils.js',\n\t\t\t\t\tinitialCountry: 'auto',\n\t\t\t\t\tgeoIpLookup: function ( callback ) {\n\t\t\t\t\t\tfetch( 'https://ipapi.co/json' )\n\t\t\t\t\t\t\t.then( ( res ) => res.json() )\n\t\t\t\t\t\t\t.then( ( data ) => {\n\t\t\t\t\t\t\t\tcallback( data.country_code );\n\t\t\t\t\t\t\t} )\n\t\t\t\t\t\t\t.catch( () => {\n\t\t\t\t\t\t\t\tcallback( 'us' );\n\t\t\t\t\t\t\t} );\n\t\t\t\t\t}\n\t\t\t\t},\n\t\t\t\tconfig\n\t\t\t)\n\t\t);\n\t};\n\n\tOO.inheritClass( VisualDataIntlTelInput, OO.ui.Widget );\n\tOO.mixinClass( VisualDataIntlTelInput, OO.EventEmitter );\n\n\tVisualDataIntlTelInput.prototype.formatNumber = function () {\n\t\t// https://github.com/jackocnr/intl-tel-input/blob/master/src/js/utils.js#L109\n\t\tvar numberFormat = intlTelInputUtils.numberFormat.E164;\n\t\tif ( 'nationalMode' in this.config && this.config.nationalMode === true ) {\n\t\t\tnumberFormat = intlTelInputUtils.numberFormat.NATIONAL;\n\t\t}\n\n\t\tif ( typeof this.iti === 'object' && typeof intlTelInputUtils === 'object' ) {\n\t\t\tthis.setValue(\n\t\t\t\tthis.iti.getNumber( numberFormat )\n\t\t\t);\n\t\t}\n\t};\n\n\tVisualDataIntlTelInput.prototype.validateFunc = async function () {\n\t\tif ( this.getValue().trim() === '' ) {\n\t\t\treturn true;\n\t\t}\n\n\t\tif ( !this.iti.isPossibleNumber() ) {\n\t\t\t// https://github.com/jackocnr/intl-tel-input/blob/master/src/js/utils.js#L148\n\t\t\tvar error = this.iti.getValidationError();\n\t\t\tvar msg = '';\n\t\t\tswitch ( error ) {\n\t\t\t\tcase 1:\n\t\t\t\t\tmsg = 'invalid country code';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 2:\n\t\t\t\t\tmsg = 'too short';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 3:\n\t\t\t\t\tmsg = 'too long';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 4:\n\t\t\t\t\tmsg = 'is possible local only';\n\t\t\t\t\tbreak;\n\t\t\t\tcase 5:\n\t\t\t\t\tmsg = 'invalid length';\n\t\t\t\t\tbreak;\n\t\t\t}\n\n\t\t\treturn 'wrong number' + ( msg ? `: ${ msg }` : '' );\n\t\t}\n\n\t\treturn true;\n\t};\n\n\tVisualDataIntlTelInput.prototype.getValue = function () {\n\t\tthis.formatNumber();\n\t\t// return this.config.value;\n\t\treturn this.input.val();\n\t};\n\n\tVisualDataIntlTelInput.prototype.setValue = function ( value ) {\n\t\t// this.config.value = value;\n\t\tthis.input.val( value );\n\t};\n\n\tVisualDataIntlTelInput.prototype.fixConfigCountries = function ( config ) {\n\t\t// excludeCountries, initialCountry, onlyCountries, preferredCountries\n\t\tvar configCountries = [\n\t\t\t'excludeCountries',\n\t\t\t'initialCountry',\n\t\t\t'onlyCountries',\n\t\t\t'preferredCountries'\n\t\t];\n\n\t\tif (\n\t\t\t!Object.keys( config ).filter( ( x ) => configCountries.indexOf( x ) !== -1 )\n\t\t\t\t.length\n\t\t) {\n\t\t\treturn;\n\t\t}\n\n\t\t// first get all countries to handle the error\n\t\t// \"No country data for ... \"\n\t\t// eslint-disable-next-line new-cap\n\t\tvar iso2 = new window.intlTelInput( this.input.get( 0 ) ).countries.map(\n\t\t\t( x ) => x.iso2\n\t\t);\n\n\t\tfor ( var i of configCountries ) {\n\t\t\tif ( i in config ) {\n\t\t\t\tif ( i === 'initialCountry' ) {\n\t\t\t\t\tconfig[ i ] = config[ i ].toLowerCase();\n\t\t\t\t\tif ( iso2.indexOf( config[ i ] ) === -1 ) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error( config[ i ] + ' is not a valid country code' );\n\t\t\t\t\t\tdelete config[ i ];\n\t\t\t\t\t}\n\t\t\t\t\tcontinue;\n\t\t\t\t}\n\t\t\t\tvar values = [];\n\t\t\t\tfor ( var ii of config[ i ] ) {\n\t\t\t\t\tif ( iso2.indexOf( ii ) === -1 ) {\n\t\t\t\t\t\t// eslint-disable-next-line no-console\n\t\t\t\t\t\tconsole.error( ii + ' is not a valid country code' );\n\t\t\t\t\t\tvalues.splice( ii, 1 );\n\t\t\t\t\t}\n\t\t\t\t}\n\t\t\t\tconfig[ i ] = values;\n\t\t\t}\n\t\t}\n\t};\n}() );\n","usedDeprecatedRules":[{"ruleId":"max-len","replacedBy":[]},{"ruleId":"arrow-parens","replacedBy":[]},{"ruleId":"arrow-spacing","replacedBy":[]},{"ruleId":"lines-between-class-members","replacedBy":[]},{"ruleId":"no-new-require","replacedBy":[]},{"ruleId":"template-curly-spacing","replacedBy":[]},{"ruleId":"implicit-arrow-linebreak","replacedBy":[]},{"ruleId":"array-bracket-spacing","replacedBy":[]},{"ruleId":"block-spacing","replacedBy":[]},{"ruleId":"brace-style","replacedBy":[]},{"ruleId":"comma-dangle","replacedBy":[]},{"ruleId":"comma-spacing","replacedBy":[]},{"ruleId":"comma-style","replacedBy":[]},{"ruleId":"computed-property-spacing","replacedBy":[]},{"ruleId":"dot-location","replacedBy":[]},{"ruleId":"eol-last","replacedBy":[]},{"ruleId":"func-call-spacing","replacedBy":[]},{"ruleId":"indent","replacedBy":[]},{"ruleId":"key-spacing","replacedBy":[]},{"ruleId":"keyword-spacing","replacedBy":[]},{"ruleId":"linebreak-style","replacedBy":[]},{"ruleId":"max-statements-per-line","replacedBy":[]},{"ruleId":"new-parens","replacedBy":[]},{"ruleId":"no-floating-decimal","replacedBy":[]},{"ruleId":"no-multi-spaces","replacedBy":[]},{"ruleId":"no-multiple-empty-lines","replacedBy":[]},{"ruleId":"no-new-object","replacedBy":["no-object-constructor"]},{"ruleId":"no-tabs","replacedBy":[]},{"ruleId":"no-trailing-spaces","replacedBy":[]},{"ruleId":"no-whitespace-before-property","replacedBy":[]},{"ruleId":"object-curly-spacing","replacedBy":[]},{"ruleId":"operator-linebreak","replacedBy":[]},{"ruleId":"quote-props","replacedBy":[]},{"ruleId":"quotes","replacedBy":[]},{"ruleId":"semi","replacedBy":[]},{"ruleId":"semi-spacing","replacedBy":[]},{"ruleId":"semi-style","replacedBy":[]},{"ruleId":"space-before-blocks","replacedBy":[]},{"ruleId":"space-before-function-paren","replacedBy":[]},{"ruleId":"space-in-parens","replacedBy":[]},{"ruleId":"space-infix-ops","replacedBy":[]},{"ruleId":"space-unary-ops","replacedBy":[]},{"ruleId":"spaced-comment","replacedBy":[]},{"ruleId":"switch-colon-spacing","replacedBy":[]},{"ruleId":"wrap-iife","replacedBy":[]},{"ruleId":"no-extra-semi","replacedBy":[]},{"ruleId":"no-mixed-spaces-and-tabs","replacedBy":[]}]}] --- end --- Failed to parse a 'banana' section from Gruntfile.js $ ./node_modules/.bin/grunt stylelint --- stdout --- Running "stylelint:all" (stylelint) task >> Linted 3 files without errors Done. --- end --- $ /usr/bin/npm ci --- stderr --- npm WARN deprecated @humanwhocodes/config-array@0.11.14: Use @eslint/config-array instead npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead --- stdout --- added 419 packages, and audited 420 packages in 5s 90 packages are looking for funding run `npm fund` for details found 0 vulnerabilities --- end --- $ /usr/bin/npm test --- stdout --- > test > grunt test Running "eslint:all" (eslint) task /src/repo/resources/VersionCheck.js 57:22 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector 62:18 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 65:9 warning Where possible, maintain application state in JS to avoid slower DOM queries no-jquery/no-class-state /src/repo/resources/VisualDataDatatables.js 45:2 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector 48:7 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern /src/repo/resources/VisualDataFormField.js 1082:4 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector /src/repo/resources/VisualDataForms.js 71:6 warning Selector extensions are not allowed no-jquery/no-sizzle 80:1 warning This line has a length of 106. Maximum allowed is 100 max-len 209:5 warning Selector extensions are not allowed no-jquery/no-sizzle 408:1 warning This line has a length of 110. Maximum allowed is 100 max-len 510:1 warning This line has a length of 117. Maximum allowed is 100 max-len 527:1 warning This line has a length of 131. Maximum allowed is 100 max-len 1362:26 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1430:6 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1433:7 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1436:7 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1465:7 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1468:8 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1471:8 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 2097:5 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 2254:1 warning This line has a length of 107. Maximum allowed is 100 max-len 2396:1 warning This line has a length of 109. Maximum allowed is 100 max-len 2726:1 warning This line has a length of 102. Maximum allowed is 100 max-len 2744:7 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 2918:1 warning This line has a length of 102. Maximum allowed is 100 max-len 3042:10 warning Selector extensions are not allowed no-jquery/no-sizzle 3122:1 warning This line has a length of 108. Maximum allowed is 100 max-len 3127:1 warning This line has a length of 105. Maximum allowed is 100 max-len 3347:15 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 3371:1 warning This line has a length of 119. Maximum allowed is 100 max-len 3418:3 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector /src/repo/resources/VisualDataInputConfig.js 838:1 warning This line has a length of 110. Maximum allowed is 100 max-len /src/repo/resources/VisualDataProcessModel.js 159:11 warning Selector extensions are not allowed no-jquery/no-sizzle /src/repo/resources/VisualDataSchemas.js 327:1 warning This line has a length of 103. Maximum allowed is 100 max-len 1496:15 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector 1671:4 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector 1674:15 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 1690:4 warning Avoid queries which search the entire DOM. Keep DOM nodes in memory where possible no-jquery/no-global-selector /src/repo/resources/Widgets/VisualDataButtonMultiselectWidget.js 48:12 warning Prefer Array#indexOf to $.inArray no-jquery/no-in-array /src/repo/resources/Widgets/VisualDataDropdownWidget.js 38:7 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 53:7 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern /src/repo/resources/Widgets/VisualDataMaptiler.js 61:1 warning This line has a length of 119. Maximum allowed is 100 max-len /src/repo/resources/Widgets/VisualDataMenuTagSearchMultiselect.js 29:1 warning Invalid JSDoc tag name "mixins" jsdoc/check-tag-names 49:1 warning This line has a length of 110. Maximum allowed is 100 max-len 50:1 warning This line has a length of 107. Maximum allowed is 100 max-len /src/repo/resources/Widgets/VisualDataRatingWidget.js 38:19 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 45:8 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 67:6 warning Selector extensions are not allowed no-jquery/no-sizzle /src/repo/resources/Widgets/VisualDataTinyMCE.js 38:3 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 38:19 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal /src/repo/resources/Widgets/VisualDataVisualEditor.js 40:3 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 40:19 warning Prefer DOM building to parsing HTML literals no-jquery/no-parse-html-literal 47:3 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern 53:9 warning Selector extensions are not allowed no-jquery/no-sizzle /src/repo/resources/Widgets/VisualDataintlTelInput.js 38:7 warning jQuery collection names must match the variablePattern no-jquery/variable-pattern ✖ 55 problems (0 errors, 55 warnings) Running "stylelint:all" (stylelint) task >> Linted 3 files without errors Running "banana:VisualData" (banana) task >> 1 message directory checked. Done. --- end --- Upgrading c:mediawiki/minus-x from 1.1.1 -> 1.1.3 Upgrading c:php-parallel-lint/php-parallel-lint from 1.3.2 -> 1.4.0 $ /usr/bin/composer update --- stderr --- Loading composer repositories with package information Updating dependencies Lock file operations: 0 installs, 4 updates, 1 removal - Removing symfony/polyfill-php73 (v1.30.0) - Upgrading mediawiki/minus-x (1.1.1 => 1.1.3) - Upgrading php-parallel-lint/php-parallel-lint (v1.3.2 => v1.4.0) - Upgrading symfony/console (v5.4.41 => v7.1.2) - Upgrading symfony/string (v6.4.9 => v7.1.2) Writing lock file Installing dependencies from lock file (including require-dev) Package operations: 0 installs, 4 updates, 1 removal 0 [>---------------------------] 0 [->--------------------------] - Removing symfony/polyfill-php73 (v1.30.0) - Upgrading symfony/string (v6.4.9 => v7.1.2): Extracting archive - Upgrading symfony/console (v5.4.41 => v7.1.2): Extracting archive - Upgrading mediawiki/minus-x (1.1.1 => 1.1.3): Extracting archive - Upgrading php-parallel-lint/php-parallel-lint (v1.3.2 => v1.4.0): Extracting archive 0/4 [>---------------------------] 0% 4/4 [============================] 100% Generating autoload files 13 packages you are using are looking for funding. Use the `composer fund` command to find out more! No security vulnerability advisories found --- stdout --- --- end --- $ /usr/bin/composer install --- stderr --- Installing dependencies from lock file (including require-dev) Verifying lock file contents can be installed on current platform. Nothing to install, update or remove Generating autoload files 13 packages you are using are looking for funding. Use the `composer fund` command to find out more! --- stdout --- --- end --- $ /usr/bin/composer test --- stderr --- > parallel-lint . --exclude vendor --exclude node_modules > minus-x check . > phpcs -sp --cache --- stdout --- PHP 8.2.7 | 10 parallel jobs .................................................... 52/52 (100%) Checked 52 files in 0.3 seconds No syntax error found MinusX ====== Processing /src/repo... ............................................................. ............................................................. ............................................................. ............................................................. ........... All good! .................................................... 52 / 52 (100%) Time: 392ms; Memory: 10MB --- end --- $ /usr/bin/npm audit --json --- stdout --- { "auditReportVersion": 2, "vulnerabilities": {}, "metadata": { "vulnerabilities": { "info": 0, "low": 0, "moderate": 0, "high": 0, "critical": 0, "total": 0 }, "dependencies": { "prod": 1, "dev": 419, "optional": 0, "peer": 1, "peerOptional": 0, "total": 419 } } } --- end --- $ package-lock-lint package-lock.json --- stdout --- Checking package-lock.json --- end --- build: Updating dependencies composer: * mediawiki/minus-x: 1.1.1 → 1.1.3 * php-parallel-lint/php-parallel-lint: 1.3.2 → 1.4.0 npm: * eslint-config-wikimedia: 0.26.0 → 0.28.2 * grunt-banana-checker: 0.11.1 → 0.13.0 * grunt-stylelint: 0.19.0 → 0.20.1 * stylelint-config-wikimedia: 0.16.1 → 0.17.2 $ git add . --- stdout --- --- end --- $ git commit -F /tmp/tmpegdvhrsa --- stdout --- [master a2c2907] build: Updating dependencies 23 files changed, 1855 insertions(+), 2236 deletions(-) --- end --- $ git format-patch HEAD~1 --stdout --- stdout --- From a2c2907929f919d4db79c4f4a987bdbd9a5bcc79 Mon Sep 17 00:00:00 2001 From: libraryupgrader <tools.libraryupgrader@tools.wmflabs.org> Date: Wed, 24 Jul 2024 04:28:02 +0000 Subject: [PATCH] build: Updating dependencies MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit composer: * mediawiki/minus-x: 1.1.1 → 1.1.3 * php-parallel-lint/php-parallel-lint: 1.3.2 → 1.4.0 npm: * eslint-config-wikimedia: 0.26.0 → 0.28.2 * grunt-banana-checker: 0.11.1 → 0.13.0 * grunt-stylelint: 0.19.0 → 0.20.1 * stylelint-config-wikimedia: 0.16.1 → 0.17.2 Change-Id: Iaef420a5dc5d163dc24adc2629516f52e519bf9a --- composer.json | 4 +- package-lock.json | 3689 ++++++++--------- package.json | 8 +- resources/VersionCheck.js | 6 +- resources/VisualData.js | 14 +- resources/VisualDataContentBlock.js | 10 +- resources/VisualDataDatatables.js | 2 +- resources/VisualDataFormField.js | 45 +- resources/VisualDataForms.js | 116 +- resources/VisualDataFunctions.js | 14 +- resources/VisualDataGeolocation.js | 14 +- resources/VisualDataInputConfig.js | 30 +- resources/VisualDataProcessModel.js | 5 +- resources/VisualDataSchemas.js | 58 +- resources/VisualDataUpload.js | 30 +- resources/VisualDataWindowManager.js | 1 - .../VisualDataButtonMultiselectWidget.js | 2 +- resources/Widgets/VisualDataDropdownWidget.js | 2 +- resources/Widgets/VisualDataMaptiler.js | 10 +- .../VisualDataMenuTagSearchMultiselect.js | 10 +- resources/Widgets/VisualDataTinyMCE.js | 1 - resources/Widgets/VisualDataVisualEditor.js | 8 +- resources/Widgets/VisualDataintlTelInput.js | 12 +- 23 files changed, 1855 insertions(+), 2236 deletions(-) diff --git a/composer.json b/composer.json index 65986e5..8a49490 100644 --- a/composer.json +++ b/composer.json @@ -1,9 +1,9 @@ { "require-dev": { "mediawiki/mediawiki-codesniffer": "43.0.0", - "mediawiki/minus-x": "1.1.1", + "mediawiki/minus-x": "1.1.3", "php-parallel-lint/php-console-highlighter": "1.0.0", - "php-parallel-lint/php-parallel-lint": "1.3.2" + "php-parallel-lint/php-parallel-lint": "1.4.0" }, "scripts": { "test": [ diff --git a/package-lock.json b/package-lock.json index 7fffced..cfbd8cb 100644 --- a/package-lock.json +++ b/package-lock.json @@ -6,12 +6,12 @@ "": { "name": "VisualData", "devDependencies": { - "eslint-config-wikimedia": "0.26.0", + "eslint-config-wikimedia": "0.28.2", "grunt": "1.6.1", - "grunt-banana-checker": "0.11.1", + "grunt-banana-checker": "0.13.0", "grunt-eslint": "24.3.0", - "grunt-stylelint": "0.19.0", - "stylelint-config-wikimedia": "0.16.1" + "grunt-stylelint": "0.20.1", + "stylelint-config-wikimedia": "0.17.2" } }, "node_modules/@aashutoshrathi/word-wrap": { @@ -24,107 +24,37 @@ } }, "node_modules/@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", "dev": true, "dependencies": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" } }, - "node_modules/@babel/code-frame/node_modules/ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "dependencies": { - "color-convert": "^1.9.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "dependencies": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - }, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "dependencies": { - "color-name": "1.1.3" - } - }, - "node_modules/@babel/code-frame/node_modules/color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "node_modules/@babel/code-frame/node_modules/escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true, - "engines": { - "node": ">=0.8.0" - } - }, - "node_modules/@babel/code-frame/node_modules/has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true, - "engines": { - "node": ">=4" - } - }, - "node_modules/@babel/code-frame/node_modules/supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "dependencies": { - "has-flag": "^3.0.0" - }, - "engines": { - "node": ">=4" - } - }, "node_modules/@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "engines": { "node": ">=6.9.0" @@ -202,9 +132,9 @@ } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.4.0.tgz", - "integrity": "sha512-/PPLr2g5PAUCKAPEbfyk6/baZA+WJHQtUhPkoCQMpyRE8I0lXrG1QFRN8e5s3ZYxM8d/g5BZc6lH3s8Op7/VEg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "funding": [ { @@ -220,13 +150,13 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-tokenizer": "^2.2.2" + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/css-tokenizer": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.2.tgz", - "integrity": "sha512-wCDUe/MAw7npAHFLyW3QjSyLA66S5QFaV1jIXlNQvdJ8RzXDSgALa49eWcUO6P55ARQaz0TsDdAgdRgkXFYY8g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true, "funding": [ { @@ -243,9 +173,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.6.tgz", - "integrity": "sha512-R6AKl9vaU0It7D7TR2lQn0pre5aQfdeqHRePlaRCY8rHL3l9eVlNRpsEVDKFi/zAjzv68CxH2M5kqbhPFPKjvw==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "funding": [ { @@ -261,14 +191,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.4.0", - "@csstools/css-tokenizer": "^2.2.2" + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1" } }, "node_modules/@csstools/selector-specificity": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz", - "integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", + "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", "dev": true, "funding": [ { @@ -287,18 +217,31 @@ "postcss-selector-parser": "^6.0.13" } }, + "node_modules/@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true, + "funding": { + "type": "github", + "url": "https://github.com/sponsors/wooorm" + } + }, "node_modules/@es-joy/jsdoccomment": { - "version": "0.37.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz", - "integrity": "sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==", + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz", + "integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==", "dev": true, "dependencies": { - "comment-parser": "1.3.1", + "@types/eslint": "^8.56.5", + "@types/estree": "^1.0.5", + "@typescript-eslint/types": "^7.2.0", + "comment-parser": "1.4.1", "esquery": "^1.5.0", "jsdoc-type-pratt-parser": "~4.0.0" }, "engines": { - "node": "^14 || ^16 || ^17 || ^18 || ^19 || ^20" + "node": ">=16" } }, "node_modules/@eslint-community/eslint-utils": { @@ -317,9 +260,9 @@ } }, "node_modules/@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true, "engines": { "node": "^12.0.0 || ^14.0.0 || >=16.0.0" @@ -349,22 +292,23 @@ } }, "node_modules/@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true, "engines": { "node": "^12.22.0 || ^14.17.0 || >=16.0.0" } }, "node_modules/@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", + "deprecated": "Use @eslint/config-array instead", "dev": true, "dependencies": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" }, "engines": { @@ -385,9 +329,10 @@ } }, "node_modules/@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", + "deprecated": "Use @eslint/object-schema instead", "dev": true }, "node_modules/@mdn/browser-compat-data": { @@ -431,6 +376,68 @@ "node": ">= 8" } }, + "node_modules/@stylistic/stylelint-config": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-1.0.1.tgz", + "integrity": "sha512-JgFP88HZEyo34k9RpWVdcQJtLPrMxYE58IO3qypXhmvE/NmZohj+xjDtQ8UfaarnYsLecnldw57/GHum07Ctdw==", + "dev": true, + "dependencies": { + "@stylistic/stylelint-plugin": "^2.0.0" + }, + "engines": { + "node": "^18.12 || >=20.9" + }, + "peerDependencies": { + "stylelint": "^16.0.2" + } + }, + "node_modules/@stylistic/stylelint-plugin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-2.0.0.tgz", + "integrity": "sha512-dHKuT6PGd1WGZLOTuozAM7GdQzdmlmnFXYzvV1jYJXXpcCpV/OJ3+n8TXpMkoOeKHpJydY43EOoZTO1W/FOA4Q==", + "dev": true, + "dependencies": { + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5", + "is-plain-object": "^5.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "style-search": "^0.1.0", + "stylelint": "^16.0.2" + }, + "engines": { + "node": "^18.12 || >=20.9" + }, + "peerDependencies": { + "stylelint": "^16.0.2" + } + }, + "node_modules/@stylistic/stylelint-plugin/node_modules/is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/@types/eslint": { + "version": "8.56.11", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", + "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", + "dev": true, + "dependencies": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "node_modules/@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "node_modules/@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -443,35 +450,23 @@ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, - "node_modules/@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, "node_modules/@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, - "node_modules/@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true - }, "node_modules/@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", + "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -479,12 +474,12 @@ } }, "node_modules/@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", + "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", "dev": true, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -492,21 +487,22 @@ } }, "node_modules/@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", + "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -518,65 +514,63 @@ } } }, - "node_modules/@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/typescript-eslint" - }, - "peerDependencies": { - "eslint": "^6.0.0 || ^7.0.0 || ^8.0.0" + "balanced-match": "^1.0.0" } }, - "node_modules/@typescript-eslint/utils/node_modules/eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "node_modules/@typescript-eslint/typescript-estree/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=8.0.0" + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" } }, - "node_modules/@typescript-eslint/utils/node_modules/estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", + "node_modules/@typescript-eslint/utils": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", + "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", "dev": true, + "dependencies": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.17.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/typescript-estree": "7.17.0" + }, "engines": { - "node": ">=4.0" + "node": "^18.18.0 || >=20.0.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/typescript-eslint" + }, + "peerDependencies": { + "eslint": "^8.56.0" } }, "node_modules/@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", + "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", "dev": true, "dependencies": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "7.17.0", + "eslint-visitor-keys": "^3.4.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || >=20.0.0" }, "funding": { "type": "opencollective", @@ -596,9 +590,9 @@ "dev": true }, "node_modules/acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true, "bin": { "acorn": "bin/acorn" @@ -708,12 +702,12 @@ } }, "node_modules/arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=8" } }, "node_modules/ast-metadata-inferer": { @@ -763,21 +757,21 @@ } }, "node_modules/braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "dependencies": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" }, "engines": { "node": ">=8" } }, "node_modules/browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "funding": [ { @@ -794,10 +788,10 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.1.0" }, "bin": { "browserslist": "cli.js" @@ -807,9 +801,9 @@ } }, "node_modules/browserslist-config-wikimedia": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.1.tgz", - "integrity": "sha512-jf532fUf/gaxiKdHgGCQUT552P5up3RpG+CzLixOQBJ5FwDmYQSRLYHCFUA9s3KMOHh4P3xVp+NUaGNxvtoT9g==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz", + "integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==", "dev": true }, "node_modules/builtin-modules": { @@ -824,15 +818,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "dependencies": { - "semver": "^7.0.0" - } - }, "node_modules/callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", @@ -842,52 +827,10 @@ "node": ">=6" } }, - "node_modules/camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "dependencies": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/camelcase-keys/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", "dev": true, "funding": [ { @@ -921,9 +864,9 @@ } }, "node_modules/ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", "dev": true, "funding": [ { @@ -957,14 +900,17 @@ } }, "node_modules/cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "dependencies": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" } }, "node_modules/color-convert": { @@ -1001,9 +947,9 @@ } }, "node_modules/comment-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", - "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true, "engines": { "node": ">= 12.0.0" @@ -1015,6 +961,19 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "node_modules/core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dev": true, + "dependencies": { + "browserslist": "^4.23.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/core-js" + } + }, "node_modules/core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -1022,15 +981,15 @@ "dev": true }, "node_modules/cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "dependencies": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" }, "engines": { "node": ">=14" @@ -1062,51 +1021,14 @@ } }, "node_modules/css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true, "engines": { "node": ">=12 || >=16" } }, - "node_modules/css-rule-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha512-qiio/Zkr8I19jh/XuzEkK8OKDQRTrEYaRyIHy4Bwh/tPUe0w8GcQs7r6x24Yc9lT+FbnZFYULxEIXCmaymguUQ==", - "dev": true, - "dependencies": { - "css-tokenize": "^1.0.1", - "duplexer2": "0.0.2", - "ldjson-stream": "^1.2.1", - "through2": "^0.6.3" - }, - "bin": { - "css-rule-stream": "index.js" - } - }, - "node_modules/css-rule-stream/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/css-rule-stream/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, "node_modules/css-tokenize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", @@ -1152,9 +1074,9 @@ } }, "node_modules/debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "dependencies": { "ms": "2.1.2" @@ -1168,65 +1090,19 @@ } } }, - "node_modules/decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", + "node_modules/deep-is": { + "version": "0.1.4", + "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", + "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", + "dev": true + }, + "node_modules/detect-file": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", + "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", "dev": true, "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "dependencies": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "engines": { - "node": ">=0.10.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/decamelize-keys/node_modules/decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/decamelize-keys/node_modules/map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, - "node_modules/deep-is": { - "version": "0.1.4", - "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", - "integrity": "sha512-oIPzksmTg4/MriiaYGO+okXDT7ztn/w3Eptv/+gSIdMdKsJo0u4CfYNFJPy+4SKMuCqGw2wxnA+URMg3t8a/bQ==", - "dev": true - }, - "node_modules/detect-file": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/detect-file/-/detect-file-1.0.0.tgz", - "integrity": "sha512-DtCOLG98P007x7wiiOmfI0fi3eIKyWiLTGJ2MDnVi/E04lWGbf+JzrRHMm0rgIIZJGtHpKpbVgLWHrv8xXpc3Q==", - "dev": true, - "engines": { - "node": ">=0.10.0" + "node": ">=0.10.0" } }, "node_modules/dir-glob": { @@ -1254,27 +1130,26 @@ } }, "node_modules/doiuse": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-4.4.1.tgz", - "integrity": "sha512-TUpr1/YNg20IB09tZmwGCTsTQoxj8jUld/hUZprZMj8vj0VpAJySXEWCr8WMvqvgzk0/kG/FxeSMGKode4UjPg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-6.0.2.tgz", + "integrity": "sha512-eBTs23NOX+EAYPr4RbCR6J4DRW/TML3uMo37y0X1whlkersDYFCk9HmCl09KX98cis22VKsV1QaxfVNauJ3NBw==", "dev": true, "dependencies": { - "browserslist": "^4.16.1", - "caniuse-lite": "^1.0.30001179", - "css-rule-stream": "^1.1.0", - "duplexer2": "0.0.2", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001487", + "css-tokenize": "^1.0.1", + "duplexify": "^4.1.2", "ldjson-stream": "^1.2.1", "multimatch": "^5.0.0", - "postcss": "^8.2.4", - "source-map": "^0.7.3", - "through2": "^4.0.2", - "yargs": "^16.2.0" + "postcss": "^8.4.21", + "source-map": "^0.7.4", + "yargs": "^17.7.1" }, "bin": { - "doiuse": "cli.js" + "doiuse": "bin/cli.js" }, "engines": { - "node": ">=10" + "node": ">=16" } }, "node_modules/dom-serializer": { @@ -1332,19 +1207,45 @@ "url": "https://github.com/fb55/domutils?sponsor=1" } }, - "node_modules/duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", + "node_modules/duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", + "dev": true, + "dependencies": { + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + } + }, + "node_modules/duplexify/node_modules/readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "dependencies": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/duplexify/node_modules/string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", "dev": true, "dependencies": { - "readable-stream": "~1.1.9" + "safe-buffer": "~5.2.0" } }, "node_modules/electron-to-chromium": { - "version": "1.4.615", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", - "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", + "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", "dev": true }, "node_modules/emoji-regex": { @@ -1353,6 +1254,28 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "node_modules/end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "dependencies": { + "once": "^1.4.0" + } + }, + "node_modules/enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "dependencies": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + }, + "engines": { + "node": ">=10.13.0" + } + }, "node_modules/entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", @@ -1365,6 +1288,15 @@ "url": "https://github.com/fb55/entities?sponsor=1" } }, + "node_modules/env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -1375,9 +1307,9 @@ } }, "node_modules/escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true, "engines": { "node": ">=6" @@ -1396,16 +1328,16 @@ } }, "node_modules/eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -1451,10 +1383,13 @@ } }, "node_modules/eslint-compat-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", - "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, + "dependencies": { + "semver": "^7.5.4" + }, "engines": { "node": ">=12" }, @@ -1463,28 +1398,28 @@ } }, "node_modules/eslint-config-wikimedia": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.26.0.tgz", - "integrity": "sha512-TAXTySls9k3oWs754rIjlcd9PBLvYeMvjqjiuU8u4gweu0UDgBJGslf+zcvVNXEooAtyLZdENjrzDDjG8ssS7Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz", + "integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==", "dev": true, "dependencies": { - "browserslist-config-wikimedia": "^0.5.1", - "eslint": "^8.53.0", + "browserslist-config-wikimedia": "^0.7.0", + "eslint": "^8.57.0", "eslint-plugin-compat": "^4.2.0", - "eslint-plugin-es-x": "^7.3.0", - "eslint-plugin-jest": "^27.6.0", - "eslint-plugin-jsdoc": "^42.0.0", - "eslint-plugin-json-es": "^1.5.7", - "eslint-plugin-mediawiki": "^0.5.0", - "eslint-plugin-mocha": "^10.2.0", - "eslint-plugin-n": "^16.0.1", - "eslint-plugin-no-jquery": "^2.7.0", - "eslint-plugin-qunit": "^7.3.4", + "eslint-plugin-es-x": "^7.6.0", + "eslint-plugin-jest": "^28.5.0", + "eslint-plugin-jsdoc": "48.2.5", + "eslint-plugin-json-es": "^1.6.0", + "eslint-plugin-mediawiki": "^0.7.0", + "eslint-plugin-mocha": "^10.4.3", + "eslint-plugin-n": "^17.7.0", + "eslint-plugin-no-jquery": "^3.0.1", + "eslint-plugin-qunit": "^8.1.1", "eslint-plugin-security": "^1.7.1", - "eslint-plugin-unicorn": "^47.0.0", - "eslint-plugin-vue": "^9.18.1", - "eslint-plugin-wdio": "^7.19.4", - "eslint-plugin-yml": "^1.10.0" + "eslint-plugin-unicorn": "^53.0.0", + "eslint-plugin-vue": "^9.26.0", + "eslint-plugin-wdio": "^8.24.12", + "eslint-plugin-yml": "^1.14.0" } }, "node_modules/eslint-plugin-compat": { @@ -1509,39 +1444,40 @@ } }, "node_modules/eslint-plugin-es-x": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", - "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, + "funding": [ + "https://github.com/sponsors/ota-meshi", + "https://opencollective.com/eslint" + ], "dependencies": { "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0", - "eslint-compat-utils": "^0.1.2" + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" }, "engines": { "node": "^14.18.0 || >=16.0.0" }, - "funding": { - "url": "https://github.com/sponsors/ota-meshi" - }, "peerDependencies": { "eslint": ">=8" } }, "node_modules/eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "version": "28.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", + "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", "dev": true, "dependencies": { - "@typescript-eslint/utils": "^5.10.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" }, "engines": { - "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + "node": "^16.10.0 || ^18.12.0 || >=20.0.0" }, "peerDependencies": { - "@typescript-eslint/eslint-plugin": "^5.0.0 || ^6.0.0", - "eslint": "^7.0.0 || ^8.0.0", + "@typescript-eslint/eslint-plugin": "^6.0.0 || ^7.0.0", + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0", "jest": "*" }, "peerDependenciesMeta": { @@ -1554,31 +1490,32 @@ } }, "node_modules/eslint-plugin-jsdoc": { - "version": "42.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-42.0.0.tgz", - "integrity": "sha512-qXYr45G8atPKowZbIOdmABukMzu9IMjAlj6j5Fe0iuUItznWSXUDiBj57ejXcbt8bkPrg83333nuz+cqGKFgcQ==", + "version": "48.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.5.tgz", + "integrity": "sha512-ZeTfKV474W1N9niWfawpwsXGu+ZoMXu4417eBROX31d7ZuOk8zyG66SO77DpJ2+A9Wa2scw/jRqBPnnQo7VbcQ==", "dev": true, "dependencies": { - "@es-joy/jsdoccomment": "~0.37.0", + "@es-joy/jsdoccomment": "~0.43.0", "are-docs-informative": "^0.0.2", - "comment-parser": "1.3.1", + "comment-parser": "1.4.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.5.0", - "semver": "^7.3.8", - "spdx-expression-parse": "^3.0.1" + "is-builtin-module": "^3.2.1", + "semver": "^7.6.1", + "spdx-expression-parse": "^4.0.0" }, "engines": { - "node": "^14 || ^16 || ^17 || ^18 || ^19" + "node": ">=18" }, "peerDependencies": { - "eslint": "^7.0.0 || ^8.0.0" + "eslint": "^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-json-es": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz", - "integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.6.0.tgz", + "integrity": "sha512-xVn6hufGQH1Aa+yqOhQ43Cq28GuitTcMpQh+uaUh27U2qnVLBrvkN+2xQSnv6zpdLEPS35JCNhq4kvhR+PQCgw==", "dev": true, "dependencies": { "eslint-visitor-keys": "^3.3.0", @@ -1589,125 +1526,116 @@ } }, "node_modules/eslint-plugin-mediawiki": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.5.0.tgz", - "integrity": "sha512-rjkHFyv3VDan/dmu7YpD1Rl9h64NOlz4mqqesRN316R+571+ymmb6lXVOdNMbT8H1iPhmtHc+nijVLVkn7pYDw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.7.0.tgz", + "integrity": "sha512-1Y2nsFDPp96xOZCB5ivZAgqYe9i6w2u64VoCIaAzPyZnd/2h8VQR3CtD+u4Yk/KrpbKq9AAJjrs5LS8VAz6KOA==", "dev": true, "dependencies": { - "eslint-plugin-vue": "^8.7.1", + "eslint-plugin-vue": "^9.23.0", "upath": "^2.0.1" }, "peerDependencies": { "eslint": ">=5.0.0" } }, - "node_modules/eslint-plugin-mediawiki/node_modules/eslint-plugin-vue": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz", - "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==", + "node_modules/eslint-plugin-mocha": { + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.3.tgz", + "integrity": "sha512-emc4TVjq5Ht0/upR+psftuz6IBG5q279p+1dSRDeHf+NS9aaerBi3lXKo1SEzwC29hFIW21gO89CEWSvRsi8IQ==", "dev": true, "dependencies": { "eslint-utils": "^3.0.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.0.1", - "postcss-selector-parser": "^6.0.9", - "semver": "^7.3.5", - "vue-eslint-parser": "^8.0.1" + "globals": "^13.24.0", + "rambda": "^7.4.0" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": ">=14.0.0" }, "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + "eslint": ">=7.0.0" } }, - "node_modules/eslint-plugin-mediawiki/node_modules/vue-eslint-parser": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", - "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==", + "node_modules/eslint-plugin-n": { + "version": "17.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.9.0.tgz", + "integrity": "sha512-CPSaXDXdrT4nsrOrO4mT4VB6FMUkoySRkHWuuJJHVqsIEjIeZgMY1H7AzSwPbDScikBmLN82KeM1u7ixV7PzGg==", "dev": true, "dependencies": { - "debug": "^4.3.2", - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.5" + "@eslint-community/eslint-utils": "^4.4.0", + "enhanced-resolve": "^5.17.0", + "eslint-plugin-es-x": "^7.5.0", + "get-tsconfig": "^4.7.0", + "globals": "^15.0.0", + "ignore": "^5.2.4", + "minimatch": "^9.0.0", + "semver": "^7.5.3" }, "engines": { - "node": "^12.22.0 || ^14.17.0 || >=16.0.0" + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" + "url": "https://opencollective.com/eslint" }, "peerDependencies": { - "eslint": ">=6.0.0" + "eslint": ">=8.23.0" } }, - "node_modules/eslint-plugin-mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.2.0.tgz", - "integrity": "sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ==", + "node_modules/eslint-plugin-n/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "dependencies": { - "eslint-utils": "^3.0.0", - "rambda": "^7.4.0" - }, + "balanced-match": "^1.0.0" + } + }, + "node_modules/eslint-plugin-n/node_modules/globals": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.8.0.tgz", + "integrity": "sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==", + "dev": true, "engines": { - "node": ">=14.0.0" + "node": ">=18" }, - "peerDependencies": { - "eslint": ">=7.0.0" + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/eslint-plugin-n": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.5.0.tgz", - "integrity": "sha512-Hw02Bj1QrZIlKyj471Tb1jSReTl4ghIMHGuBGiMVmw+s0jOPbI4CBuYpGbZr+tdQ+VAvSK6FDSta3J4ib/SKHQ==", + "node_modules/eslint-plugin-n/node_modules/minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", "dev": true, "dependencies": { - "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", - "eslint-plugin-es-x": "^7.5.0", - "get-tsconfig": "^4.7.0", - "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", - "semver": "^7.5.3" + "brace-expansion": "^2.0.1" }, "engines": { - "node": ">=16.0.0" + "node": ">=16 || 14 >=14.17" }, "funding": { - "url": "https://github.com/sponsors/mysticatea" - }, - "peerDependencies": { - "eslint": ">=7.0.0" + "url": "https://github.com/sponsors/isaacs" } }, "node_modules/eslint-plugin-no-jquery": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz", - "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz", + "integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==", "dev": true, "peerDependencies": { - "eslint": ">=2.3.0" + "eslint": ">=8.0.0" } }, "node_modules/eslint-plugin-qunit": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.3.4.tgz", - "integrity": "sha512-EbDM0zJerH9zVdUswMJpcFF7wrrpvsGuYfNexUpa5hZkkdFhaFcX+yD+RSK4Nrauw4psMGlcqeWUMhaVo+Manw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-8.1.1.tgz", + "integrity": "sha512-j3xhiAf2Wvr8Dfwl5T6tlJ+F55vqYE9ZdAHUOTzq1lGerYrXzOS46RvK4SSWug2D8sl3ZYr2lA4/hgVXgLloxw==", "dev": true, "dependencies": { "eslint-utils": "^3.0.0", "requireindex": "^1.2.0" }, "engines": { - "node": "12.x || 14.x || >=16.0.0" + "node": "^16.0.0 || ^18.0.0 || >=20.0.0" } }, "node_modules/eslint-plugin-security": { @@ -1720,76 +1648,141 @@ } }, "node_modules/eslint-plugin-unicorn": { - "version": "47.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz", - "integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==", + "version": "53.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-53.0.0.tgz", + "integrity": "sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==", "dev": true, "dependencies": { - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-validator-identifier": "^7.24.5", "@eslint-community/eslint-utils": "^4.4.0", - "ci-info": "^3.8.0", + "@eslint/eslintrc": "^3.0.2", + "ci-info": "^4.0.0", "clean-regexp": "^1.0.0", + "core-js-compat": "^3.37.0", "esquery": "^1.5.0", "indent-string": "^4.0.0", "is-builtin-module": "^3.2.1", "jsesc": "^3.0.2", - "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.24", + "regexp-tree": "^0.1.27", "regjsparser": "^0.10.0", - "safe-regex": "^2.1.1", - "semver": "^7.3.8", + "semver": "^7.6.1", "strip-indent": "^3.0.0" }, "engines": { - "node": ">=16" + "node": ">=18.18" }, "funding": { "url": "https://github.com/sindresorhus/eslint-plugin-unicorn?sponsor=1" }, "peerDependencies": { - "eslint": ">=8.38.0" + "eslint": ">=8.56.0" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "dependencies": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "dependencies": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + }, + "engines": { + "node": "^18.18.0 || ^20.9.0 || >=21.1.0" + }, + "funding": { + "url": "https://opencollective.com/eslint" + } + }, + "node_modules/eslint-plugin-unicorn/node_modules/globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true, + "engines": { + "node": ">=18" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" } }, "node_modules/eslint-plugin-vue": { - "version": "9.19.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz", - "integrity": "sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", + "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", "dev": true, "dependencies": { "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.13", - "semver": "^7.5.4", - "vue-eslint-parser": "^9.3.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", + "vue-eslint-parser": "^9.4.3", "xml-name-validator": "^4.0.0" }, "engines": { "node": "^14.17.0 || >=16.0.0" }, "peerDependencies": { - "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0" + "eslint": "^6.2.0 || ^7.0.0 || ^8.0.0 || ^9.0.0" } }, "node_modules/eslint-plugin-wdio": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.25.3.tgz", - "integrity": "sha512-2zbYwV14Md9FNlyhaIILVGPB6w4bu2eJdOTywDUs2Qy4ebcQNwrxB0qCaf7Rm4O+T0Ir+tdYHYBBfbDocSLKng==", + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-8.37.0.tgz", + "integrity": "sha512-X217zXxSqj1IPWu3bxN7D/xEUmNk7Jg5lBf2JwYH3mCogaqL2tnHZnwt0EQ5D9oEejfEl2+4zqHSzhXq1X7F2A==", "dev": true, "engines": { - "node": ">=12.0.0" + "node": "^16.13 || >=18" } }, "node_modules/eslint-plugin-yml": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.11.0.tgz", - "integrity": "sha512-NBZP1NDGy0u38pY5ieix75jxS9GNOJy9xd4gQa0rU4gWbfEsVhKDwuFaQ6RJpDbv6Lq5TtcAZS/YnAc0oeRw0w==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.14.0.tgz", + "integrity": "sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==", "dev": true, "dependencies": { "debug": "^4.3.2", - "eslint-compat-utils": "^0.1.1", + "eslint-compat-utils": "^0.5.0", "lodash": "^4.17.21", "natural-compare": "^1.4.0", "yaml-eslint-parser": "^1.2.1" @@ -2010,6 +2003,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "node_modules/fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, "node_modules/fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -2041,9 +2040,9 @@ } }, "node_modules/fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "dependencies": { "to-regex-range": "^5.0.1" @@ -2123,9 +2122,9 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "node_modules/for-in": { @@ -2174,9 +2173,9 @@ } }, "node_modules/get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", + "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", "dev": true, "dependencies": { "resolve-pkg-maps": "^1.0.0" @@ -2309,6 +2308,12 @@ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, + "node_modules/graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "node_modules/graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -2343,15 +2348,18 @@ } }, "node_modules/grunt-banana-checker": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.1.tgz", - "integrity": "sha512-CF0h/TXaX9sbF2yIz+fUfJc4Zvms7XGYQ7ZYMD5+vv0LMZzSFf7JSHXDaBEs72nQWw4r4ap5fOW3baAliW+0bQ==", + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.13.0.tgz", + "integrity": "sha512-uAUKILcP69Q4OJHHV2wzxqVaoXB8G3Uh/XuSJLn0Bk/9+WiUY/Q4+OX7dUhrPPeDZPtoGh37qqJLVvZlDTUecg==", "dev": true, + "dependencies": { + "chalk": "4.1.2" + }, "bin": { "banana-checker": "src/cli.js" }, "engines": { - "node": ">=8" + "node": ">=16" } }, "node_modules/grunt-cli": { @@ -2461,18 +2469,18 @@ } }, "node_modules/grunt-stylelint": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.19.0.tgz", - "integrity": "sha512-td+OvkfQ/2bYXNTBAlnpXmfa6sddLSloXRp1zoUONcMScbvEq5S3GSkOZKpCjK90WSjTYR0L7WYFcMVd1TXd+w==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz", + "integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==", "dev": true, "dependencies": { "chalk": "^4.1.2" }, "engines": { - "node": ">=16" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "15.x" + "stylelint": "16.x" } }, "node_modules/grunt/node_modules/argparse": { @@ -2515,15 +2523,6 @@ "integrity": "sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==", "dev": true }, - "node_modules/hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true, - "engines": { - "node": ">=6" - } - }, "node_modules/has-flag": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", @@ -2616,9 +2615,9 @@ } }, "node_modules/ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true, "engines": { "node": ">= 4" @@ -2640,15 +2639,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -2789,15 +2779,6 @@ "node": ">=8" } }, - "node_modules/is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true, - "engines": { - "node": ">=0.10.0" - } - }, "node_modules/is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -2946,11 +2927,10 @@ } }, "node_modules/known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true, - "peer": true + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", + "dev": true }, "node_modules/ldjson-stream": { "version": "1.2.1", @@ -2962,28 +2942,6 @@ "through2": "^0.6.1" } }, - "node_modules/ldjson-stream/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/ldjson-stream/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, "node_modules/levn": { "version": "0.4.1", "resolved": "https://registry.npmjs.org/levn/-/levn-0.4.1.tgz", @@ -3076,18 +3034,6 @@ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, - "node_modules/lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "dependencies": { - "yallist": "^4.0.0" - }, - "engines": { - "node": ">=10" - } - }, "node_modules/make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -3109,18 +3055,6 @@ "node": ">=0.10.0" } }, - "node_modules/map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true, - "engines": { - "node": ">=8" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -3138,100 +3072,12 @@ "dev": true }, "node_modules/meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "dependencies": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "engines": { - "node": "^12.20.0 || ^14.13.1 || >=16.0.0" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "dependencies": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - }, - "engines": { - "node": ">=10" - } - }, - "node_modules/meow/node_modules/read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "dependencies": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "dependencies": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/meow/node_modules/type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", "dev": true, "engines": { - "node": ">=10" + "node": ">=18" }, "funding": { "url": "https://github.com/sponsors/sindresorhus" @@ -3247,12 +3093,12 @@ } }, "node_modules/micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "dependencies": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" }, "engines": { @@ -3280,20 +3126,6 @@ "node": "*" } }, - "node_modules/minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "dependencies": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - }, - "engines": { - "node": ">= 6" - } - }, "node_modules/ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -3319,15 +3151,6 @@ "url": "https://github.com/sponsors/sindresorhus" } }, - "node_modules/multimatch/node_modules/arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true, - "engines": { - "node": ">=8" - } - }, "node_modules/nanoid": { "version": "3.3.7", "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", @@ -3662,9 +3485,9 @@ } }, "node_modules/picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "node_modules/picomatch": { @@ -3689,9 +3512,9 @@ } }, "node_modules/postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "dev": true, "funding": [ { @@ -3709,17 +3532,17 @@ ], "dependencies": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" }, "engines": { "node": "^10 || ^12 || >=14" } }, "node_modules/postcss-html": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.5.0.tgz", - "integrity": "sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.6.0.tgz", + "integrity": "sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==", "dev": true, "dependencies": { "htmlparser2": "^8.0.0", @@ -3732,11 +3555,27 @@ } }, "node_modules/postcss-html/node_modules/js-tokens": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.2.tgz", - "integrity": "sha512-Olnt+V7xYdvGze9YTbGFZIfQXuGV4R3nQwwl8BrtgaPE/wq8UFpUHWuTNc05saowhSr1ZO6tx+V6RjE9D5YQog==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", + "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", "dev": true }, + "node_modules/postcss-html/node_modules/postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.3.3" + } + }, "node_modules/postcss-less": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/postcss-less/-/postcss-less-6.0.0.tgz", @@ -3749,12 +3588,6 @@ "postcss": "^8.3.5" } }, - "node_modules/postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, "node_modules/postcss-resolve-nested-selector": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", @@ -3762,25 +3595,35 @@ "dev": true }, "node_modules/postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", + "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss-safe-parser" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], "engines": { - "node": ">=12.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/postcss/" + "node": ">=18.0" }, "peerDependencies": { - "postcss": "^8.3.3" + "postcss": "^8.4.31" } }, "node_modules/postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, "dependencies": { "cssesc": "^3.0.0", @@ -3834,18 +3677,6 @@ } ] }, - "node_modules/quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true, - "engines": { - "node": ">=10" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/rambda": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", @@ -3978,49 +3809,6 @@ "node": ">= 0.10" } }, - "node_modules/redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "dependencies": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/redent/node_modules/strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "dependencies": { - "min-indent": "^1.0.1" - }, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, "node_modules/regexp-tree": { "version": "0.1.27", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", @@ -4210,13 +3998,10 @@ "dev": true }, "node_modules/semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", "dev": true, - "dependencies": { - "lru-cache": "^6.0.0" - }, "bin": { "semver": "bin/semver.js" }, @@ -4293,9 +4078,9 @@ } }, "node_modules/source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true, "engines": { "node": ">=0.10.0" @@ -4311,16 +4096,26 @@ "spdx-license-ids": "^3.0.0" } }, + "node_modules/spdx-correct/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "node_modules/spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "dependencies": { "spdx-exceptions": "^2.1.0", @@ -4328,9 +4123,9 @@ } }, "node_modules/spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, "node_modules/split2": { @@ -4342,34 +4137,18 @@ "through2": "~0.6.1" } }, - "node_modules/split2/node_modules/readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "dependencies": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "node_modules/split2/node_modules/through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "dependencies": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - }, "node_modules/sprintf-js": { "version": "1.1.3", "resolved": "https://registry.npmjs.org/sprintf-js/-/sprintf-js-1.1.3.tgz", "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true }, + "node_modules/stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true + }, "node_modules/string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -4433,105 +4212,141 @@ "dev": true }, "node_modules/stylelint": { - "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.7.0.tgz", + "integrity": "sha512-Q1ATiXlz+wYr37a7TGsfvqYn2nSR3T/isw3IWlZQzFzCNoACHuGBb6xBplZXz56/uDRJHIygxjh7jbV/8isewA==", "dev": true, - "peer": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/stylelint" + }, + { + "type": "github", + "url": "https://github.com/sponsors/stylelint" + } + ], "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13", + "@csstools/selector-specificity": "^3.1.1", + "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.1", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", + "debug": "^4.3.5", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^7.0.0", + "file-entry-cache": "^9.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^5.3.1", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.34.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", + "meow": "^13.2.0", + "micromatch": "^4.0.7", "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.28", + "picocolors": "^1.0.1", + "postcss": "^8.4.39", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.1.0", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", + "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "bin": { "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^14.13.1 || >=16.0.0" - }, - "funding": { - "type": "opencollective", - "url": "https://opencollective.com/stylelint" + "node": ">=18.12.0" } }, "node_modules/stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz", + "integrity": "sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==", "dev": true, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^15.10.0" + "stylelint": "^16.0.0" } }, "node_modules/stylelint-config-wikimedia": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.16.1.tgz", - "integrity": "sha512-FDVUyDyCBap2o2HAeJqIobdVdSTur5HFX5FymoKrzfMIYWxIV/55lTpyL1PR71TfVMaroDXJrIftLFW9mXKFhQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz", + "integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==", "dev": true, "dependencies": { - "browserslist-config-wikimedia": "0.5.0", - "postcss-html": "1.5.0", + "@stylistic/stylelint-config": "1.0.1", + "@stylistic/stylelint-plugin": "2.0.0", + "browserslist-config-wikimedia": "0.7.0", + "postcss-html": "1.6.0", "postcss-less": "6.0.0", - "stylelint": "15.10.1", - "stylelint-config-recommended": "13.0.0", - "stylelint-no-unsupported-browser-features": "6.1.0", - "stylelint-stylistic": "0.4.3" + "stylelint": "16.2.0", + "stylelint-config-recommended": "14.0.0", + "stylelint-no-unsupported-browser-features": "8.0.1" }, "peerDependencies": { "postcss-less": "^6.0.0" } }, + "node_modules/stylelint-config-wikimedia/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, "node_modules/stylelint-config-wikimedia/node_modules/balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, - "node_modules/stylelint-config-wikimedia/node_modules/browserslist-config-wikimedia": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz", - "integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==", - "dev": true + "node_modules/stylelint-config-wikimedia/node_modules/file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "dependencies": { + "flat-cache": "^4.0.0" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/stylelint-config-wikimedia/node_modules/flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "dependencies": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=16" + } }, "node_modules/stylelint-config-wikimedia/node_modules/global-modules": { "version": "2.0.0", @@ -4569,9 +4384,9 @@ } }, "node_modules/stylelint-config-wikimedia/node_modules/known-css-properties": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", - "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true }, "node_modules/stylelint-config-wikimedia/node_modules/resolve-from": { @@ -4583,48 +4398,61 @@ "node": ">=8" } }, + "node_modules/stylelint-config-wikimedia/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/stylelint-config-wikimedia/node_modules/stylelint": { - "version": "15.10.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.1.tgz", - "integrity": "sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.0.tgz", + "integrity": "sha512-gwqU5AkIb52wrAzzn+359S3NIJDMl02TXLUaV2tzA/L6jUdpTwNt+MCxHlc8+Hb2bUHlYVo92YeSIryF2gJthA==", "dev": true, "dependencies": { - "@csstools/css-parser-algorithms": "^2.3.0", - "@csstools/css-tokenizer": "^2.1.1", - "@csstools/media-query-list-parser": "^2.1.2", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^2.5.0", + "@csstools/css-tokenizer": "^2.2.3", + "@csstools/media-query-list-parser": "^2.1.7", + "@csstools/selector-specificity": "^3.0.1", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.1.0", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.1", "css-tree": "^2.3.1", "debug": "^4.3.4", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^5.3.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.27.0", + "known-css-properties": "^0.29.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", + "meow": "^13.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.24", + "postcss": "^8.4.33", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.0.15", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", + "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", "table": "^6.8.1", @@ -4634,7 +4462,7 @@ "stylelint": "bin/stylelint.mjs" }, "engines": { - "node": "^14.13.1 || >=16.0.0" + "node": ">=18.12.0" }, "funding": { "type": "opencollective", @@ -4654,66 +4482,62 @@ } }, "node_modules/stylelint-no-unsupported-browser-features": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz", - "integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.0.1.tgz", + "integrity": "sha512-tc8Xn5DaqJhxTmbA4H8gZbYdAz027NfuSZv5+cVieQb7BtBrF/1/iKYdpcGwXPl3GtqkQrisiXuGqKkKnzWcLw==", "dev": true, "dependencies": { - "doiuse": "^4.4.1", - "lodash": "^4.17.15", - "postcss": "^8.4.16" + "doiuse": "^6.0.2", + "postcss": "^8.4.32" }, "engines": { - "node": ">=14" + "node": ">=18.12.0" }, "peerDependencies": { - "stylelint": "^14.0.0||^15.0.0" + "stylelint": "^16.0.2" } }, - "node_modules/stylelint-stylistic": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/stylelint-stylistic/-/stylelint-stylistic-0.4.3.tgz", - "integrity": "sha512-WphmneK3MRrm5ixvRPWy7+c9+EQUh0FPvNMXW/N9VD85vyqtpxUejpD+mxubVVht0fRgidcqBxtW3s3tU2Ujhw==", - "deprecated": "This package has been deprecated in favor of @stylistic/stylelint-plugin", - "dev": true, - "dependencies": { - "is-plain-object": "^5.0.0", - "postcss": "^8.4.21", - "postcss-media-query-parser": "^0.2.3", - "postcss-value-parser": "^4.2.0", - "style-search": "^0.1.0" - }, - "peerDependencies": { - "stylelint": "^15.0.0" - } - }, - "node_modules/stylelint-stylistic/node_modules/is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "node_modules/stylelint/node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", "dev": true, "engines": { - "node": ">=0.10.0" + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" } }, "node_modules/stylelint/node_modules/balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "peer": true + "dev": true }, "node_modules/stylelint/node_modules/file-entry-cache": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", - "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz", + "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==", "dev": true, - "peer": true, "dependencies": { - "flat-cache": "^3.2.0" + "flat-cache": "^5.0.0" }, "engines": { - "node": ">=12.0.0" + "node": ">=18" + } + }, + "node_modules/stylelint/node_modules/flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", + "dev": true, + "dependencies": { + "flatted": "^3.3.1", + "keyv": "^4.5.4" + }, + "engines": { + "node": ">=18" } }, "node_modules/stylelint/node_modules/global-modules": { @@ -4721,7 +4545,6 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "peer": true, "dependencies": { "global-prefix": "^3.0.0" }, @@ -4734,7 +4557,6 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "peer": true, "dependencies": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -4749,7 +4571,6 @@ "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", "dev": true, - "peer": true, "engines": { "node": ">=0.10.0" } @@ -4759,17 +4580,30 @@ "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true, - "peer": true, "engines": { "node": ">=8" } }, + "node_modules/stylelint/node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, "node_modules/stylelint/node_modules/which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "peer": true, "dependencies": { "isexe": "^2.0.0" }, @@ -4821,9 +4655,9 @@ "dev": true }, "node_modules/table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "dependencies": { "ajv": "^8.0.1", @@ -4837,15 +4671,15 @@ } }, "node_modules/table/node_modules/ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "dependencies": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" }, "funding": { "type": "github", @@ -4858,6 +4692,15 @@ "integrity": "sha512-NM8/P9n3XjXhIZn1lLhkFaACTOURQXjWhV4BA/RnOv8xvgqtqpAX9IO4mRQxSx1Rlo4tqzeqb0sOlruaOy3dug==", "dev": true }, + "node_modules/tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true, + "engines": { + "node": ">=6" + } + }, "node_modules/text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -4865,35 +4708,25 @@ "dev": true }, "node_modules/through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "dependencies": { - "readable-stream": "3" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" } }, "node_modules/through2/node_modules/readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "dependencies": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - }, - "engines": { - "node": ">= 6" - } - }, - "node_modules/through2/node_modules/string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "dependencies": { - "safe-buffer": "~5.2.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } }, "node_modules/to-regex-range": { @@ -4908,37 +4741,16 @@ "node": ">=8.0" } }, - "node_modules/trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true, - "engines": { - "node": ">=12" - }, - "funding": { - "url": "https://github.com/sponsors/sindresorhus" - } - }, - "node_modules/tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "node_modules/tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "node_modules/ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, - "dependencies": { - "tslib": "^1.8.1" - }, "engines": { - "node": ">= 6" + "node": ">=16" }, "peerDependencies": { - "typescript": ">=2.8.0 || >= 3.2.0-dev || >= 3.3.0-dev || >= 3.4.0-dev || >= 3.5.0-dev || >= 3.6.0-dev || >= 3.6.0-beta || >= 3.7.0-dev || >= 3.7.0-beta" + "typescript": ">=4.2.0" } }, "node_modules/type-check": { @@ -4966,9 +4778,9 @@ } }, "node_modules/typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "peer": true, "bin": { @@ -5012,9 +4824,9 @@ } }, "node_modules/update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "funding": [ { @@ -5031,8 +4843,8 @@ } ], "dependencies": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" }, "bin": { "update-browserslist-db": "cli.js" @@ -5078,10 +4890,20 @@ "spdx-expression-parse": "^3.0.0" } }, + "node_modules/validate-npm-package-license/node_modules/spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "dependencies": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + }, "node_modules/vue-eslint-parser": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", - "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", "dev": true, "dependencies": { "debug": "^4.3.4", @@ -5180,25 +5002,22 @@ "node": ">=10" } }, - "node_modules/yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "node_modules/yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true, + "bin": { + "yaml": "bin.mjs" + }, "engines": { "node": ">= 14" } }, "node_modules/yaml-eslint-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", - "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.3.tgz", + "integrity": "sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==", "dev": true, "dependencies": { "eslint-visitor-keys": "^3.0.0", @@ -5213,30 +5032,30 @@ } }, "node_modules/yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "dependencies": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" }, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true, "engines": { - "node": ">=10" + "node": ">=12" } }, "node_modules/yocto-queue": { @@ -5253,95 +5072,38 @@ } }, "dependencies": { - "@aashutoshrathi/word-wrap": { - "version": "1.2.6", - "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", - "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", - "dev": true - }, - "@babel/code-frame": { - "version": "7.23.5", - "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.23.5.tgz", - "integrity": "sha512-CgH3s1a96LipHCmSUmYFPwY7MNx8C3avkq7i4Wl3cfa662ldtUe4VM1TPXX70pfmrlWTb6jLqTYrZyT2ZTJBgA==", - "dev": true, - "requires": { - "@babel/highlight": "^7.23.4", - "chalk": "^2.4.2" - }, - "dependencies": { - "ansi-styles": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-3.2.1.tgz", - "integrity": "sha512-VT0ZI6kZRdTh8YyJw3SMbYm/u+NqfsAxEpWO0Pf9sq8/e94WxxOpPKx9FR1FlyCtOVDNOQ+8ntlqFxiRc+r5qA==", - "dev": true, - "requires": { - "color-convert": "^1.9.0" - } - }, - "chalk": { - "version": "2.4.2", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.4.2.tgz", - "integrity": "sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ==", - "dev": true, - "requires": { - "ansi-styles": "^3.2.1", - "escape-string-regexp": "^1.0.5", - "supports-color": "^5.3.0" - } - }, - "color-convert": { - "version": "1.9.3", - "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-1.9.3.tgz", - "integrity": "sha512-QfAUtd+vFdAtFQcC8CCyYt1fYWxSqAiK2cSD6zDB8N3cpsEBAvRxp9zOGg6G/SHHJYAT88/az/IuDGALsNVbGg==", - "dev": true, - "requires": { - "color-name": "1.1.3" - } - }, - "color-name": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.3.tgz", - "integrity": "sha512-72fSenhMw2HZMTVHeCA9KCmpEIbzWiQsjN+BHcBbS9vr1mtt+vJjPdksIBNUmKAW8TFUDPJK5SUU3QhE9NEXDw==", - "dev": true - }, - "escape-string-regexp": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz", - "integrity": "sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg==", - "dev": true - }, - "has-flag": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-3.0.0.tgz", - "integrity": "sha512-sKJf1+ceQBr4SMkvQnBDNDtf4TXpVhVGateu0t918bl30FnbE2m4vNLX+VWe/dpjlb+HugGYzW7uQXH98HPEYw==", - "dev": true - }, - "supports-color": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-5.5.0.tgz", - "integrity": "sha512-QjVjwdXIt408MIiAqCX4oUKsgU2EqAGzs2Ppkm4aQYbjm+ZEWEcW4SfFNTr4uMNZma0ey4f5lgLrkB0aX0QMow==", - "dev": true, - "requires": { - "has-flag": "^3.0.0" - } - } + "@aashutoshrathi/word-wrap": { + "version": "1.2.6", + "resolved": "https://registry.npmjs.org/@aashutoshrathi/word-wrap/-/word-wrap-1.2.6.tgz", + "integrity": "sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==", + "dev": true + }, + "@babel/code-frame": { + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/code-frame/-/code-frame-7.24.7.tgz", + "integrity": "sha512-BcYH1CVJBO9tvyIZ2jVeXgSIMvGZ2FDRvDdOIVQyuklNKSsx+eppDEBq/g47Ayw+RqNFE+URvOShmf+f/qwAlA==", + "dev": true, + "requires": { + "@babel/highlight": "^7.24.7", + "picocolors": "^1.0.0" } }, "@babel/helper-validator-identifier": { - "version": "7.22.20", - "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.22.20.tgz", - "integrity": "sha512-Y4OZ+ytlatR8AI+8KZfKuL5urKp7qey08ha31L8b3BwewJAoJamTzyvxPR/5D+KkdJCGPq/+8TukHBlY10FX9A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/helper-validator-identifier/-/helper-validator-identifier-7.24.7.tgz", + "integrity": "sha512-rR+PBcQ1SMQDDyF6X0wxtG8QyLCgUB0eRAGguqRLfkCA87l7yAP7ehq8SNj96OOGTO8OBV70KhuFYcIkHXOg0w==", "dev": true }, "@babel/highlight": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.23.4.tgz", - "integrity": "sha512-acGdbYSfp2WheJoJm/EBBBLh/ID8KDc64ISZ9DYtBmC8/Q204PZJLHyzeB5qMzJ5trcOkybd78M4x2KWsUq++A==", + "version": "7.24.7", + "resolved": "https://registry.npmjs.org/@babel/highlight/-/highlight-7.24.7.tgz", + "integrity": "sha512-EStJpq4OuY8xYfhGVXngigBJRWxftKX9ksiGDnmlY3o7B/V7KIAc9X4oiK87uPJSc/vs5L869bem5fhZa8caZw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.22.20", + "@babel/helper-validator-identifier": "^7.24.7", "chalk": "^2.4.2", - "js-tokens": "^4.0.0" + "js-tokens": "^4.0.0", + "picocolors": "^1.0.0" }, "dependencies": { "ansi-styles": { @@ -5403,39 +5165,48 @@ } }, "@csstools/css-parser-algorithms": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.4.0.tgz", - "integrity": "sha512-/PPLr2g5PAUCKAPEbfyk6/baZA+WJHQtUhPkoCQMpyRE8I0lXrG1QFRN8e5s3ZYxM8d/g5BZc6lH3s8Op7/VEg==", + "version": "2.7.1", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.7.1.tgz", + "integrity": "sha512-2SJS42gxmACHgikc1WGesXLIT8d/q2l0UFM7TaEeIzdFCE/FPMtTiizcPGGJtlPo2xuQzY09OhrLTzRxqJqwGw==", "dev": true, "requires": {} }, "@csstools/css-tokenizer": { - "version": "2.2.2", - "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.2.2.tgz", - "integrity": "sha512-wCDUe/MAw7npAHFLyW3QjSyLA66S5QFaV1jIXlNQvdJ8RzXDSgALa49eWcUO6P55ARQaz0TsDdAgdRgkXFYY8g==", + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/@csstools/css-tokenizer/-/css-tokenizer-2.4.1.tgz", + "integrity": "sha512-eQ9DIktFJBhGjioABJRtUucoWR2mwllurfnM8LuNGAqX3ViZXaUchqk+1s7jjtkFiT9ySdACsFEA3etErkALUg==", "dev": true }, "@csstools/media-query-list-parser": { - "version": "2.1.6", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.6.tgz", - "integrity": "sha512-R6AKl9vaU0It7D7TR2lQn0pre5aQfdeqHRePlaRCY8rHL3l9eVlNRpsEVDKFi/zAjzv68CxH2M5kqbhPFPKjvw==", + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.13.tgz", + "integrity": "sha512-XaHr+16KRU9Gf8XLi3q8kDlI18d5vzKSKCY510Vrtc9iNR0NJzbY9hhTmwhzYZj/ZwGL4VmB3TA9hJW0Um2qFA==", "dev": true, "requires": {} }, "@csstools/selector-specificity": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.0.1.tgz", - "integrity": "sha512-NPljRHkq4a14YzZ3YD406uaxh7s0g6eAq3L9aLOWywoqe8PkYamAvtsh7KNX6c++ihDrJ0RiU+/z7rGnhlZ5ww==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/@csstools/selector-specificity/-/selector-specificity-3.1.1.tgz", + "integrity": "sha512-a7cxGcJ2wIlMFLlh8z2ONm+715QkPHiyJcxwQlKOz/03GPw1COpfhcmC9wm4xlZfp//jWHNNMwzjtqHXVWU9KA==", "dev": true, "requires": {} }, + "@dual-bundle/import-meta-resolve": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/@dual-bundle/import-meta-resolve/-/import-meta-resolve-4.1.0.tgz", + "integrity": "sha512-+nxncfwHM5SgAtrVzgpzJOI1ol0PkumhVo469KCf9lUi21IGcY90G98VuHm9VRrUypmAzawAHO9bs6hqeADaVg==", + "dev": true + }, "@es-joy/jsdoccomment": { - "version": "0.37.1", - "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.37.1.tgz", - "integrity": "sha512-5vxWJ1gEkEF0yRd0O+uK6dHJf7adrxwQSX8PuRiPfFSAbNLnY0ZJfXaZucoz14Jj2N11xn2DnlEPwWRpYpvRjg==", + "version": "0.43.1", + "resolved": "https://registry.npmjs.org/@es-joy/jsdoccomment/-/jsdoccomment-0.43.1.tgz", + "integrity": "sha512-I238eDtOolvCuvtxrnqtlBaw0BwdQuYqK7eA6XIonicMdOOOb75mqdIzkGDUbS04+1Di007rgm9snFRNeVrOog==", "dev": true, "requires": { - "comment-parser": "1.3.1", + "@types/eslint": "^8.56.5", + "@types/estree": "^1.0.5", + "@typescript-eslint/types": "^7.2.0", + "comment-parser": "1.4.1", "esquery": "^1.5.0", "jsdoc-type-pratt-parser": "~4.0.0" } @@ -5450,9 +5221,9 @@ } }, "@eslint-community/regexpp": { - "version": "4.10.0", - "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.10.0.tgz", - "integrity": "sha512-Cu96Sd2By9mCNTx2iyKOmq10v22jUVQv0lQnlGNy16oE9589yE+QADPbrMGCkA51cKZSg3Pu/aTJVTGfL/qjUA==", + "version": "4.11.0", + "resolved": "https://registry.npmjs.org/@eslint-community/regexpp/-/regexpp-4.11.0.tgz", + "integrity": "sha512-G/M/tIiMrTAxEWRfLfQJMmGNX28IxBg4PBz8XqQhqUHLFI6TL2htpIB1iQCj144V5ee/JaKyT9/WZ0MGZWfA7A==", "dev": true }, "@eslint/eslintrc": { @@ -5473,19 +5244,19 @@ } }, "@eslint/js": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.56.0.tgz", - "integrity": "sha512-gMsVel9D7f2HLkBma9VbtzZRehRogVRfbr++f06nL2vnCGCNlzOD+/MUov/F4p8myyAHspEhVobgjpX64q5m6A==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/@eslint/js/-/js-8.57.0.tgz", + "integrity": "sha512-Ys+3g2TaW7gADOJzPt83SJtCDhMjndcDMFVQ/Tj9iA1BfJzFKD9mAUXT3OenpuPHbI6P/myECxRJrofUsDx/5g==", "dev": true }, "@humanwhocodes/config-array": { - "version": "0.11.13", - "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.13.tgz", - "integrity": "sha512-JSBDMiDKSzQVngfRjOdFXgFfklaXI4K9nLF49Auh21lmBWRLIK3+xTErTWD4KU54pb6coM6ESE7Awz/FNU3zgQ==", + "version": "0.11.14", + "resolved": "https://registry.npmjs.org/@humanwhocodes/config-array/-/config-array-0.11.14.tgz", + "integrity": "sha512-3T8LkOmg45BV5FICb15QQMsyUSWrQ8AygVfC7ZG32zOalnqrilm018ZVCw0eapXux8FtA33q8PSRSstjee3jSg==", "dev": true, "requires": { - "@humanwhocodes/object-schema": "^2.0.1", - "debug": "^4.1.1", + "@humanwhocodes/object-schema": "^2.0.2", + "debug": "^4.3.1", "minimatch": "^3.0.5" } }, @@ -5496,9 +5267,9 @@ "dev": true }, "@humanwhocodes/object-schema": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.1.tgz", - "integrity": "sha512-dvuCeX5fC9dXgJn9t+X5atfmgQAzUOWqS1254Gh0m6i8wKd10ebXkfNKiRK+1GWi/yTvvLDHpoxLr0xxxeslWw==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/@humanwhocodes/object-schema/-/object-schema-2.0.3.tgz", + "integrity": "sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==", "dev": true }, "@mdn/browser-compat-data": { @@ -5533,6 +5304,55 @@ "fastq": "^1.6.0" } }, + "@stylistic/stylelint-config": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-config/-/stylelint-config-1.0.1.tgz", + "integrity": "sha512-JgFP88HZEyo34k9RpWVdcQJtLPrMxYE58IO3qypXhmvE/NmZohj+xjDtQ8UfaarnYsLecnldw57/GHum07Ctdw==", + "dev": true, + "requires": { + "@stylistic/stylelint-plugin": "^2.0.0" + } + }, + "@stylistic/stylelint-plugin": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/@stylistic/stylelint-plugin/-/stylelint-plugin-2.0.0.tgz", + "integrity": "sha512-dHKuT6PGd1WGZLOTuozAM7GdQzdmlmnFXYzvV1jYJXXpcCpV/OJ3+n8TXpMkoOeKHpJydY43EOoZTO1W/FOA4Q==", + "dev": true, + "requires": { + "@csstools/css-parser-algorithms": "^2.3.2", + "@csstools/css-tokenizer": "^2.2.1", + "@csstools/media-query-list-parser": "^2.1.5", + "is-plain-object": "^5.0.0", + "postcss-selector-parser": "^6.0.13", + "postcss-value-parser": "^4.2.0", + "style-search": "^0.1.0", + "stylelint": "^16.0.2" + }, + "dependencies": { + "is-plain-object": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", + "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", + "dev": true + } + } + }, + "@types/eslint": { + "version": "8.56.11", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.11.tgz", + "integrity": "sha512-sVBpJMf7UPo/wGecYOpk2aQya2VUGeHhe38WG7/mN5FufNSubf5VT9Uh9Uyp8/eLJpu1/tuhJ/qTo4mhSB4V4Q==", + "dev": true, + "requires": { + "@types/estree": "*", + "@types/json-schema": "*" + } + }, + "@types/estree": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/@types/estree/-/estree-1.0.5.tgz", + "integrity": "sha512-/kYRxGDLWzHOB7q+wtSUQlFrtcdUccpfy+X+9iMBpHK8QLLhx2wIPYuS5DYtR9Wa/YlZAbIovy7qVdB1Aq6Lyw==", + "dev": true + }, "@types/json-schema": { "version": "7.0.15", "resolved": "https://registry.npmjs.org/@types/json-schema/-/json-schema-7.0.15.tgz", @@ -5545,97 +5365,84 @@ "integrity": "sha512-Klz949h02Gz2uZCMGwDUSDS1YBlTdDDgbWHi+81l29tQALUtvz4rAYi5uoVhE5Lagoq6DeqAUlbrHvW/mXDgdQ==", "dev": true }, - "@types/minimist": { - "version": "1.2.5", - "resolved": "https://registry.npmjs.org/@types/minimist/-/minimist-1.2.5.tgz", - "integrity": "sha512-hov8bUuiLiyFPGyFPE1lwWhmzYbirOXQNNo40+y3zow8aFVTeyn3VWL0VFFfdNddA8S4Vf0Tc062rzyNr7Paag==", - "dev": true - }, "@types/normalize-package-data": { "version": "2.4.4", "resolved": "https://registry.npmjs.org/@types/normalize-package-data/-/normalize-package-data-2.4.4.tgz", "integrity": "sha512-37i+OaWTh9qeK4LSHPsyRC7NahnGotNuZvjLSgcPzblpHB3rrCJxAOgI5gCdKm7coonsaX1Of0ILiTcnZjbfxA==", "dev": true }, - "@types/semver": { - "version": "7.5.6", - "resolved": "https://registry.npmjs.org/@types/semver/-/semver-7.5.6.tgz", - "integrity": "sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A==", - "dev": true - }, "@typescript-eslint/scope-manager": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz", - "integrity": "sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/scope-manager/-/scope-manager-7.17.0.tgz", + "integrity": "sha512-0P2jTTqyxWp9HiKLu/Vemr2Rg1Xb5B7uHItdVZ6iAenXmPo4SZ86yOPCJwMqpCyaMiEHTNqizHfsbmCFT1x9SA==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0" + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0" } }, "@typescript-eslint/types": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-5.62.0.tgz", - "integrity": "sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/types/-/types-7.17.0.tgz", + "integrity": "sha512-a29Ir0EbyKTKHnZWbNsrc/gqfIBqYPwj3F2M+jWE/9bqfEHg0AMtXzkbUkOG6QgEScxh2+Pz9OXe11jHDnHR7A==", "dev": true }, "@typescript-eslint/typescript-estree": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz", - "integrity": "sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/typescript-estree/-/typescript-estree-7.17.0.tgz", + "integrity": "sha512-72I3TGq93t2GoSBWI093wmKo0n6/b7O4j9o8U+f65TVD0FS6bI2180X5eGEr8MA8PhKMvYe9myZJquUT2JkCZw==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/visitor-keys": "5.62.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/visitor-keys": "7.17.0", "debug": "^4.3.4", "globby": "^11.1.0", "is-glob": "^4.0.3", - "semver": "^7.3.7", - "tsutils": "^3.21.0" - } - }, - "@typescript-eslint/utils": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-5.62.0.tgz", - "integrity": "sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ==", - "dev": true, - "requires": { - "@eslint-community/eslint-utils": "^4.2.0", - "@types/json-schema": "^7.0.9", - "@types/semver": "^7.3.12", - "@typescript-eslint/scope-manager": "5.62.0", - "@typescript-eslint/types": "5.62.0", - "@typescript-eslint/typescript-estree": "5.62.0", - "eslint-scope": "^5.1.1", - "semver": "^7.3.7" - }, - "dependencies": { - "eslint-scope": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/eslint-scope/-/eslint-scope-5.1.1.tgz", - "integrity": "sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==", + "minimatch": "^9.0.4", + "semver": "^7.6.0", + "ts-api-utils": "^1.3.0" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", "dev": true, "requires": { - "esrecurse": "^4.3.0", - "estraverse": "^4.1.1" + "balanced-match": "^1.0.0" } }, - "estraverse": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/estraverse/-/estraverse-4.3.0.tgz", - "integrity": "sha512-39nnKffWz8xN1BU/2c79n9nB9HDzo0niYUqx6xyqUnyoAnQyyWpOTdZEeiCch8BBu515t4wp9ZmgVfVhn9EBpw==", - "dev": true + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } } } }, + "@typescript-eslint/utils": { + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/utils/-/utils-7.17.0.tgz", + "integrity": "sha512-r+JFlm5NdB+JXc7aWWZ3fKSm1gn0pkswEwIYsrGPdsT2GjsRATAKXiNtp3vgAAO1xZhX8alIOEQnNMl3kbTgJw==", + "dev": true, + "requires": { + "@eslint-community/eslint-utils": "^4.4.0", + "@typescript-eslint/scope-manager": "7.17.0", + "@typescript-eslint/types": "7.17.0", + "@typescript-eslint/typescript-estree": "7.17.0" + } + }, "@typescript-eslint/visitor-keys": { - "version": "5.62.0", - "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz", - "integrity": "sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw==", + "version": "7.17.0", + "resolved": "https://registry.npmjs.org/@typescript-eslint/visitor-keys/-/visitor-keys-7.17.0.tgz", + "integrity": "sha512-RVGC9UhPOCsfCdI9pU++K4nD7to+jTcMIbXTSOcrLqUEW6gF2pU1UUbYJKc9cvcRSK1UDeMJ7pdMxf4bhMpV/A==", "dev": true, "requires": { - "@typescript-eslint/types": "5.62.0", - "eslint-visitor-keys": "^3.3.0" + "@typescript-eslint/types": "7.17.0", + "eslint-visitor-keys": "^3.4.3" } }, "@ungap/structured-clone": { @@ -5651,9 +5458,9 @@ "dev": true }, "acorn": { - "version": "8.11.2", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.11.2.tgz", - "integrity": "sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w==", + "version": "8.12.1", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-8.12.1.tgz", + "integrity": "sha512-tcpGyI9zbizT9JbV6oYE477V6mTlXvvi0T0G3SNIYE2apm/G5huBa1+K89VGeovbg+jycCrfhl3ADxErOuO6Jg==", "dev": true }, "acorn-jsx": { @@ -5727,9 +5534,9 @@ "dev": true }, "arrify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", - "integrity": "sha512-3CYzex9M9FGQjCGMGyi6/31c8GJbgb0qGyrx5HWxPd0aCwh4cB2YjMb2Xf9UuoogrMrlO9cTqnB5rI5GHZTcUA==", + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", + "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", "dev": true }, "ast-metadata-inferer": { @@ -5776,30 +5583,30 @@ } }, "braces": { - "version": "3.0.2", - "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.2.tgz", - "integrity": "sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A==", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", "dev": true, "requires": { - "fill-range": "^7.0.1" + "fill-range": "^7.1.1" } }, "browserslist": { - "version": "4.22.2", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.2.tgz", - "integrity": "sha512-0UgcrvQmBDvZHFGdYUehrCNIazki7/lUP3kkoi/r3YB2amZbFM9J43ZRkJTXBUZK4gmx56+Sqk9+Vs9mwZx9+A==", + "version": "4.23.2", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.2.tgz", + "integrity": "sha512-qkqSyistMYdxAcw+CzbZwlBy8AGmS/eEWs+sEV5TnLRGDOL+C5M2EnH6tlZyg0YoAxGJAFKh61En9BR941GnHA==", "dev": true, "requires": { - "caniuse-lite": "^1.0.30001565", - "electron-to-chromium": "^1.4.601", + "caniuse-lite": "^1.0.30001640", + "electron-to-chromium": "^1.4.820", "node-releases": "^2.0.14", - "update-browserslist-db": "^1.0.13" + "update-browserslist-db": "^1.1.0" } }, "browserslist-config-wikimedia": { - "version": "0.5.1", - "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.1.tgz", - "integrity": "sha512-jf532fUf/gaxiKdHgGCQUT552P5up3RpG+CzLixOQBJ5FwDmYQSRLYHCFUA9s3KMOHh4P3xVp+NUaGNxvtoT9g==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.7.0.tgz", + "integrity": "sha512-CTa0lv78dXKEgrYsOLCkqO+9UUS3CV9MWEOYHcymgEvx4mYxB80sCoKRCR7wW2SOMNxjaP9hohrZripjnKuRTA==", "dev": true }, "builtin-modules": { @@ -5808,51 +5615,16 @@ "integrity": "sha512-zhaCDicdLuWN5UbN5IMnFqNMhNfo919sH85y2/ea+5Yg9TsTkeZxpL+JLbp6cgYFS4sRLp3YV4S6yDuqVWHYOw==", "dev": true }, - "builtins": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/builtins/-/builtins-5.0.1.tgz", - "integrity": "sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ==", - "dev": true, - "requires": { - "semver": "^7.0.0" - } - }, "callsites": { "version": "3.1.0", "resolved": "https://registry.npmjs.org/callsites/-/callsites-3.1.0.tgz", "integrity": "sha512-P8BjAsXvZS+VIDUI11hHCQEv74YT67YUi5JJFNWIqL235sBmjX4+qx9Muvls5ivyNENctx46xQLQ3aTuE7ssaQ==", "dev": true }, - "camelcase": { - "version": "6.3.0", - "resolved": "https://registry.npmjs.org/camelcase/-/camelcase-6.3.0.tgz", - "integrity": "sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==", - "dev": true - }, - "camelcase-keys": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/camelcase-keys/-/camelcase-keys-7.0.2.tgz", - "integrity": "sha512-Rjs1H+A9R+Ig+4E/9oyB66UC5Mj9Xq3N//vcLf2WzgdTi/3gUu3Z9KoqmlrEG4VuuLK8wJHofxzdQXz/knhiYg==", - "dev": true, - "requires": { - "camelcase": "^6.3.0", - "map-obj": "^4.1.0", - "quick-lru": "^5.1.1", - "type-fest": "^1.2.1" - }, - "dependencies": { - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - } - } - }, "caniuse-lite": { - "version": "1.0.30001570", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001570.tgz", - "integrity": "sha512-+3e0ASu4sw1SWaoCtvPeyXp+5PsjigkSt8OXZbF9StH5pQWbxEjLAZE3n8Aup5udop1uRiKA7a4utUk/uoSpUw==", + "version": "1.0.30001643", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001643.tgz", + "integrity": "sha512-ERgWGNleEilSrHM6iUz/zJNSQTP8Mr21wDWpdgvRwcTXGAq6jMtOUPP4dqFPTdKqZ2wKTdtB+uucZ3MRpAUSmg==", "dev": true }, "chalk": { @@ -5866,9 +5638,9 @@ } }, "ci-info": { - "version": "3.9.0", - "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-3.9.0.tgz", - "integrity": "sha512-NIxF55hv4nSqQswkAeiOi1r83xy8JldOFDTWiug55KBu9Jnblncd2U6ViHmYgHf01TPZS77NJBhBMKdWj9HQMQ==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/ci-info/-/ci-info-4.0.0.tgz", + "integrity": "sha512-TdHqgGf9odd8SXNuxtUBVx8Nv+qZOejE6qyqiy5NtbYYQOeFa6zmHkxlPzmaLxWWHsU6nJmB7AETdVPi+2NBUg==", "dev": true }, "clean-regexp": { @@ -5889,13 +5661,13 @@ } }, "cliui": { - "version": "7.0.4", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-7.0.4.tgz", - "integrity": "sha512-OcRE68cOsVMXp1Yvonl/fzkQOyjLSu/8bhPDfQt0e0/Eb283TKP20Fs2MqoPsr9SwA595rRCA+QMzYc9nBP+JQ==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", "dev": true, "requires": { "string-width": "^4.2.0", - "strip-ansi": "^6.0.0", + "strip-ansi": "^6.0.1", "wrap-ansi": "^7.0.0" } }, @@ -5927,9 +5699,9 @@ "dev": true }, "comment-parser": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.3.1.tgz", - "integrity": "sha512-B52sN2VNghyq5ofvUsqZjmk6YkihBX5vMSChmSK9v4ShjKf3Vk5Xcmgpw4o+iIgtrnM/u5FiMpz9VKb8lpBveA==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/comment-parser/-/comment-parser-1.4.1.tgz", + "integrity": "sha512-buhp5kePrmda3vhc5B9t7pUQXAb2Tnd0qgpkIhPhkHXxJpiPJ11H0ZEU0oBpJ2QztSbzG/ZxMj/CHsYJqRHmyg==", "dev": true }, "concat-map": { @@ -5938,6 +5710,15 @@ "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", "dev": true }, + "core-js-compat": { + "version": "3.37.1", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.37.1.tgz", + "integrity": "sha512-9TNiImhKvQqSUkOvk/mMRZzOANTiEVC7WaBNhHcKM7x+/5E1l5NvsysR19zuDQScE8k+kfQXWRN3AtS/eOSHpg==", + "dev": true, + "requires": { + "browserslist": "^4.23.0" + } + }, "core-util-is": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/core-util-is/-/core-util-is-1.0.3.tgz", @@ -5945,15 +5726,15 @@ "dev": true }, "cosmiconfig": { - "version": "8.3.6", - "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-8.3.6.tgz", - "integrity": "sha512-kcZ6+W5QzcJ3P1Mt+83OUv/oHFqZHIx8DuxG6eZ5RGMERoLqp4BuGjhHLYGK+Kf5XVkQvqBSmAy/nGWN3qDgEA==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/cosmiconfig/-/cosmiconfig-9.0.0.tgz", + "integrity": "sha512-itvL5h8RETACmOTFc4UfIyB2RfEHi71Ax6E/PivVxq9NseKbOWpeyHEOIbmAw1rs8Ak0VursQNww7lf7YtUwzg==", "dev": true, "requires": { + "env-paths": "^2.2.1", "import-fresh": "^3.3.0", "js-yaml": "^4.1.0", - "parse-json": "^5.2.0", - "path-type": "^4.0.0" + "parse-json": "^5.2.0" } }, "cross-spawn": { @@ -5968,47 +5749,11 @@ } }, "css-functions-list": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.1.tgz", - "integrity": "sha512-Nj5YcaGgBtuUmn1D7oHqPW0c9iui7xsTsj5lIX8ZgevdfhmjFfKB3r8moHJtNJnctnYXJyYX5I1pp90HM4TPgQ==", + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/css-functions-list/-/css-functions-list-3.2.2.tgz", + "integrity": "sha512-c+N0v6wbKVxTu5gOBBFkr9BEdBWaqqjQeiJ8QvSRIJOf+UxlJh930m8e6/WNeODIK0mYLFkoONrnj16i2EcvfQ==", "dev": true }, - "css-rule-stream": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/css-rule-stream/-/css-rule-stream-1.1.0.tgz", - "integrity": "sha512-qiio/Zkr8I19jh/XuzEkK8OKDQRTrEYaRyIHy4Bwh/tPUe0w8GcQs7r6x24Yc9lT+FbnZFYULxEIXCmaymguUQ==", - "dev": true, - "requires": { - "css-tokenize": "^1.0.1", - "duplexer2": "0.0.2", - "ldjson-stream": "^1.2.1", - "through2": "^0.6.3" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } - } - }, "css-tokenize": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/css-tokenize/-/css-tokenize-1.0.1.tgz", @@ -6042,44 +5787,14 @@ "dev": true }, "debug": { - "version": "4.3.4", - "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.4.tgz", - "integrity": "sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ==", + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", "dev": true, "requires": { "ms": "2.1.2" } }, - "decamelize": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-5.0.1.tgz", - "integrity": "sha512-VfxadyCECXgQlkoEAjeghAr5gY3Hf+IKjKb+X8tGVDtveCjN+USwprd2q3QXBR9T1+x2DG0XZF5/w+7HAtSaXA==", - "dev": true - }, - "decamelize-keys": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/decamelize-keys/-/decamelize-keys-1.1.1.tgz", - "integrity": "sha512-WiPxgEirIV0/eIOMcnFBA3/IJZAZqKnwAwWyvvdi4lsr1WCN22nhdf/3db3DoZcUjTV2SqfzIwNyp6y2xs3nmg==", - "dev": true, - "requires": { - "decamelize": "^1.1.0", - "map-obj": "^1.0.0" - }, - "dependencies": { - "decamelize": { - "version": "1.2.0", - "resolved": "https://registry.npmjs.org/decamelize/-/decamelize-1.2.0.tgz", - "integrity": "sha512-z2S+W9X73hAUUki+N+9Za2lBlun89zigOyGrsax+KUQ6wKW4ZoWpEYBkGhQjwAjjDCkWxhY0VKEhk8wzY7F5cA==", - "dev": true - }, - "map-obj": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-1.0.1.tgz", - "integrity": "sha512-7N/q3lyZ+LVCp7PzuxrJr4KMbBE2hW7BT7YNia330OFxIf4d3r5zVpicP2650l7CPN6RM9zOJRl3NGpqSiw3Eg==", - "dev": true - } - } - }, "deep-is": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/deep-is/-/deep-is-0.1.4.tgz", @@ -6111,21 +5826,20 @@ } }, "doiuse": { - "version": "4.4.1", - "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-4.4.1.tgz", - "integrity": "sha512-TUpr1/YNg20IB09tZmwGCTsTQoxj8jUld/hUZprZMj8vj0VpAJySXEWCr8WMvqvgzk0/kG/FxeSMGKode4UjPg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/doiuse/-/doiuse-6.0.2.tgz", + "integrity": "sha512-eBTs23NOX+EAYPr4RbCR6J4DRW/TML3uMo37y0X1whlkersDYFCk9HmCl09KX98cis22VKsV1QaxfVNauJ3NBw==", "dev": true, "requires": { - "browserslist": "^4.16.1", - "caniuse-lite": "^1.0.30001179", - "css-rule-stream": "^1.1.0", - "duplexer2": "0.0.2", + "browserslist": "^4.21.5", + "caniuse-lite": "^1.0.30001487", + "css-tokenize": "^1.0.1", + "duplexify": "^4.1.2", "ldjson-stream": "^1.2.1", "multimatch": "^5.0.0", - "postcss": "^8.2.4", - "source-map": "^0.7.3", - "through2": "^4.0.2", - "yargs": "^16.2.0" + "postcss": "^8.4.21", + "source-map": "^0.7.4", + "yargs": "^17.7.1" } }, "dom-serializer": { @@ -6165,19 +5879,44 @@ "domhandler": "^5.0.3" } }, - "duplexer2": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/duplexer2/-/duplexer2-0.0.2.tgz", - "integrity": "sha512-+AWBwjGadtksxjOQSFDhPNQbed7icNXApT4+2BNpsXzcCBiInq2H9XW0O8sfHFaPmnQRs7cg/P0fAr2IWQSW0g==", + "duplexify": { + "version": "4.1.3", + "resolved": "https://registry.npmjs.org/duplexify/-/duplexify-4.1.3.tgz", + "integrity": "sha512-M3BmBhwJRZsSx38lZyhE53Csddgzl5R7xGJNk7CVddZD6CcmwMCH8J+7AprIrQKH7TonKxaCjcv27Qmf+sQ+oA==", "dev": true, "requires": { - "readable-stream": "~1.1.9" + "end-of-stream": "^1.4.1", + "inherits": "^2.0.3", + "readable-stream": "^3.1.1", + "stream-shift": "^1.0.2" + }, + "dependencies": { + "readable-stream": { + "version": "3.6.2", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", + "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", + "dev": true, + "requires": { + "inherits": "^2.0.3", + "string_decoder": "^1.1.1", + "util-deprecate": "^1.0.1" + } + }, + "string_decoder": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", + "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "dev": true, + "requires": { + "safe-buffer": "~5.2.0" + } + } } }, "electron-to-chromium": { - "version": "1.4.615", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.615.tgz", - "integrity": "sha512-/bKPPcgZVUziECqDc+0HkT87+0zhaWSZHNXqF8FLd2lQcptpmUFwoCSWjCdOng9Gdq+afKArPdEg/0ZW461Eng==", + "version": "1.5.0", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.5.0.tgz", + "integrity": "sha512-Vb3xHHYnLseK8vlMJQKJYXJ++t4u1/qJ3vykuVrVjvdiOEhYyT1AuP4x03G8EnPmYvYOhe9T+dADTmthjRQMkA==", "dev": true }, "emoji-regex": { @@ -6186,12 +5925,37 @@ "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", "dev": true }, + "end-of-stream": { + "version": "1.4.4", + "resolved": "https://registry.npmjs.org/end-of-stream/-/end-of-stream-1.4.4.tgz", + "integrity": "sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==", + "dev": true, + "requires": { + "once": "^1.4.0" + } + }, + "enhanced-resolve": { + "version": "5.17.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.17.1.tgz", + "integrity": "sha512-LMHl3dXhTcfv8gM4kEzIUeTQ+7fpdA0l2tUf34BddXPkz2A5xJ5L/Pchd5BL6rdccM9QGvu0sWZzK1Z1t4wwyg==", + "dev": true, + "requires": { + "graceful-fs": "^4.2.4", + "tapable": "^2.2.0" + } + }, "entities": { "version": "4.5.0", "resolved": "https://registry.npmjs.org/entities/-/entities-4.5.0.tgz", "integrity": "sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==", "dev": true }, + "env-paths": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/env-paths/-/env-paths-2.2.1.tgz", + "integrity": "sha512-+h1lkLKhZMTYjog1VEpJNG7NZJWcuc2DDk/qsqSTRRCOXiLjeQ1d1/udrUGhqMxUgAlwKNZ0cf2uqan5GLuS2A==", + "dev": true + }, "error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -6202,9 +5966,9 @@ } }, "escalade": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.1.tgz", - "integrity": "sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", "dev": true }, "escape-string-regexp": { @@ -6214,16 +5978,16 @@ "dev": true }, "eslint": { - "version": "8.56.0", - "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.56.0.tgz", - "integrity": "sha512-Go19xM6T9puCOWntie1/P997aXxFsOi37JIHRWI514Hc6ZnaHGKY9xFhrU65RT6CcBEzZoGG1e6Nq+DT04ZtZQ==", + "version": "8.57.0", + "resolved": "https://registry.npmjs.org/eslint/-/eslint-8.57.0.tgz", + "integrity": "sha512-dZ6+mexnaTIbSBZWgou51U6OmzIhYM2VcNdtiTtI7qPNZm35Akpr0f6vtw3w1Kmn5PYo+tZVfh13WrhpS6oLqQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.2.0", "@eslint-community/regexpp": "^4.6.1", "@eslint/eslintrc": "^2.1.4", - "@eslint/js": "8.56.0", - "@humanwhocodes/config-array": "^0.11.13", + "@eslint/js": "8.57.0", + "@humanwhocodes/config-array": "^0.11.14", "@humanwhocodes/module-importer": "^1.0.1", "@nodelib/fs.walk": "^1.2.8", "@ungap/structured-clone": "^1.2.0", @@ -6260,35 +6024,37 @@ } }, "eslint-compat-utils": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.1.2.tgz", - "integrity": "sha512-Jia4JDldWnFNIru1Ehx1H5s9/yxiRHY/TimCuUc0jNexew3cF1gI6CYZil1ociakfWO3rRqFjl1mskBblB3RYg==", + "version": "0.5.1", + "resolved": "https://registry.npmjs.org/eslint-compat-utils/-/eslint-compat-utils-0.5.1.tgz", + "integrity": "sha512-3z3vFexKIEnjHE3zCMRo6fn/e44U7T1khUjg+Hp0ZQMCigh28rALD0nPFBcGZuiLC5rLZa2ubQHDRln09JfU2Q==", "dev": true, - "requires": {} + "requires": { + "semver": "^7.5.4" + } }, "eslint-config-wikimedia": { - "version": "0.26.0", - "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.26.0.tgz", - "integrity": "sha512-TAXTySls9k3oWs754rIjlcd9PBLvYeMvjqjiuU8u4gweu0UDgBJGslf+zcvVNXEooAtyLZdENjrzDDjG8ssS7Q==", + "version": "0.28.2", + "resolved": "https://registry.npmjs.org/eslint-config-wikimedia/-/eslint-config-wikimedia-0.28.2.tgz", + "integrity": "sha512-5+rdnT7wH1gpKAO6tHYThg78eMhZMruJzvqku3Y5iaEY/A7kSKLFpA/vOj/snys9fKjDHC9BXmArQh+agkOoJQ==", "dev": true, "requires": { - "browserslist-config-wikimedia": "^0.5.1", - "eslint": "^8.53.0", + "browserslist-config-wikimedia": "^0.7.0", + "eslint": "^8.57.0", "eslint-plugin-compat": "^4.2.0", - "eslint-plugin-es-x": "^7.3.0", - "eslint-plugin-jest": "^27.6.0", - "eslint-plugin-jsdoc": "^42.0.0", - "eslint-plugin-json-es": "^1.5.7", - "eslint-plugin-mediawiki": "^0.5.0", - "eslint-plugin-mocha": "^10.2.0", - "eslint-plugin-n": "^16.0.1", - "eslint-plugin-no-jquery": "^2.7.0", - "eslint-plugin-qunit": "^7.3.4", + "eslint-plugin-es-x": "^7.6.0", + "eslint-plugin-jest": "^28.5.0", + "eslint-plugin-jsdoc": "48.2.5", + "eslint-plugin-json-es": "^1.6.0", + "eslint-plugin-mediawiki": "^0.7.0", + "eslint-plugin-mocha": "^10.4.3", + "eslint-plugin-n": "^17.7.0", + "eslint-plugin-no-jquery": "^3.0.1", + "eslint-plugin-qunit": "^8.1.1", "eslint-plugin-security": "^1.7.1", - "eslint-plugin-unicorn": "^47.0.0", - "eslint-plugin-vue": "^9.18.1", - "eslint-plugin-wdio": "^7.19.4", - "eslint-plugin-yml": "^1.10.0" + "eslint-plugin-unicorn": "^53.0.0", + "eslint-plugin-vue": "^9.26.0", + "eslint-plugin-wdio": "^8.24.12", + "eslint-plugin-yml": "^1.14.0" } }, "eslint-plugin-compat": { @@ -6307,45 +6073,46 @@ } }, "eslint-plugin-es-x": { - "version": "7.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.5.0.tgz", - "integrity": "sha512-ODswlDSO0HJDzXU0XvgZ3lF3lS3XAZEossh15Q2UHjwrJggWeBoKqqEsLTZLXl+dh5eOAozG0zRcYtuE35oTuQ==", + "version": "7.8.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-es-x/-/eslint-plugin-es-x-7.8.0.tgz", + "integrity": "sha512-7Ds8+wAAoV3T+LAKeu39Y5BzXCrGKrcISfgKEqTS4BDN8SFEDQd0S43jiQ8vIa3wUKD07qitZdfzlenSi8/0qQ==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.1.2", - "@eslint-community/regexpp": "^4.6.0", - "eslint-compat-utils": "^0.1.2" + "@eslint-community/regexpp": "^4.11.0", + "eslint-compat-utils": "^0.5.1" } }, "eslint-plugin-jest": { - "version": "27.6.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-27.6.0.tgz", - "integrity": "sha512-MTlusnnDMChbElsszJvrwD1dN3x6nZl//s4JD23BxB6MgR66TZlL064su24xEIS3VACfAoHV1vgyMgPw8nkdng==", + "version": "28.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-jest/-/eslint-plugin-jest-28.6.0.tgz", + "integrity": "sha512-YG28E1/MIKwnz+e2H7VwYPzHUYU4aMa19w0yGcwXnnmJH6EfgHahTJ2un3IyraUxNfnz/KUhJAFXNNwWPo12tg==", "dev": true, "requires": { - "@typescript-eslint/utils": "^5.10.0" + "@typescript-eslint/utils": "^6.0.0 || ^7.0.0" } }, "eslint-plugin-jsdoc": { - "version": "42.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-42.0.0.tgz", - "integrity": "sha512-qXYr45G8atPKowZbIOdmABukMzu9IMjAlj6j5Fe0iuUItznWSXUDiBj57ejXcbt8bkPrg83333nuz+cqGKFgcQ==", + "version": "48.2.5", + "resolved": "https://registry.npmjs.org/eslint-plugin-jsdoc/-/eslint-plugin-jsdoc-48.2.5.tgz", + "integrity": "sha512-ZeTfKV474W1N9niWfawpwsXGu+ZoMXu4417eBROX31d7ZuOk8zyG66SO77DpJ2+A9Wa2scw/jRqBPnnQo7VbcQ==", "dev": true, "requires": { - "@es-joy/jsdoccomment": "~0.37.0", + "@es-joy/jsdoccomment": "~0.43.0", "are-docs-informative": "^0.0.2", - "comment-parser": "1.3.1", + "comment-parser": "1.4.1", "debug": "^4.3.4", "escape-string-regexp": "^4.0.0", "esquery": "^1.5.0", - "semver": "^7.3.8", - "spdx-expression-parse": "^3.0.1" + "is-builtin-module": "^3.2.1", + "semver": "^7.6.1", + "spdx-expression-parse": "^4.0.0" } }, "eslint-plugin-json-es": { - "version": "1.5.7", - "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.5.7.tgz", - "integrity": "sha512-ehBHcCcJo4iViYx6vp3T+SmwzLIlVDzZNoVxN/txZIiPwDQ26mnYaN5iJ3imqN4l1b8z6rbxEH2kB9XDGxeU/w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-json-es/-/eslint-plugin-json-es-1.6.0.tgz", + "integrity": "sha512-xVn6hufGQH1Aa+yqOhQ43Cq28GuitTcMpQh+uaUh27U2qnVLBrvkN+2xQSnv6zpdLEPS35JCNhq4kvhR+PQCgw==", "dev": true, "requires": { "eslint-visitor-keys": "^3.3.0", @@ -6353,85 +6120,79 @@ } }, "eslint-plugin-mediawiki": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.5.0.tgz", - "integrity": "sha512-rjkHFyv3VDan/dmu7YpD1Rl9h64NOlz4mqqesRN316R+571+ymmb6lXVOdNMbT8H1iPhmtHc+nijVLVkn7pYDw==", + "version": "0.7.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-mediawiki/-/eslint-plugin-mediawiki-0.7.0.tgz", + "integrity": "sha512-1Y2nsFDPp96xOZCB5ivZAgqYe9i6w2u64VoCIaAzPyZnd/2h8VQR3CtD+u4Yk/KrpbKq9AAJjrs5LS8VAz6KOA==", "dev": true, "requires": { - "eslint-plugin-vue": "^8.7.1", + "eslint-plugin-vue": "^9.23.0", "upath": "^2.0.1" - }, - "dependencies": { - "eslint-plugin-vue": { - "version": "8.7.1", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-8.7.1.tgz", - "integrity": "sha512-28sbtm4l4cOzoO1LtzQPxfxhQABararUb1JtqusQqObJpWX2e/gmVyeYVfepizPFne0Q5cILkYGiBoV36L12Wg==", - "dev": true, - "requires": { - "eslint-utils": "^3.0.0", - "natural-compare": "^1.4.0", - "nth-check": "^2.0.1", - "postcss-selector-parser": "^6.0.9", - "semver": "^7.3.5", - "vue-eslint-parser": "^8.0.1" - } - }, - "vue-eslint-parser": { - "version": "8.3.0", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-8.3.0.tgz", - "integrity": "sha512-dzHGG3+sYwSf6zFBa0Gi9ZDshD7+ad14DGOdTLjruRVgZXe2J+DcZ9iUhyR48z5g1PqRa20yt3Njna/veLJL/g==", - "dev": true, - "requires": { - "debug": "^4.3.2", - "eslint-scope": "^7.0.0", - "eslint-visitor-keys": "^3.1.0", - "espree": "^9.0.0", - "esquery": "^1.4.0", - "lodash": "^4.17.21", - "semver": "^7.3.5" - } - } } }, "eslint-plugin-mocha": { - "version": "10.2.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.2.0.tgz", - "integrity": "sha512-ZhdxzSZnd1P9LqDPF0DBcFLpRIGdh1zkF2JHnQklKQOvrQtT73kdP5K9V2mzvbLR+cCAO9OI48NXK/Ax9/ciCQ==", + "version": "10.4.3", + "resolved": "https://registry.npmjs.org/eslint-plugin-mocha/-/eslint-plugin-mocha-10.4.3.tgz", + "integrity": "sha512-emc4TVjq5Ht0/upR+psftuz6IBG5q279p+1dSRDeHf+NS9aaerBi3lXKo1SEzwC29hFIW21gO89CEWSvRsi8IQ==", "dev": true, "requires": { "eslint-utils": "^3.0.0", + "globals": "^13.24.0", "rambda": "^7.4.0" } }, "eslint-plugin-n": { - "version": "16.5.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-16.5.0.tgz", - "integrity": "sha512-Hw02Bj1QrZIlKyj471Tb1jSReTl4ghIMHGuBGiMVmw+s0jOPbI4CBuYpGbZr+tdQ+VAvSK6FDSta3J4ib/SKHQ==", + "version": "17.9.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-n/-/eslint-plugin-n-17.9.0.tgz", + "integrity": "sha512-CPSaXDXdrT4nsrOrO4mT4VB6FMUkoySRkHWuuJJHVqsIEjIeZgMY1H7AzSwPbDScikBmLN82KeM1u7ixV7PzGg==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", - "builtins": "^5.0.1", + "enhanced-resolve": "^5.17.0", "eslint-plugin-es-x": "^7.5.0", "get-tsconfig": "^4.7.0", + "globals": "^15.0.0", "ignore": "^5.2.4", - "is-builtin-module": "^3.2.1", - "is-core-module": "^2.12.1", - "minimatch": "^3.1.2", - "resolve": "^1.22.2", + "minimatch": "^9.0.0", "semver": "^7.5.3" + }, + "dependencies": { + "brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "requires": { + "balanced-match": "^1.0.0" + } + }, + "globals": { + "version": "15.8.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-15.8.0.tgz", + "integrity": "sha512-VZAJ4cewHTExBWDHR6yptdIBlx9YSSZuwojj9Nt5mBRXQzrKakDsVKQ1J63sklLvzAJm0X5+RpO4i3Y2hcOnFw==", + "dev": true + }, + "minimatch": { + "version": "9.0.5", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.5.tgz", + "integrity": "sha512-G6T0ZX48xgozx7587koeX9Ys2NYy6Gmv//P89sEte9V9whIapMNF4idKxnW2QtCcLiTWlb/wfCabAtAFWhhBow==", + "dev": true, + "requires": { + "brace-expansion": "^2.0.1" + } + } } }, "eslint-plugin-no-jquery": { - "version": "2.7.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-2.7.0.tgz", - "integrity": "sha512-Aeg7dA6GTH1AcWLlBtWNzOU9efK5KpNi7b0EhBO0o0M+awyzguUUo8gF6hXGjQ9n5h8/uRtYv9zOqQkeC5CG0w==", + "version": "3.0.2", + "resolved": "https://registry.npmjs.org/eslint-plugin-no-jquery/-/eslint-plugin-no-jquery-3.0.2.tgz", + "integrity": "sha512-n/+6p6PFhWDNPVLJj1463hw4OTIRBbROGcbhmtOHTgw7yihSKzkwZiQ00EJTneyeR3jRiw5lpWSMCCBhtb8t2g==", "dev": true, "requires": {} }, "eslint-plugin-qunit": { - "version": "7.3.4", - "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-7.3.4.tgz", - "integrity": "sha512-EbDM0zJerH9zVdUswMJpcFF7wrrpvsGuYfNexUpa5hZkkdFhaFcX+yD+RSK4Nrauw4psMGlcqeWUMhaVo+Manw==", + "version": "8.1.1", + "resolved": "https://registry.npmjs.org/eslint-plugin-qunit/-/eslint-plugin-qunit-8.1.1.tgz", + "integrity": "sha512-j3xhiAf2Wvr8Dfwl5T6tlJ+F55vqYE9ZdAHUOTzq1lGerYrXzOS46RvK4SSWug2D8sl3ZYr2lA4/hgVXgLloxw==", "dev": true, "requires": { "eslint-utils": "^3.0.0", @@ -6448,58 +6209,101 @@ } }, "eslint-plugin-unicorn": { - "version": "47.0.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-47.0.0.tgz", - "integrity": "sha512-ivB3bKk7fDIeWOUmmMm9o3Ax9zbMz1Bsza/R2qm46ufw4T6VBFBaJIR1uN3pCKSmSXm8/9Nri8V+iUut1NhQGA==", + "version": "53.0.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-unicorn/-/eslint-plugin-unicorn-53.0.0.tgz", + "integrity": "sha512-kuTcNo9IwwUCfyHGwQFOK/HjJAYzbODHN3wP0PgqbW+jbXqpNWxNVpVhj2tO9SixBwuAdmal8rVcWKBxwFnGuw==", "dev": true, "requires": { - "@babel/helper-validator-identifier": "^7.19.1", + "@babel/helper-validator-identifier": "^7.24.5", "@eslint-community/eslint-utils": "^4.4.0", - "ci-info": "^3.8.0", + "@eslint/eslintrc": "^3.0.2", + "ci-info": "^4.0.0", "clean-regexp": "^1.0.0", + "core-js-compat": "^3.37.0", "esquery": "^1.5.0", "indent-string": "^4.0.0", "is-builtin-module": "^3.2.1", "jsesc": "^3.0.2", - "lodash": "^4.17.21", "pluralize": "^8.0.0", "read-pkg-up": "^7.0.1", - "regexp-tree": "^0.1.24", + "regexp-tree": "^0.1.27", "regjsparser": "^0.10.0", - "safe-regex": "^2.1.1", - "semver": "^7.3.8", + "semver": "^7.6.1", "strip-indent": "^3.0.0" + }, + "dependencies": { + "@eslint/eslintrc": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/@eslint/eslintrc/-/eslintrc-3.1.0.tgz", + "integrity": "sha512-4Bfj15dVJdoy3RfZmmo86RK1Fwzn6SstsvK9JS+BaVKqC6QQQQyXekNaC+g+LKNgkQ+2VhGAzm6hO40AhMR3zQ==", + "dev": true, + "requires": { + "ajv": "^6.12.4", + "debug": "^4.3.2", + "espree": "^10.0.1", + "globals": "^14.0.0", + "ignore": "^5.2.0", + "import-fresh": "^3.2.1", + "js-yaml": "^4.1.0", + "minimatch": "^3.1.2", + "strip-json-comments": "^3.1.1" + } + }, + "eslint-visitor-keys": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/eslint-visitor-keys/-/eslint-visitor-keys-4.0.0.tgz", + "integrity": "sha512-OtIRv/2GyiF6o/d8K7MYKKbXrOUBIK6SfkIRM4Z0dY3w+LiQ0vy3F57m0Z71bjbyeiWFiHJ8brqnmE6H6/jEuw==", + "dev": true + }, + "espree": { + "version": "10.1.0", + "resolved": "https://registry.npmjs.org/espree/-/espree-10.1.0.tgz", + "integrity": "sha512-M1M6CpiE6ffoigIOWYO9UDP8TMUw9kqb21tf+08IgDYjCsOvCuDt4jQcZmoYxx+w7zlKw9/N0KXfto+I8/FrXA==", + "dev": true, + "requires": { + "acorn": "^8.12.0", + "acorn-jsx": "^5.3.2", + "eslint-visitor-keys": "^4.0.0" + } + }, + "globals": { + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/globals/-/globals-14.0.0.tgz", + "integrity": "sha512-oahGvuMGQlPw/ivIYBjVSrWAfWLBeku5tpPE2fOPLi+WHffIWbuh2tCjhyQhTBPMf5E9jDEH4FOmTYgYwbKwtQ==", + "dev": true + } } }, "eslint-plugin-vue": { - "version": "9.19.2", - "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.19.2.tgz", - "integrity": "sha512-CPDqTOG2K4Ni2o4J5wixkLVNwgctKXFu6oBpVJlpNq7f38lh9I80pRTouZSJ2MAebPJlINU/KTFSXyQfBUlymA==", + "version": "9.27.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-vue/-/eslint-plugin-vue-9.27.0.tgz", + "integrity": "sha512-5Dw3yxEyuBSXTzT5/Ge1X5kIkRTQ3nvBn/VwPwInNiZBSJOO/timWMUaflONnFBzU6NhB68lxnCda7ULV5N7LA==", "dev": true, "requires": { "@eslint-community/eslint-utils": "^4.4.0", + "globals": "^13.24.0", "natural-compare": "^1.4.0", "nth-check": "^2.1.1", - "postcss-selector-parser": "^6.0.13", - "semver": "^7.5.4", - "vue-eslint-parser": "^9.3.1", + "postcss-selector-parser": "^6.0.15", + "semver": "^7.6.0", + "vue-eslint-parser": "^9.4.3", "xml-name-validator": "^4.0.0" } }, "eslint-plugin-wdio": { - "version": "7.25.3", - "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-7.25.3.tgz", - "integrity": "sha512-2zbYwV14Md9FNlyhaIILVGPB6w4bu2eJdOTywDUs2Qy4ebcQNwrxB0qCaf7Rm4O+T0Ir+tdYHYBBfbDocSLKng==", + "version": "8.37.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-wdio/-/eslint-plugin-wdio-8.37.0.tgz", + "integrity": "sha512-X217zXxSqj1IPWu3bxN7D/xEUmNk7Jg5lBf2JwYH3mCogaqL2tnHZnwt0EQ5D9oEejfEl2+4zqHSzhXq1X7F2A==", "dev": true }, "eslint-plugin-yml": { - "version": "1.11.0", - "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.11.0.tgz", - "integrity": "sha512-NBZP1NDGy0u38pY5ieix75jxS9GNOJy9xd4gQa0rU4gWbfEsVhKDwuFaQ6RJpDbv6Lq5TtcAZS/YnAc0oeRw0w==", + "version": "1.14.0", + "resolved": "https://registry.npmjs.org/eslint-plugin-yml/-/eslint-plugin-yml-1.14.0.tgz", + "integrity": "sha512-ESUpgYPOcAYQO9czugcX5OqRvn/ydDVwGCPXY4YjPqc09rHaUVUA6IE6HLQys4rXk/S+qx3EwTd1wHCwam/OWQ==", "dev": true, "requires": { "debug": "^4.3.2", - "eslint-compat-utils": "^0.1.1", + "eslint-compat-utils": "^0.5.0", "lodash": "^4.17.21", "natural-compare": "^1.4.0", "yaml-eslint-parser": "^1.2.1" @@ -6654,6 +6458,12 @@ "integrity": "sha512-DCXu6Ifhqcks7TZKY3Hxp3y6qphY5SJZmrWMDrKcERSOXWQdMhU9Ig/PYrzyw/ul9jOIyh0N4M0tbC5hodg8dw==", "dev": true }, + "fast-uri": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.0.1.tgz", + "integrity": "sha512-MWipKbbYiYI0UC7cl8m/i/IWTqfC8YXsqjzybjddLsFjStroQzsHXkc73JutMvBiXmOvapk+axIl79ig5t55Bw==", + "dev": true + }, "fastest-levenshtein": { "version": "1.0.16", "resolved": "https://registry.npmjs.org/fastest-levenshtein/-/fastest-levenshtein-1.0.16.tgz", @@ -6679,9 +6489,9 @@ } }, "fill-range": { - "version": "7.0.1", - "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.0.1.tgz", - "integrity": "sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ==", + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", "dev": true, "requires": { "to-regex-range": "^5.0.1" @@ -6740,9 +6550,9 @@ } }, "flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==", + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==", "dev": true }, "for-in": { @@ -6779,9 +6589,9 @@ "dev": true }, "get-tsconfig": { - "version": "4.7.2", - "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.2.tgz", - "integrity": "sha512-wuMsz4leaj5hbGgg4IvDU0bqJagpftG5l5cXIAvo8uZrqn0NJqwtfupTN00VnkQJPcIRrxYrm1Ue24btpCha2A==", + "version": "4.7.6", + "resolved": "https://registry.npmjs.org/get-tsconfig/-/get-tsconfig-4.7.6.tgz", + "integrity": "sha512-ZAqrLlu18NbDdRaHq+AKXzAmqIUPswPWKUchfytdAjiRFnCe5ojG2bstg6mRiZabkKfCoL/e98pbBELIV/YCeA==", "dev": true, "requires": { "resolve-pkg-maps": "^1.0.0" @@ -6880,6 +6690,12 @@ "integrity": "sha512-xYfnw62CKG8nLkZBfWbhWwDw02CHty86jfPcc2cr3ZfeuK9ysoVPPEUxf21bAD/rWAgk52SuBrLJlefNy8mvFg==", "dev": true }, + "graceful-fs": { + "version": "4.2.11", + "resolved": "https://registry.npmjs.org/graceful-fs/-/graceful-fs-4.2.11.tgz", + "integrity": "sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ==", + "dev": true + }, "graphemer": { "version": "1.4.0", "resolved": "https://registry.npmjs.org/graphemer/-/graphemer-1.4.0.tgz", @@ -6944,10 +6760,13 @@ } }, "grunt-banana-checker": { - "version": "0.11.1", - "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.11.1.tgz", - "integrity": "sha512-CF0h/TXaX9sbF2yIz+fUfJc4Zvms7XGYQ7ZYMD5+vv0LMZzSFf7JSHXDaBEs72nQWw4r4ap5fOW3baAliW+0bQ==", - "dev": true + "version": "0.13.0", + "resolved": "https://registry.npmjs.org/grunt-banana-checker/-/grunt-banana-checker-0.13.0.tgz", + "integrity": "sha512-uAUKILcP69Q4OJHHV2wzxqVaoXB8G3Uh/XuSJLn0Bk/9+WiUY/Q4+OX7dUhrPPeDZPtoGh37qqJLVvZlDTUecg==", + "dev": true, + "requires": { + "chalk": "4.1.2" + } }, "grunt-cli": { "version": "1.4.3", @@ -7028,19 +6847,13 @@ } }, "grunt-stylelint": { - "version": "0.19.0", - "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.19.0.tgz", - "integrity": "sha512-td+OvkfQ/2bYXNTBAlnpXmfa6sddLSloXRp1zoUONcMScbvEq5S3GSkOZKpCjK90WSjTYR0L7WYFcMVd1TXd+w==", + "version": "0.20.1", + "resolved": "https://registry.npmjs.org/grunt-stylelint/-/grunt-stylelint-0.20.1.tgz", + "integrity": "sha512-tDep9ceEerB+fK6CkzPBXu5qPM7RuwCRgfrtwugEyYYnxINreMZktqQU5eoTW+MhhFj81uWQQnxf+c4geyAmQg==", "dev": true, "requires": { "chalk": "^4.1.2" - } - }, - "hard-rejection": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/hard-rejection/-/hard-rejection-2.1.0.tgz", - "integrity": "sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==", - "dev": true + } }, "has-flag": { "version": "4.0.0", @@ -7106,9 +6919,9 @@ } }, "ignore": { - "version": "5.3.0", - "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.0.tgz", - "integrity": "sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg==", + "version": "5.3.1", + "resolved": "https://registry.npmjs.org/ignore/-/ignore-5.3.1.tgz", + "integrity": "sha512-5Fytz/IraMjqpwfd34ke28PTVMjZjJG2MPn5t7OE4eUCUNf8BAa7b5WUS9/Qvr6mwOQS7Mk6vdsMno5he+T8Xw==", "dev": true }, "import-fresh": { @@ -7121,12 +6934,6 @@ "resolve-from": "^4.0.0" } }, - "import-lazy": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/import-lazy/-/import-lazy-4.0.0.tgz", - "integrity": "sha512-rKtvo6a868b5Hu3heneU+L4yEQ4jYKLtjpnPeUdK7h0yzXGmyBTypknlkCvHFBqfX9YlorEiMM6Dnq/5atfHkw==", - "dev": true - }, "imurmurhash": { "version": "0.1.4", "resolved": "https://registry.npmjs.org/imurmurhash/-/imurmurhash-0.1.4.tgz", @@ -7234,12 +7041,6 @@ "integrity": "sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==", "dev": true }, - "is-plain-obj": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-1.1.0.tgz", - "integrity": "sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==", - "dev": true - }, "is-plain-object": { "version": "2.0.4", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-2.0.4.tgz", @@ -7358,11 +7159,10 @@ "dev": true }, "known-css-properties": { - "version": "0.29.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", - "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", - "dev": true, - "peer": true + "version": "0.34.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.34.0.tgz", + "integrity": "sha512-tBECoUqNFbyAY4RrbqsBQqDFpGXAEbdD5QKr8kACx3+rnArmuuR22nKQWKazvp07N9yjTyDZaw/20UIH8tL9DQ==", + "dev": true }, "ldjson-stream": { "version": "1.2.1", @@ -7372,30 +7172,6 @@ "requires": { "split2": "^0.2.1", "through2": "^0.6.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } } }, "levn": { @@ -7477,15 +7253,6 @@ "integrity": "sha512-jttmRe7bRse52OsWIMDLaXxWqRAmtIUccAQ3garviCqJjafXOfNMO0yMfNpdD6zbGaTU0P5Nz7e7gAT6cKmJRw==", "dev": true }, - "lru-cache": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-6.0.0.tgz", - "integrity": "sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==", - "dev": true, - "requires": { - "yallist": "^4.0.0" - } - }, "make-iterator": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/make-iterator/-/make-iterator-1.0.1.tgz", @@ -7501,12 +7268,6 @@ "integrity": "sha512-8y/eV9QQZCiyn1SprXSrCmqJN0yNRATe+PO8ztwqrvrbdRLA3eYJF0yaR0YayLWkMbsQSKWS9N2gPcGEc4UsZg==", "dev": true }, - "map-obj": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/map-obj/-/map-obj-4.3.0.tgz", - "integrity": "sha512-hdN1wVrZbb29eBGiGjJbeP8JbKjq1urkHJ/LIP/NY48MZ1QVXUsQBV1G1zvYFHn1XE06cwjBsOI2K3Ulnj1YXQ==", - "dev": true - }, "mathml-tag-names": { "version": "2.1.3", "resolved": "https://registry.npmjs.org/mathml-tag-names/-/mathml-tag-names-2.1.3.tgz", @@ -7520,76 +7281,10 @@ "dev": true }, "meow": { - "version": "10.1.5", - "resolved": "https://registry.npmjs.org/meow/-/meow-10.1.5.tgz", - "integrity": "sha512-/d+PQ4GKmGvM9Bee/DPa8z3mXs/pkvJE2KEThngVNOqtmljC6K7NMPxtc2JeZYTmpWb9k/TmxjeL18ez3h7vCw==", - "dev": true, - "requires": { - "@types/minimist": "^1.2.2", - "camelcase-keys": "^7.0.0", - "decamelize": "^5.0.0", - "decamelize-keys": "^1.1.0", - "hard-rejection": "^2.1.0", - "minimist-options": "4.1.0", - "normalize-package-data": "^3.0.2", - "read-pkg-up": "^8.0.0", - "redent": "^4.0.0", - "trim-newlines": "^4.0.2", - "type-fest": "^1.2.2", - "yargs-parser": "^20.2.9" - }, - "dependencies": { - "hosted-git-info": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-4.1.0.tgz", - "integrity": "sha512-kyCuEOWjJqZuDbRHzL8V93NzQhwIB71oFWSyzVo+KPZI+pnQPPxucdkrOZvkLRnrf5URsQM+IJ09Dw29cRALIA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } - }, - "normalize-package-data": { - "version": "3.0.3", - "resolved": "https://registry.npmjs.org/normalize-package-data/-/normalize-package-data-3.0.3.tgz", - "integrity": "sha512-p2W1sgqij3zMMyRC067Dg16bfzVH+w7hyegmpIvZ4JNjqtGOVAIvLmjBx3yP7YTe9vKJgkoNOPjwQGogDoMXFA==", - "dev": true, - "requires": { - "hosted-git-info": "^4.0.1", - "is-core-module": "^2.5.0", - "semver": "^7.3.4", - "validate-npm-package-license": "^3.0.1" - } - }, - "read-pkg": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-6.0.0.tgz", - "integrity": "sha512-X1Fu3dPuk/8ZLsMhEj5f4wFAF0DWoK7qhGJvgaijocXxBmSToKfbFtqbxMO7bVjNA1dmE5huAzjXj/ey86iw9Q==", - "dev": true, - "requires": { - "@types/normalize-package-data": "^2.4.0", - "normalize-package-data": "^3.0.2", - "parse-json": "^5.2.0", - "type-fest": "^1.0.1" - } - }, - "read-pkg-up": { - "version": "8.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-8.0.0.tgz", - "integrity": "sha512-snVCqPczksT0HS2EC+SxUndvSzn6LRCwpfSvLrIfR5BKDQQZMaI6jPRC9dYvYFDRAuFEAnkwww8kBBNE/3VvzQ==", - "dev": true, - "requires": { - "find-up": "^5.0.0", - "read-pkg": "^6.0.0", - "type-fest": "^1.0.1" - } - }, - "type-fest": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/type-fest/-/type-fest-1.4.0.tgz", - "integrity": "sha512-yGSza74xk0UG8k+pLh5oeoYirvIiWo5t0/o3zHHAO2tRDiZcxWP7fywNlXhqb6/r6sWvwi+RsyQMWhVLe4BVuA==", - "dev": true - } - } + "version": "13.2.0", + "resolved": "https://registry.npmjs.org/meow/-/meow-13.2.0.tgz", + "integrity": "sha512-pxQJQzB6djGPXh08dacEloMFopsOqGVRKFPYvPOt9XDZ1HasbgDZA74CJGreSU4G3Ak7EFJGoiH2auq+yXISgA==", + "dev": true }, "merge2": { "version": "1.4.1", @@ -7598,12 +7293,12 @@ "dev": true }, "micromatch": { - "version": "4.0.5", - "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.5.tgz", - "integrity": "sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA==", + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", "dev": true, "requires": { - "braces": "^3.0.2", + "braces": "^3.0.3", "picomatch": "^2.3.1" } }, @@ -7622,17 +7317,6 @@ "brace-expansion": "^1.1.7" } }, - "minimist-options": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/minimist-options/-/minimist-options-4.1.0.tgz", - "integrity": "sha512-Q4r8ghd80yhO/0j1O3B2BjweX3fiHg9cdOwjJd2J76Q135c+NDxGCqdYKQ1SKBuFfgWbAUzBfvYjPUEeNgqN1A==", - "dev": true, - "requires": { - "arrify": "^1.0.1", - "is-plain-obj": "^1.1.0", - "kind-of": "^6.0.3" - } - }, "ms": { "version": "2.1.2", "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", @@ -7650,14 +7334,6 @@ "array-union": "^2.1.0", "arrify": "^2.0.1", "minimatch": "^3.0.4" - }, - "dependencies": { - "arrify": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/arrify/-/arrify-2.0.1.tgz", - "integrity": "sha512-3duEwti880xqi4eAMN8AyR4a0ByT90zoYdLlevfrvU43vb0YZwZVfxOgxWrLXXXpyugL0hNZc9G6BiB5B3nUug==", - "dev": true - } } }, "nanoid": { @@ -7906,9 +7582,9 @@ "dev": true }, "picocolors": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", - "integrity": "sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", "dev": true }, "picomatch": { @@ -7924,20 +7600,20 @@ "dev": true }, "postcss": { - "version": "8.4.32", - "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.32.tgz", - "integrity": "sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw==", + "version": "8.4.39", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.39.tgz", + "integrity": "sha512-0vzE+lAiG7hZl1/9I8yzKLx3aR9Xbof3fBHKunvMfOCYAtMhrsnccJY2iTURb9EZd5+pLuiNV9/c/GZJOHsgIw==", "dev": true, "requires": { "nanoid": "^3.3.7", - "picocolors": "^1.0.0", - "source-map-js": "^1.0.2" + "picocolors": "^1.0.1", + "source-map-js": "^1.2.0" } }, "postcss-html": { - "version": "1.5.0", - "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.5.0.tgz", - "integrity": "sha512-kCMRWJRHKicpA166kc2lAVUGxDZL324bkj/pVOb6RhjB0Z5Krl7mN0AsVkBhVIRZZirY0lyQXG38HCVaoKVNoA==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/postcss-html/-/postcss-html-1.6.0.tgz", + "integrity": "sha512-OWgQ9/Pe23MnNJC0PL4uZp8k0EDaUvqpJFSiwFxOLClAhmD7UEisyhO3x5hVsD4xFrjReVTXydlrMes45dJ71w==", "dev": true, "requires": { "htmlparser2": "^8.0.0", @@ -7947,10 +7623,17 @@ }, "dependencies": { "js-tokens": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.2.tgz", - "integrity": "sha512-Olnt+V7xYdvGze9YTbGFZIfQXuGV4R3nQwwl8BrtgaPE/wq8UFpUHWuTNc05saowhSr1ZO6tx+V6RjE9D5YQog==", + "version": "8.0.3", + "resolved": "https://registry.npmjs.org/js-tokens/-/js-tokens-8.0.3.tgz", + "integrity": "sha512-UfJMcSJc+SEXEl9lH/VLHSZbThQyLpw1vLO1Lb+j4RWDvG3N2f7yj3PVQA3cmkTBNldJ9eFnM+xEXxHIXrYiJw==", "dev": true + }, + "postcss-safe-parser": { + "version": "6.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", + "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "dev": true, + "requires": {} } } }, @@ -7961,12 +7644,6 @@ "dev": true, "requires": {} }, - "postcss-media-query-parser": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/postcss-media-query-parser/-/postcss-media-query-parser-0.2.3.tgz", - "integrity": "sha512-3sOlxmbKcSHMjlUXQZKQ06jOswE7oVkXPxmZdoB1r5l0q6gTFTQSHxNxOrCccElbW7dxNytifNEo8qidX2Vsig==", - "dev": true - }, "postcss-resolve-nested-selector": { "version": "0.1.1", "resolved": "https://registry.npmjs.org/postcss-resolve-nested-selector/-/postcss-resolve-nested-selector-0.1.1.tgz", @@ -7974,16 +7651,16 @@ "dev": true }, "postcss-safe-parser": { - "version": "6.0.0", - "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-6.0.0.tgz", - "integrity": "sha512-FARHN8pwH+WiS2OPCxJI8FuRJpTVnn6ZNFiqAM2aeW2LwTHWWmWgIyKC6cUo0L8aeKiF/14MNvnpls6R2PBeMQ==", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/postcss-safe-parser/-/postcss-safe-parser-7.0.0.tgz", + "integrity": "sha512-ovehqRNVCpuFzbXoTb4qLtyzK3xn3t/CUBxOs8LsnQjQrShaB4lKiHoVqY8ANaC0hBMHq5QVWk77rwGklFUDrg==", "dev": true, "requires": {} }, "postcss-selector-parser": { - "version": "6.0.13", - "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.0.13.tgz", - "integrity": "sha512-EaV1Gl4mUEV4ddhDnv/xtj7sxwrwxdetHdWUGnT4VJQf+4d05v6lHYZr8N573k5Z0BViss7BDhfWtKS3+sfAqQ==", + "version": "6.1.1", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.1.tgz", + "integrity": "sha512-b4dlw/9V8A71rLIDsSwVmak9z2DuBUB7CA1/wSdelNEzqsjoSPeADTWNO09lpH49Diy3/JIZ2bSPB1dI3LJCHg==", "dev": true, "requires": { "cssesc": "^3.0.0", @@ -8014,12 +7691,6 @@ "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", "dev": true }, - "quick-lru": { - "version": "5.1.1", - "resolved": "https://registry.npmjs.org/quick-lru/-/quick-lru-5.1.1.tgz", - "integrity": "sha512-WuyALRjWPDGtt/wzJiadO5AXY+8hZ80hVpe6MyivgraREW751X3SbhRvG3eLKOYN+8VEvqLcf3wdnt44Z4S4SA==", - "dev": true - }, "rambda": { "version": "7.5.0", "resolved": "https://registry.npmjs.org/rambda/-/rambda-7.5.0.tgz", @@ -8123,33 +7794,6 @@ "resolve": "^1.9.0" } }, - "redent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/redent/-/redent-4.0.0.tgz", - "integrity": "sha512-tYkDkVVtYkSVhuQ4zBgfvciymHaeuel+zFKXShfDnFP5SyVEP7qo70Rf1jTOTCx3vGNAbnEi/xFkcfQVMIBWag==", - "dev": true, - "requires": { - "indent-string": "^5.0.0", - "strip-indent": "^4.0.0" - }, - "dependencies": { - "indent-string": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/indent-string/-/indent-string-5.0.0.tgz", - "integrity": "sha512-m6FAo/spmsW2Ab2fU35JTYwtOKa2yAwXSwgjSv1TJzh4Mh7mC3lzAOVLBprb72XsTrgkEIsl7YrFNAiDiRhIGg==", - "dev": true - }, - "strip-indent": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/strip-indent/-/strip-indent-4.0.0.tgz", - "integrity": "sha512-mnVSV2l+Zv6BLpSD/8V87CW/y9EmmbYzGCIavsnsI6/nwn26DwffM/yztm30Z/I2DY9wdS3vXVCMnHDgZaVNoA==", - "dev": true, - "requires": { - "min-indent": "^1.0.1" - } - } - } - }, "regexp-tree": { "version": "0.1.27", "resolved": "https://registry.npmjs.org/regexp-tree/-/regexp-tree-0.1.27.tgz", @@ -8270,13 +7914,10 @@ "dev": true }, "semver": { - "version": "7.5.4", - "resolved": "https://registry.npmjs.org/semver/-/semver-7.5.4.tgz", - "integrity": "sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA==", - "dev": true, - "requires": { - "lru-cache": "^6.0.0" - } + "version": "7.6.3", + "resolved": "https://registry.npmjs.org/semver/-/semver-7.6.3.tgz", + "integrity": "sha512-oVekP1cKtI+CTDvHWYFUcMtsK/00wmAEfyqKfNdARm8u1wNVhSgaX7A8d4UuIlUI5e84iEwOhs7ZPYRmzU9U6A==", + "dev": true }, "shebang-command": { "version": "2.0.0", @@ -8323,9 +7964,9 @@ "dev": true }, "source-map-js": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.0.2.tgz", - "integrity": "sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw==", + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", "dev": true }, "spdx-correct": { @@ -8336,18 +7977,30 @@ "requires": { "spdx-expression-parse": "^3.0.0", "spdx-license-ids": "^3.0.0" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + } } }, "spdx-exceptions": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz", - "integrity": "sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A==", + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==", "dev": true }, "spdx-expression-parse": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", - "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-4.0.0.tgz", + "integrity": "sha512-Clya5JIij/7C6bRR22+tnGXbc4VKlibKSVj2iHvVeX5iMW7s1SIQlqu699JkODJJIhh/pUu8L0/VLh8xflD+LQ==", "dev": true, "requires": { "spdx-exceptions": "^2.1.0", @@ -8355,9 +8008,9 @@ } }, "spdx-license-ids": { - "version": "3.0.16", - "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.16.tgz", - "integrity": "sha512-eWN+LnM3GR6gPu35WxNgbGl8rmY1AEmoMDvL/QD6zYmPWgywxWqJWNdLGT+ke8dKNWrcYgYjPpG5gbTfghP8rw==", + "version": "3.0.18", + "resolved": "https://registry.npmjs.org/spdx-license-ids/-/spdx-license-ids-3.0.18.tgz", + "integrity": "sha512-xxRs31BqRYHwiMzudOrpSiHtZ8i/GeionCBDSilhYRj+9gIcI8wCZTlXZKu9vZIVqViP3dcp9qE5G6AlIaD+TQ==", "dev": true }, "split2": { @@ -8367,30 +8020,6 @@ "dev": true, "requires": { "through2": "~0.6.1" - }, - "dependencies": { - "readable-stream": { - "version": "1.0.34", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", - "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", - "dev": true, - "requires": { - "core-util-is": "~1.0.0", - "inherits": "~2.0.1", - "isarray": "0.0.1", - "string_decoder": "~0.10.x" - } - }, - "through2": { - "version": "0.6.5", - "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", - "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", - "dev": true, - "requires": { - "readable-stream": ">=1.0.33-1 <1.1.0-0", - "xtend": ">=4.0.0 <4.1.0-0" - } - } } }, "sprintf-js": { @@ -8399,6 +8028,12 @@ "integrity": "sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==", "dev": true }, + "stream-shift": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/stream-shift/-/stream-shift-1.0.3.tgz", + "integrity": "sha512-76ORR0DO1o1hlKwTbi/DM3EXWGf3ZJYO8cXX5RJwnul2DEg2oyoZyjLNoQM8WsvZiFKCRfC1O0J7iCvie3RZmQ==", + "dev": true + }, "string_decoder": { "version": "0.10.31", "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-0.10.31.tgz", @@ -8447,69 +8082,81 @@ "dev": true }, "stylelint": { - "version": "15.11.0", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.11.0.tgz", - "integrity": "sha512-78O4c6IswZ9TzpcIiQJIN49K3qNoXTM8zEJzhaTE/xRTCZswaovSEVIa/uwbOltZrk16X4jAxjaOhzz/hTm1Kw==", + "version": "16.7.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.7.0.tgz", + "integrity": "sha512-Q1ATiXlz+wYr37a7TGsfvqYn2nSR3T/isw3IWlZQzFzCNoACHuGBb6xBplZXz56/uDRJHIygxjh7jbV/8isewA==", "dev": true, - "peer": true, "requires": { - "@csstools/css-parser-algorithms": "^2.3.1", - "@csstools/css-tokenizer": "^2.2.0", - "@csstools/media-query-list-parser": "^2.1.4", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^2.7.1", + "@csstools/css-tokenizer": "^2.4.1", + "@csstools/media-query-list-parser": "^2.1.13", + "@csstools/selector-specificity": "^3.1.1", + "@dual-bundle/import-meta-resolve": "^4.1.0", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.2.1", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.2", "css-tree": "^2.3.1", - "debug": "^4.3.4", - "fast-glob": "^3.3.1", + "debug": "^4.3.5", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^7.0.0", + "file-entry-cache": "^9.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^5.3.1", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.29.0", + "known-css-properties": "^0.34.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", - "micromatch": "^4.0.5", + "meow": "^13.2.0", + "micromatch": "^4.0.7", "normalize-path": "^3.0.0", - "picocolors": "^1.0.0", - "postcss": "^8.4.28", + "picocolors": "^1.0.1", + "postcss": "^8.4.39", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.1.0", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", + "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", - "table": "^6.8.1", + "table": "^6.8.2", "write-file-atomic": "^5.0.1" }, "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, "balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", - "dev": true, - "peer": true + "dev": true }, "file-entry-cache": { - "version": "7.0.2", - "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-7.0.2.tgz", - "integrity": "sha512-TfW7/1iI4Cy7Y8L6iqNdZQVvdXn0f8B4QcIXmkIbtTIe/Okm/nSlHb4IwGzRVOd3WfSieCgvf5cMzEfySAIl0g==", + "version": "9.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-9.0.0.tgz", + "integrity": "sha512-6MgEugi8p2tiUhqO7GnPsmbCCzj0YRCwwaTbpGRyKZesjRSzkqkAE9fPp7V2yMs5hwfgbQLgdvSSkGNg1s5Uvw==", + "dev": true, + "requires": { + "flat-cache": "^5.0.0" + } + }, + "flat-cache": { + "version": "5.0.0", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-5.0.0.tgz", + "integrity": "sha512-JrqFmyUl2PnPi1OvLyTVHnQvwQ0S+e6lGSwu8OkAZlSaNIZciTY2H/cOOROxsBA1m/LZNHDsqAgDZt6akWcjsQ==", "dev": true, - "peer": true, "requires": { - "flat-cache": "^3.2.0" + "flatted": "^3.3.1", + "keyv": "^4.5.4" } }, "global-modules": { @@ -8517,7 +8164,6 @@ "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-2.0.0.tgz", "integrity": "sha512-NGbfmJBp9x8IxyJSd1P+otYK8vonoJactOogrVfFRIAEY1ukil8RSKDz2Yo7wh1oihl51l/r6W4epkeKJHqL8A==", "dev": true, - "peer": true, "requires": { "global-prefix": "^3.0.0" } @@ -8527,7 +8173,6 @@ "resolved": "https://registry.npmjs.org/global-prefix/-/global-prefix-3.0.0.tgz", "integrity": "sha512-awConJSVCHVGND6x3tmMaKcQvwXLhjdkmomy2W+Goaui8YPgYgXJZewhg3fWC+DlfqqQuWg8AwqjGTD2nAPVWg==", "dev": true, - "peer": true, "requires": { "ini": "^1.3.5", "kind-of": "^6.0.2", @@ -8538,22 +8183,28 @@ "version": "5.0.0", "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true, - "peer": true + "dev": true }, "resolve-from": { "version": "5.0.0", "resolved": "https://registry.npmjs.org/resolve-from/-/resolve-from-5.0.0.tgz", "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", + "dev": true + }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", "dev": true, - "peer": true + "requires": { + "ansi-regex": "^6.0.1" + } }, "which": { "version": "1.3.1", "resolved": "https://registry.npmjs.org/which/-/which-1.3.1.tgz", "integrity": "sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ==", "dev": true, - "peer": true, "requires": { "isexe": "^2.0.0" } @@ -8561,38 +8212,58 @@ } }, "stylelint-config-recommended": { - "version": "13.0.0", - "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-13.0.0.tgz", - "integrity": "sha512-EH+yRj6h3GAe/fRiyaoO2F9l9Tgg50AOFhaszyfov9v6ayXJ1IkSHwTxd7lB48FmOeSGDPLjatjO11fJpmarkQ==", + "version": "14.0.0", + "resolved": "https://registry.npmjs.org/stylelint-config-recommended/-/stylelint-config-recommended-14.0.0.tgz", + "integrity": "sha512-jSkx290CglS8StmrLp2TxAppIajzIBZKYm3IxT89Kg6fGlxbPiTiyH9PS5YUuVAFwaJLl1ikiXX0QWjI0jmgZQ==", "dev": true, "requires": {} }, "stylelint-config-wikimedia": { - "version": "0.16.1", - "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.16.1.tgz", - "integrity": "sha512-FDVUyDyCBap2o2HAeJqIobdVdSTur5HFX5FymoKrzfMIYWxIV/55lTpyL1PR71TfVMaroDXJrIftLFW9mXKFhQ==", + "version": "0.17.2", + "resolved": "https://registry.npmjs.org/stylelint-config-wikimedia/-/stylelint-config-wikimedia-0.17.2.tgz", + "integrity": "sha512-cc3PYhe1O/GTgsMOp+Ri3ru579YBbZ3Me0oU7xNb06n4iwyXYPz8qO5G4iQ13UH19UW2NIS8Tk0goPRrJ1RAfw==", "dev": true, "requires": { - "browserslist-config-wikimedia": "0.5.0", - "postcss-html": "1.5.0", + "@stylistic/stylelint-config": "1.0.1", + "@stylistic/stylelint-plugin": "2.0.0", + "browserslist-config-wikimedia": "0.7.0", + "postcss-html": "1.6.0", "postcss-less": "6.0.0", - "stylelint": "15.10.1", - "stylelint-config-recommended": "13.0.0", - "stylelint-no-unsupported-browser-features": "6.1.0", - "stylelint-stylistic": "0.4.3" + "stylelint": "16.2.0", + "stylelint-config-recommended": "14.0.0", + "stylelint-no-unsupported-browser-features": "8.0.1" }, "dependencies": { + "ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true + }, "balanced-match": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-2.0.0.tgz", "integrity": "sha512-1ugUSr8BHXRnK23KfuYS+gVMC3LB8QGH9W1iGtDPsNWoQbgtXSExkBu2aDR4epiGWZOjZsj6lDl/N/AqqTC3UA==", "dev": true }, - "browserslist-config-wikimedia": { - "version": "0.5.0", - "resolved": "https://registry.npmjs.org/browserslist-config-wikimedia/-/browserslist-config-wikimedia-0.5.0.tgz", - "integrity": "sha512-t+tvSnTeVhVF2lNRxoAlE51/ZCfUs5SNNZUnWu2N8xXOGMPTMyKk5l4mayvDdm+5L8oqmnALU+TjnN2Z+ZTCTw==", - "dev": true + "file-entry-cache": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/file-entry-cache/-/file-entry-cache-8.0.0.tgz", + "integrity": "sha512-XXTUwCvisa5oacNGRP9SfNtYBNAMi+RPwBFmblZEF7N7swHYQS6/Zfk7SRwx4D5j3CH211YNRco1DEMNVfZCnQ==", + "dev": true, + "requires": { + "flat-cache": "^4.0.0" + } + }, + "flat-cache": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/flat-cache/-/flat-cache-4.0.1.tgz", + "integrity": "sha512-f7ccFPK3SXFHpx15UIGyRJ/FJQctuKZ0zVuN3frBo4HnK3cay9VEW0R6yPYFHC0AgqhukPzKjq22t5DmAyqGyw==", + "dev": true, + "requires": { + "flatted": "^3.2.9", + "keyv": "^4.5.4" + } }, "global-modules": { "version": "2.0.0", @@ -8621,9 +8292,9 @@ "dev": true }, "known-css-properties": { - "version": "0.27.0", - "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.27.0.tgz", - "integrity": "sha512-uMCj6+hZYDoffuvAJjFAPz56E9uoowFHmTkqRtRq5WyC5Q6Cu/fTZKNQpX/RbzChBYLLl3lo8CjFZBAZXq9qFg==", + "version": "0.29.0", + "resolved": "https://registry.npmjs.org/known-css-properties/-/known-css-properties-0.29.0.tgz", + "integrity": "sha512-Ne7wqW7/9Cz54PDt4I3tcV+hAyat8ypyOGzYRJQfdxnnjeWsTxt1cy8pjvvKeI5kfXuyvULyeeAvwvvtAX3ayQ==", "dev": true }, "resolve-from": { @@ -8632,48 +8303,55 @@ "integrity": "sha512-qYg9KP24dD5qka9J47d0aVky0N+b4fTU89LN9iDnjB5waksiC49rvMB0PrUJQGoTmH50XPiqOvAjDfaijGxYZw==", "dev": true }, + "strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "requires": { + "ansi-regex": "^6.0.1" + } + }, "stylelint": { - "version": "15.10.1", - "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-15.10.1.tgz", - "integrity": "sha512-CYkzYrCFfA/gnOR+u9kJ1PpzwG10WLVnoxHDuBA/JiwGqdM9+yx9+ou6SE/y9YHtfv1mcLo06fdadHTOx4gBZQ==", + "version": "16.2.0", + "resolved": "https://registry.npmjs.org/stylelint/-/stylelint-16.2.0.tgz", + "integrity": "sha512-gwqU5AkIb52wrAzzn+359S3NIJDMl02TXLUaV2tzA/L6jUdpTwNt+MCxHlc8+Hb2bUHlYVo92YeSIryF2gJthA==", "dev": true, "requires": { - "@csstools/css-parser-algorithms": "^2.3.0", - "@csstools/css-tokenizer": "^2.1.1", - "@csstools/media-query-list-parser": "^2.1.2", - "@csstools/selector-specificity": "^3.0.0", + "@csstools/css-parser-algorithms": "^2.5.0", + "@csstools/css-tokenizer": "^2.2.3", + "@csstools/media-query-list-parser": "^2.1.7", + "@csstools/selector-specificity": "^3.0.1", "balanced-match": "^2.0.0", "colord": "^2.9.3", - "cosmiconfig": "^8.2.0", - "css-functions-list": "^3.1.0", + "cosmiconfig": "^9.0.0", + "css-functions-list": "^3.2.1", "css-tree": "^2.3.1", "debug": "^4.3.4", - "fast-glob": "^3.3.0", + "fast-glob": "^3.3.2", "fastest-levenshtein": "^1.0.16", - "file-entry-cache": "^6.0.1", + "file-entry-cache": "^8.0.0", "global-modules": "^2.0.0", "globby": "^11.1.0", "globjoin": "^0.1.4", "html-tags": "^3.3.1", - "ignore": "^5.2.4", - "import-lazy": "^4.0.0", + "ignore": "^5.3.0", "imurmurhash": "^0.1.4", "is-plain-object": "^5.0.0", - "known-css-properties": "^0.27.0", + "known-css-properties": "^0.29.0", "mathml-tag-names": "^2.1.3", - "meow": "^10.1.5", + "meow": "^13.1.0", "micromatch": "^4.0.5", "normalize-path": "^3.0.0", "picocolors": "^1.0.0", - "postcss": "^8.4.24", + "postcss": "^8.4.33", "postcss-resolve-nested-selector": "^0.1.1", - "postcss-safe-parser": "^6.0.0", - "postcss-selector-parser": "^6.0.13", + "postcss-safe-parser": "^7.0.0", + "postcss-selector-parser": "^6.0.15", "postcss-value-parser": "^4.2.0", "resolve-from": "^5.0.0", "string-width": "^4.2.3", - "strip-ansi": "^6.0.1", - "style-search": "^0.1.0", + "strip-ansi": "^7.1.0", "supports-hyperlinks": "^3.0.0", "svg-tags": "^1.0.0", "table": "^6.8.1", @@ -8692,35 +8370,13 @@ } }, "stylelint-no-unsupported-browser-features": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-6.1.0.tgz", - "integrity": "sha512-3Taj+z9PjIiY6cz4hg3eN8Khue3kMm9lPXYuEvdjAFXDK20uQo2NocJaWN6anIKclYlwrpkBAS9W/KV3qPTWsw==", - "dev": true, - "requires": { - "doiuse": "^4.4.1", - "lodash": "^4.17.15", - "postcss": "^8.4.16" - } - }, - "stylelint-stylistic": { - "version": "0.4.3", - "resolved": "https://registry.npmjs.org/stylelint-stylistic/-/stylelint-stylistic-0.4.3.tgz", - "integrity": "sha512-WphmneK3MRrm5ixvRPWy7+c9+EQUh0FPvNMXW/N9VD85vyqtpxUejpD+mxubVVht0fRgidcqBxtW3s3tU2Ujhw==", + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/stylelint-no-unsupported-browser-features/-/stylelint-no-unsupported-browser-features-8.0.1.tgz", + "integrity": "sha512-tc8Xn5DaqJhxTmbA4H8gZbYdAz027NfuSZv5+cVieQb7BtBrF/1/iKYdpcGwXPl3GtqkQrisiXuGqKkKnzWcLw==", "dev": true, "requires": { - "is-plain-object": "^5.0.0", - "postcss": "^8.4.21", - "postcss-media-query-parser": "^0.2.3", - "postcss-value-parser": "^4.2.0", - "style-search": "^0.1.0" - }, - "dependencies": { - "is-plain-object": { - "version": "5.0.0", - "resolved": "https://registry.npmjs.org/is-plain-object/-/is-plain-object-5.0.0.tgz", - "integrity": "sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q==", - "dev": true - } + "doiuse": "^6.0.2", + "postcss": "^8.4.32" } }, "supports-color": { @@ -8755,9 +8411,9 @@ "dev": true }, "table": { - "version": "6.8.1", - "resolved": "https://registry.npmjs.org/table/-/table-6.8.1.tgz", - "integrity": "sha512-Y4X9zqrCftUhMeH2EptSSERdVKt/nEdijTOacGD/97EKjhQ/Qs8RTlEGABSJNNN8lac9kheH+af7yAkEWlgneA==", + "version": "6.8.2", + "resolved": "https://registry.npmjs.org/table/-/table-6.8.2.tgz", + "integrity": "sha512-w2sfv80nrAh2VCbqR5AK27wswXhqcck2AhfnNW76beQXskGZ1V12GwS//yYVa3d3fcvAip2OUnbDAjW2k3v9fA==", "dev": true, "requires": { "ajv": "^8.0.1", @@ -8768,15 +8424,15 @@ }, "dependencies": { "ajv": { - "version": "8.12.0", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.12.0.tgz", - "integrity": "sha512-sRu1kpcO9yLtYxBKvqfTeh9KzZEwO3STyX1HT+4CaDzC6HpTGYhIhPIzj9XuKU7KYDwnaeh5hcOwjy1QuJzBPA==", + "version": "8.17.1", + "resolved": "https://registry.npmjs.org/ajv/-/ajv-8.17.1.tgz", + "integrity": "sha512-B/gBuNg5SiMTrPkC+A2+cW0RszwxYmn6VYxB/inlBStS5nx6xHIt/ehKRhIMhqusl7a8LjQoZnjCs5vhwxOQ1g==", "dev": true, "requires": { - "fast-deep-equal": "^3.1.1", + "fast-deep-equal": "^3.1.3", + "fast-uri": "^3.0.1", "json-schema-traverse": "^1.0.0", - "require-from-string": "^2.0.2", - "uri-js": "^4.2.2" + "require-from-string": "^2.0.2" } }, "json-schema-traverse": { @@ -8787,6 +8443,12 @@ } } }, + "tapable": { + "version": "2.2.1", + "resolved": "https://registry.npmjs.org/tapable/-/tapable-2.2.1.tgz", + "integrity": "sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ==", + "dev": true + }, "text-table": { "version": "0.2.0", "resolved": "https://registry.npmjs.org/text-table/-/text-table-0.2.0.tgz", @@ -8794,32 +8456,25 @@ "dev": true }, "through2": { - "version": "4.0.2", - "resolved": "https://registry.npmjs.org/through2/-/through2-4.0.2.tgz", - "integrity": "sha512-iOqSav00cVxEEICeD7TjLB1sueEL+81Wpzp2bY17uZjZN0pWZPuo4suZ/61VujxmqSGFfgOcNuTZ85QJwNZQpw==", + "version": "0.6.5", + "resolved": "https://registry.npmjs.org/through2/-/through2-0.6.5.tgz", + "integrity": "sha512-RkK/CCESdTKQZHdmKICijdKKsCRVHs5KsLZ6pACAmF/1GPUQhonHSXWNERctxEp7RmvjdNbZTL5z9V7nSCXKcg==", "dev": true, "requires": { - "readable-stream": "3" + "readable-stream": ">=1.0.33-1 <1.1.0-0", + "xtend": ">=4.0.0 <4.1.0-0" }, "dependencies": { "readable-stream": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-3.6.2.tgz", - "integrity": "sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA==", - "dev": true, - "requires": { - "inherits": "^2.0.3", - "string_decoder": "^1.1.1", - "util-deprecate": "^1.0.1" - } - }, - "string_decoder": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/string_decoder/-/string_decoder-1.3.0.tgz", - "integrity": "sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA==", + "version": "1.0.34", + "resolved": "https://registry.npmjs.org/readable-stream/-/readable-stream-1.0.34.tgz", + "integrity": "sha512-ok1qVCJuRkNmvebYikljxJA/UEsKwLl2nI1OmaqAu4/UE+h0wKCHok4XkL/gvi39OacXvw59RJUOFUkDib2rHg==", "dev": true, "requires": { - "safe-buffer": "~5.2.0" + "core-util-is": "~1.0.0", + "inherits": "~2.0.1", + "isarray": "0.0.1", + "string_decoder": "~0.10.x" } } } @@ -8833,26 +8488,12 @@ "is-number": "^7.0.0" } }, - "trim-newlines": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/trim-newlines/-/trim-newlines-4.1.1.tgz", - "integrity": "sha512-jRKj0n0jXWo6kh62nA5TEh3+4igKDXLvzBJcPpiizP7oOolUrYIxmVBG9TOtHYFHoddUk6YvAkGeGoSVTXfQXQ==", - "dev": true - }, - "tslib": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/tslib/-/tslib-1.14.1.tgz", - "integrity": "sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg==", - "dev": true - }, - "tsutils": { - "version": "3.21.0", - "resolved": "https://registry.npmjs.org/tsutils/-/tsutils-3.21.0.tgz", - "integrity": "sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==", + "ts-api-utils": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/ts-api-utils/-/ts-api-utils-1.3.0.tgz", + "integrity": "sha512-UQMIo7pb8WRomKR1/+MFVLTroIvDVtMX3K6OUir8ynLyzB8Jeriont2bTAtmNPa1ekAgN7YPDyf6V+ygrdU+eQ==", "dev": true, - "requires": { - "tslib": "^1.8.1" - } + "requires": {} }, "type-check": { "version": "0.4.0", @@ -8870,9 +8511,9 @@ "dev": true }, "typescript": { - "version": "5.3.3", - "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.3.3.tgz", - "integrity": "sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw==", + "version": "5.5.4", + "resolved": "https://registry.npmjs.org/typescript/-/typescript-5.5.4.tgz", + "integrity": "sha512-Mtq29sKDAEYP7aljRgtPOpTvOfbwRWlS6dPRzwjdE+C0R4brX/GUyhHSecbHMFLNBLcJIPt9nl9yG5TZ1weH+Q==", "dev": true, "peer": true }, @@ -8899,13 +8540,13 @@ "dev": true }, "update-browserslist-db": { - "version": "1.0.13", - "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.0.13.tgz", - "integrity": "sha512-xebP81SNcPuNpPP3uzeW1NYXxI3rxyJzF3pD6sH4jE7o/IX+WtSpwnVU+qIsDPyk0d3hmFQ7mjqc6AtV604hbg==", + "version": "1.1.0", + "resolved": "https://registry.npmjs.org/update-browserslist-db/-/update-browserslist-db-1.1.0.tgz", + "integrity": "sha512-EdRAaAyk2cUE1wOf2DkEhzxqOQvFOoRJFNS6NeyJ01Gp2beMRpBAINjM2iDXE3KCuKhwnvHIQCJm6ThL2Z+HzQ==", "dev": true, "requires": { - "escalade": "^3.1.1", - "picocolors": "^1.0.0" + "escalade": "^3.1.2", + "picocolors": "^1.0.1" } }, "uri-js": { @@ -8940,12 +8581,24 @@ "requires": { "spdx-correct": "^3.0.0", "spdx-expression-parse": "^3.0.0" + }, + "dependencies": { + "spdx-expression-parse": { + "version": "3.0.1", + "resolved": "https://registry.npmjs.org/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz", + "integrity": "sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q==", + "dev": true, + "requires": { + "spdx-exceptions": "^2.1.0", + "spdx-license-ids": "^3.0.0" + } + } } }, "vue-eslint-parser": { - "version": "9.3.2", - "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.3.2.tgz", - "integrity": "sha512-q7tWyCVaV9f8iQyIA5Mkj/S6AoJ9KBN8IeUSf3XEmBrOtxOZnfTg5s4KClbZBCK3GtnT/+RyCLZyDHuZwTuBjg==", + "version": "9.4.3", + "resolved": "https://registry.npmjs.org/vue-eslint-parser/-/vue-eslint-parser-9.4.3.tgz", + "integrity": "sha512-2rYRLWlIpaiN8xbPiDyXZXRgLGOtWxERV7ND5fFAv5qo1D2N9Fu9MNajBNc6o13lZ+24DAWCkQCvj4klgmcITg==", "dev": true, "requires": { "debug": "^4.3.4", @@ -9011,22 +8664,16 @@ "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", "dev": true }, - "yallist": { - "version": "4.0.0", - "resolved": "https://registry.npmjs.org/yallist/-/yallist-4.0.0.tgz", - "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==", - "dev": true - }, "yaml": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.3.4.tgz", - "integrity": "sha512-8aAvwVUSHpfEqTQ4w/KMlf3HcRdt50E5ODIQJBw1fQ5RL34xabzxtUlzTXVqc4rkZsPbvrXKWnABCD7kWSmocA==", + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", "dev": true }, "yaml-eslint-parser": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.2.tgz", - "integrity": "sha512-pEwzfsKbTrB8G3xc/sN7aw1v6A6c/pKxLAkjclnAyo5g5qOh6eL9WGu0o3cSDQZKrTNk4KL4lQSwZW+nBkANEg==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/yaml-eslint-parser/-/yaml-eslint-parser-1.2.3.tgz", + "integrity": "sha512-4wZWvE398hCP7O8n3nXKu/vdq1HcH01ixYlCREaJL5NUMwQ0g3MaGFUBNSlmBtKmhbtVG/Cm6lyYmSVTEVil8A==", "dev": true, "requires": { "eslint-visitor-keys": "^3.0.0", @@ -9035,24 +8682,24 @@ } }, "yargs": { - "version": "16.2.0", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-16.2.0.tgz", - "integrity": "sha512-D1mvvtDG0L5ft/jGWkLpG1+m0eQxOfaBvTNELraWj22wSVUMWxZUvYgJYcKh6jGGIkJFhH4IZPQhR4TKpc8mBw==", + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", "dev": true, "requires": { - "cliui": "^7.0.2", + "cliui": "^8.0.1", "escalade": "^3.1.1", "get-caller-file": "^2.0.5", "require-directory": "^2.1.1", - "string-width": "^4.2.0", + "string-width": "^4.2.3", "y18n": "^5.0.5", - "yargs-parser": "^20.2.2" + "yargs-parser": "^21.1.1" } }, "yargs-parser": { - "version": "20.2.9", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-20.2.9.tgz", - "integrity": "sha512-y11nGElTIV+CT3Zv9t7VKl+Q3hTQoT9a1Qzezhhl6Rp21gJ/IVTW7Z3y9EWXhuUBC2Shnf+DX0antecpAwSP8w==", + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", "dev": true }, "yocto-queue": { diff --git a/package.json b/package.json index 8815f3b..38d3bd4 100644 --- a/package.json +++ b/package.json @@ -5,11 +5,11 @@ "test": "grunt test" }, "devDependencies": { - "eslint-config-wikimedia": "0.26.0", + "eslint-config-wikimedia": "0.28.2", "grunt": "1.6.1", - "grunt-banana-checker": "0.11.1", + "grunt-banana-checker": "0.13.0", "grunt-eslint": "24.3.0", - "grunt-stylelint": "0.19.0", - "stylelint-config-wikimedia": "0.16.1" + "grunt-stylelint": "0.20.1", + "stylelint-config-wikimedia": "0.17.2" } } diff --git a/resources/VersionCheck.js b/resources/VersionCheck.js index 06d625f..a337266 100644 --- a/resources/VersionCheck.js +++ b/resources/VersionCheck.js @@ -18,7 +18,7 @@ * @author thomas-topway-it <support@topway.it> * @copyright Copyright © 2021-2023, https://wikisphere.org */ -$( function () { +$( () => { if ( !mw.config.get( 'visualdata-show-notice-outdated-version' ) || mw.cookie.get( 'visualdata-check-latest-version' ) @@ -27,12 +27,12 @@ $( function () { } // display every 3 days - mw.loader.using( 'mediawiki.api', function () { + mw.loader.using( 'mediawiki.api', () => { new mw.Api() .postWithToken( 'csrf', { action: 'visualdata-check-latest-version' } ) - .done( function ( res ) { + .done( ( res ) => { if ( 'visualdata-check-latest-version' in res ) { if ( res[ 'visualdata-check-latest-version' ].result === 2 ) { var messageWidget = new OO.ui.MessageWidget( { diff --git a/resources/VisualData.js b/resources/VisualData.js index 196c94d..b81c428 100644 --- a/resources/VisualData.js +++ b/resources/VisualData.js @@ -41,7 +41,7 @@ VisualData = ( function () { }; new mw.Api() .postWithToken( 'csrf', payload ) - .done( function ( res ) { + .done( ( res ) => { if ( payload.action in res ) { var data = res[ payload.action ]; for ( var i in data ) { @@ -53,7 +53,7 @@ VisualData = ( function () { reject(); } } ) - .fail( function ( res ) { + .fail( ( res ) => { // eslint-disable-next-line no-console console.error( 'visualdata-load-data error', res ); reject( res ); @@ -74,7 +74,7 @@ VisualData = ( function () { return new Promise( ( resolve, reject ) => { new mw.Api() .postWithToken( 'csrf', payload ) - .done( function ( res ) { + .done( ( res ) => { if ( payload.action in res ) { var thisSchemas = JSON.parse( res[ payload.action ].schemas ); for ( var i in thisSchemas ) { @@ -86,7 +86,7 @@ VisualData = ( function () { } } } ) - .fail( function ( res ) { + .fail( ( res ) => { // eslint-disable-next-line no-console console.error( 'visualdata-get-schemas', res ); reject( res ); @@ -107,7 +107,7 @@ VisualData = ( function () { switch ( action ) { case 'update': - Schemas = jQuery.extend( Schemas, data.schemas ); + Schemas = Object.assign( Schemas, data.schemas ); break; case 'delete': @@ -117,13 +117,13 @@ VisualData = ( function () { break; case 'create': - Schemas = jQuery.extend( Schemas, data.schemas ); + Schemas = Object.assign( Schemas, data.schemas ); Schemas = VisualDataFunctions.sortObjectByKeys( Schemas ); break; case 'rename': delete Schemas[ data[ 'previous-label' ] ]; - Schemas = jQuery.extend( Schemas, data.schemas ); + Schemas = Object.assign( Schemas, data.schemas ); Schemas = VisualDataFunctions.sortObjectByKeys( Schemas ); break; } diff --git a/resources/VisualDataContentBlock.js b/resources/VisualDataContentBlock.js index 09c4f26..16ebe19 100644 --- a/resources/VisualDataContentBlock.js +++ b/resources/VisualDataContentBlock.js @@ -97,9 +97,7 @@ const VisualDataContentBlock = function ( phpConfig, windowManager ) { } ) ); - items = items.filter( function ( x ) { - return !( 'items' in x ) || x.items.length; - } ); + items = items.filter( ( x ) => !( 'items' in x ) || x.items.length ); this.isEmpty = !items.length; @@ -185,11 +183,11 @@ const VisualDataContentBlock = function ( phpConfig, windowManager ) { VisualDataFunctions.renameObjectKey( ParentObj, CurrentKey, objName ); - ParentObj[ objName ] = $.extend( ParentObj[ objName ], { wiki: obj } ); + ParentObj[ objName ] = Object.assign( ParentObj[ objName ], { wiki: obj } ); Callback(); - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); } @@ -200,7 +198,7 @@ const VisualDataContentBlock = function ( phpConfig, windowManager ) { ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; diff --git a/resources/VisualDataDatatables.js b/resources/VisualDataDatatables.js index 302b635..5e30678 100644 --- a/resources/VisualDataDatatables.js +++ b/resources/VisualDataDatatables.js @@ -39,7 +39,7 @@ const VisualDataDatatables = function () { }; }; -$( function () { +$( () => { var visualdataDatatables = new VisualDataDatatables(); $( '.visualdata.datatable' ).each( function () { diff --git a/resources/VisualDataFormField.js b/resources/VisualDataFormField.js index 85fc035..d98989c 100644 --- a/resources/VisualDataFormField.js +++ b/resources/VisualDataFormField.js @@ -91,8 +91,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { // remove options inputs and lookup widgets // except multiselect return ret.filter( - ( x ) => - ( VisualDataFunctions.lookupInputs.indexOf( x ) === -1 && + ( x ) => ( VisualDataFunctions.lookupInputs.indexOf( x ) === -1 && VisualDataFunctions.optionsInputs.indexOf( x ) === -1 ) || VisualDataFunctions.isMultiselect( x ) ); @@ -248,7 +247,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { return false; } - selectOptionsFrom.on( 'change', function ( value ) { + selectOptionsFrom.on( 'change', ( value ) => { fieldOptionsValues.toggle( value === 'options-values' ); fieldWikilist.toggle( value === 'options-wikilist' ); fieldOptionsLabelFormula.toggle( value !== 'options-askquery' ); @@ -308,7 +307,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { layout.toggle( visibleItems ); // eslint-disable-next-line no-unused-vars - availableInputsInput.on( 'change', function ( value ) { + availableInputsInput.on( 'change', ( value ) => { onSelectAvailableInputs(); } ); @@ -480,12 +479,12 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { layout.toggle( visibleItems ); // eslint-disable-next-line no-unused-vars - availableInputsInput.on( 'change', function ( value ) { + availableInputsInput.on( 'change', ( value ) => { onSelectAvailableInputs(); } ); // eslint-disable-next-line no-unused-vars - selectOptionsFrom.on( 'change', function ( value ) { + selectOptionsFrom.on( 'change', ( value ) => { onSelectAvailableInputs(); } ); @@ -567,10 +566,8 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { // ------------------ show-if ----------------- - var otherFields = Object.keys( ParentObj ).filter( ( x ) => { - return ( x !== CurrentKey && ParentObj[ x ].wiki.type === 'property' && - ParentObj[ x ].wiki[ 'multiple-items' ] === false ); - } ); + var otherFields = Object.keys( ParentObj ).filter( ( x ) => ( x !== CurrentKey && ParentObj[ x ].wiki.type === 'property' && + ParentObj[ x ].wiki[ 'multiple-items' ] === false ) ); var showifFieldInput = new OO.ui.DropdownInputWidget( { options: VisualDataFunctions.createDropDownOptions( otherFields, { key: 'value' } ), @@ -598,7 +595,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { value: getPropertyValue( 'showif-value' ) } ); - showifConditionInput.on( 'change', function ( value ) { + showifConditionInput.on( 'change', ( value ) => { showifValueInput.toggle( value !== '!null' ); updateModelShowif( getPropertyValue( 'visibility' ) === 'condition' ); } ); @@ -730,7 +727,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { } ); // eslint-disable-next-line no-unused-vars - SMWpropertiesInput.on( 'change', function ( value ) { + SMWpropertiesInput.on( 'change', ( value ) => { redrawAvailableInputs(); } ); @@ -805,7 +802,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { } ); // eslint-disable-next-line no-unused-vars - jsonSchemaFormatInput.on( 'change', function ( value ) { + jsonSchemaFormatInput.on( 'change', ( value ) => { redrawAvailableInputs(); } ); @@ -822,7 +819,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { items.push( fieldjsonSchemaFormatInput ); - jsonSchemaInput.on( 'change', function ( value ) { + jsonSchemaInput.on( 'change', ( value ) => { switch ( value ) { case 'string': fieldjsonSchemaFormatInput.toggle( true ); @@ -845,7 +842,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { ); if ( Config.SMW ) { - propertyModelInput.on( 'change', function ( value ) { + propertyModelInput.on( 'change', ( value ) => { switch ( value ) { case 'smw-property': fieldSMWpropertiesInput.toggle( true ); @@ -916,7 +913,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { value: availableInputsValue } ); - availableInputsInput.on( 'change', function ( value ) { + availableInputsInput.on( 'change', ( value ) => { var thisDefaultValueInput = getDefaultValueInput(); // eslint-disable-next-line no-use-before-define @@ -943,7 +940,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { defaultInputConfig ); - inputConfigButton.on( 'click', function () { + inputConfigButton.on( 'click', () => { var dataType = null; if ( Config.SMW ) { var SMWproperty = getPropertyValue( 'SMW-property' ); @@ -987,7 +984,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { align: 'top' } ); - multipleItemsInput.on( 'change', function ( value ) { + multipleItemsInput.on( 'change', ( value ) => { redrawAvailableInputs(); layoutParentSchema.toggle( value ); fieldRequiredInput.toggle( !value ); @@ -1125,7 +1122,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { updateModelShowif( value === 'condition' ); } - visibilityInput.on( 'change', function ( value ) { + visibilityInput.on( 'change', ( value ) => { onVisibilityInputChange( value ); } ); @@ -1164,15 +1161,13 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { Model.default = thisDefaultValueInput; } - items = items.filter( function ( x ) { - return !( 'items' in x ) || x.items.length; - } ); + items = items.filter( ( x ) => !( 'items' in x ) || x.items.length ); this.isEmpty = !items.length; this.fieldset.addItems( items ); - setTimeout( function () { + setTimeout( () => { VisualDataFunctions.removeNbspFromLayoutHeader( '#visualdata-processDialogEditField' ); @@ -1302,7 +1297,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { Callback(); - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); } @@ -1313,7 +1308,7 @@ const VisualDataFormField = function ( phpConfig, windowManager, schemas ) { ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; diff --git a/resources/VisualDataForms.js b/resources/VisualDataForms.js index 7456234..102e297 100644 --- a/resources/VisualDataForms.js +++ b/resources/VisualDataForms.js @@ -22,8 +22,6 @@ /* eslint-disable no-tabs */ /* eslint-disable no-unused-vars */ /* eslint-disable no-underscore-dangle */ -/* eslint-disable es-x/no-async-functions */ -/* eslint-disable compat/compat */ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager ) { var Model = {}; @@ -67,7 +65,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // @FIXME destroy/reinitialize on tab change function showVisualEditor() { function timeOut( i ) { - setTimeout( function () { + setTimeout( () => { if ( InputWidgets[ i ] && InputWidgets[ i ].$element.parent().is( ':visible' ) @@ -121,7 +119,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager } } - mw.loader.using( 'ext.VisualData.Maptiler', function () { + mw.loader.using( 'ext.VisualData.Maptiler', () => { var visualDataMaptiler = new VisualDataMaptiler(); visualDataMaptiler.initialize( obj.element, obj.data ); } ); @@ -250,7 +248,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager SchemasLayout.setTabPanel( schemaName ); if ( init ) { - SchemasLayout.on( 'set', function () { + SchemasLayout.on( 'set', () => { onTabSelect( SchemasLayout.getCurrentTabPanelName() ); } ); } @@ -260,7 +258,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager SchemasLayout.setPage( schemaName ); if ( init ) { - SchemasLayout.on( 'set', function () { + SchemasLayout.on( 'set', () => { onTabSelect( SchemasLayout.getCurrentPageName() ); } ); } @@ -277,7 +275,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // create deep copy, otherwise changes are // copied to Forms[ form ].properties[ property ][ 'input-config' ] - var inputConfig = $.extend( + var inputConfig = Object.assign( {}, // *** important !! cast to object VisualDataFunctions.deepCopy( field[ 'input-config' ] ), { value: config.data, required: required } @@ -493,7 +491,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager var askQuery = field[ 'options-askquery' ]; var regExp = new RegExp( '<' + sourceModel.pathNoIndex + '>' ); if ( regExp.test( askQuery ) ) { - ProcessModel.getModel( 'schema', sourceModel.schemaName ).then( function ( res ) { + ProcessModel.getModel( 'schema', sourceModel.schemaName ).then( ( res ) => { for ( var i in res.flatten ) { if ( res.flatten[ i ].pathNoIndex === sourceModel.pathNoIndex ) { @@ -567,14 +565,14 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager return new Promise( ( resolve, reject ) => { new mw.Api() .postWithToken( 'csrf', payload ) - .done( function ( thisRes ) { + .done( ( thisRes ) => { if ( payload.action in thisRes ) { var thisData = thisRes[ payload.action ]; thisData = JSON.parse( thisData.result ); resolve( thisData ); } } ) - .fail( function ( thisRes ) { + .fail( ( thisRes ) => { // eslint-disable-next-line no-console console.error( 'visualdata-askquery', thisRes ); reject( thisRes ); @@ -633,7 +631,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager OO.ui.mixin.GroupWidget.call( this, - $.extend( + Object.assign( { $group: this.$element }, @@ -736,7 +734,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // Mixin constructors OO.ui.mixin.GroupElement.call( this, - $.extend( + Object.assign( { $group: this.$element }, @@ -760,12 +758,12 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager var inputWidget = getInputWidget( config ); - inputWidget.on( 'change', function () { + inputWidget.on( 'change', () => { updateFieldsVisibility( config.model ); clearDependentFields( config.model.pathNoIndex ); } ); - inputWidget.$element.find( 'input' ).on( 'blur', function () { + inputWidget.$element.find( 'input' ).on( 'blur', () => { updateFieldsVisibility( config.model ); updateDependentFields( config.model ); } ); @@ -847,7 +845,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager fileUploadGroupWidget.removeItems( [ item ] ); }; - restoreButton.on( 'click', function () { + restoreButton.on( 'click', () => { inputWidget.toggle( false ); restoreButton.toggle( false ); fileUploadGroupWidget.removeItems( [ fileItemWidget ] ); @@ -861,12 +859,12 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // @FIXME move to FileItemWidget - this.on( 'fileUploaded', function ( file ) { + this.on( 'fileUploaded', ( file ) => { // eslint-disable-next-line no-console console.log( 'event fileUploaded', file ); } ); - this.on( 'fileUploadInit', function ( file ) { + this.on( 'fileUploadInit', ( file ) => { // eslint-disable-next-line no-console console.log( 'event fileUploadInit', file ); restoreButton.toggle( false ); @@ -875,20 +873,20 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager this.on( 'fileUploadProgress', - function ( file, progress, estimatedRemainingTime ) { + ( file, progress, estimatedRemainingTime ) => { loadedFiles[ file.name ].progress( progress, estimatedRemainingTime ); } ); - this.on( 'fileUploadComplete', function ( file, res ) { + this.on( 'fileUploadComplete', ( file, res ) => { loadedFiles[ file.name ].uploadComplete( file, res ); } ); - this.on( 'fileUploadErrorMessage', function ( file, errorMessage ) { + this.on( 'fileUploadErrorMessage', ( file, errorMessage ) => { loadedFiles[ file.name ].errorMessage( errorMessage ); } ); - this.on( 'fileUploadFail', function ( file, res ) { + this.on( 'fileUploadFail', ( file, res ) => { loadedFiles[ file.name ].fail( res ); } ); @@ -967,7 +965,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager var searchWidgetResults = searchWidget.getResults(); searchWidgetResults.multiselect = true; - searchWidgetResults.on( 'press', function ( value ) { + searchWidgetResults.on( 'press', ( value ) => { if ( value === null ) { return; } @@ -1046,7 +1044,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // }); } - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); @@ -1055,7 +1053,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager ProcessDialogSearch.prototype.getTeardownProcess = function ( data ) { return ProcessDialogSearch.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; @@ -1318,7 +1316,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager OO.ui.mixin.GroupWidget.call( this, - $.extend( { $group: this.$element }, config ) + Object.assign( { $group: this.$element }, config ) ); // OO.EventEmitter.call( this ); @@ -1373,7 +1371,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager flags: [ 'destructive' ] } ); - deleteButton.on( 'click', function () { + deleteButton.on( 'click', () => { Form.schemas.splice( Form.schemas.indexOf( data.schema.wiki.name ), 1 ); // delete Form.jsonData.schemas[ data.schema.wiki.name ]; delete ModelSchemas[ data.schema.wiki.name ]; @@ -1394,7 +1392,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // classes: ["VisualDataOptionsListDeleteButton"], } ); - editButton.on( 'click', function () { + editButton.on( 'click', () => { VisualDataSchemas.openSchemaDialog( [ data.schema.wiki.name ], 'properties' @@ -1531,11 +1529,11 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager GroupWidget.prototype.formLoaded = function () { // if ( this.data.root === true ) { - setTimeout( function () { + setTimeout( () => { VisualDataFunctions.removeNbspFromLayoutHeader( 'form' ); }, 30 ); - setTimeout( function () { + setTimeout( () => { VisualDataFunctions.removeNbspFromLayoutHeader( '#visualdataform-wrapper-dialog-' + FormID ); @@ -1656,7 +1654,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager function getFreeTextInput( wikitext, thisConfig ) { var thisInputWidget; - thisConfig = $.extend( + thisConfig = Object.assign( { name: `${ FormID }-model-freetext`, id: `${ FormID }-model-freetext` @@ -1666,7 +1664,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager if ( !wikitext || !Config.VEForAll ) { thisInputWidget = new OO.ui.MultilineTextInputWidget( - $.extend( + Object.assign( { autosize: true, rows: 6 @@ -1861,7 +1859,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager Model[ 'target-slot' ] = targetSlotInput; - targetSlotInput.on( 'change', function ( value ) { + targetSlotInput.on( 'change', ( value ) => { if ( freeTextField ) { freeTextField.toggle( value !== 'main' ); } @@ -1931,7 +1929,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager value: Config.contentModel } ); - contentModelInput.on( 'change', async function ( value ) { + contentModelInput.on( 'change', async ( value ) => { if ( !( 'freetext' in Model ) ) { return; } @@ -1998,7 +1996,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager OO.ui.mixin.GroupWidget.call( this, - $.extend( + Object.assign( { $group: this.$element }, @@ -2066,7 +2064,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // flags: ["destructive"], // classes: ["VisualDataOptionsListDeleteButton"], } ); - deleteButton.on( 'click', function () { + deleteButton.on( 'click', () => { if ( !( 'minItems' in self.schema ) || self.items.length > self.schema.minItems @@ -2239,7 +2237,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager icon: 'add' } ); - addOption.on( 'click', function () { + addOption.on( 'click', () => { if ( !( 'maxItems' in schema ) || self.optionsList.items.length < schema.maxItems @@ -2612,9 +2610,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // for some reason appending the method // halts the execution combined with mw.loader - categories = categories.filter( function onlyUnique( value, index, self ) { - return self.indexOf( value ) === index; - } ); + categories = categories.filter( ( value, index, self ) => self.indexOf( value ) === index ); // create title and free text input if ( !userDefined && !editFreeText && !editCategories && !editContentModel ) { @@ -2651,8 +2647,8 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager } function updatePanels() { - ProcessModel.getModel( 'fetch' ).then( function ( res ) { - Form.jsonData.schemas = $.extend( Form.jsonData.schemas, res ); + ProcessModel.getModel( 'fetch' ).then( ( res ) => { + Form.jsonData.schemas = Object.assign( Form.jsonData.schemas, res ); removeSchemasPanel(); @@ -2753,7 +2749,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager action = !hasMultiplePanels() ? 'validate&submit' : 'submit'; } - ProcessModel.getModel( action ).then( async function ( res ) { + ProcessModel.getModel( action ).then( async ( res ) => { if ( typeof res === 'boolean' && res === false ) { return; } @@ -2871,7 +2867,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager var self = this; return ProcessDialog.super.prototype.getActionProcess .call( this, action ) - .next( function () { + .next( () => { switch ( action ) { case 'back': var panels = PropertiesStack.getItems(); @@ -2887,7 +2883,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager ); break; case 'validate': - ProcessModel.getModel( 'validate' ).then( function ( res ) { + ProcessModel.getModel( 'validate' ).then( ( res ) => { if ( typeof res === 'boolean' ) { return; } @@ -2903,7 +2899,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager case 'validate&submit': case 'submit': case 'delete': - return ProcessModel.getModel( action ).then( function ( res ) { + return ProcessModel.getModel( action ).then( ( res ) => { if ( action.indexOf( 'submit' ) !== 1 && typeof res === 'boolean' ) { return; } @@ -2916,7 +2912,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager return new Promise( ( resolve, reject ) => { new mw.Api() .postWithToken( 'csrf', payload ) - .done( function ( thisRes ) { + .done( ( thisRes ) => { resolve(); if ( payload.action in thisRes ) { var data = JSON.parse( thisRes[ payload.action ].result ); @@ -2939,7 +2935,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager } } } ) - .fail( function ( thisRes ) { + .fail( ( thisRes ) => { // eslint-disable-next-line no-console console.error( 'visualdata-submit-form', res ); reject( thisRes ); @@ -2962,7 +2958,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; @@ -2979,7 +2975,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager }; function getFormAttributes( jsondata ) { - return $.extend( + return Object.assign( { formID: FormID, config: Config @@ -3084,7 +3080,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager flags: [ 'primary', 'progressive' ] } ); - editButton.on( 'click', function () { + editButton.on( 'click', () => { initializePropertiesStack(); var thisClasses = []; @@ -3118,7 +3114,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager widget = button; } - button.on( 'click', function () { + button.on( 'click', () => { var args = [ Form.options.value ]; if ( Form.options.schema !== '' && schemaHasData( Form.options.schema ) ) { @@ -3147,7 +3143,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager label: Form.options.title } ); - popupButton.on( 'click', function () { + popupButton.on( 'click', () => { initializePropertiesStack(); var thisClasses = []; @@ -3215,8 +3211,8 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager // type: "submit", } ); - ValidateButton.on( 'click', function () { - ProcessModel.getModel( 'validate' ).then( function ( res ) { + ValidateButton.on( 'click', () => { + ProcessModel.getModel( 'validate' ).then( ( res ) => { if ( typeof res === 'boolean' && res === false ) { return; } @@ -3254,7 +3250,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager icon: 'arrowPrevious' } ); - GoBackButton.on( 'click', function () { + GoBackButton.on( 'click', () => { var thisPanels = PropertiesStack.getItems(); PropertiesStack.setItem( thisPanels[ 0 ] ); @@ -3436,7 +3432,7 @@ const VisualDataForms = function ( Config, Form, FormID, Schemas, WindowManager }; }; -$( function () { +$( () => { var schemas = JSON.parse( mw.config.get( 'visualdata-schemas' ) ); // console.log("schemas", schemas); @@ -3464,7 +3460,7 @@ $( function () { var form = pageForms[ formID ]; - form = $.extend( + form = Object.assign( { freetext: '', jsonData: {}, @@ -3483,7 +3479,7 @@ $( function () { } if ( formID in submissionData ) { - form = $.extend( + form = Object.assign( form, submissionData[ formID ] ); @@ -3514,7 +3510,7 @@ $( function () { var MutationObserver = window.MutationObserver || window.WebKitMutationObserver; if ( MutationObserver ) { - var observer = new MutationObserver( function ( mutations, thisObserver ) { + var observer = new MutationObserver( ( mutations, thisObserver ) => { for ( var instance of instances ) { instance.mutationChange(); } @@ -3533,7 +3529,7 @@ $( function () { VisualData.setVars( config, schemas, init() ); } else { - mw.loader.using( 'ext.VisualData.ManageSchemas', function () { + mw.loader.using( 'ext.VisualData.ManageSchemas', () => { var instances = init(); VisualData.setVars( config, schemas, instances ); VisualDataSchemas.setVars( diff --git a/resources/VisualDataFunctions.js b/resources/VisualDataFunctions.js index 1129b81..57ecea6 100644 --- a/resources/VisualDataFunctions.js +++ b/resources/VisualDataFunctions.js @@ -437,7 +437,7 @@ VisualDataFunctions = ( function () { var Input = function ( configInput ) { Input.super.call( this, - jQuery.extend( configInput, { indicator: 'required' } ) + Object.assign( configInput, { indicator: 'required' } ) ); this.constructorName = constructor.name; }; @@ -483,7 +483,7 @@ VisualDataFunctions = ( function () { var ret = {}; Object.keys( object ) .sort() - .forEach( function ( key ) { + .forEach( ( key ) => { ret[ key ] = object[ key ]; } ); return ret; @@ -575,8 +575,8 @@ VisualDataFunctions = ( function () { } function createToolGroup( toolFactory, groupName, tools ) { - tools.forEach( function ( tool ) { - var obj = jQuery.extend( {}, tool ); + tools.forEach( ( tool ) => { + var obj = Object.assign( {}, tool ); obj.group = groupName; var config = tool.config ? tool.config : {}; delete obj.config; @@ -666,7 +666,7 @@ VisualDataFunctions = ( function () { // @TODO or return promise return windowManager - .openWindow( 'message', $.extend( obj, options ) ) + .openWindow( 'message', Object.assign( obj, options ) ) .closed.then( function ( action ) { return action.action === 'accept' && callback ? callback.apply( this, args ) : @@ -722,7 +722,7 @@ VisualDataFunctions = ( function () { } function createDropDownOptions( obj, config ) { - var config = jQuery.extend( { key: 'key', value: 'value' }, config || {} ); + var config = Object.assign( { key: 'key', value: 'value' }, config || {} ); var ret = []; for ( var i in obj ) { var label = config.value === 'value' ? obj[ i ] : i; @@ -746,7 +746,7 @@ VisualDataFunctions = ( function () { callback( resolve, reject ); } else { if ( n <= maxAttempts ) { - setTimeout( function () { + setTimeout( () => { init( ++n ); }, 50 ); } else if ( callbackMaxAttempts ) { diff --git a/resources/VisualDataGeolocation.js b/resources/VisualDataGeolocation.js index 280b8a1..a2051f5 100644 --- a/resources/VisualDataGeolocation.js +++ b/resources/VisualDataGeolocation.js @@ -275,7 +275,7 @@ const VisualDataGeolocation = function ( phpConfig, windowManager ) { defaultMaptilerMapConfig ); - maptilerMapConfigButton.on( 'click', function () { + maptilerMapConfigButton.on( 'click', () => { VisualDataInputConfigInst.openDialog( Model[ 'maptiler-map-config' ], 'maptiler-map', @@ -305,7 +305,7 @@ const VisualDataGeolocation = function ( phpConfig, windowManager ) { defaultMaptilerGeocodingConfig ); - maptilerGeocodingConfigButton.on( 'click', function () { + maptilerGeocodingConfigButton.on( 'click', () => { VisualDataInputConfigInst.openDialog( Model[ 'maptiler-geocoding-config' ], 'maptiler-geocoding', @@ -411,9 +411,7 @@ const VisualDataGeolocation = function ( phpConfig, windowManager ) { items.push( longitudeInputHelpField ); - items = items.filter( function ( x ) { - return !( 'items' in x ) || x.items.length; - } ); + items = items.filter( ( x ) => !( 'items' in x ) || x.items.length ); this.isEmpty = !items.length; @@ -537,11 +535,11 @@ const VisualDataGeolocation = function ( phpConfig, windowManager ) { VisualDataFunctions.renameObjectKey( ParentObj, CurrentKey, objName ); - ParentObj[ objName ] = $.extend( ParentObj[ objName ], { wiki: obj } ); + ParentObj[ objName ] = Object.assign( ParentObj[ objName ], { wiki: obj } ); Callback(); - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); } @@ -552,7 +550,7 @@ const VisualDataGeolocation = function ( phpConfig, windowManager ) { ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; diff --git a/resources/VisualDataInputConfig.js b/resources/VisualDataInputConfig.js index bd8bbce..a90316b 100644 --- a/resources/VisualDataInputConfig.js +++ b/resources/VisualDataInputConfig.js @@ -125,7 +125,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { switch ( inputName ) { case 'mw.widgets.DateInputWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { precision: [ 'day/month', " Date precision to use, 'day' or 'month'" ], inputFormat: [ 'string', @@ -152,7 +152,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { } ); case 'mw.widgets.TitleInputWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { limit: [ 'integer', 'Number of results to show' ], namespace: [ 'integer', 'Namespace to prepend to queries' ], maxLength: [ 'integer', 'Maximum query length' ], @@ -191,7 +191,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { } ); case 'mw.widgets.UserInputWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { limit: [ 'integer', 'Number of results to show' ] } ); @@ -401,25 +401,25 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { }; switch ( inputName ) { case 'OO.ui.MenuTagMultiselectWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { clearInputOnChoose: [ 'boolean', 'Clear the text input value when a menu option is chosen' ] } ); case 'mw.widgets.CategoryMultiselectWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { limit: [ 'integer', 'Maximum number of results to load' ] } ); case 'mw.widgets.TitlesMultiselectWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { clearInputOnChoose: [ 'boolean', 'clear input on choose' ], inputPosition: [ 'string', 'input position' ], allowEditTags: [ 'boolean', 'clear input on choose' ] } ); case 'mw.widgets.UsersMultiselectWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { limit: [ 'integer', 'Number of results to show' ], // name: [ // 'string', @@ -707,7 +707,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { switch ( inputName ) { case 'mw.widgets.datetime.DateTimeInputWidget': - return jQuery.extend( ret, { + return Object.assign( ret, { type: [ 'string', "Whether to act like a 'date'" ], required: [ 'boolean', 'Whether a value is required' ], clearable: [ 'boolean', 'Whether to provide for blanking the value.' ], @@ -973,7 +973,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { // we don't rely anymore on searchWidgetResults.findSelectedItems() // to handle non-visible highlighted items - searchWidgetResults.on( 'press', function ( value ) { + searchWidgetResults.on( 'press', ( value ) => { if ( value === null ) { return; } @@ -1034,7 +1034,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { panelLayout.populateFieldset(); } - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); @@ -1043,7 +1043,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { ProcessDialogSearch.prototype.getTeardownProcess = function ( data ) { return ProcessDialogSearch.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; @@ -1143,9 +1143,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { ); } - items = items.filter( function ( x ) { - return !( 'items' in x ) || x.items.length; - } ); + items = items.filter( ( x ) => !( 'items' in x ) || x.items.length ); this.isEmpty = !items.length; @@ -1261,7 +1259,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { } Callback.setValue( obj ); - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); } @@ -1272,7 +1270,7 @@ const VisualDataInputConfig = function ( phpConfig, windowManager ) { ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { WindowManager.removeActiveWindow(); }, this ); }; diff --git a/resources/VisualDataProcessModel.js b/resources/VisualDataProcessModel.js index 0b1b920..80e8aa5 100644 --- a/resources/VisualDataProcessModel.js +++ b/resources/VisualDataProcessModel.js @@ -19,7 +19,6 @@ * @copyright Copyright © 2023, https://wikisphere.org */ -/* eslint-disable no-tabs */ /* eslint-disable no-unused-vars */ /* eslint-disable no-underscore-dangle */ @@ -128,10 +127,10 @@ const VisualDataProcessModel = function ( switch ( error.keyword ) { case 'uniqueItems': if ( Removed.indexOf( `${ VisualDataFunctions.escapeJsonPtr( schemaName ) }${ error.instancePath }/${ error.params.j }` ) === -1 ) { - AjvErrors.push( $.extend( VisualDataFunctions.deepCopy( error ), { instancePath: `${ error.instancePath }/${ error.params.i }` } ) ); + AjvErrors.push( Object.assign( VisualDataFunctions.deepCopy( error ), { instancePath: `${ error.instancePath }/${ error.params.i }` } ) ); } if ( Removed.indexOf( `${ VisualDataFunctions.escapeJsonPtr( schemaName ) }${ error.instancePath }/${ error.params.i }` ) === -1 ) { - AjvErrors.push( $.extend( VisualDataFunctions.deepCopy( error ), { instancePath: `${ error.instancePath }/${ error.params.j }` } ) ); + AjvErrors.push( Object.assign( VisualDataFunctions.deepCopy( error ), { instancePath: `${ error.instancePath }/${ error.params.j }` } ) ); } break; default: diff --git a/resources/VisualDataSchemas.js b/resources/VisualDataSchemas.js index 39a0115..102bb6b 100644 --- a/resources/VisualDataSchemas.js +++ b/resources/VisualDataSchemas.js @@ -54,9 +54,7 @@ VisualDataSchemas = ( function () { return ret; } return Object.keys( obj ) - .map( ( i ) => { - return obj[ i ]; - } ) + .map( ( i ) => obj[ i ] ) .map( ( x ) => x.getValue() ); } @@ -128,7 +126,7 @@ VisualDataSchemas = ( function () { var datatable = $( '#' + getDatatableId( panel ) ).DataTable(); var ret = {}; // eslint-disable-next-line no-unused-vars, array-callback-return - datatable.rows().every( function ( rowIdx, tableLoop, rowLoop ) { + datatable.rows().every( ( rowIdx, tableLoop, rowLoop ) => { var key = Object.keys( fields )[ rowIdx ]; if ( key in fields ) { ret[ key ] = fields[ key ]; @@ -308,9 +306,7 @@ VisualDataSchemas = ( function () { columns: [ '' ].concat( mw.msg( 'visualdata-jsmodule-schemas-properties-columns' ) .split( /\s*,\s*/ ) - .map( function ( x ) { - return { title: x }; - } ) + .map( ( x ) => ( { title: x } ) ) ) } ); @@ -343,7 +339,7 @@ VisualDataSchemas = ( function () { initializeNestedDataTable( panel ); }; - buttonWidgetEdit.on( 'click', function () { + buttonWidgetEdit.on( 'click', () => { // switch by subschema type (if array) switch ( thisItem.wiki.type ) { case 'property': @@ -380,13 +376,13 @@ VisualDataSchemas = ( function () { flags: [ 'destructive' ] } ); - buttonWidgetDelete.on( 'click', function () { + buttonWidgetDelete.on( 'click', () => { VisualDataFunctions.OOUIAlert( new OO.ui.HtmlSnippet( mw.msg( 'visualdata-jsmodule-schemas-delete-confirm' ) ), { size: 'medium' }, - function () { + () => { delete currentItem[ propName ][ key ]; // *** or delete the row manually initializeNestedDataTable( panel ); @@ -534,11 +530,11 @@ VisualDataSchemas = ( function () { this.$body.append( booklet.$element ); booklet.setPage( data.initialTab ); - booklet.on( 'set', function ( value ) { + booklet.on( 'set', ( value ) => { initPropertiesTab( value.name ); } ); - setTimeout( function () { + setTimeout( () => { initPropertiesTab( data.initialTab ); VisualDataFunctions.removeNbspFromLayoutHeader( '#visualdata-ProcessDialogEditData' @@ -645,7 +641,7 @@ VisualDataSchemas = ( function () { var callApi = function ( postData, resolve, reject ) { new mw.Api() .postWithToken( 'csrf', postData ) - .done( function ( res ) { + .done( ( res ) => { resolve(); if ( payload.action in res ) { var data = res[ payload.action ]; @@ -669,7 +665,7 @@ VisualDataSchemas = ( function () { { size: 'medium' }, callApi, [ - $.extend( postData, { + Object.assign( postData, { 'confirm-job-execution': true } ), resolve, @@ -701,7 +697,7 @@ VisualDataSchemas = ( function () { } ); } } ) - .fail( function ( res ) { + .fail( ( res ) => { // eslint-disable-next-line no-console console.error( 'visualdata-save-schema', res ); reject( res ); @@ -709,7 +705,7 @@ VisualDataSchemas = ( function () { }; return new Promise( ( resolve, reject ) => { - mw.loader.using( 'mediawiki.api', function () { + mw.loader.using( 'mediawiki.api', () => { callApi( payload, resolve, reject ); } ); } ).catch( ( err ) => { @@ -725,7 +721,7 @@ VisualDataSchemas = ( function () { ProcessDialog.prototype.getTeardownProcess = function ( data ) { return ProcessDialog.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { Models.pop(); SelectedItems.pop(); WindowManager.removeActiveWindow(); @@ -814,7 +810,7 @@ VisualDataSchemas = ( function () { ] ); booklet.setPage( 'page1' ); - booklet.on( 'set', function ( value ) { + booklet.on( 'set', ( value ) => { if ( value.name !== 'page1' && !$.fn.DataTable.isDataTable( '#' + getDatatableId( value.name ) ) @@ -826,7 +822,7 @@ VisualDataSchemas = ( function () { this.$body.append( booklet.$element ); - setTimeout( function () { + setTimeout( () => { VisualDataFunctions.removeNbspFromLayoutHeader( '#visualdata-ProcessDialogEditProperties' ); @@ -849,7 +845,7 @@ VisualDataSchemas = ( function () { ) { if ( obj[ 'multiple-items' ] ) { currentItem.wiki = parentSchema; - currentItem.items = $.extend( currentItem.items, { wiki: obj } ); + currentItem.items = Object.assign( currentItem.items, { wiki: obj } ); return currentItem; } @@ -860,7 +856,7 @@ VisualDataSchemas = ( function () { // move child to parent if ( !obj[ 'multiple-items' ] ) { // currentItem.type should be always array - return $.extend( + return Object.assign( currentItem.type === 'array' ? currentItem.items : currentItem, { wiki: obj } ); @@ -870,7 +866,7 @@ VisualDataSchemas = ( function () { return { type: 'array', wiki: parentSchema, - items: $.extend( currentItem, { wiki: obj } ) + items: Object.assign( currentItem, { wiki: obj } ) }; } @@ -989,7 +985,7 @@ VisualDataSchemas = ( function () { break; } - return new OO.ui.Process( function () { + return new OO.ui.Process( () => { dialog.close( { action: action } ); } ); @@ -1000,7 +996,7 @@ VisualDataSchemas = ( function () { var self = this; return ProcessDialogNested.super.prototype.getTeardownProcess .call( this, data ) - .first( function () { + .first( () => { Models.pop(); SelectedItems.pop(); initializeNestedDataTable( self.data.propName ); @@ -1307,7 +1303,7 @@ VisualDataSchemas = ( function () { layoutParentSchema.toggle( multipleItemsInputValue ); nameInput.setDisabled( multipleItemsInputValue ); - multipleItemsInput.on( 'change', function ( enabled ) { + multipleItemsInput.on( 'change', ( enabled ) => { layoutParentSchema.toggle( enabled ); nameInput.setDisabled( enabled ); } ); @@ -1398,7 +1394,7 @@ VisualDataSchemas = ( function () { } ); } else { SelectedItems.push( - jQuery.extend( + Object.assign( { properties: {}, @@ -1461,7 +1457,7 @@ VisualDataSchemas = ( function () { VisualDataFunctions.OOUIAlert( new OO.ui.HtmlSnippet( mw.msg( 'visualdata-jsmodule-missing-json-diff-library' ) ), { size: 'medium', actions: [ OO.ui.MessageDialog.static.actions[ 0 ] ] - }, function () { + }, () => { // 15 days var timeLapse = 15 * 86400; mw.cookie.set( 'visualdata-check-json-diff-library', true, { @@ -1510,9 +1506,7 @@ VisualDataSchemas = ( function () { columns: mw .msg( 'visualdata-jsmodule-schemas-columns' ) .split( /\s*,\s*/ ) - .map( function ( x ) { - return { title: x }; - } ) + .map( ( x ) => ( { title: x } ) ) } ); DataTable.on( 'click', 'tr', function () { @@ -1526,7 +1520,7 @@ VisualDataSchemas = ( function () { function openSchemaDialog( label, initialTab ) { if ( !Object.keys( Schemas[ label ] ).length ) { - VisualData.loadSchemas( [ label ] ).then( function ( schemas ) { + VisualData.loadSchemas( [ label ] ).then( ( schemas ) => { for ( var i in schemas ) { Schemas[ i ] = schemas[ i ]; } @@ -1738,7 +1732,7 @@ VisualDataSchemas = ( function () { }; }() ); -$( function () { +$( () => { var config = JSON.parse( mw.config.get( 'visualdata-config' ) ); // console.log("config", config); diff --git a/resources/VisualDataUpload.js b/resources/VisualDataUpload.js index a131aa0..b571f73 100644 --- a/resources/VisualDataUpload.js +++ b/resources/VisualDataUpload.js @@ -94,20 +94,20 @@ // this.upload.setFilename( this.selectFileWidget.getValue().name ); this.upload.upload().then( - function ( res ) { + ( res ) => { deferred.resolve(); layout.parentWidget.emit( 'fileUploadComplete', file, res ); }, - function () { + () => { // These errors will be thrown while the user is on the info page. - layout.getErrorMessageForStateDetails().then( function ( errorMessage ) { + layout.getErrorMessageForStateDetails().then( ( errorMessage ) => { // eslint-disable-next-line no-console console.error( 'errorMessage', errorMessage ); deferred.reject( errorMessage ); layout.parentWidget.emit( 'fileUploadErrorMessage', file, errorMessage ); } ); }, - function ( progress ) { + ( progress ) => { var elapsedTime = mw.now() - startTime, estimatedTotalTime = ( 1 / progress ) * elapsedTime, estimatedRemainingTime = moment.duration( @@ -125,7 +125,7 @@ ); // cancel uploading - deferred.fail( function ( res ) { + deferred.fail( ( res ) => { // layout.setPage( 'upload' ); layout.parentWidget.emit( 'fileUploadFail', file, res ); } ); @@ -174,7 +174,7 @@ ) ); } else if ( Array.isArray( warnings.duplicate ) ) { - warnings.duplicate.forEach( function ( filename ) { + warnings.duplicate.forEach( ( filename ) => { var $a = $( '<a>' ).text( filename ), href = mw.Title.makeTitle( mw.config.get( 'wgNamespaceIds' ).file, @@ -257,7 +257,7 @@ // Validation (if the SFW is for a stashed file, this never fires) this.selectFileWidget.on( 'change', this.onUploadFormChange.bind( this ) ); - this.selectFileWidget.on( 'change', function () { + this.selectFileWidget.on( 'change', () => { layout.updateFilePreview(); } ); @@ -280,16 +280,16 @@ this.selectFileWidget .loadAndGetImageUrl() .done( - function ( url ) { + ( url ) => { this.filePreview.$element.find( 'p' ).remove(); this.filePreview.$element.css( 'background-image', 'url(' + url + ')' ); this.infoForm.$element.addClass( 'mw-upload-bookletLayout-hasThumbnail' ); - }.bind( this ) + } ) .fail( - function () { + () => { this.filePreview.$element.find( 'p' ).remove(); if ( this.selectFileWidget.getValue() ) { this.filePreview.$element.append( @@ -300,7 +300,7 @@ this.infoForm.$element.removeClass( 'mw-upload-bookletLayout-hasThumbnail' ); - }.bind( this ) + } ); }; @@ -353,9 +353,9 @@ this.on( 'fileUploadProgress', - function ( progress ) { + ( progress ) => { this.progressBarWidget.setProgress( progress * 100 ); - }.bind( this ) + } ); this.filenameWidget.on( 'change', this.onInfoFormChange.bind( this ) ); @@ -370,10 +370,10 @@ this.filenameWidget.getValidity(), this.descriptionWidget.getValidity() ) - .done( function () { + .done( () => { layout.emit( 'infoValid', true ); } ) - .fail( function () { + .fail( () => { layout.emit( 'infoValid', false ); } ); }; diff --git a/resources/VisualDataWindowManager.js b/resources/VisualDataWindowManager.js index 9f4b647..aca33ee 100644 --- a/resources/VisualDataWindowManager.js +++ b/resources/VisualDataWindowManager.js @@ -20,7 +20,6 @@ */ // @see https://doc.wikimedia.org/oojs-ui/master/js/ -// eslint-disable-next-line no-unused-vars // eslint-disable-next-line no-implicit-globals VisualDataWindowManager = function () { diff --git a/resources/Widgets/VisualDataButtonMultiselectWidget.js b/resources/Widgets/VisualDataButtonMultiselectWidget.js index fe04060..72f557f 100644 --- a/resources/Widgets/VisualDataButtonMultiselectWidget.js +++ b/resources/Widgets/VisualDataButtonMultiselectWidget.js @@ -48,7 +48,7 @@ value: $.inArray( this.options[ i ], config.selected ) !== -1 } ); - this.items[ i ].on( 'change', function () { + this.items[ i ].on( 'change', () => { self.emit( 'change', self.getValue().join().trim() ); } ); } diff --git a/resources/Widgets/VisualDataDropdownWidget.js b/resources/Widgets/VisualDataDropdownWidget.js index 50f9133..962a738 100644 --- a/resources/Widgets/VisualDataDropdownWidget.js +++ b/resources/Widgets/VisualDataDropdownWidget.js @@ -46,7 +46,7 @@ this.select = select; - select.on( 'change', function () { + select.on( 'change', () => { self.emit( 'change', self.getValue() ); } ); diff --git a/resources/Widgets/VisualDataMaptiler.js b/resources/Widgets/VisualDataMaptiler.js index b2f043a..cc32c0f 100644 --- a/resources/Widgets/VisualDataMaptiler.js +++ b/resources/Widgets/VisualDataMaptiler.js @@ -44,7 +44,7 @@ var zoomInput = data.model.properties.zoom.input; var mapId = 'visualdata-maptiler-map-' + data.path; - VisualDataFunctions.loadScripts( this.scripts, function ( e ) { + VisualDataFunctions.loadScripts( this.scripts, ( e ) => { if ( $( '#' + jQuery.escapeSelector( mapId ) ).length ) { return; } @@ -113,14 +113,14 @@ function onDragEnd() { var lngLat = marker.getLngLat(); - setTimeout( function () { + setTimeout( () => { lngInput.setValue( lngLat.lng ); latInput.setValue( lngLat.lat ); zoomInput.setValue( map.getZoom() ); }, 100 ); } - map.on( 'load', function () { + map.on( 'load', () => { if ( !marker ) { marker = new maptilersdk.Marker( { draggable: true @@ -143,10 +143,10 @@ } // update marker - data.model.properties.latitude.input.on( 'change', function ( value ) { + data.model.properties.latitude.input.on( 'change', ( value ) => { marker.setLngLat( [ lngInput.getValue(), value ] ); } ); - data.model.properties.longitude.input.on( 'change', function ( value ) { + data.model.properties.longitude.input.on( 'change', ( value ) => { marker.setLngLat( [ value, latInput.getValue() ] ); } ); diff --git a/resources/Widgets/VisualDataMenuTagSearchMultiselect.js b/resources/Widgets/VisualDataMenuTagSearchMultiselect.js index 7f1fd67..9669f3a 100644 --- a/resources/Widgets/VisualDataMenuTagSearchMultiselect.js +++ b/resources/Widgets/VisualDataMenuTagSearchMultiselect.js @@ -55,7 +55,7 @@ // Mixin constructors OO.ui.mixin.PendingElement.call( this, - $.extend( {}, config, { $pending: this.$handle } ) + Object.assign( {}, config, { $pending: this.$handle } ) ); // Event handler to call the autocomplete methods @@ -95,7 +95,7 @@ function () { this.getMenu().clearItems(); this.getNewMenuItems( this.input.$input.val() ).then( - function ( items ) { + ( items ) => { var existingItems, menu = this.getMenu(); @@ -105,9 +105,7 @@ } // Array of strings of the data of OO.ui.MenuOptionsWidgets - existingItems = menu.getItems().map( function ( item ) { - return item.data; - } ); + existingItems = menu.getItems().map( ( item ) => item.data ); // Remove if items' data already exists for ( var i in items ) { @@ -128,7 +126,7 @@ } menu.addItems( ret ).toggle( true ); - }.bind( this ) + } ); }; diff --git a/resources/Widgets/VisualDataTinyMCE.js b/resources/Widgets/VisualDataTinyMCE.js index d30f373..e82c70e 100644 --- a/resources/Widgets/VisualDataTinyMCE.js +++ b/resources/Widgets/VisualDataTinyMCE.js @@ -19,7 +19,6 @@ * @copyright Copyright © 2024, https://wikisphere.org */ -/* eslint-disable no-tabs */ /* eslint-disable no-unused-vars */ ( function () { diff --git a/resources/Widgets/VisualDataVisualEditor.js b/resources/Widgets/VisualDataVisualEditor.js index 780a786..99348d7 100644 --- a/resources/Widgets/VisualDataVisualEditor.js +++ b/resources/Widgets/VisualDataVisualEditor.js @@ -49,7 +49,7 @@ this.Editor = null; this.initialized = false; - setTimeout( function () { + setTimeout( () => { if ( self.$element.parent().is( ':visible' ) ) { self.initialize(); } @@ -68,7 +68,7 @@ var self = this; self.initialized = true; - this.loadVEForAll().then( function () { + this.loadVEForAll().then( () => { // if (!self.isHtml) { // return; // } @@ -107,7 +107,7 @@ resolve(); }; var callbackMaxAttempts = function ( resolve, reject ) { - jQuery( document ).on( 'VEForAllLoaded', function ( e ) { + jQuery( document ).on( 'VEForAllLoaded', ( e ) => { self.textarea.applyVisualEditor(); resolve(); } ); @@ -161,7 +161,7 @@ // } return new Promise( ( resolve, reject ) => { - $.when( editor.updateContent() ).then( function () { + $.when( editor.updateContent() ).then( () => { // @see ext.veforall.target.js // *** sometimes convertToWikiText is not called // based on focus diff --git a/resources/Widgets/VisualDataintlTelInput.js b/resources/Widgets/VisualDataintlTelInput.js index 699a8f1..7cf401a 100644 --- a/resources/Widgets/VisualDataintlTelInput.js +++ b/resources/Widgets/VisualDataintlTelInput.js @@ -52,7 +52,7 @@ // self.emit("change", self.config.value); // }); - input.on( 'blur', function () { + input.on( 'blur', () => { self.formatNumber(); } ); @@ -67,20 +67,18 @@ self.iti = window.intlTelInput( input.get( 0 ), - $.extend( + Object.assign( { utilsScript: 'https://cdn.jsdelivr.net/npm/intl-tel-input@18.3.3/build/js/utils.js', initialCountry: 'auto', geoIpLookup: function ( callback ) { fetch( 'https://ipapi.co/json' ) - .then( function ( res ) { - return res.json(); - } ) - .then( function ( data ) { + .then( ( res ) => res.json() ) + .then( ( data ) => { callback( data.country_code ); } ) - .catch( function () { + .catch( () => { callback( 'us' ); } ); } -- 2.39.2 --- end ---