mediawiki/skins/Vector: main (log #1708403)

sourcepatches

This run took 113 seconds.

$ date
--- stdout ---
Sat Jan 18 05:05:52 UTC 2025

--- end ---
$ git clone file:///srv/git/mediawiki-skins-Vector.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 ---
55b6958ec4052255fb015a6a1632e63c5a9663b0 refs/heads/master

--- end ---
$ /usr/bin/npm audit --json
--- stdout ---
{
  "auditReportVersion": 2,
  "vulnerabilities": {
    "cross-spawn": {
      "name": "cross-spawn",
      "severity": "high",
      "isDirect": false,
      "via": [
        {
          "source": 1100562,
          "name": "cross-spawn",
          "dependency": "cross-spawn",
          "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn",
          "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "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": "<6.0.6"
        },
        {
          "source": 1100563,
          "name": "cross-spawn",
          "dependency": "cross-spawn",
          "title": "Regular Expression Denial of Service (ReDoS) in cross-spawn",
          "url": "https://github.com/advisories/GHSA-3xgq-45jj-v275",
          "severity": "high",
          "cwe": [
            "CWE-1333"
          ],
          "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": ">=7.0.0 <7.0.5"
        }
      ],
      "effects": [
        "pre-commit"
      ],
      "range": "<6.0.6 || >=7.0.0 <7.0.5",
      "nodes": [
        "node_modules/cross-spawn",
        "node_modules/pre-commit/node_modules/cross-spawn"
      ],
      "fixAvailable": {
        "name": "pre-commit",
        "version": "1.0.10",
        "isSemVerMajor": true
      }
    },
    "nanoid": {
      "name": "nanoid",
      "severity": "moderate",
      "isDirect": false,
      "via": [
        {
          "source": 1101163,
          "name": "nanoid",
          "dependency": "nanoid",
          "title": "Predictable results in nanoid generation when given non-integer values",
          "url": "https://github.com/advisories/GHSA-mwcw-c2x4-8c55",
          "severity": "moderate",
          "cwe": [
            "CWE-835"
          ],
          "cvss": {
            "score": 4.3,
            "vectorString": "CVSS:3.1/AV:N/AC:L/PR:L/UI:N/S:U/C:N/I:L/A:N"
          },
          "range": "<3.3.8"
        }
      ],
      "effects": [],
      "range": "<3.3.8",
      "nodes": [
        "node_modules/nanoid"
      ],
      "fixAvailable": true
    },
    "pre-commit": {
      "name": "pre-commit",
      "severity": "high",
      "isDirect": true,
      "via": [
        "cross-spawn"
      ],
      "effects": [],
      "range": ">=1.1.0",
      "nodes": [
        "node_modules/pre-commit"
      ],
      "fixAvailable": {
        "name": "pre-commit",
        "version": "1.0.10",
        "isSemVerMajor": true
      }
    }
  },
  "metadata": {
    "vulnerabilities": {
      "info": 0,
      "low": 0,
      "moderate": 1,
      "high": 2,
      "critical": 0,
      "total": 3
    },
    "dependencies": {
      "prod": 1,
      "dev": 902,
      "optional": 2,
      "peer": 0,
      "peerOptional": 0,
      "total": 902
    }
  }
}

--- 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: 39 installs, 0 updates, 0 removals
  - Locking composer/installers (v2.3.0)
  - Locking composer/pcre (3.3.2)
  - Locking composer/semver (3.4.3)
  - Locking composer/spdx-licenses (1.5.8)
  - Locking composer/xdebug-handler (3.0.5)
  - Locking dealerdirect/phpcodesniffer-composer-installer (v1.0.0)
  - Locking doctrine/deprecations (1.1.4)
  - Locking felixfbecker/advanced-json-rpc (v3.2.1)
  - Locking mediawiki/mediawiki-codesniffer (v45.0.0)
  - Locking mediawiki/mediawiki-phan-config (0.15.0)
  - Locking mediawiki/minus-x (1.1.3)
  - Locking mediawiki/phan-taint-check-plugin (6.1.0)
  - Locking microsoft/tolerant-php-parser (v0.1.2)
  - Locking netresearch/jsonmapper (v4.5.0)
  - Locking phan/phan (5.4.5)
  - 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.4.0)
  - Locking phpcsstandards/phpcsextra (1.2.1)
  - Locking phpcsstandards/phpcsutils (1.0.12)
  - Locking phpdocumentor/reflection-common (2.2.0)
  - Locking phpdocumentor/reflection-docblock (5.6.1)
  - Locking phpdocumentor/type-resolver (1.10.0)
  - Locking phpstan/phpdoc-parser (2.0.0)
  - Locking psr/container (2.0.2)
  - Locking psr/log (3.0.2)
  - Locking sabre/event (5.1.7)
  - Locking squizlabs/php_codesniffer (3.10.3)
  - Locking symfony/console (v7.2.1)
  - Locking symfony/deprecation-contracts (v3.5.1)
  - Locking symfony/polyfill-ctype (v1.31.0)
  - Locking symfony/polyfill-intl-grapheme (v1.31.0)
  - Locking symfony/polyfill-intl-normalizer (v1.31.0)
  - Locking symfony/polyfill-mbstring (v1.31.0)
  - Locking symfony/polyfill-php80 (v1.31.0)
  - Locking symfony/service-contracts (v3.5.1)
  - Locking symfony/string (v7.2.0)
  - Locking tysonandre/var_representation_polyfill (0.1.3)
  - Locking webmozart/assert (1.11.0)
Writing lock file
Installing dependencies from lock file (including require-dev)
Package operations: 39 installs, 0 updates, 0 removals
    0 [>---------------------------]    0 [->--------------------------]
  - Installing composer/installers (v2.3.0): Extracting archive
  - Installing squizlabs/php_codesniffer (3.10.3): Extracting archive
  - Installing dealerdirect/phpcodesniffer-composer-installer (v1.0.0): Extracting archive
  - Installing composer/pcre (3.3.2): Extracting archive
  - Installing symfony/polyfill-php80 (v1.31.0): Extracting archive
  - Installing phpcsstandards/phpcsutils (1.0.12): Extracting archive
  - Installing phpcsstandards/phpcsextra (1.2.1): Extracting archive
  - Installing symfony/polyfill-mbstring (v1.31.0): Extracting archive
  - Installing composer/spdx-licenses (1.5.8): Extracting archive
  - Installing composer/semver (3.4.3): Extracting archive
  - Installing mediawiki/mediawiki-codesniffer (v45.0.0): Extracting archive
  - Installing tysonandre/var_representation_polyfill (0.1.3): Extracting archive
  - Installing symfony/polyfill-intl-normalizer (v1.31.0): Extracting archive
  - Installing symfony/polyfill-intl-grapheme (v1.31.0): Extracting archive
  - Installing symfony/polyfill-ctype (v1.31.0): Extracting archive
  - Installing symfony/string (v7.2.0): Extracting archive
  - Installing symfony/deprecation-contracts (v3.5.1): Extracting archive
  - Installing psr/container (2.0.2): Extracting archive
  - Installing symfony/service-contracts (v3.5.1): Extracting archive
  - Installing symfony/console (v7.2.1): Extracting archive
  - Installing sabre/event (5.1.7): Extracting archive
  - Installing netresearch/jsonmapper (v4.5.0): Extracting archive
  - Installing microsoft/tolerant-php-parser (v0.1.2): Extracting archive
  - Installing webmozart/assert (1.11.0): Extracting archive
  - Installing phpstan/phpdoc-parser (2.0.0): Extracting archive
  - Installing phpdocumentor/reflection-common (2.2.0): Extracting archive
  - Installing doctrine/deprecations (1.1.4): Extracting archive
  - Installing phpdocumentor/type-resolver (1.10.0): Extracting archive
  - Installing phpdocumentor/reflection-docblock (5.6.1): Extracting archive
  - Installing felixfbecker/advanced-json-rpc (v3.2.1): Extracting archive
  - Installing psr/log (3.0.2): Extracting archive
  - Installing composer/xdebug-handler (3.0.5): Extracting archive
  - Installing phan/phan (5.4.5): Extracting archive
  - Installing mediawiki/phan-taint-check-plugin (6.1.0): Extracting archive
  - Installing mediawiki/mediawiki-phan-config (0.15.0): Extracting archive
  - Installing mediawiki/minus-x (1.1.3): 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.4.0): Extracting archive
  0/36 [>---------------------------]   0%
 20/36 [===============>------------]  55%
 34/36 [==========================>-]  94%
 36/36 [============================] 100%
1 package suggestions were added by new dependencies, use `composer suggest` to see details.
Generating autoload files
17 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:stylelint-config-wikimedia from 0.17.2 -> 0.18.0
Upgrading n:vue from 3.4.27 -> 3.4.28
Upgrading n:@vue/test-utils from 2.4.1 -> 2.4.6
Upgrading n:jest from 27.4.7 -> 29.7.0
Upgrading n:@vue/vue3-jest from 27.0.0 -> 29.2.6
Upgrading n:@wikimedia/codex from 1.16.0 -> 1.19.1
Upgrading n:@wikimedia/codex-icons from 1.16.0 -> 1.19.1
Upgrading n:ts-jest from 27.1.5 -> 29.2.5
$ /usr/bin/npm install
--- stderr ---
npm ERR! code ERESOLVE
npm ERR! ERESOLVE could not resolve
npm ERR! 
npm ERR! While resolving: Vector@undefined
npm ERR! Found: @wikimedia/codex@1.16.0
npm ERR! node_modules/@wikimedia/codex
npm ERR!   dev @wikimedia/codex@"1.19.1" from the root project
npm ERR! 
npm ERR! Could not resolve dependency:
npm ERR! dev @wikimedia/codex@"1.19.1" from the root project
npm ERR! 
npm ERR! Conflicting peer dependency: vue@3.4.28
npm ERR! node_modules/vue
npm ERR!   peer vue@"3.4.28" from @wikimedia/codex@1.19.1
npm ERR!   node_modules/@wikimedia/codex
npm ERR!     dev @wikimedia/codex@"1.19.1" from the root project
npm ERR! 
npm ERR! Fix the upstream dependency conflict, or retry
npm ERR! this command with --force or --legacy-peer-deps
npm ERR! to accept an incorrect (and potentially broken) dependency resolution.
npm ERR! 
npm ERR! 
npm ERR! For a full report see:
npm ERR! /cache/_logs/2025-01-18T05_05_57_998Z-eresolve-report.txt

npm ERR! A complete log of this run can be found in:
npm ERR!     /cache/_logs/2025-01-18T05_05_57_998Z-debug-0.log
--- stdout ---

--- end ---
$ rm -rf package-lock.json node_modules
--- stdout ---

--- end ---
$ /usr/bin/npm install
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@1.19.1',
npm WARN EBADENGINE   required: { npm: '>=10.8.1', node: '>=20' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@1.19.1',
npm WARN EBADENGINE   required: { npm: '>=10.8.1', node: '>=20' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated glob@7.2.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated mkdirp@0.3.0: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
npm WARN deprecated sinon@12.0.1: 16.1.1
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 940 packages, and audited 941 packages in 25s

126 packages are looking for funding
  run `npm fund` for details

2 high severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
$ ./node_modules/.bin/stylelint resources/skins.vector.styles/components/Footer.less skinStyles/ext.visualEditor.less skinStyles/jquery.ui/jquery.ui.accordion.css skinStyles/ext.uls.compactlinks.less resources/skins.vector.styles.legacy/components/SidebarLogo.less resources/skins.vector.styles.legacy/layouts/screen.less skinStyles/jquery.ui/jquery.ui.dialog.css resources/skins.vector.styles.legacy/normalize.less resources/skins.vector.js/index.less resources/skins.vector.styles/skin.less resources/skins.vector.styles/layouts/toc/pinned.less skinStyles/jquery.ui/jquery.ui.menu.css resources/skins.vector.styles/components/LanguageDropdown.less skinStyles/ext.uls.pt.less resources/skins.vector.search/App.vue skinStyles/ext.uls.interface.less skinStyles/jquery.ui/jquery.ui.core.css resources/skins.vector.styles/mixins.less resources/skins.vector.clientPreferences/clientPreferences.less resources/skins.vector.js/bottomDock.less skinStyles/ooui.less resources/skins.vector.styles/links.less skinStyles/jquery.ui/jquery.ui.tooltip.css resources/skins.vector.styles/components/BottomDock.less skinStyles/mediawiki.action.edit.less resources/skins.vector.styles/components/UserLinks.less resources/skins.vector.styles/components/Appearance.less resources/skins.vector.styles.legacy/components/Indicators.less resources/skins.vector.styles/components/Button.less resources/skins.vector.styles/components/Logo.less resources/skins.vector.styles/components/Watchstar.less resources/skins.vector.styles.legacy/components/Menu.less resources/skins.vector.styles/layouts/print.less skinStyles/jquery.ui/jquery.ui.datepicker.css skinStyles/mediawiki.action.view.redirectPage.less resources/skins.vector.styles/components/Dropdown.less resources/skins.vector.styles.legacy/layouts/print.less skinStyles/jquery.ui/jquery.ui.autocomplete.css resources/skins.vector.styles/components/Indicators.less resources/skins.vector.styles/components/Header.less skinStyles/ext.echo.styles.badge.less resources/skins.vector.styles/components/PinnableHeader.less skinStyles/jquery.ui/jquery.ui.tabs.css skinStyles/jquery.ui/jquery.ui.progressbar.css skinStyles/vector/mediawiki.notification.less resources/skins.vector.styles/components/Icon.less resources/skins.vector.styles/layouts/screen.less resources/skins.vector.styles.legacy/components/Footer.less resources/skins.vector.styles/layouts/grid.less resources/skins.vector.styles/typography.less resources/mediawiki.less/vector-2022/mediawiki.skin.variables.less skinStyles/jquery.ui/jquery.ui.resizable.css skinStyles/jquery.ui/jquery.ui.button.css resources/skins.vector.styles.legacy/components/LegacySidebar.less resources/skins.vector.styles.legacy/components/SearchBox.less resources/skins.vector.js/stickyHeader.less skinStyles/jquery.ui/jquery.ui.slider.css resources/skins.vector.styles.legacy/components/MenuTabs.less resources/skins.vector.styles.legacy/mixins.less resources/skins.vector.styles.legacy/components/MenuDropdown.less skinStyles/mediawiki.special.search.interwikiwidget.less resources/skins.vector.js/tableOfContents.less skinStyles/jquery.ui/jquery.ui.selectable.css resources/skins.vector.styles.legacy/components/UserLinks.less resources/skins.vector.styles/components/PageTools.less resources/skins.vector.styles.legacy/typography.less resources/skins.vector.styles/variables.less resources/skins.vector.styles/components/PageTitlebar.less resources/skins.vector.styles/layouts/toc/unpinned.less resources/skins.vector.styles/print.less resources/skins.vector.styles/components/MenuTabs.less resources/skins.vector.styles/components/MainMenu.less resources/skins.vector.styles/components/TableOfContents.less resources/skins.vector.styles/components/Menu.less skinStyles/teleportTarget.less resources/skins.vector.styles/components/PinnableElement.less skinStyles/ext.echo.styles.alert.less resources/skins.vector.styles/CSSCustomProperties.less resources/skins.vector.styles/media.less skinStyles/jquery.ui/jquery.ui.theme.css skinStyles/vector/ext.echo.styles.badge.less resources/skins.vector.styles/components/SiteNotice.less resources/skins.vector.styles/components/SearchBox.less resources/skins.vector.styles.legacy/skin-legacy.less resources/skins.vector.styles/normalize.less resources/skins.vector.styles.legacy/variables.less resources/skins.vector.js/popupNotification.less resources/mediawiki.less/vector/mediawiki.skin.variables.less skinStyles/mediawiki.notification.less resources/skins.vector.styles/components/PageToolbar.less resources/skins.vector.styles.legacy/components/TabWatchstarLink.less resources/skins.vector.styles.legacy/print.less resources/skins.vector.styles.legacy/components/SiteNotice.less resources/mediawiki.less skinStyles/ext.relatedArticles.readMore.less --fix
--- stderr ---
skinStyles/ext.visualEditor.less
  16:2  ⚠  Unexpected browser feature "prefers-color-scheme" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features

resources/skins.vector.clientPreferences/clientPreferences.less
  25:1  ⚠  Unexpected browser feature "prefers-color-scheme" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features

resources/skins.vector.js/bottomDock.less
  8:2  ⚠  Unexpected browser feature "flexbox-gap" is not supported by Safari 12,13,14,11.1,12.1,13.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4  plugin/no-unsupported-browser-features

resources/skins.vector.styles/components/Indicators.less
  1:1  ⚠  Unexpected browser feature "flexbox-gap" is not supported by Safari 12,13,14,11.1,12.1,13.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4  plugin/no-unsupported-browser-features

resources/skins.vector.styles/layouts/screen.less
  102:2  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  102:2  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  147:2  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  147:2  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  165:2  ⚠  Unexpected browser feature "css-touch-action" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1,18.2                                                                                                                                                                                                                                                  plugin/no-unsupported-browser-features
  165:2  ⚠  Unexpected browser feature "pointer" is not supported by Safari 12,11.1,12.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5                                                                                                                                                                                                                                                                                                                                                    plugin/no-unsupported-browser-features

resources/skins.vector.styles/layouts/grid.less
   23:3  ⚠  Unexpected browser feature "css-overflow-anchor" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1,18.2, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1,18.2  plugin/no-unsupported-browser-features
  121:4  ⚠  Unexpected browser feature "css-overflow-anchor" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1,18.2, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1,18.2  plugin/no-unsupported-browser-features

resources/skins.vector.styles/variables.less
   45:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
   45:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  136:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  136:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  137:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  138:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  138:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  139:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  139:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  140:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  140:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  151:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features

resources/skins.vector.styles/layouts/toc/unpinned.less
  42:4  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  61:5  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features

resources/skins.vector.styles/components/PinnableElement.less
  28:2  ⚠  Unexpected browser feature "css-containment" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3  plugin/no-unsupported-browser-features

resources/skins.vector.styles/CSSCustomProperties.less
  106:1  ⚠  Unexpected browser feature "prefers-color-scheme" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features

resources/skins.vector.styles/media.less
  29:1  ⚠  Unexpected browser feature "prefers-color-scheme" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features

resources/skins.vector.styles.legacy/variables.less
   63:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
   63:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  102:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  161:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  161:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  162:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  163:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  163:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  164:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  164:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  165:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  165:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  176:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features

⚠ 42 problems (0 errors, 42 warnings)
--- stdout ---

--- end ---
$ ./node_modules/.bin/stylelint resources/skins.vector.styles/components/Footer.less skinStyles/ext.visualEditor.less skinStyles/jquery.ui/jquery.ui.accordion.css skinStyles/ext.uls.compactlinks.less resources/skins.vector.styles.legacy/components/SidebarLogo.less resources/skins.vector.styles.legacy/layouts/screen.less skinStyles/jquery.ui/jquery.ui.dialog.css resources/skins.vector.styles.legacy/normalize.less resources/skins.vector.js/index.less resources/skins.vector.styles/skin.less resources/skins.vector.styles/layouts/toc/pinned.less skinStyles/jquery.ui/jquery.ui.menu.css resources/skins.vector.styles/components/LanguageDropdown.less skinStyles/ext.uls.pt.less resources/skins.vector.search/App.vue skinStyles/ext.uls.interface.less skinStyles/jquery.ui/jquery.ui.core.css resources/skins.vector.styles/mixins.less resources/skins.vector.clientPreferences/clientPreferences.less resources/skins.vector.js/bottomDock.less skinStyles/ooui.less resources/skins.vector.styles/links.less skinStyles/jquery.ui/jquery.ui.tooltip.css resources/skins.vector.styles/components/BottomDock.less skinStyles/mediawiki.action.edit.less resources/skins.vector.styles/components/UserLinks.less resources/skins.vector.styles/components/Appearance.less resources/skins.vector.styles.legacy/components/Indicators.less resources/skins.vector.styles/components/Button.less resources/skins.vector.styles/components/Logo.less resources/skins.vector.styles/components/Watchstar.less resources/skins.vector.styles.legacy/components/Menu.less resources/skins.vector.styles/layouts/print.less skinStyles/jquery.ui/jquery.ui.datepicker.css skinStyles/mediawiki.action.view.redirectPage.less resources/skins.vector.styles/components/Dropdown.less resources/skins.vector.styles.legacy/layouts/print.less skinStyles/jquery.ui/jquery.ui.autocomplete.css resources/skins.vector.styles/components/Indicators.less resources/skins.vector.styles/components/Header.less skinStyles/ext.echo.styles.badge.less resources/skins.vector.styles/components/PinnableHeader.less skinStyles/jquery.ui/jquery.ui.tabs.css skinStyles/jquery.ui/jquery.ui.progressbar.css skinStyles/vector/mediawiki.notification.less resources/skins.vector.styles/components/Icon.less resources/skins.vector.styles/layouts/screen.less resources/skins.vector.styles.legacy/components/Footer.less resources/skins.vector.styles/layouts/grid.less resources/skins.vector.styles/typography.less resources/mediawiki.less/vector-2022/mediawiki.skin.variables.less skinStyles/jquery.ui/jquery.ui.resizable.css skinStyles/jquery.ui/jquery.ui.button.css resources/skins.vector.styles.legacy/components/LegacySidebar.less resources/skins.vector.styles.legacy/components/SearchBox.less resources/skins.vector.js/stickyHeader.less skinStyles/jquery.ui/jquery.ui.slider.css resources/skins.vector.styles.legacy/components/MenuTabs.less resources/skins.vector.styles.legacy/mixins.less resources/skins.vector.styles.legacy/components/MenuDropdown.less skinStyles/mediawiki.special.search.interwikiwidget.less resources/skins.vector.js/tableOfContents.less skinStyles/jquery.ui/jquery.ui.selectable.css resources/skins.vector.styles.legacy/components/UserLinks.less resources/skins.vector.styles/components/PageTools.less resources/skins.vector.styles.legacy/typography.less resources/skins.vector.styles/variables.less resources/skins.vector.styles/components/PageTitlebar.less resources/skins.vector.styles/layouts/toc/unpinned.less resources/skins.vector.styles/print.less resources/skins.vector.styles/components/MenuTabs.less resources/skins.vector.styles/components/MainMenu.less resources/skins.vector.styles/components/TableOfContents.less resources/skins.vector.styles/components/Menu.less skinStyles/teleportTarget.less resources/skins.vector.styles/components/PinnableElement.less skinStyles/ext.echo.styles.alert.less resources/skins.vector.styles/CSSCustomProperties.less resources/skins.vector.styles/media.less skinStyles/jquery.ui/jquery.ui.theme.css skinStyles/vector/ext.echo.styles.badge.less resources/skins.vector.styles/components/SiteNotice.less resources/skins.vector.styles/components/SearchBox.less resources/skins.vector.styles.legacy/skin-legacy.less resources/skins.vector.styles/normalize.less resources/skins.vector.styles.legacy/variables.less resources/skins.vector.js/popupNotification.less resources/mediawiki.less/vector/mediawiki.skin.variables.less skinStyles/mediawiki.notification.less resources/skins.vector.styles/components/PageToolbar.less resources/skins.vector.styles.legacy/components/TabWatchstarLink.less resources/skins.vector.styles.legacy/print.less resources/skins.vector.styles.legacy/components/SiteNotice.less resources/mediawiki.less skinStyles/ext.relatedArticles.readMore.less -f json
--- stdout ---
[{"source":"/src/repo/resources/skins.vector.styles/components/Footer.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/ext.visualEditor.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":16,"column":2,"endLine":23,"endColumn":3,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"prefers-color-scheme\" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/skinStyles/ext.uls.compactlinks.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/SidebarLogo.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/layouts/screen.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/normalize.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.js/index.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/skin.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/layouts/toc/pinned.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/LanguageDropdown.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/ext.uls.pt.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.search/App.vue","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/ext.uls.interface.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/mixins.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.clientPreferences/clientPreferences.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":25,"column":1,"endLine":29,"endColumn":2,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"prefers-color-scheme\" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/resources/skins.vector.js/bottomDock.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":8,"column":2,"endLine":15,"endColumn":3,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"flexbox-gap\" is not supported by Safari 12,13,14,11.1,12.1,13.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/skinStyles/ooui.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/links.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/BottomDock.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/mediawiki.action.edit.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/UserLinks.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/Appearance.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/Indicators.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/Button.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/Logo.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/Watchstar.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/Menu.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/layouts/print.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/mediawiki.action.view.redirectPage.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/Dropdown.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/layouts/print.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/Indicators.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":1,"column":1,"endLine":9,"endColumn":2,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"flexbox-gap\" is not supported by Safari 12,13,14,11.1,12.1,13.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/resources/skins.vector.styles/components/Header.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/ext.echo.styles.badge.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/PinnableHeader.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/vector/mediawiki.notification.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/Icon.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/layouts/screen.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":102,"column":2,"endLine":102,"endColumn":41,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":102,"column":2,"endLine":102,"endColumn":41,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":147,"column":2,"endLine":147,"endColumn":41,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":147,"column":2,"endLine":147,"endColumn":41,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":165,"column":2,"endLine":165,"endColumn":30,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-touch-action\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1,18.2 (plugin/no-unsupported-browser-features)"},{"line":165,"column":2,"endLine":165,"endColumn":30,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"pointer\" is not supported by Safari 12,11.1,12.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/Footer.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/layouts/grid.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":23,"column":3,"endLine":23,"endColumn":25,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-overflow-anchor\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1,18.2, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1,18.2 (plugin/no-unsupported-browser-features)"},{"line":121,"column":4,"endLine":121,"endColumn":26,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-overflow-anchor\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1,18.2, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1,18.2 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/resources/skins.vector.styles/typography.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/mediawiki.less/vector-2022/mediawiki.skin.variables.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/LegacySidebar.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/SearchBox.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.js/stickyHeader.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/MenuTabs.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/mixins.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/MenuDropdown.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/mediawiki.special.search.interwikiwidget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.js/tableOfContents.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/UserLinks.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/PageTools.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/typography.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/variables.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":45,"column":1,"endLine":45,"endColumn":59,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":45,"column":1,"endLine":45,"endColumn":59,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":136,"column":1,"endLine":136,"endColumn":70,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":136,"column":1,"endLine":136,"endColumn":70,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":137,"column":1,"endLine":137,"endColumn":72,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":138,"column":1,"endLine":138,"endColumn":77,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":138,"column":1,"endLine":138,"endColumn":77,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":139,"column":1,"endLine":139,"endColumn":85,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":139,"column":1,"endLine":139,"endColumn":85,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":140,"column":1,"endLine":140,"endColumn":90,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":140,"column":1,"endLine":140,"endColumn":90,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":151,"column":1,"endLine":151,"endColumn":38,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/resources/skins.vector.styles/components/PageTitlebar.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/layouts/toc/unpinned.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":42,"column":4,"endLine":42,"endColumn":34,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":61,"column":5,"endLine":61,"endColumn":35,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/resources/skins.vector.styles/print.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/MenuTabs.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/MainMenu.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/TableOfContents.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/Menu.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/teleportTarget.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/PinnableElement.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":28,"column":2,"endLine":28,"endColumn":17,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-containment\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/skinStyles/ext.echo.styles.alert.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/CSSCustomProperties.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":106,"column":1,"endLine":125,"endColumn":2,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"prefers-color-scheme\" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/resources/skins.vector.styles/media.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":29,"column":1,"endLine":33,"endColumn":2,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"prefers-color-scheme\" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/skinStyles/vector/ext.echo.styles.badge.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/SiteNotice.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/SearchBox.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/skin-legacy.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/normalize.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/variables.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[{"line":63,"column":1,"endLine":63,"endColumn":59,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":63,"column":1,"endLine":63,"endColumn":59,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":102,"column":1,"endLine":102,"endColumn":112,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":161,"column":1,"endLine":161,"endColumn":69,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":161,"column":1,"endLine":161,"endColumn":69,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":162,"column":1,"endLine":162,"endColumn":71,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":163,"column":1,"endLine":163,"endColumn":76,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":163,"column":1,"endLine":163,"endColumn":76,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":164,"column":1,"endLine":164,"endColumn":84,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":164,"column":1,"endLine":164,"endColumn":84,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":165,"column":1,"endLine":165,"endColumn":89,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-container-queries\" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8 (plugin/no-unsupported-browser-features)"},{"line":165,"column":1,"endLine":165,"endColumn":89,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"},{"line":176,"column":1,"endLine":176,"endColumn":38,"rule":"plugin/no-unsupported-browser-features","severity":"warning","text":"Unexpected browser feature \"css-paged-media\" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131 (plugin/no-unsupported-browser-features)"}]},{"source":"/src/repo/resources/skins.vector.js/popupNotification.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/mediawiki.less/vector/mediawiki.skin.variables.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/mediawiki.notification.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles/components/PageToolbar.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/TabWatchstarLink.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/print.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/resources/skins.vector.styles.legacy/components/SiteNotice.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]},{"source":"/src/repo/skinStyles/ext.relatedArticles.readMore.less","deprecations":[],"invalidOptionWarnings":[],"parseErrors":[],"errored":false,"warnings":[]}]
--- end ---
$ /usr/bin/npm install jest-environment-jsdom@29.7.0 --save-dev --save-exact
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@1.19.1',
npm WARN EBADENGINE   required: { node: '>=20', npm: '>=10.8.1' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@1.19.1',
npm WARN EBADENGINE   required: { node: '>=20', npm: '>=10.8.1' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
--- stdout ---

added 14 packages, and audited 955 packages in 3s

126 packages are looking for funding
  run `npm fund` for details

2 high severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

--- end ---
$ package-lock-lint package-lock.json
--- stdout ---
Checking package-lock.json

--- end ---
$ /usr/bin/npm ci
--- stderr ---
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex@1.19.1',
npm WARN EBADENGINE   required: { node: '>=20', npm: '>=10.8.1' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN EBADENGINE Unsupported engine {
npm WARN EBADENGINE   package: '@wikimedia/codex-icons@1.19.1',
npm WARN EBADENGINE   required: { node: '>=20', npm: '>=10.8.1' },
npm WARN EBADENGINE   current: { node: 'v18.19.0', npm: '9.2.0' }
npm WARN EBADENGINE }
npm WARN deprecated inflight@1.0.6: This module is not supported, and leaks memory. Do not use it. Check out lru-cache if you want a good and tested way to coalesce async requests by a key value, which is much more comprehensive and powerful.
npm WARN deprecated @humanwhocodes/config-array@0.13.0: Use @eslint/config-array instead
npm WARN deprecated rimraf@3.0.2: Rimraf versions prior to v4 are no longer supported
npm WARN deprecated abab@2.0.6: Use your platform's native atob() and btoa() methods instead
npm WARN deprecated glob@7.2.0: Glob versions prior to v9 are no longer supported
npm WARN deprecated @humanwhocodes/object-schema@2.0.3: Use @eslint/object-schema instead
npm WARN deprecated domexception@4.0.0: Use your platform's native DOMException instead
npm WARN deprecated mkdirp@0.3.0: Legacy versions of mkdirp are no longer supported. Please update to mkdirp 1.x. (Note that the API surface has changed to use Promises in 1.x.)
npm WARN deprecated sinon@12.0.1: 16.1.1
npm WARN deprecated eslint@8.57.1: This version is no longer supported. Please see https://eslint.org/version-support for other options.
--- stdout ---

added 954 packages, and audited 955 packages in 16s

126 packages are looking for funding
  run `npm fund` for details

2 high severity vulnerabilities

To address all issues (including breaking changes), run:
  npm audit fix --force

Run `npm audit` for details.

--- end ---
$ /usr/bin/npm test
--- stderr ---
skinStyles/ext.visualEditor.less
  16:2  ⚠  Unexpected browser feature "prefers-color-scheme" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features

resources/skins.vector.clientPreferences/clientPreferences.less
  25:1  ⚠  Unexpected browser feature "prefers-color-scheme" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features

resources/skins.vector.js/bottomDock.less
  8:2  ⚠  Unexpected browser feature "flexbox-gap" is not supported by Safari 12,13,14,11.1,12.1,13.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4  plugin/no-unsupported-browser-features

resources/skins.vector.styles/CSSCustomProperties.less
  106:1  ⚠  Unexpected browser feature "prefers-color-scheme" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features

resources/skins.vector.styles/media.less
  29:1  ⚠  Unexpected browser feature "prefers-color-scheme" is not supported by Safari 12,11.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5  plugin/no-unsupported-browser-features

resources/skins.vector.styles/variables.less
   45:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
   45:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  136:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  136:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  137:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  138:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  138:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  139:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  139:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  140:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  140:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  151:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features

resources/skins.vector.styles.legacy/variables.less
   63:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
   63:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  102:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  161:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  161:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  162:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  163:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  163:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  164:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  164:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  165:1  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  165:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  176:1  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features

resources/skins.vector.styles/layouts/grid.less
   23:3  ⚠  Unexpected browser feature "css-overflow-anchor" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1,18.2, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1,18.2  plugin/no-unsupported-browser-features
  121:4  ⚠  Unexpected browser feature "css-overflow-anchor" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1,18.2, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1,18.2  plugin/no-unsupported-browser-features

resources/skins.vector.styles/layouts/screen.less
  102:2  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  102:2  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  147:2  ⚠  Unexpected browser feature "css-container-queries" is not supported by Edge 98,99,100,101,102,103,104, Firefox 97,98,99,100,101,102,103,104,105,106,107,108,109, Chrome 98,99,100,101,102,103,104, Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8                                                               plugin/no-unsupported-browser-features
  147:2  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  165:2  ⚠  Unexpected browser feature "css-touch-action" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1,18.2                                                                                                                                                                                                                                                  plugin/no-unsupported-browser-features
  165:2  ⚠  Unexpected browser feature "pointer" is not supported by Safari 12,11.1,12.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5                                                                                                                                                                                                                                                                                                                                                    plugin/no-unsupported-browser-features

resources/skins.vector.styles/components/Indicators.less
  1:1  ⚠  Unexpected browser feature "flexbox-gap" is not supported by Safari 12,13,14,11.1,12.1,13.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4  plugin/no-unsupported-browser-features

resources/skins.vector.styles/components/PinnableElement.less
  28:2  ⚠  Unexpected browser feature "css-containment" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3  plugin/no-unsupported-browser-features

resources/skins.vector.styles/layouts/toc/unpinned.less
  42:4  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features
  61:5  ⚠  Unexpected browser feature "css-paged-media" is not supported by Safari 12,13,14,15,11.1,12.1,13.1,14.1,15.1,15.2-15.3,15.4,15.5,15.6,16.0,16.1,16.2,16.3,16.4,16.5,16.6,17.0,17.1,17.2,17.3,17.4,17.5,17.6,18.0,18.1, Safari on iOS 11.3-11.4,12.0-12.1,12.2-12.5,13.0-13.1,13.2,13.3,13.4-13.7,14.0-14.4,14.5-14.8,15.0-15.1,15.2-15.3,15.4,15.5,15.6-15.8,16.0,16.1,16.2,16.3,16.4,16.5,16.6-16.7,17.0,17.1,17.2,17.3,17.4,17.5,17.6-17.7,18.0,18.1, Android Browser 131  plugin/no-unsupported-browser-features

⚠ 42 problems (0 errors, 42 warnings)

The "se" translation has 2 translations with trailing whitespace:
* vector-opt-out
* vector-opt-out-tooltip
FAIL tests/jest/tableOfContents.test.js
  ● Test suite failed to run

    ● Invalid return value:
      `process()` or/and `processAsync()` method of code transformer found at 
      "/src/repo/node_modules/mustache-jest/index.js" 
      should return an object or a Promise resolving to an object. The object 
      must have `code` property with a string of processed code.
      This error may be caused by a breaking change in Jest 28:
      https://jestjs.io/docs/28.x/upgrading-to-jest28#transformer
      Code Transformation Documentation:
      https://jestjs.io/docs/code-transformation

      4 |  * TableOfContents Mustache templates
      5 |  */
    > 6 | const templateTocContents = require( /** @type {string} */ ( './templates/TableOfContents__list.mustache' ) );
        |                             ^
      7 | const templateTocLine = require( /** @type {string} */ ( './templates/TableOfContents__line.mustache' ) );
      8 | /**
      9 |  * TableOfContents Config object for filling mustache templates

      at ScriptTransformer._buildTransformResult (node_modules/@jest/transform/build/ScriptTransformer.js:442:15)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:554:17)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19)
      at Object.require (resources/skins.vector.js/tableOfContents.js:6:29)
      at Object.<anonymous> (tests/jest/tableOfContents.test.js:9:29)

FAIL tests/jest/pinnableElement.test.js
  ● Pinnable header › renders

    expect(received).toMatchSnapshot()

    Snapshot name: `Pinnable header renders 1`

    - Snapshot  - 11
    + Received  + 11

    @@ -1,19 +1,19 @@
    - "<div id=\"pinned-container\">
    + "<div id="pinned-container">
      			
      		</div>
    - 		<div class=\"vector-dropdown\">
    + 		<div class="vector-dropdown">
    - 			<input type=\"checkbox\" id=\"checkbox\" class=\"vector-menu-checkbox\">
    + 			<input type="checkbox" id="checkbox" class="vector-menu-checkbox">
    - 			<label for=\"checkbox\" class=\"vector-menu-heading \">
    + 			<label for="checkbox" class="vector-menu-heading ">
    - 				<span class=\"vector-menu-heading-label\">Dropdown</span>
    + 				<span class="vector-menu-heading-label">Dropdown</span>
      			</label>
    - 			<div class=\"vector-menu-content\">
    + 			<div class="vector-menu-content">
    - 				<div id=\"unpinned-container\">
    + 				<div id="unpinned-container">
    - 				<div id=\"pinnable-element\"><div class=\"vector-pinnable-header pinnable-element-pinnable-header vector-pinnable-header-unpinned\" data-feature-name=\"pinned\" data-pinnable-element-id=\"pinnable-element\">
    + 				<div id="pinnable-element"><div class="vector-pinnable-header pinnable-element-pinnable-header vector-pinnable-header-unpinned" data-feature-name="pinned" data-pinnable-element-id="pinnable-element">
    - 	<div class=\"vector-pinnable-header-label\">simple pinnable element</div>
    + 	<div class="vector-pinnable-header-label">simple pinnable element</div>
    - 	<button class=\"vector-pinnable-header-toggle-button vector-pinnable-header-pin-button\" data-event-name=\"pinnable-header.pinnable-element.pin\">pin</button>
    + 	<button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.pinnable-element.pin">pin</button>
    - 	<button class=\"vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button\" data-event-name=\"pinnable-header.pinnable-element.unpin\">unpin</button>
    + 	<button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.pinnable-element.unpin">unpin</button>
      </div>
      </div>
      				</div>
      			</div>
      		</div>

      71 | 	test( 'renders', () => {
      72 | 		initializeHTML( simpleData );
    > 73 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      74 | 	} );
      75 |
      76 | 	test( 'updates pinnable header classes when toggle is pressed', () => {

      at Object.<anonymous> (tests/jest/pinnableElement.test.js:73:37)

 › 1 snapshot failed.
PASS tests/jest/AB.test.js
FAIL tests/jest/skins.vector.js/dropdownMenus.test.js
  ● addPortletLinkHandler › Adds a span with icon class to menus

    expect(received).toMatchSnapshot()

    Snapshot name: `addPortletLinkHandler Adds a span with icon class to menus 1`

    - Snapshot  - 3
    + Received  + 3

    @@ -1,9 +1,9 @@
      "
    - 		<ul class=\"vector-menu\">
    + 		<ul class="vector-menu">
    - 			<li class=\"mw-list-item mw-list-item-js\" id=\"test-id\">
    + 			<li class="mw-list-item mw-list-item-js" id="test-id">
    - 				<a href=\"#test-href\">
    + 				<a href="#test-href">
      					<span>
      						test link content
      					</span>
      				</a>
      			</li>

      53 | 		const mockPortletItem = document.getElementById( 'test-id' );
      54 | 		addPortletLinkHandler( mockPortletItem, { id: 'test-id' } );
    > 55 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      56 | 	} );
      57 |
      58 | 	test( 'Does not add an icon when noicon class is present', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/dropdownMenus.test.js:55:37)

  ● addPortletLinkHandler › Does not add an icon when noicon class is present

    expect(received).toMatchSnapshot()

    Snapshot name: `addPortletLinkHandler Does not add an icon when noicon class is present 1`

    - Snapshot  - 3
    + Received  + 3

    @@ -1,9 +1,9 @@
      "
    - 		<ul class=\"vector-menu\">
    + 		<ul class="vector-menu">
    - 			<li class=\"mw-list-item mw-list-item-js\" id=\"test-id\">
    + 			<li class="mw-list-item mw-list-item-js" id="test-id">
    - 				<a href=\"#test-href\">
    + 				<a href="#test-href">
      					<span>
      						test link content
      					</span>
      				</a>
      			</li>

      72 | 		const mockPortletItem = document.getElementById( 'test-id' );
      73 | 		addPortletLinkHandler( mockPortletItem, { id: 'test-id' } );
    > 74 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      75 | 	} );
      76 |
      77 | 	test( 'JS portlet should be moved to more menu (#p-cactions) at narrow widths', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/dropdownMenus.test.js:74:37)

 › 2 snapshots failed.
FAIL tests/jest/skins.vector.es6/main.test.js
  ● Test suite failed to run

    ● Invalid return value:
      `process()` or/and `processAsync()` method of code transformer found at 
      "/src/repo/node_modules/mustache-jest/index.js" 
      should return an object or a Promise resolving to an object. The object 
      must have `code` property with a string of processed code.
      This error may be caused by a breaking change in Jest 28:
      https://jestjs.io/docs/28.x/upgrading-to-jest28#transformer
      Code Transformation Documentation:
      https://jestjs.io/docs/code-transformation

      4 |  * TableOfContents Mustache templates
      5 |  */
    > 6 | const templateTocContents = require( /** @type {string} */ ( './templates/TableOfContents__list.mustache' ) );
        |                             ^
      7 | const templateTocLine = require( /** @type {string} */ ( './templates/TableOfContents__line.mustache' ) );
      8 | /**
      9 |  * TableOfContents Config object for filling mustache templates

      at ScriptTransformer._buildTransformResult (node_modules/@jest/transform/build/ScriptTransformer.js:442:15)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:554:17)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19)
      at Object.require (resources/skins.vector.js/tableOfContents.js:6:29)
      at Object.require (resources/skins.vector.js/setupIntersectionObservers.js:7:24)
      at Object.<anonymous> (tests/jest/skins.vector.es6/main.test.js:8:18)

FAIL tests/jest/stickyHeader.test.js
  ● Sticky header renders

    expect(received).toMatchSnapshot()

    Snapshot name: `Sticky header renders 1`

    - Snapshot  - 23
    + Received  + 23

    - "<div id=\"vector-sticky-header\" class=\"vector-sticky-header\">
    + "<div id="vector-sticky-header" class="vector-sticky-header">
    - 	<div class=\"vector-sticky-header-start\">
    + 	<div class="vector-sticky-header-start">
    - 		<div class=\"vector-sticky-header-icon-start vector-button-flush-left vector-button-flush-right\" aria-hidden=\"true\">
    + 		<div class="vector-sticky-header-icon-start vector-button-flush-left vector-button-flush-right" aria-hidden="true">
    - <button class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-sticky-header-search-toggle\" data-event-name=\"ui.vector-sticky-search-form.icon\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search\"></span>
    + <button class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-sticky-header-search-toggle" data-event-name="ui.vector-sticky-search-form.icon" tabindex="-1"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span>

      <span>search</span>
      </button>
      		</div>
    - <div> </div>		<div class=\"vector-sticky-header-context-bar\">
    + <div> </div>		<div class="vector-sticky-header-context-bar">
    - 			<nav aria-label=\"\" class=\"vector-toc-landmark\">
    + 			<nav aria-label="" class="vector-toc-landmark">
    - <div id=\"vector-sticky-header-toc\" class=\"vector-dropdown mw-portlet mw-portlet-sticky-header-toc vector-sticky-header-toc\">
    + <div id="vector-sticky-header-toc" class="vector-dropdown mw-portlet mw-portlet-sticky-header-toc vector-sticky-header-toc">
    - 	<input type=\"checkbox\" id=\"vector-sticky-header-toc-checkbox\" role=\"button\" aria-haspopup=\"true\" data-event-name=\"ui.dropdown-vector-sticky-header-toc\" class=\"vector-dropdown-checkbox\" aria-label=\"\" tabindex=\"-1\">
    + 	<input type="checkbox" id="vector-sticky-header-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-sticky-header-toc" class="vector-dropdown-checkbox" aria-label="" tabindex="-1">
    - 	<label id=\"vector-sticky-header-toc-label\" for=\"vector-sticky-header-toc-checkbox\" class=\"vector-dropdown-label cdx-button cdx-button--weight-quiet cdx-button--icon-only\" aria-hidden=\"true\" tabindex=\"-1\"><span class=\"vector-dropdown-label-text\"></span>
    + 	<label id="vector-sticky-header-toc-label" for="vector-sticky-header-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--weight-quiet cdx-button--icon-only" aria-hidden="true" tabindex="-1"><span class="vector-dropdown-label-text"></span>
      	</label>
    - 	<div class=\"vector-dropdown-content\">
    + 	<div class="vector-dropdown-content">

      	</div>
      </div>
      			</nav>
    - 			<div class=\"vector-sticky-header-context-bar-primary\" aria-hidden=\"true\"></div>
    + 			<div class="vector-sticky-header-context-bar-primary" aria-hidden="true"></div>
      		</div>
      	</div>
    - 	<div class=\"vector-sticky-header-end\" aria-hidden=\"true\">
    + 	<div class="vector-sticky-header-end" aria-hidden="true">
    - 		<div class=\"vector-sticky-header-icons\">
    + 		<div class="vector-sticky-header-icons">
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon\" id=\"ca-talk-sticky-header\" data-event-name=\"talk-sticky-header\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-speechBubbles mw-ui-icon-wikimedia-speechBubbles\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon" id="ca-talk-sticky-header" data-event-name="talk-sticky-header" tabindex="-1"><span class="vector-icon mw-ui-icon-speechBubbles mw-ui-icon-wikimedia-speechBubbles"></span>

      <span></span>
      </a>
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon\" id=\"ca-history-sticky-header\" data-event-name=\"history-sticky-header\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-history mw-ui-icon-wikimedia-history\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon" id="ca-history-sticky-header" data-event-name="history-sticky-header" tabindex="-1"><span class="vector-icon mw-ui-icon-history mw-ui-icon-wikimedia-history"></span>

      <span></span>
      </a>
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon mw-watchlink\" id=\"ca-watchstar-sticky-header\" data-event-name=\"watch-sticky-header\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-star mw-ui-icon-wikimedia-star\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon mw-watchlink" id="ca-watchstar-sticky-header" data-event-name="watch-sticky-header" tabindex="-1"><span class="vector-icon mw-ui-icon-star mw-ui-icon-wikimedia-star"></span>

      <span></span>
      </a>
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon\" id=\"ca-ve-edit-sticky-header\" data-event-name=\"ve-edit-sticky-header\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-edit mw-ui-icon-wikimedia-edit\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon" id="ca-ve-edit-sticky-header" data-event-name="ve-edit-sticky-header" tabindex="-1"><span class="vector-icon mw-ui-icon-edit mw-ui-icon-wikimedia-edit"></span>

      <span></span>
      </a>
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon\" id=\"ca-edit-sticky-header\" data-event-name=\"wikitext-edit-sticky-header\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-wikiText mw-ui-icon-wikimedia-wikiText\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon" id="ca-edit-sticky-header" data-event-name="wikitext-edit-sticky-header" tabindex="-1"><span class="vector-icon mw-ui-icon-wikiText mw-ui-icon-wikimedia-wikiText"></span>

      <span></span>
      </a>
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon\" id=\"ca-viewsource-sticky-header\" data-event-name=\"editLock\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-star mw-ui-icon-wikimedia-star\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon" id="ca-viewsource-sticky-header" data-event-name="editLock" tabindex="-1"><span class="vector-icon mw-ui-icon-star mw-ui-icon-wikimedia-star"></span>

      <span></span>
      </a>
      		</div>
    - 		<div class=\"vector-sticky-header-buttons\">
    + 		<div class="vector-sticky-header-buttons">
    - <button class=\"cdx-button cdx-button--weight-quiet mw-interlanguage-selector\" id=\"p-lang-btn-sticky-header\" data-event-name=\"ui.dropdown-p-lang-btn-sticky-header\" tabindex=\"-1\"><span>0 languages</span>
    + <button class="cdx-button cdx-button--weight-quiet mw-interlanguage-selector" id="p-lang-btn-sticky-header" data-event-name="ui.dropdown-p-lang-btn-sticky-header" tabindex="-1"><span>0 languages</span>
      </button>
      		</div>
    - 		<div class=\"vector-sticky-header-icon-end\">
    + 		<div class="vector-sticky-header-icon-end">
    - 			<div class=\"vector-user-links\">
    + 			<div class="vector-user-links">
      			</div>
      		</div>
      	</div>
      </div>
      "

      135 |
      136 | test( 'Sticky header renders', () => {
    > 137 | 	expect( document.body.innerHTML ).toMatchSnapshot();
          | 	                                  ^
      138 | } );
      139 |
      140 | describe( 'sticky header', () => {

      at Object.<anonymous> (tests/jest/stickyHeader.test.js:137:36)

 › 1 snapshot failed.
PASS tests/jest/skins.vector.js/disableNightModeIfGadget.test.js
PASS tests/jest/restSearchClient.test.js
PASS tests/jest/skins.vector.legacy.js/portlets.test.js
PASS tests/jest/popupNotification.test.js
FAIL tests/jest/skins.vector.js/tables.test.js
  ● tables › wraps table with div

    expect(received).toMatchSnapshot()

    Snapshot name: `tables wraps table with div 1`

    - Snapshot  - 2
    + Received  + 2

      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
    - 				<div class=\"noresize\"><table class=\"wikitable\">
    + 				<div class="noresize"><table class="wikitable">
      					<tbody><tr><th>table table table</th></tr></tbody>
      				</table></div>
      			</div>
      		"

      12 | 		tables();
      13 |
    > 14 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      15 | 	} );
      16 |
      17 | 	test( 'wraps multiple table with div', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:14:37)

  ● tables › wraps multiple table with div

    expect(received).toMatchSnapshot()

    Snapshot name: `tables wraps multiple table with div 1`

    - Snapshot  - 5
    + Received  + 5

      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
    - 				<div class=\"noresize\"><table class=\"wikitable\">
    + 				<div class="noresize"><table class="wikitable">
      					<tbody><tr><th>table table table</th></tr></tbody>
      				</table></div>
    - 				<div class=\"noresize\"><table class=\"wikitable\">
    + 				<div class="noresize"><table class="wikitable">
    - 				</table></div><div class=\"noresize\"><table class=\"wikitable\">
    + 				</table></div><div class="noresize"><table class="wikitable">
      					<tbody><tr><th>table table table</th></tr></tbody>
      				</table></div>
    - 				<div class=\"noresize\"><table class=\"wikitable\">
    + 				<div class="noresize"><table class="wikitable">
      					<tbody><tr><th>table table table</th></tr></tbody>
      				</table></div>
      			</div>
      		"

      32 | 		tables();
      33 |
    > 34 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      35 | 	} );
      36 |
      37 | 	test( 'doesnt wrap nested tables', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:34:37)

  ● tables › doesnt wrap nested tables

    expect(received).toMatchSnapshot()

    Snapshot name: `tables doesnt wrap nested tables 1`

    - Snapshot  - 3
    + Received  + 3

      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
    - 				<div class=\"noresize\"><table class=\"wikitable\">
    + 				<div class="noresize"><table class="wikitable">
      					<tbody>
      						<tr><th>table table table</th></tr>
    - 						<tr><td><table class=\"wikitable\"><tbody><tr><th>table table table</th></tr></tbody></table></td><td></td></tr>
    + 						<tr><td><table class="wikitable"><tbody><tr><th>table table table</th></tr></tbody></table></td><td></td></tr>
      					</tbody>
      				</table></div>
      			</div>
      		"

      48 | 		tables();
      49 |
    > 50 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      51 | 	} );
      52 |
      53 | 	test( 'doesnt wrap tables that are not wikitables', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:50:37)

  ● tables › doesnt wrap tables that are not wikitables

    expect(received).toMatchSnapshot()

    Snapshot name: `tables doesnt wrap tables that are not wikitables 1`

    - Snapshot  - 1
    + Received  + 1

    @@ -1,7 +1,7 @@
      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
      				<table>
      					<tbody>
      						<tr><th>table table table</th></tr>
      						<tr><td><table><tbody><tr><th>table table table</th></tr></tbody></table></td><td></td></tr>
      					</tbody>

      64 | 		tables();
      65 |
    > 66 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      67 | 	} );
      68 |
      69 | 	test( 'doesnt wrap tables that already have noresize', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:66:37)

  ● tables › doesnt wrap tables that already have noresize

    expect(received).toMatchSnapshot()

    Snapshot name: `tables doesnt wrap tables that already have noresize 1`

    - Snapshot  - 3
    + Received  + 3

    @@ -1,9 +1,9 @@
      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
    - 				<div class=\"noresize\">
    + 				<div class="noresize">
    - 					<table class=\"wikitable\">
    + 					<table class="wikitable">
      						<tbody>
      							<tr><th>table table table</th></tr>
      						</tbody>
      					</table>
      				</div>

      81 | 		tables();
      82 |
    > 83 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      84 | 	} );
      85 |
      86 | 	test( 'doesnt wrap tables that are already wrapped', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:83:37)

  ● tables › doesnt wrap tables that are already wrapped

    expect(received).toMatchSnapshot()

    Snapshot name: `tables doesnt wrap tables that are already wrapped 1`

    - Snapshot  - 2
    + Received  + 2

    @@ -1,9 +1,9 @@
      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
      				<div>
    - 					<table class=\"wikitable\">
    + 					<table class="wikitable">
      						<tbody>
      							<tr><th>table table table</th></tr>
      						</tbody>
      					</table>
      				</div>

       98 | 		tables();
       99 |
    > 100 | 		expect( document.body.innerHTML ).toMatchSnapshot();
          | 		                                  ^
      101 | 	} );
      102 |
      103 | 	test( 'doesnt wrap floated tables', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:100:37)

  ● tables › doesnt wrap floated tables

    expect(received).toMatchSnapshot()

    Snapshot name: `tables doesnt wrap floated tables 1`

    - Snapshot  - 2
    + Received  + 2

    @@ -1,8 +1,8 @@
      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
    - 				<table class=\"wikitable\" style=\"float:right\">
    + 				<table class="wikitable" style="float:right">
      					<tbody>
      						<tr><th>table table table</th></tr>
      					</tbody>
      				</table>
      			<div>

      113 | 		tables();
      114 |
    > 115 | 		expect( document.body.innerHTML ).toMatchSnapshot();
          | 		                                  ^
      116 | 	} );
      117 | } );
      118 |

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:115:37)

 › 7 snapshots failed.
PASS tests/jest/skins.vector.js/portlets.test.js
PASS tests/jest/fetch.test.js
PASS tests/jest/instrumentation.test.js
FAIL tests/jest/skins.vector.clientPreferences.test.js
  ● clientPreferences › render font size

    expect(received).toMatchSnapshot()

    Snapshot name: `clientPreferences render font size 1`

    - Snapshot  - 5
    + Received  + 5

      "<div>
    - 			<div class=\"vector-menu-heading\">Width</div>
    + 			<div class="vector-menu-heading">Width</div>
    - 			<div class=\"vector-menu-content\">
    + 			<div class="vector-menu-content">
    - 				<ul class=\"vector-menu-content-list\"></ul>
    + 				<ul class="vector-menu-content-list"></ul>
    - 			<span class=\"skin-client-pref-exclusion-notice\">msg:vector-feature-custom-font-size-exclusion-notice</span></div>
    + 			<span class="skin-client-pref-exclusion-notice">msg:vector-feature-custom-font-size-exclusion-notice</span></div>
    - 		<li><div class=\"\"><form><div class=\"cdx-radio\"><input name=\"skin-client-pref-vector-feature-custom-font-size-group\" id=\"skin-client-pref-vector-feature-custom-font-size-value-0\" type=\"radio\" value=\"0\" data-event-name=\"skin-client-pref-vector-feature-custom-font-size-value-0\" class=\"cdx-radio__input\"><span class=\"cdx-radio__icon\"></span><label for=\"skin-client-pref-vector-feature-custom-font-size-value-0\" class=\"cdx-radio__label\">vector-feature-custom-font-size-0-label</label></div><div class=\"cdx-radio\"><input name=\"skin-client-pref-vector-feature-custom-font-size-group\" id=\"skin-client-pref-vector-feature-custom-font-size-value-1\" type=\"radio\" value=\"1\" data-event-name=\"skin-client-pref-vector-feature-custom-font-size-value-1\" class=\"cdx-radio__input\"><span class=\"cdx-radio__icon\"></span><label for=\"skin-client-pref-vector-feature-custom-font-size-value-1\" class=\"cdx-radio__label\">vector-feature-custom-font-size-1-label</label></div><div class=\"cdx-radio\"><input name=\"skin-client-pref-vector-feature-custom-font-size-group\" id=\"skin-client-pref-vector-feature-custom-font-size-value-2\" type=\"radio\" value=\"2\" data-event-name=\"skin-client-pref-vector-feature-custom-font-size-value-2\" class=\"cdx-radio__input\"><span class=\"cdx-radio__icon\"></span><label for=\"skin-client-pref-vector-feature-custom-font-size-value-2\" class=\"cdx-radio__label\">vector-feature-custom-font-size-2-label</label></div></form></div></li></div>"
    + 		<li><div class=""><form><div class="cdx-radio"><input name="skin-client-pref-vector-feature-custom-font-size-group" id="skin-client-pref-vector-feature-custom-font-size-value-0" type="radio" value="0" data-event-name="skin-client-pref-vector-feature-custom-font-size-value-0" class="cdx-radio__input"><span class="cdx-radio__icon"></span><label for="skin-client-pref-vector-feature-custom-font-size-value-0" class="cdx-radio__label">vector-feature-custom-font-size-0-label</label></div><div class="cdx-radio"><input name="skin-client-pref-vector-feature-custom-font-size-group" id="skin-client-pref-vector-feature-custom-font-size-value-1" type="radio" value="1" data-event-name="skin-client-pref-vector-feature-custom-font-size-value-1" class="cdx-radio__input"><span class="cdx-radio__icon"></span><label for="skin-client-pref-vector-feature-custom-font-size-value-1" class="cdx-radio__label">vector-feature-custom-font-size-1-label</label></div><div class="cdx-radio"><input name="skin-client-pref-vector-feature-custom-font-size-group" id="skin-client-pref-vector-feature-custom-font-size-value-2" type="radio" value="2" data-event-name="skin-client-pref-vector-feature-custom-font-size-value-2" class="cdx-radio__input"><span class="cdx-radio__icon"></span><label for="skin-client-pref-vector-feature-custom-font-size-value-2" class="cdx-radio__label">vector-feature-custom-font-size-2-label</label></div></form></div></li></div>"

      45 | 			}
      46 | 		} ).then( () => {
    > 47 | 			expect( cp.innerHTML ).toMatchSnapshot();
         | 			                       ^
      48 | 		} );
      49 | 	} );
      50 |

      at tests/jest/skins.vector.clientPreferences.test.js:47:27

  ● clientPreferences › doesnt render exclusion notice if the msg key doesnt exist

    expect(received).toMatchSnapshot()

    Snapshot name: `clientPreferences doesnt render exclusion notice if the msg key doesnt exist 1`

    - Snapshot  - 4
    + Received  + 4

      "<div>
    - 			<div class=\"vector-menu-heading\">Width</div>
    + 			<div class="vector-menu-heading">Width</div>
    - 			<div class=\"vector-menu-content\">
    + 			<div class="vector-menu-content">
    - 				<ul class=\"vector-menu-content-list\"></ul>
    + 				<ul class="vector-menu-content-list"></ul>
      			</div>
    - 		<li><div class=\"\"><form><div class=\"cdx-radio\"><input name=\"skin-client-pref-vector-feature-limited-width-group\" id=\"skin-client-pref-vector-feature-limited-width-value-1\" type=\"radio\" value=\"1\" data-event-name=\"skin-client-pref-vector-feature-limited-width-value-1\" class=\"cdx-radio__input\"><span class=\"cdx-radio__icon\"></span><label for=\"skin-client-pref-vector-feature-limited-width-value-1\" class=\"cdx-radio__label\">vector-feature-limited-width-1-label</label></div><div class=\"cdx-radio\"><input name=\"skin-client-pref-vector-feature-limited-width-group\" id=\"skin-client-pref-vector-feature-limited-width-value-0\" type=\"radio\" value=\"0\" data-event-name=\"skin-client-pref-vector-feature-limited-width-value-0\" class=\"cdx-radio__input\"><span class=\"cdx-radio__icon\"></span><label for=\"skin-client-pref-vector-feature-limited-width-value-0\" class=\"cdx-radio__label\">vector-feature-limited-width-0-label</label></div></form></div></li></div>"
    + 		<li><div class=""><form><div class="cdx-radio"><input name="skin-client-pref-vector-feature-limited-width-group" id="skin-client-pref-vector-feature-limited-width-value-1" type="radio" value="1" data-event-name="skin-client-pref-vector-feature-limited-width-value-1" class="cdx-radio__input"><span class="cdx-radio__icon"></span><label for="skin-client-pref-vector-feature-limited-width-value-1" class="cdx-radio__label">vector-feature-limited-width-1-label</label></div><div class="cdx-radio"><input name="skin-client-pref-vector-feature-limited-width-group" id="skin-client-pref-vector-feature-limited-width-value-0" type="radio" value="0" data-event-name="skin-client-pref-vector-feature-limited-width-value-0" class="cdx-radio__input"><span class="cdx-radio__icon"></span><label for="skin-client-pref-vector-feature-limited-width-value-0" class="cdx-radio__label">vector-feature-limited-width-0-label</label></div></form></div></li></div>"

      61 | 			}
      62 | 		} ).then( () => {
    > 63 | 			expect( cp.innerHTML ).toMatchSnapshot();
         | 			                       ^
      64 | 		} );
      65 | 	} );
      66 |

      at tests/jest/skins.vector.clientPreferences.test.js:63:27

  ● clientPreferences › render toggle

    expect(received).toMatchSnapshot()

    Snapshot name: `clientPreferences render toggle 1`

    - Snapshot  - 5
    + Received  + 5

      "<div>
    - 			<div class=\"vector-menu-heading\">Width</div>
    + 			<div class="vector-menu-heading">Width</div>
    - 			<div class=\"vector-menu-content\">
    + 			<div class="vector-menu-content">
    - 				<ul class=\"vector-menu-content-list\"></ul>
    + 				<ul class="vector-menu-content-list"></ul>
    - 			<span class=\"skin-client-pref-exclusion-notice\">msg:expandAll-exclusion-notice</span></div>
    + 			<span class="skin-client-pref-exclusion-notice">msg:expandAll-exclusion-notice</span></div>
    - 		<li><div class=\"\"><form><span class=\"cdx-toggle-switch\"><input name=\"skin-client-pref-expandAll-group\" id=\"skin-client-pref-expandAll-value-1\" type=\"checkbox\" data-event-name=\"skin-client-pref-expandAll-value-1\" class=\"cdx-toggle-switch__input\"><span class=\"cdx-toggle-switch__switch\"><span class=\"cdx-toggle-switch__switch__grip\"></span></span><label class=\"cdx-toggle-switch__label\">msg:expandAll-name</label></span></form></div></li></div>"
    + 		<li><div class=""><form><span class="cdx-toggle-switch"><input name="skin-client-pref-expandAll-group" id="skin-client-pref-expandAll-value-1" type="checkbox" data-event-name="skin-client-pref-expandAll-value-1" class="cdx-toggle-switch__input"><span class="cdx-toggle-switch__switch"><span class="cdx-toggle-switch__switch__grip"></span></span><label class="cdx-toggle-switch__label">msg:expandAll-name</label></span></form></div></li></div>"

      74 | 			}
      75 | 		} ).then( () => {
    > 76 | 			expect( cp.innerHTML ).toMatchSnapshot();
         | 			                       ^
      77 | 		} );
      78 | 	} );
      79 | } );

      at tests/jest/skins.vector.clientPreferences.test.js:76:27

 › 3 snapshots failed.
FAIL tests/jest/skins.vector.js/menuTabs.test.js
  ● menuTabs › adds vector-tab-noicon class to li element when part of tabs

    expect(received).toMatchSnapshot()

    Snapshot name: `menuTabs adds vector-tab-noicon class to li element when part of tabs 1`

    - Snapshot  - 5
    + Received  + 5

    @@ -1,11 +1,11 @@
      "
    - 				<div id=\"p-views\" class=\"vector-menu mw-portlet mw-portlet-views vector-menu-tabs\">
    + 				<div id="p-views" class="vector-menu mw-portlet mw-portlet-views vector-menu-tabs">
    - 					<div class=\"vector-menu-content\">
    + 					<div class="vector-menu-content">
    - 						<ul class=\"vector-menu-content-list\">
    + 						<ul class="vector-menu-content-list">
    - 							<li class=\"mw-list-item mw-list-item-js vector-tab-noicon\" id=\"test-id\">
    + 							<li class="mw-list-item mw-list-item-js vector-tab-noicon" id="test-id">
    - 								<a href=\"#test-href\">
    + 								<a href="#test-href">
      									<span>
      										test link content
      									</span>
      								</a>
      							</li>

      44 | 		mw.hook( 'util' ).fire( menuItem, { id: 'test-id' } );
      45 |
    > 46 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      47 | 	} );
      48 |
      49 | 	test( 'does not add vector-tab-noicon class to li element when not part of tabs', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/menuTabs.test.js:46:37)

  ● menuTabs › does not add vector-tab-noicon class to li element when not part of tabs

    expect(received).toMatchSnapshot()

    Snapshot name: `menuTabs does not add vector-tab-noicon class to li element when not part of tabs 1`

    - Snapshot  - 5
    + Received  + 5

    @@ -1,11 +1,11 @@
      "
    - 			<div id=\"p-variants\" class=\"vector-menu mw-portlet mw-portlet-variants\">
    + 			<div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants">
    - 				<div class=\"vector-menu-content\">
    + 				<div class="vector-menu-content">
    - 					<ul class=\"vector-menu-content-list\">
    + 					<ul class="vector-menu-content-list">
    - 						<li class=\"mw-list-item mw-list-item-js\" id=\"test-id\">
    + 						<li class="mw-list-item mw-list-item-js" id="test-id">
    - 							<a href=\"#test-href\">
    + 							<a href="#test-href">
      								<span>
      									test link content
      								</span>
      							</a>
      						</li>

      67 | 		mw.hook( 'util' ).fire( menuItem, { id: 'test-id' } );
      68 |
    > 69 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      70 | 	} );
      71 | } );
      72 |

      at Object.<anonymous> (tests/jest/skins.vector.js/menuTabs.test.js:69:37)

 › 2 snapshots failed.
PASS tests/jest/skins.vector.es6/features.test.js
PASS tests/jest/urlGenerator.test.js
PASS tests/jest/deferUntilFrame.test.js
FAIL tests/jest/userLinks.test.js
  ● UserLinks renders

    expect(received).toMatchSnapshot()

    Snapshot name: `UserLinks renders 1`

    - Snapshot  - 41
    + Received  + 41

    @@ -1,83 +1,83 @@
    - "<nav class=\"vector-user-links\" aria-label=\"\">
    + "<nav class="vector-user-links" aria-label="">
    - 	<div class=\"vector-user-links-main\">
    + 	<div class="vector-user-links-main">
    - <div id=\"p-personal-preferences\" class=\"vector-menu\">
    + <div id="p-personal-preferences" class="vector-menu">
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
    - 		<li id=\"ca-uls\" class=\"user-links-collapsible-item mw-list-item active\"><a href=\"#\" class=\"uls-trigger cdx-button cdx-button--weight-quiet\"><span class=\"vector-icon mw-ui-icon-wikimedia-language\"></span> <span>English</span></a></li>
    + 		<li id="ca-uls" class="user-links-collapsible-item mw-list-item active"><a href="#" class="uls-trigger cdx-button cdx-button--weight-quiet"><span class="vector-icon mw-ui-icon-wikimedia-language"></span> <span>English</span></a></li>
      	</ul>
      	
      </div>
      </div>
    - <div id=\"p-personal-user-page\" class=\"vector-menu\">
    + <div id="p-personal-user-page" class="vector-menu">
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
    - 		<li id=\"pt-userpage-2\" class=\"user-links-collapsible-item mw-list-item\"><a href=\"/wiki/User:Admin\" class=\"cdx-button cdx-button--weight-quiet\" title=\"Your user page [⌃⌥.]\" accesskey=\".\"><span>Admin</span></a></li>
    + 		<li id="pt-userpage-2" class="user-links-collapsible-item mw-list-item"><a href="/wiki/User:Admin" class="cdx-button cdx-button--weight-quiet" title="Your user page [⌃⌥.]" accesskey="."><span>Admin</span></a></li>
      	</ul>
      	
      </div>
      </div>
    - 	<nav class=\"vector-appearance-landmark\" aria-label=\"\">
    + 	<nav class="vector-appearance-landmark" aria-label="">
      	</nav>
    - <div id=\"p-personal-notifications\" class=\"vector-menu\">
    + <div id="p-personal-notifications" class="vector-menu">
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
    - 		<li id=\"pt-notifications-alert\" class=\"mw-list-item\"><a href=\"/wiki/Special:Notifications\" class=\"mw-echo-notifications-badge mw-echo-notification-badge-nojs oo-ui-icon-bell mw-echo-notifications-badge-all-read\" data-counter-num=\"0\" data-counter-text=\"0\" title=\"Your alerts\"><span>Alerts (0)</span></a></li>
    + 		<li id="pt-notifications-alert" class="mw-list-item"><a href="/wiki/Special:Notifications" class="mw-echo-notifications-badge mw-echo-notification-badge-nojs oo-ui-icon-bell mw-echo-notifications-badge-all-read" data-counter-num="0" data-counter-text="0" title="Your alerts"><span>Alerts (0)</span></a></li>
    - 		<li id=\"pt-notifications-notice\" class=\"mw-list-item\"><a href=\"/wiki/Special:Notifications\" class=\"mw-echo-notifications-badge mw-echo-notification-badge-nojs oo-ui-icon-tray mw-echo-notifications-badge-all-read\" data-counter-num=\"0\" data-counter-text=\"0\" title=\"Your notices\"><span>Notices (0)</span></a></li>
    + 		<li id="pt-notifications-notice" class="mw-list-item"><a href="/wiki/Special:Notifications" class="mw-echo-notifications-badge mw-echo-notification-badge-nojs oo-ui-icon-tray mw-echo-notifications-badge-all-read" data-counter-num="0" data-counter-text="0" title="Your notices"><span>Notices (0)</span></a></li>
      	</ul>
      	
      </div>
      </div>
    - <div id=\"p-personal-more\" class=\"vector-menu mw-portlet mw-portlet-vector-user-menu-overflow vector-user-menu-overflow\">
    + <div id="p-personal-more" class="vector-menu mw-portlet mw-portlet-vector-user-menu-overflow vector-user-menu-overflow">
    - 	<div class=\"vector-menu-heading\">
    + 	<div class="vector-menu-heading">
      		Toggle sidebar
      	</div>
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
      		
    - 			<li id=\"pt-watchlist-2\" class=\"user-links-collapsible-item mw-list-item\"><a href=\"/wiki/Special:Watchlist\" class=\"cdx-button cdx-button--weight-quiet vector-icon cdx-button--icon-only mw-ui-icon-watchlist mw-ui-icon-wikimedia-watchlist\" title=\"A list of pages you are monitoring for changes [⌃⌥l]\" accesskey=\"l\"><span>Watchlist</span></a></li>
    + 			<li id="pt-watchlist-2" class="user-links-collapsible-item mw-list-item"><a href="/wiki/Special:Watchlist" class="cdx-button cdx-button--weight-quiet vector-icon cdx-button--icon-only mw-ui-icon-watchlist mw-ui-icon-wikimedia-watchlist" title="A list of pages you are monitoring for changes [⌃⌥l]" accesskey="l"><span>Watchlist</span></a></li>
      		
      	</ul>
      	
      </div>
      </div>
      	</div>
    - <div id=\"vector-user-links-dropdown\" class=\"vector-dropdown vector-user-menu vector-user-menu-logged-in\">
    + <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-user-menu-logged-in">
    - 	<input type=\"checkbox\" id=\"vector-user-links-dropdown-checkbox\" role=\"button\" aria-haspopup=\"true\" data-event-name=\"ui.dropdown-vector-user-links-dropdown\" class=\"vector-dropdown-checkbox\" aria-label=\"Personal tools\">
    + 	<input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox" aria-label="Personal tools">
    - 	<label id=\"vector-user-links-dropdown-label\" for=\"vector-user-links-dropdown-checkbox\" class=\"vector-dropdown-label\" aria-hidden=\"true\"><span class=\"vector-dropdown-label-text\">Personal tools</span>
    + 	<label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label" aria-hidden="true"><span class="vector-dropdown-label-text">Personal tools</span>
      	</label>
    - 	<div class=\"vector-dropdown-content\">
    + 	<div class="vector-dropdown-content">

    - <div id=\"p-personal\" class=\"vector-menu mw-portlet mw-portlet-personal\">
    + <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal">
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
      		
    - 			<li id=\"pt-userpage\" class=\"user-links-collapsible-item mw-list-item\"><a href=\"/wiki/User:Admin\" title=\"Your user page [.]\" accesskey=\".\"><span class=\"vector-icon mw-ui-icon-userAvatar mw-ui-icon-wikimedia-userAvatar\"></span> <span>Admin</span></a></li>
    + 			<li id="pt-userpage" class="user-links-collapsible-item mw-list-item"><a href="/wiki/User:Admin" title="Your user page [.]" accesskey="."><span class="vector-icon mw-ui-icon-userAvatar mw-ui-icon-wikimedia-userAvatar"></span> <span>Admin</span></a></li>
    - 			<li id=\"pt-mytalk\" class=\"mw-list-item\"><a href=\"/wiki/User_talk:Admin\" title=\"Your talk page [n]\" accesskey=\"n\"><span class=\"vector-icon mw-ui-icon-userTalk mw-ui-icon-wikimedia-userTalk\"></span> <span>Talk</span></a></li>
    + 			<li id="pt-mytalk" class="mw-list-item"><a href="/wiki/User_talk:Admin" title="Your talk page [n]" accesskey="n"><span class="vector-icon mw-ui-icon-userTalk mw-ui-icon-wikimedia-userTalk"></span> <span>Talk</span></a></li>
    - 			<li id=\"pt-sandbox\" class=\"new mw-list-item\"><a href=\"/w/index.php?title=User:Admin/sandbox&amp;action=edit&amp;redlink=1\" title=\"Your sandbox (page does not exist)\"><span class=\"vector-icon mw-ui-icon-sandbox mw-ui-icon-wikimedia-sandbox\"></span> <span>Sandbox</span></a></li>
    + 			<li id="pt-sandbox" class="new mw-list-item"><a href="/w/index.php?title=User:Admin/sandbox&amp;action=edit&amp;redlink=1" title="Your sandbox (page does not exist)"><span class="vector-icon mw-ui-icon-sandbox mw-ui-icon-wikimedia-sandbox"></span> <span>Sandbox</span></a></li>
    - 			<li id=\"pt-preferences\" class=\"mw-list-item\"><a href=\"/wiki/Special:Preferences\" title=\"Your preferences\"><span class=\"vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance\"></span> <span>Preferences</span></a></li>
    + 			<li id="pt-preferences" class="mw-list-item"><a href="/wiki/Special:Preferences" title="Your preferences"><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span>Preferences</span></a></li>
    - 			<li id=\"pt-betafeatures\" class=\"mw-list-item\"><a href=\"/wiki/Special:Preferences#mw-prefsection-betafeatures\" title=\"Beta features\"><span class=\"vector-icon mw-ui-icon-labFlask mw-ui-icon-wikimedia-labFlask\"></span> <span>Beta</span></a></li>
    + 			<li id="pt-betafeatures" class="mw-list-item"><a href="/wiki/Special:Preferences#mw-prefsection-betafeatures" title="Beta features"><span class="vector-icon mw-ui-icon-labFlask mw-ui-icon-wikimedia-labFlask"></span> <span>Beta</span></a></li>
    - 			<li id=\"pt-watchlist\" class=\"user-links-collapsible-item mw-list-item\"><a href=\"/wiki/Special:Watchlist\" title=\"A list of pages you are monitoring for changes [l]\" accesskey=\"l\"><span class=\"vector-icon mw-ui-icon-watchlist mw-ui-icon-wikimedia-watchlist\"></span> <span>Watchlist</span></a></li>
    + 			<li id="pt-watchlist" class="user-links-collapsible-item mw-list-item"><a href="/wiki/Special:Watchlist" title="A list of pages you are monitoring for changes [l]" accesskey="l"><span class="vector-icon mw-ui-icon-watchlist mw-ui-icon-wikimedia-watchlist"></span> <span>Watchlist</span></a></li>
    - 			<li id=\"pt-uploads\" class=\"mw-list-item\"><a href=\"/w/index.php?title=Special:ListFiles/Admin&amp;ilshowall=1\" title=\"List of files you have uploaded\"><span class=\"vector-icon mw-ui-icon-imageGallery mw-ui-icon-wikimedia-imageGallery\"></span> <span>Uploads</span></a></li>
    + 			<li id="pt-uploads" class="mw-list-item"><a href="/w/index.php?title=Special:ListFiles/Admin&amp;ilshowall=1" title="List of files you have uploaded"><span class="vector-icon mw-ui-icon-imageGallery mw-ui-icon-wikimedia-imageGallery"></span> <span>Uploads</span></a></li>
    - 			<li id=\"pt-mycontris\" class=\"mw-list-item\"><a href=\"/wiki/Special:Contributions/Admin\" title=\"A list of your contributions [y]\" accesskey=\"y\"><span class=\"vector-icon mw-ui-icon-userContributions mw-ui-icon-wikimedia-userContributions\"></span> <span>Contributions</span></a></li>
    + 			<li id="pt-mycontris" class="mw-list-item"><a href="/wiki/Special:Contributions/Admin" title="A list of your contributions [y]" accesskey="y"><span class="vector-icon mw-ui-icon-userContributions mw-ui-icon-wikimedia-userContributions"></span> <span>Contributions</span></a></li>
    - 			<li id=\"pt-custom\" class=\"mw-list-item mw-list-item-js\">Gadget added item</li>
    + 			<li id="pt-custom" class="mw-list-item mw-list-item-js">Gadget added item</li>
      		
      	</ul>
      	
      </div>
      </div>
    - <div id=\"p-user-menu-logout\" class=\"vector-menu mw-portlet mw-portlet-user-menu-logout\">
    + <div id="p-user-menu-logout" class="vector-menu mw-portlet mw-portlet-user-menu-logout">
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
      		
    - 			<li id=\"ca-logout\" class=\"mw-list-item\"><a data-mw=\"interface\" href=\"/w/index.php?title=Special:UserLogout&amp;returnto=Main+Page\" title=\"Log out\"><span class=\"vector-icon mw-ui-icon-logOut mw-ui-icon-wikimedia-logOut\"></span> <span>Log out</span></a></li>
    + 			<li id="ca-logout" class="mw-list-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogout&amp;returnto=Main+Page" title="Log out"><span class="vector-icon mw-ui-icon-logOut mw-ui-icon-wikimedia-logOut"></span> <span>Log out</span></a></li>
      		
      	</ul>
      	
      </div>
      </div>

       6 |
       7 | test( 'UserLinks renders', () => {
    >  8 | 	expect( document.body.innerHTML ).toMatchSnapshot();
         | 	                                  ^
       9 | } );
      10 |

      at Object.<anonymous> (tests/jest/userLinks.test.js:8:36)

 › 1 snapshot failed.
PASS tests/jest/App.test.js
Jest: "global" coverage threshold for statements (48%) not met: 36.35%
Jest: "global" coverage threshold for branches (35%) not met: 28.69%
Jest: "global" coverage threshold for lines (48%) not met: 36.46%
Jest: "global" coverage threshold for functions (45%) not met: 32.49%

Summary of all failing tests
FAIL tests/jest/tableOfContents.test.js
  ● Test suite failed to run

    ● Invalid return value:
      `process()` or/and `processAsync()` method of code transformer found at 
      "/src/repo/node_modules/mustache-jest/index.js" 
      should return an object or a Promise resolving to an object. The object 
      must have `code` property with a string of processed code.
      This error may be caused by a breaking change in Jest 28:
      https://jestjs.io/docs/28.x/upgrading-to-jest28#transformer
      Code Transformation Documentation:
      https://jestjs.io/docs/code-transformation

      4 |  * TableOfContents Mustache templates
      5 |  */
    > 6 | const templateTocContents = require( /** @type {string} */ ( './templates/TableOfContents__list.mustache' ) );
        |                             ^
      7 | const templateTocLine = require( /** @type {string} */ ( './templates/TableOfContents__line.mustache' ) );
      8 | /**
      9 |  * TableOfContents Config object for filling mustache templates

      at ScriptTransformer._buildTransformResult (node_modules/@jest/transform/build/ScriptTransformer.js:442:15)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:554:17)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19)
      at Object.require (resources/skins.vector.js/tableOfContents.js:6:29)
      at Object.<anonymous> (tests/jest/tableOfContents.test.js:9:29)

FAIL tests/jest/pinnableElement.test.js
  ● Pinnable header › renders

    expect(received).toMatchSnapshot()

    Snapshot name: `Pinnable header renders 1`

    - Snapshot  - 11
    + Received  + 11

    @@ -1,19 +1,19 @@
    - "<div id=\"pinned-container\">
    + "<div id="pinned-container">
      			
      		</div>
    - 		<div class=\"vector-dropdown\">
    + 		<div class="vector-dropdown">
    - 			<input type=\"checkbox\" id=\"checkbox\" class=\"vector-menu-checkbox\">
    + 			<input type="checkbox" id="checkbox" class="vector-menu-checkbox">
    - 			<label for=\"checkbox\" class=\"vector-menu-heading \">
    + 			<label for="checkbox" class="vector-menu-heading ">
    - 				<span class=\"vector-menu-heading-label\">Dropdown</span>
    + 				<span class="vector-menu-heading-label">Dropdown</span>
      			</label>
    - 			<div class=\"vector-menu-content\">
    + 			<div class="vector-menu-content">
    - 				<div id=\"unpinned-container\">
    + 				<div id="unpinned-container">
    - 				<div id=\"pinnable-element\"><div class=\"vector-pinnable-header pinnable-element-pinnable-header vector-pinnable-header-unpinned\" data-feature-name=\"pinned\" data-pinnable-element-id=\"pinnable-element\">
    + 				<div id="pinnable-element"><div class="vector-pinnable-header pinnable-element-pinnable-header vector-pinnable-header-unpinned" data-feature-name="pinned" data-pinnable-element-id="pinnable-element">
    - 	<div class=\"vector-pinnable-header-label\">simple pinnable element</div>
    + 	<div class="vector-pinnable-header-label">simple pinnable element</div>
    - 	<button class=\"vector-pinnable-header-toggle-button vector-pinnable-header-pin-button\" data-event-name=\"pinnable-header.pinnable-element.pin\">pin</button>
    + 	<button class="vector-pinnable-header-toggle-button vector-pinnable-header-pin-button" data-event-name="pinnable-header.pinnable-element.pin">pin</button>
    - 	<button class=\"vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button\" data-event-name=\"pinnable-header.pinnable-element.unpin\">unpin</button>
    + 	<button class="vector-pinnable-header-toggle-button vector-pinnable-header-unpin-button" data-event-name="pinnable-header.pinnable-element.unpin">unpin</button>
      </div>
      </div>
      				</div>
      			</div>
      		</div>

      71 | 	test( 'renders', () => {
      72 | 		initializeHTML( simpleData );
    > 73 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      74 | 	} );
      75 |
      76 | 	test( 'updates pinnable header classes when toggle is pressed', () => {

      at Object.<anonymous> (tests/jest/pinnableElement.test.js:73:37)

FAIL tests/jest/skins.vector.js/dropdownMenus.test.js
  ● addPortletLinkHandler › Adds a span with icon class to menus

    expect(received).toMatchSnapshot()

    Snapshot name: `addPortletLinkHandler Adds a span with icon class to menus 1`

    - Snapshot  - 3
    + Received  + 3

    @@ -1,9 +1,9 @@
      "
    - 		<ul class=\"vector-menu\">
    + 		<ul class="vector-menu">
    - 			<li class=\"mw-list-item mw-list-item-js\" id=\"test-id\">
    + 			<li class="mw-list-item mw-list-item-js" id="test-id">
    - 				<a href=\"#test-href\">
    + 				<a href="#test-href">
      					<span>
      						test link content
      					</span>
      				</a>
      			</li>

      53 | 		const mockPortletItem = document.getElementById( 'test-id' );
      54 | 		addPortletLinkHandler( mockPortletItem, { id: 'test-id' } );
    > 55 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      56 | 	} );
      57 |
      58 | 	test( 'Does not add an icon when noicon class is present', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/dropdownMenus.test.js:55:37)

  ● addPortletLinkHandler › Does not add an icon when noicon class is present

    expect(received).toMatchSnapshot()

    Snapshot name: `addPortletLinkHandler Does not add an icon when noicon class is present 1`

    - Snapshot  - 3
    + Received  + 3

    @@ -1,9 +1,9 @@
      "
    - 		<ul class=\"vector-menu\">
    + 		<ul class="vector-menu">
    - 			<li class=\"mw-list-item mw-list-item-js\" id=\"test-id\">
    + 			<li class="mw-list-item mw-list-item-js" id="test-id">
    - 				<a href=\"#test-href\">
    + 				<a href="#test-href">
      					<span>
      						test link content
      					</span>
      				</a>
      			</li>

      72 | 		const mockPortletItem = document.getElementById( 'test-id' );
      73 | 		addPortletLinkHandler( mockPortletItem, { id: 'test-id' } );
    > 74 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      75 | 	} );
      76 |
      77 | 	test( 'JS portlet should be moved to more menu (#p-cactions) at narrow widths', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/dropdownMenus.test.js:74:37)

FAIL tests/jest/skins.vector.es6/main.test.js
  ● Test suite failed to run

    ● Invalid return value:
      `process()` or/and `processAsync()` method of code transformer found at 
      "/src/repo/node_modules/mustache-jest/index.js" 
      should return an object or a Promise resolving to an object. The object 
      must have `code` property with a string of processed code.
      This error may be caused by a breaking change in Jest 28:
      https://jestjs.io/docs/28.x/upgrading-to-jest28#transformer
      Code Transformation Documentation:
      https://jestjs.io/docs/code-transformation

      4 |  * TableOfContents Mustache templates
      5 |  */
    > 6 | const templateTocContents = require( /** @type {string} */ ( './templates/TableOfContents__list.mustache' ) );
        |                             ^
      7 | const templateTocLine = require( /** @type {string} */ ( './templates/TableOfContents__line.mustache' ) );
      8 | /**
      9 |  * TableOfContents Config object for filling mustache templates

      at ScriptTransformer._buildTransformResult (node_modules/@jest/transform/build/ScriptTransformer.js:442:15)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:554:17)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19)
      at Object.require (resources/skins.vector.js/tableOfContents.js:6:29)
      at Object.require (resources/skins.vector.js/setupIntersectionObservers.js:7:24)
      at Object.<anonymous> (tests/jest/skins.vector.es6/main.test.js:8:18)

FAIL tests/jest/stickyHeader.test.js
  ● Sticky header renders

    expect(received).toMatchSnapshot()

    Snapshot name: `Sticky header renders 1`

    - Snapshot  - 23
    + Received  + 23

    - "<div id=\"vector-sticky-header\" class=\"vector-sticky-header\">
    + "<div id="vector-sticky-header" class="vector-sticky-header">
    - 	<div class=\"vector-sticky-header-start\">
    + 	<div class="vector-sticky-header-start">
    - 		<div class=\"vector-sticky-header-icon-start vector-button-flush-left vector-button-flush-right\" aria-hidden=\"true\">
    + 		<div class="vector-sticky-header-icon-start vector-button-flush-left vector-button-flush-right" aria-hidden="true">
    - <button class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-sticky-header-search-toggle\" data-event-name=\"ui.vector-sticky-search-form.icon\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search\"></span>
    + <button class="cdx-button cdx-button--weight-quiet cdx-button--icon-only vector-sticky-header-search-toggle" data-event-name="ui.vector-sticky-search-form.icon" tabindex="-1"><span class="vector-icon mw-ui-icon-search mw-ui-icon-wikimedia-search"></span>

      <span>search</span>
      </button>
      		</div>
    - <div> </div>		<div class=\"vector-sticky-header-context-bar\">
    + <div> </div>		<div class="vector-sticky-header-context-bar">
    - 			<nav aria-label=\"\" class=\"vector-toc-landmark\">
    + 			<nav aria-label="" class="vector-toc-landmark">
    - <div id=\"vector-sticky-header-toc\" class=\"vector-dropdown mw-portlet mw-portlet-sticky-header-toc vector-sticky-header-toc\">
    + <div id="vector-sticky-header-toc" class="vector-dropdown mw-portlet mw-portlet-sticky-header-toc vector-sticky-header-toc">
    - 	<input type=\"checkbox\" id=\"vector-sticky-header-toc-checkbox\" role=\"button\" aria-haspopup=\"true\" data-event-name=\"ui.dropdown-vector-sticky-header-toc\" class=\"vector-dropdown-checkbox\" aria-label=\"\" tabindex=\"-1\">
    + 	<input type="checkbox" id="vector-sticky-header-toc-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-sticky-header-toc" class="vector-dropdown-checkbox" aria-label="" tabindex="-1">
    - 	<label id=\"vector-sticky-header-toc-label\" for=\"vector-sticky-header-toc-checkbox\" class=\"vector-dropdown-label cdx-button cdx-button--weight-quiet cdx-button--icon-only\" aria-hidden=\"true\" tabindex=\"-1\"><span class=\"vector-dropdown-label-text\"></span>
    + 	<label id="vector-sticky-header-toc-label" for="vector-sticky-header-toc-checkbox" class="vector-dropdown-label cdx-button cdx-button--weight-quiet cdx-button--icon-only" aria-hidden="true" tabindex="-1"><span class="vector-dropdown-label-text"></span>
      	</label>
    - 	<div class=\"vector-dropdown-content\">
    + 	<div class="vector-dropdown-content">

      	</div>
      </div>
      			</nav>
    - 			<div class=\"vector-sticky-header-context-bar-primary\" aria-hidden=\"true\"></div>
    + 			<div class="vector-sticky-header-context-bar-primary" aria-hidden="true"></div>
      		</div>
      	</div>
    - 	<div class=\"vector-sticky-header-end\" aria-hidden=\"true\">
    + 	<div class="vector-sticky-header-end" aria-hidden="true">
    - 		<div class=\"vector-sticky-header-icons\">
    + 		<div class="vector-sticky-header-icons">
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon\" id=\"ca-talk-sticky-header\" data-event-name=\"talk-sticky-header\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-speechBubbles mw-ui-icon-wikimedia-speechBubbles\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon" id="ca-talk-sticky-header" data-event-name="talk-sticky-header" tabindex="-1"><span class="vector-icon mw-ui-icon-speechBubbles mw-ui-icon-wikimedia-speechBubbles"></span>

      <span></span>
      </a>
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon\" id=\"ca-history-sticky-header\" data-event-name=\"history-sticky-header\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-history mw-ui-icon-wikimedia-history\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon" id="ca-history-sticky-header" data-event-name="history-sticky-header" tabindex="-1"><span class="vector-icon mw-ui-icon-history mw-ui-icon-wikimedia-history"></span>

      <span></span>
      </a>
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon mw-watchlink\" id=\"ca-watchstar-sticky-header\" data-event-name=\"watch-sticky-header\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-star mw-ui-icon-wikimedia-star\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon mw-watchlink" id="ca-watchstar-sticky-header" data-event-name="watch-sticky-header" tabindex="-1"><span class="vector-icon mw-ui-icon-star mw-ui-icon-wikimedia-star"></span>

      <span></span>
      </a>
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon\" id=\"ca-ve-edit-sticky-header\" data-event-name=\"ve-edit-sticky-header\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-edit mw-ui-icon-wikimedia-edit\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon" id="ca-ve-edit-sticky-header" data-event-name="ve-edit-sticky-header" tabindex="-1"><span class="vector-icon mw-ui-icon-edit mw-ui-icon-wikimedia-edit"></span>

      <span></span>
      </a>
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon\" id=\"ca-edit-sticky-header\" data-event-name=\"wikitext-edit-sticky-header\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-wikiText mw-ui-icon-wikimedia-wikiText\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon" id="ca-edit-sticky-header" data-event-name="wikitext-edit-sticky-header" tabindex="-1"><span class="vector-icon mw-ui-icon-wikiText mw-ui-icon-wikimedia-wikiText"></span>

      <span></span>
      </a>
    - <a href=\"#\" class=\"cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon\" id=\"ca-viewsource-sticky-header\" data-event-name=\"editLock\" tabindex=\"-1\"><span class=\"vector-icon mw-ui-icon-star mw-ui-icon-wikimedia-star\"></span>
    + <a href="#" class="cdx-button cdx-button--weight-quiet cdx-button--icon-only sticky-header-icon" id="ca-viewsource-sticky-header" data-event-name="editLock" tabindex="-1"><span class="vector-icon mw-ui-icon-star mw-ui-icon-wikimedia-star"></span>

      <span></span>
      </a>
      		</div>
    - 		<div class=\"vector-sticky-header-buttons\">
    + 		<div class="vector-sticky-header-buttons">
    - <button class=\"cdx-button cdx-button--weight-quiet mw-interlanguage-selector\" id=\"p-lang-btn-sticky-header\" data-event-name=\"ui.dropdown-p-lang-btn-sticky-header\" tabindex=\"-1\"><span>0 languages</span>
    + <button class="cdx-button cdx-button--weight-quiet mw-interlanguage-selector" id="p-lang-btn-sticky-header" data-event-name="ui.dropdown-p-lang-btn-sticky-header" tabindex="-1"><span>0 languages</span>
      </button>
      		</div>
    - 		<div class=\"vector-sticky-header-icon-end\">
    + 		<div class="vector-sticky-header-icon-end">
    - 			<div class=\"vector-user-links\">
    + 			<div class="vector-user-links">
      			</div>
      		</div>
      	</div>
      </div>
      "

      135 |
      136 | test( 'Sticky header renders', () => {
    > 137 | 	expect( document.body.innerHTML ).toMatchSnapshot();
          | 	                                  ^
      138 | } );
      139 |
      140 | describe( 'sticky header', () => {

      at Object.<anonymous> (tests/jest/stickyHeader.test.js:137:36)

FAIL tests/jest/skins.vector.js/tables.test.js
  ● tables › wraps table with div

    expect(received).toMatchSnapshot()

    Snapshot name: `tables wraps table with div 1`

    - Snapshot  - 2
    + Received  + 2

      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
    - 				<div class=\"noresize\"><table class=\"wikitable\">
    + 				<div class="noresize"><table class="wikitable">
      					<tbody><tr><th>table table table</th></tr></tbody>
      				</table></div>
      			</div>
      		"

      12 | 		tables();
      13 |
    > 14 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      15 | 	} );
      16 |
      17 | 	test( 'wraps multiple table with div', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:14:37)

  ● tables › wraps multiple table with div

    expect(received).toMatchSnapshot()

    Snapshot name: `tables wraps multiple table with div 1`

    - Snapshot  - 5
    + Received  + 5

      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
    - 				<div class=\"noresize\"><table class=\"wikitable\">
    + 				<div class="noresize"><table class="wikitable">
      					<tbody><tr><th>table table table</th></tr></tbody>
      				</table></div>
    - 				<div class=\"noresize\"><table class=\"wikitable\">
    + 				<div class="noresize"><table class="wikitable">
    - 				</table></div><div class=\"noresize\"><table class=\"wikitable\">
    + 				</table></div><div class="noresize"><table class="wikitable">
      					<tbody><tr><th>table table table</th></tr></tbody>
      				</table></div>
    - 				<div class=\"noresize\"><table class=\"wikitable\">
    + 				<div class="noresize"><table class="wikitable">
      					<tbody><tr><th>table table table</th></tr></tbody>
      				</table></div>
      			</div>
      		"

      32 | 		tables();
      33 |
    > 34 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      35 | 	} );
      36 |
      37 | 	test( 'doesnt wrap nested tables', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:34:37)

  ● tables › doesnt wrap nested tables

    expect(received).toMatchSnapshot()

    Snapshot name: `tables doesnt wrap nested tables 1`

    - Snapshot  - 3
    + Received  + 3

      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
    - 				<div class=\"noresize\"><table class=\"wikitable\">
    + 				<div class="noresize"><table class="wikitable">
      					<tbody>
      						<tr><th>table table table</th></tr>
    - 						<tr><td><table class=\"wikitable\"><tbody><tr><th>table table table</th></tr></tbody></table></td><td></td></tr>
    + 						<tr><td><table class="wikitable"><tbody><tr><th>table table table</th></tr></tbody></table></td><td></td></tr>
      					</tbody>
      				</table></div>
      			</div>
      		"

      48 | 		tables();
      49 |
    > 50 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      51 | 	} );
      52 |
      53 | 	test( 'doesnt wrap tables that are not wikitables', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:50:37)

  ● tables › doesnt wrap tables that are not wikitables

    expect(received).toMatchSnapshot()

    Snapshot name: `tables doesnt wrap tables that are not wikitables 1`

    - Snapshot  - 1
    + Received  + 1

    @@ -1,7 +1,7 @@
      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
      				<table>
      					<tbody>
      						<tr><th>table table table</th></tr>
      						<tr><td><table><tbody><tr><th>table table table</th></tr></tbody></table></td><td></td></tr>
      					</tbody>

      64 | 		tables();
      65 |
    > 66 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      67 | 	} );
      68 |
      69 | 	test( 'doesnt wrap tables that already have noresize', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:66:37)

  ● tables › doesnt wrap tables that already have noresize

    expect(received).toMatchSnapshot()

    Snapshot name: `tables doesnt wrap tables that already have noresize 1`

    - Snapshot  - 3
    + Received  + 3

    @@ -1,9 +1,9 @@
      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
    - 				<div class=\"noresize\">
    + 				<div class="noresize">
    - 					<table class=\"wikitable\">
    + 					<table class="wikitable">
      						<tbody>
      							<tr><th>table table table</th></tr>
      						</tbody>
      					</table>
      				</div>

      81 | 		tables();
      82 |
    > 83 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      84 | 	} );
      85 |
      86 | 	test( 'doesnt wrap tables that are already wrapped', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:83:37)

  ● tables › doesnt wrap tables that are already wrapped

    expect(received).toMatchSnapshot()

    Snapshot name: `tables doesnt wrap tables that are already wrapped 1`

    - Snapshot  - 2
    + Received  + 2

    @@ -1,9 +1,9 @@
      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
      				<div>
    - 					<table class=\"wikitable\">
    + 					<table class="wikitable">
      						<tbody>
      							<tr><th>table table table</th></tr>
      						</tbody>
      					</table>
      				</div>

       98 | 		tables();
       99 |
    > 100 | 		expect( document.body.innerHTML ).toMatchSnapshot();
          | 		                                  ^
      101 | 	} );
      102 |
      103 | 	test( 'doesnt wrap floated tables', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:100:37)

  ● tables › doesnt wrap floated tables

    expect(received).toMatchSnapshot()

    Snapshot name: `tables doesnt wrap floated tables 1`

    - Snapshot  - 2
    + Received  + 2

    @@ -1,8 +1,8 @@
      "
    - 			<div class=\"mw-parser-output\">
    + 			<div class="mw-parser-output">
    - 				<table class=\"wikitable\" style=\"float:right\">
    + 				<table class="wikitable" style="float:right">
      					<tbody>
      						<tr><th>table table table</th></tr>
      					</tbody>
      				</table>
      			<div>

      113 | 		tables();
      114 |
    > 115 | 		expect( document.body.innerHTML ).toMatchSnapshot();
          | 		                                  ^
      116 | 	} );
      117 | } );
      118 |

      at Object.<anonymous> (tests/jest/skins.vector.js/tables.test.js:115:37)

FAIL tests/jest/skins.vector.clientPreferences.test.js
  ● clientPreferences › render font size

    expect(received).toMatchSnapshot()

    Snapshot name: `clientPreferences render font size 1`

    - Snapshot  - 5
    + Received  + 5

      "<div>
    - 			<div class=\"vector-menu-heading\">Width</div>
    + 			<div class="vector-menu-heading">Width</div>
    - 			<div class=\"vector-menu-content\">
    + 			<div class="vector-menu-content">
    - 				<ul class=\"vector-menu-content-list\"></ul>
    + 				<ul class="vector-menu-content-list"></ul>
    - 			<span class=\"skin-client-pref-exclusion-notice\">msg:vector-feature-custom-font-size-exclusion-notice</span></div>
    + 			<span class="skin-client-pref-exclusion-notice">msg:vector-feature-custom-font-size-exclusion-notice</span></div>
    - 		<li><div class=\"\"><form><div class=\"cdx-radio\"><input name=\"skin-client-pref-vector-feature-custom-font-size-group\" id=\"skin-client-pref-vector-feature-custom-font-size-value-0\" type=\"radio\" value=\"0\" data-event-name=\"skin-client-pref-vector-feature-custom-font-size-value-0\" class=\"cdx-radio__input\"><span class=\"cdx-radio__icon\"></span><label for=\"skin-client-pref-vector-feature-custom-font-size-value-0\" class=\"cdx-radio__label\">vector-feature-custom-font-size-0-label</label></div><div class=\"cdx-radio\"><input name=\"skin-client-pref-vector-feature-custom-font-size-group\" id=\"skin-client-pref-vector-feature-custom-font-size-value-1\" type=\"radio\" value=\"1\" data-event-name=\"skin-client-pref-vector-feature-custom-font-size-value-1\" class=\"cdx-radio__input\"><span class=\"cdx-radio__icon\"></span><label for=\"skin-client-pref-vector-feature-custom-font-size-value-1\" class=\"cdx-radio__label\">vector-feature-custom-font-size-1-label</label></div><div class=\"cdx-radio\"><input name=\"skin-client-pref-vector-feature-custom-font-size-group\" id=\"skin-client-pref-vector-feature-custom-font-size-value-2\" type=\"radio\" value=\"2\" data-event-name=\"skin-client-pref-vector-feature-custom-font-size-value-2\" class=\"cdx-radio__input\"><span class=\"cdx-radio__icon\"></span><label for=\"skin-client-pref-vector-feature-custom-font-size-value-2\" class=\"cdx-radio__label\">vector-feature-custom-font-size-2-label</label></div></form></div></li></div>"
    + 		<li><div class=""><form><div class="cdx-radio"><input name="skin-client-pref-vector-feature-custom-font-size-group" id="skin-client-pref-vector-feature-custom-font-size-value-0" type="radio" value="0" data-event-name="skin-client-pref-vector-feature-custom-font-size-value-0" class="cdx-radio__input"><span class="cdx-radio__icon"></span><label for="skin-client-pref-vector-feature-custom-font-size-value-0" class="cdx-radio__label">vector-feature-custom-font-size-0-label</label></div><div class="cdx-radio"><input name="skin-client-pref-vector-feature-custom-font-size-group" id="skin-client-pref-vector-feature-custom-font-size-value-1" type="radio" value="1" data-event-name="skin-client-pref-vector-feature-custom-font-size-value-1" class="cdx-radio__input"><span class="cdx-radio__icon"></span><label for="skin-client-pref-vector-feature-custom-font-size-value-1" class="cdx-radio__label">vector-feature-custom-font-size-1-label</label></div><div class="cdx-radio"><input name="skin-client-pref-vector-feature-custom-font-size-group" id="skin-client-pref-vector-feature-custom-font-size-value-2" type="radio" value="2" data-event-name="skin-client-pref-vector-feature-custom-font-size-value-2" class="cdx-radio__input"><span class="cdx-radio__icon"></span><label for="skin-client-pref-vector-feature-custom-font-size-value-2" class="cdx-radio__label">vector-feature-custom-font-size-2-label</label></div></form></div></li></div>"

      45 | 			}
      46 | 		} ).then( () => {
    > 47 | 			expect( cp.innerHTML ).toMatchSnapshot();
         | 			                       ^
      48 | 		} );
      49 | 	} );
      50 |

      at tests/jest/skins.vector.clientPreferences.test.js:47:27

  ● clientPreferences › doesnt render exclusion notice if the msg key doesnt exist

    expect(received).toMatchSnapshot()

    Snapshot name: `clientPreferences doesnt render exclusion notice if the msg key doesnt exist 1`

    - Snapshot  - 4
    + Received  + 4

      "<div>
    - 			<div class=\"vector-menu-heading\">Width</div>
    + 			<div class="vector-menu-heading">Width</div>
    - 			<div class=\"vector-menu-content\">
    + 			<div class="vector-menu-content">
    - 				<ul class=\"vector-menu-content-list\"></ul>
    + 				<ul class="vector-menu-content-list"></ul>
      			</div>
    - 		<li><div class=\"\"><form><div class=\"cdx-radio\"><input name=\"skin-client-pref-vector-feature-limited-width-group\" id=\"skin-client-pref-vector-feature-limited-width-value-1\" type=\"radio\" value=\"1\" data-event-name=\"skin-client-pref-vector-feature-limited-width-value-1\" class=\"cdx-radio__input\"><span class=\"cdx-radio__icon\"></span><label for=\"skin-client-pref-vector-feature-limited-width-value-1\" class=\"cdx-radio__label\">vector-feature-limited-width-1-label</label></div><div class=\"cdx-radio\"><input name=\"skin-client-pref-vector-feature-limited-width-group\" id=\"skin-client-pref-vector-feature-limited-width-value-0\" type=\"radio\" value=\"0\" data-event-name=\"skin-client-pref-vector-feature-limited-width-value-0\" class=\"cdx-radio__input\"><span class=\"cdx-radio__icon\"></span><label for=\"skin-client-pref-vector-feature-limited-width-value-0\" class=\"cdx-radio__label\">vector-feature-limited-width-0-label</label></div></form></div></li></div>"
    + 		<li><div class=""><form><div class="cdx-radio"><input name="skin-client-pref-vector-feature-limited-width-group" id="skin-client-pref-vector-feature-limited-width-value-1" type="radio" value="1" data-event-name="skin-client-pref-vector-feature-limited-width-value-1" class="cdx-radio__input"><span class="cdx-radio__icon"></span><label for="skin-client-pref-vector-feature-limited-width-value-1" class="cdx-radio__label">vector-feature-limited-width-1-label</label></div><div class="cdx-radio"><input name="skin-client-pref-vector-feature-limited-width-group" id="skin-client-pref-vector-feature-limited-width-value-0" type="radio" value="0" data-event-name="skin-client-pref-vector-feature-limited-width-value-0" class="cdx-radio__input"><span class="cdx-radio__icon"></span><label for="skin-client-pref-vector-feature-limited-width-value-0" class="cdx-radio__label">vector-feature-limited-width-0-label</label></div></form></div></li></div>"

      61 | 			}
      62 | 		} ).then( () => {
    > 63 | 			expect( cp.innerHTML ).toMatchSnapshot();
         | 			                       ^
      64 | 		} );
      65 | 	} );
      66 |

      at tests/jest/skins.vector.clientPreferences.test.js:63:27

  ● clientPreferences › render toggle

    expect(received).toMatchSnapshot()

    Snapshot name: `clientPreferences render toggle 1`

    - Snapshot  - 5
    + Received  + 5

      "<div>
    - 			<div class=\"vector-menu-heading\">Width</div>
    + 			<div class="vector-menu-heading">Width</div>
    - 			<div class=\"vector-menu-content\">
    + 			<div class="vector-menu-content">
    - 				<ul class=\"vector-menu-content-list\"></ul>
    + 				<ul class="vector-menu-content-list"></ul>
    - 			<span class=\"skin-client-pref-exclusion-notice\">msg:expandAll-exclusion-notice</span></div>
    + 			<span class="skin-client-pref-exclusion-notice">msg:expandAll-exclusion-notice</span></div>
    - 		<li><div class=\"\"><form><span class=\"cdx-toggle-switch\"><input name=\"skin-client-pref-expandAll-group\" id=\"skin-client-pref-expandAll-value-1\" type=\"checkbox\" data-event-name=\"skin-client-pref-expandAll-value-1\" class=\"cdx-toggle-switch__input\"><span class=\"cdx-toggle-switch__switch\"><span class=\"cdx-toggle-switch__switch__grip\"></span></span><label class=\"cdx-toggle-switch__label\">msg:expandAll-name</label></span></form></div></li></div>"
    + 		<li><div class=""><form><span class="cdx-toggle-switch"><input name="skin-client-pref-expandAll-group" id="skin-client-pref-expandAll-value-1" type="checkbox" data-event-name="skin-client-pref-expandAll-value-1" class="cdx-toggle-switch__input"><span class="cdx-toggle-switch__switch"><span class="cdx-toggle-switch__switch__grip"></span></span><label class="cdx-toggle-switch__label">msg:expandAll-name</label></span></form></div></li></div>"

      74 | 			}
      75 | 		} ).then( () => {
    > 76 | 			expect( cp.innerHTML ).toMatchSnapshot();
         | 			                       ^
      77 | 		} );
      78 | 	} );
      79 | } );

      at tests/jest/skins.vector.clientPreferences.test.js:76:27

FAIL tests/jest/skins.vector.js/menuTabs.test.js
  ● menuTabs › adds vector-tab-noicon class to li element when part of tabs

    expect(received).toMatchSnapshot()

    Snapshot name: `menuTabs adds vector-tab-noicon class to li element when part of tabs 1`

    - Snapshot  - 5
    + Received  + 5

    @@ -1,11 +1,11 @@
      "
    - 				<div id=\"p-views\" class=\"vector-menu mw-portlet mw-portlet-views vector-menu-tabs\">
    + 				<div id="p-views" class="vector-menu mw-portlet mw-portlet-views vector-menu-tabs">
    - 					<div class=\"vector-menu-content\">
    + 					<div class="vector-menu-content">
    - 						<ul class=\"vector-menu-content-list\">
    + 						<ul class="vector-menu-content-list">
    - 							<li class=\"mw-list-item mw-list-item-js vector-tab-noicon\" id=\"test-id\">
    + 							<li class="mw-list-item mw-list-item-js vector-tab-noicon" id="test-id">
    - 								<a href=\"#test-href\">
    + 								<a href="#test-href">
      									<span>
      										test link content
      									</span>
      								</a>
      							</li>

      44 | 		mw.hook( 'util' ).fire( menuItem, { id: 'test-id' } );
      45 |
    > 46 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      47 | 	} );
      48 |
      49 | 	test( 'does not add vector-tab-noicon class to li element when not part of tabs', () => {

      at Object.<anonymous> (tests/jest/skins.vector.js/menuTabs.test.js:46:37)

  ● menuTabs › does not add vector-tab-noicon class to li element when not part of tabs

    expect(received).toMatchSnapshot()

    Snapshot name: `menuTabs does not add vector-tab-noicon class to li element when not part of tabs 1`

    - Snapshot  - 5
    + Received  + 5

    @@ -1,11 +1,11 @@
      "
    - 			<div id=\"p-variants\" class=\"vector-menu mw-portlet mw-portlet-variants\">
    + 			<div id="p-variants" class="vector-menu mw-portlet mw-portlet-variants">
    - 				<div class=\"vector-menu-content\">
    + 				<div class="vector-menu-content">
    - 					<ul class=\"vector-menu-content-list\">
    + 					<ul class="vector-menu-content-list">
    - 						<li class=\"mw-list-item mw-list-item-js\" id=\"test-id\">
    + 						<li class="mw-list-item mw-list-item-js" id="test-id">
    - 							<a href=\"#test-href\">
    + 							<a href="#test-href">
      								<span>
      									test link content
      								</span>
      							</a>
      						</li>

      67 | 		mw.hook( 'util' ).fire( menuItem, { id: 'test-id' } );
      68 |
    > 69 | 		expect( document.body.innerHTML ).toMatchSnapshot();
         | 		                                  ^
      70 | 	} );
      71 | } );
      72 |

      at Object.<anonymous> (tests/jest/skins.vector.js/menuTabs.test.js:69:37)

FAIL tests/jest/userLinks.test.js
  ● UserLinks renders

    expect(received).toMatchSnapshot()

    Snapshot name: `UserLinks renders 1`

    - Snapshot  - 41
    + Received  + 41

    @@ -1,83 +1,83 @@
    - "<nav class=\"vector-user-links\" aria-label=\"\">
    + "<nav class="vector-user-links" aria-label="">
    - 	<div class=\"vector-user-links-main\">
    + 	<div class="vector-user-links-main">
    - <div id=\"p-personal-preferences\" class=\"vector-menu\">
    + <div id="p-personal-preferences" class="vector-menu">
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
    - 		<li id=\"ca-uls\" class=\"user-links-collapsible-item mw-list-item active\"><a href=\"#\" class=\"uls-trigger cdx-button cdx-button--weight-quiet\"><span class=\"vector-icon mw-ui-icon-wikimedia-language\"></span> <span>English</span></a></li>
    + 		<li id="ca-uls" class="user-links-collapsible-item mw-list-item active"><a href="#" class="uls-trigger cdx-button cdx-button--weight-quiet"><span class="vector-icon mw-ui-icon-wikimedia-language"></span> <span>English</span></a></li>
      	</ul>
      	
      </div>
      </div>
    - <div id=\"p-personal-user-page\" class=\"vector-menu\">
    + <div id="p-personal-user-page" class="vector-menu">
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
    - 		<li id=\"pt-userpage-2\" class=\"user-links-collapsible-item mw-list-item\"><a href=\"/wiki/User:Admin\" class=\"cdx-button cdx-button--weight-quiet\" title=\"Your user page [⌃⌥.]\" accesskey=\".\"><span>Admin</span></a></li>
    + 		<li id="pt-userpage-2" class="user-links-collapsible-item mw-list-item"><a href="/wiki/User:Admin" class="cdx-button cdx-button--weight-quiet" title="Your user page [⌃⌥.]" accesskey="."><span>Admin</span></a></li>
      	</ul>
      	
      </div>
      </div>
    - 	<nav class=\"vector-appearance-landmark\" aria-label=\"\">
    + 	<nav class="vector-appearance-landmark" aria-label="">
      	</nav>
    - <div id=\"p-personal-notifications\" class=\"vector-menu\">
    + <div id="p-personal-notifications" class="vector-menu">
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
    - 		<li id=\"pt-notifications-alert\" class=\"mw-list-item\"><a href=\"/wiki/Special:Notifications\" class=\"mw-echo-notifications-badge mw-echo-notification-badge-nojs oo-ui-icon-bell mw-echo-notifications-badge-all-read\" data-counter-num=\"0\" data-counter-text=\"0\" title=\"Your alerts\"><span>Alerts (0)</span></a></li>
    + 		<li id="pt-notifications-alert" class="mw-list-item"><a href="/wiki/Special:Notifications" class="mw-echo-notifications-badge mw-echo-notification-badge-nojs oo-ui-icon-bell mw-echo-notifications-badge-all-read" data-counter-num="0" data-counter-text="0" title="Your alerts"><span>Alerts (0)</span></a></li>
    - 		<li id=\"pt-notifications-notice\" class=\"mw-list-item\"><a href=\"/wiki/Special:Notifications\" class=\"mw-echo-notifications-badge mw-echo-notification-badge-nojs oo-ui-icon-tray mw-echo-notifications-badge-all-read\" data-counter-num=\"0\" data-counter-text=\"0\" title=\"Your notices\"><span>Notices (0)</span></a></li>
    + 		<li id="pt-notifications-notice" class="mw-list-item"><a href="/wiki/Special:Notifications" class="mw-echo-notifications-badge mw-echo-notification-badge-nojs oo-ui-icon-tray mw-echo-notifications-badge-all-read" data-counter-num="0" data-counter-text="0" title="Your notices"><span>Notices (0)</span></a></li>
      	</ul>
      	
      </div>
      </div>
    - <div id=\"p-personal-more\" class=\"vector-menu mw-portlet mw-portlet-vector-user-menu-overflow vector-user-menu-overflow\">
    + <div id="p-personal-more" class="vector-menu mw-portlet mw-portlet-vector-user-menu-overflow vector-user-menu-overflow">
    - 	<div class=\"vector-menu-heading\">
    + 	<div class="vector-menu-heading">
      		Toggle sidebar
      	</div>
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
      		
    - 			<li id=\"pt-watchlist-2\" class=\"user-links-collapsible-item mw-list-item\"><a href=\"/wiki/Special:Watchlist\" class=\"cdx-button cdx-button--weight-quiet vector-icon cdx-button--icon-only mw-ui-icon-watchlist mw-ui-icon-wikimedia-watchlist\" title=\"A list of pages you are monitoring for changes [⌃⌥l]\" accesskey=\"l\"><span>Watchlist</span></a></li>
    + 			<li id="pt-watchlist-2" class="user-links-collapsible-item mw-list-item"><a href="/wiki/Special:Watchlist" class="cdx-button cdx-button--weight-quiet vector-icon cdx-button--icon-only mw-ui-icon-watchlist mw-ui-icon-wikimedia-watchlist" title="A list of pages you are monitoring for changes [⌃⌥l]" accesskey="l"><span>Watchlist</span></a></li>
      		
      	</ul>
      	
      </div>
      </div>
      	</div>
    - <div id=\"vector-user-links-dropdown\" class=\"vector-dropdown vector-user-menu vector-user-menu-logged-in\">
    + <div id="vector-user-links-dropdown" class="vector-dropdown vector-user-menu vector-user-menu-logged-in">
    - 	<input type=\"checkbox\" id=\"vector-user-links-dropdown-checkbox\" role=\"button\" aria-haspopup=\"true\" data-event-name=\"ui.dropdown-vector-user-links-dropdown\" class=\"vector-dropdown-checkbox\" aria-label=\"Personal tools\">
    + 	<input type="checkbox" id="vector-user-links-dropdown-checkbox" role="button" aria-haspopup="true" data-event-name="ui.dropdown-vector-user-links-dropdown" class="vector-dropdown-checkbox" aria-label="Personal tools">
    - 	<label id=\"vector-user-links-dropdown-label\" for=\"vector-user-links-dropdown-checkbox\" class=\"vector-dropdown-label\" aria-hidden=\"true\"><span class=\"vector-dropdown-label-text\">Personal tools</span>
    + 	<label id="vector-user-links-dropdown-label" for="vector-user-links-dropdown-checkbox" class="vector-dropdown-label" aria-hidden="true"><span class="vector-dropdown-label-text">Personal tools</span>
      	</label>
    - 	<div class=\"vector-dropdown-content\">
    + 	<div class="vector-dropdown-content">

    - <div id=\"p-personal\" class=\"vector-menu mw-portlet mw-portlet-personal\">
    + <div id="p-personal" class="vector-menu mw-portlet mw-portlet-personal">
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
      		
    - 			<li id=\"pt-userpage\" class=\"user-links-collapsible-item mw-list-item\"><a href=\"/wiki/User:Admin\" title=\"Your user page [.]\" accesskey=\".\"><span class=\"vector-icon mw-ui-icon-userAvatar mw-ui-icon-wikimedia-userAvatar\"></span> <span>Admin</span></a></li>
    + 			<li id="pt-userpage" class="user-links-collapsible-item mw-list-item"><a href="/wiki/User:Admin" title="Your user page [.]" accesskey="."><span class="vector-icon mw-ui-icon-userAvatar mw-ui-icon-wikimedia-userAvatar"></span> <span>Admin</span></a></li>
    - 			<li id=\"pt-mytalk\" class=\"mw-list-item\"><a href=\"/wiki/User_talk:Admin\" title=\"Your talk page [n]\" accesskey=\"n\"><span class=\"vector-icon mw-ui-icon-userTalk mw-ui-icon-wikimedia-userTalk\"></span> <span>Talk</span></a></li>
    + 			<li id="pt-mytalk" class="mw-list-item"><a href="/wiki/User_talk:Admin" title="Your talk page [n]" accesskey="n"><span class="vector-icon mw-ui-icon-userTalk mw-ui-icon-wikimedia-userTalk"></span> <span>Talk</span></a></li>
    - 			<li id=\"pt-sandbox\" class=\"new mw-list-item\"><a href=\"/w/index.php?title=User:Admin/sandbox&amp;action=edit&amp;redlink=1\" title=\"Your sandbox (page does not exist)\"><span class=\"vector-icon mw-ui-icon-sandbox mw-ui-icon-wikimedia-sandbox\"></span> <span>Sandbox</span></a></li>
    + 			<li id="pt-sandbox" class="new mw-list-item"><a href="/w/index.php?title=User:Admin/sandbox&amp;action=edit&amp;redlink=1" title="Your sandbox (page does not exist)"><span class="vector-icon mw-ui-icon-sandbox mw-ui-icon-wikimedia-sandbox"></span> <span>Sandbox</span></a></li>
    - 			<li id=\"pt-preferences\" class=\"mw-list-item\"><a href=\"/wiki/Special:Preferences\" title=\"Your preferences\"><span class=\"vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance\"></span> <span>Preferences</span></a></li>
    + 			<li id="pt-preferences" class="mw-list-item"><a href="/wiki/Special:Preferences" title="Your preferences"><span class="vector-icon mw-ui-icon-appearance mw-ui-icon-wikimedia-appearance"></span> <span>Preferences</span></a></li>
    - 			<li id=\"pt-betafeatures\" class=\"mw-list-item\"><a href=\"/wiki/Special:Preferences#mw-prefsection-betafeatures\" title=\"Beta features\"><span class=\"vector-icon mw-ui-icon-labFlask mw-ui-icon-wikimedia-labFlask\"></span> <span>Beta</span></a></li>
    + 			<li id="pt-betafeatures" class="mw-list-item"><a href="/wiki/Special:Preferences#mw-prefsection-betafeatures" title="Beta features"><span class="vector-icon mw-ui-icon-labFlask mw-ui-icon-wikimedia-labFlask"></span> <span>Beta</span></a></li>
    - 			<li id=\"pt-watchlist\" class=\"user-links-collapsible-item mw-list-item\"><a href=\"/wiki/Special:Watchlist\" title=\"A list of pages you are monitoring for changes [l]\" accesskey=\"l\"><span class=\"vector-icon mw-ui-icon-watchlist mw-ui-icon-wikimedia-watchlist\"></span> <span>Watchlist</span></a></li>
    + 			<li id="pt-watchlist" class="user-links-collapsible-item mw-list-item"><a href="/wiki/Special:Watchlist" title="A list of pages you are monitoring for changes [l]" accesskey="l"><span class="vector-icon mw-ui-icon-watchlist mw-ui-icon-wikimedia-watchlist"></span> <span>Watchlist</span></a></li>
    - 			<li id=\"pt-uploads\" class=\"mw-list-item\"><a href=\"/w/index.php?title=Special:ListFiles/Admin&amp;ilshowall=1\" title=\"List of files you have uploaded\"><span class=\"vector-icon mw-ui-icon-imageGallery mw-ui-icon-wikimedia-imageGallery\"></span> <span>Uploads</span></a></li>
    + 			<li id="pt-uploads" class="mw-list-item"><a href="/w/index.php?title=Special:ListFiles/Admin&amp;ilshowall=1" title="List of files you have uploaded"><span class="vector-icon mw-ui-icon-imageGallery mw-ui-icon-wikimedia-imageGallery"></span> <span>Uploads</span></a></li>
    - 			<li id=\"pt-mycontris\" class=\"mw-list-item\"><a href=\"/wiki/Special:Contributions/Admin\" title=\"A list of your contributions [y]\" accesskey=\"y\"><span class=\"vector-icon mw-ui-icon-userContributions mw-ui-icon-wikimedia-userContributions\"></span> <span>Contributions</span></a></li>
    + 			<li id="pt-mycontris" class="mw-list-item"><a href="/wiki/Special:Contributions/Admin" title="A list of your contributions [y]" accesskey="y"><span class="vector-icon mw-ui-icon-userContributions mw-ui-icon-wikimedia-userContributions"></span> <span>Contributions</span></a></li>
    - 			<li id=\"pt-custom\" class=\"mw-list-item mw-list-item-js\">Gadget added item</li>
    + 			<li id="pt-custom" class="mw-list-item mw-list-item-js">Gadget added item</li>
      		
      	</ul>
      	
      </div>
      </div>
    - <div id=\"p-user-menu-logout\" class=\"vector-menu mw-portlet mw-portlet-user-menu-logout\">
    + <div id="p-user-menu-logout" class="vector-menu mw-portlet mw-portlet-user-menu-logout">
    - <div class=\"vector-menu-content\">
    + <div class="vector-menu-content">
      	
    - 	<ul class=\"vector-menu-content-list\">
    + 	<ul class="vector-menu-content-list">
      		
    - 			<li id=\"ca-logout\" class=\"mw-list-item\"><a data-mw=\"interface\" href=\"/w/index.php?title=Special:UserLogout&amp;returnto=Main+Page\" title=\"Log out\"><span class=\"vector-icon mw-ui-icon-logOut mw-ui-icon-wikimedia-logOut\"></span> <span>Log out</span></a></li>
    + 			<li id="ca-logout" class="mw-list-item"><a data-mw="interface" href="/w/index.php?title=Special:UserLogout&amp;returnto=Main+Page" title="Log out"><span class="vector-icon mw-ui-icon-logOut mw-ui-icon-wikimedia-logOut"></span> <span>Log out</span></a></li>
      		
      	</ul>
      	
      </div>
      </div>

       6 |
       7 | test( 'UserLinks renders', () => {
    >  8 | 	expect( document.body.innerHTML ).toMatchSnapshot();
         | 	                                  ^
       9 | } );
      10 |

      at Object.<anonymous> (tests/jest/userLinks.test.js:8:36)


Snapshot Summary
 › 17 snapshots failed from 7 test suites. Inspect your code changes or run `npm run test:unit -- -u` to update them.

Test Suites: 9 failed, 12 passed, 21 total
Tests:       17 failed, 74 passed, 91 total
Snapshots:   17 failed, 2 passed, 19 total
Time:        9.411 s
--- stdout ---

> test
> npm -s run lint && tsc && npm run test:unit

Checked 1 message directory.

> test:unit
> jest --silent

--------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------
File                            | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                                                     
--------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------
All files                       |   36.35 |    28.69 |   32.49 |   36.46 |                                                                                       
 skins.vector.clientPreferences |   60.51 |    43.66 |   58.82 |    60.2 |                                                                                       
  clientPreferences.js          |   60.51 |    43.66 |   58.82 |    60.2 | 60-88,143-160,179,193-228,257,294,300,321,326-327,343,350-353,367,397-403,420,440-459 
 skins.vector.js                |   32.32 |    27.75 |   28.11 |   32.58 |                                                                                       
  AB.js                         |     100 |    93.33 |     100 |     100 | 198                                                                                   
  deferUntilFrame.js            |     100 |      100 |     100 |     100 |                                                                                       
  disableNightModeIfGadget.js   |      70 |       70 |      60 |      70 | 59-77,89                                                                              
  dropdownMenus.js              |   90.38 |       80 |   83.33 |   90.38 | 26,89,99,132,161                                                                      
  echo.js                       |       0 |        0 |       0 |       0 | 6-36                                                                                  
  features.js                   |   71.42 |    55.55 |      50 |   71.42 | 19-20,26-27,85-103                                                                    
  languageButton.js             |       0 |        0 |       0 |       0 | 9-52                                                                                  
  menuTabs.js                   |     100 |      100 |     100 |     100 |                                                                                       
  pinnableElement.js            |   78.94 |    76.31 |      75 |   79.78 | 25,29-30,34-35,82-86,134,184,208,231,278-294                                          
  popupNotification.js          |   91.66 |    64.28 |      75 |   91.66 | 74,77                                                                                 
  portlets.js                   |   85.52 |    58.06 |      60 |   85.52 | 20,35-37,60,113,126-132                                                               
  scrollObserver.js             |       0 |        0 |       0 |       0 | 2-52                                                                                  
  searchLoader.js               |       0 |        0 |       0 |       0 | 12-123                                                                                
  searchToggle.js               |   13.33 |        0 |       0 |   13.33 | 18-94,110-125                                                                         
  sectionObserver.js            |       0 |        0 |       0 |       0 | 46-187                                                                                
  setupIntersectionObservers.js |       0 |        0 |       0 |       0 | 3-369                                                                                 
  skin.js                       |       0 |        0 |       0 |       0 | 1-160                                                                                 
  stickyHeader.js               |    16.9 |      3.5 |   19.44 |   16.99 | 27-66,94-111,128-140,169-390,427-429,449-586                                          
  stickyHeaderAB.js             |       0 |        0 |       0 |       0 |                                                                                       
  tableOfContents.js            |       0 |        0 |       0 |       0 | 6-633                                                                                 
  tables.js                     |   86.36 |    81.25 |     100 |   86.36 | 4,28,34                                                                               
  userPreferences.js            |   33.33 |        0 |       0 |   33.33 | 8-10                                                                                  
  watchstar.js                  |      20 |        0 |       0 |      20 | 7-24,29-36                                                                            
 skins.vector.legacy.js         |   22.22 |    12.16 |    6.66 |   22.22 |                                                                                       
  collapsibleTabs.js            |       0 |        0 |       0 |       0 | 13-236                                                                                
  portlets.js                   |   83.33 |    64.28 |   66.66 |   83.33 | 18,35-37,47,85-88                                                                     
  skin-legacy.js                |       0 |      100 |       0 |       0 | 4-19                                                                                  
  vector.js                     |       0 |        0 |       0 |       0 | 7-118                                                                                 
 skins.vector.search            |   58.33 |    46.51 |   55.55 |   58.33 |                                                                                       
  App.vue                       |    42.3 |    16.66 |   35.29 |    42.3 | 121-180,185-187,242-246                                                               
  fetch.js                      |     100 |       75 |      75 |     100 | 28                                                                                    
  instrumentation.js            |      80 |      100 |      60 |      80 | 11-25                                                                                 
  restSearchClient.js           |     100 |       75 |     100 |     100 | 26-48                                                                                 
  skins.vector.search.js        |       0 |        0 |       0 |       0 | 4-51                                                                                  
  types.js                      |       0 |        0 |       0 |       0 |                                                                                       
  urlGenerator.js               |     100 |      100 |     100 |     100 |                                                                                       
--------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------

--- end ---
$ node_modules/.bin/jest -u
--- stderr ---
PASS tests/jest/pinnableElement.test.js
 › 1 snapshot updated.
PASS tests/jest/skins.vector.js/dropdownMenus.test.js
 › 2 snapshots updated.
PASS tests/jest/stickyHeader.test.js
 › 1 snapshot updated.
PASS tests/jest/userLinks.test.js
 › 1 snapshot updated.
PASS tests/jest/skins.vector.clientPreferences.test.js
 › 3 snapshots updated.
PASS tests/jest/skins.vector.js/tables.test.js
 › 7 snapshots updated.
PASS tests/jest/skins.vector.js/menuTabs.test.js
 › 2 snapshots updated.
PASS tests/jest/AB.test.js
PASS tests/jest/App.test.js
  ● Console

    console.warn
      [Vue warn]: Failed to resolve component: cdx-typeahead-search
      If this is a native custom element, make sure to exclude it from component resolution via compilerOptions.isCustomElement. 
        at <App id="searchform" searchAccessKey="f" searchTitle="search"  ... > 
        at <VTUROOT>

      200 | 				restClient.loadMore(
      201 | 					this.currentSearchQuery,
    > 202 | 					this.suggestions.length,
          | 					                        ^
      203 | 					10,
      204 | 					this.showDescription
      205 | 				),

      at warn$1 (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:50:13)
      at resolveAsset (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:1175:7)
      at resolveComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:1137:10)
      at Proxy.render (resources/skins.vector.search/App.vue:202:66)
      at renderComponentRoot (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:886:16)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5086:46)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:181:19)
      at instance.update (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5217:16)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5227:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4995:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4949:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4429:11)
      at ReactiveEffect.componentUpdateFn [as fn] (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5093:11)
      at ReactiveEffect.run (node_modules/@vue/reactivity/dist/reactivity.cjs.js:181:19)
      at instance.update (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5217:16)
      at setupRenderEffect (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5227:5)
      at mountComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4995:7)
      at processComponent (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4949:9)
      at patch (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:4429:11)
      at render (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:5743:7)
      at mount (node_modules/@vue/runtime-core/dist/runtime-core.cjs.js:3058:13)
      at Object.app.mount (node_modules/@vue/runtime-dom/dist/runtime-dom.cjs.js:1470:19)
      at mount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8415:18)
      at Object.shallowMount (node_modules/@vue/test-utils/dist/vue-test-utils.cjs.js:8434:12)
      at mount (tests/jest/App.test.js:15:69)
      at Object.<anonymous> (tests/jest/App.test.js:33:19)

PASS tests/jest/popupNotification.test.js
PASS tests/jest/skins.vector.js/portlets.test.js
PASS tests/jest/skins.vector.legacy.js/portlets.test.js
PASS tests/jest/restSearchClient.test.js
PASS tests/jest/skins.vector.js/disableNightModeIfGadget.test.js
PASS tests/jest/instrumentation.test.js
PASS tests/jest/deferUntilFrame.test.js
PASS tests/jest/fetch.test.js
PASS tests/jest/urlGenerator.test.js
PASS tests/jest/skins.vector.es6/features.test.js
FAIL tests/jest/skins.vector.es6/main.test.js
  ● Test suite failed to run

    ● Invalid return value:
      `process()` or/and `processAsync()` method of code transformer found at 
      "/src/repo/node_modules/mustache-jest/index.js" 
      should return an object or a Promise resolving to an object. The object 
      must have `code` property with a string of processed code.
      This error may be caused by a breaking change in Jest 28:
      https://jestjs.io/docs/28.x/upgrading-to-jest28#transformer
      Code Transformation Documentation:
      https://jestjs.io/docs/code-transformation

      4 |  * TableOfContents Mustache templates
      5 |  */
    > 6 | const templateTocContents = require( /** @type {string} */ ( './templates/TableOfContents__list.mustache' ) );
        |                             ^
      7 | const templateTocLine = require( /** @type {string} */ ( './templates/TableOfContents__line.mustache' ) );
      8 | /**
      9 |  * TableOfContents Config object for filling mustache templates

      at ScriptTransformer._buildTransformResult (node_modules/@jest/transform/build/ScriptTransformer.js:442:15)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:554:17)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19)
      at Object.require (resources/skins.vector.js/tableOfContents.js:6:29)
      at Object.require (resources/skins.vector.js/setupIntersectionObservers.js:7:24)
      at Object.<anonymous> (tests/jest/skins.vector.es6/main.test.js:8:18)

FAIL tests/jest/tableOfContents.test.js
  ● Test suite failed to run

    ● Invalid return value:
      `process()` or/and `processAsync()` method of code transformer found at 
      "/src/repo/node_modules/mustache-jest/index.js" 
      should return an object or a Promise resolving to an object. The object 
      must have `code` property with a string of processed code.
      This error may be caused by a breaking change in Jest 28:
      https://jestjs.io/docs/28.x/upgrading-to-jest28#transformer
      Code Transformation Documentation:
      https://jestjs.io/docs/code-transformation

      4 |  * TableOfContents Mustache templates
      5 |  */
    > 6 | const templateTocContents = require( /** @type {string} */ ( './templates/TableOfContents__list.mustache' ) );
        |                             ^
      7 | const templateTocLine = require( /** @type {string} */ ( './templates/TableOfContents__line.mustache' ) );
      8 | /**
      9 |  * TableOfContents Config object for filling mustache templates

      at ScriptTransformer._buildTransformResult (node_modules/@jest/transform/build/ScriptTransformer.js:442:15)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:554:17)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19)
      at Object.require (resources/skins.vector.js/tableOfContents.js:6:29)
      at Object.<anonymous> (tests/jest/tableOfContents.test.js:9:29)

Jest: "global" coverage threshold for statements (48%) not met: 36.35%
Jest: "global" coverage threshold for branches (35%) not met: 28.69%
Jest: "global" coverage threshold for lines (48%) not met: 36.46%
Jest: "global" coverage threshold for functions (45%) not met: 32.49%
Summary of all failing tests
FAIL tests/jest/skins.vector.es6/main.test.js
  ● Test suite failed to run

    ● Invalid return value:
      `process()` or/and `processAsync()` method of code transformer found at 
      "/src/repo/node_modules/mustache-jest/index.js" 
      should return an object or a Promise resolving to an object. The object 
      must have `code` property with a string of processed code.
      This error may be caused by a breaking change in Jest 28:
      https://jestjs.io/docs/28.x/upgrading-to-jest28#transformer
      Code Transformation Documentation:
      https://jestjs.io/docs/code-transformation

      4 |  * TableOfContents Mustache templates
      5 |  */
    > 6 | const templateTocContents = require( /** @type {string} */ ( './templates/TableOfContents__list.mustache' ) );
        |                             ^
      7 | const templateTocLine = require( /** @type {string} */ ( './templates/TableOfContents__line.mustache' ) );
      8 | /**
      9 |  * TableOfContents Config object for filling mustache templates

      at ScriptTransformer._buildTransformResult (node_modules/@jest/transform/build/ScriptTransformer.js:442:15)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:554:17)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19)
      at Object.require (resources/skins.vector.js/tableOfContents.js:6:29)
      at Object.require (resources/skins.vector.js/setupIntersectionObservers.js:7:24)
      at Object.<anonymous> (tests/jest/skins.vector.es6/main.test.js:8:18)

FAIL tests/jest/tableOfContents.test.js
  ● Test suite failed to run

    ● Invalid return value:
      `process()` or/and `processAsync()` method of code transformer found at 
      "/src/repo/node_modules/mustache-jest/index.js" 
      should return an object or a Promise resolving to an object. The object 
      must have `code` property with a string of processed code.
      This error may be caused by a breaking change in Jest 28:
      https://jestjs.io/docs/28.x/upgrading-to-jest28#transformer
      Code Transformation Documentation:
      https://jestjs.io/docs/code-transformation

      4 |  * TableOfContents Mustache templates
      5 |  */
    > 6 | const templateTocContents = require( /** @type {string} */ ( './templates/TableOfContents__list.mustache' ) );
        |                             ^
      7 | const templateTocLine = require( /** @type {string} */ ( './templates/TableOfContents__line.mustache' ) );
      8 | /**
      9 |  * TableOfContents Config object for filling mustache templates

      at ScriptTransformer._buildTransformResult (node_modules/@jest/transform/build/ScriptTransformer.js:442:15)
      at ScriptTransformer.transformSource (node_modules/@jest/transform/build/ScriptTransformer.js:554:17)
      at ScriptTransformer._transformAndBuildScript (node_modules/@jest/transform/build/ScriptTransformer.js:674:40)
      at ScriptTransformer.transform (node_modules/@jest/transform/build/ScriptTransformer.js:726:19)
      at Object.require (resources/skins.vector.js/tableOfContents.js:6:29)
      at Object.<anonymous> (tests/jest/tableOfContents.test.js:9:29)


Snapshot Summary
 › 17 snapshots updated from 7 test suites.

Test Suites: 2 failed, 19 passed, 21 total
Tests:       91 passed, 91 total
Snapshots:   17 updated, 2 passed, 19 total
Time:        5.714 s
Ran all test suites.
--- stdout ---
--------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------
File                            | % Stmts | % Branch | % Funcs | % Lines | Uncovered Line #s                                                                     
--------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------
All files                       |   36.35 |    28.69 |   32.49 |   36.46 |                                                                                       
 skins.vector.clientPreferences |   60.51 |    43.66 |   58.82 |    60.2 |                                                                                       
  clientPreferences.js          |   60.51 |    43.66 |   58.82 |    60.2 | 60-88,143-160,179,193-228,257,294,300,321,326-327,343,350-353,367,397-403,420,440-459 
 skins.vector.js                |   32.32 |    27.75 |   28.11 |   32.58 |                                                                                       
  AB.js                         |     100 |    93.33 |     100 |     100 | 198                                                                                   
  deferUntilFrame.js            |     100 |      100 |     100 |     100 |                                                                                       
  disableNightModeIfGadget.js   |      70 |       70 |      60 |      70 | 59-77,89                                                                              
  dropdownMenus.js              |   90.38 |       80 |   83.33 |   90.38 | 26,89,99,132,161                                                                      
  echo.js                       |       0 |        0 |       0 |       0 | 6-36                                                                                  
  features.js                   |   71.42 |    55.55 |      50 |   71.42 | 19-20,26-27,85-103                                                                    
  languageButton.js             |       0 |        0 |       0 |       0 | 9-52                                                                                  
  menuTabs.js                   |     100 |      100 |     100 |     100 |                                                                                       
  pinnableElement.js            |   78.94 |    76.31 |      75 |   79.78 | 25,29-30,34-35,82-86,134,184,208,231,278-294                                          
  popupNotification.js          |   91.66 |    64.28 |      75 |   91.66 | 74,77                                                                                 
  portlets.js                   |   85.52 |    58.06 |      60 |   85.52 | 20,35-37,60,113,126-132                                                               
  scrollObserver.js             |       0 |        0 |       0 |       0 | 2-52                                                                                  
  searchLoader.js               |       0 |        0 |       0 |       0 | 12-123                                                                                
  searchToggle.js               |   13.33 |        0 |       0 |   13.33 | 18-94,110-125                                                                         
  sectionObserver.js            |       0 |        0 |       0 |       0 | 46-187                                                                                
  setupIntersectionObservers.js |       0 |        0 |       0 |       0 | 3-369                                                                                 
  skin.js                       |       0 |        0 |       0 |       0 | 1-160                                                                                 
  stickyHeader.js               |    16.9 |      3.5 |   19.44 |   16.99 | 27-66,94-111,128-140,169-390,427-429,449-586                                          
  stickyHeaderAB.js             |       0 |        0 |       0 |       0 |                                                                                       
  tableOfContents.js            |       0 |        0 |       0 |       0 | 6-633                                                                                 
  tables.js                     |   86.36 |    81.25 |     100 |   86.36 | 4,28,34                                                                               
  userPreferences.js            |   33.33 |        0 |       0 |   33.33 | 8-10                                                                                  
  watchstar.js                  |      20 |        0 |       0 |      20 | 7-24,29-36                                                                            
 skins.vector.legacy.js         |   22.22 |    12.16 |    6.66 |   22.22 |                                                                                       
  collapsibleTabs.js            |       0 |        0 |       0 |       0 | 13-236                                                                                
  portlets.js                   |   83.33 |    64.28 |   66.66 |   83.33 | 18,35-37,47,85-88                                                                     
  skin-legacy.js                |       0 |      100 |       0 |       0 | 4-19                                                                                  
  vector.js                     |       0 |        0 |       0 |       0 | 7-118                                                                                 
 skins.vector.search            |   58.33 |    46.51 |   55.55 |   58.33 |                                                                                       
  App.vue                       |    42.3 |    16.66 |   35.29 |    42.3 | 121-180,185-187,242-246                                                               
  fetch.js                      |     100 |       75 |      75 |     100 | 28                                                                                    
  instrumentation.js            |      80 |      100 |      60 |      80 | 11-25                                                                                 
  restSearchClient.js           |     100 |       75 |     100 |     100 | 26-48                                                                                 
  skins.vector.search.js        |       0 |        0 |       0 |       0 | 4-51                                                                                  
  types.js                      |       0 |        0 |       0 |       0 |                                                                                       
  urlGenerator.js               |     100 |      100 |     100 |     100 |                                                                                       
--------------------------------|---------|----------|---------|---------|---------------------------------------------------------------------------------------

--- end ---
Traceback (most recent call last):
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 325, in npm_test
    self.check_call(["npm", "test"])
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/shell2.py", line 59, in check_call
    res.check_returncode()
  File "/usr/lib/python3.11/subprocess.py", line 502, in check_returncode
    raise CalledProcessError(self.returncode, self.args, self.stdout,
subprocess.CalledProcessError: Command '['/usr/bin/npm', 'test']' returned non-zero exit status 1.

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 1964, in main
    libup.run(args.repo, args.output, args.branch)
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 1902, in run
    self.npm_upgrade(plan)
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 1252, in npm_upgrade
    self.npm_test()
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/__init__.py", line 330, in npm_test
    self.check_call(["node_modules/.bin/jest", "-u"])
  File "/venv/lib/python3.11/site-packages/runner-0.1.0-py3.11.egg/runner/shell2.py", line 59, in check_call
    res.check_returncode()
  File "/usr/lib/python3.11/subprocess.py", line 502, in check_returncode
    raise CalledProcessError(self.returncode, self.args, self.stdout,
subprocess.CalledProcessError: Command '['node_modules/.bin/jest', '-u']' returned non-zero exit status 1.
Source code is licensed under the AGPL.